@qzsy/vinext 0.1.7
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/LICENSE +21 -0
- package/README.md +773 -0
- package/dist/build/assets-ignore.d.ts +32 -0
- package/dist/build/assets-ignore.js +48 -0
- package/dist/build/clean-output.d.ts +13 -0
- package/dist/build/clean-output.js +34 -0
- package/dist/build/client-build-config.d.ts +171 -0
- package/dist/build/client-build-config.js +270 -0
- package/dist/build/css-url-assets.d.ts +29 -0
- package/dist/build/css-url-assets.js +213 -0
- package/dist/build/google-fonts/build-url.d.ts +9 -0
- package/dist/build/google-fonts/build-url.js +28 -0
- package/dist/build/google-fonts/fallback-metrics-data.js +14029 -0
- package/dist/build/google-fonts/fallback-metrics.d.ts +12 -0
- package/dist/build/google-fonts/fallback-metrics.js +44 -0
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +16 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +28 -0
- package/dist/build/google-fonts/font-data.js +24983 -0
- package/dist/build/google-fonts/font-metadata.d.ts +16 -0
- package/dist/build/google-fonts/font-metadata.js +5 -0
- package/dist/build/google-fonts/get-axes.d.ts +6 -0
- package/dist/build/google-fonts/get-axes.js +37 -0
- package/dist/build/google-fonts/sort-variants.d.ts +4 -0
- package/dist/build/google-fonts/sort-variants.js +12 -0
- package/dist/build/google-fonts/validate.d.ts +27 -0
- package/dist/build/google-fonts/validate.js +54 -0
- package/dist/build/inline-css.d.ts +6 -0
- package/dist/build/inline-css.js +48 -0
- package/dist/build/layout-classification-types.d.ts +61 -0
- package/dist/build/layout-classification-types.js +1 -0
- package/dist/build/layout-classification.d.ts +59 -0
- package/dist/build/layout-classification.js +98 -0
- package/dist/build/next-client-runtime-manifests.d.ts +14 -0
- package/dist/build/next-client-runtime-manifests.js +39 -0
- package/dist/build/nitro-route-rules.d.ts +49 -0
- package/dist/build/nitro-route-rules.js +79 -0
- package/dist/build/precompress.d.ts +27 -0
- package/dist/build/precompress.js +110 -0
- package/dist/build/prerender.d.ts +209 -0
- package/dist/build/prerender.js +932 -0
- package/dist/build/report.d.ts +132 -0
- package/dist/build/report.js +504 -0
- package/dist/build/route-classification-injector.d.ts +34 -0
- package/dist/build/route-classification-injector.js +59 -0
- package/dist/build/route-classification-manifest.d.ts +52 -0
- package/dist/build/route-classification-manifest.js +143 -0
- package/dist/build/run-prerender.d.ts +61 -0
- package/dist/build/run-prerender.js +224 -0
- package/dist/build/server-manifest.d.ts +18 -0
- package/dist/build/server-manifest.js +22 -0
- package/dist/build/ssr-manifest.d.ts +18 -0
- package/dist/build/ssr-manifest.js +69 -0
- package/dist/build/standalone.d.ts +31 -0
- package/dist/build/standalone.js +203 -0
- package/dist/build/static-export.d.ts +55 -0
- package/dist/build/static-export.js +60 -0
- package/dist/cache/cache-adapters-virtual.d.ts +50 -0
- package/dist/cache/cache-adapters-virtual.js +45 -0
- package/dist/cache.d.ts +2 -0
- package/dist/cache.js +2 -0
- package/dist/check.d.ts +87 -0
- package/dist/check.js +1037 -0
- package/dist/cli-args.d.ts +33 -0
- package/dist/cli-args.js +124 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +744 -0
- package/dist/client/app-nav-failure-handler.d.ts +8 -0
- package/dist/client/app-nav-failure-handler.js +44 -0
- package/dist/client/empty-module.d.ts +1 -0
- package/dist/client/empty-module.js +1 -0
- package/dist/client/instrumentation-client-inject.d.ts +33 -0
- package/dist/client/instrumentation-client-inject.js +55 -0
- package/dist/client/instrumentation-client-state.d.ts +9 -0
- package/dist/client/instrumentation-client-state.js +17 -0
- package/dist/client/instrumentation-client.d.ts +7 -0
- package/dist/client/instrumentation-client.js +6 -0
- package/dist/client/navigation-runtime.d.ts +70 -0
- package/dist/client/navigation-runtime.js +169 -0
- package/dist/client/pages-router-link-navigation.d.ts +61 -0
- package/dist/client/pages-router-link-navigation.js +42 -0
- package/dist/client/validate-module-path.d.ts +17 -0
- package/dist/client/validate-module-path.js +24 -0
- package/dist/client/vinext-next-data.d.ts +44 -0
- package/dist/client/vinext-next-data.js +50 -0
- package/dist/client/window-next.d.ts +168 -0
- package/dist/client/window-next.js +57 -0
- package/dist/cloudflare/index.d.ts +3 -0
- package/dist/cloudflare/index.js +3 -0
- package/dist/cloudflare/src/cache/cdn-adapter.runtime.js +102 -0
- package/dist/cloudflare/src/cache/kv-data-adapter.runtime.d.ts +126 -0
- package/dist/cloudflare/src/cache/kv-data-adapter.runtime.js +435 -0
- package/dist/cloudflare/src/utils/cache-control-metadata.js +20 -0
- package/dist/cloudflare/tpr.d.ts +82 -0
- package/dist/cloudflare/tpr.js +558 -0
- package/dist/config/config-matchers.d.ts +257 -0
- package/dist/config/config-matchers.js +1046 -0
- package/dist/config/dotenv.d.ts +56 -0
- package/dist/config/dotenv.js +88 -0
- package/dist/config/next-config.d.ts +540 -0
- package/dist/config/next-config.js +1050 -0
- package/dist/config/tsconfig-paths.d.ts +21 -0
- package/dist/config/tsconfig-paths.js +157 -0
- package/dist/deploy.d.ts +190 -0
- package/dist/deploy.js +1033 -0
- package/dist/entries/app-browser-entry.d.ts +29 -0
- package/dist/entries/app-browser-entry.js +83 -0
- package/dist/entries/app-rsc-entry.d.ts +81 -0
- package/dist/entries/app-rsc-entry.js +943 -0
- package/dist/entries/app-rsc-manifest.d.ts +53 -0
- package/dist/entries/app-rsc-manifest.js +294 -0
- package/dist/entries/app-ssr-entry.d.ts +15 -0
- package/dist/entries/app-ssr-entry.js +24 -0
- package/dist/entries/pages-client-entry.d.ts +11 -0
- package/dist/entries/pages-client-entry.js +204 -0
- package/dist/entries/pages-entry-helpers.d.ts +2 -0
- package/dist/entries/pages-entry-helpers.js +2 -0
- package/dist/entries/pages-server-entry.d.ts +11 -0
- package/dist/entries/pages-server-entry.js +398 -0
- package/dist/entries/runtime-entry-module.d.ts +25 -0
- package/dist/entries/runtime-entry-module.js +46 -0
- package/dist/index.d.ts +115 -0
- package/dist/index.js +2661 -0
- package/dist/init.d.ts +69 -0
- package/dist/init.js +253 -0
- package/dist/plugins/ast-utils.d.ts +20 -0
- package/dist/plugins/ast-utils.js +78 -0
- package/dist/plugins/async-hooks-stub.d.ts +18 -0
- package/dist/plugins/async-hooks-stub.js +40 -0
- package/dist/plugins/client-reference-dedup.d.ts +35 -0
- package/dist/plugins/client-reference-dedup.js +189 -0
- package/dist/plugins/css-data-url.d.ts +6 -0
- package/dist/plugins/css-data-url.js +83 -0
- package/dist/plugins/dynamic-preload-metadata.d.ts +13 -0
- package/dist/plugins/dynamic-preload-metadata.js +413 -0
- package/dist/plugins/extensionless-dynamic-import.d.ts +6 -0
- package/dist/plugins/extensionless-dynamic-import.js +155 -0
- package/dist/plugins/fonts.d.ts +95 -0
- package/dist/plugins/fonts.js +711 -0
- package/dist/plugins/import-meta-url.d.ts +16 -0
- package/dist/plugins/import-meta-url.js +353 -0
- package/dist/plugins/instrumentation-client.d.ts +6 -0
- package/dist/plugins/instrumentation-client.js +27 -0
- package/dist/plugins/middleware-export-validation.d.ts +5 -0
- package/dist/plugins/middleware-export-validation.js +36 -0
- package/dist/plugins/middleware-server-only.d.ts +53 -0
- package/dist/plugins/middleware-server-only.js +90 -0
- package/dist/plugins/og-asset-ownership.d.ts +27 -0
- package/dist/plugins/og-asset-ownership.js +285 -0
- package/dist/plugins/og-assets.d.ts +50 -0
- package/dist/plugins/og-assets.js +229 -0
- package/dist/plugins/optimize-imports.d.ts +42 -0
- package/dist/plugins/optimize-imports.js +587 -0
- package/dist/plugins/postcss.d.ts +26 -0
- package/dist/plugins/postcss.js +96 -0
- package/dist/plugins/remove-console.d.ts +21 -0
- package/dist/plugins/remove-console.js +177 -0
- package/dist/plugins/require-context.d.ts +6 -0
- package/dist/plugins/require-context.js +185 -0
- package/dist/plugins/rsc-client-reference-loaders.d.ts +6 -0
- package/dist/plugins/rsc-client-reference-loaders.js +46 -0
- package/dist/plugins/rsc-client-shim-excludes.d.ts +6 -0
- package/dist/plugins/rsc-client-shim-excludes.js +35 -0
- package/dist/plugins/sass.d.ts +62 -0
- package/dist/plugins/sass.js +268 -0
- package/dist/plugins/server-externals-manifest.d.ts +26 -0
- package/dist/plugins/server-externals-manifest.js +81 -0
- package/dist/plugins/strip-server-exports.d.ts +21 -0
- package/dist/plugins/strip-server-exports.js +519 -0
- package/dist/plugins/typeof-window.d.ts +14 -0
- package/dist/plugins/typeof-window.js +150 -0
- package/dist/plugins/wasm-module-import.d.ts +15 -0
- package/dist/plugins/wasm-module-import.js +50 -0
- package/dist/routing/app-route-graph.d.ts +336 -0
- package/dist/routing/app-route-graph.js +1518 -0
- package/dist/routing/app-router.d.ts +30 -0
- package/dist/routing/app-router.js +59 -0
- package/dist/routing/file-matcher.d.ts +60 -0
- package/dist/routing/file-matcher.js +147 -0
- package/dist/routing/pages-router.d.ts +48 -0
- package/dist/routing/pages-router.js +163 -0
- package/dist/routing/route-matching.d.ts +27 -0
- package/dist/routing/route-matching.js +42 -0
- package/dist/routing/route-pattern.d.ts +64 -0
- package/dist/routing/route-pattern.js +165 -0
- package/dist/routing/route-trie.d.ts +67 -0
- package/dist/routing/route-trie.js +143 -0
- package/dist/routing/route-validation.d.ts +10 -0
- package/dist/routing/route-validation.js +101 -0
- package/dist/routing/utils.d.ts +117 -0
- package/dist/routing/utils.js +242 -0
- package/dist/server/accept-encoding.d.ts +29 -0
- package/dist/server/accept-encoding.js +95 -0
- package/dist/server/api-handler.d.ts +17 -0
- package/dist/server/api-handler.js +276 -0
- package/dist/server/app-action-request.d.ts +4 -0
- package/dist/server/app-action-request.js +9 -0
- package/dist/server/app-bfcache-id.d.ts +5 -0
- package/dist/server/app-bfcache-id.js +5 -0
- package/dist/server/app-bfcache-identity.d.ts +36 -0
- package/dist/server/app-bfcache-identity.js +156 -0
- package/dist/server/app-browser-action-result.d.ts +64 -0
- package/dist/server/app-browser-action-result.js +111 -0
- package/dist/server/app-browser-client-reuse-manifest.d.ts +12 -0
- package/dist/server/app-browser-client-reuse-manifest.js +101 -0
- package/dist/server/app-browser-entry.d.ts +1 -0
- package/dist/server/app-browser-entry.js +1087 -0
- package/dist/server/app-browser-error.d.ts +13 -0
- package/dist/server/app-browser-error.js +52 -0
- package/dist/server/app-browser-history-controller.d.ts +104 -0
- package/dist/server/app-browser-history-controller.js +210 -0
- package/dist/server/app-browser-hydration.d.ts +32 -0
- package/dist/server/app-browser-hydration.js +29 -0
- package/dist/server/app-browser-interception-context.d.ts +24 -0
- package/dist/server/app-browser-interception-context.js +43 -0
- package/dist/server/app-browser-mpa-navigation.d.ts +16 -0
- package/dist/server/app-browser-mpa-navigation.js +42 -0
- package/dist/server/app-browser-navigation-controller.d.ts +109 -0
- package/dist/server/app-browser-navigation-controller.js +465 -0
- package/dist/server/app-browser-popstate.d.ts +26 -0
- package/dist/server/app-browser-popstate.js +44 -0
- package/dist/server/app-browser-rsc-redirect.d.ts +38 -0
- package/dist/server/app-browser-rsc-redirect.js +64 -0
- package/dist/server/app-browser-server-action-client.d.ts +32 -0
- package/dist/server/app-browser-server-action-client.js +128 -0
- package/dist/server/app-browser-server-action-navigation.d.ts +6 -0
- package/dist/server/app-browser-server-action-navigation.js +9 -0
- package/dist/server/app-browser-state.d.ts +140 -0
- package/dist/server/app-browser-state.js +315 -0
- package/dist/server/app-browser-stream.d.ts +28 -0
- package/dist/server/app-browser-stream.js +122 -0
- package/dist/server/app-browser-visible-commit.d.ts +78 -0
- package/dist/server/app-browser-visible-commit.js +241 -0
- package/dist/server/app-client-reference-preloader.d.ts +14 -0
- package/dist/server/app-client-reference-preloader.js +44 -0
- package/dist/server/app-elements-wire.d.ts +192 -0
- package/dist/server/app-elements-wire.js +443 -0
- package/dist/server/app-elements.d.ts +9 -0
- package/dist/server/app-elements.js +18 -0
- package/dist/server/app-fallback-renderer.d.ts +89 -0
- package/dist/server/app-fallback-renderer.js +136 -0
- package/dist/server/app-history-state.d.ts +85 -0
- package/dist/server/app-history-state.js +223 -0
- package/dist/server/app-hook-warning-suppression.d.ts +6 -0
- package/dist/server/app-hook-warning-suppression.js +10 -0
- package/dist/server/app-inline-css-client.d.ts +6 -0
- package/dist/server/app-inline-css-client.js +35 -0
- package/dist/server/app-interception-context-header.d.ts +32 -0
- package/dist/server/app-interception-context-header.js +42 -0
- package/dist/server/app-layout-param-observation.d.ts +43 -0
- package/dist/server/app-layout-param-observation.js +168 -0
- package/dist/server/app-middleware.d.ts +46 -0
- package/dist/server/app-middleware.js +168 -0
- package/dist/server/app-mounted-slots-header.d.ts +35 -0
- package/dist/server/app-mounted-slots-header.js +58 -0
- package/dist/server/app-optimistic-routing.d.ts +53 -0
- package/dist/server/app-optimistic-routing.js +227 -0
- package/dist/server/app-page-boundary-render.d.ts +85 -0
- package/dist/server/app-page-boundary-render.js +305 -0
- package/dist/server/app-page-boundary.d.ts +102 -0
- package/dist/server/app-page-boundary.js +120 -0
- package/dist/server/app-page-cache-finalizer.d.ts +62 -0
- package/dist/server/app-page-cache-finalizer.js +122 -0
- package/dist/server/app-page-cache-render.d.ts +53 -0
- package/dist/server/app-page-cache-render.js +91 -0
- package/dist/server/app-page-cache.d.ts +83 -0
- package/dist/server/app-page-cache.js +272 -0
- package/dist/server/app-page-dispatch.d.ts +223 -0
- package/dist/server/app-page-dispatch.js +610 -0
- package/dist/server/app-page-element-builder.d.ts +96 -0
- package/dist/server/app-page-element-builder.js +205 -0
- package/dist/server/app-page-execution.d.ts +138 -0
- package/dist/server/app-page-execution.js +328 -0
- package/dist/server/app-page-head.d.ts +65 -0
- package/dist/server/app-page-head.js +228 -0
- package/dist/server/app-page-method.d.ts +15 -0
- package/dist/server/app-page-method.js +25 -0
- package/dist/server/app-page-params.d.ts +8 -0
- package/dist/server/app-page-params.js +39 -0
- package/dist/server/app-page-ppr-runtime.d.ts +7 -0
- package/dist/server/app-page-ppr-runtime.js +70 -0
- package/dist/server/app-page-probe.d.ts +134 -0
- package/dist/server/app-page-probe.js +276 -0
- package/dist/server/app-page-render-identity.d.ts +21 -0
- package/dist/server/app-page-render-identity.js +40 -0
- package/dist/server/app-page-render-observation.d.ts +36 -0
- package/dist/server/app-page-render-observation.js +82 -0
- package/dist/server/app-page-render.d.ts +111 -0
- package/dist/server/app-page-render.js +602 -0
- package/dist/server/app-page-request.d.ts +137 -0
- package/dist/server/app-page-request.js +216 -0
- package/dist/server/app-page-response.d.ts +68 -0
- package/dist/server/app-page-response.js +120 -0
- package/dist/server/app-page-route-wiring.d.ts +151 -0
- package/dist/server/app-page-route-wiring.js +452 -0
- package/dist/server/app-page-search-params-observation.d.ts +10 -0
- package/dist/server/app-page-search-params-observation.js +20 -0
- package/dist/server/app-page-segment-state.d.ts +9 -0
- package/dist/server/app-page-segment-state.js +80 -0
- package/dist/server/app-page-stream.d.ts +151 -0
- package/dist/server/app-page-stream.js +143 -0
- package/dist/server/app-pages-bridge.d.ts +63 -0
- package/dist/server/app-pages-bridge.js +63 -0
- package/dist/server/app-post-middleware-context.d.ts +15 -0
- package/dist/server/app-post-middleware-context.js +26 -0
- package/dist/server/app-ppr-fallback-shell-render.d.ts +18 -0
- package/dist/server/app-ppr-fallback-shell-render.js +26 -0
- package/dist/server/app-ppr-fallback-shell.d.ts +33 -0
- package/dist/server/app-ppr-fallback-shell.js +89 -0
- package/dist/server/app-prerender-endpoints.d.ts +18 -0
- package/dist/server/app-prerender-endpoints.js +94 -0
- package/dist/server/app-prerender-static-params.d.ts +30 -0
- package/dist/server/app-prerender-static-params.js +81 -0
- package/dist/server/app-render-dependency.d.ts +14 -0
- package/dist/server/app-render-dependency.js +41 -0
- package/dist/server/app-request-context.d.ts +20 -0
- package/dist/server/app-request-context.js +29 -0
- package/dist/server/app-route-handler-cache.d.ts +46 -0
- package/dist/server/app-route-handler-cache.js +78 -0
- package/dist/server/app-route-handler-dispatch.d.ts +49 -0
- package/dist/server/app-route-handler-dispatch.js +163 -0
- package/dist/server/app-route-handler-execution.d.ts +86 -0
- package/dist/server/app-route-handler-execution.js +128 -0
- package/dist/server/app-route-handler-policy.d.ts +55 -0
- package/dist/server/app-route-handler-policy.js +58 -0
- package/dist/server/app-route-handler-response.d.ts +28 -0
- package/dist/server/app-route-handler-response.js +145 -0
- package/dist/server/app-route-handler-runtime.d.ts +39 -0
- package/dist/server/app-route-handler-runtime.js +250 -0
- package/dist/server/app-route-module-loader.d.ts +91 -0
- package/dist/server/app-route-module-loader.js +83 -0
- package/dist/server/app-router-entry.d.ts +13 -0
- package/dist/server/app-router-entry.js +49 -0
- package/dist/server/app-rsc-cache-busting.d.ts +64 -0
- package/dist/server/app-rsc-cache-busting.js +206 -0
- package/dist/server/app-rsc-embedded-chunks.d.ts +8 -0
- package/dist/server/app-rsc-embedded-chunks.js +32 -0
- package/dist/server/app-rsc-error-handler.d.ts +20 -0
- package/dist/server/app-rsc-error-handler.js +28 -0
- package/dist/server/app-rsc-errors.d.ts +40 -0
- package/dist/server/app-rsc-errors.js +60 -0
- package/dist/server/app-rsc-handler.d.ts +201 -0
- package/dist/server/app-rsc-handler.js +538 -0
- package/dist/server/app-rsc-render-mode.d.ts +11 -0
- package/dist/server/app-rsc-render-mode.js +25 -0
- package/dist/server/app-rsc-request-normalization.d.ts +48 -0
- package/dist/server/app-rsc-request-normalization.js +75 -0
- package/dist/server/app-rsc-response-finalizer.d.ts +37 -0
- package/dist/server/app-rsc-response-finalizer.js +54 -0
- package/dist/server/app-rsc-route-matching.d.ts +93 -0
- package/dist/server/app-rsc-route-matching.js +134 -0
- package/dist/server/app-segment-config.d.ts +46 -0
- package/dist/server/app-segment-config.js +113 -0
- package/dist/server/app-server-action-execution.d.ts +219 -0
- package/dist/server/app-server-action-execution.js +767 -0
- package/dist/server/app-ssr-entry.d.ts +52 -0
- package/dist/server/app-ssr-entry.js +295 -0
- package/dist/server/app-ssr-error-meta.d.ts +13 -0
- package/dist/server/app-ssr-error-meta.js +48 -0
- package/dist/server/app-ssr-router-instance.d.ts +6 -0
- package/dist/server/app-ssr-router-instance.js +24 -0
- package/dist/server/app-ssr-stream.d.ts +60 -0
- package/dist/server/app-ssr-stream.js +408 -0
- package/dist/server/app-static-generation.d.ts +15 -0
- package/dist/server/app-static-generation.js +19 -0
- package/dist/server/app-visited-response-cache.d.ts +23 -0
- package/dist/server/app-visited-response-cache.js +19 -0
- package/dist/server/artifact-compatibility.d.ts +54 -0
- package/dist/server/artifact-compatibility.js +91 -0
- package/dist/server/before-interactive-head.d.ts +17 -0
- package/dist/server/before-interactive-head.js +35 -0
- package/dist/server/cache-control.d.ts +37 -0
- package/dist/server/cache-control.js +56 -0
- package/dist/server/cache-headers.d.ts +6 -0
- package/dist/server/cache-headers.js +17 -0
- package/dist/server/cache-proof.d.ts +364 -0
- package/dist/server/cache-proof.js +794 -0
- package/dist/server/client-reuse-manifest.d.ts +104 -0
- package/dist/server/client-reuse-manifest.js +209 -0
- package/dist/server/client-trace-metadata.d.ts +30 -0
- package/dist/server/client-trace-metadata.js +81 -0
- package/dist/server/cookie-utils.d.ts +12 -0
- package/dist/server/cookie-utils.js +18 -0
- package/dist/server/csp.d.ts +10 -0
- package/dist/server/csp.js +41 -0
- package/dist/server/default-global-error-module.d.ts +19 -0
- package/dist/server/default-global-error-module.js +18 -0
- package/dist/server/default-not-found-module.d.ts +19 -0
- package/dist/server/default-not-found-module.js +18 -0
- package/dist/server/defer-until-stream-consumed.d.ts +7 -0
- package/dist/server/defer-until-stream-consumed.js +34 -0
- package/dist/server/dev-error-overlay-store.d.ts +39 -0
- package/dist/server/dev-error-overlay-store.js +86 -0
- package/dist/server/dev-error-overlay.d.ts +51 -0
- package/dist/server/dev-error-overlay.js +1341 -0
- package/dist/server/dev-initial-server-error.d.ts +9 -0
- package/dist/server/dev-initial-server-error.js +26 -0
- package/dist/server/dev-lockfile.d.ts +109 -0
- package/dist/server/dev-lockfile.js +179 -0
- package/dist/server/dev-module-runner.d.ts +30 -0
- package/dist/server/dev-module-runner.js +91 -0
- package/dist/server/dev-origin-check.d.ts +62 -0
- package/dist/server/dev-origin-check.js +156 -0
- package/dist/server/dev-route-files.d.ts +6 -0
- package/dist/server/dev-route-files.js +71 -0
- package/dist/server/dev-server.d.ts +58 -0
- package/dist/server/dev-server.js +1114 -0
- package/dist/server/dev-stack-sourcemap-endpoint.d.ts +4 -0
- package/dist/server/dev-stack-sourcemap-endpoint.js +4 -0
- package/dist/server/dev-stack-sourcemap.d.ts +43 -0
- package/dist/server/dev-stack-sourcemap.js +443 -0
- package/dist/server/document-initial-head.d.ts +6 -0
- package/dist/server/document-initial-head.js +33 -0
- package/dist/server/edge-api-runtime.d.ts +4 -0
- package/dist/server/edge-api-runtime.js +6 -0
- package/dist/server/file-based-metadata.d.ts +29 -0
- package/dist/server/file-based-metadata.js +401 -0
- package/dist/server/headers.d.ts +114 -0
- package/dist/server/headers.js +136 -0
- package/dist/server/html.d.ts +28 -0
- package/dist/server/html.js +41 -0
- package/dist/server/http-error-responses.d.ts +91 -0
- package/dist/server/http-error-responses.js +105 -0
- package/dist/server/hybrid-route-priority.d.ts +22 -0
- package/dist/server/hybrid-route-priority.js +33 -0
- package/dist/server/image-optimization.d.ts +130 -0
- package/dist/server/image-optimization.js +247 -0
- package/dist/server/implicit-tags.d.ts +6 -0
- package/dist/server/implicit-tags.js +44 -0
- package/dist/server/instrumentation-runtime.d.ts +49 -0
- package/dist/server/instrumentation-runtime.js +35 -0
- package/dist/server/instrumentation.d.ts +85 -0
- package/dist/server/instrumentation.js +130 -0
- package/dist/server/isr-cache.d.ts +127 -0
- package/dist/server/isr-cache.js +282 -0
- package/dist/server/isr-decision.d.ts +79 -0
- package/dist/server/isr-decision.js +70 -0
- package/dist/server/metadata-route-build-data.d.ts +24 -0
- package/dist/server/metadata-route-build-data.js +148 -0
- package/dist/server/metadata-route-response.d.ts +16 -0
- package/dist/server/metadata-route-response.js +205 -0
- package/dist/server/metadata-routes.d.ts +139 -0
- package/dist/server/metadata-routes.js +433 -0
- package/dist/server/middleware-matcher.d.ts +14 -0
- package/dist/server/middleware-matcher.js +111 -0
- package/dist/server/middleware-request-headers.d.ts +11 -0
- package/dist/server/middleware-request-headers.js +65 -0
- package/dist/server/middleware-response-headers.d.ts +12 -0
- package/dist/server/middleware-response-headers.js +42 -0
- package/dist/server/middleware-runtime.d.ts +67 -0
- package/dist/server/middleware-runtime.js +240 -0
- package/dist/server/middleware.d.ts +62 -0
- package/dist/server/middleware.js +114 -0
- package/dist/server/navigation-planner.d.ts +308 -0
- package/dist/server/navigation-planner.js +831 -0
- package/dist/server/navigation-trace.d.ts +68 -0
- package/dist/server/navigation-trace.js +71 -0
- package/dist/server/next-error-digest.d.ts +44 -0
- package/dist/server/next-error-digest.js +40 -0
- package/dist/server/normalize-path.d.ts +38 -0
- package/dist/server/normalize-path.js +70 -0
- package/dist/server/open-redirect.d.ts +12 -0
- package/dist/server/open-redirect.js +21 -0
- package/dist/server/operation-token.d.ts +40 -0
- package/dist/server/operation-token.js +85 -0
- package/dist/server/otel-tracer-extension.d.ts +45 -0
- package/dist/server/otel-tracer-extension.js +89 -0
- package/dist/server/pages-api-route.d.ts +83 -0
- package/dist/server/pages-api-route.js +75 -0
- package/dist/server/pages-asset-tags.d.ts +78 -0
- package/dist/server/pages-asset-tags.js +126 -0
- package/dist/server/pages-body-parser-config.d.ts +59 -0
- package/dist/server/pages-body-parser-config.js +77 -0
- package/dist/server/pages-data-route.d.ts +121 -0
- package/dist/server/pages-data-route.js +157 -0
- package/dist/server/pages-default-404.d.ts +30 -0
- package/dist/server/pages-default-404.js +38 -0
- package/dist/server/pages-dev-module-url.d.ts +4 -0
- package/dist/server/pages-dev-module-url.js +15 -0
- package/dist/server/pages-document-initial-props.d.ts +77 -0
- package/dist/server/pages-document-initial-props.js +109 -0
- package/dist/server/pages-get-initial-props.d.ts +67 -0
- package/dist/server/pages-get-initial-props.js +92 -0
- package/dist/server/pages-i18n.d.ts +106 -0
- package/dist/server/pages-i18n.js +183 -0
- package/dist/server/pages-media-type.d.ts +15 -0
- package/dist/server/pages-media-type.js +24 -0
- package/dist/server/pages-node-compat.d.ts +55 -0
- package/dist/server/pages-node-compat.js +235 -0
- package/dist/server/pages-page-data.d.ts +223 -0
- package/dist/server/pages-page-data.js +484 -0
- package/dist/server/pages-page-handler.d.ts +100 -0
- package/dist/server/pages-page-handler.js +403 -0
- package/dist/server/pages-page-method.d.ts +47 -0
- package/dist/server/pages-page-method.js +17 -0
- package/dist/server/pages-page-response.d.ts +138 -0
- package/dist/server/pages-page-response.js +285 -0
- package/dist/server/pages-readiness.d.ts +36 -0
- package/dist/server/pages-readiness.js +21 -0
- package/dist/server/pages-request-pipeline.d.ts +116 -0
- package/dist/server/pages-request-pipeline.js +311 -0
- package/dist/server/pages-revalidate.d.ts +15 -0
- package/dist/server/pages-revalidate.js +19 -0
- package/dist/server/pages-serializable-props.d.ts +24 -0
- package/dist/server/pages-serializable-props.js +67 -0
- package/dist/server/pregenerated-concrete-paths.d.ts +16 -0
- package/dist/server/pregenerated-concrete-paths.js +61 -0
- package/dist/server/prerender-manifest.d.ts +33 -0
- package/dist/server/prerender-manifest.js +54 -0
- package/dist/server/prerender-route-params.d.ts +23 -0
- package/dist/server/prerender-route-params.js +113 -0
- package/dist/server/prerender-work-unit-setup.d.ts +6 -0
- package/dist/server/prerender-work-unit-setup.js +28 -0
- package/dist/server/prod-server.d.ts +148 -0
- package/dist/server/prod-server.js +1136 -0
- package/dist/server/proxy-trust.d.ts +40 -0
- package/dist/server/proxy-trust.js +68 -0
- package/dist/server/request-log.d.ts +39 -0
- package/dist/server/request-log.js +56 -0
- package/dist/server/request-pipeline.d.ts +187 -0
- package/dist/server/request-pipeline.js +447 -0
- package/dist/server/rsc-stream-hints.d.ts +10 -0
- package/dist/server/rsc-stream-hints.js +41 -0
- package/dist/server/seed-cache.d.ts +29 -0
- package/dist/server/seed-cache.js +125 -0
- package/dist/server/server-action-not-found.d.ts +21 -0
- package/dist/server/server-action-not-found.js +62 -0
- package/dist/server/server-globals.d.ts +4 -0
- package/dist/server/server-globals.js +35 -0
- package/dist/server/skip-cache-proof.d.ts +61 -0
- package/dist/server/skip-cache-proof.js +168 -0
- package/dist/server/socket-error-backstop.d.ts +34 -0
- package/dist/server/socket-error-backstop.js +200 -0
- package/dist/server/static-file-cache.d.ts +56 -0
- package/dist/server/static-file-cache.js +231 -0
- package/dist/server/static-layout-client-reuse-proof.d.ts +15 -0
- package/dist/server/static-layout-client-reuse-proof.js +33 -0
- package/dist/server/streaming-metadata.d.ts +4 -0
- package/dist/server/streaming-metadata.js +8 -0
- package/dist/server/worker-utils.d.ts +7 -0
- package/dist/server/worker-utils.js +99 -0
- package/dist/shims/amp.d.ts +19 -0
- package/dist/shims/amp.js +23 -0
- package/dist/shims/app-router-scroll-state.d.ts +15 -0
- package/dist/shims/app-router-scroll-state.js +61 -0
- package/dist/shims/app-router-scroll.d.ts +29 -0
- package/dist/shims/app-router-scroll.js +141 -0
- package/dist/shims/app.d.ts +42 -0
- package/dist/shims/app.js +48 -0
- package/dist/shims/before-interactive-context.d.ts +40 -0
- package/dist/shims/before-interactive-context.js +8 -0
- package/dist/shims/cache-for-request.d.ts +57 -0
- package/dist/shims/cache-for-request.js +72 -0
- package/dist/shims/cache-handler.d.ts +106 -0
- package/dist/shims/cache-handler.js +176 -0
- package/dist/shims/cache-request-state.d.ts +47 -0
- package/dist/shims/cache-request-state.js +126 -0
- package/dist/shims/cache-runtime.d.ts +83 -0
- package/dist/shims/cache-runtime.js +452 -0
- package/dist/shims/cache.d.ts +145 -0
- package/dist/shims/cache.js +401 -0
- package/dist/shims/cdn-cache.d.ts +125 -0
- package/dist/shims/cdn-cache.js +100 -0
- package/dist/shims/client-hook-error.d.ts +13 -0
- package/dist/shims/client-hook-error.js +17 -0
- package/dist/shims/client-locale.d.ts +14 -0
- package/dist/shims/client-locale.js +11 -0
- package/dist/shims/client-only.d.ts +1 -0
- package/dist/shims/client-only.js +1 -0
- package/dist/shims/compat-router.d.ts +16 -0
- package/dist/shims/compat-router.js +25 -0
- package/dist/shims/config.d.ts +28 -0
- package/dist/shims/config.js +21 -0
- package/dist/shims/constants.d.ts +130 -0
- package/dist/shims/constants.js +167 -0
- package/dist/shims/default-global-error.d.ts +31 -0
- package/dist/shims/default-global-error.js +179 -0
- package/dist/shims/default-not-found.d.ts +11 -0
- package/dist/shims/default-not-found.js +59 -0
- package/dist/shims/document.d.ts +92 -0
- package/dist/shims/document.js +76 -0
- package/dist/shims/dynamic-preload-chunks.d.ts +8 -0
- package/dist/shims/dynamic-preload-chunks.js +79 -0
- package/dist/shims/dynamic.d.ts +35 -0
- package/dist/shims/dynamic.js +204 -0
- package/dist/shims/error-boundary-navigation.d.ts +7 -0
- package/dist/shims/error-boundary-navigation.js +44 -0
- package/dist/shims/error-boundary.d.ts +155 -0
- package/dist/shims/error-boundary.js +342 -0
- package/dist/shims/error.d.ts +31 -0
- package/dist/shims/error.js +123 -0
- package/dist/shims/error.react-server.d.ts +9 -0
- package/dist/shims/error.react-server.js +6 -0
- package/dist/shims/fetch-cache.d.ts +136 -0
- package/dist/shims/fetch-cache.js +766 -0
- package/dist/shims/font-google-base.d.ts +83 -0
- package/dist/shims/font-google-base.js +290 -0
- package/dist/shims/font-google.d.ts +2 -0
- package/dist/shims/font-google.js +2 -0
- package/dist/shims/font-local.d.ts +50 -0
- package/dist/shims/font-local.js +195 -0
- package/dist/shims/font-utils.d.ts +56 -0
- package/dist/shims/font-utils.js +107 -0
- package/dist/shims/form.d.ts +19 -0
- package/dist/shims/form.js +236 -0
- package/dist/shims/hash-scroll.d.ts +10 -0
- package/dist/shims/hash-scroll.js +47 -0
- package/dist/shims/head-state.d.ts +16 -0
- package/dist/shims/head-state.js +43 -0
- package/dist/shims/head.d.ts +73 -0
- package/dist/shims/head.js +340 -0
- package/dist/shims/headers.d.ts +253 -0
- package/dist/shims/headers.js +754 -0
- package/dist/shims/i18n-context.d.ts +22 -0
- package/dist/shims/i18n-context.js +42 -0
- package/dist/shims/i18n-state.d.ts +14 -0
- package/dist/shims/i18n-state.js +38 -0
- package/dist/shims/image-config.d.ts +45 -0
- package/dist/shims/image-config.js +85 -0
- package/dist/shims/image.d.ts +55 -0
- package/dist/shims/image.js +582 -0
- package/dist/shims/internal/als-registry.d.ts +14 -0
- package/dist/shims/internal/als-registry.js +80 -0
- package/dist/shims/internal/api-utils.d.ts +14 -0
- package/dist/shims/internal/api-utils.js +1 -0
- package/dist/shims/internal/app-page-props-cache-key.d.ts +5 -0
- package/dist/shims/internal/app-page-props-cache-key.js +16 -0
- package/dist/shims/internal/app-route-detection.d.ts +39 -0
- package/dist/shims/internal/app-route-detection.js +62 -0
- package/dist/shims/internal/app-router-context.d.ts +31 -0
- package/dist/shims/internal/app-router-context.js +28 -0
- package/dist/shims/internal/cookie-serialize.d.ts +45 -0
- package/dist/shims/internal/cookie-serialize.js +49 -0
- package/dist/shims/internal/cookies.d.ts +2 -0
- package/dist/shims/internal/cookies.js +2 -0
- package/dist/shims/internal/hybrid-client-route-owner.d.ts +31 -0
- package/dist/shims/internal/hybrid-client-route-owner.js +143 -0
- package/dist/shims/internal/interpolate-as.d.ts +25 -0
- package/dist/shims/internal/interpolate-as.js +196 -0
- package/dist/shims/internal/link-status-registry.d.ts +43 -0
- package/dist/shims/internal/link-status-registry.js +42 -0
- package/dist/shims/internal/make-hanging-promise.d.ts +15 -0
- package/dist/shims/internal/make-hanging-promise.js +44 -0
- package/dist/shims/internal/navigation-untracked.d.ts +35 -0
- package/dist/shims/internal/navigation-untracked.js +56 -0
- package/dist/shims/internal/pages-data-fetch-dedup.d.ts +54 -0
- package/dist/shims/internal/pages-data-fetch-dedup.js +121 -0
- package/dist/shims/internal/pages-data-target.d.ts +62 -0
- package/dist/shims/internal/pages-data-target.js +98 -0
- package/dist/shims/internal/pages-data-url.d.ts +41 -0
- package/dist/shims/internal/pages-data-url.js +71 -0
- package/dist/shims/internal/pages-router-accessor.d.ts +19 -0
- package/dist/shims/internal/pages-router-accessor.js +13 -0
- package/dist/shims/internal/route-pattern-for-warning.d.ts +27 -0
- package/dist/shims/internal/route-pattern-for-warning.js +40 -0
- package/dist/shims/internal/router-context.d.ts +7 -0
- package/dist/shims/internal/router-context.js +13 -0
- package/dist/shims/internal/utils.d.ts +52 -0
- package/dist/shims/internal/utils.js +27 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts +30 -0
- package/dist/shims/internal/work-unit-async-storage.js +17 -0
- package/dist/shims/layout-segment-context.d.ts +24 -0
- package/dist/shims/layout-segment-context.js +39 -0
- package/dist/shims/legacy-image.d.ts +41 -0
- package/dist/shims/legacy-image.js +49 -0
- package/dist/shims/link-prefetch.d.ts +41 -0
- package/dist/shims/link-prefetch.js +43 -0
- package/dist/shims/link.d.ts +102 -0
- package/dist/shims/link.js +687 -0
- package/dist/shims/metadata.d.ts +285 -0
- package/dist/shims/metadata.js +820 -0
- package/dist/shims/navigation-context-state.d.ts +40 -0
- package/dist/shims/navigation-context-state.js +116 -0
- package/dist/shims/navigation-errors.d.ts +55 -0
- package/dist/shims/navigation-errors.js +110 -0
- package/dist/shims/navigation-server.d.ts +3 -0
- package/dist/shims/navigation-server.js +3 -0
- package/dist/shims/navigation-state.d.ts +25 -0
- package/dist/shims/navigation-state.js +66 -0
- package/dist/shims/navigation.d.ts +286 -0
- package/dist/shims/navigation.js +1206 -0
- package/dist/shims/navigation.react-server.d.ts +14 -0
- package/dist/shims/navigation.react-server.js +32 -0
- package/dist/shims/offline.d.ts +4 -0
- package/dist/shims/offline.js +15 -0
- package/dist/shims/og.d.ts +17 -0
- package/dist/shims/og.js +48 -0
- package/dist/shims/pages-router-runtime.d.ts +12 -0
- package/dist/shims/pages-router-runtime.js +24 -0
- package/dist/shims/ppr-fallback-shell.d.ts +33 -0
- package/dist/shims/ppr-fallback-shell.js +170 -0
- package/dist/shims/readonly-url-search-params.d.ts +13 -0
- package/dist/shims/readonly-url-search-params.js +26 -0
- package/dist/shims/request-context.d.ts +58 -0
- package/dist/shims/request-context.js +45 -0
- package/dist/shims/request-state-types.d.ts +12 -0
- package/dist/shims/request-state-types.js +1 -0
- package/dist/shims/root-params.d.ts +12 -0
- package/dist/shims/root-params.js +30 -0
- package/dist/shims/router-state.d.ts +32 -0
- package/dist/shims/router-state.js +39 -0
- package/dist/shims/router.d.ts +192 -0
- package/dist/shims/router.js +1786 -0
- package/dist/shims/script-nonce-context.d.ts +11 -0
- package/dist/shims/script-nonce-context.js +23 -0
- package/dist/shims/script.d.ts +43 -0
- package/dist/shims/script.js +370 -0
- package/dist/shims/server-only.d.ts +1 -0
- package/dist/shims/server-only.js +1 -0
- package/dist/shims/server.d.ts +323 -0
- package/dist/shims/server.js +729 -0
- package/dist/shims/slot.d.ts +45 -0
- package/dist/shims/slot.js +230 -0
- package/dist/shims/thenable-params.d.ts +11 -0
- package/dist/shims/thenable-params.js +176 -0
- package/dist/shims/unified-request-context.d.ts +68 -0
- package/dist/shims/unified-request-context.js +86 -0
- package/dist/shims/unrecognized-action-error.d.ts +34 -0
- package/dist/shims/unrecognized-action-error.js +39 -0
- package/dist/shims/url-safety.d.ts +34 -0
- package/dist/shims/url-safety.js +70 -0
- package/dist/shims/url-utils.d.ts +51 -0
- package/dist/shims/url-utils.js +156 -0
- package/dist/shims/use-merged-ref.d.ts +6 -0
- package/dist/shims/use-merged-ref.js +38 -0
- package/dist/shims/web-vitals.d.ts +8 -0
- package/dist/shims/web-vitals.js +22 -0
- package/dist/typegen.d.ts +9 -0
- package/dist/typegen.js +228 -0
- package/dist/utils/asset-prefix.d.ts +96 -0
- package/dist/utils/asset-prefix.js +122 -0
- package/dist/utils/base-path.d.ts +31 -0
- package/dist/utils/base-path.js +45 -0
- package/dist/utils/built-asset-url.d.ts +4 -0
- package/dist/utils/built-asset-url.js +11 -0
- package/dist/utils/cache-control-metadata.d.ts +4 -0
- package/dist/utils/cache-control-metadata.js +12 -0
- package/dist/utils/client-build-manifest.d.ts +21 -0
- package/dist/utils/client-build-manifest.js +87 -0
- package/dist/utils/client-entry-manifest.d.ts +11 -0
- package/dist/utils/client-entry-manifest.js +29 -0
- package/dist/utils/client-runtime-metadata.d.ts +45 -0
- package/dist/utils/client-runtime-metadata.js +63 -0
- package/dist/utils/commonjs-loader.d.ts +16 -0
- package/dist/utils/commonjs-loader.js +100 -0
- package/dist/utils/compare.d.ts +4 -0
- package/dist/utils/compare.js +8 -0
- package/dist/utils/deployment-id.d.ts +8 -0
- package/dist/utils/deployment-id.js +22 -0
- package/dist/utils/dev-error-recovery-event.d.ts +4 -0
- package/dist/utils/dev-error-recovery-event.js +4 -0
- package/dist/utils/domain-locale.d.ts +26 -0
- package/dist/utils/domain-locale.js +50 -0
- package/dist/utils/encode-cache-tag.d.ts +30 -0
- package/dist/utils/encode-cache-tag.js +36 -0
- package/dist/utils/error-cause.d.ts +4 -0
- package/dist/utils/error-cause.js +95 -0
- package/dist/utils/has-trailing-comma.d.ts +24 -0
- package/dist/utils/has-trailing-comma.js +62 -0
- package/dist/utils/hash.d.ts +24 -0
- package/dist/utils/hash.js +55 -0
- package/dist/utils/html-limited-bots.d.ts +21 -0
- package/dist/utils/html-limited-bots.js +35 -0
- package/dist/utils/lazy-chunks.d.ts +59 -0
- package/dist/utils/lazy-chunks.js +112 -0
- package/dist/utils/manifest-paths.d.ts +30 -0
- package/dist/utils/manifest-paths.js +66 -0
- package/dist/utils/mdx-scan.d.ts +9 -0
- package/dist/utils/mdx-scan.js +34 -0
- package/dist/utils/navigation-signal.d.ts +4 -0
- package/dist/utils/navigation-signal.js +12 -0
- package/dist/utils/number.d.ts +4 -0
- package/dist/utils/number.js +6 -0
- package/dist/utils/parse-cookie.d.ts +13 -0
- package/dist/utils/parse-cookie.js +52 -0
- package/dist/utils/path.d.ts +22 -0
- package/dist/utils/path.js +30 -0
- package/dist/utils/prerender-output-paths.d.ts +14 -0
- package/dist/utils/prerender-output-paths.js +22 -0
- package/dist/utils/project.d.ts +76 -0
- package/dist/utils/project.js +213 -0
- package/dist/utils/promise.d.ts +4 -0
- package/dist/utils/promise.js +6 -0
- package/dist/utils/public-routes.d.ts +4 -0
- package/dist/utils/public-routes.js +48 -0
- package/dist/utils/query.d.ts +49 -0
- package/dist/utils/query.js +122 -0
- package/dist/utils/record.d.ts +4 -0
- package/dist/utils/record.js +6 -0
- package/dist/utils/regex.d.ts +4 -0
- package/dist/utils/regex.js +6 -0
- package/dist/utils/safe-json-file.d.ts +17 -0
- package/dist/utils/safe-json-file.js +23 -0
- package/dist/utils/sorted-array.d.ts +8 -0
- package/dist/utils/sorted-array.js +20 -0
- package/dist/utils/text-stream.d.ts +28 -0
- package/dist/utils/text-stream.js +64 -0
- package/dist/utils/vinext-root.d.ts +23 -0
- package/dist/utils/vinext-root.js +29 -0
- package/dist/utils/virtual-module.d.ts +5 -0
- package/dist/utils/virtual-module.js +0 -0
- package/dist/utils/vite-version.d.ts +21 -0
- package/dist/utils/vite-version.js +42 -0
- package/package.json +145 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
import { hasBasePath, removeTrailingSlash, stripBasePath } from "../utils/base-path.js";
|
|
2
|
+
import { INTERNAL_HEADERS, VINEXT_INTERNAL_HEADERS, VINEXT_STATIC_FILE_HEADER } from "./headers.js";
|
|
3
|
+
import { matchHeaders } from "../config/config-matchers.js";
|
|
4
|
+
import { forbiddenResponse, notFoundResponse } from "./http-error-responses.js";
|
|
5
|
+
import { isOpenRedirectShaped } from "./open-redirect.js";
|
|
6
|
+
//#region src/server/request-pipeline.ts
|
|
7
|
+
/**
|
|
8
|
+
* Shared request pipeline utilities.
|
|
9
|
+
*
|
|
10
|
+
* Extracted from generated entries and server hot paths to keep codegen focused
|
|
11
|
+
* on app shape while normal modules own request behavior. Some dev-server and
|
|
12
|
+
* worker-template setup code still has inline normalization that should be
|
|
13
|
+
* migrated in follow-up work.
|
|
14
|
+
*
|
|
15
|
+
* These utilities handle the common request lifecycle steps: protocol-
|
|
16
|
+
* relative URL guards, basePath stripping, trailing slash normalization,
|
|
17
|
+
* and CSRF origin validation.
|
|
18
|
+
*
|
|
19
|
+
* Plain-text error response builders (forbidden / not-found / etc.) live in
|
|
20
|
+
* `./http-error-responses.ts`.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Guard against protocol-relative URL open redirects.
|
|
24
|
+
*
|
|
25
|
+
* Paths like `//example.com/` would be redirected to `//example.com` by the
|
|
26
|
+
* trailing-slash normalizer, which browsers interpret as `http://example.com`.
|
|
27
|
+
* Backslashes are equivalent to forward slashes in the URL spec
|
|
28
|
+
* (e.g. `/\evil.com` is treated as `//evil.com` by browsers).
|
|
29
|
+
*
|
|
30
|
+
* Next.js returns 404 for these paths. We check the RAW pathname before
|
|
31
|
+
* normalization so the guard fires before normalizePath collapses `//`.
|
|
32
|
+
*
|
|
33
|
+
* Percent-encoded variants are also blocked because:
|
|
34
|
+
* - `%5C` decodes to `\` (browsers treat `/\evil.com` as `//evil.com`).
|
|
35
|
+
* - `%2F` decodes to `/` (so `/%2F/evil.com` effectively becomes `//evil.com`).
|
|
36
|
+
* These forms survive segment-wise decoding that re-encodes path delimiters
|
|
37
|
+
* (e.g. `normalizePathnameForRouteMatchStrict`), so a later trailing-slash
|
|
38
|
+
* redirect would still echo the encoded form in its `Location` header. See
|
|
39
|
+
* `isOpenRedirectShaped` for the full list of rejected leading-segment forms.
|
|
40
|
+
*
|
|
41
|
+
* @param rawPathname - The raw pathname from the URL, before any normalization
|
|
42
|
+
* @returns A 404 Response if the path is protocol-relative, or null to continue
|
|
43
|
+
*/
|
|
44
|
+
function guardProtocolRelativeUrl(rawPathname) {
|
|
45
|
+
if (isOpenRedirectShaped(rawPathname)) return notFoundResponse();
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const FILE_LIKE_PATHNAME_RE = /\.[^/]+\/?$/;
|
|
49
|
+
function isWellKnownPathname(pathname) {
|
|
50
|
+
return pathname === "/.well-known" || pathname.startsWith("/.well-known/");
|
|
51
|
+
}
|
|
52
|
+
function findHeaderRecordKey(headers, lowerName) {
|
|
53
|
+
for (const key of Object.keys(headers)) if (key.toLowerCase() === lowerName) return key;
|
|
54
|
+
}
|
|
55
|
+
function appendHeaderRecord(headers, lowerName, value) {
|
|
56
|
+
const key = findHeaderRecordKey(headers, lowerName) ?? lowerName;
|
|
57
|
+
const existing = headers[key];
|
|
58
|
+
if (existing === void 0) {
|
|
59
|
+
headers[key] = value;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (Array.isArray(existing)) {
|
|
63
|
+
existing.push(value);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
headers[key] = [existing, value];
|
|
67
|
+
}
|
|
68
|
+
function appendVaryHeaderRecord(headers, value) {
|
|
69
|
+
const key = findHeaderRecordKey(headers, "vary") ?? "vary";
|
|
70
|
+
const existing = headers[key];
|
|
71
|
+
if (existing === void 0) {
|
|
72
|
+
headers[key] = value;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (Array.isArray(existing)) {
|
|
76
|
+
existing.push(value);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
headers[key] = existing + ", " + value;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Apply matched next.config.js headers to a Web Headers object.
|
|
83
|
+
*
|
|
84
|
+
* Next.js evaluates config header match conditions against the original
|
|
85
|
+
* request snapshot. Middleware response headers still win for the same
|
|
86
|
+
* response key, while multi-value headers are additive.
|
|
87
|
+
*/
|
|
88
|
+
function applyConfigHeadersToResponse(responseHeaders, options) {
|
|
89
|
+
const matched = matchHeaders(options.pathname, options.configHeaders, options.requestContext, options.basePathState);
|
|
90
|
+
for (const header of matched) {
|
|
91
|
+
const lowerName = header.key.toLowerCase();
|
|
92
|
+
if (lowerName === "vary" || lowerName === "set-cookie") responseHeaders.append(header.key, header.value);
|
|
93
|
+
else if (options.overwriteExisting?.has(lowerName) || !responseHeaders.has(lowerName)) responseHeaders.set(header.key, header.value);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Apply matched next.config.js headers to the early response header record used
|
|
98
|
+
* by Node and Worker Pages Router pipelines before a concrete response exists.
|
|
99
|
+
*/
|
|
100
|
+
function applyConfigHeadersToHeaderRecord(headers, options) {
|
|
101
|
+
const matched = matchHeaders(options.pathname, options.configHeaders, options.requestContext, options.basePathState);
|
|
102
|
+
for (const header of matched) {
|
|
103
|
+
const lowerName = header.key.toLowerCase();
|
|
104
|
+
if (lowerName === "set-cookie") appendHeaderRecord(headers, lowerName, header.value);
|
|
105
|
+
else if (lowerName === "vary") appendVaryHeaderRecord(headers, header.value);
|
|
106
|
+
else if (findHeaderRecordKey(headers, lowerName) === void 0) headers[lowerName] = header.value;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function createStaticFileSignal(pathname, context) {
|
|
110
|
+
const headers = new Headers({ [VINEXT_STATIC_FILE_HEADER]: encodeURIComponent(pathname) });
|
|
111
|
+
if (context.headers) for (const [key, value] of context.headers) headers.append(key, value);
|
|
112
|
+
return new Response(null, {
|
|
113
|
+
status: context.status ?? 200,
|
|
114
|
+
headers
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Resolve the public/ filesystem-route slot in the Next.js routing order.
|
|
119
|
+
*
|
|
120
|
+
* Public files are checked after middleware and before afterFiles/fallback
|
|
121
|
+
* rewrites. The generated App Router entry provides the public-file set; this
|
|
122
|
+
* helper owns the request-method and RSC exclusions plus static-file signaling.
|
|
123
|
+
*/
|
|
124
|
+
function resolvePublicFileRoute(options) {
|
|
125
|
+
if (options.request.method !== "GET" && options.request.method !== "HEAD") return null;
|
|
126
|
+
if (options.pathname.endsWith(".rsc")) return null;
|
|
127
|
+
if (!options.publicFiles.has(options.cleanPathname)) return null;
|
|
128
|
+
return createStaticFileSignal(options.cleanPathname, options.middlewareContext);
|
|
129
|
+
}
|
|
130
|
+
function normalizeTrailingSlashPathname(pathname, trailingSlash) {
|
|
131
|
+
if (pathname === "/" || pathname === "/api" || pathname.startsWith("/api/")) return null;
|
|
132
|
+
const hasTrailing = pathname.endsWith("/");
|
|
133
|
+
if (trailingSlash) {
|
|
134
|
+
if (isWellKnownPathname(pathname)) return null;
|
|
135
|
+
if (FILE_LIKE_PATHNAME_RE.test(pathname)) {
|
|
136
|
+
const normalized = removeTrailingSlash(pathname);
|
|
137
|
+
return normalized === pathname ? null : normalized;
|
|
138
|
+
}
|
|
139
|
+
if (!hasTrailing && !pathname.endsWith(".rsc")) return `${pathname}/`;
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
if (hasTrailing) return removeTrailingSlash(pathname);
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Check if the pathname needs a trailing slash redirect, and return the
|
|
147
|
+
* redirect Response if so.
|
|
148
|
+
*
|
|
149
|
+
* Follows Next.js behavior:
|
|
150
|
+
* - `/api` routes are never redirected
|
|
151
|
+
* - The root path `/` is never redirected
|
|
152
|
+
* - If `trailingSlash` is true, redirect `/about` → `/about/`
|
|
153
|
+
* - If `trailingSlash` is true, redirect file-looking `/file.ext/` → `/file.ext`
|
|
154
|
+
* - If `trailingSlash` is true, do not redirect `/.well-known/*`
|
|
155
|
+
* - If `trailingSlash` is false (default), redirect `/about/` → `/about`
|
|
156
|
+
*
|
|
157
|
+
* @param pathname - The basePath-stripped pathname
|
|
158
|
+
* @param basePath - The basePath to prepend to the redirect Location
|
|
159
|
+
* @param trailingSlash - Whether trailing slashes should be enforced
|
|
160
|
+
* @param search - The query string (including `?`) to preserve in the redirect
|
|
161
|
+
* @returns A 308 redirect Response, or null if no redirect is needed
|
|
162
|
+
*/
|
|
163
|
+
function normalizeTrailingSlash(pathname, basePath, trailingSlash, search) {
|
|
164
|
+
if (pathname === "/" || pathname === "/api" || pathname.startsWith("/api/")) return null;
|
|
165
|
+
if (isOpenRedirectShaped(pathname)) return notFoundResponse();
|
|
166
|
+
const normalizedPathname = normalizeTrailingSlashPathname(pathname, trailingSlash);
|
|
167
|
+
if (normalizedPathname === null) return null;
|
|
168
|
+
const encodedPathname = normalizedPathname.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@/%]/gu, encodeURIComponent);
|
|
169
|
+
return new Response(null, {
|
|
170
|
+
status: 308,
|
|
171
|
+
headers: { Location: basePath + encodedPathname + search }
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Validate CSRF origin for server action requests.
|
|
176
|
+
*
|
|
177
|
+
* Matches Next.js behavior: compares the Origin header against the Host
|
|
178
|
+
* header. If they don't match, the request is rejected with 403 unless
|
|
179
|
+
* the origin is in the allowedOrigins list.
|
|
180
|
+
*
|
|
181
|
+
* @param request - The incoming Request
|
|
182
|
+
* @param allowedOrigins - Origins from experimental.serverActions.allowedOrigins
|
|
183
|
+
* @returns A 403 Response if origin validation fails, or null to continue
|
|
184
|
+
*/
|
|
185
|
+
function validateCsrfOrigin(request, allowedOrigins = []) {
|
|
186
|
+
const originHeader = request.headers.get("origin");
|
|
187
|
+
if (!originHeader) return null;
|
|
188
|
+
if (originHeader === "null") {
|
|
189
|
+
if (allowedOrigins.includes("null")) return null;
|
|
190
|
+
console.warn(`[vinext] CSRF origin "null" blocked for server action. To allow requests from sandboxed contexts, add "null" to experimental.serverActions.allowedOrigins.`);
|
|
191
|
+
return forbiddenResponse();
|
|
192
|
+
}
|
|
193
|
+
let originHost;
|
|
194
|
+
try {
|
|
195
|
+
originHost = new URL(originHeader).host.toLowerCase();
|
|
196
|
+
} catch {
|
|
197
|
+
return forbiddenResponse();
|
|
198
|
+
}
|
|
199
|
+
const hostHeader = (request.headers.get("host") || "").split(",")[0].trim().toLowerCase() || new URL(request.url).host.toLowerCase();
|
|
200
|
+
if (originHost === hostHeader) return null;
|
|
201
|
+
if (allowedOrigins.length > 0 && isOriginAllowed(originHost, allowedOrigins)) return null;
|
|
202
|
+
console.warn(`[vinext] CSRF origin mismatch: origin "${originHost}" does not match host "${hostHeader}". Blocking server action request.`);
|
|
203
|
+
return forbiddenResponse();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Reject malformed Flight container reference graphs in server action payloads.
|
|
207
|
+
*
|
|
208
|
+
* `@vitejs/plugin-rsc` vendors its own React Flight decoder. Malicious action
|
|
209
|
+
* payloads can abuse container references (`$Q`, `$W`, `$i`) to trigger very
|
|
210
|
+
* expensive deserialization before the action is even looked up.
|
|
211
|
+
*
|
|
212
|
+
* Legitimate React-encoded container payloads use separate numeric backing
|
|
213
|
+
* fields (e.g. field `1` plus root field `0` containing `"$Q1"`). We reject
|
|
214
|
+
* numeric backing-field graphs that contain missing backing fields or cycles.
|
|
215
|
+
* Regular user form fields are ignored entirely.
|
|
216
|
+
*/
|
|
217
|
+
async function validateServerActionPayload(body) {
|
|
218
|
+
const maxNumericFields = 4096;
|
|
219
|
+
const maxContainerReferences = 16384;
|
|
220
|
+
const maxContainerDepth = 1024;
|
|
221
|
+
const containerRefRe = /"\$([QWi])([0-9a-f]+)(?=[:"])/gi;
|
|
222
|
+
const fieldRefs = /* @__PURE__ */ new Map();
|
|
223
|
+
let referenceCount = 0;
|
|
224
|
+
const invalidPayloadResponse = () => new Response("Invalid server action payload", {
|
|
225
|
+
status: 400,
|
|
226
|
+
headers: { "Content-Type": "text/plain" }
|
|
227
|
+
});
|
|
228
|
+
const collectRefs = (fieldKey, text) => {
|
|
229
|
+
if (fieldRefs.has(fieldKey)) return true;
|
|
230
|
+
if (fieldRefs.size >= maxNumericFields) return false;
|
|
231
|
+
const refs = /* @__PURE__ */ new Set();
|
|
232
|
+
let match;
|
|
233
|
+
containerRefRe.lastIndex = 0;
|
|
234
|
+
while ((match = containerRefRe.exec(text)) !== null) {
|
|
235
|
+
const previousSize = refs.size;
|
|
236
|
+
refs.add(String(Number.parseInt(match[2], 16)));
|
|
237
|
+
if (refs.size !== previousSize && ++referenceCount > maxContainerReferences) return false;
|
|
238
|
+
}
|
|
239
|
+
fieldRefs.set(fieldKey, refs);
|
|
240
|
+
return true;
|
|
241
|
+
};
|
|
242
|
+
if (typeof body === "string") {
|
|
243
|
+
if (!collectRefs("0", body)) return invalidPayloadResponse();
|
|
244
|
+
} else for (const [key, value] of body.entries()) {
|
|
245
|
+
if (!/^\d+$/.test(key)) continue;
|
|
246
|
+
if (typeof value === "string") {
|
|
247
|
+
if (!collectRefs(key, value)) return invalidPayloadResponse();
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
if (typeof value?.text === "function") {
|
|
251
|
+
if (!collectRefs(key, await value.text())) return invalidPayloadResponse();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (fieldRefs.size === 0) return null;
|
|
255
|
+
const knownFields = new Set(fieldRefs.keys());
|
|
256
|
+
for (const refs of fieldRefs.values()) for (const ref of refs) if (!knownFields.has(ref)) return invalidPayloadResponse();
|
|
257
|
+
const state = /* @__PURE__ */ new Map();
|
|
258
|
+
for (const root of fieldRefs.keys()) {
|
|
259
|
+
if (state.has(root)) continue;
|
|
260
|
+
const stack = [{
|
|
261
|
+
node: root,
|
|
262
|
+
refs: [...fieldRefs.get(root) ?? []],
|
|
263
|
+
nextRef: 0
|
|
264
|
+
}];
|
|
265
|
+
state.set(root, "visiting");
|
|
266
|
+
while (stack.length > 0) {
|
|
267
|
+
if (stack.length > maxContainerDepth) return invalidPayloadResponse();
|
|
268
|
+
const frame = stack[stack.length - 1];
|
|
269
|
+
const ref = frame.refs[frame.nextRef++];
|
|
270
|
+
if (ref === void 0) {
|
|
271
|
+
state.set(frame.node, "visited");
|
|
272
|
+
stack.pop();
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
const refState = state.get(ref);
|
|
276
|
+
if (refState === "visiting") return invalidPayloadResponse();
|
|
277
|
+
if (refState === "visited") continue;
|
|
278
|
+
state.set(ref, "visiting");
|
|
279
|
+
stack.push({
|
|
280
|
+
node: ref,
|
|
281
|
+
refs: [...fieldRefs.get(ref) ?? []],
|
|
282
|
+
nextRef: 0
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Check if an origin matches any pattern in the allowed origins list.
|
|
290
|
+
* Supports wildcard subdomains (e.g. `*.example.com`).
|
|
291
|
+
*/
|
|
292
|
+
/**
|
|
293
|
+
* Segment-by-segment domain matching for wildcard origin patterns.
|
|
294
|
+
* `*` matches exactly one DNS label; `**` matches one or more labels.
|
|
295
|
+
*
|
|
296
|
+
* Ported from Next.js: packages/next/src/server/app-render/csrf-protection.ts
|
|
297
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/server/app-render/csrf-protection.ts
|
|
298
|
+
*/
|
|
299
|
+
function matchWildcardDomain(domain, pattern) {
|
|
300
|
+
const normalizedDomain = domain.replace(/[A-Z]/g, (c) => c.toLowerCase());
|
|
301
|
+
const normalizedPattern = pattern.replace(/[A-Z]/g, (c) => c.toLowerCase());
|
|
302
|
+
const domainParts = normalizedDomain.split(".");
|
|
303
|
+
const patternParts = normalizedPattern.split(".");
|
|
304
|
+
if (patternParts.length < 1) return false;
|
|
305
|
+
if (domainParts.length < patternParts.length) return false;
|
|
306
|
+
if (patternParts.length === 1 && (patternParts[0] === "*" || patternParts[0] === "**")) return false;
|
|
307
|
+
while (patternParts.length) {
|
|
308
|
+
const patternPart = patternParts.pop();
|
|
309
|
+
const domainPart = domainParts.pop();
|
|
310
|
+
if (patternPart === void 0) return false;
|
|
311
|
+
switch (patternPart) {
|
|
312
|
+
case "": return false;
|
|
313
|
+
case "*": if (domainPart) continue;
|
|
314
|
+
else return false;
|
|
315
|
+
case "**":
|
|
316
|
+
if (patternParts.length > 0) return false;
|
|
317
|
+
return domainPart !== void 0;
|
|
318
|
+
default: if (patternPart !== domainPart) return false;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return domainParts.length === 0;
|
|
322
|
+
}
|
|
323
|
+
function isOriginAllowed(origin, allowed) {
|
|
324
|
+
for (const pattern of allowed) if (pattern.includes("*")) {
|
|
325
|
+
if (matchWildcardDomain(origin, pattern)) return true;
|
|
326
|
+
} else if (origin.toLowerCase() === pattern.toLowerCase()) return true;
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Strip internal `x-middleware-*` headers from a Headers object.
|
|
331
|
+
*
|
|
332
|
+
* Middleware uses `x-middleware-*` headers as internal signals (e.g.
|
|
333
|
+
* `x-middleware-next`, `x-middleware-rewrite`, `x-middleware-request-*`).
|
|
334
|
+
* These must be removed before sending the response to the client.
|
|
335
|
+
*
|
|
336
|
+
* @param headers - The Headers object to modify in place
|
|
337
|
+
*/
|
|
338
|
+
function processMiddlewareHeaders(headers) {
|
|
339
|
+
const keysToDelete = [];
|
|
340
|
+
for (const key of headers.keys()) if (key.startsWith("x-middleware-")) keysToDelete.push(key);
|
|
341
|
+
for (const key of keysToDelete) headers.delete(key);
|
|
342
|
+
}
|
|
343
|
+
const STRIPPED_INTERNAL_HEADERS = new Set([...INTERNAL_HEADERS, ...VINEXT_INTERNAL_HEADERS]);
|
|
344
|
+
/**
|
|
345
|
+
* Strip internal headers from an inbound request so they cannot be forged by
|
|
346
|
+
* an external attacker to influence routing or impersonate internal state.
|
|
347
|
+
*
|
|
348
|
+
* Must be called at every request entry point BEFORE middleware, routing,
|
|
349
|
+
* or any handler logic accesses the request headers.
|
|
350
|
+
*
|
|
351
|
+
* Returns a new Headers object with internal headers removed. The input
|
|
352
|
+
* is never mutated — Request.headers is immutable in Workers/miniflare
|
|
353
|
+
* environments (see applyMiddlewareRequestHeaders in config-matchers.ts
|
|
354
|
+
* for the same cloning pattern).
|
|
355
|
+
*
|
|
356
|
+
* @param headers - The source Headers (never modified)
|
|
357
|
+
* @returns A new Headers with internal framework headers removed
|
|
358
|
+
*/
|
|
359
|
+
function filterInternalHeaders(headers) {
|
|
360
|
+
const filtered = new Headers();
|
|
361
|
+
for (const [key, value] of headers) if (!STRIPPED_INTERNAL_HEADERS.has(key.toLowerCase())) filtered.append(key, value);
|
|
362
|
+
return filtered;
|
|
363
|
+
}
|
|
364
|
+
function getRequestCf(request) {
|
|
365
|
+
const cf = Reflect.get(request, "cf");
|
|
366
|
+
return cf === void 0 ? void 0 : cf;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Clone a Request while overriding headers, preserving metadata when possible.
|
|
370
|
+
*
|
|
371
|
+
* Some runtimes (Workers) allow `new Request(request, { headers })` which
|
|
372
|
+
* retains redirect/signal/cf data. Others (Node/undici across realms) can throw
|
|
373
|
+
* when cloning a foreign Request instance. In that case, fall back to building
|
|
374
|
+
* a RequestInit with best-effort metadata.
|
|
375
|
+
*/
|
|
376
|
+
function cloneRequestWithHeaders(request, headers) {
|
|
377
|
+
let cloned;
|
|
378
|
+
try {
|
|
379
|
+
cloned = new Request(request, { headers });
|
|
380
|
+
} catch {
|
|
381
|
+
const init = {
|
|
382
|
+
method: request.method,
|
|
383
|
+
headers,
|
|
384
|
+
body: request.body ?? void 0,
|
|
385
|
+
redirect: request.redirect,
|
|
386
|
+
signal: request.signal,
|
|
387
|
+
integrity: request.integrity,
|
|
388
|
+
cache: request.cache,
|
|
389
|
+
mode: request.mode,
|
|
390
|
+
credentials: request.credentials,
|
|
391
|
+
referrer: request.referrer,
|
|
392
|
+
referrerPolicy: request.referrerPolicy
|
|
393
|
+
};
|
|
394
|
+
if (request.body) init.duplex = "half";
|
|
395
|
+
cloned = new Request(request.url, init);
|
|
396
|
+
}
|
|
397
|
+
const cf = getRequestCf(request);
|
|
398
|
+
if (cf !== void 0) Object.defineProperty(cloned, "cf", {
|
|
399
|
+
value: cf,
|
|
400
|
+
enumerable: true,
|
|
401
|
+
configurable: true
|
|
402
|
+
});
|
|
403
|
+
return cloned;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Clone a Request while overriding the URL, preserving headers and metadata
|
|
407
|
+
* when possible.
|
|
408
|
+
*
|
|
409
|
+
* Mirrors `cloneRequestWithHeaders`, but rewrites the URL instead of the
|
|
410
|
+
* headers. Workers support `new Request(url, request)` to copy method/headers/
|
|
411
|
+
* body onto a new URL; Node/undici can throw on a foreign Request instance, so
|
|
412
|
+
* we fall back to a manual RequestInit. `new Request()` does not copy the
|
|
413
|
+
* Workers-specific `cf` property and omits `duplex` for streaming bodies, so
|
|
414
|
+
* both are handled explicitly — the same reasons `cloneRequestWithHeaders`
|
|
415
|
+
* exists.
|
|
416
|
+
*/
|
|
417
|
+
function cloneRequestWithUrl(request, url) {
|
|
418
|
+
let cloned;
|
|
419
|
+
try {
|
|
420
|
+
cloned = new Request(url, request);
|
|
421
|
+
} catch {
|
|
422
|
+
const init = {
|
|
423
|
+
method: request.method,
|
|
424
|
+
headers: request.headers,
|
|
425
|
+
body: request.body ?? void 0,
|
|
426
|
+
redirect: request.redirect,
|
|
427
|
+
signal: request.signal,
|
|
428
|
+
integrity: request.integrity,
|
|
429
|
+
cache: request.cache,
|
|
430
|
+
mode: request.mode,
|
|
431
|
+
credentials: request.credentials,
|
|
432
|
+
referrer: request.referrer,
|
|
433
|
+
referrerPolicy: request.referrerPolicy
|
|
434
|
+
};
|
|
435
|
+
if (request.body) init.duplex = "half";
|
|
436
|
+
cloned = new Request(url, init);
|
|
437
|
+
}
|
|
438
|
+
const cf = getRequestCf(request);
|
|
439
|
+
if (cf !== void 0) Object.defineProperty(cloned, "cf", {
|
|
440
|
+
value: cf,
|
|
441
|
+
enumerable: true,
|
|
442
|
+
configurable: true
|
|
443
|
+
});
|
|
444
|
+
return cloned;
|
|
445
|
+
}
|
|
446
|
+
//#endregion
|
|
447
|
+
export { INTERNAL_HEADERS, VINEXT_INTERNAL_HEADERS, applyConfigHeadersToHeaderRecord, applyConfigHeadersToResponse, cloneRequestWithHeaders, cloneRequestWithUrl, createStaticFileSignal, filterInternalHeaders, guardProtocolRelativeUrl, hasBasePath, isOpenRedirectShaped, isOriginAllowed, normalizeTrailingSlash, normalizeTrailingSlashPathname, processMiddlewareHeaders, resolvePublicFileRoute, stripBasePath, validateCsrfOrigin, validateServerActionPayload };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/server/rsc-stream-hints.d.ts
|
|
2
|
+
declare function normalizeReactFlightPreloadHints(stream: ReadableStream<Uint8Array>): ReadableStream<Uint8Array>;
|
|
3
|
+
type RscRawRenderer = (model: unknown, options?: unknown) => ReadableStream<Uint8Array>;
|
|
4
|
+
type RscRawPrerenderer = (model: unknown, options?: unknown) => Promise<{
|
|
5
|
+
prelude: ReadableStream<Uint8Array>;
|
|
6
|
+
}>;
|
|
7
|
+
declare function createRscRenderer(render: RscRawRenderer): RscRawRenderer;
|
|
8
|
+
declare function createRscPrerenderer(prerender: RscRawPrerenderer): RscRawPrerenderer;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { RscRawPrerenderer, RscRawRenderer, createRscPrerenderer, createRscRenderer, normalizeReactFlightPreloadHints };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region src/server/rsc-stream-hints.ts
|
|
2
|
+
const REACT_FLIGHT_STYLESHEET_PRELOAD_HINT = /(\d*:HL\[.*?),"stylesheet"(\]|,)/g;
|
|
3
|
+
/**
|
|
4
|
+
* React Flight emits HL hints with "stylesheet" for CSS preloads, but the
|
|
5
|
+
* HTML spec requires "style" for <link rel="preload">. Rewrite each complete
|
|
6
|
+
* Flight line so SSR embeds, navigation, and server actions see valid hints.
|
|
7
|
+
*/
|
|
8
|
+
function normalizeReactFlightHintLine(line) {
|
|
9
|
+
return line.replace(REACT_FLIGHT_STYLESHEET_PRELOAD_HINT, "$1,\"style\"$2");
|
|
10
|
+
}
|
|
11
|
+
function normalizeReactFlightPreloadHints(stream) {
|
|
12
|
+
const decoder = new TextDecoder();
|
|
13
|
+
const encoder = new TextEncoder();
|
|
14
|
+
let carry = "";
|
|
15
|
+
return stream.pipeThrough(new TransformStream({
|
|
16
|
+
transform(chunk, controller) {
|
|
17
|
+
const text = carry + decoder.decode(chunk, { stream: true });
|
|
18
|
+
const lastNewline = text.lastIndexOf("\n");
|
|
19
|
+
if (lastNewline === -1) {
|
|
20
|
+
carry = text;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
carry = text.slice(lastNewline + 1);
|
|
24
|
+
controller.enqueue(encoder.encode(normalizeReactFlightHintLine(text.slice(0, lastNewline + 1))));
|
|
25
|
+
},
|
|
26
|
+
flush(controller) {
|
|
27
|
+
const text = carry + decoder.decode();
|
|
28
|
+
if (text) controller.enqueue(encoder.encode(normalizeReactFlightHintLine(text)));
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
function createRscRenderer(render) {
|
|
33
|
+
return (model, options) => normalizeReactFlightPreloadHints(render(model, options));
|
|
34
|
+
}
|
|
35
|
+
function createRscPrerenderer(prerender) {
|
|
36
|
+
return async (model, options) => {
|
|
37
|
+
return { prelude: normalizeReactFlightPreloadHints((await prerender(model, options)).prelude) };
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { createRscPrerenderer, createRscRenderer, normalizeReactFlightPreloadHints };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CachedAppPageValue } from "../shims/cache-handler.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/seed-cache.d.ts
|
|
4
|
+
type PrerenderCacheSeedMetadata = {
|
|
5
|
+
expireSeconds?: number;
|
|
6
|
+
revalidateSeconds?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Path-derived implicit tags (`/foo`, `_N_T_/foo`, `_N_T_/foo/page`, ...)
|
|
9
|
+
* required for `revalidatePath()` to invalidate the seeded entry. See #1486.
|
|
10
|
+
*/
|
|
11
|
+
tags?: string[];
|
|
12
|
+
};
|
|
13
|
+
type PrerenderCacheSeedOptions = {
|
|
14
|
+
buildAppPageHtmlKey?: (pathname: string) => string;
|
|
15
|
+
buildAppPageRscKey?: (pathname: string) => string;
|
|
16
|
+
writeAppPageEntry?: (key: string, data: CachedAppPageValue, metadata: PrerenderCacheSeedMetadata) => Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Read pre-rendered routes from disk and seed the active CacheHandler.
|
|
20
|
+
*
|
|
21
|
+
* Call this during production server startup, before any requests are served.
|
|
22
|
+
* If the manifest doesn't exist (no prerender phase was run), this is a no-op.
|
|
23
|
+
*
|
|
24
|
+
* @param serverDir - Path to `dist/server/` (where vinext-prerender.json lives)
|
|
25
|
+
* @returns The number of routes seeded (0 if no manifest or no renderable routes).
|
|
26
|
+
*/
|
|
27
|
+
declare function seedMemoryCacheFromPrerender(serverDir: string, options?: PrerenderCacheSeedOptions): Promise<number>;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { seedMemoryCacheFromPrerender };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { isrCacheKey, isrSetPrerenderedAppPage } from "./isr-cache.js";
|
|
2
|
+
import { buildAppPageCacheTags } from "./app-page-cache.js";
|
|
3
|
+
import { getOutputPath, getRscOutputPath } from "../utils/prerender-output-paths.js";
|
|
4
|
+
import { addPregeneratedConcretePath, clearPregeneratedConcretePaths, normalizePregeneratedPathname } from "./pregenerated-concrete-paths.js";
|
|
5
|
+
import { getRenderedAppRoutes, isFallbackShellArtifactPath, readPrerenderManifest } from "./prerender-manifest.js";
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
//#region src/server/seed-cache.ts
|
|
9
|
+
/**
|
|
10
|
+
* Seed the memory cache from pre-rendered build output.
|
|
11
|
+
*
|
|
12
|
+
* Reads `vinext-prerender.json` and the corresponding HTML/RSC files from
|
|
13
|
+
* `dist/server/prerendered-routes/`, then populates the active CacheHandler
|
|
14
|
+
* so pre-rendered pages are served as cache HITs on the very first request
|
|
15
|
+
* instead of triggering a full re-render.
|
|
16
|
+
*
|
|
17
|
+
* This is only useful for the MemoryCacheHandler (the default for Node.js
|
|
18
|
+
* production). Persistent backends like KV already retain entries across
|
|
19
|
+
* deploys and can be pre-populated via TPR or similar mechanisms.
|
|
20
|
+
*
|
|
21
|
+
* Consistency model:
|
|
22
|
+
* - The manifest is authoritative for which routes were pre-rendered and their
|
|
23
|
+
* revalidation config. The HTML/RSC files on disk are the source of truth
|
|
24
|
+
* for content. Both are produced by the same build and are immutable after
|
|
25
|
+
* the build completes.
|
|
26
|
+
* - Cache keys include the buildId, so entries from a previous build are never
|
|
27
|
+
* matched by a new server process (new build = new buildId = new keys).
|
|
28
|
+
* - Seeded entries are indistinguishable from entries created by the ISR
|
|
29
|
+
* render path: same cache value shape, same revalidate duration tracking,
|
|
30
|
+
* same cache key construction. The serving path does not know or care
|
|
31
|
+
* whether an entry was seeded or rendered.
|
|
32
|
+
*
|
|
33
|
+
* Concurrency model:
|
|
34
|
+
* - This function runs at startup before the HTTP server begins accepting
|
|
35
|
+
* requests, so there are no concurrent readers during seeding. All I/O is
|
|
36
|
+
* synchronous (readFileSync) which is appropriate for a startup-only path
|
|
37
|
+
* that runs once before the event loop serves traffic.
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* Read pre-rendered routes from disk and seed the active CacheHandler.
|
|
41
|
+
*
|
|
42
|
+
* Call this during production server startup, before any requests are served.
|
|
43
|
+
* If the manifest doesn't exist (no prerender phase was run), this is a no-op.
|
|
44
|
+
*
|
|
45
|
+
* @param serverDir - Path to `dist/server/` (where vinext-prerender.json lives)
|
|
46
|
+
* @returns The number of routes seeded (0 if no manifest or no renderable routes).
|
|
47
|
+
*/
|
|
48
|
+
async function seedMemoryCacheFromPrerender(serverDir, options) {
|
|
49
|
+
clearPregeneratedConcretePaths();
|
|
50
|
+
const manifest = readPrerenderManifest(path.join(serverDir, "vinext-prerender.json"));
|
|
51
|
+
if (!manifest) return 0;
|
|
52
|
+
const { buildId, routes } = manifest;
|
|
53
|
+
if (!buildId || !Array.isArray(routes)) return 0;
|
|
54
|
+
const trailingSlash = manifest.trailingSlash ?? false;
|
|
55
|
+
const prerenderDir = path.join(serverDir, "prerendered-routes");
|
|
56
|
+
const writeAppPageEntry = options?.writeAppPageEntry ?? createDefaultAppPageEntryWriter();
|
|
57
|
+
let seeded = 0;
|
|
58
|
+
const appRoutes = getRenderedAppRoutes(routes);
|
|
59
|
+
for (const route of appRoutes) {
|
|
60
|
+
const concretePathname = route.path ?? route.route;
|
|
61
|
+
if (!isFallbackShellArtifactPath(concretePathname, route)) addPregeneratedConcretePath(route.route, concretePathname);
|
|
62
|
+
const artifactPathname = route.path ?? route.route;
|
|
63
|
+
const cachePathname = normalizePregeneratedPathname(artifactPathname);
|
|
64
|
+
const baseKey = isrCacheKey("app", cachePathname, buildId);
|
|
65
|
+
const htmlKey = options?.buildAppPageHtmlKey?.(cachePathname) ?? baseKey + ":html";
|
|
66
|
+
const rscKey = options?.buildAppPageRscKey?.(cachePathname) ?? baseKey + ":rsc";
|
|
67
|
+
const revalidateSeconds = typeof route.revalidate === "number" ? route.revalidate : void 0;
|
|
68
|
+
const expireSeconds = typeof route.expire === "number" ? route.expire : void 0;
|
|
69
|
+
const tags = buildAppPageCacheTags(cachePathname, []);
|
|
70
|
+
if (await seedHtml(writeAppPageEntry, prerenderDir, htmlKey, artifactPathname, trailingSlash, revalidateSeconds, expireSeconds, tags)) {
|
|
71
|
+
await seedRsc(writeAppPageEntry, prerenderDir, rscKey, artifactPathname, revalidateSeconds, expireSeconds, tags);
|
|
72
|
+
seeded++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return seeded;
|
|
76
|
+
}
|
|
77
|
+
function createDefaultAppPageEntryWriter() {
|
|
78
|
+
return (key, data, metadata) => isrSetPrerenderedAppPage(key, data, metadata);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Seed the HTML cache entry for a single route.
|
|
82
|
+
* Returns true if the file existed and was seeded.
|
|
83
|
+
*/
|
|
84
|
+
async function seedHtml(writeAppPageEntry, prerenderDir, key, pathname, trailingSlash, revalidateSeconds, expireSeconds, tags) {
|
|
85
|
+
const relPath = getOutputPath(pathname, trailingSlash);
|
|
86
|
+
const fullPath = path.join(prerenderDir, relPath);
|
|
87
|
+
if (!fs.existsSync(fullPath)) return false;
|
|
88
|
+
await writeAppPageEntry(key, {
|
|
89
|
+
kind: "APP_PAGE",
|
|
90
|
+
html: fs.readFileSync(fullPath, "utf-8"),
|
|
91
|
+
rscData: void 0,
|
|
92
|
+
headers: void 0,
|
|
93
|
+
postponed: void 0,
|
|
94
|
+
status: void 0
|
|
95
|
+
}, {
|
|
96
|
+
expireSeconds,
|
|
97
|
+
revalidateSeconds,
|
|
98
|
+
tags
|
|
99
|
+
});
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Seed the RSC cache entry for a single route.
|
|
104
|
+
* No-op if the .rsc file doesn't exist on disk.
|
|
105
|
+
*/
|
|
106
|
+
async function seedRsc(writeAppPageEntry, prerenderDir, key, pathname, revalidateSeconds, expireSeconds, tags) {
|
|
107
|
+
const relPath = getRscOutputPath(pathname);
|
|
108
|
+
const fullPath = path.join(prerenderDir, relPath);
|
|
109
|
+
if (!fs.existsSync(fullPath)) return;
|
|
110
|
+
const rscBuffer = fs.readFileSync(fullPath);
|
|
111
|
+
await writeAppPageEntry(key, {
|
|
112
|
+
kind: "APP_PAGE",
|
|
113
|
+
html: "",
|
|
114
|
+
rscData: rscBuffer.buffer.slice(rscBuffer.byteOffset, rscBuffer.byteOffset + rscBuffer.byteLength),
|
|
115
|
+
headers: void 0,
|
|
116
|
+
postponed: void 0,
|
|
117
|
+
status: void 0
|
|
118
|
+
}, {
|
|
119
|
+
expireSeconds,
|
|
120
|
+
revalidateSeconds,
|
|
121
|
+
tags
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
export { seedMemoryCacheFromPrerender };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/server/server-action-not-found.d.ts
|
|
2
|
+
declare function getServerActionNotFoundMessage(actionId: string | null): string;
|
|
3
|
+
declare function isServerActionNotFoundError(error: unknown, actionId: string | null): boolean;
|
|
4
|
+
declare function createServerActionNotFoundResponse(): Response;
|
|
5
|
+
/**
|
|
6
|
+
* Throw an `UnrecognizedActionError` when the server reported the requested
|
|
7
|
+
* server action id as unknown (the `x-nextjs-action-not-found` response
|
|
8
|
+
* header); otherwise return so the caller can keep processing the response.
|
|
9
|
+
*
|
|
10
|
+
* The client-side counterpart of `createServerActionNotFoundResponse`. The
|
|
11
|
+
* typed error lets client `catch` blocks call the public
|
|
12
|
+
* `unstable_isUnrecognizedActionError` predicate to detect client/server
|
|
13
|
+
* deployment skew and recover (typically by reloading the page).
|
|
14
|
+
*
|
|
15
|
+
* Mirrors Next.js, whose server-action reducer throws `UnrecognizedActionError`
|
|
16
|
+
* on this same response header:
|
|
17
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts
|
|
18
|
+
*/
|
|
19
|
+
declare function throwOnServerActionNotFound(response: Pick<Response, "headers">, actionId: string): void;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { createServerActionNotFoundResponse, getServerActionNotFoundMessage, isServerActionNotFoundError, throwOnServerActionNotFound };
|