@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,932 @@
|
|
|
1
|
+
import { createValidFileMatcher, findFileWithExtensions } from "../routing/file-matcher.js";
|
|
2
|
+
import { VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER } from "../server/headers.js";
|
|
3
|
+
import { normalizeStaticPathsEntry } from "../routing/route-pattern.js";
|
|
4
|
+
import { NoOpCacheHandler, getCacheHandler, setCacheHandler } from "../shims/cache-handler.js";
|
|
5
|
+
import { headersContextFromRequest, runWithHeadersContext } from "../shims/headers.js";
|
|
6
|
+
import { _consumeRequestScopedCacheLife } from "../shims/cache-request-state.js";
|
|
7
|
+
import { classifyAppRoute, classifyPagesRoute, getAppRouteRenderEntryPath } from "./report.js";
|
|
8
|
+
import { BLOCKED_PAGES } from "../shims/constants.js";
|
|
9
|
+
import { concatUint8Arrays, decodeRscEmbeddedChunk } from "../server/app-rsc-embedded-chunks.js";
|
|
10
|
+
import { navigationRuntimeRscBootstrapExpression } from "../server/app-ssr-stream.js";
|
|
11
|
+
import { createAppPprFallbackShells, markAppPprDynamicFallbackShellHtml } from "../server/app-ppr-fallback-shell.js";
|
|
12
|
+
import { encodePrerenderRouteParams, serializePrerenderRouteParamsHeader } from "../server/prerender-route-params.js";
|
|
13
|
+
import { readPrerenderSecret } from "./server-manifest.js";
|
|
14
|
+
import { getOutputPath, getRscOutputPath } from "../utils/prerender-output-paths.js";
|
|
15
|
+
import { startProdServer } from "../server/prod-server.js";
|
|
16
|
+
import fs from "node:fs";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import os from "node:os";
|
|
19
|
+
//#region src/build/prerender.ts
|
|
20
|
+
/**
|
|
21
|
+
* Prerendering phase for vinext build.
|
|
22
|
+
*
|
|
23
|
+
* Classifies every route, renders static and ISR routes to HTML/JSON/RSC files,
|
|
24
|
+
* and writes a `vinext-prerender.json` build index.
|
|
25
|
+
*
|
|
26
|
+
* Two public functions:
|
|
27
|
+
* prerenderPages() — Pages Router
|
|
28
|
+
* prerenderApp() — App Router
|
|
29
|
+
*
|
|
30
|
+
* Both return a `PrerenderResult` with one entry per route. The caller
|
|
31
|
+
* (cli.ts) can merge these into the build report.
|
|
32
|
+
*
|
|
33
|
+
* Modes:
|
|
34
|
+
* 'default' — skips SSR routes (served at request time); ISR routes rendered
|
|
35
|
+
* 'export' — SSR routes are build errors; ISR treated as static (no revalidate)
|
|
36
|
+
*/
|
|
37
|
+
const EXPERIMENTAL_PPR_FALLBACK_SHELLS_ENV = "__VINEXT_EXPERIMENTAL_PPR_FALLBACK_SHELLS";
|
|
38
|
+
function isExperimentalPprFallbackShellGenerationEnabled(env = process.env) {
|
|
39
|
+
return env[EXPERIMENTAL_PPR_FALLBACK_SHELLS_ENV] === "1";
|
|
40
|
+
}
|
|
41
|
+
function getErrorMessageWithStack(err) {
|
|
42
|
+
return err.stack || err.message;
|
|
43
|
+
}
|
|
44
|
+
var PrerenderUserFunctionError = class extends Error {};
|
|
45
|
+
function parsePrerenderEndpointError(text) {
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(text);
|
|
48
|
+
if (parsed && typeof parsed === "object" && "error" in parsed) return typeof parsed.error === "string" && parsed.error.length > 0 ? parsed.error : "Unknown prerender endpoint error";
|
|
49
|
+
} catch {}
|
|
50
|
+
return text || "Unknown prerender endpoint error";
|
|
51
|
+
}
|
|
52
|
+
/** Sentinel path used to trigger 404 rendering without a real route match. */
|
|
53
|
+
const NOT_FOUND_SENTINEL_PATH = "/__vinext_nonexistent_for_404__";
|
|
54
|
+
const DEFAULT_CONCURRENCY = Math.min(os.availableParallelism(), 8);
|
|
55
|
+
const RSC_LEGACY_CHUNK_SCRIPT_PREFIX = "self.__VINEXT_RSC_CHUNKS__=self.__VINEXT_RSC_CHUNKS__||[];";
|
|
56
|
+
const RSC_LEGACY_DONE_SCRIPT = "self.__VINEXT_RSC_DONE__=true";
|
|
57
|
+
const RSC_LEGACY_CHUNK_FULL_PREFIX = `${RSC_LEGACY_CHUNK_SCRIPT_PREFIX}self.__VINEXT_RSC_CHUNKS__.push(`;
|
|
58
|
+
const RSC_RUNTIME_BOOTSTRAP_EXPRESSION = navigationRuntimeRscBootstrapExpression();
|
|
59
|
+
const RSC_RUNTIME_CHUNK_FULL_PREFIX = `${RSC_RUNTIME_BOOTSTRAP_EXPRESSION}.rsc.push(`;
|
|
60
|
+
const RSC_RUNTIME_DONE_SCRIPT = `${RSC_RUNTIME_BOOTSTRAP_EXPRESSION}.done=true`;
|
|
61
|
+
/**
|
|
62
|
+
* Reconstruct the RSC payload from a prerender HTML response by parsing the
|
|
63
|
+
* inline bootstrap chunk scripts emitted by createRscEmbedTransform.
|
|
64
|
+
*
|
|
65
|
+
* Returns null when the HTML contains no chunk scripts at all — the caller
|
|
66
|
+
* should fall back to a second handler invocation. This is reachable when
|
|
67
|
+
* middleware short-circuits the App Router pipeline with a custom 200 HTML
|
|
68
|
+
* response that never went through createRscEmbedTransform.
|
|
69
|
+
*
|
|
70
|
+
* Throws on partial or malformed embeds (chunks present but no done marker,
|
|
71
|
+
* tampered chunk JSON, etc.) — those are real vinext-internal regressions.
|
|
72
|
+
*
|
|
73
|
+
* Safe regex usage: safeJsonStringify (used by createRscEmbedTransform) escapes
|
|
74
|
+
* all '<' and '>' in the embedded JSON, preventing false <\/script> matches.
|
|
75
|
+
*/
|
|
76
|
+
function extractRscPayloadFromPrerenderedHtml(html) {
|
|
77
|
+
const scriptPattern = /<script(?:\s[^>]*)?>([\s\S]*?)<\/script>/gi;
|
|
78
|
+
const chunks = [];
|
|
79
|
+
let sawDone = false;
|
|
80
|
+
let match;
|
|
81
|
+
while ((match = scriptPattern.exec(html)) !== null) {
|
|
82
|
+
const script = (match[1] ?? "").trim().replace(/;$/, "");
|
|
83
|
+
if (script === RSC_RUNTIME_DONE_SCRIPT || script === RSC_LEGACY_DONE_SCRIPT) {
|
|
84
|
+
sawDone = true;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (script.startsWith(RSC_RUNTIME_CHUNK_FULL_PREFIX)) {
|
|
88
|
+
chunks.push(decodeRscEmbeddedChunk(parseRscChunkPushArgument(script, RSC_RUNTIME_CHUNK_FULL_PREFIX)));
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (script.startsWith(RSC_LEGACY_CHUNK_SCRIPT_PREFIX)) chunks.push(decodeRscEmbeddedChunk(parseRscChunkPushArgument(script, RSC_LEGACY_CHUNK_FULL_PREFIX)));
|
|
92
|
+
}
|
|
93
|
+
if (chunks.length === 0 && !sawDone) return null;
|
|
94
|
+
if (chunks.length === 0) throw new Error("[vinext] Malformed prerender RSC embed: done marker present without chunk scripts");
|
|
95
|
+
if (!sawDone) throw new Error("[vinext] Malformed prerender RSC embed: missing RSC done marker");
|
|
96
|
+
return concatUint8Arrays(chunks);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parse the JSON argument of a single chunk-push script. The script
|
|
100
|
+
* shape is exactly `<prefix>(<safeJsonStringify(chunk)>)` because the writer
|
|
101
|
+
* concatenates those literals — so the body always starts with the full
|
|
102
|
+
* prefix and ends with `)`. JSON.parse on the slice catches any tampering or
|
|
103
|
+
* trailing code.
|
|
104
|
+
*/
|
|
105
|
+
function parseRscChunkPushArgument(script, chunkPrefix) {
|
|
106
|
+
if (!script.startsWith(chunkPrefix) || !script.endsWith(")")) throw new Error("[vinext] Malformed prerender RSC embed: unexpected chunk script shape");
|
|
107
|
+
const jsonSource = script.slice(chunkPrefix.length, -1);
|
|
108
|
+
let parsed;
|
|
109
|
+
try {
|
|
110
|
+
parsed = JSON.parse(jsonSource);
|
|
111
|
+
} catch {
|
|
112
|
+
throw new Error("[vinext] Malformed prerender RSC embed: invalid chunk JSON");
|
|
113
|
+
}
|
|
114
|
+
if (typeof parsed === "string") return parsed;
|
|
115
|
+
if (Array.isArray(parsed) && parsed.length === 2 && parsed[0] === 3 && typeof parsed[1] === "string") return [parsed[0], parsed[1]];
|
|
116
|
+
throw new Error("[vinext] Malformed prerender RSC embed: unsupported chunk payload");
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Run an array of async tasks with bounded concurrency.
|
|
120
|
+
* Results are returned in the same order as `items`.
|
|
121
|
+
*/
|
|
122
|
+
async function runWithConcurrency(items, concurrency, fn) {
|
|
123
|
+
const results = Array.from({ length: items.length });
|
|
124
|
+
let nextIndex = 0;
|
|
125
|
+
async function worker() {
|
|
126
|
+
while (nextIndex < items.length) {
|
|
127
|
+
const i = nextIndex++;
|
|
128
|
+
results[i] = await fn(items[i], i);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (items.length === 0) return results;
|
|
132
|
+
const workers = Array.from({ length: Math.min(concurrency, items.length) }, worker);
|
|
133
|
+
await Promise.all(workers);
|
|
134
|
+
return results;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Build a URL path from a route pattern and params.
|
|
138
|
+
* "/posts/:id" + { id: "42" } → "/posts/42"
|
|
139
|
+
* "/docs/:slug+" + { slug: ["a", "b"] } → "/docs/a/b"
|
|
140
|
+
*
|
|
141
|
+
* Throws a descriptive error rather than a cryptic `Cannot read properties of
|
|
142
|
+
* undefined` if `params` itself is missing or required keys are absent — the
|
|
143
|
+
* caller (prerenderPages / prerenderApp) catches this and surfaces it as a
|
|
144
|
+
* per-route error result.
|
|
145
|
+
*/
|
|
146
|
+
function buildUrlFromParams(pattern, params) {
|
|
147
|
+
if (params === void 0 || params === null) throw new Error(`[vinext] buildUrlFromParams: params is ${params === null ? "null" : "undefined"} for pattern "${pattern}". Check that getStaticPaths / generateStaticParams returned an object with a "params" key, or pass a string path (see https://nextjs.org/docs/pages/api-reference/functions/get-static-paths).`);
|
|
148
|
+
const parts = pattern.split("/").filter(Boolean);
|
|
149
|
+
const result = [];
|
|
150
|
+
for (const part of parts) if (part.endsWith("+") || part.endsWith("*")) {
|
|
151
|
+
const value = params[part.slice(1, -1)];
|
|
152
|
+
if (Array.isArray(value)) result.push(...value.map((s) => encodeURIComponent(s)));
|
|
153
|
+
else if (value) result.push(encodeURIComponent(String(value)));
|
|
154
|
+
} else if (part.startsWith(":")) {
|
|
155
|
+
const paramName = part.slice(1);
|
|
156
|
+
const value = params[paramName];
|
|
157
|
+
if (value === void 0 || value === null) throw new Error(`[vinext] buildUrlFromParams: required param "${paramName}" is missing for pattern "${pattern}". Check that generateStaticParams (or getStaticPaths) returns an object with a "${paramName}" key.`);
|
|
158
|
+
result.push(encodeURIComponent(String(value)));
|
|
159
|
+
} else result.push(part);
|
|
160
|
+
return "/" + result.join("/");
|
|
161
|
+
}
|
|
162
|
+
function metadataOutputPath(servedUrl) {
|
|
163
|
+
const pathname = servedUrl.split("?", 1)[0];
|
|
164
|
+
if (!pathname || !pathname.startsWith("/")) return null;
|
|
165
|
+
const segments = pathname.split("/").filter(Boolean);
|
|
166
|
+
if (segments.length === 0 || segments.some((segment) => segment === "." || segment === "..")) return null;
|
|
167
|
+
return segments.join("/");
|
|
168
|
+
}
|
|
169
|
+
function emitStaticMetadataFiles(metadataRoutes, outDir) {
|
|
170
|
+
const outputFiles = [];
|
|
171
|
+
for (const route of metadataRoutes) {
|
|
172
|
+
if (route.isDynamic) continue;
|
|
173
|
+
const outputPath = metadataOutputPath(route.servedUrl);
|
|
174
|
+
if (!outputPath) continue;
|
|
175
|
+
const fullPath = path.join(outDir, ...outputPath.split("/"));
|
|
176
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
177
|
+
fs.copyFileSync(route.filePath, fullPath);
|
|
178
|
+
outputFiles.push(outputPath);
|
|
179
|
+
}
|
|
180
|
+
return outputFiles;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Resolve parent dynamic segment params for a route.
|
|
184
|
+
* Handles top-down generateStaticParams resolution for nested dynamic routes.
|
|
185
|
+
*
|
|
186
|
+
* Uses the `staticParamsMap` (pattern → generateStaticParams) exported from
|
|
187
|
+
* the production bundle.
|
|
188
|
+
*/
|
|
189
|
+
async function resolveParentParams(childRoute, staticParamsMap) {
|
|
190
|
+
const { patternParts } = childRoute;
|
|
191
|
+
let lastDynamicIdx = -1;
|
|
192
|
+
for (let i = patternParts.length - 1; i >= 0; i--) if (patternParts[i].startsWith(":")) {
|
|
193
|
+
lastDynamicIdx = i;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
const parentSegments = [];
|
|
197
|
+
let prefixPattern = "";
|
|
198
|
+
for (let i = 0; i < lastDynamicIdx; i++) {
|
|
199
|
+
const part = patternParts[i];
|
|
200
|
+
prefixPattern += "/" + part;
|
|
201
|
+
if (!part.startsWith(":")) continue;
|
|
202
|
+
const fn = staticParamsMap[prefixPattern];
|
|
203
|
+
if (typeof fn === "function") parentSegments.push(fn);
|
|
204
|
+
}
|
|
205
|
+
if (parentSegments.length === 0) return [];
|
|
206
|
+
let currentParams = [{}];
|
|
207
|
+
let resolvedAnyParent = false;
|
|
208
|
+
for (const generateStaticParams of parentSegments) {
|
|
209
|
+
const nextParams = [];
|
|
210
|
+
let resolvedThisParent = false;
|
|
211
|
+
for (const parentParams of currentParams) {
|
|
212
|
+
const results = await generateStaticParams({ params: parentParams });
|
|
213
|
+
if (results === null) continue;
|
|
214
|
+
if (!Array.isArray(results)) return [];
|
|
215
|
+
resolvedThisParent = true;
|
|
216
|
+
resolvedAnyParent = true;
|
|
217
|
+
for (const result of results) nextParams.push({
|
|
218
|
+
...parentParams,
|
|
219
|
+
...result
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
if (resolvedThisParent) currentParams = nextParams;
|
|
223
|
+
}
|
|
224
|
+
return resolvedAnyParent ? currentParams : [];
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Run the prerender phase for Pages Router.
|
|
228
|
+
*
|
|
229
|
+
* Rendering is done via HTTP through a locally-spawned production server.
|
|
230
|
+
* Works for both plain Node and Cloudflare Workers builds.
|
|
231
|
+
* Route classification uses static file analysis (classifyPagesRoute);
|
|
232
|
+
* getStaticPaths is fetched via a dedicated
|
|
233
|
+
* `/__vinext/prerender/pages-static-paths?pattern=…` endpoint on the server.
|
|
234
|
+
*
|
|
235
|
+
* Returns structured results for every route (rendered, skipped, or error).
|
|
236
|
+
* Writes HTML files to `outDir`. If `manifestDir` is set, writes
|
|
237
|
+
* `vinext-prerender.json` there; otherwise writes it to `outDir`.
|
|
238
|
+
*/
|
|
239
|
+
async function prerenderPages({ routes, apiRoutes, pagesDir, outDir, config, mode, ...options }) {
|
|
240
|
+
const pagesBundlePath = options.pagesBundlePath;
|
|
241
|
+
const manifestDir = options.manifestDir ?? outDir;
|
|
242
|
+
const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;
|
|
243
|
+
const onProgress = options.onProgress;
|
|
244
|
+
const skipManifest = options.skipManifest ?? false;
|
|
245
|
+
const fileMatcher = createValidFileMatcher(config.pageExtensions);
|
|
246
|
+
const results = [];
|
|
247
|
+
if (!pagesBundlePath && !options._prodServer) throw new Error("[vinext] prerenderPages: either pagesBundlePath or _prodServer must be provided.");
|
|
248
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
249
|
+
for (const apiRoute of apiRoutes) results.push({
|
|
250
|
+
route: apiRoute.pattern,
|
|
251
|
+
status: "skipped",
|
|
252
|
+
reason: "api"
|
|
253
|
+
});
|
|
254
|
+
const previousHandler = getCacheHandler();
|
|
255
|
+
setCacheHandler(new NoOpCacheHandler());
|
|
256
|
+
const previousPrerenderFlag = process.env.VINEXT_PRERENDER;
|
|
257
|
+
process.env.VINEXT_PRERENDER = "1";
|
|
258
|
+
let ownedProdServerHandle = null;
|
|
259
|
+
try {
|
|
260
|
+
let prerenderSecret = options._prerenderSecret;
|
|
261
|
+
if (!prerenderSecret && pagesBundlePath) prerenderSecret = readPrerenderSecret(path.dirname(pagesBundlePath));
|
|
262
|
+
if (!prerenderSecret) console.warn("[vinext] Warning: prerender secret not found. /__vinext/prerender/* endpoints will return 403 and dynamic routes will produce no paths. Run `vinext build` to regenerate the secret.");
|
|
263
|
+
const baseUrl = `http://127.0.0.1:${(options._prodServer ? options._prodServer : await (async () => {
|
|
264
|
+
const srv = await startProdServer({
|
|
265
|
+
port: 0,
|
|
266
|
+
host: "127.0.0.1",
|
|
267
|
+
outDir: path.dirname(path.dirname(pagesBundlePath)),
|
|
268
|
+
noCompression: true,
|
|
269
|
+
purpose: "prerender"
|
|
270
|
+
});
|
|
271
|
+
ownedProdServerHandle = srv;
|
|
272
|
+
return srv;
|
|
273
|
+
})()).port}`;
|
|
274
|
+
const secretHeaders = prerenderSecret ? { [VINEXT_PRERENDER_SECRET_HEADER]: prerenderSecret } : {};
|
|
275
|
+
const renderPage = (urlPath) => fetch(`${baseUrl}${urlPath}`, {
|
|
276
|
+
headers: secretHeaders,
|
|
277
|
+
redirect: "manual"
|
|
278
|
+
});
|
|
279
|
+
const bundlePageRoutes = routes.map((r) => ({
|
|
280
|
+
pattern: r.pattern,
|
|
281
|
+
isDynamic: r.isDynamic ?? false,
|
|
282
|
+
params: {},
|
|
283
|
+
filePath: r.filePath,
|
|
284
|
+
module: { getStaticPaths: r.isDynamic ? async ({ locales, defaultLocale }) => {
|
|
285
|
+
const search = new URLSearchParams({ pattern: r.pattern });
|
|
286
|
+
if (locales.length > 0) search.set("locales", JSON.stringify(locales));
|
|
287
|
+
if (defaultLocale) search.set("defaultLocale", defaultLocale);
|
|
288
|
+
const res = await fetch(`${baseUrl}/__vinext/prerender/pages-static-paths?${search}`, { headers: secretHeaders });
|
|
289
|
+
const text = await res.text();
|
|
290
|
+
if (!res.ok) {
|
|
291
|
+
if (res.status === 500) throw new PrerenderUserFunctionError(parsePrerenderEndpointError(text));
|
|
292
|
+
console.warn(`[vinext] Warning: /__vinext/prerender/pages-static-paths returned ${res.status} for ${r.pattern}. Dynamic paths will be skipped. This may indicate a stale or missing prerender secret.`);
|
|
293
|
+
return {
|
|
294
|
+
paths: [],
|
|
295
|
+
fallback: false
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
if (text === "null") return {
|
|
299
|
+
paths: [],
|
|
300
|
+
fallback: false
|
|
301
|
+
};
|
|
302
|
+
return JSON.parse(text);
|
|
303
|
+
} : void 0 }
|
|
304
|
+
}));
|
|
305
|
+
const pagesToRender = [];
|
|
306
|
+
for (const route of bundlePageRoutes) {
|
|
307
|
+
if (BLOCKED_PAGES.includes(route.pattern)) continue;
|
|
308
|
+
if (route.pattern === "/404") continue;
|
|
309
|
+
const { type, revalidate: classifiedRevalidate } = classifyPagesRoute(route.filePath);
|
|
310
|
+
if (type === "ssr") {
|
|
311
|
+
if (mode === "export") results.push({
|
|
312
|
+
route: route.pattern,
|
|
313
|
+
status: "error",
|
|
314
|
+
error: `Page uses getServerSideProps which is not supported with output: 'export'. Use getStaticProps instead.`
|
|
315
|
+
});
|
|
316
|
+
else results.push({
|
|
317
|
+
route: route.pattern,
|
|
318
|
+
status: "skipped",
|
|
319
|
+
reason: "ssr"
|
|
320
|
+
});
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
const revalidate = mode === "export" ? false : typeof classifiedRevalidate === "number" ? classifiedRevalidate : false;
|
|
324
|
+
if (route.isDynamic) {
|
|
325
|
+
if (typeof route.module.getStaticPaths !== "function") {
|
|
326
|
+
if (mode === "export") results.push({
|
|
327
|
+
route: route.pattern,
|
|
328
|
+
status: "error",
|
|
329
|
+
error: `Dynamic route requires getStaticPaths with output: 'export'`
|
|
330
|
+
});
|
|
331
|
+
else results.push({
|
|
332
|
+
route: route.pattern,
|
|
333
|
+
status: "skipped",
|
|
334
|
+
reason: "no-static-params"
|
|
335
|
+
});
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
let pathsResult;
|
|
339
|
+
try {
|
|
340
|
+
pathsResult = await route.module.getStaticPaths({
|
|
341
|
+
locales: [],
|
|
342
|
+
defaultLocale: ""
|
|
343
|
+
});
|
|
344
|
+
} catch (e) {
|
|
345
|
+
results.push({
|
|
346
|
+
route: route.pattern,
|
|
347
|
+
status: "error",
|
|
348
|
+
error: `Failed to call getStaticPaths(): ${e.message}`,
|
|
349
|
+
...e instanceof PrerenderUserFunctionError ? { fatal: true } : {}
|
|
350
|
+
});
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
const fallback = pathsResult?.fallback ?? false;
|
|
354
|
+
if (mode === "export" && fallback !== false) {
|
|
355
|
+
results.push({
|
|
356
|
+
route: route.pattern,
|
|
357
|
+
status: "error",
|
|
358
|
+
error: `getStaticPaths must return fallback: false with output: 'export' (got: ${JSON.stringify(fallback)})`
|
|
359
|
+
});
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
const paths = pathsResult?.paths ?? [];
|
|
363
|
+
let entryError = null;
|
|
364
|
+
for (const item of paths) {
|
|
365
|
+
const normalized = normalizeStaticPathsEntry(item, route.pattern);
|
|
366
|
+
if ("error" in normalized) {
|
|
367
|
+
entryError = normalized.error;
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
const { params } = normalized;
|
|
371
|
+
try {
|
|
372
|
+
const urlPath = buildUrlFromParams(route.pattern, params);
|
|
373
|
+
pagesToRender.push({
|
|
374
|
+
route,
|
|
375
|
+
urlPath,
|
|
376
|
+
params,
|
|
377
|
+
revalidate
|
|
378
|
+
});
|
|
379
|
+
} catch (e) {
|
|
380
|
+
entryError = e.message;
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
if (entryError) {
|
|
385
|
+
results.push({
|
|
386
|
+
route: route.pattern,
|
|
387
|
+
status: "error",
|
|
388
|
+
error: entryError
|
|
389
|
+
});
|
|
390
|
+
continue;
|
|
391
|
+
}
|
|
392
|
+
} else pagesToRender.push({
|
|
393
|
+
route,
|
|
394
|
+
urlPath: route.pattern,
|
|
395
|
+
params: {},
|
|
396
|
+
revalidate
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
let completed = 0;
|
|
400
|
+
const pageResults = await runWithConcurrency(pagesToRender, concurrency, async ({ route, urlPath, revalidate }) => {
|
|
401
|
+
let result;
|
|
402
|
+
try {
|
|
403
|
+
const response = await renderPage(urlPath);
|
|
404
|
+
const outputFiles = [];
|
|
405
|
+
const htmlOutputPath = getOutputPath(urlPath, config.trailingSlash);
|
|
406
|
+
const htmlFullPath = path.join(outDir, htmlOutputPath);
|
|
407
|
+
if (response.status >= 300 && response.status < 400) {
|
|
408
|
+
const html = `<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0;url=${(response.headers.get("location") ?? "/").replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">")}" /></head><body></body></html>`;
|
|
409
|
+
fs.mkdirSync(path.dirname(htmlFullPath), { recursive: true });
|
|
410
|
+
fs.writeFileSync(htmlFullPath, html, "utf-8");
|
|
411
|
+
outputFiles.push(htmlOutputPath);
|
|
412
|
+
} else {
|
|
413
|
+
if (!response.ok) throw new Error(`renderPage returned ${response.status} for ${urlPath}`);
|
|
414
|
+
const html = await response.text();
|
|
415
|
+
fs.mkdirSync(path.dirname(htmlFullPath), { recursive: true });
|
|
416
|
+
fs.writeFileSync(htmlFullPath, html, "utf-8");
|
|
417
|
+
outputFiles.push(htmlOutputPath);
|
|
418
|
+
}
|
|
419
|
+
result = {
|
|
420
|
+
route: route.pattern,
|
|
421
|
+
status: "rendered",
|
|
422
|
+
outputFiles,
|
|
423
|
+
revalidate,
|
|
424
|
+
...typeof revalidate === "number" ? { expire: config.expireTime } : {},
|
|
425
|
+
router: "pages",
|
|
426
|
+
...urlPath !== route.pattern ? { path: urlPath } : {}
|
|
427
|
+
};
|
|
428
|
+
} catch (e) {
|
|
429
|
+
const err = e;
|
|
430
|
+
result = {
|
|
431
|
+
route: route.pattern,
|
|
432
|
+
status: "error",
|
|
433
|
+
error: config.enablePrerenderSourceMaps ? getErrorMessageWithStack(err) : err.message
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
onProgress?.({
|
|
437
|
+
completed: ++completed,
|
|
438
|
+
total: pagesToRender.length,
|
|
439
|
+
route: urlPath,
|
|
440
|
+
status: result.status
|
|
441
|
+
});
|
|
442
|
+
return result;
|
|
443
|
+
});
|
|
444
|
+
results.push(...pageResults);
|
|
445
|
+
const hasCustom404 = findFileWithExtensions(path.join(pagesDir, "404"), fileMatcher);
|
|
446
|
+
const hasErrorPage = findFileWithExtensions(path.join(pagesDir, "_error"), fileMatcher);
|
|
447
|
+
if (hasCustom404 || hasErrorPage) try {
|
|
448
|
+
const notFoundRes = await renderPage(hasCustom404 ? "/404" : NOT_FOUND_SENTINEL_PATH);
|
|
449
|
+
const contentType = notFoundRes.headers.get("content-type") ?? "";
|
|
450
|
+
if (notFoundRes.status === 404 && contentType.includes("text/html")) {
|
|
451
|
+
const html404 = await notFoundRes.text();
|
|
452
|
+
const fullPath = path.join(outDir, "404.html");
|
|
453
|
+
fs.writeFileSync(fullPath, html404, "utf-8");
|
|
454
|
+
results.push({
|
|
455
|
+
route: "/404",
|
|
456
|
+
status: "rendered",
|
|
457
|
+
outputFiles: ["404.html"],
|
|
458
|
+
revalidate: false,
|
|
459
|
+
router: "pages"
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
} catch {}
|
|
463
|
+
if (!skipManifest) writePrerenderIndex(results, manifestDir, {
|
|
464
|
+
buildId: config.buildId,
|
|
465
|
+
trailingSlash: config.trailingSlash
|
|
466
|
+
});
|
|
467
|
+
return { routes: results };
|
|
468
|
+
} finally {
|
|
469
|
+
setCacheHandler(previousHandler);
|
|
470
|
+
if (previousPrerenderFlag === void 0) delete process.env.VINEXT_PRERENDER;
|
|
471
|
+
else process.env.VINEXT_PRERENDER = previousPrerenderFlag;
|
|
472
|
+
if (ownedProdServerHandle) await new Promise((resolve) => ownedProdServerHandle.server.close(() => resolve()));
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Run the prerender phase for App Router.
|
|
477
|
+
*
|
|
478
|
+
* Starts a local production server and fetches every static/ISR route via HTTP.
|
|
479
|
+
* Works for both plain Node and Cloudflare Workers builds — the CF Workers bundle
|
|
480
|
+
* (`dist/server/index.js`) is a standard Node-compatible server entry, so no
|
|
481
|
+
* wrangler/miniflare is needed. Writes HTML files, `.rsc` files, and
|
|
482
|
+
* `vinext-prerender.json` to `outDir`.
|
|
483
|
+
*
|
|
484
|
+
* If the bundle does not exist, an error is thrown directing the user to run
|
|
485
|
+
* `vinext build` first.
|
|
486
|
+
*
|
|
487
|
+
* Speculative static rendering: routes classified as 'unknown' (no explicit
|
|
488
|
+
* config, non-dynamic URL) are attempted with an empty headers/cookies context.
|
|
489
|
+
* If they succeed, they are marked as rendered. If they throw a DynamicUsageError
|
|
490
|
+
* or fail, they are marked as skipped with reason 'dynamic'.
|
|
491
|
+
*/
|
|
492
|
+
async function prerenderApp({ routes, metadataRoutes = [], outDir, config, mode, rscBundlePath, ...options }) {
|
|
493
|
+
const manifestDir = options.manifestDir ?? outDir;
|
|
494
|
+
const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;
|
|
495
|
+
const onProgress = options.onProgress;
|
|
496
|
+
const skipManifest = options.skipManifest ?? false;
|
|
497
|
+
const results = [];
|
|
498
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
499
|
+
const previousHandler = getCacheHandler();
|
|
500
|
+
setCacheHandler(new NoOpCacheHandler());
|
|
501
|
+
const previousPrerenderFlag = process.env.VINEXT_PRERENDER;
|
|
502
|
+
process.env.VINEXT_PRERENDER = "1";
|
|
503
|
+
const serverDir = path.dirname(rscBundlePath);
|
|
504
|
+
let rscHandler;
|
|
505
|
+
let staticParamsMap = {};
|
|
506
|
+
let ownedProdServerHandle = null;
|
|
507
|
+
try {
|
|
508
|
+
const prerenderSecret = readPrerenderSecret(serverDir);
|
|
509
|
+
if (!prerenderSecret) console.warn("[vinext] Warning: prerender secret not found. /__vinext/prerender/* endpoints will return 403 and generateStaticParams will not be called. Run `vinext build` to regenerate the secret.");
|
|
510
|
+
const baseUrl = `http://127.0.0.1:${(options._prodServer ? options._prodServer : await (async () => {
|
|
511
|
+
const srv = await startProdServer({
|
|
512
|
+
port: 0,
|
|
513
|
+
host: "127.0.0.1",
|
|
514
|
+
outDir: path.dirname(serverDir),
|
|
515
|
+
noCompression: true,
|
|
516
|
+
purpose: "prerender"
|
|
517
|
+
});
|
|
518
|
+
ownedProdServerHandle = srv;
|
|
519
|
+
return srv;
|
|
520
|
+
})()).port}`;
|
|
521
|
+
const secretHeaders = prerenderSecret ? { [VINEXT_PRERENDER_SECRET_HEADER]: prerenderSecret } : {};
|
|
522
|
+
rscHandler = (req) => {
|
|
523
|
+
const parsed = new URL(req.url);
|
|
524
|
+
const url = `${baseUrl}${parsed.pathname}${parsed.search}`;
|
|
525
|
+
return fetch(url, {
|
|
526
|
+
method: req.method,
|
|
527
|
+
headers: {
|
|
528
|
+
...secretHeaders,
|
|
529
|
+
...Object.fromEntries(req.headers.entries())
|
|
530
|
+
},
|
|
531
|
+
body: req.method !== "GET" && req.method !== "HEAD" ? req.body : void 0,
|
|
532
|
+
redirect: "manual"
|
|
533
|
+
});
|
|
534
|
+
};
|
|
535
|
+
const staticParamsCache = /* @__PURE__ */ new Map();
|
|
536
|
+
staticParamsMap = new Proxy({}, {
|
|
537
|
+
get(_target, pattern) {
|
|
538
|
+
return async ({ params }) => {
|
|
539
|
+
const cacheKey = `${pattern}\0${JSON.stringify(params)}`;
|
|
540
|
+
const cached = staticParamsCache.get(cacheKey);
|
|
541
|
+
if (cached !== void 0) return cached;
|
|
542
|
+
const request = (async () => {
|
|
543
|
+
const search = new URLSearchParams({ pattern });
|
|
544
|
+
if (Object.keys(params).length > 0) search.set("parentParams", JSON.stringify(params));
|
|
545
|
+
const res = await fetch(`${baseUrl}/__vinext/prerender/static-params?${search}`, { headers: secretHeaders });
|
|
546
|
+
const text = await res.text();
|
|
547
|
+
if (!res.ok) {
|
|
548
|
+
if (res.status === 500) throw new PrerenderUserFunctionError(parsePrerenderEndpointError(text));
|
|
549
|
+
console.warn(`[vinext] Warning: /__vinext/prerender/static-params returned ${res.status} for ${pattern}. Static params will be skipped. This may indicate a stale or missing prerender secret.`);
|
|
550
|
+
return null;
|
|
551
|
+
}
|
|
552
|
+
if (text === "null") return null;
|
|
553
|
+
return JSON.parse(text);
|
|
554
|
+
})();
|
|
555
|
+
request.catch(() => staticParamsCache.delete(cacheKey));
|
|
556
|
+
staticParamsCache.set(cacheKey, request);
|
|
557
|
+
return request;
|
|
558
|
+
};
|
|
559
|
+
},
|
|
560
|
+
has(_target, _pattern) {
|
|
561
|
+
return false;
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
const urlsToRender = [];
|
|
565
|
+
for (const route of routes) {
|
|
566
|
+
const renderEntryPath = getAppRouteRenderEntryPath(route);
|
|
567
|
+
if (!renderEntryPath && route.routePath) {
|
|
568
|
+
results.push({
|
|
569
|
+
route: route.pattern,
|
|
570
|
+
status: "skipped",
|
|
571
|
+
reason: "api"
|
|
572
|
+
});
|
|
573
|
+
continue;
|
|
574
|
+
}
|
|
575
|
+
if (!renderEntryPath) continue;
|
|
576
|
+
const { type, revalidate: classifiedRevalidate } = classifyAppRoute(renderEntryPath, route.routePath, route.isDynamic);
|
|
577
|
+
if (type === "api") {
|
|
578
|
+
results.push({
|
|
579
|
+
route: route.pattern,
|
|
580
|
+
status: "skipped",
|
|
581
|
+
reason: "api"
|
|
582
|
+
});
|
|
583
|
+
continue;
|
|
584
|
+
}
|
|
585
|
+
if (type === "ssr" && !route.isDynamic) {
|
|
586
|
+
if (mode === "export") results.push({
|
|
587
|
+
route: route.pattern,
|
|
588
|
+
status: "error",
|
|
589
|
+
error: `Route uses dynamic rendering (force-dynamic or revalidate=0) which is not supported with output: 'export'`
|
|
590
|
+
});
|
|
591
|
+
else results.push({
|
|
592
|
+
route: route.pattern,
|
|
593
|
+
status: "skipped",
|
|
594
|
+
reason: "dynamic"
|
|
595
|
+
});
|
|
596
|
+
continue;
|
|
597
|
+
}
|
|
598
|
+
const revalidate = mode === "export" ? false : typeof classifiedRevalidate === "number" ? classifiedRevalidate : false;
|
|
599
|
+
if (route.isDynamic) try {
|
|
600
|
+
const generateStaticParamsFn = staticParamsMap[route.pattern];
|
|
601
|
+
if (typeof generateStaticParamsFn !== "function") {
|
|
602
|
+
if (mode === "export") results.push({
|
|
603
|
+
route: route.pattern,
|
|
604
|
+
status: "error",
|
|
605
|
+
error: `Dynamic route requires generateStaticParams() with output: 'export'`
|
|
606
|
+
});
|
|
607
|
+
else results.push({
|
|
608
|
+
route: route.pattern,
|
|
609
|
+
status: "skipped",
|
|
610
|
+
reason: "no-static-params"
|
|
611
|
+
});
|
|
612
|
+
continue;
|
|
613
|
+
}
|
|
614
|
+
const parentParamSets = await resolveParentParams(route, staticParamsMap);
|
|
615
|
+
let paramSets;
|
|
616
|
+
if (parentParamSets.length > 0) {
|
|
617
|
+
paramSets = [];
|
|
618
|
+
for (const parentParams of parentParamSets) {
|
|
619
|
+
const childResults = await generateStaticParamsFn({ params: parentParams });
|
|
620
|
+
if (childResults === null) {
|
|
621
|
+
paramSets = null;
|
|
622
|
+
break;
|
|
623
|
+
}
|
|
624
|
+
if (Array.isArray(childResults)) for (const childParams of childResults) paramSets.push({
|
|
625
|
+
...parentParams,
|
|
626
|
+
...childParams
|
|
627
|
+
});
|
|
628
|
+
else {
|
|
629
|
+
paramSets = [];
|
|
630
|
+
break;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
} else {
|
|
634
|
+
const results = await generateStaticParamsFn({ params: {} });
|
|
635
|
+
paramSets = Array.isArray(results) || results === null ? results : [];
|
|
636
|
+
}
|
|
637
|
+
if (paramSets === null) {
|
|
638
|
+
if (mode === "export") results.push({
|
|
639
|
+
route: route.pattern,
|
|
640
|
+
status: "error",
|
|
641
|
+
error: `Dynamic route requires generateStaticParams() with output: 'export'`
|
|
642
|
+
});
|
|
643
|
+
else results.push({
|
|
644
|
+
route: route.pattern,
|
|
645
|
+
status: "skipped",
|
|
646
|
+
reason: "no-static-params"
|
|
647
|
+
});
|
|
648
|
+
continue;
|
|
649
|
+
}
|
|
650
|
+
if (paramSets.length === 0) {
|
|
651
|
+
results.push({
|
|
652
|
+
route: route.pattern,
|
|
653
|
+
status: "skipped",
|
|
654
|
+
reason: "no-static-params"
|
|
655
|
+
});
|
|
656
|
+
continue;
|
|
657
|
+
}
|
|
658
|
+
const queuedRouteUrls = /* @__PURE__ */ new Set();
|
|
659
|
+
for (const params of paramSets) {
|
|
660
|
+
if (params === null || params === void 0) throw new Error(`generateStaticParams() for ${route.pattern} returned an entry with no params object.`);
|
|
661
|
+
const urlPath = buildUrlFromParams(route.pattern, params);
|
|
662
|
+
if (queuedRouteUrls.has(urlPath)) continue;
|
|
663
|
+
queuedRouteUrls.add(urlPath);
|
|
664
|
+
urlsToRender.push({
|
|
665
|
+
urlPath,
|
|
666
|
+
routePattern: route.pattern,
|
|
667
|
+
prerenderRouteParams: encodePrerenderRouteParams(route.pattern, params),
|
|
668
|
+
revalidate,
|
|
669
|
+
isSpeculative: false
|
|
670
|
+
});
|
|
671
|
+
if (config.cacheComponents === true && isExperimentalPprFallbackShellGenerationEnabled()) for (const fallbackShell of createAppPprFallbackShells(route, params)) {
|
|
672
|
+
if (queuedRouteUrls.has(fallbackShell.pathname)) continue;
|
|
673
|
+
queuedRouteUrls.add(fallbackShell.pathname);
|
|
674
|
+
urlsToRender.push({
|
|
675
|
+
urlPath: fallbackShell.pathname,
|
|
676
|
+
routePattern: route.pattern,
|
|
677
|
+
prerenderRouteParams: encodePrerenderRouteParams(route.pattern, fallbackShell.params, fallbackShell.fallbackParamNames),
|
|
678
|
+
revalidate,
|
|
679
|
+
isSpeculative: false,
|
|
680
|
+
isFallback: true
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
} catch (e) {
|
|
685
|
+
const err = e;
|
|
686
|
+
const detail = config.enablePrerenderSourceMaps ? getErrorMessageWithStack(err) : err.message;
|
|
687
|
+
results.push({
|
|
688
|
+
route: route.pattern,
|
|
689
|
+
status: "error",
|
|
690
|
+
error: `Failed to call generateStaticParams(): ${detail}`,
|
|
691
|
+
...e instanceof PrerenderUserFunctionError ? { fatal: true } : {}
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
else if (type === "unknown") urlsToRender.push({
|
|
695
|
+
urlPath: route.pattern,
|
|
696
|
+
routePattern: route.pattern,
|
|
697
|
+
prerenderRouteParams: null,
|
|
698
|
+
revalidate: false,
|
|
699
|
+
isSpeculative: true
|
|
700
|
+
});
|
|
701
|
+
else urlsToRender.push({
|
|
702
|
+
urlPath: route.pattern,
|
|
703
|
+
routePattern: route.pattern,
|
|
704
|
+
prerenderRouteParams: null,
|
|
705
|
+
revalidate,
|
|
706
|
+
isSpeculative: false
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Render a single URL and return its result.
|
|
711
|
+
* `onProgress` is intentionally not called here; the outer loop calls it
|
|
712
|
+
* exactly once per URL after this function returns, keeping the callback
|
|
713
|
+
* at a single, predictable call site.
|
|
714
|
+
*/
|
|
715
|
+
async function renderUrl({ urlPath, routePattern, prerenderRouteParams, revalidate, isSpeculative, isFallback }) {
|
|
716
|
+
try {
|
|
717
|
+
const prerenderRouteParamsHeader = serializePrerenderRouteParamsHeader(prerenderRouteParams);
|
|
718
|
+
const htmlHeaders = new Headers();
|
|
719
|
+
if (prerenderRouteParamsHeader !== null) htmlHeaders.set(VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, prerenderRouteParamsHeader);
|
|
720
|
+
const htmlRequest = new Request(`http://localhost${urlPath}`, { headers: htmlHeaders });
|
|
721
|
+
const htmlRender = await runWithHeadersContext(headersContextFromRequest(htmlRequest), async () => {
|
|
722
|
+
const response = await rscHandler(htmlRequest);
|
|
723
|
+
const cacheControl = response.headers.get("cache-control") ?? "";
|
|
724
|
+
if (!response.ok || isSpeculative && cacheControl.includes("no-store")) {
|
|
725
|
+
await response.body?.cancel();
|
|
726
|
+
return {
|
|
727
|
+
cacheControl,
|
|
728
|
+
html: null,
|
|
729
|
+
ok: response.ok,
|
|
730
|
+
requestCacheLife: null,
|
|
731
|
+
status: response.status
|
|
732
|
+
};
|
|
733
|
+
}
|
|
734
|
+
return {
|
|
735
|
+
cacheControl,
|
|
736
|
+
html: await response.text(),
|
|
737
|
+
ok: true,
|
|
738
|
+
requestCacheLife: _consumeRequestScopedCacheLife(),
|
|
739
|
+
status: response.status
|
|
740
|
+
};
|
|
741
|
+
});
|
|
742
|
+
const htmlCacheControl = htmlRender.cacheControl;
|
|
743
|
+
if (!htmlRender.ok) {
|
|
744
|
+
if (isSpeculative) return {
|
|
745
|
+
route: routePattern,
|
|
746
|
+
status: "skipped",
|
|
747
|
+
reason: "dynamic"
|
|
748
|
+
};
|
|
749
|
+
return {
|
|
750
|
+
route: routePattern,
|
|
751
|
+
status: "error",
|
|
752
|
+
error: `RSC handler returned ${htmlRender.status}`
|
|
753
|
+
};
|
|
754
|
+
}
|
|
755
|
+
if (isSpeculative) {
|
|
756
|
+
if (htmlCacheControl.includes("no-store")) return {
|
|
757
|
+
route: routePattern,
|
|
758
|
+
status: "skipped",
|
|
759
|
+
reason: "dynamic"
|
|
760
|
+
};
|
|
761
|
+
}
|
|
762
|
+
if (htmlRender.html === null) return {
|
|
763
|
+
route: routePattern,
|
|
764
|
+
status: "error",
|
|
765
|
+
error: "RSC handler returned no prerender HTML"
|
|
766
|
+
};
|
|
767
|
+
const html = isFallback ? markAppPprDynamicFallbackShellHtml(htmlRender.html) : htmlRender.html;
|
|
768
|
+
let rscData = extractRscPayloadFromPrerenderedHtml(html);
|
|
769
|
+
if (rscData === null) {
|
|
770
|
+
const rscHeaders = new Headers({
|
|
771
|
+
Accept: "text/x-component",
|
|
772
|
+
RSC: "1"
|
|
773
|
+
});
|
|
774
|
+
if (prerenderRouteParamsHeader !== null) rscHeaders.set(VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, prerenderRouteParamsHeader);
|
|
775
|
+
const rscRequest = new Request(`http://localhost${urlPath}`, { headers: rscHeaders });
|
|
776
|
+
const rscRes = await runWithHeadersContext(headersContextFromRequest(rscRequest), () => rscHandler(rscRequest));
|
|
777
|
+
if (!rscRes.ok) {
|
|
778
|
+
await rscRes.body?.cancel();
|
|
779
|
+
throw new Error(`[vinext] prerenderApp: RSC fallback returned ${rscRes.status} for ${urlPath}`);
|
|
780
|
+
}
|
|
781
|
+
rscData = new Uint8Array(await rscRes.arrayBuffer());
|
|
782
|
+
}
|
|
783
|
+
const outputFiles = [];
|
|
784
|
+
const htmlOutputPath = getOutputPath(urlPath, config.trailingSlash);
|
|
785
|
+
const htmlFullPath = path.join(outDir, htmlOutputPath);
|
|
786
|
+
fs.mkdirSync(path.dirname(htmlFullPath), { recursive: true });
|
|
787
|
+
fs.writeFileSync(htmlFullPath, html, "utf-8");
|
|
788
|
+
outputFiles.push(htmlOutputPath);
|
|
789
|
+
const rscOutputPath = getRscOutputPath(urlPath);
|
|
790
|
+
const rscFullPath = path.join(outDir, rscOutputPath);
|
|
791
|
+
fs.mkdirSync(path.dirname(rscFullPath), { recursive: true });
|
|
792
|
+
fs.writeFileSync(rscFullPath, rscData);
|
|
793
|
+
outputFiles.push(rscOutputPath);
|
|
794
|
+
const renderedCacheControl = resolveRenderedCacheControl(htmlRender.requestCacheLife ?? {}, htmlCacheControl, config.expireTime);
|
|
795
|
+
const renderedRevalidate = typeof revalidate === "number" ? renderedCacheControl.revalidate === void 0 ? revalidate : Math.min(revalidate, renderedCacheControl.revalidate) : renderedCacheControl.revalidate ?? revalidate;
|
|
796
|
+
return {
|
|
797
|
+
route: routePattern,
|
|
798
|
+
status: "rendered",
|
|
799
|
+
outputFiles,
|
|
800
|
+
revalidate: renderedRevalidate,
|
|
801
|
+
...typeof renderedRevalidate === "number" ? { expire: renderedCacheControl.expire } : {},
|
|
802
|
+
router: "app",
|
|
803
|
+
...urlPath !== routePattern ? { path: urlPath } : {},
|
|
804
|
+
...isFallback ? { fallback: true } : {}
|
|
805
|
+
};
|
|
806
|
+
} catch (e) {
|
|
807
|
+
if (isSpeculative) return {
|
|
808
|
+
route: routePattern,
|
|
809
|
+
status: "skipped",
|
|
810
|
+
reason: "dynamic"
|
|
811
|
+
};
|
|
812
|
+
const err = e;
|
|
813
|
+
const base = config.enablePrerenderSourceMaps ? getErrorMessageWithStack(err) : err.message;
|
|
814
|
+
return {
|
|
815
|
+
route: routePattern,
|
|
816
|
+
status: "error",
|
|
817
|
+
error: err.digest ? `${base} (digest: ${err.digest})` : base
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
let completedApp = 0;
|
|
822
|
+
const appResults = await runWithConcurrency(urlsToRender, concurrency, async (urlToRender) => {
|
|
823
|
+
const result = await renderUrl(urlToRender);
|
|
824
|
+
onProgress?.({
|
|
825
|
+
completed: ++completedApp,
|
|
826
|
+
total: urlsToRender.length,
|
|
827
|
+
route: urlToRender.urlPath,
|
|
828
|
+
status: result.status
|
|
829
|
+
});
|
|
830
|
+
return result;
|
|
831
|
+
});
|
|
832
|
+
results.push(...appResults);
|
|
833
|
+
const outputFiles = mode === "export" && metadataRoutes.length > 0 ? emitStaticMetadataFiles(metadataRoutes, outDir) : [];
|
|
834
|
+
try {
|
|
835
|
+
const notFoundRequest = new Request(`http://localhost${NOT_FOUND_SENTINEL_PATH}`);
|
|
836
|
+
const notFoundRes = await runWithHeadersContext(headersContextFromRequest(notFoundRequest), () => rscHandler(notFoundRequest));
|
|
837
|
+
if (notFoundRes.status === 404) {
|
|
838
|
+
const html404 = await notFoundRes.text();
|
|
839
|
+
const fullPath = path.join(outDir, "404.html");
|
|
840
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
841
|
+
fs.writeFileSync(fullPath, html404, "utf-8");
|
|
842
|
+
results.push({
|
|
843
|
+
route: "/404",
|
|
844
|
+
status: "rendered",
|
|
845
|
+
outputFiles: ["404.html"],
|
|
846
|
+
revalidate: false,
|
|
847
|
+
router: "app"
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
} catch {}
|
|
851
|
+
if (!skipManifest) writePrerenderIndex(results, manifestDir, {
|
|
852
|
+
buildId: config.buildId,
|
|
853
|
+
trailingSlash: config.trailingSlash
|
|
854
|
+
});
|
|
855
|
+
return {
|
|
856
|
+
routes: results,
|
|
857
|
+
...outputFiles.length > 0 ? { outputFiles } : {}
|
|
858
|
+
};
|
|
859
|
+
} finally {
|
|
860
|
+
setCacheHandler(previousHandler);
|
|
861
|
+
if (previousPrerenderFlag === void 0) delete process.env.VINEXT_PRERENDER;
|
|
862
|
+
else process.env.VINEXT_PRERENDER = previousPrerenderFlag;
|
|
863
|
+
if (ownedProdServerHandle) await new Promise((resolve) => ownedProdServerHandle.server.close(() => resolve()));
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
function resolveRenderedCacheControl(requestCacheLife, cacheControl, fallbackExpireSeconds) {
|
|
867
|
+
const sMaxage = parseCacheControlSeconds(cacheControl, "s-maxage");
|
|
868
|
+
const staleWhileRevalidate = parseCacheControlSeconds(cacheControl, "stale-while-revalidate");
|
|
869
|
+
const revalidate = requestCacheLife.revalidate ?? (staleWhileRevalidate === void 0 ? void 0 : sMaxage);
|
|
870
|
+
return {
|
|
871
|
+
expire: requestCacheLife.expire ?? resolveRenderedExpireSeconds({
|
|
872
|
+
fallbackExpireSeconds,
|
|
873
|
+
sMaxage,
|
|
874
|
+
staleWhileRevalidate
|
|
875
|
+
}),
|
|
876
|
+
...revalidate === void 0 ? {} : { revalidate }
|
|
877
|
+
};
|
|
878
|
+
}
|
|
879
|
+
function resolveRenderedExpireSeconds(options) {
|
|
880
|
+
const { fallbackExpireSeconds, sMaxage, staleWhileRevalidate } = options;
|
|
881
|
+
if (sMaxage === void 0 || staleWhileRevalidate === void 0) return fallbackExpireSeconds;
|
|
882
|
+
return sMaxage + staleWhileRevalidate;
|
|
883
|
+
}
|
|
884
|
+
function parseCacheControlSeconds(cacheControl, directive) {
|
|
885
|
+
for (const part of cacheControl.split(",")) {
|
|
886
|
+
const [rawName, rawValue] = part.trim().split("=", 2);
|
|
887
|
+
if (rawName.trim().toLowerCase() !== directive) continue;
|
|
888
|
+
if (rawValue === void 0) return void 0;
|
|
889
|
+
const value = Number(rawValue.trim());
|
|
890
|
+
if (!Number.isFinite(value) || value < 0) return void 0;
|
|
891
|
+
return value;
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
/**
|
|
895
|
+
* Write `vinext-prerender.json` to `outDir`.
|
|
896
|
+
*
|
|
897
|
+
* Contains a flat list of route results used during testing and as a seed for
|
|
898
|
+
* ISR cache population at production startup. The `buildId` is included so
|
|
899
|
+
* the seeding function can construct matching cache keys.
|
|
900
|
+
*/
|
|
901
|
+
function writePrerenderIndex(routes, outDir, options) {
|
|
902
|
+
const { buildId, trailingSlash } = options ?? {};
|
|
903
|
+
const indexRoutes = routes.map((r) => {
|
|
904
|
+
if (r.status === "rendered") return {
|
|
905
|
+
route: r.route,
|
|
906
|
+
status: r.status,
|
|
907
|
+
revalidate: r.revalidate,
|
|
908
|
+
...typeof r.revalidate === "number" ? { expire: r.expire } : {},
|
|
909
|
+
router: r.router,
|
|
910
|
+
...r.path ? { path: r.path } : {},
|
|
911
|
+
...r.fallback ? { fallback: true } : {}
|
|
912
|
+
};
|
|
913
|
+
if (r.status === "skipped") return {
|
|
914
|
+
route: r.route,
|
|
915
|
+
status: r.status,
|
|
916
|
+
reason: r.reason
|
|
917
|
+
};
|
|
918
|
+
return {
|
|
919
|
+
route: r.route,
|
|
920
|
+
status: r.status,
|
|
921
|
+
error: r.error
|
|
922
|
+
};
|
|
923
|
+
});
|
|
924
|
+
const index = {
|
|
925
|
+
...buildId ? { buildId } : {},
|
|
926
|
+
...typeof trailingSlash === "boolean" ? { trailingSlash } : {},
|
|
927
|
+
routes: indexRoutes
|
|
928
|
+
};
|
|
929
|
+
fs.writeFileSync(path.join(outDir, "vinext-prerender.json"), JSON.stringify(index, null, 2), "utf-8");
|
|
930
|
+
}
|
|
931
|
+
//#endregion
|
|
932
|
+
export { extractRscPayloadFromPrerenderedHtml, prerenderApp, prerenderPages, readPrerenderSecret, resolveParentParams, writePrerenderIndex };
|