@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,247 @@
|
|
|
1
|
+
import { badRequestResponse } from "./http-error-responses.js";
|
|
2
|
+
//#region src/server/image-optimization.ts
|
|
3
|
+
/**
|
|
4
|
+
* Image optimization request handler.
|
|
5
|
+
*
|
|
6
|
+
* Handles `/_next/image?url=...&w=...&q=...` requests. In production
|
|
7
|
+
* on Cloudflare Workers, uses the Images binding (`env.IMAGES`) to
|
|
8
|
+
* resize and transcode on the fly. On other runtimes (Node.js dev/prod
|
|
9
|
+
* server), serves the original file as a passthrough with appropriate
|
|
10
|
+
* Cache-Control headers.
|
|
11
|
+
*
|
|
12
|
+
* Format negotiation: inspects the `Accept` header and serves AVIF, WebP,
|
|
13
|
+
* or JPEG depending on client support.
|
|
14
|
+
*
|
|
15
|
+
* Security: All image responses include Content-Security-Policy and
|
|
16
|
+
* X-Content-Type-Options headers to prevent XSS via SVG or Content-Type
|
|
17
|
+
* spoofing. SVG content is blocked by default (following Next.js behavior).
|
|
18
|
+
* When `dangerouslyAllowSVG` is enabled in next.config.js, SVGs are served
|
|
19
|
+
* as-is (no transformation) with security headers applied.
|
|
20
|
+
*/
|
|
21
|
+
/** The pathname that triggers image optimization (matches Next.js). */
|
|
22
|
+
const IMAGE_OPTIMIZATION_PATH = "/_next/image";
|
|
23
|
+
/**
|
|
24
|
+
* Vinext-prefixed alias for the image optimization endpoint. Accepted
|
|
25
|
+
* alongside IMAGE_OPTIMIZATION_PATH so apps that wire image URLs to the
|
|
26
|
+
* vinext-prefixed path continue to work; emit IMAGE_OPTIMIZATION_PATH
|
|
27
|
+
* for any newly generated URLs.
|
|
28
|
+
*/
|
|
29
|
+
const VINEXT_IMAGE_OPTIMIZATION_PATH = "/_vinext/image";
|
|
30
|
+
/** Returns true when `pathname` is either supported image optimization endpoint. */
|
|
31
|
+
function isImageOptimizationPath(pathname) {
|
|
32
|
+
return pathname === "/_next/image" || pathname === "/_vinext/image";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Next.js default device sizes and image sizes.
|
|
36
|
+
* These are the allowed widths for image optimization when no custom
|
|
37
|
+
* config is provided. Matches Next.js defaults exactly.
|
|
38
|
+
*/
|
|
39
|
+
const DEFAULT_DEVICE_SIZES = [
|
|
40
|
+
640,
|
|
41
|
+
750,
|
|
42
|
+
828,
|
|
43
|
+
1080,
|
|
44
|
+
1200,
|
|
45
|
+
1920,
|
|
46
|
+
2048,
|
|
47
|
+
3840
|
|
48
|
+
];
|
|
49
|
+
const DEFAULT_IMAGE_SIZES = [
|
|
50
|
+
16,
|
|
51
|
+
32,
|
|
52
|
+
48,
|
|
53
|
+
64,
|
|
54
|
+
96,
|
|
55
|
+
128,
|
|
56
|
+
256,
|
|
57
|
+
384
|
|
58
|
+
];
|
|
59
|
+
const DEV_BLUR_MAX_WIDTH = 8;
|
|
60
|
+
const DEV_BLUR_QUALITY = 70;
|
|
61
|
+
/**
|
|
62
|
+
* Pick the allowed width numerically closest to the requested value.
|
|
63
|
+
* On a tie, prefer the larger width so the served image is not undersized.
|
|
64
|
+
*/
|
|
65
|
+
function snapToNearestAllowedWidth(requestedWidth, allowedWidths) {
|
|
66
|
+
if (allowedWidths.length === 0) return requestedWidth;
|
|
67
|
+
let closest = allowedWidths[0];
|
|
68
|
+
let minDiff = Math.abs(requestedWidth - closest);
|
|
69
|
+
for (const candidate of allowedWidths) {
|
|
70
|
+
const diff = Math.abs(requestedWidth - candidate);
|
|
71
|
+
if (diff < minDiff || diff === minDiff && candidate > closest) {
|
|
72
|
+
minDiff = diff;
|
|
73
|
+
closest = candidate;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return closest;
|
|
77
|
+
}
|
|
78
|
+
function resolveDevImageRedirect(requestUrl, allowedWidths = [...DEFAULT_DEVICE_SIZES, ...DEFAULT_IMAGE_SIZES], allowedQualities, options = { isDev: true }) {
|
|
79
|
+
const params = parseImageParams(requestUrl, allowedWidths, allowedQualities, options);
|
|
80
|
+
if (!params) return null;
|
|
81
|
+
if (params.imageUrl.startsWith("/@") || params.imageUrl.startsWith("/__vite") || params.imageUrl.startsWith("/node_modules")) return null;
|
|
82
|
+
const resolved = new URL(params.imageUrl, requestUrl.origin);
|
|
83
|
+
if (resolved.origin !== requestUrl.origin) return null;
|
|
84
|
+
return resolved.pathname + resolved.search;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parse and validate image optimization query parameters.
|
|
88
|
+
* Returns null if the request is malformed.
|
|
89
|
+
*
|
|
90
|
+
* Ported from Next.js:
|
|
91
|
+
* test/integration/image-optimizer/test/index.test.ts
|
|
92
|
+
* https://github.com/vercel/next.js/blob/canary/test/integration/image-optimizer/test/index.test.ts
|
|
93
|
+
*/
|
|
94
|
+
function parseImageParams(url, allowedWidths = [...DEFAULT_DEVICE_SIZES, ...DEFAULT_IMAGE_SIZES], allowedQualities, options = {}) {
|
|
95
|
+
const allowedParamNames = new Set([
|
|
96
|
+
"url",
|
|
97
|
+
"w",
|
|
98
|
+
"q"
|
|
99
|
+
]);
|
|
100
|
+
for (const name of url.searchParams.keys()) if (!allowedParamNames.has(name) || url.searchParams.getAll(name).length !== 1) return null;
|
|
101
|
+
const imageUrl = url.searchParams.get("url");
|
|
102
|
+
if (!imageUrl) return null;
|
|
103
|
+
if (imageUrl.length > 3072) return null;
|
|
104
|
+
const widthParam = url.searchParams.get("w");
|
|
105
|
+
const qualityParam = url.searchParams.get("q");
|
|
106
|
+
if (!widthParam || !/^[0-9]+$/.test(widthParam)) return null;
|
|
107
|
+
if (!qualityParam || !/^[0-9]+$/.test(qualityParam)) return null;
|
|
108
|
+
const width = Number.parseInt(widthParam, 10);
|
|
109
|
+
const quality = Number.parseInt(qualityParam, 10);
|
|
110
|
+
if (String(width) !== widthParam || String(quality) !== qualityParam) return null;
|
|
111
|
+
const isDevBlurWidth = options.isDev && width <= DEV_BLUR_MAX_WIDTH;
|
|
112
|
+
const isDevBlurQuality = options.isDev && quality === DEV_BLUR_QUALITY;
|
|
113
|
+
if (width <= 0) return null;
|
|
114
|
+
const resolvedWidth = isDevBlurWidth || allowedWidths.includes(width) ? width : snapToNearestAllowedWidth(width, allowedWidths);
|
|
115
|
+
if (quality < 1 || quality > 100) return null;
|
|
116
|
+
if (allowedQualities && !allowedQualities.includes(quality) && !isDevBlurQuality) return null;
|
|
117
|
+
const normalizedUrl = imageUrl.replaceAll("\\", "/");
|
|
118
|
+
if (!normalizedUrl.startsWith("/") || normalizedUrl.startsWith("//")) return null;
|
|
119
|
+
try {
|
|
120
|
+
const base = "https://localhost";
|
|
121
|
+
if (new URL(normalizedUrl, base).origin !== base) return null;
|
|
122
|
+
} catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
imageUrl: normalizedUrl,
|
|
127
|
+
width: resolvedWidth,
|
|
128
|
+
quality
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Negotiate the best output format based on the Accept header.
|
|
133
|
+
* Returns an IANA media type.
|
|
134
|
+
*/
|
|
135
|
+
function negotiateImageFormat(acceptHeader) {
|
|
136
|
+
if (!acceptHeader) return "image/jpeg";
|
|
137
|
+
if (acceptHeader.includes("image/avif")) return "image/avif";
|
|
138
|
+
if (acceptHeader.includes("image/webp")) return "image/webp";
|
|
139
|
+
return "image/jpeg";
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Standard Cache-Control header for optimized images.
|
|
143
|
+
* Optimized images are immutable because the URL encodes the transform params.
|
|
144
|
+
*/
|
|
145
|
+
const IMAGE_CACHE_CONTROL = "public, max-age=31536000, immutable";
|
|
146
|
+
/**
|
|
147
|
+
* Content-Security-Policy for image optimization responses.
|
|
148
|
+
* Blocks script execution and framing to prevent XSS via SVG or other
|
|
149
|
+
* active content that might be served through the image endpoint.
|
|
150
|
+
* Matches Next.js default: script-src 'none'; frame-src 'none'; sandbox;
|
|
151
|
+
*/
|
|
152
|
+
const IMAGE_CONTENT_SECURITY_POLICY = "script-src 'none'; frame-src 'none'; sandbox;";
|
|
153
|
+
/**
|
|
154
|
+
* Allowlist of Content-Types that are safe to serve from the image endpoint.
|
|
155
|
+
* SVG is intentionally excluded — it can contain embedded JavaScript and is
|
|
156
|
+
* essentially an XML document, not a safe raster image format.
|
|
157
|
+
*/
|
|
158
|
+
const SAFE_IMAGE_CONTENT_TYPES = new Set([
|
|
159
|
+
"image/jpeg",
|
|
160
|
+
"image/png",
|
|
161
|
+
"image/gif",
|
|
162
|
+
"image/webp",
|
|
163
|
+
"image/avif",
|
|
164
|
+
"image/x-icon",
|
|
165
|
+
"image/vnd.microsoft.icon",
|
|
166
|
+
"image/bmp",
|
|
167
|
+
"image/tiff"
|
|
168
|
+
]);
|
|
169
|
+
/**
|
|
170
|
+
* Check if a Content-Type header value is a safe image type.
|
|
171
|
+
* Returns false for SVG (unless dangerouslyAllowSVG is true), HTML, or any non-image type.
|
|
172
|
+
*/
|
|
173
|
+
function isSafeImageContentType(contentType, dangerouslyAllowSVG = false) {
|
|
174
|
+
if (!contentType) return false;
|
|
175
|
+
const mediaType = contentType.split(";")[0].trim().toLowerCase();
|
|
176
|
+
if (SAFE_IMAGE_CONTENT_TYPES.has(mediaType)) return true;
|
|
177
|
+
if (dangerouslyAllowSVG && mediaType === "image/svg+xml") return true;
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Apply security headers to an image optimization response.
|
|
182
|
+
* These headers are set on every response from the image endpoint,
|
|
183
|
+
* regardless of whether the image was transformed or served as-is.
|
|
184
|
+
* When an ImageConfig is provided, uses its values for CSP and Content-Disposition.
|
|
185
|
+
*/
|
|
186
|
+
function setImageSecurityHeaders(headers, config) {
|
|
187
|
+
headers.set("Content-Security-Policy", config?.contentSecurityPolicy ?? "script-src 'none'; frame-src 'none'; sandbox;");
|
|
188
|
+
headers.set("X-Content-Type-Options", "nosniff");
|
|
189
|
+
headers.set("Content-Disposition", config?.contentDispositionType === "attachment" ? "attachment" : "inline");
|
|
190
|
+
}
|
|
191
|
+
function createPassthroughImageResponse(source, config) {
|
|
192
|
+
const headers = new Headers(source.headers);
|
|
193
|
+
headers.set("Cache-Control", IMAGE_CACHE_CONTROL);
|
|
194
|
+
headers.set("Vary", "Accept");
|
|
195
|
+
setImageSecurityHeaders(headers, config);
|
|
196
|
+
return new Response(source.body, {
|
|
197
|
+
status: 200,
|
|
198
|
+
headers
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Handle image optimization requests.
|
|
203
|
+
*
|
|
204
|
+
* Parses and validates the request, fetches the source image via the provided
|
|
205
|
+
* handlers, optionally transforms it, and returns the response with appropriate
|
|
206
|
+
* cache headers.
|
|
207
|
+
*/
|
|
208
|
+
async function handleImageOptimization(request, handlers, allowedWidths, imageConfig) {
|
|
209
|
+
const params = parseImageParams(new URL(request.url), allowedWidths, imageConfig?.qualities);
|
|
210
|
+
if (!params) return badRequestResponse();
|
|
211
|
+
const { imageUrl, width, quality } = params;
|
|
212
|
+
const source = await handlers.fetchAsset(imageUrl, request);
|
|
213
|
+
if (!source.ok || !source.body) return new Response("Image not found", { status: 404 });
|
|
214
|
+
const format = negotiateImageFormat(request.headers.get("Accept"));
|
|
215
|
+
const sourceContentType = source.headers.get("Content-Type");
|
|
216
|
+
if (!isSafeImageContentType(sourceContentType, imageConfig?.dangerouslyAllowSVG)) return new Response("The requested resource is not an allowed image type", { status: 400 });
|
|
217
|
+
if (sourceContentType?.split(";")[0].trim().toLowerCase() === "image/svg+xml") return createPassthroughImageResponse(source, imageConfig);
|
|
218
|
+
if (handlers.transformImage) try {
|
|
219
|
+
const transformed = await handlers.transformImage(source.body, {
|
|
220
|
+
width,
|
|
221
|
+
format,
|
|
222
|
+
quality
|
|
223
|
+
});
|
|
224
|
+
const headers = new Headers(transformed.headers);
|
|
225
|
+
headers.set("Cache-Control", IMAGE_CACHE_CONTROL);
|
|
226
|
+
headers.set("Vary", "Accept");
|
|
227
|
+
setImageSecurityHeaders(headers, imageConfig);
|
|
228
|
+
if (!isSafeImageContentType(headers.get("Content-Type"), imageConfig?.dangerouslyAllowSVG)) headers.set("Content-Type", format);
|
|
229
|
+
return new Response(transformed.body, {
|
|
230
|
+
status: 200,
|
|
231
|
+
headers
|
|
232
|
+
});
|
|
233
|
+
} catch (e) {
|
|
234
|
+
console.error("[vinext] Image optimization error:", e);
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
return createPassthroughImageResponse(source, imageConfig);
|
|
238
|
+
} catch (e) {
|
|
239
|
+
console.error("[vinext] Image fallback error, refetching source image:", e);
|
|
240
|
+
const refetchedSource = await handlers.fetchAsset(imageUrl, request);
|
|
241
|
+
if (!refetchedSource.ok || !refetchedSource.body) return new Response("Image not found", { status: 404 });
|
|
242
|
+
if (!isSafeImageContentType(refetchedSource.headers.get("Content-Type"), imageConfig?.dangerouslyAllowSVG)) return new Response("The requested resource is not an allowed image type", { status: 400 });
|
|
243
|
+
return createPassthroughImageResponse(refetchedSource, imageConfig);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
//#endregion
|
|
247
|
+
export { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, IMAGE_CACHE_CONTROL, IMAGE_CONTENT_SECURITY_POLICY, IMAGE_OPTIMIZATION_PATH, VINEXT_IMAGE_OPTIMIZATION_PATH, handleImageOptimization, isImageOptimizationPath, isSafeImageContentType, negotiateImageFormat, parseImageParams, resolveDevImageRedirect, snapToNearestAllowedWidth };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/server/implicit-tags.d.ts
|
|
2
|
+
type AppCacheLeafKind = "page" | "route";
|
|
3
|
+
declare function buildAppPageTags(cleanPathname: string, extraTags: string[], routeSegments: readonly string[]): string[];
|
|
4
|
+
declare function buildPageCacheTags(pathname: string, extraTags: string[], routeSegments: string[], leafKind: AppCacheLeafKind): string[];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { buildAppPageTags, buildPageCacheTags };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { encodeCacheTag } from "../utils/encode-cache-tag.js";
|
|
2
|
+
//#region src/server/implicit-tags.ts
|
|
3
|
+
const NEXT_CACHE_IMPLICIT_TAG_ID = "_N_T_";
|
|
4
|
+
function appendUnique(tags, tag) {
|
|
5
|
+
if (!tags.includes(tag)) tags.push(tag);
|
|
6
|
+
}
|
|
7
|
+
function normalizeRouteSegment(segment) {
|
|
8
|
+
if (!segment || segment === "." || segment.startsWith("@")) return null;
|
|
9
|
+
return segment;
|
|
10
|
+
}
|
|
11
|
+
function buildRouteCachePath(routeSegments, leafKind) {
|
|
12
|
+
const parts = [];
|
|
13
|
+
for (const segment of routeSegments) {
|
|
14
|
+
const normalized = normalizeRouteSegment(segment);
|
|
15
|
+
if (normalized) parts.push(normalized);
|
|
16
|
+
}
|
|
17
|
+
parts.push(leafKind);
|
|
18
|
+
return `/${parts.join("/")}`;
|
|
19
|
+
}
|
|
20
|
+
function appendDerivedTags(tags, routePath) {
|
|
21
|
+
appendUnique(tags, `${NEXT_CACHE_IMPLICIT_TAG_ID}/layout`);
|
|
22
|
+
if (!routePath.startsWith("/")) return;
|
|
23
|
+
const routeParts = routePath.split("/");
|
|
24
|
+
const leafIndex = routeParts.length - 1;
|
|
25
|
+
for (let i = 1; i <= routeParts.length; i++) {
|
|
26
|
+
let currentPathname = routeParts.slice(0, i).join("/");
|
|
27
|
+
if (!currentPathname) continue;
|
|
28
|
+
if (!(i - 1 === leafIndex)) currentPathname = `${currentPathname}/layout`;
|
|
29
|
+
appendUnique(tags, `${NEXT_CACHE_IMPLICIT_TAG_ID}${currentPathname}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function buildAppPageTags(cleanPathname, extraTags, routeSegments) {
|
|
33
|
+
return buildPageCacheTags(cleanPathname, extraTags, [...routeSegments], "page");
|
|
34
|
+
}
|
|
35
|
+
function buildPageCacheTags(pathname, extraTags, routeSegments, leafKind) {
|
|
36
|
+
const tags = [pathname, `${NEXT_CACHE_IMPLICIT_TAG_ID}${pathname}`];
|
|
37
|
+
if (pathname === "/") appendUnique(tags, `${NEXT_CACHE_IMPLICIT_TAG_ID}/index`);
|
|
38
|
+
if (pathname === "/index") appendUnique(tags, `${NEXT_CACHE_IMPLICIT_TAG_ID}/`);
|
|
39
|
+
appendDerivedTags(tags, buildRouteCachePath(routeSegments, leafKind));
|
|
40
|
+
for (const tag of extraTags) appendUnique(tags, tag);
|
|
41
|
+
return tags.map(encodeCacheTag);
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { buildAppPageTags, buildPageCacheTags };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/server/instrumentation-runtime.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lazy, idempotent instrumentation initialisation.
|
|
4
|
+
*
|
|
5
|
+
* The generated App Router RSC entry calls this on the first request instead
|
|
6
|
+
* of embedding the bookkeeping directly in codegen. This keeps the entry
|
|
7
|
+
* module thin (it only describes the app shape) while the actual runtime
|
|
8
|
+
* behaviour lives in a normal typed module that can be unit-tested.
|
|
9
|
+
*
|
|
10
|
+
* ## Why lazy?
|
|
11
|
+
*
|
|
12
|
+
* A top-level `await` at module evaluation time blocks the entire V8 isolate
|
|
13
|
+
* startup phase. On Cloudflare Workers that latency is added to every cold
|
|
14
|
+
* start. Moving the `register()` call into the first request handler keeps
|
|
15
|
+
* module evaluation synchronous while still guaranteeing that instrumentation
|
|
16
|
+
* runs before any request is handled.
|
|
17
|
+
*
|
|
18
|
+
* ## Why idempotent?
|
|
19
|
+
*
|
|
20
|
+
* The same handler may be invoked concurrently (e.g. on a warm Worker).
|
|
21
|
+
* A module-level `initialized` flag + a shared promise ensure that
|
|
22
|
+
* `register()` is called exactly once even when multiple requests race.
|
|
23
|
+
*
|
|
24
|
+
* ## Next.js semantics
|
|
25
|
+
*
|
|
26
|
+
* Next.js calls `register()` once when the server process starts, before any
|
|
27
|
+
* request handling. Our lazy init preserves that guarantee because the first
|
|
28
|
+
* request cannot proceed past this call until `register()` has resolved.
|
|
29
|
+
*
|
|
30
|
+
* References:
|
|
31
|
+
* - https://nextjs.org/docs/app/building-your-application/optimizing/instrumentation
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Ensure the instrumentation module's `register()` and `onRequestError`
|
|
35
|
+
* hooks have been applied exactly once.
|
|
36
|
+
*
|
|
37
|
+
* After `register()` runs, we extend the OTel tracer provider so that spans
|
|
38
|
+
* created inside Cache Component renders (warmup / fallback-resume phases) use
|
|
39
|
+
* a fresh OTel context rather than inheriting the prerender work unit store.
|
|
40
|
+
* This mirrors Next.js's `afterRegistration()` call in
|
|
41
|
+
* `instrumentation-node-extensions.ts`.
|
|
42
|
+
*
|
|
43
|
+
* @param instrumentationModule - The imported `instrumentation.ts` module.
|
|
44
|
+
* Passed as an argument so the generated entry can import it normally
|
|
45
|
+
* without this helper needing to know the module path.
|
|
46
|
+
*/
|
|
47
|
+
declare function ensureInstrumentationRegistered(instrumentationModule: Record<string, unknown>): Promise<void>;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { ensureInstrumentationRegistered };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { extendTracerProviderForCacheComponents } from "./otel-tracer-extension.js";
|
|
2
|
+
//#region src/server/instrumentation-runtime.ts
|
|
3
|
+
let initialized = false;
|
|
4
|
+
let initPromise = null;
|
|
5
|
+
function isOnRequestErrorHandler(value) {
|
|
6
|
+
return typeof value === "function";
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Ensure the instrumentation module's `register()` and `onRequestError`
|
|
10
|
+
* hooks have been applied exactly once.
|
|
11
|
+
*
|
|
12
|
+
* After `register()` runs, we extend the OTel tracer provider so that spans
|
|
13
|
+
* created inside Cache Component renders (warmup / fallback-resume phases) use
|
|
14
|
+
* a fresh OTel context rather than inheriting the prerender work unit store.
|
|
15
|
+
* This mirrors Next.js's `afterRegistration()` call in
|
|
16
|
+
* `instrumentation-node-extensions.ts`.
|
|
17
|
+
*
|
|
18
|
+
* @param instrumentationModule - The imported `instrumentation.ts` module.
|
|
19
|
+
* Passed as an argument so the generated entry can import it normally
|
|
20
|
+
* without this helper needing to know the module path.
|
|
21
|
+
*/
|
|
22
|
+
async function ensureInstrumentationRegistered(instrumentationModule) {
|
|
23
|
+
if (process.env.VINEXT_PRERENDER === "1") return;
|
|
24
|
+
if (initialized) return;
|
|
25
|
+
if (initPromise) return initPromise;
|
|
26
|
+
initPromise = (async () => {
|
|
27
|
+
if (typeof instrumentationModule.register === "function") await instrumentationModule.register();
|
|
28
|
+
extendTracerProviderForCacheComponents();
|
|
29
|
+
if (isOnRequestErrorHandler(instrumentationModule.onRequestError)) globalThis.__VINEXT_onRequestErrorHandler__ = instrumentationModule.onRequestError;
|
|
30
|
+
initialized = true;
|
|
31
|
+
})();
|
|
32
|
+
return initPromise;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { ensureInstrumentationRegistered };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ValidFileMatcher } from "../routing/file-matcher.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/instrumentation.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Minimal duck-typed interface for the module runner passed to
|
|
6
|
+
* `runInstrumentation`. Only `.import()` is used — this avoids requiring
|
|
7
|
+
* callers (including tests) to provide a full `ModuleRunner` instance.
|
|
8
|
+
*/
|
|
9
|
+
type ModuleImporter = {
|
|
10
|
+
import(id: string): Promise<unknown>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Import a module via the runner and cast the result to `Record<string, any>`.
|
|
14
|
+
*
|
|
15
|
+
* Centralises the `as Record<string, any>` cast so callers don't need
|
|
16
|
+
* per-call oxlint-disable comments.
|
|
17
|
+
*/
|
|
18
|
+
declare function importModule(runner: ModuleImporter, id: string): Promise<Record<string, any>>;
|
|
19
|
+
/**
|
|
20
|
+
* Find the instrumentation file in the project root.
|
|
21
|
+
*/
|
|
22
|
+
declare function findInstrumentationFile(root: string, fileMatcher: ValidFileMatcher): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Find the instrumentation-client file in the project root.
|
|
25
|
+
*/
|
|
26
|
+
declare function findInstrumentationClientFile(root: string, fileMatcher: ValidFileMatcher): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* The onRequestError handler type from Next.js instrumentation.
|
|
29
|
+
*
|
|
30
|
+
* Called when an unhandled error occurs during request handling.
|
|
31
|
+
* Provides the error, the request info, and an error context.
|
|
32
|
+
*/
|
|
33
|
+
type OnRequestErrorContext = {
|
|
34
|
+
/** The route path (e.g., '/blog/[slug]') */routerKind: "Pages Router" | "App Router"; /** The matched route pattern */
|
|
35
|
+
routePath: string; /** The route type */
|
|
36
|
+
routeType: "render" | "route" | "action" | "middleware"; /** HTTP status code that will be sent */
|
|
37
|
+
revalidateReason?: "on-demand" | "stale" | undefined;
|
|
38
|
+
};
|
|
39
|
+
type OnRequestErrorHandler = (error: Error, request: {
|
|
40
|
+
path: string;
|
|
41
|
+
method: string;
|
|
42
|
+
headers: Record<string, string>;
|
|
43
|
+
}, context: OnRequestErrorContext) => void | Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Get the registered onRequestError handler (if any).
|
|
46
|
+
*
|
|
47
|
+
* Reads from globalThis so it works across Vite environment boundaries.
|
|
48
|
+
*/
|
|
49
|
+
declare function getOnRequestErrorHandler(): OnRequestErrorHandler | null;
|
|
50
|
+
/**
|
|
51
|
+
* Load and execute the instrumentation file via a ModuleRunner.
|
|
52
|
+
*
|
|
53
|
+
* Called once during Pages Router server startup (`configureServer`). It:
|
|
54
|
+
* 1. Loads the instrumentation module via `runner.import()`.
|
|
55
|
+
* 2. Calls the `register()` function if exported.
|
|
56
|
+
* 3. Stores the `onRequestError()` handler on `globalThis` so it is visible
|
|
57
|
+
* to all Vite environment module graphs (SSR and the host process share
|
|
58
|
+
* the same Node.js `globalThis`).
|
|
59
|
+
*
|
|
60
|
+
* **App Router** does not use this function. For App Router, `register()` is
|
|
61
|
+
* emitted as a top-level `await` inside the generated RSC entry module so it
|
|
62
|
+
* runs in the same Worker/environment as request handling.
|
|
63
|
+
*
|
|
64
|
+
* @param runner - A ModuleRunner created via `createDirectRunner()`. Must be
|
|
65
|
+
* the same long-lived runner used for middleware and SSR so the module graph
|
|
66
|
+
* is shared. Safe with all Vite plugin combinations, including
|
|
67
|
+
* `@cloudflare/vite-plugin`, because it never touches the hot channel.
|
|
68
|
+
* @param instrumentationPath - Absolute path to the instrumentation file
|
|
69
|
+
*/
|
|
70
|
+
declare function runInstrumentation(runner: ModuleImporter, instrumentationPath: string): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Report a request error via the instrumentation handler.
|
|
73
|
+
*
|
|
74
|
+
* No-op if no onRequestError handler is registered.
|
|
75
|
+
*
|
|
76
|
+
* Reads the handler from globalThis so this function works correctly regardless
|
|
77
|
+
* of which environment it is called from.
|
|
78
|
+
*/
|
|
79
|
+
declare function reportRequestError(error: Error, request: {
|
|
80
|
+
path: string;
|
|
81
|
+
method: string;
|
|
82
|
+
headers: Record<string, string>;
|
|
83
|
+
}, context: OnRequestErrorContext): Promise<void>;
|
|
84
|
+
//#endregion
|
|
85
|
+
export { ModuleImporter, OnRequestErrorContext, OnRequestErrorHandler, findInstrumentationClientFile, findInstrumentationFile, getOnRequestErrorHandler, importModule, reportRequestError, runInstrumentation };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
//#region src/server/instrumentation.ts
|
|
5
|
+
/**
|
|
6
|
+
* instrumentation.ts support
|
|
7
|
+
*
|
|
8
|
+
* Next.js supports an `instrumentation.ts` file at the project root that
|
|
9
|
+
* exports a `register()` function. This function is called once when the
|
|
10
|
+
* server starts, before any request handling. It's the recommended way to
|
|
11
|
+
* set up observability tools (Sentry, Datadog, OpenTelemetry, etc.).
|
|
12
|
+
*
|
|
13
|
+
* Optionally, it can also export `onRequestError()` which is called when
|
|
14
|
+
* an unhandled error occurs during request handling.
|
|
15
|
+
*
|
|
16
|
+
* References:
|
|
17
|
+
* - https://nextjs.org/docs/app/building-your-application/optimizing/instrumentation
|
|
18
|
+
*
|
|
19
|
+
* ## App Router
|
|
20
|
+
*
|
|
21
|
+
* For App Router, `register()` is baked directly into the generated RSC entry
|
|
22
|
+
* as a top-level `await` at module evaluation time (see `entries/app-rsc-entry.ts`
|
|
23
|
+
* `generateRscEntry`). This means it runs inside the Worker process (or RSC
|
|
24
|
+
* Vite environment) — the same process that handles requests — before any
|
|
25
|
+
* request is served. `runInstrumentation()` is NOT called from `configureServer`
|
|
26
|
+
* for App Router.
|
|
27
|
+
*
|
|
28
|
+
* The `onRequestError` handler is stored on `globalThis` so it is visible across
|
|
29
|
+
* the RSC and SSR Vite environments (separate module graphs, same Node.js process).
|
|
30
|
+
* With `@cloudflare/vite-plugin` it runs entirely inside the Worker, so
|
|
31
|
+
* `globalThis` is the Worker's global — also correct.
|
|
32
|
+
*
|
|
33
|
+
* ## Pages Router
|
|
34
|
+
*
|
|
35
|
+
* Pages Router has no RSC entry, so `configureServer()` is the right place to
|
|
36
|
+
* call `register()`. `runInstrumentation()` accepts a `ModuleRunner` (created
|
|
37
|
+
* via `createDirectRunner()`) rather than `server.ssrLoadModule()` so it is
|
|
38
|
+
* safe when `@cloudflare/vite-plugin` is present — that plugin replaces the
|
|
39
|
+
* SSR environment's hot channel, causing `ssrLoadModule()` to crash with
|
|
40
|
+
* `TypeError: Cannot read properties of undefined (reading 'outsideEmitter')`.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Import a module via the runner and cast the result to `Record<string, any>`.
|
|
44
|
+
*
|
|
45
|
+
* Centralises the `as Record<string, any>` cast so callers don't need
|
|
46
|
+
* per-call oxlint-disable comments.
|
|
47
|
+
*/
|
|
48
|
+
async function importModule(runner, id) {
|
|
49
|
+
return await runner.import(id);
|
|
50
|
+
}
|
|
51
|
+
const INSTRUMENTATION_LOCATIONS = ["", "src/"];
|
|
52
|
+
function findInstrumentationHookFile(root, basename, fileMatcher) {
|
|
53
|
+
for (const dir of INSTRUMENTATION_LOCATIONS) for (const ext of fileMatcher.dottedExtensions) {
|
|
54
|
+
const fullPath = path.posix.join(root, dir, `${basename}${ext}`);
|
|
55
|
+
if (fs.existsSync(fullPath)) return fullPath;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Find the instrumentation file in the project root.
|
|
61
|
+
*/
|
|
62
|
+
function findInstrumentationFile(root, fileMatcher) {
|
|
63
|
+
return findInstrumentationHookFile(root, "instrumentation", fileMatcher);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Find the instrumentation-client file in the project root.
|
|
67
|
+
*/
|
|
68
|
+
function findInstrumentationClientFile(root, fileMatcher) {
|
|
69
|
+
return findInstrumentationHookFile(root, "instrumentation-client", fileMatcher);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the registered onRequestError handler (if any).
|
|
73
|
+
*
|
|
74
|
+
* Reads from globalThis so it works across Vite environment boundaries.
|
|
75
|
+
*/
|
|
76
|
+
function getOnRequestErrorHandler() {
|
|
77
|
+
return globalThis.__VINEXT_onRequestErrorHandler__ ?? null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Load and execute the instrumentation file via a ModuleRunner.
|
|
81
|
+
*
|
|
82
|
+
* Called once during Pages Router server startup (`configureServer`). It:
|
|
83
|
+
* 1. Loads the instrumentation module via `runner.import()`.
|
|
84
|
+
* 2. Calls the `register()` function if exported.
|
|
85
|
+
* 3. Stores the `onRequestError()` handler on `globalThis` so it is visible
|
|
86
|
+
* to all Vite environment module graphs (SSR and the host process share
|
|
87
|
+
* the same Node.js `globalThis`).
|
|
88
|
+
*
|
|
89
|
+
* **App Router** does not use this function. For App Router, `register()` is
|
|
90
|
+
* emitted as a top-level `await` inside the generated RSC entry module so it
|
|
91
|
+
* runs in the same Worker/environment as request handling.
|
|
92
|
+
*
|
|
93
|
+
* @param runner - A ModuleRunner created via `createDirectRunner()`. Must be
|
|
94
|
+
* the same long-lived runner used for middleware and SSR so the module graph
|
|
95
|
+
* is shared. Safe with all Vite plugin combinations, including
|
|
96
|
+
* `@cloudflare/vite-plugin`, because it never touches the hot channel.
|
|
97
|
+
* @param instrumentationPath - Absolute path to the instrumentation file
|
|
98
|
+
*/
|
|
99
|
+
async function runInstrumentation(runner, instrumentationPath) {
|
|
100
|
+
try {
|
|
101
|
+
const mod = await runner.import(instrumentationPath);
|
|
102
|
+
if (typeof mod.register === "function") await mod.register();
|
|
103
|
+
if (typeof mod.onRequestError === "function") globalThis.__VINEXT_onRequestErrorHandler__ = mod.onRequestError;
|
|
104
|
+
} catch (err) {
|
|
105
|
+
console.error("[vinext] Failed to load instrumentation:", err instanceof Error ? err.message : String(err));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Report a request error via the instrumentation handler.
|
|
110
|
+
*
|
|
111
|
+
* No-op if no onRequestError handler is registered.
|
|
112
|
+
*
|
|
113
|
+
* Reads the handler from globalThis so this function works correctly regardless
|
|
114
|
+
* of which environment it is called from.
|
|
115
|
+
*/
|
|
116
|
+
function reportRequestError(error, request, context) {
|
|
117
|
+
const handler = getOnRequestErrorHandler();
|
|
118
|
+
if (!handler) return Promise.resolve();
|
|
119
|
+
const promise = (async () => {
|
|
120
|
+
try {
|
|
121
|
+
await handler(error, request, context);
|
|
122
|
+
} catch (reportErr) {
|
|
123
|
+
console.error("[vinext] onRequestError handler threw:", reportErr instanceof Error ? reportErr.message : String(reportErr));
|
|
124
|
+
}
|
|
125
|
+
})();
|
|
126
|
+
getRequestExecutionContext()?.waitUntil(promise);
|
|
127
|
+
return promise;
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { findInstrumentationClientFile, findInstrumentationFile, getOnRequestErrorHandler, importModule, reportRequestError, runInstrumentation };
|