vinext 1.0.0-beta.3 → 1.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -3
- package/dist/build/client-build-config.d.ts +0 -1
- package/dist/build/css-url-assets.d.ts +0 -1
- package/dist/build/google-fonts/build-url.d.ts +5 -2
- package/dist/build/google-fonts/font-metadata.d.ts +7 -3
- package/dist/build/google-fonts/get-axes.d.ts +0 -1
- package/dist/build/layout-classification.d.ts +7 -4
- package/dist/build/next-client-runtime-manifests.d.ts +0 -1
- package/dist/build/next-client-runtime-manifests.js +2 -19
- package/dist/build/nitro-route-rules.d.ts +0 -1
- package/dist/build/pages-client-assets-module.d.ts +0 -1
- package/dist/build/precompress.d.ts +7 -2
- package/dist/build/precompress.js +42 -8
- package/dist/build/prerender-paths.d.ts +2 -2
- package/dist/build/prerender-server-entry.d.ts +1 -1
- package/dist/build/prerender-server-pool.d.ts +4 -2
- package/dist/build/prerender.d.ts +36 -32
- package/dist/build/prerender.js +18 -3
- package/dist/build/public-dir-conflict.d.ts +14 -0
- package/dist/build/public-dir-conflict.js +25 -0
- package/dist/build/report.d.ts +2 -2
- package/dist/build/route-classification-injector.d.ts +0 -1
- package/dist/build/route-classification-manifest.d.ts +5 -3
- package/dist/build/run-prerender.d.ts +3 -2
- package/dist/build/static-export.d.ts +23 -12
- package/dist/cache/cache-adapters-virtual.d.ts +5 -2
- package/dist/check.js +4 -4
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli-args.js +10 -0
- package/dist/cli-dev-config.d.ts +0 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +14 -8
- package/dist/client/client-rewrite-matcher.d.ts +12 -0
- package/dist/client/client-rewrite-matcher.js +20 -0
- package/dist/client/client-rewrites.d.ts +31 -0
- package/dist/client/client-rewrites.js +41 -0
- package/dist/client/dev-error-overlay.d.ts +0 -1
- package/dist/client/empty-module.d.ts +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +2 -0
- package/dist/client/instrumentation-client-state.d.ts +0 -1
- package/dist/client/navigation-runtime.d.ts +12 -1
- package/dist/client/navigation-runtime.js +6 -2
- package/dist/client/pages-router-link-navigation.d.ts +3 -21
- package/dist/client/react-instance-bootstrap.d.ts +1 -0
- package/dist/client/react-instance-bootstrap.js +7 -0
- package/dist/client/react-instance.d.ts +13 -0
- package/dist/client/react-instance.js +20 -0
- package/dist/client/vinext-next-data.d.ts +11 -6
- package/dist/client/window-next.d.ts +5 -2
- package/dist/config/config-matchers.d.ts +3 -5
- package/dist/config/config-matchers.js +7 -6
- package/dist/config/dotenv.d.ts +4 -9
- package/dist/config/dotenv.js +30 -22
- package/dist/config/next-config.d.ts +113 -52
- package/dist/config/next-config.js +6 -0
- package/dist/config/prerender.d.ts +0 -1
- package/dist/entries/app-browser-entry.d.ts +0 -1
- package/dist/entries/app-browser-entry.js +7 -3
- package/dist/entries/app-rsc-entry.d.ts +30 -16
- package/dist/entries/app-rsc-entry.js +40 -12
- package/dist/entries/app-rsc-manifest.d.ts +0 -1
- package/dist/entries/app-rsc-manifest.js +1 -0
- package/dist/entries/pages-client-entry.d.ts +0 -1
- package/dist/entries/pages-client-entry.js +7 -2
- package/dist/entries/pages-server-entry.d.ts +1 -2
- package/dist/entries/pages-server-entry.js +25 -6
- package/dist/image/image-adapters-virtual.d.ts +4 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +257 -75
- package/dist/init-cloudflare.d.ts +0 -1
- package/dist/init-platform.d.ts +0 -1
- package/dist/init.d.ts +40 -20
- package/dist/plugins/ast-scope.d.ts +0 -1
- package/dist/plugins/async-hooks-stub.d.ts +0 -1
- package/dist/plugins/client-reference-dedup.d.ts +0 -1
- package/dist/plugins/client-reference-dedup.js +7 -5
- package/dist/plugins/css-data-url.d.ts +0 -1
- package/dist/plugins/css-module-imports.d.ts +0 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +0 -1
- package/dist/plugins/extensionless-dynamic-import.d.ts +0 -1
- package/dist/plugins/extensionless-dynamic-import.js +352 -13
- package/dist/plugins/fonts.d.ts +0 -1
- package/dist/plugins/ignore-dynamic-requests.d.ts +0 -1
- package/dist/plugins/ignore-dynamic-requests.js +28 -4
- package/dist/plugins/import-meta-url.d.ts +0 -1
- package/dist/plugins/instrumentation-client.d.ts +0 -1
- package/dist/plugins/middleware-server-only.d.ts +0 -1
- package/dist/plugins/og-asset-ownership.d.ts +0 -1
- package/dist/plugins/og-assets.d.ts +0 -1
- package/dist/plugins/optimize-imports.d.ts +0 -1
- package/dist/plugins/remove-console.d.ts +0 -1
- package/dist/plugins/require-context.d.ts +0 -1
- package/dist/plugins/require-context.js +143 -26
- package/dist/plugins/rsc-client-reference-loaders.d.ts +0 -1
- package/dist/plugins/rsc-reference-validation-normalizer.d.ts +0 -1
- package/dist/plugins/sass.d.ts +30 -2
- package/dist/plugins/sass.js +67 -5
- package/dist/plugins/server-externals-manifest.d.ts +0 -1
- package/dist/plugins/strip-server-exports.d.ts +0 -1
- package/dist/plugins/styled-jsx.d.ts +0 -1
- package/dist/plugins/wasm-module-import.d.ts +0 -1
- package/dist/routing/app-route-graph.d.ts +115 -56
- package/dist/routing/app-route-graph.js +2 -1
- package/dist/routing/app-router.d.ts +0 -1
- package/dist/routing/pages-router.d.ts +9 -5
- package/dist/routing/route-matching.d.ts +0 -1
- package/dist/routing/utils.d.ts +1 -23
- package/dist/routing/utils.js +1 -30
- package/dist/server/accept-encoding.d.ts +0 -1
- package/dist/server/api-handler.d.ts +0 -1
- package/dist/server/api-handler.js +4 -3
- package/dist/server/app-bfcache-identity.d.ts +9 -10
- package/dist/server/app-bfcache-identity.js +27 -102
- package/dist/server/app-browser-action-result.d.ts +0 -1
- package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -1
- package/dist/server/app-browser-entry.d.ts +1 -1
- package/dist/server/app-browser-entry.js +106 -66
- package/dist/server/app-browser-history-controller.d.ts +8 -5
- package/dist/server/app-browser-hydration.d.ts +0 -1
- package/dist/server/app-browser-interception-context.d.ts +0 -1
- package/dist/server/app-browser-mpa-navigation.d.ts +0 -1
- package/dist/server/app-browser-navigation-controller.d.ts +3 -6
- package/dist/server/app-browser-navigation-controller.js +29 -4
- package/dist/server/app-browser-popstate.d.ts +0 -1
- package/dist/server/app-browser-prefetch-response.d.ts +25 -0
- package/dist/server/app-browser-prefetch-response.js +54 -0
- package/dist/server/app-browser-server-action-client.d.ts +1 -1
- package/dist/server/app-browser-server-action-client.js +3 -2
- package/dist/server/app-browser-server-action-navigation.d.ts +0 -1
- package/dist/server/app-browser-state.d.ts +11 -5
- package/dist/server/app-browser-state.js +10 -6
- package/dist/server/app-browser-stream.d.ts +0 -1
- package/dist/server/app-browser-visible-commit.d.ts +1 -1
- package/dist/server/app-browser-visible-commit.js +6 -2
- package/dist/server/app-elements-wire.d.ts +16 -13
- package/dist/server/app-elements-wire.js +37 -10
- package/dist/server/app-elements.d.ts +2 -3
- package/dist/server/app-elements.js +2 -2
- package/dist/server/app-fallback-renderer.d.ts +8 -4
- package/dist/server/app-fallback-renderer.js +2 -1
- package/dist/server/app-history-state.d.ts +2 -2
- package/dist/server/app-history-state.js +1 -1
- package/dist/server/app-hook-warning-suppression.d.ts +0 -1
- package/dist/server/app-layout-param-observation.d.ts +0 -1
- package/dist/server/app-layout-param-observation.js +1 -1
- package/dist/server/app-middleware.d.ts +5 -1
- package/dist/server/app-middleware.js +96 -31
- package/dist/server/app-optimistic-routing.d.ts +1 -0
- package/dist/server/app-page-boundary-render.d.ts +8 -4
- package/dist/server/app-page-cache-finalizer.d.ts +2 -3
- package/dist/server/app-page-cache-finalizer.js +47 -17
- package/dist/server/app-page-cache-render.d.ts +2 -2
- package/dist/server/app-page-cache-render.js +2 -1
- package/dist/server/app-page-cache.d.ts +1 -3
- package/dist/server/app-page-cache.js +22 -11
- package/dist/server/app-page-dispatch.d.ts +12 -6
- package/dist/server/app-page-dispatch.js +14 -6
- package/dist/server/app-page-element-builder.d.ts +63 -20
- package/dist/server/app-page-element-builder.js +114 -43
- package/dist/server/app-page-execution.d.ts +12 -5
- package/dist/server/app-page-execution.js +1 -1
- package/dist/server/app-page-head.d.ts +2 -2
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +2 -2
- package/dist/server/app-page-params.d.ts +0 -1
- package/dist/server/app-page-ppr-runtime.d.ts +0 -1
- package/dist/server/app-page-probe.d.ts +4 -3
- package/dist/server/app-page-probe.js +1 -1
- package/dist/server/app-page-render-identity.d.ts +1 -0
- package/dist/server/app-page-render-observation.d.ts +0 -1
- package/dist/server/app-page-render.d.ts +7 -5
- package/dist/server/app-page-render.js +59 -24
- package/dist/server/app-page-request.d.ts +3 -2
- package/dist/server/app-page-request.js +6 -46
- package/dist/server/app-page-response.d.ts +15 -3
- package/dist/server/app-page-response.js +21 -3
- package/dist/server/app-page-route-wiring.d.ts +30 -7
- package/dist/server/app-page-route-wiring.js +163 -63
- package/dist/server/app-page-search-params-observation.d.ts +0 -1
- package/dist/server/app-page-segment-plan.d.ts +56 -0
- package/dist/server/app-page-segment-plan.js +177 -0
- package/dist/server/app-page-segment-state.d.ts +18 -2
- package/dist/server/app-page-segment-state.js +23 -4
- package/dist/server/app-page-stream.d.ts +19 -10
- package/dist/server/app-pages-bridge.d.ts +2 -2
- package/dist/server/app-pages-bridge.js +14 -2
- package/dist/server/app-post-middleware-context.d.ts +0 -1
- package/dist/server/app-ppr-fallback-shell-render.d.ts +0 -1
- package/dist/server/app-prerender-endpoints.d.ts +0 -1
- package/dist/server/app-prerender-static-params.d.ts +0 -1
- package/dist/server/app-render-dependency.d.ts +11 -4
- package/dist/server/app-render-dependency.js +59 -9
- package/dist/server/app-request-context.d.ts +1 -0
- package/dist/server/app-route-handler-cache.d.ts +2 -2
- package/dist/server/app-route-handler-cache.js +5 -1
- package/dist/server/app-route-handler-dispatch.d.ts +0 -1
- package/dist/server/app-route-handler-execution.d.ts +2 -2
- package/dist/server/app-route-handler-execution.js +5 -1
- package/dist/server/app-route-handler-policy.d.ts +0 -1
- package/dist/server/app-route-handler-response.d.ts +0 -1
- package/dist/server/app-route-handler-runtime.d.ts +0 -1
- package/dist/server/app-route-handler-runtime.js +1 -2
- package/dist/server/app-route-module-loader.d.ts +32 -6
- package/dist/server/app-route-module-loader.js +73 -3
- package/dist/server/app-router-entry.d.ts +0 -1
- package/dist/server/app-router-entry.js +2 -2
- package/dist/server/app-rsc-cache-busting.d.ts +7 -1
- package/dist/server/app-rsc-cache-busting.js +6 -0
- package/dist/server/app-rsc-handler.d.ts +9 -2
- package/dist/server/app-rsc-handler.js +173 -41
- package/dist/server/app-rsc-redirect-flight.d.ts +0 -1
- package/dist/server/app-rsc-render-mode.d.ts +3 -2
- package/dist/server/app-rsc-render-mode.js +4 -1
- package/dist/server/app-rsc-request-normalization.d.ts +19 -10
- package/dist/server/app-rsc-request-normalization.js +65 -4
- package/dist/server/app-rsc-response-finalizer.d.ts +5 -2
- package/dist/server/app-rsc-response-finalizer.js +31 -18
- package/dist/server/app-rsc-route-matching.d.ts +6 -1
- package/dist/server/app-rsc-route-matching.js +47 -2
- package/dist/server/app-segment-config.d.ts +0 -1
- package/dist/server/app-server-action-execution.d.ts +42 -9
- package/dist/server/app-server-action-execution.js +189 -111
- package/dist/server/app-ssr-entry.d.ts +5 -3
- package/dist/server/app-ssr-entry.js +4 -5
- package/dist/server/app-ssr-router-instance.d.ts +0 -1
- package/dist/server/app-ssr-stream.d.ts +7 -1
- package/dist/server/app-ssr-stream.js +2 -1
- package/dist/server/app-static-generation.d.ts +0 -1
- package/dist/server/app-visited-response-cache.d.ts +7 -2
- package/dist/server/app-visited-response-cache.js +49 -1
- package/dist/server/before-interactive-head.d.ts +0 -1
- package/dist/server/before-interactive-head.js +2 -0
- package/dist/server/bfcache-identity.d.ts +45 -0
- package/dist/server/bfcache-identity.js +52 -0
- package/dist/server/cache-control.d.ts +3 -3
- package/dist/server/cache-control.js +3 -2
- package/dist/server/cache-proof.d.ts +0 -1
- package/dist/server/client-reuse-manifest.d.ts +0 -1
- package/dist/server/config-headers.d.ts +2 -2
- package/dist/server/csp.d.ts +0 -1
- package/dist/server/default-global-error-module.d.ts +0 -1
- package/dist/server/default-global-not-found-module.d.ts +0 -1
- package/dist/server/default-not-found-module.d.ts +0 -1
- package/dist/server/dev-lockfile.d.ts +21 -9
- package/dist/server/dev-module-runner.d.ts +0 -1
- package/dist/server/dev-route-files.d.ts +0 -1
- package/dist/server/dev-server.d.ts +4 -8
- package/dist/server/dev-server.js +86 -131
- package/dist/server/dev-stack-sourcemap.d.ts +0 -1
- package/dist/server/document-initial-head.d.ts +12 -2
- package/dist/server/document-initial-head.js +17 -2
- package/dist/server/edge-api-runtime.d.ts +10 -1
- package/dist/server/edge-api-runtime.js +29 -1
- package/dist/server/file-based-metadata.d.ts +0 -1
- package/dist/server/headers.d.ts +17 -2
- package/dist/server/headers.js +17 -1
- package/dist/server/http-conditional.d.ts +22 -0
- package/dist/server/http-conditional.js +117 -0
- package/dist/server/http-date.d.ts +5 -0
- package/dist/server/http-date.js +73 -0
- package/dist/server/http-error-responses.d.ts +2 -1
- package/dist/server/http-error-responses.js +14 -2
- package/dist/server/http-range.d.ts +25 -0
- package/dist/server/http-range.js +67 -0
- package/dist/server/image-optimization.d.ts +14 -6
- package/dist/server/image-optimization.js +0 -1
- package/dist/server/instrumentation.d.ts +7 -4
- package/dist/server/isr-cache.d.ts +28 -6
- package/dist/server/isr-cache.js +19 -13
- package/dist/server/isr-decision.d.ts +6 -4
- package/dist/server/metadata-route-build-data.d.ts +0 -1
- package/dist/server/metadata-route-response.d.ts +0 -1
- package/dist/server/metadata-route-response.js +7 -6
- package/dist/server/metadata-routes.d.ts +34 -16
- package/dist/server/middleware-matcher-pattern.d.ts +0 -1
- package/dist/server/middleware-matcher.d.ts +8 -3
- package/dist/server/middleware-matcher.js +23 -18
- package/dist/server/middleware-runtime.d.ts +6 -1
- package/dist/server/middleware-runtime.js +91 -28
- package/dist/server/middleware.d.ts +0 -1
- package/dist/server/navigation-planner.d.ts +1 -1
- package/dist/server/next-error-digest.d.ts +0 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-api-route.js +32 -7
- package/dist/server/pages-asset-tags.d.ts +3 -1
- package/dist/server/pages-asset-tags.js +6 -4
- package/dist/server/pages-data-route.d.ts +14 -6
- package/dist/server/pages-data-route.js +19 -10
- package/dist/server/pages-dev-hydration.js +3 -0
- package/dist/server/pages-dev-stylesheets.d.ts +10 -0
- package/dist/server/pages-dev-stylesheets.js +150 -0
- package/dist/server/pages-document-asset-props.d.ts +26 -0
- package/dist/server/pages-document-asset-props.js +69 -0
- package/dist/server/pages-document-initial-props.d.ts +10 -6
- package/dist/server/pages-get-initial-props.d.ts +2 -2
- package/dist/server/pages-i18n.d.ts +1 -7
- package/dist/server/pages-node-compat.d.ts +11 -2
- package/dist/server/pages-node-compat.js +52 -5
- package/dist/server/pages-page-data.d.ts +21 -9
- package/dist/server/pages-page-data.js +109 -30
- package/dist/server/pages-page-handler.d.ts +70 -32
- package/dist/server/pages-page-handler.js +25 -6
- package/dist/server/pages-page-response.d.ts +9 -13
- package/dist/server/pages-page-response.js +25 -26
- package/dist/server/pages-readiness.d.ts +0 -1
- package/dist/server/pages-request-pipeline.d.ts +20 -6
- package/dist/server/pages-request-pipeline.js +40 -20
- package/dist/server/pages-revalidate.d.ts +0 -1
- package/dist/server/pages-revalidate.js +1 -1
- package/dist/server/pages-router-entry.js +14 -10
- package/dist/server/prerender-manifest.d.ts +7 -0
- package/dist/server/prod-server.d.ts +13 -7
- package/dist/server/prod-server.js +276 -83
- package/dist/server/proxy-trust.d.ts +0 -1
- package/dist/server/request-log.d.ts +7 -11
- package/dist/server/request-pipeline.d.ts +13 -4
- package/dist/server/request-pipeline.js +28 -20
- package/dist/server/revalidation-host.d.ts +0 -1
- package/dist/server/revalidation-host.js +1 -1
- package/dist/server/rsc-completion-metadata.d.ts +15 -0
- package/dist/server/rsc-completion-metadata.js +183 -0
- package/dist/server/seed-cache.d.ts +2 -1
- package/dist/server/seed-cache.js +8 -5
- package/dist/server/skip-cache-proof.d.ts +0 -1
- package/dist/server/static-file-cache.d.ts +23 -9
- package/dist/server/static-file-cache.js +47 -23
- package/dist/server/static-layout-client-reuse-proof.d.ts +0 -1
- package/dist/server/worker-revalidation-context.d.ts +0 -1
- package/dist/server/worker-revalidation-context.js +1 -0
- package/dist/server/worker-utils.d.ts +3 -1
- package/dist/server/worker-utils.js +11 -2
- package/dist/shims/app-router-scroll-state.d.ts +2 -1
- package/dist/shims/app-router-scroll-state.js +7 -2
- package/dist/shims/app-router-scroll.d.ts +2 -8
- package/dist/shims/app.d.ts +1 -5
- package/dist/shims/before-interactive-context.d.ts +5 -3
- package/dist/shims/cache-handler.d.ts +6 -1
- package/dist/shims/cache-handler.js +4 -2
- package/dist/shims/cache-request-state.d.ts +12 -1
- package/dist/shims/cache-request-state.js +22 -1
- package/dist/shims/cache-runtime.d.ts +9 -5
- package/dist/shims/cache-runtime.js +16 -6
- package/dist/shims/cache.d.ts +2 -3
- package/dist/shims/cache.js +2 -2
- package/dist/shims/cdn-cache.d.ts +0 -1
- package/dist/shims/client-locale.d.ts +1 -6
- package/dist/shims/client-only.d.ts +1 -1
- package/dist/shims/compat-router.d.ts +0 -1
- package/dist/shims/constants.d.ts +1 -1
- package/dist/shims/default-global-error.d.ts +1 -4
- package/dist/shims/default-not-found.d.ts +0 -1
- package/dist/shims/document.d.ts +0 -1
- package/dist/shims/document.js +17 -3
- package/dist/shims/dynamic-preload-chunks.d.ts +0 -1
- package/dist/shims/dynamic.d.ts +0 -1
- package/dist/shims/error-boundary-navigation.d.ts +0 -1
- package/dist/shims/error-boundary.d.ts +7 -32
- package/dist/shims/error.d.ts +1 -6
- package/dist/shims/fetch-cache.js +112 -63
- package/dist/shims/font-google-base.d.ts +0 -1
- package/dist/shims/font-local.d.ts +0 -1
- package/dist/shims/form.d.ts +5 -3
- package/dist/shims/hash-scroll.d.ts +1 -1
- package/dist/shims/hash-scroll.js +2 -1
- package/dist/shims/head-state.d.ts +0 -1
- package/dist/shims/head.d.ts +1 -4
- package/dist/shims/headers.d.ts +2 -2
- package/dist/shims/headers.js +1 -1
- package/dist/shims/i18n-context.d.ts +0 -1
- package/dist/shims/i18n-state.d.ts +0 -1
- package/dist/shims/image.d.ts +0 -1
- package/dist/shims/image.js +1 -2
- package/dist/shims/internal/als-registry.d.ts +31 -2
- package/dist/shims/internal/als-registry.js +50 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +17 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +69 -7
- package/dist/shims/internal/app-route-detection.d.ts +0 -1
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +31 -0
- package/dist/shims/internal/app-route-prefetch-policy.js +57 -0
- package/dist/shims/internal/app-router-context.d.ts +0 -1
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +1 -5
- package/dist/shims/internal/hybrid-client-route-owner.d.ts +0 -1
- package/dist/shims/internal/hybrid-client-route-owner.js +6 -8
- package/dist/shims/internal/interpolate-as.d.ts +3 -2
- package/dist/shims/internal/pages-data-target.d.ts +21 -10
- package/dist/shims/internal/pages-data-target.js +1 -1
- package/dist/shims/internal/pages-data-url.d.ts +3 -1
- package/dist/shims/internal/router-context.d.ts +0 -1
- package/dist/shims/internal/work-unit-async-storage.d.ts +4 -3
- package/dist/shims/internal/work-unit-async-storage.js +2 -0
- package/dist/shims/layout-segment-context.d.ts +2 -6
- package/dist/shims/legacy-image.d.ts +0 -1
- package/dist/shims/link.d.ts +29 -21
- package/dist/shims/link.js +52 -97
- package/dist/shims/metadata.d.ts +11 -25
- package/dist/shims/metadata.js +24 -32
- package/dist/shims/navigation-context-state.d.ts +0 -1
- package/dist/shims/navigation-state.d.ts +1 -0
- package/dist/shims/navigation.d.ts +54 -6
- package/dist/shims/navigation.js +325 -73
- package/dist/shims/navigation.react-server.d.ts +1 -0
- package/dist/shims/og.d.ts +0 -1
- package/dist/shims/request-context.d.ts +8 -3
- package/dist/shims/request-state-types.d.ts +1 -0
- package/dist/shims/router.d.ts +44 -23
- package/dist/shims/router.js +8 -7
- package/dist/shims/script-nonce-context.d.ts +0 -1
- package/dist/shims/script.d.ts +25 -13
- package/dist/shims/server-only.d.ts +1 -1
- package/dist/shims/server.d.ts +1 -3
- package/dist/shims/server.js +5 -6
- package/dist/shims/slot.d.ts +23 -11
- package/dist/shims/slot.js +103 -19
- package/dist/shims/streamed-icons.d.ts +7 -0
- package/dist/shims/streamed-icons.js +33 -0
- package/dist/shims/unified-request-context.d.ts +44 -4
- package/dist/shims/unified-request-context.js +56 -2
- package/dist/shims/use-merged-ref.d.ts +0 -1
- package/dist/shims/web-vitals.d.ts +0 -1
- package/dist/typegen.d.ts +1 -2
- package/dist/typegen.js +1 -1
- package/dist/utils/cache-control-metadata.d.ts +13 -1
- package/dist/utils/cache-control-metadata.js +17 -1
- package/dist/utils/client-build-manifest.d.ts +0 -1
- package/dist/utils/domain-locale.d.ts +1 -5
- package/dist/utils/html-limited-bots.js +1 -1
- package/dist/utils/middleware-request-headers.d.ts +17 -5
- package/dist/utils/middleware-request-headers.js +32 -23
- package/dist/utils/precompressed-variant.d.ts +9 -0
- package/dist/utils/precompressed-variant.js +15 -0
- package/dist/utils/project.d.ts +12 -7
- package/dist/utils/public-file-path.d.ts +5 -0
- package/dist/utils/public-file-path.js +12 -0
- package/dist/utils/public-routes.d.ts +1 -1
- package/dist/utils/public-routes.js +6 -5
- package/package.json +7 -3
|
@@ -8,6 +8,7 @@ import { PrivateCacheState } from "./cache-runtime.js";
|
|
|
8
8
|
import { HeadState } from "./head-state.js";
|
|
9
9
|
import { I18nState } from "./i18n-state.js";
|
|
10
10
|
import { NavigationState } from "./navigation-state.js";
|
|
11
|
+
import "./request-state-types.js";
|
|
11
12
|
//#region src/shims/unified-request-context.d.ts
|
|
12
13
|
/**
|
|
13
14
|
* Flat union of all per-request state previously spread across
|
|
@@ -17,14 +18,18 @@ import { NavigationState } from "./navigation-state.js";
|
|
|
17
18
|
* Each field group is documented with its source shim module.
|
|
18
19
|
*/
|
|
19
20
|
type UnifiedRequestContext = {
|
|
20
|
-
/** Cloudflare Workers ExecutionContext, or null on Node.js dev. */
|
|
21
|
-
|
|
21
|
+
/** Cloudflare Workers ExecutionContext, or null on Node.js dev. */
|
|
22
|
+
executionContext: ExecutionContextLike | null;
|
|
23
|
+
/** Per-request cache for cacheForRequest(). Keyed by factory function reference. */
|
|
24
|
+
requestCache: WeakMap<(...args: any[]) => any, unknown>;
|
|
25
|
+
/** Shared lifecycle state for work deferred until the response closes. */
|
|
22
26
|
afterContext: AfterRequestContext;
|
|
23
27
|
} & VinextHeadersShimState & I18nState & NavigationState & CacheState & PrivateCacheState & FetchCacheState & RouterState & HeadState & RootParamsState;
|
|
24
28
|
type AfterRequestContext = {
|
|
25
29
|
callbacks: Array<() => unknown>;
|
|
26
30
|
responseClosed: boolean;
|
|
27
31
|
pendingCallbacks: number;
|
|
32
|
+
pendingPromises: number;
|
|
28
33
|
completion: Promise<void> | null;
|
|
29
34
|
resolveCompletion: (() => void) | null;
|
|
30
35
|
};
|
|
@@ -35,6 +40,8 @@ type AfterRequestContext = {
|
|
|
35
40
|
declare function createRequestContext(opts?: Partial<UnifiedRequestContext>): UnifiedRequestContext;
|
|
36
41
|
/** Queue a callback until response close, or start it immediately once closed. */
|
|
37
42
|
declare function queueAfterCallback(ctx: UnifiedRequestContext, callback: () => unknown): void;
|
|
43
|
+
/** Track promise-form after() work that can register a callback before settling. */
|
|
44
|
+
declare function trackAfterPromise<T>(ctx: UnifiedRequestContext, promise: Promise<T>): Promise<T>;
|
|
38
45
|
/** Bind a callback to every AsyncLocalStorage context active at registration. */
|
|
39
46
|
declare function bindRequestContextSnapshot<T>(ctx: UnifiedRequestContext, callback: () => T): () => T;
|
|
40
47
|
/**
|
|
@@ -42,7 +49,40 @@ declare function bindRequestContextSnapshot<T>(ctx: UnifiedRequestContext, callb
|
|
|
42
49
|
* All queued callbacks start together, matching Next.js' unbounded PromiseQueue.
|
|
43
50
|
*/
|
|
44
51
|
declare function closeAfterResponse(ctx: UnifiedRequestContext): Promise<void>;
|
|
45
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Whether this request has function-form `after()` work that still needs to
|
|
54
|
+
* observe the response body closing.
|
|
55
|
+
*
|
|
56
|
+
* Promise-form `after(promise)` is included because its continuation can
|
|
57
|
+
* register a function-form `after()` before the promise settles. Function-form
|
|
58
|
+
* work needs the body's close observed because its contract is "run once the
|
|
59
|
+
* response has been sent". `resolveCompletion` stays non-null for as long as
|
|
60
|
+
* any callback is queued or in flight, so checking it alongside the explicit
|
|
61
|
+
* counters keeps this correct on re-entry after callbacks have started.
|
|
62
|
+
*/
|
|
63
|
+
declare function requiresResponseCloseTracking(ctx: UnifiedRequestContext): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Mark a response whose body vinext constructed from a fully in-memory string
|
|
66
|
+
* or byte array, as opposed to a body handed back by user code, which could
|
|
67
|
+
* still be producing. With no producer left, no `after()` call can originate
|
|
68
|
+
* from this body — the one signal that makes it safe for
|
|
69
|
+
* `closeAfterResponseWithBody()` to skip close tracking.
|
|
70
|
+
*
|
|
71
|
+
* Not set for a metadata route's `result instanceof Response` passthrough (a
|
|
72
|
+
* user `icon.tsx`/`opengraph-image.tsx` can return a streaming
|
|
73
|
+
* `ImageResponse`) or any handler-returned `new Response(stream)` — those
|
|
74
|
+
* bodies can still be producing and must keep close tracking.
|
|
75
|
+
*/
|
|
76
|
+
declare function markFullyBufferedBody(response: Response): Response;
|
|
77
|
+
/** Preserve the internal buffered-body signal when response metadata is rebuilt. */
|
|
78
|
+
declare function preserveFullyBufferedBodyMetadata(source: Response, target: Response): Response;
|
|
79
|
+
/**
|
|
80
|
+
* Wrap a response so deferred `after()` callbacks start on stream completion
|
|
81
|
+
* or cancellation. Skipped only when the body is marked fully buffered (see
|
|
82
|
+
* `markFullyBufferedBody`) and nothing is currently registered — that lets
|
|
83
|
+
* the runtime send it with an accurate `Content-Length` instead of chunked
|
|
84
|
+
* transfer encoding.
|
|
85
|
+
*/
|
|
46
86
|
declare function closeAfterResponseWithBody(response: Response, ctx: UnifiedRequestContext): Response;
|
|
47
87
|
/**
|
|
48
88
|
* Run `fn` within a unified request context scope.
|
|
@@ -84,4 +124,4 @@ declare function getRequestContext(): UnifiedRequestContext;
|
|
|
84
124
|
*/
|
|
85
125
|
declare function isInsideUnifiedScope(): boolean;
|
|
86
126
|
//#endregion
|
|
87
|
-
export { AfterRequestContext, UnifiedRequestContext, bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, queueAfterCallback, runWithRequestContext, runWithUnifiedStateMutation };
|
|
127
|
+
export { AfterRequestContext, UnifiedRequestContext, bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, markFullyBufferedBody, preserveFullyBufferedBodyMetadata, queueAfterCallback, requiresResponseCloseTracking, runWithRequestContext, runWithUnifiedStateMutation, trackAfterPromise };
|
|
@@ -47,6 +47,7 @@ function createRequestContext(opts) {
|
|
|
47
47
|
callbacks: [],
|
|
48
48
|
responseClosed: false,
|
|
49
49
|
pendingCallbacks: 0,
|
|
50
|
+
pendingPromises: 0,
|
|
50
51
|
completion: null,
|
|
51
52
|
resolveCompletion: null
|
|
52
53
|
},
|
|
@@ -92,6 +93,13 @@ function queueAfterCallback(ctx, callback) {
|
|
|
92
93
|
if (ctx.afterContext.responseClosed) startAfterCallback(ctx, callback);
|
|
93
94
|
else ctx.afterContext.callbacks.push(callback);
|
|
94
95
|
}
|
|
96
|
+
/** Track promise-form after() work that can register a callback before settling. */
|
|
97
|
+
function trackAfterPromise(ctx, promise) {
|
|
98
|
+
ctx.afterContext.pendingPromises += 1;
|
|
99
|
+
return promise.finally(() => {
|
|
100
|
+
ctx.afterContext.pendingPromises -= 1;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
95
103
|
/** Bind a callback to every AsyncLocalStorage context active at registration. */
|
|
96
104
|
function bindRequestContextSnapshot(ctx, callback) {
|
|
97
105
|
const constructor = _als.constructor;
|
|
@@ -115,12 +123,57 @@ async function closeAfterResponse(ctx) {
|
|
|
115
123
|
}
|
|
116
124
|
return state.completion ?? Promise.resolve();
|
|
117
125
|
}
|
|
118
|
-
/**
|
|
126
|
+
/**
|
|
127
|
+
* Whether this request has function-form `after()` work that still needs to
|
|
128
|
+
* observe the response body closing.
|
|
129
|
+
*
|
|
130
|
+
* Promise-form `after(promise)` is included because its continuation can
|
|
131
|
+
* register a function-form `after()` before the promise settles. Function-form
|
|
132
|
+
* work needs the body's close observed because its contract is "run once the
|
|
133
|
+
* response has been sent". `resolveCompletion` stays non-null for as long as
|
|
134
|
+
* any callback is queued or in flight, so checking it alongside the explicit
|
|
135
|
+
* counters keeps this correct on re-entry after callbacks have started.
|
|
136
|
+
*/
|
|
137
|
+
function requiresResponseCloseTracking(ctx) {
|
|
138
|
+
const state = ctx.afterContext;
|
|
139
|
+
return state.callbacks.length > 0 || state.pendingCallbacks > 0 || state.pendingPromises > 0 || state.resolveCompletion !== null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Mark a response whose body vinext constructed from a fully in-memory string
|
|
143
|
+
* or byte array, as opposed to a body handed back by user code, which could
|
|
144
|
+
* still be producing. With no producer left, no `after()` call can originate
|
|
145
|
+
* from this body — the one signal that makes it safe for
|
|
146
|
+
* `closeAfterResponseWithBody()` to skip close tracking.
|
|
147
|
+
*
|
|
148
|
+
* Not set for a metadata route's `result instanceof Response` passthrough (a
|
|
149
|
+
* user `icon.tsx`/`opengraph-image.tsx` can return a streaming
|
|
150
|
+
* `ImageResponse`) or any handler-returned `new Response(stream)` — those
|
|
151
|
+
* bodies can still be producing and must keep close tracking.
|
|
152
|
+
*/
|
|
153
|
+
function markFullyBufferedBody(response) {
|
|
154
|
+
response.__vinextFullyBufferedBody = true;
|
|
155
|
+
return response;
|
|
156
|
+
}
|
|
157
|
+
function isFullyBufferedBody(response) {
|
|
158
|
+
return response.__vinextFullyBufferedBody === true;
|
|
159
|
+
}
|
|
160
|
+
/** Preserve the internal buffered-body signal when response metadata is rebuilt. */
|
|
161
|
+
function preserveFullyBufferedBodyMetadata(source, target) {
|
|
162
|
+
return isFullyBufferedBody(source) ? markFullyBufferedBody(target) : target;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Wrap a response so deferred `after()` callbacks start on stream completion
|
|
166
|
+
* or cancellation. Skipped only when the body is marked fully buffered (see
|
|
167
|
+
* `markFullyBufferedBody`) and nothing is currently registered — that lets
|
|
168
|
+
* the runtime send it with an accurate `Content-Length` instead of chunked
|
|
169
|
+
* transfer encoding.
|
|
170
|
+
*/
|
|
119
171
|
function closeAfterResponseWithBody(response, ctx) {
|
|
120
172
|
if (!response.body) {
|
|
121
173
|
queueMicrotask(() => void closeAfterResponse(ctx));
|
|
122
174
|
return response;
|
|
123
175
|
}
|
|
176
|
+
if (isFullyBufferedBody(response) && !requiresResponseCloseTracking(ctx)) return response;
|
|
124
177
|
const passthrough = new TransformStream();
|
|
125
178
|
response.body.pipeTo(passthrough.writable).then(() => void closeAfterResponse(ctx), () => void closeAfterResponse(ctx));
|
|
126
179
|
const wrapped = new Response(passthrough.readable, {
|
|
@@ -129,6 +182,7 @@ function closeAfterResponseWithBody(response, ctx) {
|
|
|
129
182
|
headers: response.headers
|
|
130
183
|
});
|
|
131
184
|
wrapped.__vinextStreamedHtmlResponse = response.__vinextStreamedHtmlResponse;
|
|
185
|
+
wrapped.__vinextStreamedApiResponse = response.__vinextStreamedApiResponse;
|
|
132
186
|
return wrapped;
|
|
133
187
|
}
|
|
134
188
|
function runWithRequestContext(ctx, fn) {
|
|
@@ -167,4 +221,4 @@ function isInsideUnifiedScope() {
|
|
|
167
221
|
return _als.getStore() != null;
|
|
168
222
|
}
|
|
169
223
|
//#endregion
|
|
170
|
-
export { bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, queueAfterCallback, runWithRequestContext, runWithUnifiedStateMutation };
|
|
224
|
+
export { bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, markFullyBufferedBody, preserveFullyBufferedBodyMetadata, queueAfterCallback, requiresResponseCloseTracking, runWithRequestContext, runWithUnifiedStateMutation, trackAfterPromise };
|
package/dist/typegen.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ type GenerateRouteTypesResult = {
|
|
|
9
9
|
nextEnvPath: string;
|
|
10
10
|
nextEnvStatus: "created" | "updated" | "unchanged";
|
|
11
11
|
};
|
|
12
|
-
declare function nextEnvFileContent(hasNext: boolean, hasAppDir: boolean, eol?: string): string;
|
|
13
12
|
declare function generateRouteTypes(options: GenerateRouteTypesOptions): Promise<GenerateRouteTypesResult>;
|
|
14
13
|
//#endregion
|
|
15
|
-
export { GenerateRouteTypesResult, generateRouteTypes
|
|
14
|
+
export { GenerateRouteTypesResult, generateRouteTypes };
|
package/dist/typegen.js
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
//#region src/utils/cache-control-metadata.d.ts
|
|
2
2
|
declare function readCacheControlNumberField(ctx: Record<string, unknown> | undefined, field: string): number | undefined;
|
|
3
3
|
declare function readCacheControlRevalidateField(ctx: Record<string, unknown> | undefined): number | false | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* Client-reuse seconds from a resolved `cacheLife`. Shared by every emitter
|
|
6
|
+
* (ISR write, hit replay, prerender seed, done-script) so warm hits claim what
|
|
7
|
+
* the producing render claimed. Two rules: never synthesize `stale` from
|
|
8
|
+
* `revalidate`/`expire` (the `default` profile would license ~136y of reuse),
|
|
9
|
+
* and never clamp it by them (Next.js replays the stored value verbatim;
|
|
10
|
+
* `expire` is a serve-side ceiling, not a client bound). A literal `stale: 0`
|
|
11
|
+
* is still a real client claim; it must not be treated as absent.
|
|
12
|
+
*/
|
|
13
|
+
declare function resolveClientStaleTimeSeconds(cacheLife: {
|
|
14
|
+
stale?: number;
|
|
15
|
+
} | null | undefined): number | undefined;
|
|
4
16
|
//#endregion
|
|
5
|
-
export { readCacheControlNumberField, readCacheControlRevalidateField };
|
|
17
|
+
export { readCacheControlNumberField, readCacheControlRevalidateField, resolveClientStaleTimeSeconds };
|
|
@@ -12,5 +12,21 @@ function readCacheControlRevalidateField(ctx) {
|
|
|
12
12
|
const value = readRecordField(ctx, "cacheControl")?.revalidate ?? ctx?.revalidate;
|
|
13
13
|
return typeof value === "number" || value === false ? value : void 0;
|
|
14
14
|
}
|
|
15
|
+
function isFiniteNonNegative(value) {
|
|
16
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Client-reuse seconds from a resolved `cacheLife`. Shared by every emitter
|
|
20
|
+
* (ISR write, hit replay, prerender seed, done-script) so warm hits claim what
|
|
21
|
+
* the producing render claimed. Two rules: never synthesize `stale` from
|
|
22
|
+
* `revalidate`/`expire` (the `default` profile would license ~136y of reuse),
|
|
23
|
+
* and never clamp it by them (Next.js replays the stored value verbatim;
|
|
24
|
+
* `expire` is a serve-side ceiling, not a client bound). A literal `stale: 0`
|
|
25
|
+
* is still a real client claim; it must not be treated as absent.
|
|
26
|
+
*/
|
|
27
|
+
function resolveClientStaleTimeSeconds(cacheLife) {
|
|
28
|
+
const stale = cacheLife?.stale;
|
|
29
|
+
return isFiniteNonNegative(stale) ? stale : void 0;
|
|
30
|
+
}
|
|
15
31
|
//#endregion
|
|
16
|
-
export { readCacheControlNumberField, readCacheControlRevalidateField };
|
|
32
|
+
export { readCacheControlNumberField, readCacheControlRevalidateField, resolveClientStaleTimeSeconds };
|
|
@@ -16,11 +16,7 @@ declare function normalizeDomainHostname(hostname: string | null | undefined): s
|
|
|
16
16
|
declare function detectDomainLocale(domainItems?: readonly DomainLocale[], hostname?: string, detectedLocale?: string): DomainLocale | undefined;
|
|
17
17
|
declare function addLocalePrefix(path: string, locale: string, localeDefault: string): string;
|
|
18
18
|
declare function getLocalePathPrefix(path: string, locales: readonly string[] | undefined): string | undefined;
|
|
19
|
-
declare function getDomainLocaleUrl(url: string, locale: string, {
|
|
20
|
-
basePath,
|
|
21
|
-
currentHostname,
|
|
22
|
-
domainItems
|
|
23
|
-
}: {
|
|
19
|
+
declare function getDomainLocaleUrl(url: string, locale: string, { basePath, currentHostname, domainItems }: {
|
|
24
20
|
basePath?: string;
|
|
25
21
|
currentHostname?: string | null;
|
|
26
22
|
domainItems?: readonly DomainLocale[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/utils/html-limited-bots.ts
|
|
2
|
-
const HTML_LIMITED_BOT_UA_RE_STRING = String.raw`[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|meta-externalagent|meta-externalfetcher|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight`;
|
|
2
|
+
const HTML_LIMITED_BOT_UA_RE_STRING = String.raw`(?:^|[^\w-])[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|meta-externalagent|meta-externalfetcher|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight`;
|
|
3
3
|
const HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i;
|
|
4
4
|
const htmlLimitedBotRegexCache = /* @__PURE__ */ new Map();
|
|
5
5
|
function getHtmlLimitedBotRegex(htmlLimitedBots) {
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
//#region src/utils/middleware-request-headers.d.ts
|
|
2
2
|
type MiddlewareHeaderValue = string | string[];
|
|
3
3
|
type MiddlewareHeaderSource = Headers | Record<string, MiddlewareHeaderValue>;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Return truthy forwarded values that Next.js does not consume through the
|
|
6
|
+
* override list. Its subsequent generic middleware-header merge exposes these
|
|
7
|
+
* under their literal protocol-header names on both the request and response.
|
|
8
|
+
*/
|
|
9
|
+
declare function getUnconsumedMiddlewareRequestHeaders(source: MiddlewareHeaderSource): Map<string, string>;
|
|
7
10
|
declare function encodeMiddlewareRequestHeaders(targetHeaders: Headers, requestHeaders: Headers): void;
|
|
8
|
-
|
|
11
|
+
/**
|
|
12
|
+
* A non-empty `x-middleware-override-headers` value lists the complete
|
|
13
|
+
* post-middleware header set, so any name absent from it was deleted by
|
|
14
|
+
* middleware. Never re-add absent headers from the base request — that would
|
|
15
|
+
* resurrect credentials the app explicitly stripped before an external
|
|
16
|
+
* rewrite. Next.js treats the empty value emitted for `new Headers()` as no
|
|
17
|
+
* override. Any unconsumed `x-middleware-request-*` values are subsequently
|
|
18
|
+
* copied to the request under their literal protocol-header names.
|
|
19
|
+
*/
|
|
20
|
+
declare function buildRequestHeadersFromMiddlewareResponse(baseHeaders: Headers, middlewareHeaders: MiddlewareHeaderSource): Headers | null;
|
|
9
21
|
declare function shouldKeepMiddlewareHeader(key: string): boolean;
|
|
10
22
|
//#endregion
|
|
11
|
-
export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
|
|
23
|
+
export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, getUnconsumedMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX } from "./protocol-headers.js";
|
|
2
2
|
//#region src/utils/middleware-request-headers.ts
|
|
3
|
-
const CREDENTIAL_REQUEST_HEADERS = ["authorization", "cookie"];
|
|
4
3
|
function getMiddlewareHeaderValue(source, key) {
|
|
5
4
|
if (source instanceof Headers) return source.get(key);
|
|
6
5
|
const value = source[key];
|
|
7
6
|
if (value === void 0) return null;
|
|
8
7
|
return Array.isArray(value) ? value[0] ?? null : value;
|
|
9
8
|
}
|
|
10
|
-
function
|
|
11
|
-
const rawValue = getMiddlewareHeaderValue(source, MIDDLEWARE_OVERRIDE_HEADERS);
|
|
12
|
-
if (rawValue === null) return null;
|
|
9
|
+
function parseOverrideHeaderNames(rawValue) {
|
|
13
10
|
return rawValue.split(",").map((key) => key.trim()).filter(Boolean);
|
|
14
11
|
}
|
|
15
12
|
function getForwardedRequestHeaders(source) {
|
|
@@ -25,41 +22,53 @@ function getForwardedRequestHeaders(source) {
|
|
|
25
22
|
}
|
|
26
23
|
return forwardedHeaders;
|
|
27
24
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Return truthy forwarded values that Next.js does not consume through the
|
|
27
|
+
* override list. Its subsequent generic middleware-header merge exposes these
|
|
28
|
+
* under their literal protocol-header names on both the request and response.
|
|
29
|
+
*/
|
|
30
|
+
function getUnconsumedMiddlewareRequestHeaders(source) {
|
|
31
|
+
const rawOverrideHeader = getMiddlewareHeaderValue(source, MIDDLEWARE_OVERRIDE_HEADERS);
|
|
32
|
+
const overriddenHeaders = rawOverrideHeader ? new Set(parseOverrideHeaderNames(rawOverrideHeader)) : null;
|
|
33
|
+
const unconsumedHeaders = /* @__PURE__ */ new Map();
|
|
34
|
+
for (const [key, value] of getForwardedRequestHeaders(source)) if (value && !overriddenHeaders?.has(key)) unconsumedHeaders.set(`${MIDDLEWARE_REQUEST_HEADER_PREFIX}${key}`, value);
|
|
35
|
+
return unconsumedHeaders;
|
|
32
36
|
}
|
|
33
37
|
function encodeMiddlewareRequestHeaders(targetHeaders, requestHeaders) {
|
|
34
38
|
const overrideHeaderNames = [...requestHeaders.keys()];
|
|
35
39
|
targetHeaders.set(MIDDLEWARE_OVERRIDE_HEADERS, overrideHeaderNames.join(","));
|
|
36
40
|
for (const [key, value] of requestHeaders.entries()) targetHeaders.set(`${MIDDLEWARE_REQUEST_HEADER_PREFIX}${key}`, value);
|
|
37
41
|
}
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
/**
|
|
43
|
+
* A non-empty `x-middleware-override-headers` value lists the complete
|
|
44
|
+
* post-middleware header set, so any name absent from it was deleted by
|
|
45
|
+
* middleware. Never re-add absent headers from the base request — that would
|
|
46
|
+
* resurrect credentials the app explicitly stripped before an external
|
|
47
|
+
* rewrite. Next.js treats the empty value emitted for `new Headers()` as no
|
|
48
|
+
* override. Any unconsumed `x-middleware-request-*` values are subsequently
|
|
49
|
+
* copied to the request under their literal protocol-header names.
|
|
50
|
+
*/
|
|
51
|
+
function buildRequestHeadersFromMiddlewareResponse(baseHeaders, middlewareHeaders) {
|
|
40
52
|
const forwardedHeaders = getForwardedRequestHeaders(middlewareHeaders);
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
44
|
-
|
|
53
|
+
const unconsumedHeaders = getUnconsumedMiddlewareRequestHeaders(middlewareHeaders);
|
|
54
|
+
const rawOverrideHeader = getMiddlewareHeaderValue(middlewareHeaders, MIDDLEWARE_OVERRIDE_HEADERS);
|
|
55
|
+
if (!rawOverrideHeader) {
|
|
56
|
+
if (unconsumedHeaders.size === 0) return null;
|
|
57
|
+
const nextHeaders = new Headers(baseHeaders);
|
|
58
|
+
for (const [key, value] of unconsumedHeaders) nextHeaders.set(key, value);
|
|
45
59
|
return nextHeaders;
|
|
46
60
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
for (const key of CREDENTIAL_REQUEST_HEADERS) {
|
|
50
|
-
if (overrideHeaderNameSet.has(key)) continue;
|
|
51
|
-
const value = baseHeaders.get(key);
|
|
52
|
-
if (value !== null) nextHeaders.set(key, value);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
61
|
+
const overrideHeaderNames = parseOverrideHeaderNames(rawOverrideHeader);
|
|
62
|
+
const nextHeaders = new Headers();
|
|
55
63
|
for (const key of overrideHeaderNames) {
|
|
56
64
|
const value = forwardedHeaders.get(key);
|
|
57
65
|
if (value !== void 0) nextHeaders.set(key, value);
|
|
58
66
|
}
|
|
67
|
+
for (const [key, value] of unconsumedHeaders) nextHeaders.set(key, value);
|
|
59
68
|
return nextHeaders;
|
|
60
69
|
}
|
|
61
70
|
function shouldKeepMiddlewareHeader(key) {
|
|
62
71
|
return key === "x-middleware-override-headers" || key === "x-middleware-cache" || key === "x-middleware-set-cookie" || key.startsWith("x-middleware-request-");
|
|
63
72
|
}
|
|
64
73
|
//#endregion
|
|
65
|
-
export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
|
|
74
|
+
export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, getUnconsumedMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/utils/precompressed-variant.d.ts
|
|
2
|
+
type PrecompressedEncoding = "br" | "gzip" | "zstd";
|
|
3
|
+
/**
|
|
4
|
+
* Return whether an encoded representation reduces conservative HTTP/1 wire
|
|
5
|
+
* bytes after accounting for the response fields needed to negotiate it.
|
|
6
|
+
*/
|
|
7
|
+
declare function isPrecompressedVariantBeneficial(compressedSize: number, originalSize: number, encoding: PrecompressedEncoding): boolean;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { PrecompressedEncoding, isPrecompressedVariantBeneficial };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/utils/precompressed-variant.ts
|
|
2
|
+
const RESPONSE_HEADER_OVERHEAD = {
|
|
3
|
+
br: 45,
|
|
4
|
+
gzip: 47,
|
|
5
|
+
zstd: 47
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Return whether an encoded representation reduces conservative HTTP/1 wire
|
|
9
|
+
* bytes after accounting for the response fields needed to negotiate it.
|
|
10
|
+
*/
|
|
11
|
+
function isPrecompressedVariantBeneficial(compressedSize, originalSize, encoding) {
|
|
12
|
+
return originalSize - compressedSize > RESPONSE_HEADER_OVERHEAD[encoding];
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { isPrecompressedVariantBeneficial };
|
package/dist/utils/project.d.ts
CHANGED
|
@@ -79,11 +79,16 @@ type ProjectInfo = {
|
|
|
79
79
|
hasCloudflarePlugin: boolean;
|
|
80
80
|
hasRscPlugin: boolean;
|
|
81
81
|
hasWrangler: boolean;
|
|
82
|
-
projectName: string;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
projectName: string;
|
|
83
|
+
/** Pages that use `revalidate` (ISR) */
|
|
84
|
+
hasISR: boolean;
|
|
85
|
+
/** package.json has "type": "module" */
|
|
86
|
+
hasTypeModule: boolean;
|
|
87
|
+
/** .mdx files detected in app/ or pages/ */
|
|
88
|
+
hasMDX: boolean;
|
|
89
|
+
/** CodeHike is a dependency */
|
|
90
|
+
hasCodeHike: boolean;
|
|
91
|
+
/** Native Node modules that need stubbing for Workers */
|
|
87
92
|
nativeModulesToStub: string[];
|
|
88
93
|
};
|
|
89
94
|
/** Check whether a wrangler config file exists in the given directory. */
|
|
@@ -103,8 +108,8 @@ type MissingDep = {
|
|
|
103
108
|
* module resolution. Handles hoisting, pnpm symlinks, monorepos, and Yarn PnP.
|
|
104
109
|
*/
|
|
105
110
|
declare function isPackageResolvable(root: string, packageName: string): boolean;
|
|
106
|
-
declare function getMissingDeps(info: ProjectInfo,
|
|
107
|
-
|
|
111
|
+
declare function getMissingDeps(info: ProjectInfo,
|
|
112
|
+
/** Override for testing — defaults to `isPackageResolvable` */
|
|
108
113
|
_isResolvable?: (root: string, pkg: string) => boolean): MissingDep[];
|
|
109
114
|
/**
|
|
110
115
|
* Return the first candidate directory (resolved against `root`) that exists,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/utils/public-file-path.ts
|
|
2
|
+
/** Encode each pathname segment without encoding `/` separators. */
|
|
3
|
+
function encodePublicFilePath(pathname) {
|
|
4
|
+
return pathname.split("/").map((segment) => encodeURIComponent(segment)).join("/");
|
|
5
|
+
}
|
|
6
|
+
/** Precompute keys for both encoded requests and decoded proxy/dev variants. */
|
|
7
|
+
function publicFilePathVariants(pathname) {
|
|
8
|
+
const encoded = encodePublicFilePath(pathname);
|
|
9
|
+
return encoded === pathname ? [pathname] : [pathname, encoded];
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { publicFilePathVariants };
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
|
|
2
|
+
import { publicFilePathVariants } from "./public-file-path.js";
|
|
2
3
|
import fs from "node:fs";
|
|
3
4
|
//#region src/utils/public-routes.ts
|
|
4
|
-
function scanPublicFileRoutes(root) {
|
|
5
|
-
|
|
5
|
+
function scanPublicFileRoutes(root, configuredPublicDir = "public") {
|
|
6
|
+
if (configuredPublicDir === false || configuredPublicDir === "") return [];
|
|
7
|
+
const publicDir = path.resolve(root, configuredPublicDir);
|
|
6
8
|
const routes = [];
|
|
7
9
|
const visitedDirs = /* @__PURE__ */ new Set();
|
|
8
10
|
function walk(dir) {
|
|
@@ -35,14 +37,13 @@ function scanPublicFileRoutes(root) {
|
|
|
35
37
|
if (!stat.isFile()) continue;
|
|
36
38
|
} else if (!entry.isFile()) continue;
|
|
37
39
|
const relativePath = path.relative(publicDir, fullPath);
|
|
38
|
-
routes.push("/" + relativePath);
|
|
40
|
+
routes.push(...publicFilePathVariants("/" + relativePath));
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
if (fs.existsSync(publicDir)) try {
|
|
42
44
|
walk(publicDir);
|
|
43
45
|
} catch {}
|
|
44
|
-
routes.sort();
|
|
45
|
-
return routes;
|
|
46
|
+
return [...new Set(routes)].sort();
|
|
46
47
|
}
|
|
47
48
|
//#endregion
|
|
48
49
|
export { scanPublicFileRoutes };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vinext",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.5",
|
|
4
4
|
"description": "Run Next.js apps on Vite. Drop-in replacement for the next CLI.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -21,6 +21,10 @@
|
|
|
21
21
|
"types": "./dist/index.d.ts",
|
|
22
22
|
"import": "./dist/index.js"
|
|
23
23
|
},
|
|
24
|
+
"./client": {
|
|
25
|
+
"types": "./dist/client/index.d.ts",
|
|
26
|
+
"import": "./dist/client/index.js"
|
|
27
|
+
},
|
|
24
28
|
"./cache": {
|
|
25
29
|
"types": "./dist/cache.d.ts",
|
|
26
30
|
"import": "./dist/cache.js"
|
|
@@ -183,8 +187,8 @@
|
|
|
183
187
|
"am-i-vibing": "^0.5.0",
|
|
184
188
|
"pathslash": "^0.1.0",
|
|
185
189
|
"react-server-dom-webpack": "^19.2.7",
|
|
186
|
-
"vite": "npm:@voidzero-dev/vite-plus-core@0.2.
|
|
187
|
-
"vite-plus": "0.2.
|
|
190
|
+
"vite": "npm:@voidzero-dev/vite-plus-core@0.2.6",
|
|
191
|
+
"vite-plus": "0.2.6"
|
|
188
192
|
},
|
|
189
193
|
"peerDependencies": {
|
|
190
194
|
"@mdx-js/rollup": "^3.0.0",
|