vinext 1.2.1 → 1.3.1
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 +12 -9
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- package/dist/build/action-owner-manifest.d.ts +3 -2
- package/dist/build/action-owner-manifest.js +18 -2
- package/dist/build/app-page-static-eligibility.d.ts +17 -1
- package/dist/build/app-page-static-eligibility.js +80 -13
- package/dist/build/clean-output.d.ts +2 -1
- package/dist/build/client-build-config.d.ts +77 -6
- package/dist/build/client-build-config.js +176 -12
- package/dist/build/client-reference-async.d.ts +48 -0
- package/dist/build/client-reference-async.js +123 -0
- package/dist/build/client-reference-chunks.d.ts +32 -0
- package/dist/build/client-reference-chunks.js +111 -0
- package/dist/build/client-reference-groups.d.ts +171 -0
- package/dist/build/client-reference-groups.js +572 -0
- package/dist/build/css-url-assets.d.ts +2 -1
- package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
- package/dist/build/google-fonts/font-metadata.d.ts +2 -1
- package/dist/build/google-fonts/validate.d.ts +2 -1
- package/dist/build/inline-css.d.ts +2 -1
- package/dist/build/layout-classification.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +33 -1
- package/dist/build/module-dependency-cache.js +51 -1
- package/dist/build/next-client-runtime-manifests.d.ts +12 -2
- package/dist/build/next-client-runtime-manifests.js +19 -4
- package/dist/build/nitro-public-files.d.ts +24 -0
- package/dist/build/nitro-public-files.js +60 -0
- package/dist/build/pages-client-assets-module.js +1 -1
- package/dist/build/precompress.d.ts +2 -1
- package/dist/build/precompress.js +1 -1
- package/dist/build/prerender-paths.d.ts +2 -1
- package/dist/build/prerender-paths.js +5 -2
- package/dist/build/prerender-phase.d.ts +2 -1
- package/dist/build/prerender-server-pool.js +1 -1
- package/dist/build/prerender.d.ts +3 -2
- package/dist/build/prerender.js +5 -4
- package/dist/build/report.d.ts +2 -1
- package/dist/build/route-classification-injector.d.ts +2 -1
- package/dist/build/route-classification-manifest.d.ts +2 -1
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +24 -0
- package/dist/build/server-actions-encryption-key.js +101 -0
- package/dist/build/ssr-manifest.d.ts +3 -0
- package/dist/build/ssr-manifest.js +34 -2
- package/dist/build/standalone.d.ts +2 -1
- package/dist/cache/cache-adapters-virtual.d.ts +2 -1
- package/dist/cache.js +1 -2
- package/dist/check.d.ts +2 -1
- package/dist/check.js +4 -0
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +2 -0
- package/dist/client/client-redirect-matcher.js +2 -1
- package/dist/client/client-redirects.d.ts +4 -3
- package/dist/client/client-redirects.js +2 -1
- package/dist/client/client-rewrite-params.d.ts +9 -0
- package/dist/client/client-rewrite-params.js +20 -0
- package/dist/client/client-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +2 -1
- package/dist/client/dev-error-overlay.js +2 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +28 -3
- package/dist/client/navigation-runtime.js +42 -11
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -2
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +27 -41
- package/dist/config/config-matchers.js +293 -270
- package/dist/config/config-source.d.ts +34 -0
- package/dist/config/config-source.js +141 -0
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/header-params.d.ts +29 -0
- package/dist/config/header-params.js +106 -0
- package/dist/config/next-config.d.ts +20 -6
- package/dist/config/next-config.js +149 -11
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +34 -6
- package/dist/entries/app-browser-entry.js +103 -40
- package/dist/entries/app-rsc-entry.d.ts +4 -1
- package/dist/entries/app-rsc-entry.js +131 -66
- package/dist/entries/app-rsc-manifest.d.ts +12 -1
- package/dist/entries/app-rsc-manifest.js +73 -1
- package/dist/entries/app-ssr-entry.d.ts +4 -1
- package/dist/entries/app-ssr-entry.js +9 -2
- package/dist/entries/pages-client-entry.d.ts +1 -0
- package/dist/entries/pages-client-entry.js +6 -6
- package/dist/entries/pages-entry-helpers.js +1 -2
- package/dist/entries/pages-server-entry.d.ts +2 -1
- package/dist/entries/pages-server-entry.js +18 -15
- package/dist/entries/runtime-entry-module.d.ts +1 -0
- package/dist/entries/runtime-entry-module.js +4 -1
- package/dist/image/image-adapters-virtual.d.ts +2 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.js +340 -116
- package/dist/init.js +17 -0
- package/dist/plugins/client-compile-hints.d.ts +30 -0
- package/dist/plugins/client-compile-hints.js +88 -0
- package/dist/plugins/client-reference-dedup.d.ts +2 -1
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
- package/dist/plugins/dynamic-preload-metadata.js +1 -1
- package/dist/plugins/environment.d.ts +2 -1
- package/dist/plugins/fonts.js +9 -12
- package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
- package/dist/plugins/import-meta-url.d.ts +2 -1
- package/dist/plugins/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +27 -3
- package/dist/plugins/optimize-imports.js +106 -20
- package/dist/plugins/pages-node-externals.d.ts +2 -1
- package/dist/plugins/remove-console.d.ts +2 -1
- package/dist/plugins/require-condition-resolution.d.ts +2 -1
- package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
- package/dist/plugins/rsc-client-reference-loaders.js +447 -27
- package/dist/plugins/rsc-client-shim-excludes.js +2 -0
- package/dist/plugins/sass.d.ts +2 -1
- package/dist/plugins/strip-server-exports.d.ts +2 -1
- package/dist/plugins/styled-jsx.d.ts +2 -1
- package/dist/plugins/transform-result.d.ts +2 -1
- package/dist/plugins/typeof-window.d.ts +2 -1
- package/dist/plugins/use-cache-callable.d.ts +5 -0
- package/dist/plugins/use-cache-callable.js +30 -8
- package/dist/plugins/worker-image-imports.d.ts +1 -0
- package/dist/plugins/worker-image-imports.js +2 -2
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +41 -1
- package/dist/routing/app-route-graph.js +122 -50
- package/dist/routing/browser-route-manifest.d.ts +44 -0
- package/dist/routing/browser-route-manifest.js +195 -0
- package/dist/routing/hashed-route-patterns.d.ts +4 -0
- package/dist/routing/hashed-route-patterns.js +22 -0
- package/dist/routing/optimistic-route-trie.d.ts +28 -0
- package/dist/routing/optimistic-route-trie.js +102 -0
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/routing/route-validation.d.ts +6 -1
- package/dist/routing/route-validation.js +26 -10
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/app-action-forwarding.d.ts +10 -1
- package/dist/server/app-action-forwarding.js +15 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
- package/dist/server/app-browser-entry.js +175 -64
- package/dist/server/app-browser-error.d.ts +5 -2
- package/dist/server/app-browser-error.js +7 -2
- package/dist/server/app-browser-history-controller.d.ts +2 -1
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +4 -3
- package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
- package/dist/server/app-browser-mpa-navigation.js +6 -5
- package/dist/server/app-browser-navigation-controller.d.ts +17 -6
- package/dist/server/app-browser-navigation-controller.js +103 -36
- package/dist/server/app-browser-popstate.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
- package/dist/server/app-browser-server-action-client.d.ts +2 -1
- package/dist/server/app-browser-state.d.ts +2 -2
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.d.ts +6 -5
- package/dist/server/app-client-reference-manifest.d.ts +31 -0
- package/dist/server/app-client-reference-manifest.js +46 -0
- package/dist/server/app-client-reference-preloader.d.ts +45 -2
- package/dist/server/app-client-reference-preloader.js +48 -10
- package/dist/server/app-elements-wire.d.ts +2 -1
- package/dist/server/app-elements.d.ts +2 -0
- package/dist/server/app-elements.js +3 -1
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +6 -2
- package/dist/server/app-history-state.d.ts +2 -1
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-layout-param-observation.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-middleware.d.ts +6 -0
- package/dist/server/app-middleware.js +8 -10
- package/dist/server/app-optimistic-routing.d.ts +26 -11
- package/dist/server/app-optimistic-routing.js +38 -96
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +229 -39
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +40 -7
- package/dist/server/app-page-cache-finalizer.d.ts +2 -1
- package/dist/server/app-page-cache-finalizer.js +1 -1
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +15 -2
- package/dist/server/app-page-cache.js +2 -2
- package/dist/server/app-page-dispatch.d.ts +34 -1
- package/dist/server/app-page-dispatch.js +165 -34
- package/dist/server/app-page-element-builder.d.ts +17 -1
- package/dist/server/app-page-element-builder.js +187 -66
- package/dist/server/app-page-execution.d.ts +28 -1
- package/dist/server/app-page-execution.js +114 -5
- package/dist/server/app-page-head.d.ts +95 -3
- package/dist/server/app-page-head.js +307 -152
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-probe.d.ts +2 -1
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +7 -1
- package/dist/server/app-page-render.js +38 -11
- package/dist/server/app-page-request.d.ts +14 -1
- package/dist/server/app-page-request.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +52 -2
- package/dist/server/app-page-route-wiring.js +197 -47
- package/dist/server/app-page-rsc-render-status.d.ts +3 -1
- package/dist/server/app-page-rsc-render-status.js +1 -0
- package/dist/server/app-page-search-params-observation.d.ts +8 -6
- package/dist/server/app-page-search-params-observation.js +16 -11
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +38 -1
- package/dist/server/app-page-stream.js +24 -4
- package/dist/server/app-pages-bridge.d.ts +4 -2
- package/dist/server/app-pages-bridge.js +11 -7
- package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
- package/dist/server/app-prerender-endpoints.d.ts +2 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-prerender-static-params.js +3 -2
- package/dist/server/app-render-dependency.d.ts +11 -1
- package/dist/server/app-render-dependency.js +65 -6
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-request-stage-independent-entry.js +2 -2
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.js +3 -3
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +4 -2
- package/dist/server/app-route-handler-execution.d.ts +4 -1
- package/dist/server/app-route-handler-execution.js +9 -2
- package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
- package/dist/server/app-route-handler-middleware-context.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +4 -2
- package/dist/server/app-route-handler-response.js +2 -2
- package/dist/server/app-route-handler-runtime.d.ts +4 -1
- package/dist/server/app-route-handler-runtime.js +20 -3
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +15 -6
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-route-tree.d.ts +20 -0
- package/dist/server/app-route-tree.js +18 -0
- package/dist/server/app-router-entry.js +2 -2
- package/dist/server/app-rsc-combined-handler.js +8 -1
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-errors.d.ts +9 -1
- package/dist/server/app-rsc-errors.js +9 -2
- package/dist/server/app-rsc-handler.d.ts +6 -2
- package/dist/server/app-rsc-handler.js +152 -140
- package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
- package/dist/server/app-rsc-response-finalizer.js +4 -1
- package/dist/server/app-rsc-response-stage.js +3 -1
- package/dist/server/app-rsc-route-matching.d.ts +39 -1
- package/dist/server/app-rsc-route-matching.js +25 -1
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-segment-config.js +1 -14
- package/dist/server/app-server-action-execution.d.ts +25 -7
- package/dist/server/app-server-action-execution.js +53 -59
- package/dist/server/app-ssr-entry.d.ts +12 -0
- package/dist/server/app-ssr-entry.js +104 -48
- package/dist/server/app-ssr-error-meta.d.ts +2 -1
- package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
- package/dist/server/app-ssr-stream.d.ts +29 -10
- package/dist/server/app-ssr-stream.js +311 -67
- package/dist/server/app-static-generation.d.ts +2 -1
- package/dist/server/app-streamed-client-references.d.ts +39 -0
- package/dist/server/app-streamed-client-references.js +156 -0
- package/dist/server/app-visited-response-cache.d.ts +2 -1
- package/dist/server/app-worker-stages.d.ts +2 -1
- package/dist/server/artifact-compatibility.d.ts +2 -1
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/client-reuse-manifest.d.ts +2 -1
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/config-headers.js +12 -3
- package/dist/server/csp.d.ts +2 -1
- package/dist/server/default-global-not-found-module.d.ts +2 -1
- package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
- package/dist/server/default-http-access-fallback-modules.js +31 -0
- package/dist/server/defer-until-stream-consumed.d.ts +34 -0
- package/dist/server/defer-until-stream-consumed.js +154 -21
- package/dist/server/dev-lockfile.d.ts +32 -2
- package/dist/server/dev-lockfile.js +46 -2
- package/dist/server/dev-module-runner.d.ts +2 -1
- package/dist/server/dev-server.js +10 -3
- package/dist/server/fetch-handler.js +1 -2
- package/dist/server/file-based-metadata.d.ts +2 -1
- package/dist/server/framework-tracer.d.ts +2 -1
- package/dist/server/html.d.ts +1 -0
- package/dist/server/html.js +19 -1
- package/dist/server/http-conditional.d.ts +2 -1
- package/dist/server/http-error-responses.d.ts +2 -1
- package/dist/server/implicit-tags.d.ts +2 -1
- package/dist/server/isolate-shared-promise.d.ts +10 -0
- package/dist/server/isolate-shared-promise.js +33 -0
- package/dist/server/isr-cache.js +3 -2
- package/dist/server/metadata-route-build-data.d.ts +2 -1
- package/dist/server/metadata-route-build-data.js +1 -1
- package/dist/server/metadata-route-response.d.ts +2 -1
- package/dist/server/metadata-route-response.js +1 -1
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-matcher-pattern.d.ts +0 -1
- package/dist/server/middleware-matcher-pattern.js +11 -140
- package/dist/server/middleware-matcher.js +5 -6
- package/dist/server/middleware-response-headers.d.ts +31 -0
- package/dist/server/middleware-response-headers.js +57 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/middleware-runtime.js +26 -13
- package/dist/server/navigation-planner.d.ts +2 -2
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/next-error-digest.d.ts +2 -1
- package/dist/server/nitro-public-files-plugin.d.ts +39 -0
- package/dist/server/nitro-public-files-plugin.js +106 -0
- package/dist/server/nitro-public-files.d.ts +22 -0
- package/dist/server/nitro-public-files.js +39 -0
- package/dist/server/opentelemetry-api.d.ts +2 -1
- package/dist/server/operation-token.d.ts +2 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-asset-tags.d.ts +7 -1
- package/dist/server/pages-asset-tags.js +9 -2
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +8 -1
- package/dist/server/pages-data-route.d.ts +2 -1
- package/dist/server/pages-document-asset-props.d.ts +2 -1
- package/dist/server/pages-document-initial-props.d.ts +2 -1
- package/dist/server/pages-execution-tracing.d.ts +2 -1
- package/dist/server/pages-execution-tracing.js +1 -1
- package/dist/server/pages-get-initial-props.d.ts +2 -1
- package/dist/server/pages-i18n.d.ts +18 -0
- package/dist/server/pages-i18n.js +18 -2
- package/dist/server/pages-node-compat.d.ts +5 -3
- package/dist/server/pages-node-compat.js +35 -16
- package/dist/server/pages-page-data.d.ts +7 -1
- package/dist/server/pages-page-data.js +35 -12
- package/dist/server/pages-page-handler.d.ts +3 -2
- package/dist/server/pages-page-handler.js +16 -7
- package/dist/server/pages-page-method.d.ts +2 -1
- package/dist/server/pages-page-response.d.ts +2 -1
- package/dist/server/pages-preview.d.ts +2 -1
- package/dist/server/pages-readiness.d.ts +2 -1
- package/dist/server/pages-request-pipeline.d.ts +8 -2
- package/dist/server/pages-request-pipeline.js +35 -40
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +16 -6
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +1 -1
- package/dist/server/pages-revalidate.js +1 -0
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/pages-router-entry.js +1 -1
- package/dist/server/prerender-cache-life-header.d.ts +2 -1
- package/dist/server/prerender-route-params.d.ts +2 -1
- package/dist/server/prod-server.d.ts +2 -2
- package/dist/server/prod-server.js +80 -36
- package/dist/server/proxy-trust.d.ts +6 -0
- package/dist/server/proxy-trust.js +12 -6
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +5 -0
- package/dist/server/request-pipeline.js +12 -1
- package/dist/server/request-tracing.d.ts +2 -1
- package/dist/server/request-tracing.js +1 -1
- package/dist/server/response-start-tracing.js +7 -29
- package/dist/server/rsc-render-stream.d.ts +4 -0
- package/dist/server/rsc-render-stream.js +25 -0
- package/dist/server/seed-cache.d.ts +2 -1
- package/dist/server/seed-cache.js +1 -1
- package/dist/server/server-reference-loader.js +10 -1
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +16 -3
- package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +2 -1
- package/dist/server/worker-utils.js +1 -1
- package/dist/shims/app.d.ts +2 -1
- package/dist/shims/cache-callable-runtime.d.ts +2 -1
- package/dist/shims/cache-handler.d.ts +8 -3
- package/dist/shims/cache-handler.js +32 -11
- package/dist/shims/cache-request-state.d.ts +40 -3
- package/dist/shims/cache-request-state.js +70 -5
- package/dist/shims/cache-runtime.js +47 -19
- package/dist/shims/cache.d.ts +2 -2
- package/dist/shims/cache.js +17 -8
- package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
- package/dist/shims/caught-not-found-boundaries.js +48 -0
- package/dist/shims/cdn-purge-routes.d.ts +25 -0
- package/dist/shims/cdn-purge-routes.js +77 -0
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- package/dist/shims/config.d.ts +2 -1
- package/dist/shims/default-forbidden.d.ts +4 -0
- package/dist/shims/default-forbidden.js +18 -0
- package/dist/shims/default-not-found.d.ts +0 -5
- package/dist/shims/default-not-found.js +5 -41
- package/dist/shims/default-unauthorized.d.ts +4 -0
- package/dist/shims/default-unauthorized.js +18 -0
- package/dist/shims/dynamic.js +17 -4
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +31 -16
- package/dist/shims/font-google.js +1 -2
- package/dist/shims/font-utils.d.ts +3 -2
- package/dist/shims/font-utils.js +5 -3
- package/dist/shims/form.js +9 -4
- package/dist/shims/http-access-error-fallback.d.ts +7 -0
- package/dist/shims/http-access-error-fallback.js +47 -0
- package/dist/shims/image-props.d.ts +93 -0
- package/dist/shims/image-props.js +323 -0
- package/dist/shims/image.d.ts +4 -39
- package/dist/shims/image.js +4 -319
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
- package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
- package/dist/shims/internal/client-reference-loader.d.ts +7 -0
- package/dist/shims/internal/client-reference-loader.js +91 -0
- package/dist/shims/internal/cookie-serialize.d.ts +2 -1
- package/dist/shims/internal/cookies.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +9 -0
- package/dist/shims/internal/headers-state.js +19 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
- package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/pages-data-target.d.ts +2 -1
- package/dist/shims/internal/pages-data-url.d.ts +2 -1
- package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
- package/dist/shims/link.js +198 -53
- package/dist/shims/metadata.d.ts +32 -11
- package/dist/shims/metadata.js +88 -26
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation.d.ts +23 -3
- package/dist/shims/navigation.js +91 -25
- package/dist/shims/og.js +35 -10
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-context.d.ts +13 -0
- package/dist/shims/router.js +33 -43
- package/dist/shims/server.d.ts +31 -4
- package/dist/shims/server.js +58 -10
- package/dist/shims/thenable-params.d.ts +6 -1
- package/dist/shims/thenable-params.js +11 -2
- package/dist/shims/unified-request-context.d.ts +5 -0
- package/dist/shims/unified-request-context.js +5 -3
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/asset-prefix.d.ts +7 -0
- package/dist/utils/asset-prefix.js +10 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +20 -6
- package/dist/utils/client-entry-manifest.d.ts +13 -0
- package/dist/utils/client-entry-manifest.js +20 -1
- package/dist/utils/client-reference-chunks.d.ts +45 -0
- package/dist/utils/client-reference-chunks.js +30 -0
- package/dist/utils/client-runtime-metadata.d.ts +10 -1
- package/dist/utils/client-runtime-metadata.js +53 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +18 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/manifest-paths.d.ts +14 -0
- package/dist/utils/manifest-paths.js +22 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/path-to-regexp.d.ts +21 -0
- package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
- package/dist/utils/plugin-react-version.d.ts +15 -0
- package/dist/utils/plugin-react-version.js +64 -0
- package/dist/utils/project.d.ts +2 -1
- package/dist/utils/project.js +9 -1
- package/dist/utils/public-routes.d.ts +2 -0
- package/dist/utils/public-routes.js +18 -7
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/sorted-array.d.ts +2 -1
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +5 -5
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/middleware-path-to-regexp.d.ts +0 -13
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/utils/regex-safety.d.ts +0 -17
- package/dist/utils/regex-safety.js +0 -789
|
@@ -7,7 +7,7 @@ import { attachRequestCfMetadata, cloneRequestWithHeaders, cloneRequestWithUrl,
|
|
|
7
7
|
import { assetPrefixPathname, isNextStaticPath } from "../utils/asset-prefix.js";
|
|
8
8
|
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
9
9
|
import { runWithExecutionContext } from "../shims/request-context.js";
|
|
10
|
-
import { normalizeDefaultLocalePathname } from "./pages-i18n.js";
|
|
10
|
+
import { normalizeDefaultLocalePathname, shouldRestoreLocaleRootTrailingSlash } from "./pages-i18n.js";
|
|
11
11
|
import { isNextDataPathname } from "./pages-data-route.js";
|
|
12
12
|
import { getExplicitCdnCacheAdapter } from "../shims/cdn-cache-state.js";
|
|
13
13
|
import { CACHEABILITY_REQUEST_STATE } from "../shims/cacheability-classification.js";
|
|
@@ -48,6 +48,10 @@ const pagesRequestStagePrerenderSecret = pagesEntry.prerenderSecret ?? null;
|
|
|
48
48
|
const basePath = vinextConfig?.basePath ?? "";
|
|
49
49
|
const assetPathPrefix = assetPrefixPathname(vinextConfig?.assetPrefix ?? "");
|
|
50
50
|
const trailingSlash = vinextConfig?.trailingSlash ?? false;
|
|
51
|
+
const localeRootTrailingSlashConfig = {
|
|
52
|
+
trailingSlash,
|
|
53
|
+
skipProxyUrlNormalize: vinextConfig?.skipProxyUrlNormalize
|
|
54
|
+
};
|
|
51
55
|
const skipTrailingSlashRedirect = vinextConfig?.skipTrailingSlashRedirect ?? false;
|
|
52
56
|
const i18nConfig = vinextConfig?.i18n ?? null;
|
|
53
57
|
const configRedirects = vinextConfig?.redirects ?? [];
|
|
@@ -88,7 +92,7 @@ function handleRequestStageLocally(request, env, ctx, dispatchResponseStage) {
|
|
|
88
92
|
function handleRequest(request, env, platformCtx, dispatchResponseStage, forceCacheBypass, defaultHostRuntime, assets) {
|
|
89
93
|
const url = new URL(request.url);
|
|
90
94
|
const trace = async () => {
|
|
91
|
-
await pagesEntry.__ensureInstrumentation?.();
|
|
95
|
+
await pagesEntry.__ensureInstrumentation?.(platformCtx);
|
|
92
96
|
return traceFrameworkRequest({
|
|
93
97
|
callback: () => handleRequestImpl(request, env, platformCtx, dispatchResponseStage, forceCacheBypass, defaultHostRuntime, assets),
|
|
94
98
|
getStatus: (response) => response?.status,
|
|
@@ -175,6 +179,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
175
179
|
}
|
|
176
180
|
const missingBuildAsset = isNextStaticPath(pathname, basePath, assetPathPrefix);
|
|
177
181
|
const hadBasePath = !basePath || hasBasePath(pathname, basePath);
|
|
182
|
+
const restoreLocaleRootTrailingSlash = shouldRestoreLocaleRootTrailingSlash(pathname, localeRootTrailingSlashConfig);
|
|
178
183
|
{
|
|
179
184
|
const stripped = stripBasePath(pathname, basePath);
|
|
180
185
|
if (stripped !== pathname) {
|
|
@@ -193,7 +198,10 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
193
198
|
request = dataNorm.request;
|
|
194
199
|
pathname = dataNorm.normalizedPathname;
|
|
195
200
|
}
|
|
196
|
-
const responseStagePolicyPathname = i18nConfig ? normalizeDefaultLocalePathname(pathname, i18nConfig, {
|
|
201
|
+
const responseStagePolicyPathname = i18nConfig ? normalizeDefaultLocalePathname(pathname, i18nConfig, {
|
|
202
|
+
hostname: url.hostname,
|
|
203
|
+
restoreRootTrailingSlash: restoreLocaleRootTrailingSlash
|
|
204
|
+
}) : pathname;
|
|
197
205
|
const responseStagePolicyHeaders = resolveResponseStageCachePolicy({
|
|
198
206
|
basePathState: {
|
|
199
207
|
basePath,
|
|
@@ -219,6 +227,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
219
227
|
hasMiddleware,
|
|
220
228
|
ctx,
|
|
221
229
|
recordCacheability: forceCacheBypass,
|
|
230
|
+
restoreLocaleRootTrailingSlash,
|
|
222
231
|
middlewareRequest: isDataReq && vinextConfig?.skipProxyUrlNormalize ? middlewareRequest : void 0,
|
|
223
232
|
dataNotFoundResponse: vinextConfig?.skipProxyUrlNormalize ? dataNorm.notFoundResponse : null,
|
|
224
233
|
authorizeOnDemandRevalidate: typeof authorizeOnDemandRevalidate === "function" ? authorizeOnDemandRevalidate : void 0,
|
|
@@ -320,7 +329,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
320
329
|
fetchPublicFile: (sourceRequest) => resolvePublicImageSource(sourceRequest, assets)
|
|
321
330
|
}), allowedWidths, imageConfig);
|
|
322
331
|
}
|
|
323
|
-
return fetchWorkerFilesystemRoute(filesystemRequest, requestPathname, phase, (assetRequest) => Promise.resolve(assets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix,
|
|
332
|
+
return fetchWorkerFilesystemRoute(filesystemRequest, requestPathname, phase, (assetRequest) => Promise.resolve(assets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, resolvedPathnameHasBasePath);
|
|
324
333
|
}
|
|
325
334
|
};
|
|
326
335
|
const resolvePublicImageSource = async (sourceRequest, sourceAssets) => {
|
|
@@ -333,6 +342,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
333
342
|
const sourceResult = await runPagesRequest(attachRequestCfMetadata(new Request(new URL(sourcePathname + sourceUrl.search, sourceUrl), { signal: sourceRequest.signal }), sourceRequest), {
|
|
334
343
|
...deps,
|
|
335
344
|
hadBasePath: sourceHadBasePath,
|
|
345
|
+
restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(sourceUrl.pathname, localeRootTrailingSlashConfig),
|
|
336
346
|
isDataReq: false,
|
|
337
347
|
isDataRequest: false,
|
|
338
348
|
middlewareRequest: void 0,
|
|
@@ -341,9 +351,9 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
341
351
|
runMiddleware: typeof runMiddleware === "function" ? wrapMiddlewareWithBasePath(runMiddleware, basePath, sourceHadBasePath) : null,
|
|
342
352
|
renderPage: null,
|
|
343
353
|
handleApi: null,
|
|
344
|
-
serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, filesystemRequest) => {
|
|
354
|
+
serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, filesystemRequest, candidateHasBasePath) => {
|
|
345
355
|
if (isImageOptimizationPath(candidate)) return false;
|
|
346
|
-
const asset = await fetchWorkerFilesystemRoute(filesystemRequest, candidate, phase, (assetRequest) => Promise.resolve(sourceAssets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix,
|
|
356
|
+
const asset = await fetchWorkerFilesystemRoute(filesystemRequest, candidate, phase, (assetRequest) => Promise.resolve(sourceAssets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, candidateHasBasePath);
|
|
347
357
|
if (asset === false) return false;
|
|
348
358
|
sourceAsset = asset;
|
|
349
359
|
return new Response(null);
|
|
@@ -8,4 +8,5 @@ type PagesWorkerExecutionContext = ExecutionContextLike & {
|
|
|
8
8
|
};
|
|
9
9
|
export declare function renderPagesResponse(request: Request, env: PagesWorkerEnv | undefined, platformCtx: PagesWorkerExecutionContext | undefined, props: WorkerResponseStageProps, stagedHeaders?: Headers, dispatchRequestStage?: VinextRequestStageTransport, dispatchOptions?: VinextResponseStageDispatchOptions): Promise<Response>;
|
|
10
10
|
export declare function handleResponseStage(request: Request, env: PagesWorkerEnv | undefined, ctx: PagesWorkerExecutionContext | undefined, props: WorkerResponseStageProps, dispatchRequestStage: VinextRequestStageTransport, options: VinextResponseStageDispatchOptions): Promise<Response>;
|
|
11
|
-
//#endregion
|
|
11
|
+
//#endregion
|
|
12
|
+
export {};
|
|
@@ -36,7 +36,7 @@ async function renderPagesResponse(request, env, platformCtx, props, stagedHeade
|
|
|
36
36
|
if (!isPagesResponseStageProps(props)) return new Response("Invalid vinext Pages response stage", { status: 400 });
|
|
37
37
|
if (props.buildId !== pagesEntry.buildId) return new Response("Vinext Pages response stage deployment mismatch", { status: 409 });
|
|
38
38
|
if (props.requestHost !== new URL(request.url).host) return new Response("Invalid vinext Pages response stage", { status: 400 });
|
|
39
|
-
await pagesEntry.__ensureInstrumentation?.();
|
|
39
|
+
await pagesEntry.__ensureInstrumentation?.(platformCtx);
|
|
40
40
|
registerConfiguredImageOptimizer(env);
|
|
41
41
|
const renderHeaders = new Headers(stagedHeaders ?? props.stagedHeaders ?? []);
|
|
42
42
|
renderHeaders.delete("Content-Length");
|
|
@@ -12,6 +12,7 @@ async function performOnDemandRevalidate(source, urlPath, opts = {}, trustedOrig
|
|
|
12
12
|
if (isSourceRevalidationRequest(source)) throw new Error(`Cannot revalidate ${urlPath} from an internal revalidation request`);
|
|
13
13
|
const executionContext = getRequestExecutionContext();
|
|
14
14
|
const dispatchRevalidate = executionContext?.dispatchPagesRevalidate;
|
|
15
|
+
if (!dispatchRevalidate && !trustedOrigin) throw new Error(`Cannot revalidate ${urlPath}: no in-process dispatcher or server-owned origin is available`);
|
|
15
16
|
const target = createRevalidateTarget(source, urlPath, trustedOrigin);
|
|
16
17
|
const headers = { [PRERENDER_REVALIDATE_HEADER]: getRevalidateSecret() };
|
|
17
18
|
if (trustedOrigin && !dispatchRevalidate) {
|
|
@@ -15,4 +15,5 @@ type AppComponent = {
|
|
|
15
15
|
} | null;
|
|
16
16
|
/** Classify loaded Pages modules after HOCs and re-exports have been evaluated. */
|
|
17
17
|
export declare function getRuntimePagesDataKind(pageModule: PagesModule, appComponent: AppComponent): RuntimePagesDataKind;
|
|
18
|
-
//#endregion
|
|
18
|
+
//#endregion
|
|
19
|
+
export {};
|
|
@@ -20,7 +20,7 @@ async function handleSingleStageRequest(request, env, platformCtx) {
|
|
|
20
20
|
let ctx = createWorkerPrerenderDiscoveryContext(ctxWithRevalidation, request, pagesRequestStagePrerenderSecret);
|
|
21
21
|
const readinessResponse = createWorkerPrerenderReadinessResponse(ctx, request);
|
|
22
22
|
if (readinessResponse) {
|
|
23
|
-
if (readinessResponse.status === 204) await Promise.all([__ensureInstrumentation(), __ensureInstrumentation$1()]);
|
|
23
|
+
if (readinessResponse.status === 204) await Promise.all([__ensureInstrumentation(ctx), __ensureInstrumentation$1(ctx)]);
|
|
24
24
|
return await validateCdnRequest(request) ?? readinessResponse;
|
|
25
25
|
}
|
|
26
26
|
const isClientBuildFile = isPagesClientBuildFileRequest(request, env, ctx);
|
|
@@ -7,4 +7,5 @@ type PrerenderCacheLife = {
|
|
|
7
7
|
};
|
|
8
8
|
export declare function applyPrerenderCacheLifeHeader(headers: Headers, requestCacheLife: PrerenderCacheLife | null | undefined): void;
|
|
9
9
|
export declare function applyPrerenderCacheTagsHeader(headers: Headers, cacheTags: readonly string[]): void;
|
|
10
|
-
//#endregion
|
|
10
|
+
//#endregion
|
|
11
|
+
export {};
|
|
@@ -26,4 +26,5 @@ export declare function readTrustedPrerenderStateFromHeaders(headers: Headers, e
|
|
|
26
26
|
export declare function readTrustedPrerenderRouteParams(request: Request): PrerenderRouteParamsPayload | null;
|
|
27
27
|
export declare function matchPrerenderRouteParamsPayload(payload: PrerenderRouteParamsPayload | null, routePattern: string, params: PrerenderRouteParams): PrerenderRouteParamsRouteMatch | null;
|
|
28
28
|
export declare function encodePrerenderRouteParams(pattern: string, params: PrerenderRouteParams, fallbackParamNames?: readonly string[]): PrerenderRouteParamsPayload | null;
|
|
29
|
-
//#endregion
|
|
29
|
+
//#endregion
|
|
30
|
+
export {};
|
|
@@ -3,7 +3,7 @@ import { negotiateEncoding } from "./accept-encoding.js";
|
|
|
3
3
|
import { StaticFileCache } from "./static-file-cache.js";
|
|
4
4
|
import { resolveRequestHost, trustProxy, trustedHosts } from "./proxy-trust.js";
|
|
5
5
|
import { COMPRESS_THRESHOLD, isCompressibleContentType } from "./response-compression.js";
|
|
6
|
-
import { IncomingMessage, ServerResponse } from "node:http";
|
|
6
|
+
import { IncomingMessage, Server, ServerResponse } from "node:http";
|
|
7
7
|
//#region src/server/prod-server.d.ts
|
|
8
8
|
/**
|
|
9
9
|
* Import a built server entry module (App Router RSC entry or Pages Router
|
|
@@ -127,7 +127,7 @@ declare function waitForNodeResponseCompletion(res: ServerResponse): Promise<voi
|
|
|
127
127
|
* Pages Router (dist/server/entry.js) and configures the appropriate handler.
|
|
128
128
|
*/
|
|
129
129
|
export declare function startProdServer(options?: ProdServerOptions): Promise<{
|
|
130
|
-
server:
|
|
130
|
+
server: Server<typeof IncomingMessage, typeof ServerResponse>;
|
|
131
131
|
port: number;
|
|
132
132
|
}>;
|
|
133
133
|
type AppRouterPrerenderSeeder = (serverDir: string) => Promise<number>;
|
|
@@ -7,11 +7,12 @@ import { notFoundResponse } from "./http-error-responses.js";
|
|
|
7
7
|
import { getRepeatedSlashRedirect, isOpenRedirectShaped, sendRepeatedSlashRedirect } from "./open-redirect.js";
|
|
8
8
|
import { readStaticFileSignal } from "./static-file-signal.js";
|
|
9
9
|
import { canonicalizeRequestPathname, filterInternalHeaders } from "./request-pipeline.js";
|
|
10
|
-
import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix } from "../utils/asset-prefix.js";
|
|
10
|
+
import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix, isAssetPrefixBuildAsset } from "../utils/asset-prefix.js";
|
|
11
11
|
import { StaticFileCache, contentTypeForPath, etagFromFilenameHash } from "./static-file-cache.js";
|
|
12
12
|
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
13
|
-
import { resolveRequestHost, resolveRequestProtocol, trustProxy, trustedHosts } from "./proxy-trust.js";
|
|
13
|
+
import { resolveRequestHost, resolveRequestProtocol, resolveTrustedForwardedHost, trustProxy, trustedHosts } from "./proxy-trust.js";
|
|
14
14
|
import { normalizePath } from "./normalize-path.js";
|
|
15
|
+
import { shouldRestoreLocaleRootTrailingSlash } from "./pages-i18n.js";
|
|
15
16
|
import { buildNextDataNotFoundResponse, encodeUrlParserIgnoredCharacters, isNextDataPathname, normalizeNextDataPagePathname, parseNextDataPathname, shouldAddTrailingSlashToPagesDataPath, urlParserCreatesPagesDataPath } from "./pages-data-route.js";
|
|
16
17
|
import { buildCacheStateHeaders } from "./cache-headers.js";
|
|
17
18
|
import { parseHttpDate } from "./http-date.js";
|
|
@@ -30,7 +31,6 @@ import { readPrerenderSecret, readServerCompress } from "../build/server-manifes
|
|
|
30
31
|
import { readTrustedPrerenderRouteParamsFromHeaders, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
|
|
31
32
|
import { resolveClientBuildFile } from "./client-build-files.js";
|
|
32
33
|
import { registerPrerenderCloudflareLoader } from "../build/prerender-cloudflare-loader.js";
|
|
33
|
-
import { seedMemoryCacheFromPrerender } from "./seed-cache.js";
|
|
34
34
|
import { negotiateEncoding, parseAcceptedEncodings, selectContentEncoding } from "./accept-encoding.js";
|
|
35
35
|
import { COMPRESS_THRESHOLD, hasNoTransform, isCompressibleContentType, parseContentLengthHeader, resolveResponseCompression } from "./response-compression.js";
|
|
36
36
|
import { ifRangeAllowsRange, parseByteRange } from "./http-range.js";
|
|
@@ -328,6 +328,7 @@ function installClientBuildManifestGlobals(clientDir, assetBase, assetPrefix, cr
|
|
|
328
328
|
});
|
|
329
329
|
setPagesClientAssets({
|
|
330
330
|
appBootstrapPreinitModules: metadata.appBootstrapPreinitModules,
|
|
331
|
+
appRouteManifestModule: metadata.appRouteManifestModule,
|
|
331
332
|
lazyChunks: metadata.lazyChunks,
|
|
332
333
|
dynamicPreloads: metadata.dynamicPreloads,
|
|
333
334
|
crossOrigin
|
|
@@ -378,6 +379,19 @@ function isVinextStreamedHtmlResponse(response) {
|
|
|
378
379
|
function isVinextStreamedApiResponse(response) {
|
|
379
380
|
return response.__vinextStreamedApiResponse === true;
|
|
380
381
|
}
|
|
382
|
+
function disablePrerenderKeepAliveTimeout(server, purpose) {
|
|
383
|
+
if (purpose === "prerender") server.keepAliveTimeout = 0;
|
|
384
|
+
}
|
|
385
|
+
function listen(server, port, host) {
|
|
386
|
+
return new Promise((resolve, reject) => {
|
|
387
|
+
server.once("error", reject);
|
|
388
|
+
server.listen(port, host, () => {
|
|
389
|
+
server.off("error", reject);
|
|
390
|
+
const addr = server.address();
|
|
391
|
+
resolve(typeof addr === "object" && addr ? addr.port : port);
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
}
|
|
381
395
|
function logProdServerStarted(host, port, purpose) {
|
|
382
396
|
const url = `http://${host}:${port}`;
|
|
383
397
|
if (purpose === "prerender") {
|
|
@@ -890,6 +904,7 @@ function waitForNodeResponseCompletion(res) {
|
|
|
890
904
|
*/
|
|
891
905
|
async function startProdServer(options = {}) {
|
|
892
906
|
installSocketErrorBackstop({ runningServer: options.purpose !== "prerender" });
|
|
907
|
+
if (options.purpose !== "prerender" && !process.env.NODE_ENV) Reflect.set(process.env, "NODE_ENV", "production");
|
|
893
908
|
const { port = process.env.PORT ? parseInt(process.env.PORT) : 3e3, host = "0.0.0.0", outDir = path.resolve("dist"), rscEntryPath: explicitRscEntryPath, serverDir: explicitServerDir, serverEntryPath: explicitServerEntryPath, noCompression = false, purpose, silent = false } = options;
|
|
894
909
|
if (purpose === "prerender") registerPrerenderCloudflareLoader();
|
|
895
910
|
const compress = !noCompression;
|
|
@@ -925,14 +940,16 @@ async function startProdServer(options = {}) {
|
|
|
925
940
|
silent
|
|
926
941
|
});
|
|
927
942
|
}
|
|
928
|
-
function createNodeExecutionContext(trustedRevalidateOrigin) {
|
|
943
|
+
function createNodeExecutionContext(trustedRevalidateOrigin, { middlewareOrigin, requestSignal } = {}) {
|
|
929
944
|
return {
|
|
930
945
|
hostRuntime: "node",
|
|
946
|
+
requestSignal,
|
|
931
947
|
waitUntil(promise) {
|
|
932
948
|
Promise.resolve(promise).catch(() => {});
|
|
933
949
|
},
|
|
934
950
|
passThroughOnException() {},
|
|
935
|
-
trustedRevalidateOrigin
|
|
951
|
+
trustedRevalidateOrigin,
|
|
952
|
+
middlewareOrigin
|
|
936
953
|
};
|
|
937
954
|
}
|
|
938
955
|
/**
|
|
@@ -953,8 +970,26 @@ function markPrerenderSpecialError(response, marker) {
|
|
|
953
970
|
});
|
|
954
971
|
}
|
|
955
972
|
function resolveTrustedNodeRevalidateOrigin(req, configuredHost, configuredPort) {
|
|
973
|
+
return `http://${resolveNodeServerHost(req, configuredHost, configuredPort)}`;
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* The origin middleware runs against. The Host header is client-controlled,
|
|
977
|
+
* so, like Next.js, which builds the middleware URL from its own hostname and
|
|
978
|
+
* port, it never counts as the server's origin. Otherwise a client could send
|
|
979
|
+
* the host of an external middleware rewrite target and turn that rewrite into
|
|
980
|
+
* an internal one, skipping middleware's checks for the target path. A trusted
|
|
981
|
+
* `X-Forwarded-Host` is operator-approved, so it keeps the request origin, and
|
|
982
|
+
* rewrites to that host stay internal.
|
|
983
|
+
*/
|
|
984
|
+
function resolveNodeMiddlewareOrigin(req, requestUrl, configuredHost, configuredPort) {
|
|
985
|
+
const url = new URL(requestUrl);
|
|
986
|
+
if (resolveTrustedForwardedHost(req) !== void 0) return url.origin;
|
|
987
|
+
return `${url.protocol}//${resolveNodeServerHost(req, configuredHost, configuredPort)}`;
|
|
988
|
+
}
|
|
989
|
+
/** The `host:port` this server is reachable at locally. */
|
|
990
|
+
function resolveNodeServerHost(req, configuredHost, configuredPort) {
|
|
956
991
|
const port = req.socket.localPort ?? configuredPort;
|
|
957
|
-
return
|
|
992
|
+
return `${normalizeInternalFetchHost(configuredHost)}:${port}`;
|
|
958
993
|
}
|
|
959
994
|
function normalizeInternalFetchHost(host) {
|
|
960
995
|
if (!host || host === "0.0.0.0" || host === "::") return "localhost";
|
|
@@ -973,15 +1008,19 @@ function resolveAppRouterHandler(entry) {
|
|
|
973
1008
|
console.error("[vinext] App Router entry must export either a default handler function or a Worker-style default export with fetch()");
|
|
974
1009
|
process.exit(1);
|
|
975
1010
|
}
|
|
1011
|
+
async function seedMemoryCacheFromPrerenderFallback(serverDir) {
|
|
1012
|
+
const { seedMemoryCacheFromPrerender } = await import("./seed-cache.js");
|
|
1013
|
+
return seedMemoryCacheFromPrerender(serverDir);
|
|
1014
|
+
}
|
|
976
1015
|
function isAppRouterPrerenderSeederExport(value) {
|
|
977
1016
|
return typeof value === "function";
|
|
978
1017
|
}
|
|
979
1018
|
function resolveAppRouterPrerenderSeeder(entryModule) {
|
|
980
|
-
if (typeof entryModule !== "object" || entryModule === null) return
|
|
1019
|
+
if (typeof entryModule !== "object" || entryModule === null) return seedMemoryCacheFromPrerenderFallback;
|
|
981
1020
|
const seedExport = Object.getOwnPropertyDescriptor(entryModule, "seedMemoryCacheFromPrerender")?.value;
|
|
982
1021
|
if (!isAppRouterPrerenderSeederExport(seedExport)) {
|
|
983
1022
|
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using fallback prerender cache seeder");
|
|
984
|
-
return
|
|
1023
|
+
return seedMemoryCacheFromPrerenderFallback;
|
|
985
1024
|
}
|
|
986
1025
|
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using App Router entry prerender cache seeder");
|
|
987
1026
|
return async (serverDir) => {
|
|
@@ -1057,7 +1096,9 @@ function installPagesClientAssets(options) {
|
|
|
1057
1096
|
setPagesClientAssets({
|
|
1058
1097
|
clientEntry: metadata.clientEntryFile,
|
|
1059
1098
|
appBootstrapPreinitModules: metadata.appBootstrapPreinitModules,
|
|
1099
|
+
appRouteManifestModule: metadata.appRouteManifestModule,
|
|
1060
1100
|
ssrManifest: Object.keys(ssrManifest).length > 0 ? ssrManifest : void 0,
|
|
1101
|
+
sharedChunks: metadata.sharedChunks,
|
|
1061
1102
|
cssGraph: metadata.cssGraph,
|
|
1062
1103
|
lazyChunks: metadata.lazyChunks,
|
|
1063
1104
|
dynamicPreloads: metadata.dynamicPreloads,
|
|
@@ -1154,7 +1195,7 @@ async function startAppRouterServer(options) {
|
|
|
1154
1195
|
const assetLookupPath = sourcePathname !== null ? resolveAppRouterAssetPath(sourcePathname, appAssetPathPrefix, appRouterAssetPrefix) : null;
|
|
1155
1196
|
if (assetLookupPath && await serveSource(assetLookupPath)) return;
|
|
1156
1197
|
if (sourcePathname !== null) {
|
|
1157
|
-
const sourceResponse = await rscHandler(new Request(sourceUrl, { signal: request.signal }), createNodeExecutionContext(resolveTrustedNodeRevalidateOrigin(req, host, port)));
|
|
1198
|
+
const sourceResponse = await rscHandler(new Request(sourceUrl, { signal: request.signal }), createNodeExecutionContext(resolveTrustedNodeRevalidateOrigin(req, host, port), { middlewareOrigin: resolveNodeMiddlewareOrigin(req, request.url, host, port) }));
|
|
1158
1199
|
const sourceSignal = isImageSourceBodyStatus(sourceResponse.status) ? readStaticFileSignal(sourceResponse) : null;
|
|
1159
1200
|
cancelResponseBody(sourceResponse, request.signal.reason);
|
|
1160
1201
|
if (request.signal.aborted) return;
|
|
@@ -1211,8 +1252,12 @@ async function startAppRouterServer(options) {
|
|
|
1211
1252
|
if (clientBuildFile && await tryServeStatic(req, res, clientDir, clientBuildFile, compress, staticCache)) return;
|
|
1212
1253
|
}
|
|
1213
1254
|
try {
|
|
1214
|
-
const
|
|
1215
|
-
const
|
|
1255
|
+
const signal = signalFromNodeResponse(res);
|
|
1256
|
+
const request = nodeToWebRequest(req, rawUrl, prerenderSecret, appRouterI18nConfig, appRouterAuthorizeOnDemandRevalidate, signal);
|
|
1257
|
+
const ctx = createNodeExecutionContext(resolveTrustedNodeRevalidateOrigin(req, host, port), {
|
|
1258
|
+
middlewareOrigin: resolveNodeMiddlewareOrigin(req, request.url, host, port),
|
|
1259
|
+
requestSignal: signal
|
|
1260
|
+
});
|
|
1216
1261
|
const recorded = {};
|
|
1217
1262
|
if (purpose === "prerender") ctx.recordPrerenderSpecialError = (marker) => {
|
|
1218
1263
|
recorded.marker = marker;
|
|
@@ -1282,18 +1327,12 @@ async function startAppRouterServer(options) {
|
|
|
1282
1327
|
const server = createServer((req, res) => {
|
|
1283
1328
|
runWithServerEntryRequire(rscEntryRequire, () => handleRequest(req, res));
|
|
1284
1329
|
});
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
const actualPort = typeof addr === "object" && addr ? addr.port : port;
|
|
1289
|
-
if (!silent) logProdServerStarted(host, actualPort, purpose);
|
|
1290
|
-
resolve();
|
|
1291
|
-
});
|
|
1292
|
-
});
|
|
1293
|
-
const addr = server.address();
|
|
1330
|
+
disablePrerenderKeepAliveTimeout(server, purpose);
|
|
1331
|
+
const actualPort = await listen(server, port, host);
|
|
1332
|
+
if (!silent) logProdServerStarted(host, actualPort, purpose);
|
|
1294
1333
|
return {
|
|
1295
1334
|
server,
|
|
1296
|
-
port:
|
|
1335
|
+
port: actualPort
|
|
1297
1336
|
};
|
|
1298
1337
|
}
|
|
1299
1338
|
function isPagesServerEntryPageRoute(value) {
|
|
@@ -1323,18 +1362,12 @@ async function startPagesRouterServer(options) {
|
|
|
1323
1362
|
const { port, host, purpose, silent } = options;
|
|
1324
1363
|
const handler = await createPagesRouterRequestHandler(options);
|
|
1325
1364
|
const server = createServer(handler);
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
const actualPort = typeof addr === "object" && addr ? addr.port : port;
|
|
1330
|
-
if (!silent) logProdServerStarted(host, actualPort, purpose);
|
|
1331
|
-
resolve();
|
|
1332
|
-
});
|
|
1333
|
-
});
|
|
1334
|
-
const addr = server.address();
|
|
1365
|
+
disablePrerenderKeepAliveTimeout(server, purpose);
|
|
1366
|
+
const actualPort = await listen(server, port, host);
|
|
1367
|
+
if (!silent) logProdServerStarted(host, actualPort, purpose);
|
|
1335
1368
|
return {
|
|
1336
1369
|
server,
|
|
1337
|
-
port:
|
|
1370
|
+
port: actualPort
|
|
1338
1371
|
};
|
|
1339
1372
|
}
|
|
1340
1373
|
/**
|
|
@@ -1481,6 +1514,10 @@ async function createPagesRouterRequestHandler(options) {
|
|
|
1481
1514
|
}
|
|
1482
1515
|
try {
|
|
1483
1516
|
const hadBasePath = !basePath || hasBasePath(requestPathname, basePath);
|
|
1517
|
+
const restoreLocaleRootTrailingSlash = shouldRestoreLocaleRootTrailingSlash(requestPathname, {
|
|
1518
|
+
trailingSlash,
|
|
1519
|
+
skipProxyUrlNormalize
|
|
1520
|
+
});
|
|
1484
1521
|
let configMatchPathname = stripBasePath(requestPathname, basePath);
|
|
1485
1522
|
{
|
|
1486
1523
|
const strippedPathname = stripBasePath(pathname, basePath);
|
|
@@ -1543,6 +1580,8 @@ async function createPagesRouterRequestHandler(options) {
|
|
|
1543
1580
|
duplex: hasBody ? "half" : void 0
|
|
1544
1581
|
});
|
|
1545
1582
|
const middlewareRequest = isDataReq && skipProxyUrlNormalize ? new Request(new URL(originalRenderUrl, webRequest.url), webRequest) : void 0;
|
|
1583
|
+
const middlewareCtx = createNodeExecutionContext(void 0, { middlewareOrigin: resolveNodeMiddlewareOrigin(req, webRequest.url, host, port) });
|
|
1584
|
+
const runNodeMiddleware = typeof runMiddleware === "function" ? (request, _ctx, opts) => runMiddleware(request, middlewareCtx, opts) : null;
|
|
1546
1585
|
const resolvePublicImageSource = async (sourceUrl) => {
|
|
1547
1586
|
const rawSourcePathname = sourceUrl.pathname;
|
|
1548
1587
|
if (getRepeatedSlashRedirect(rawSourcePathname) || isOpenRedirectShaped(rawSourcePathname)) return null;
|
|
@@ -1561,11 +1600,15 @@ async function createPagesRouterRequestHandler(options) {
|
|
|
1561
1600
|
recordCacheability: false,
|
|
1562
1601
|
rawSearch: sourceUrl.search,
|
|
1563
1602
|
configMatchPathname: strippedSourcePathname,
|
|
1564
|
-
|
|
1603
|
+
restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(sourceRequestPathname, {
|
|
1604
|
+
trailingSlash,
|
|
1605
|
+
skipProxyUrlNormalize
|
|
1606
|
+
}),
|
|
1607
|
+
runMiddleware: runNodeMiddleware ? wrapMiddlewareWithBasePath(runNodeMiddleware, basePath, sourceHadBasePath) : null,
|
|
1565
1608
|
renderPage: null,
|
|
1566
1609
|
handleApi: null,
|
|
1567
|
-
serveFilesystemRoute: async (candidate, _stagedHeaders, phase) => {
|
|
1568
|
-
if (isImageOptimizationPath(candidate) || isPagesFilesystemExcludedPath(candidate, phase)) return false;
|
|
1610
|
+
serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, _request, candidateHasBasePath) => {
|
|
1611
|
+
if (!candidateHasBasePath && !isAssetPrefixBuildAsset(candidate, pagesAssetPathPrefix) || isImageOptimizationPath(candidate) || isPagesFilesystemExcludedPath(candidate, phase)) return false;
|
|
1569
1612
|
const lookupPath = staticCacheLookupPath(candidate);
|
|
1570
1613
|
if (lookupPath === null || lookupPath === "/" || !staticCache.lookup(lookupPath)) return false;
|
|
1571
1614
|
sourcePath = candidate;
|
|
@@ -1595,9 +1638,10 @@ async function createPagesRouterRequestHandler(options) {
|
|
|
1595
1638
|
rawSearch: rawQs,
|
|
1596
1639
|
authorizeOnDemandRevalidate: typeof authorizeOnDemandRevalidate === "function" ? authorizeOnDemandRevalidate : void 0,
|
|
1597
1640
|
configMatchPathname,
|
|
1641
|
+
restoreLocaleRootTrailingSlash,
|
|
1598
1642
|
matchPageRoute: matchPageRoute ?? null,
|
|
1599
1643
|
matchApiRoute: matchApiRoute ?? null,
|
|
1600
|
-
runMiddleware:
|
|
1644
|
+
runMiddleware: runNodeMiddleware ? wrapMiddlewareWithBasePath(runNodeMiddleware, basePath, hadBasePath) : null,
|
|
1601
1645
|
renderPage: typeof renderPage === "function" ? (request, resolvedUrl, options, stagedHeaders) => renderPage(request, resolvedUrl, ssrManifest, void 0, stagedHeaders, {
|
|
1602
1646
|
...options,
|
|
1603
1647
|
originalUrl: originalRenderUrl
|
|
@@ -1648,7 +1692,7 @@ async function createPagesRouterRequestHandler(options) {
|
|
|
1648
1692
|
res.end(INVALID_IMAGE_SOURCE_MESSAGE);
|
|
1649
1693
|
return true;
|
|
1650
1694
|
}
|
|
1651
|
-
if (isPagesFilesystemExcludedPath(requestPathname, phase)) return false;
|
|
1695
|
+
if (!resolvedPathnameHasBasePath && !isAssetPrefixBuildAsset(requestPathname, pagesAssetPathPrefix) || isPagesFilesystemExcludedPath(requestPathname, phase)) return false;
|
|
1652
1696
|
return tryServeStatic(req, res, clientDir, requestPathname, compress, staticCache, stagedHeaders);
|
|
1653
1697
|
}
|
|
1654
1698
|
};
|
|
@@ -35,4 +35,10 @@ export declare function resolveRequestProtocol(source: IncomingMessage | Headers
|
|
|
35
35
|
* against `request.url`.
|
|
36
36
|
*/
|
|
37
37
|
export declare function resolveRequestHost(source: IncomingMessage | Headers, fallback: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* The `X-Forwarded-Host` value when it matches the `trustedHosts` allow-list,
|
|
40
|
+
* otherwise undefined. Unlike the raw `Host` header, this host is
|
|
41
|
+
* operator-approved.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveTrustedForwardedHost(source: IncomingMessage | Headers): string | undefined;
|
|
38
44
|
//#endregion
|
|
@@ -42,12 +42,18 @@ function resolveRequestProtocol(source) {
|
|
|
42
42
|
* against `request.url`.
|
|
43
43
|
*/
|
|
44
44
|
function resolveRequestHost(source, fallback) {
|
|
45
|
+
return resolveTrustedForwardedHost(source) ?? (readHost(source) || fallback);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The `X-Forwarded-Host` value when it matches the `trustedHosts` allow-list,
|
|
49
|
+
* otherwise undefined. Unlike the raw `Host` header, this host is
|
|
50
|
+
* operator-approved.
|
|
51
|
+
*/
|
|
52
|
+
function resolveTrustedForwardedHost(source) {
|
|
45
53
|
const rawForwarded = readForwardedHost(source);
|
|
46
|
-
if (rawForwarded
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
return readHost(source) || fallback;
|
|
54
|
+
if (!rawForwarded || trustedHosts.size === 0) return void 0;
|
|
55
|
+
const forwardedHost = rawForwarded.split(",")[0]?.trim().toLowerCase();
|
|
56
|
+
return forwardedHost && trustedHosts.has(forwardedHost) ? forwardedHost : void 0;
|
|
51
57
|
}
|
|
52
58
|
function readForwardedProto(source) {
|
|
53
59
|
if (isWebHeaders(source)) return source.get("x-forwarded-proto") ?? void 0;
|
|
@@ -65,4 +71,4 @@ function isWebHeaders(source) {
|
|
|
65
71
|
return typeof source.get === "function";
|
|
66
72
|
}
|
|
67
73
|
//#endregion
|
|
68
|
-
export { resolveRequestHost, resolveRequestProtocol, trustProxy, trustedHosts };
|
|
74
|
+
export { resolveRequestHost, resolveRequestProtocol, resolveTrustedForwardedHost, trustProxy, trustedHosts };
|
|
@@ -143,6 +143,11 @@ export declare function isOriginAllowed(origin: string, allowed: string[]): bool
|
|
|
143
143
|
*
|
|
144
144
|
* @param headers - The Headers object to modify in place
|
|
145
145
|
*/
|
|
146
|
+
/**
|
|
147
|
+
* Next.js drops each empty middleware Set-Cookie value when it converts
|
|
148
|
+
* middleware's response headers, so blank values never reach the response.
|
|
149
|
+
*/
|
|
150
|
+
export declare function dropEmptyMiddlewareSetCookie(headers: Headers): void;
|
|
146
151
|
export declare function processMiddlewareHeaders(headers: Headers): void;
|
|
147
152
|
/**
|
|
148
153
|
* Strip internal headers from an inbound request so they cannot be forged by
|
|
@@ -313,7 +313,18 @@ function isOriginAllowed(origin, allowed) {
|
|
|
313
313
|
*
|
|
314
314
|
* @param headers - The Headers object to modify in place
|
|
315
315
|
*/
|
|
316
|
+
/**
|
|
317
|
+
* Next.js drops each empty middleware Set-Cookie value when it converts
|
|
318
|
+
* middleware's response headers, so blank values never reach the response.
|
|
319
|
+
*/
|
|
320
|
+
function dropEmptyMiddlewareSetCookie(headers) {
|
|
321
|
+
const cookies = headers.getSetCookie();
|
|
322
|
+
if (!cookies.includes("")) return;
|
|
323
|
+
headers.delete("set-cookie");
|
|
324
|
+
for (const cookie of cookies) if (cookie) headers.append("set-cookie", cookie);
|
|
325
|
+
}
|
|
316
326
|
function processMiddlewareHeaders(headers) {
|
|
327
|
+
dropEmptyMiddlewareSetCookie(headers);
|
|
317
328
|
const keysToDelete = [];
|
|
318
329
|
const unconsumedRequestHeaders = getUnconsumedMiddlewareRequestHeaders(headers);
|
|
319
330
|
for (const key of headers.keys()) if (key.startsWith("x-middleware-") && key !== "x-middleware-cache" && !unconsumedRequestHeaders.has(key)) keysToDelete.push(key);
|
|
@@ -433,4 +444,4 @@ function cloneRequestWithUrl(request, url) {
|
|
|
433
444
|
return attachRequestCfMetadata(cloned, request);
|
|
434
445
|
}
|
|
435
446
|
//#endregion
|
|
436
|
-
export { INTERNAL_HEADERS, VINEXT_INTERNAL_HEADERS, attachRequestCfMetadata, canonicalizeRequestPathname, canonicalizeRequestUrlPathname, cloneRequestWithHeaders, cloneRequestWithUrl, createStaticFileSignal, filterInternalHeaders, getRepeatedSlashRedirect, guardProtocolRelativeUrl, hasBasePath, isOpenRedirectShaped, isOriginAllowed, normalizeTrailingSlash, normalizeTrailingSlashPathname, processMiddlewareHeaders, resolvePublicFileRoute, sendRepeatedSlashRedirect, stripBasePath, validateCsrfOrigin, validateServerActionPayload };
|
|
447
|
+
export { INTERNAL_HEADERS, VINEXT_INTERNAL_HEADERS, attachRequestCfMetadata, canonicalizeRequestPathname, canonicalizeRequestUrlPathname, cloneRequestWithHeaders, cloneRequestWithUrl, createStaticFileSignal, dropEmptyMiddlewareSetCookie, filterInternalHeaders, getRepeatedSlashRedirect, guardProtocolRelativeUrl, hasBasePath, isOpenRedirectShaped, isOriginAllowed, normalizeTrailingSlash, normalizeTrailingSlashPathname, processMiddlewareHeaders, resolvePublicFileRoute, sendRepeatedSlashRedirect, stripBasePath, validateCsrfOrigin, validateServerActionPayload };
|
|
@@ -19,4 +19,5 @@ export declare function clearFrameworkRequestError(response: Response): Response
|
|
|
19
19
|
export declare function attachFrameworkRequestError(response: Response, error: unknown): Response;
|
|
20
20
|
export declare function consumeFrameworkRequestRoute(response: Response): Response;
|
|
21
21
|
export declare function traceFrameworkRequest<T>(input: RequestTraceInput<T>): Promise<T>;
|
|
22
|
-
//#endregion
|
|
22
|
+
//#endregion
|
|
23
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getOrCreateAls } from "../shims/internal/als-registry.js";
|
|
2
2
|
import { isFullyBufferedBody, markFullyBufferedBody, preserveFullyBufferedBodyMetadata } from "./fully-buffered-response.js";
|
|
3
|
+
import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
|
|
3
4
|
import { VINEXT_TRACE_BUFFERED_BODY_HEADER, VINEXT_TRACE_ERROR_HEADER, VINEXT_TRACE_ROUTE_HEADER } from "./headers.js";
|
|
4
5
|
import { frameworkTracer } from "./tracer.js";
|
|
5
|
-
import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
|
|
6
6
|
import { getResponseStartCompletion } from "./response-start-tracing.js";
|
|
7
7
|
//#region src/server/request-tracing.ts
|
|
8
8
|
const activeRequestTrace = getOrCreateAls("vinext.requestTracing.als");
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { preserveFullyBufferedBodyMetadata } from "./fully-buffered-response.js";
|
|
2
|
+
import { observeStreamConsumption } from "./defer-until-stream-consumed.js";
|
|
2
3
|
import { frameworkTracer } from "./tracer.js";
|
|
3
4
|
import { copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
|
|
4
5
|
//#region src/server/response-start-tracing.ts
|
|
@@ -13,37 +14,14 @@ function createResponseStartSpanDescriptor() {
|
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
16
|
function traceResponseStartStream(stream, onSettled) {
|
|
16
|
-
const reader = stream.getReader();
|
|
17
17
|
const runInTraceContext = frameworkTracer.captureActiveContext();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const result = await reader.read();
|
|
23
|
-
if (result.done) {
|
|
24
|
-
onSettled();
|
|
25
|
-
controller.close();
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (!started) {
|
|
29
|
-
started = true;
|
|
30
|
-
runInTraceContext(() => frameworkTracer.trace(createResponseStartSpanDescriptor(), () => void 0));
|
|
31
|
-
onSettled();
|
|
32
|
-
}
|
|
33
|
-
controller.enqueue(result.value);
|
|
34
|
-
} catch (error) {
|
|
35
|
-
onSettled();
|
|
36
|
-
controller.error(error);
|
|
37
|
-
}
|
|
18
|
+
return observeStreamConsumption(stream, {
|
|
19
|
+
onStart() {
|
|
20
|
+
runInTraceContext(() => frameworkTracer.trace(createResponseStartSpanDescriptor(), () => void 0));
|
|
21
|
+
onSettled();
|
|
38
22
|
},
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
await reader.cancel(reason);
|
|
42
|
-
} finally {
|
|
43
|
-
onSettled();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}, { highWaterMark: 0 });
|
|
23
|
+
onFlush: onSettled
|
|
24
|
+
});
|
|
47
25
|
}
|
|
48
26
|
function traceResponseStartWithCompletion(response) {
|
|
49
27
|
const existing = tracedResponses.get(response);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
|
|
2
|
+
import { createRenderStreamCancellation } from "./app-render-abort-error.js";
|
|
3
|
+
//#region src/server/rsc-render-stream.ts
|
|
4
|
+
const noop = () => {};
|
|
5
|
+
function createRscRenderer(render) {
|
|
6
|
+
return (model, options) => {
|
|
7
|
+
const cancellation = createRenderStreamCancellation();
|
|
8
|
+
return deferUntilStreamConsumed(render(model, ignoreCancellationErrors(options, cancellation)), noop, void 0, cancellation.record);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** A consumer cancelling the payload is not a render failure. */
|
|
12
|
+
function ignoreCancellationErrors(options, cancellation) {
|
|
13
|
+
if (!options || typeof options !== "object") return options;
|
|
14
|
+
const onError = Reflect.get(options, "onError");
|
|
15
|
+
if (typeof onError !== "function") return options;
|
|
16
|
+
return {
|
|
17
|
+
...options,
|
|
18
|
+
onError(error, ...rest) {
|
|
19
|
+
if (cancellation.isReason(error)) return void 0;
|
|
20
|
+
return Reflect.apply(onError, options, [error, ...rest]);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { createRscRenderer };
|
|
@@ -30,4 +30,5 @@ type PrerenderCacheSeedOptions = {
|
|
|
30
30
|
* @returns The number of routes seeded (0 if no manifest or no renderable routes).
|
|
31
31
|
*/
|
|
32
32
|
export declare function seedMemoryCacheFromPrerender(serverDir: string, options?: PrerenderCacheSeedOptions): Promise<number>;
|
|
33
|
-
//#endregion
|
|
33
|
+
//#endregion
|
|
34
|
+
export {};
|