vinext 1.3.0 → 1.4.0
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 +5 -2
- package/THIRD_PARTY_LICENSES.md +47 -0
- package/dist/_virtual/_rolldown/runtime.js +4 -3
- 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 +13 -3
- package/dist/build/client-build-config.js +46 -9
- 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 +9 -1
- package/dist/build/client-reference-groups.js +40 -2
- 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/module-dependency-cache.d.ts +2 -1
- package/dist/build/next-client-runtime-manifests.d.ts +2 -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-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 +6 -5
- package/dist/build/report.d.ts +2 -15
- package/dist/build/report.js +1 -51
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +2 -1
- package/dist/build/ssr-manifest.js +25 -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 +5 -1
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +5 -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-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +2 -1
- package/dist/client/dev-error-overlay.js +1 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +16 -2
- package/dist/client/navigation-runtime.js +2 -2
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -1
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +12 -1
- package/dist/config/config-matchers.js +111 -16
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/next-config.d.ts +32 -1
- package/dist/config/next-config.js +93 -5
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
- 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/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -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 +20 -5
- package/dist/entries/app-browser-entry.js +79 -6
- package/dist/entries/app-rsc-entry.d.ts +2 -1
- package/dist/entries/app-rsc-entry.js +59 -60
- package/dist/entries/app-rsc-manifest.d.ts +2 -1
- package/dist/entries/app-rsc-manifest.js +56 -4
- package/dist/entries/app-ssr-entry.js +1 -0
- 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 +34 -9
- 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.js +184 -103
- package/dist/init-cloudflare.d.ts +1 -3
- package/dist/init-cloudflare.js +10 -48
- package/dist/init-platform.d.ts +2 -0
- package/dist/init-platform.js +4 -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/extensionless-dynamic-import.js +6 -2
- 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/next-intl-catalog.d.ts +12 -0
- package/dist/plugins/next-intl-catalog.js +85 -0
- package/dist/plugins/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +2 -1
- package/dist/plugins/pages-node-externals.d.ts +3 -1
- package/dist/plugins/pages-node-externals.js +1 -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 +8 -0
- package/dist/plugins/rsc-client-reference-loaders.js +170 -68
- 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 +1 -1
- package/dist/plugins/use-cache-callable.js +136 -94
- package/dist/plugins/worker-image-imports.js +1 -1
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +46 -0
- package/dist/routing/app-route-graph.js +131 -51
- package/dist/routing/browser-route-manifest.d.ts +2 -1
- package/dist/routing/optimistic-route-trie.d.ts +2 -1
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/api-handler.js +19 -4
- package/dist/server/app-action-forwarding.d.ts +2 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-bfcache-identity.js +1 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-entry.js +106 -66
- package/dist/server/app-browser-error.d.ts +2 -1
- package/dist/server/app-browser-history-controller.d.ts +7 -5
- package/dist/server/app-browser-history-controller.js +93 -15
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +2 -1
- package/dist/server/app-browser-navigation-controller.d.ts +2 -2
- package/dist/server/app-browser-navigation-controller.js +16 -12
- 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-rsc-redirect.js +4 -4
- package/dist/server/app-browser-server-action-client.d.ts +4 -1
- package/dist/server/app-browser-server-action-client.js +4 -3
- package/dist/server/app-browser-state.d.ts +2 -4
- package/dist/server/app-browser-state.js +9 -4
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-supplemental-refresh.js +16 -1
- package/dist/server/app-browser-visible-commit.d.ts +3 -2
- package/dist/server/app-browser-visible-commit.js +2 -12
- 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 +25 -5
- package/dist/server/app-client-reference-preloader.js +22 -7
- package/dist/server/app-elements-wire.d.ts +8 -39
- package/dist/server/app-elements-wire.js +4 -41
- package/dist/server/app-elements.d.ts +4 -2
- package/dist/server/app-elements.js +4 -2
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +4 -1
- package/dist/server/app-history-state.d.ts +4 -3
- package/dist/server/app-history-state.js +5 -2
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-mounted-layouts.d.ts +21 -0
- package/dist/server/app-mounted-layouts.js +67 -0
- package/dist/server/app-optimistic-routing.d.ts +37 -2
- package/dist/server/app-optimistic-routing.js +75 -2
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +224 -40
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +41 -8
- package/dist/server/app-page-cache-finalizer.d.ts +14 -2
- package/dist/server/app-page-cache-finalizer.js +71 -30
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +14 -2
- package/dist/server/app-page-cache.d.ts +13 -1
- package/dist/server/app-page-cache.js +33 -11
- package/dist/server/app-page-dispatch.d.ts +39 -11
- package/dist/server/app-page-dispatch.js +236 -177
- package/dist/server/app-page-element-builder.d.ts +19 -3
- package/dist/server/app-page-element-builder.js +193 -71
- package/dist/server/app-page-execution.d.ts +43 -51
- package/dist/server/app-page-execution.js +205 -92
- package/dist/server/app-page-head.d.ts +108 -3
- package/dist/server/app-page-head.js +337 -154
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
- package/dist/server/app-page-layout-gate.d.ts +35 -0
- package/dist/server/app-page-layout-gate.js +50 -0
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-params.d.ts +0 -1
- package/dist/server/app-page-params.js +1 -14
- package/dist/server/app-page-probe.d.ts +5 -22
- package/dist/server/app-page-probe.js +4 -37
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +9 -13
- package/dist/server/app-page-render.js +108 -214
- package/dist/server/app-page-request.d.ts +15 -4
- package/dist/server/app-page-request.js +2 -2
- package/dist/server/app-page-response.js +3 -3
- package/dist/server/app-page-route-wiring.d.ts +65 -8
- package/dist/server/app-page-route-wiring.js +259 -103
- package/dist/server/app-page-rsc-render-status.d.ts +29 -2
- package/dist/server/app-page-rsc-render-status.js +121 -13
- package/dist/server/app-page-search-params-observation.d.ts +7 -2
- package/dist/server/app-page-search-params-observation.js +8 -1
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +33 -1
- package/dist/server/app-page-stream.js +25 -6
- package/dist/server/app-pages-bridge.d.ts +6 -1
- package/dist/server/app-pages-bridge.js +7 -3
- 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-render-dependency.d.ts +21 -4
- package/dist/server/app-render-dependency.js +100 -33
- package/dist/server/app-request-stage-dispatch.js +1 -1
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-cache.js +2 -2
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +15 -10
- package/dist/server/app-route-handler-execution.d.ts +2 -1
- package/dist/server/app-route-handler-execution.js +8 -3
- package/dist/server/app-route-handler-policy.d.ts +1 -1
- package/dist/server/app-route-handler-policy.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +2 -1
- package/dist/server/app-route-handler-response.js +1 -1
- package/dist/server/app-route-handler-runtime.d.ts +2 -1
- package/dist/server/app-route-handler-runtime.js +17 -4
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +8 -0
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-rsc-cache-busting.d.ts +2 -2
- package/dist/server/app-rsc-cache-busting.js +4 -4
- package/dist/server/app-rsc-error-handler.d.ts +4 -2
- package/dist/server/app-rsc-error-handler.js +9 -1
- package/dist/server/app-rsc-errors.d.ts +10 -1
- package/dist/server/app-rsc-errors.js +8 -1
- package/dist/server/app-rsc-handler.d.ts +7 -6
- package/dist/server/app-rsc-handler.js +36 -34
- package/dist/server/app-rsc-request-normalization.d.ts +0 -4
- package/dist/server/app-rsc-request-normalization.js +1 -4
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
- package/dist/server/app-rsc-response-finalizer.js +2 -2
- package/dist/server/app-rsc-response-stage.js +5 -3
- package/dist/server/app-rsc-route-matching.d.ts +38 -1
- package/dist/server/app-rsc-route-matching.js +24 -0
- 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 +5 -2
- package/dist/server/app-server-action-execution.js +10 -7
- package/dist/server/app-ssr-entry.d.ts +8 -0
- package/dist/server/app-ssr-entry.js +98 -50
- 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 +22 -10
- package/dist/server/app-ssr-stream.js +300 -68
- 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 +38 -2
- package/dist/server/app-visited-response-cache.js +46 -5
- package/dist/server/app-worker-stages.d.ts +27 -4
- package/dist/server/app-worker-stages.js +45 -6
- package/dist/server/artifact-compatibility.d.ts +2 -2
- package/dist/server/artifact-compatibility.js +1 -10
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cache-proof.d.ts +1 -115
- package/dist/server/cache-proof.js +1 -544
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/cacheability-request.js +13 -8
- package/dist/server/config-headers.d.ts +2 -1
- 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 +14 -6
- 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/headers.d.ts +6 -3
- package/dist/server/headers.js +9 -5
- 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/isr-cache.d.ts +8 -2
- package/dist/server/isr-cache.js +26 -1
- 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 +32 -15
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/multi-stage.d.ts +52 -11
- package/dist/server/multi-stage.js +13 -1
- package/dist/server/navigation-planner.js +1 -1
- 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 +2 -1
- package/dist/server/nitro-public-files.d.ts +2 -1
- 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-api-route.js +28 -19
- package/dist/server/pages-asset-tags.d.ts +2 -1
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +4 -0
- 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-media-type.d.ts +21 -1
- package/dist/server/pages-media-type.js +69 -5
- package/dist/server/pages-node-compat.js +52 -27
- 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 +27 -27
- 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 +10 -1
- package/dist/server/pages-request-pipeline.js +6 -7
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +14 -12
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +9 -3
- package/dist/server/pages-route-data-kind.d.ts +2 -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.js +14 -4
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +6 -0
- package/dist/server/request-pipeline.js +21 -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/shared-cache-identity.d.ts +23 -0
- package/dist/server/shared-cache-identity.js +36 -0
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +1 -0
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +18 -4
- package/dist/server/worker-stages.js +23 -4
- 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 +31 -11
- package/dist/shims/cache-request-state.d.ts +17 -20
- package/dist/shims/cache-request-state.js +16 -21
- package/dist/shims/cache-runtime.js +27 -11
- package/dist/shims/cache.d.ts +8 -7
- package/dist/shims/cache.js +17 -19
- package/dist/shims/cacheability-classification.d.ts +2 -0
- 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-cache.d.ts +22 -5
- package/dist/shims/cdn-purge-routes.d.ts +2 -1
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- package/dist/shims/client-page-root.js +2 -2
- 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 +9 -6
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +33 -18
- package/dist/shims/fetch-cache-state.d.ts +5 -1
- package/dist/shims/fetch-cache-state.js +1 -3
- package/dist/shims/fetch-cache.d.ts +2 -1
- package/dist/shims/fetch-cache.js +34 -24
- 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 +3 -3
- package/dist/shims/headers.d.ts +8 -23
- package/dist/shims/headers.js +17 -67
- 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.d.ts +1 -22
- 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 +2 -0
- package/dist/shims/internal/headers-state.js +6 -1
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/navigation-untracked.js +1 -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 +197 -52
- package/dist/shims/metadata.d.ts +52 -29
- package/dist/shims/metadata.js +142 -42
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation-server.js +1 -1
- package/dist/shims/navigation.d.ts +95 -8
- package/dist/shims/navigation.js +255 -47
- package/dist/shims/navigation.react-server.js +2 -2
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-state-types.d.ts +2 -2
- package/dist/shims/router.js +14 -3
- package/dist/shims/slot.d.ts +12 -0
- package/dist/shims/slot.js +37 -9
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/unified-request-context.js +5 -6
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/cache-control-metadata.d.ts +5 -0
- package/dist/utils/cache-control-metadata.js +9 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +9 -2
- 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 +9 -1
- package/dist/utils/client-runtime-metadata.js +40 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +14 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/project.d.ts +4 -3
- package/dist/utils/project.js +12 -17
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/regex.d.ts +5 -0
- package/dist/utils/regex.js +11 -1
- package/dist/utils/text-stream.d.ts +10 -5
- package/dist/utils/text-stream.js +6 -6
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +6 -5
- package/dist/build/layout-classification-types.d.ts +0 -60
- package/dist/build/layout-classification-types.js +0 -1
- package/dist/build/layout-classification.d.ts +0 -61
- package/dist/build/layout-classification.js +0 -98
- package/dist/build/route-classification-injector.d.ts +0 -32
- package/dist/build/route-classification-injector.js +0 -59
- package/dist/build/route-classification-manifest.d.ts +0 -53
- package/dist/build/route-classification-manifest.js +0 -143
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
- package/dist/server/app-browser-client-reuse-manifest.js +0 -101
- package/dist/server/app-layout-param-observation.d.ts +0 -41
- package/dist/server/app-layout-param-observation.js +0 -168
- package/dist/server/client-reuse-manifest.d.ts +0 -102
- package/dist/server/client-reuse-manifest.js +0 -209
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/server/skip-cache-proof.d.ts +0 -60
- package/dist/server/skip-cache-proof.js +0 -168
- package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
- package/dist/server/static-layout-client-reuse-proof.js +0 -33
- package/dist/utils/sorted-array.d.ts +0 -7
- package/dist/utils/sorted-array.js +0 -20
|
@@ -9,6 +9,26 @@ export declare class PagesBodyParseError extends Error {
|
|
|
9
9
|
readonly statusCode: number;
|
|
10
10
|
constructor(message: string, statusCode: number);
|
|
11
11
|
}
|
|
12
|
-
export declare function getMediaType(contentType: string | null | undefined): string;
|
|
13
12
|
export declare function isJsonMediaType(mediaType: string): boolean;
|
|
13
|
+
/** A `TextDecoder`-shaped decoder for one request body. */
|
|
14
|
+
export type PagesBodyDecoder = {
|
|
15
|
+
decode(input?: Uint8Array, options?: {
|
|
16
|
+
stream?: boolean;
|
|
17
|
+
}): string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the media type and body decoder for a Pages API request, matching
|
|
21
|
+
* Next.js `parseBody()`: a malformed Content-Type is treated as `text/plain`,
|
|
22
|
+
* the body is decoded with its `charset` (UTF-8 by default), and a charset that
|
|
23
|
+
* can't be decoded is rejected with `400 Invalid body`.
|
|
24
|
+
*
|
|
25
|
+
* Next.js decodes through raw-body with iconv-lite 0.4, which vinext bundles
|
|
26
|
+
* at the same version. It is loaded only for non-UTF-8 charsets: `TextDecoder`
|
|
27
|
+
* decodes UTF-8 identically, BOM stripping included, and keeps iconv-lite's
|
|
28
|
+
* encoding tables out of the startup path.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createPagesBodyDecoder(contentType: string | null | undefined): Promise<{
|
|
31
|
+
mediaType: string;
|
|
32
|
+
decoder: PagesBodyDecoder;
|
|
33
|
+
}>;
|
|
14
34
|
//#endregion
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { __toESM } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { Buffer } from "node:buffer";
|
|
1
3
|
//#region src/server/pages-media-type.ts
|
|
2
4
|
/**
|
|
3
5
|
* Shared media-type helpers and body-parse error for Pages API routes.
|
|
@@ -13,12 +15,74 @@ var PagesBodyParseError = class extends Error {
|
|
|
13
15
|
this.name = "PagesBodyParseError";
|
|
14
16
|
}
|
|
15
17
|
};
|
|
16
|
-
function getMediaType(contentType) {
|
|
17
|
-
const [type] = (contentType ?? "text/plain").split(";");
|
|
18
|
-
return type?.trim().toLowerCase() || "text/plain";
|
|
19
|
-
}
|
|
20
18
|
function isJsonMediaType(mediaType) {
|
|
21
19
|
return mediaType === "application/json" || mediaType === "application/ld+json";
|
|
22
20
|
}
|
|
21
|
+
const TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
|
|
22
|
+
const PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g;
|
|
23
|
+
const QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g;
|
|
24
|
+
function parseContentType(header) {
|
|
25
|
+
let index = header.indexOf(";");
|
|
26
|
+
const type = (index === -1 ? header : header.slice(0, index)).trim();
|
|
27
|
+
if (!TYPE_REGEXP.test(type)) return null;
|
|
28
|
+
let charset;
|
|
29
|
+
if (index !== -1) {
|
|
30
|
+
const paramRegexp = new RegExp(PARAM_REGEXP);
|
|
31
|
+
paramRegexp.lastIndex = index;
|
|
32
|
+
let match;
|
|
33
|
+
while (match = paramRegexp.exec(header)) {
|
|
34
|
+
if (match.index !== index) return null;
|
|
35
|
+
index += match[0].length;
|
|
36
|
+
if (match[1].toLowerCase() !== "charset") continue;
|
|
37
|
+
const value = match[2];
|
|
38
|
+
charset = value.startsWith("\"") ? value.slice(1, -1).replace(QESC_REGEXP, "$1") : value;
|
|
39
|
+
}
|
|
40
|
+
if (index !== header.length) return null;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
mediaType: type.toLowerCase(),
|
|
44
|
+
charset
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function iconvBodyDecoder(decoder) {
|
|
48
|
+
return { decode(input, options) {
|
|
49
|
+
let text = input ? decoder.write(Buffer.from(input.buffer, input.byteOffset, input.byteLength)) : "";
|
|
50
|
+
if (!options?.stream) text += decoder.end() || "";
|
|
51
|
+
return text;
|
|
52
|
+
} };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve the media type and body decoder for a Pages API request, matching
|
|
56
|
+
* Next.js `parseBody()`: a malformed Content-Type is treated as `text/plain`,
|
|
57
|
+
* the body is decoded with its `charset` (UTF-8 by default), and a charset that
|
|
58
|
+
* can't be decoded is rejected with `400 Invalid body`.
|
|
59
|
+
*
|
|
60
|
+
* Next.js decodes through raw-body with iconv-lite 0.4, which vinext bundles
|
|
61
|
+
* at the same version. It is loaded only for non-UTF-8 charsets: `TextDecoder`
|
|
62
|
+
* decodes UTF-8 identically, BOM stripping included, and keeps iconv-lite's
|
|
63
|
+
* encoding tables out of the startup path.
|
|
64
|
+
*/
|
|
65
|
+
async function createPagesBodyDecoder(contentType) {
|
|
66
|
+
const parsed = contentType && parseContentType(contentType) || {
|
|
67
|
+
mediaType: "text/plain",
|
|
68
|
+
charset: void 0
|
|
69
|
+
};
|
|
70
|
+
const charset = parsed.charset || "utf-8";
|
|
71
|
+
if (charset.toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, "") === "utf8") return {
|
|
72
|
+
mediaType: parsed.mediaType,
|
|
73
|
+
decoder: new TextDecoder()
|
|
74
|
+
};
|
|
75
|
+
const iconv = (await import("../deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1))).default;
|
|
76
|
+
let decoder;
|
|
77
|
+
try {
|
|
78
|
+
decoder = iconv.getDecoder(charset);
|
|
79
|
+
} catch {
|
|
80
|
+
throw new PagesBodyParseError("Invalid body", 400);
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
mediaType: parsed.mediaType,
|
|
84
|
+
decoder: iconvBodyDecoder(decoder)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
23
87
|
//#endregion
|
|
24
|
-
export { PagesBodyParseError,
|
|
88
|
+
export { PagesBodyParseError, createPagesBodyDecoder, isJsonMediaType };
|
|
@@ -2,11 +2,11 @@ import { parseCookieHeader } from "../utils/parse-cookie.js";
|
|
|
2
2
|
import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
3
3
|
import { readStreamAsTextWithLimit } from "../utils/text-stream.js";
|
|
4
4
|
import { DEFAULT_PAGES_API_BODY_SIZE_LIMIT } from "./pages-body-parser-config.js";
|
|
5
|
-
import { PagesBodyParseError,
|
|
5
|
+
import { PagesBodyParseError, createPagesBodyDecoder, isJsonMediaType } from "./pages-media-type.js";
|
|
6
6
|
import { performOnDemandRevalidate } from "./pages-revalidate.js";
|
|
7
7
|
import { clearPagesPreviewData, getPagesPreviewState, setPagesDraftMode, setPagesPreviewData } from "./pages-preview.js";
|
|
8
8
|
import { decode } from "node:querystring";
|
|
9
|
-
import { Readable, Writable } from "node:stream";
|
|
9
|
+
import { Readable, Stream, Writable } from "node:stream";
|
|
10
10
|
//#region src/server/pages-node-compat.ts
|
|
11
11
|
const MAX_PAGES_API_BODY_SIZE = DEFAULT_PAGES_API_BODY_SIZE_LIMIT;
|
|
12
12
|
const NO_BODY_RESPONSE_STATUSES = /* @__PURE__ */ new Set([
|
|
@@ -26,11 +26,17 @@ function validateAppendedHeader(name, value) {
|
|
|
26
26
|
if (INVALID_HEADER_VALUE_CHAR_PATTERN.test(String(item))) throw createNodeTypeError("ERR_INVALID_CHAR", `Invalid character in header content ["${name}"]`);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
/** The decoded body, or undefined when the request carried no body bytes. */
|
|
30
|
+
async function readPagesRequestBodyWithLimit(request, maxBytes, decoder) {
|
|
31
|
+
if (!request.body) return;
|
|
32
|
+
let byteLength = 0;
|
|
33
|
+
const text = await readStreamAsTextWithLimit(request.body, maxBytes, () => {
|
|
32
34
|
throw new PagesBodyParseError("Request body too large", 413);
|
|
33
|
-
})
|
|
35
|
+
}, { decode(input, options) {
|
|
36
|
+
byteLength += input?.byteLength ?? 0;
|
|
37
|
+
return decoder.decode(input, options);
|
|
38
|
+
} });
|
|
39
|
+
return byteLength > 0 ? text : void 0;
|
|
34
40
|
}
|
|
35
41
|
/**
|
|
36
42
|
* Read and parse a Pages Router API request body for the Workers/prod path.
|
|
@@ -43,16 +49,16 @@ async function readPagesRequestBodyWithLimit(request, maxBytes) {
|
|
|
43
49
|
* @see https://nextjs.org/docs/pages/building-your-application/routing/api-routes#custom-config
|
|
44
50
|
*/
|
|
45
51
|
async function parsePagesApiBody(request, maxBytes = MAX_PAGES_API_BODY_SIZE) {
|
|
52
|
+
const { mediaType, decoder } = await createPagesBodyDecoder(request.headers.get("content-type"));
|
|
46
53
|
if (Number.parseInt(request.headers.get("content-length") || "0", 10) > maxBytes) throw new PagesBodyParseError("Request body too large", 413);
|
|
47
|
-
let rawBody
|
|
54
|
+
let rawBody;
|
|
48
55
|
try {
|
|
49
|
-
rawBody = await readPagesRequestBodyWithLimit(request, maxBytes);
|
|
56
|
+
rawBody = await readPagesRequestBodyWithLimit(request, maxBytes, decoder);
|
|
50
57
|
} catch (err) {
|
|
51
58
|
if (err instanceof PagesBodyParseError) throw err;
|
|
52
59
|
throw new PagesBodyParseError("Request body too large", 413);
|
|
53
60
|
}
|
|
54
|
-
|
|
55
|
-
if (!rawBody) return isJsonMediaType(mediaType) ? {} : mediaType === "application/x-www-form-urlencoded" ? decode(rawBody) : void 0;
|
|
61
|
+
if (!rawBody) return isJsonMediaType(mediaType) ? {} : mediaType === "application/x-www-form-urlencoded" ? decode("") : rawBody;
|
|
56
62
|
if (isJsonMediaType(mediaType)) try {
|
|
57
63
|
return JSON.parse(rawBody);
|
|
58
64
|
} catch {
|
|
@@ -61,24 +67,34 @@ async function parsePagesApiBody(request, maxBytes = MAX_PAGES_API_BODY_SIZE) {
|
|
|
61
67
|
if (mediaType === "application/x-www-form-urlencoded") return decode(rawBody);
|
|
62
68
|
return rawBody;
|
|
63
69
|
}
|
|
64
|
-
async function* requestBodyChunks(request) {
|
|
65
|
-
if (!request.body || request.bodyUsed) return;
|
|
66
|
-
const reader = request.body.getReader();
|
|
67
|
-
try {
|
|
68
|
-
for (;;) {
|
|
69
|
-
const { value, done } = await reader.read();
|
|
70
|
-
if (done) return;
|
|
71
|
-
yield Buffer.from(value.buffer, value.byteOffset, value.byteLength);
|
|
72
|
-
}
|
|
73
|
-
} finally {
|
|
74
|
-
try {
|
|
75
|
-
await reader.cancel();
|
|
76
|
-
} catch {}
|
|
77
|
-
reader.releaseLock();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
70
|
function createRequestReadable(request) {
|
|
81
|
-
|
|
71
|
+
const body = request.bodyUsed ? null : request.body;
|
|
72
|
+
let reader;
|
|
73
|
+
return new Readable({
|
|
74
|
+
read() {
|
|
75
|
+
if (!body) {
|
|
76
|
+
this.push(null);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
reader ??= body.getReader();
|
|
80
|
+
reader.read().then(({ value, done }) => {
|
|
81
|
+
if (this.destroyed) return;
|
|
82
|
+
if (done) {
|
|
83
|
+
this.push(null);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.push(Buffer.from(value.buffer, value.byteOffset, value.byteLength));
|
|
87
|
+
}, (error) => this.destroy(error));
|
|
88
|
+
},
|
|
89
|
+
destroy(error, callback) {
|
|
90
|
+
const cancelled = reader ? reader.cancel(error ?? void 0) : body?.cancel(error ?? void 0);
|
|
91
|
+
if (!cancelled) {
|
|
92
|
+
callback(error);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
cancelled.then(() => callback(error), () => callback(error));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
82
98
|
}
|
|
83
99
|
function parsePagesRequestCookies(cookieHeader) {
|
|
84
100
|
return parseCookieHeader(Array.isArray(cookieHeader) ? cookieHeader.join("; ") : cookieHeader);
|
|
@@ -189,6 +205,15 @@ var PagesResponseStream = class extends Writable {
|
|
|
189
205
|
this.end(JSON.stringify(data));
|
|
190
206
|
}
|
|
191
207
|
send(data) {
|
|
208
|
+
if (NO_BODY_RESPONSE_STATUSES.has(this.resStatusCode)) {
|
|
209
|
+
this.end();
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (data instanceof Stream) {
|
|
213
|
+
if (!this.resHeaders["content-type"]) this.resHeaders["content-type"] = "application/octet-stream";
|
|
214
|
+
data.pipe(this);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
192
217
|
if (Buffer.isBuffer(data)) {
|
|
193
218
|
if (!this.resHeaders["content-type"]) this.resHeaders["content-type"] = "application/octet-stream";
|
|
194
219
|
this.resHeaders["content-length"] = String(data.length);
|
|
@@ -298,6 +298,11 @@ type ResolvePagesPageDataNotFoundResult = {
|
|
|
298
298
|
cacheState?: "MISS" | "HIT" | "STALE";
|
|
299
299
|
};
|
|
300
300
|
type ResolvePagesPageDataResult = ResolvePagesPageDataRenderResult | ResolvePagesPageDataResponseResult | ResolvePagesPageDataNotFoundResult;
|
|
301
|
+
/**
|
|
302
|
+
* Write a Pages res header the way Node sends it: an array sends one header
|
|
303
|
+
* line per item, so `[]` sends none.
|
|
304
|
+
*/
|
|
305
|
+
export declare function setPagesResponseHeader(headers: Headers, name: string, value: string | number | boolean | string[]): void;
|
|
301
306
|
export declare function mergePagesNotFoundSourceHeaders(response: Response, sourceHeaders: Record<string, string | number | boolean | string[]> | undefined): Response;
|
|
302
307
|
/** Validate and normalize the redirect metadata returned by gSP/gSSP. */
|
|
303
308
|
export declare function resolvePagesRedirect(redirect: PagesRedirectResult, options: {
|
|
@@ -330,4 +335,5 @@ export type PagesRouteParam = {
|
|
|
330
335
|
export declare function getPagesRouteParams(routePattern: string): PagesRouteParam[];
|
|
331
336
|
export declare function matchesPagesStaticPath(pathEntry: PagesStaticPathsEntry, params: Record<string, unknown>, routeParams: PagesRouteParam[], routeUrl: string, i18n?: Pick<PagesI18nRenderContext, "locale" | "locales" | "defaultLocale">): boolean;
|
|
332
337
|
export declare function resolvePagesPageData(options: ResolvePagesPageDataOptions): Promise<ResolvePagesPageDataResult>;
|
|
333
|
-
//#endregion
|
|
338
|
+
//#endregion
|
|
339
|
+
export {};
|
|
@@ -6,7 +6,7 @@ import { isDangerousScheme } from "../shims/url-safety.js";
|
|
|
6
6
|
import { extractLocaleFromUrl } from "./pages-i18n.js";
|
|
7
7
|
import { buildNextDataPropsJsonResponse } from "./pages-data-route.js";
|
|
8
8
|
import { recordRouteCacheability } from "../shims/cacheability-classification.js";
|
|
9
|
-
import { applyCdnResponseHeaders } from "./cache-control.js";
|
|
9
|
+
import { NEVER_CACHE_CONTROL, applyCdnResponseHeaders } from "./cache-control.js";
|
|
10
10
|
import { buildMissIsrCacheControl, decideIsr } from "./isr-decision.js";
|
|
11
11
|
import { isrCacheControl } from "./isr-cache.js";
|
|
12
12
|
import { normalizeStaticPathname } from "../routing/route-pattern.js";
|
|
@@ -98,14 +98,22 @@ function buildPagesNotFoundResult(options, revalidateSeconds, cacheState, expire
|
|
|
98
98
|
responseHeaders
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Write a Pages res header the way Node sends it: an array sends one header
|
|
103
|
+
* line per item, so `[]` sends none.
|
|
104
|
+
*/
|
|
105
|
+
function setPagesResponseHeader(headers, name, value) {
|
|
106
|
+
headers.delete(name);
|
|
107
|
+
if (!Array.isArray(value)) {
|
|
108
|
+
headers.set(name, String(value));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
for (const item of value) headers.append(name, String(item));
|
|
112
|
+
}
|
|
101
113
|
function mergePagesNotFoundSourceHeaders(response, sourceHeaders) {
|
|
102
114
|
if (!sourceHeaders) return response;
|
|
103
115
|
const headers = new Headers(response.headers);
|
|
104
|
-
for (const [name, value] of Object.entries(sourceHeaders))
|
|
105
|
-
headers.delete("set-cookie");
|
|
106
|
-
const cookies = Array.isArray(value) ? value : [value];
|
|
107
|
-
for (const cookie of cookies) headers.append("set-cookie", String(cookie));
|
|
108
|
-
} else headers.set(name, Array.isArray(value) ? value.join(", ") : String(value));
|
|
116
|
+
for (const [name, value] of Object.entries(sourceHeaders)) setPagesResponseHeader(headers, name, value);
|
|
109
117
|
return new Response(response.body, {
|
|
110
118
|
headers,
|
|
111
119
|
status: response.status,
|
|
@@ -292,6 +300,15 @@ function buildPagesRedirectResponse(redirect, options, props = { pageProps: {} }
|
|
|
292
300
|
headers
|
|
293
301
|
});
|
|
294
302
|
}
|
|
303
|
+
/**
|
|
304
|
+
* Next.js pages-handler.ts gives a getServerSideProps result `revalidate: 0`,
|
|
305
|
+
* so its redirect and notFound exits are answered private/no-store unless the
|
|
306
|
+
* handler set its own Cache-Control. Like Next's `!res.getHeader(...)`, this
|
|
307
|
+
* reads the raw value, so `""` and `0` count as unset.
|
|
308
|
+
*/
|
|
309
|
+
function applyPagesGsspCacheControlDefault(headers, res) {
|
|
310
|
+
if (!res.getHeaders()["cache-control"]) headers.set("Cache-Control", NEVER_CACHE_CONTROL);
|
|
311
|
+
}
|
|
295
312
|
function getPagesGsspResponseHeaders(res) {
|
|
296
313
|
const headers = new Headers();
|
|
297
314
|
for (const [name, value] of Object.entries(res.getHeaders())) if (Array.isArray(value)) for (const item of value) headers.append(name, item);
|
|
@@ -566,13 +583,19 @@ async function resolvePagesPageData(options) {
|
|
|
566
583
|
pageProps
|
|
567
584
|
};
|
|
568
585
|
}
|
|
569
|
-
if (result?.redirect)
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
586
|
+
if (result?.redirect) {
|
|
587
|
+
const responseHeaders = getPagesGsspResponseHeaders(res);
|
|
588
|
+
applyPagesGsspCacheControlDefault(responseHeaders, res);
|
|
589
|
+
return {
|
|
590
|
+
kind: "response",
|
|
591
|
+
response: buildPagesRedirectResponse(result.redirect, options, renderProps, "getServerSideProps", responseHeaders)
|
|
592
|
+
};
|
|
593
|
+
}
|
|
573
594
|
if (result?.notFound) {
|
|
574
595
|
const responseHeaders = res.getHeaders();
|
|
575
|
-
|
|
596
|
+
const notFoundResult = buildPagesNotFoundResult(options, void 0, void 0, void 0, Object.keys(responseHeaders).length > 0 ? responseHeaders : void 0);
|
|
597
|
+
if (notFoundResult.kind === "response") applyPagesGsspCacheControlDefault(notFoundResult.response.headers, res);
|
|
598
|
+
return notFoundResult;
|
|
576
599
|
}
|
|
577
600
|
if (result?.props !== void 0 && options.validatePropsSerialization !== false) isSerializableProps(options.routePattern, "getServerSideProps", pageProps);
|
|
578
601
|
gsspRes = res;
|
|
@@ -796,4 +819,4 @@ async function resolvePagesPageData(options) {
|
|
|
796
819
|
};
|
|
797
820
|
}
|
|
798
821
|
//#endregion
|
|
799
|
-
export { assertPages404DoesNotReturnNotFound, buildPagesRedirectProps, getPagesRouteParams, matchesPagesStaticPath, mergePagesDataProps, mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesRedirect, resolvePagesRedirectLocation, resolvePagesRevalidateSeconds, resolvePagesStatusPageRenderPath };
|
|
822
|
+
export { assertPages404DoesNotReturnNotFound, buildPagesRedirectProps, getPagesRouteParams, matchesPagesStaticPath, mergePagesDataProps, mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesRedirect, resolvePagesRedirectLocation, resolvePagesRevalidateSeconds, resolvePagesStatusPageRenderPath, setPagesResponseHeader };
|
|
@@ -97,7 +97,7 @@ export type CreatePagesPageHandlerOptions = {
|
|
|
97
97
|
href: string;
|
|
98
98
|
type: string;
|
|
99
99
|
}>;
|
|
100
|
-
/** `renderToReadableStream` from `react-dom/server
|
|
100
|
+
/** `renderToReadableStream` from `react-dom/server`. */
|
|
101
101
|
renderToReadableStream: (element: ReactNode) => Promise<ReadableStream<Uint8Array>>;
|
|
102
102
|
/** `safeJsonStringify` from `vinext/html`. */
|
|
103
103
|
safeJsonStringify: (value: unknown) => string;
|
|
@@ -139,4 +139,5 @@ type RenderPageOptions = {
|
|
|
139
139
|
* accepts the same options shape the generated entry always passed inline.
|
|
140
140
|
*/
|
|
141
141
|
export declare function createPagesPageHandler(opts: CreatePagesPageHandlerOptions): (request: Request, url: string, manifest: Record<string, string[]> | null | undefined, middlewareHeaders: Headers | null | undefined, options: RenderPageOptions | null | undefined, initialResponseHeaders?: Headers) => Promise<Response>;
|
|
142
|
-
//#endregion
|
|
142
|
+
//#endregion
|
|
143
|
+
export {};
|
|
@@ -10,11 +10,11 @@ import { buildNextDataNotFoundResponse, buildNextDataPropsJsonResponse, normaliz
|
|
|
10
10
|
import { reportRequestError } from "./instrumentation.js";
|
|
11
11
|
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
12
12
|
import { beginRouteCacheability, isRouteCacheabilityIdentityProbe, isRouteCacheabilityProbe, markRouteCacheabilityExplicitResponsePolicy, markRouteCacheabilityFinalResponseUncacheable, recordRouteCacheability } from "../shims/cacheability-classification.js";
|
|
13
|
-
import { BROWSER_REVALIDATE_CACHE_CONTROL, NEVER_CACHE_CONTROL, STATIC_CACHE_CONTROL, applyCdnResponseHeaders, hasCdnResponsePolicy, hasExplicitNonCacheableResponsePolicy, shouldUseNextDeployCacheControl } from "./cache-control.js";
|
|
13
|
+
import { BROWSER_REVALIDATE_CACHE_CONTROL, NEVER_CACHE_CONTROL, STATIC_CACHE_CONTROL, applyCdnResponseHeaders, hasCdnResponsePolicy, hasExplicitNonCacheableResponsePolicy, isCdnResponsePolicyHeader, shouldUseNextDeployCacheControl } from "./cache-control.js";
|
|
14
14
|
import { buildMissIsrCacheControl } from "./isr-decision.js";
|
|
15
15
|
import { isOnDemandRevalidateRequest } from "./revalidation-request.js";
|
|
16
|
-
import {
|
|
17
|
-
import { ensureFetchPatch } from "../shims/fetch-cache.js";
|
|
16
|
+
import { coalesceOnDemandResponse, isrGet, isrSet, pagesIsrCacheKey, triggerBackgroundRegeneration } from "./isr-cache.js";
|
|
17
|
+
import { ensureFetchPatch, setCurrentFetchDraftMode } from "../shims/fetch-cache.js";
|
|
18
18
|
import { mergeRouteParamsIntoQuery, parseQueryString } from "../utils/query.js";
|
|
19
19
|
import { getScriptNonceFromHeaderSources } from "./csp.js";
|
|
20
20
|
import { buildDefaultPagesNotFoundResponse } from "./pages-default-404.js";
|
|
@@ -25,7 +25,7 @@ import { pagesPathCacheTag } from "./pages-cache-tag.js";
|
|
|
25
25
|
import { renderPagesPageResponse } from "./pages-page-response.js";
|
|
26
26
|
import { hasPagesGetInitialProps } from "./pages-get-initial-props.js";
|
|
27
27
|
import { traceFindPageComponents, tracePagesDocumentStream } from "./pages-execution-tracing.js";
|
|
28
|
-
import { mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesStatusPageRenderPath } from "./pages-page-data.js";
|
|
28
|
+
import { mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesStatusPageRenderPath, setPagesResponseHeader } from "./pages-page-data.js";
|
|
29
29
|
import { collectAssetTags, resolveClientModuleUrl } from "./pages-asset-tags.js";
|
|
30
30
|
import { PAGES_PREVIEW_CACHE_CONTROL, appendPagesPreviewClearCookies, getPagesPreviewState } from "./pages-preview.js";
|
|
31
31
|
import { createPagesReqRes } from "./pages-node-compat.js";
|
|
@@ -87,14 +87,23 @@ function stripPagesNotFoundFramingHeaders(response) {
|
|
|
87
87
|
statusText: response.statusText
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
|
-
|
|
90
|
+
/**
|
|
91
|
+
* `notFoundResHeaders` is the getServerSideProps res as it stands after the
|
|
92
|
+
* 404 render: the middleware and next.config headers, the handler's writes,
|
|
93
|
+
* then any write from the 404 render's own user code.
|
|
94
|
+
*/
|
|
95
|
+
function applyPagesErrorCachePolicy(response, revalidateSeconds, expireSeconds, cacheTagPathname, notFoundResHeaders) {
|
|
91
96
|
const headers = new Headers(response.headers);
|
|
92
97
|
recordRouteCacheability(revalidateSeconds === void 0 ? { cacheable: false } : {
|
|
93
98
|
cacheable: revalidateSeconds !== 0,
|
|
94
99
|
cacheControl: buildMissIsrCacheControl(revalidateSeconds, expireSeconds)
|
|
95
100
|
});
|
|
96
101
|
if (hasExplicitNonCacheableResponsePolicy(headers)) return response;
|
|
97
|
-
if (revalidateSeconds === void 0)
|
|
102
|
+
if (revalidateSeconds === void 0 && notFoundResHeaders?.["cache-control"]) {
|
|
103
|
+
const policyHeaderNames = Array.from(headers.keys()).filter(isCdnResponsePolicyHeader);
|
|
104
|
+
for (const name of policyHeaderNames) headers.delete(name);
|
|
105
|
+
for (const [name, value] of Object.entries(notFoundResHeaders)) if (isCdnResponsePolicyHeader(name)) setPagesResponseHeader(headers, name, value);
|
|
106
|
+
} else if (revalidateSeconds === void 0) applyCdnResponseHeaders(headers, { cacheControl: NEVER_CACHE_CONTROL });
|
|
98
107
|
else applyCdnResponseHeaders(headers, {
|
|
99
108
|
cacheControl: buildMissIsrCacheControl(revalidateSeconds, expireSeconds),
|
|
100
109
|
tags: [pagesPathCacheTag(cacheTagPathname)]
|
|
@@ -249,23 +258,10 @@ function createPagesPageHandler(opts) {
|
|
|
249
258
|
const isStaticPropsRender = isStaticPropsRoute && typeof pageModule.getServerSideProps !== "function";
|
|
250
259
|
if (!options?.__skipOnDemandCoalesce && !options?.__forcedRoute && !cacheIdentityDiverges && isStaticPropsRoute && isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate"))) {
|
|
251
260
|
const cacheKey = pageIsrCacheKey("pages", routeUrl.split("?")[0]);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
}, initialResponseHeaders);
|
|
257
|
-
return {
|
|
258
|
-
body: request.method === "HEAD" || response.status === 204 || response.status === 304 ? null : new Uint8Array(await response.arrayBuffer()),
|
|
259
|
-
headers: [...response.headers.entries()],
|
|
260
|
-
status: response.status,
|
|
261
|
-
statusText: response.statusText
|
|
262
|
-
};
|
|
263
|
-
});
|
|
264
|
-
return new Response(snapshot.body?.slice() ?? null, {
|
|
265
|
-
headers: snapshot.headers,
|
|
266
|
-
status: snapshot.status,
|
|
267
|
-
statusText: snapshot.statusText
|
|
268
|
-
});
|
|
261
|
+
return coalesceOnDemandResponse(cacheKey, request.method, () => renderPage(request, url, manifest, middlewareHeaders, {
|
|
262
|
+
...options,
|
|
263
|
+
__skipOnDemandCoalesce: true
|
|
264
|
+
}, initialResponseHeaders));
|
|
269
265
|
}
|
|
270
266
|
const routePattern = patternToNextFormat(route.pattern);
|
|
271
267
|
const renderStatusCode = renderStatusCodeOverride ?? (routePattern === "/404" ? 404 : void 0);
|
|
@@ -274,7 +270,10 @@ function createPagesPageHandler(opts) {
|
|
|
274
270
|
const renderRouteUrl = isStaticPropsRender && isStatusPageIdentity ? resolvePagesStatusPageRenderPath(statusPagePathname, vinextConfig.trailingSlash, originalRequestUrl.pathname) : isStaticPropsRender ? routeUrl.split("?")[0] : routeUrl;
|
|
275
271
|
const routerAsPathSource = isStaticPropsRender ? renderRouteUrl : renderAsPath ?? renderRouteUrl;
|
|
276
272
|
const routerAsPath = i18nConfig ? extractLocaleFromUrl(routerAsPathSource, i18nConfig, locale).url : routerAsPathSource;
|
|
277
|
-
const uCtx = createRequestContext({
|
|
273
|
+
const uCtx = createRequestContext({
|
|
274
|
+
executionContext: getRequestExecutionContext(),
|
|
275
|
+
isOnDemandRevalidate: isOnDemandRevalidateRequest(request.headers.get(PRERENDER_REVALIDATE_HEADER))
|
|
276
|
+
});
|
|
278
277
|
let pageReqRes = null;
|
|
279
278
|
const pageResponseSent = () => pageReqRes?.res.headersSent === true;
|
|
280
279
|
const sendsEarly = isStaticPropsRoute && !isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate"));
|
|
@@ -313,6 +312,7 @@ function createPagesPageHandler(opts) {
|
|
|
313
312
|
shouldClear: false
|
|
314
313
|
};
|
|
315
314
|
const previewData = preview.data;
|
|
315
|
+
setCurrentFetchDraftMode(previewData !== false);
|
|
316
316
|
const pagesNextData = {
|
|
317
317
|
...pagesReadiness,
|
|
318
318
|
...previewData === false ? {} : { isPreview: true }
|
|
@@ -364,7 +364,7 @@ function createPagesPageHandler(opts) {
|
|
|
364
364
|
}
|
|
365
365
|
};
|
|
366
366
|
const scriptNonce = getScriptNonceFromHeaderSources(request.headers, middlewareHeaders);
|
|
367
|
-
const browserCacheControl = isStaticPropsRoute && !scriptNonce ? (initialResponseHeaders ?? middlewareHeaders)?.get("Cache-Control") : null;
|
|
367
|
+
const browserCacheControl = isStaticPropsRoute && !scriptNonce && !options?.__notFoundSourceHeaders ? (initialResponseHeaders ?? middlewareHeaders)?.get("Cache-Control") : null;
|
|
368
368
|
const withBrowserPolicy = (response) => {
|
|
369
369
|
if (browserCacheControl) response.headers.set("Cache-Control", browserCacheControl);
|
|
370
370
|
return response;
|
|
@@ -590,7 +590,7 @@ function createPagesPageHandler(opts) {
|
|
|
590
590
|
if (pageDataResult.kind === "response") {
|
|
591
591
|
if (sendsEarly && pageResponseSent()) return pageDataResult.response;
|
|
592
592
|
let response = isOnDemandRevalidate && pageDataResult.onDemandRevalidateSuccess !== false ? withPagesCacheState(pageDataResult.response, "REVALIDATED", isrCachePathname) : pageDataResult.response;
|
|
593
|
-
if (shouldApplyErrorResponsePolicy) response = applyPagesErrorCachePolicy(response, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname);
|
|
593
|
+
if (shouldApplyErrorResponsePolicy) response = applyPagesErrorCachePolicy(response, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname, options?.__notFoundSourceHeaders);
|
|
594
594
|
return finalizePagesPreviewResponse(withBrowserPolicy(response), preview);
|
|
595
595
|
}
|
|
596
596
|
const { pageProps, renderProps } = withErrorStatusCode(pageDataResult.pageProps, previewData !== false ? {
|
|
@@ -656,7 +656,7 @@ function createPagesPageHandler(opts) {
|
|
|
656
656
|
requestCacheControl: request.headers.get("cache-control") ?? void 0
|
|
657
657
|
});
|
|
658
658
|
if (sendsEarly && pageResponseSent()) return pageResponse;
|
|
659
|
-
if (shouldApplyErrorResponsePolicy) pageResponse = applyPagesErrorCachePolicy(pageResponse, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname);
|
|
659
|
+
if (shouldApplyErrorResponsePolicy) pageResponse = applyPagesErrorCachePolicy(pageResponse, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname, options?.__notFoundSourceHeaders ? documentReqRes?.res.getHeaders() ?? options.__notFoundSourceHeaders : void 0);
|
|
660
660
|
return finalizePagesPreviewResponse(withBrowserPolicy(pageResponse), preview);
|
|
661
661
|
} catch (e) {
|
|
662
662
|
await reportSsrError(e);
|
|
@@ -43,4 +43,5 @@ type PagesPageMethodOptions = {
|
|
|
43
43
|
* static (no `getServerSideProps`) Pages Router page, otherwise `null`.
|
|
44
44
|
*/
|
|
45
45
|
export declare function resolvePagesPageMethodResponse(options: PagesPageMethodOptions): Response | null;
|
|
46
|
-
//#endregion
|
|
46
|
+
//#endregion
|
|
47
|
+
export {};
|
|
@@ -151,4 +151,5 @@ export declare function buildPagesNextDataScript(options: Pick<RenderPagesPageRe
|
|
|
151
151
|
vinext?: VinextNextData["__vinext"];
|
|
152
152
|
}): string;
|
|
153
153
|
export declare function renderPagesPageResponse(options: RenderPagesPageResponseOptions): Promise<Response>;
|
|
154
|
-
//#endregion
|
|
154
|
+
//#endregion
|
|
155
|
+
export {};
|
|
@@ -84,6 +84,14 @@ export type PagesPipelineDeps = {
|
|
|
84
84
|
dataNotFoundResponse?: Response | null;
|
|
85
85
|
renderPage?: ((request: Request, resolvedUrl: string, options?: PagesRenderOptions, stagedHeaders?: Headers) => Promise<Response>) | null;
|
|
86
86
|
handleApi?: ((request: Request, apiUrl: string, ctx: unknown, stagedHeaders: Headers) => Promise<Response>) | null;
|
|
87
|
+
/**
|
|
88
|
+
* `handleApi` installs the staged headers on the handler's `res` before user
|
|
89
|
+
* code runs, as Next.js does, so its response already reflects any header the
|
|
90
|
+
* handler replaced and only middleware's status is applied here.
|
|
91
|
+
* Workers leaves this unset: its response stage strips the inherited cookies
|
|
92
|
+
* so they are not stored, and this merge adds them back.
|
|
93
|
+
*/
|
|
94
|
+
handleApiAppliesStagedHeaders?: boolean;
|
|
87
95
|
/**
|
|
88
96
|
* Optional override for proxying external rewrite destinations.
|
|
89
97
|
* When supplied, the pipeline calls this instead of proxyExternalRequest(currentRequest, url).
|
|
@@ -157,4 +165,5 @@ export type PagesPipelineResult = {
|
|
|
157
165
|
* runPagesRequest receives a "clean" request with basePath-stripped URL.
|
|
158
166
|
*/
|
|
159
167
|
export declare function runPagesRequest(request: Request, deps: PagesPipelineDeps): Promise<PagesPipelineResult>;
|
|
160
|
-
//#endregion
|
|
168
|
+
//#endregion
|
|
169
|
+
export {};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { PRERENDER_REVALIDATE_HEADER } from "../utils/protocol-headers.js";
|
|
2
2
|
import { requestContextFromRequest } from "../config/request-context.js";
|
|
3
3
|
import { isExternalUrl } from "../utils/external-url.js";
|
|
4
|
-
import { addBasePathToPathname
|
|
4
|
+
import { addBasePathToPathname } from "../utils/base-path.js";
|
|
5
5
|
import { VINEXT_PRERENDER_REWRITTEN_HEADER } from "./headers.js";
|
|
6
6
|
import { methodNotAllowedResponse, notFoundStaticAssetResponse, sanitizeMethodNotAllowedHeaders } from "./http-error-responses.js";
|
|
7
7
|
import { cloneRequestWithUrl, normalizeTrailingSlash } from "./request-pipeline.js";
|
|
8
|
-
import { applyMiddlewareRequestHeaders, matchRedirect, matchRewrite, preserveRedirectDestinationQuery, proxyExternalRequest
|
|
8
|
+
import { applyMiddlewareRequestHeaders, encodeRedirectLocation, matchRedirect, matchRewrite, preserveRedirectDestinationQuery, proxyExternalRequest } from "../config/config-matchers.js";
|
|
9
9
|
import { assetPrefixPathname, isAssetPrefixBuildAsset, isNextStaticPath } from "../utils/asset-prefix.js";
|
|
10
10
|
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
11
11
|
import { patternToNextFormat } from "../routing/route-validation.js";
|
|
@@ -14,8 +14,8 @@ import { buildMiddlewarePrefetchSkipResponse } from "./pages-data-route.js";
|
|
|
14
14
|
import { markRouteCacheabilityDynamic } from "../shims/cacheability-classification.js";
|
|
15
15
|
import { isOnDemandRevalidateRequest } from "./revalidation-request.js";
|
|
16
16
|
import { mergeRewriteQuery } from "../utils/query.js";
|
|
17
|
-
import { withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
|
|
18
17
|
import { setFrameworkRequestRoute } from "./request-tracing.js";
|
|
18
|
+
import { withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
|
|
19
19
|
import { applyConfigHeadersToHeaderRecord } from "./config-headers.js";
|
|
20
20
|
import { finalizeMissingStaticAssetResponse, mergeHeaders } from "./worker-utils.js";
|
|
21
21
|
//#region src/server/pages-request-pipeline.ts
|
|
@@ -127,12 +127,11 @@ async function runPagesRequest(request, deps) {
|
|
|
127
127
|
if (configRedirects.length) {
|
|
128
128
|
const redirect = matchRedirect(requestConfigMatchPathname, configRedirects, reqCtx, basePathState, conditionalRedirectCacheability);
|
|
129
129
|
if (redirect) {
|
|
130
|
-
const
|
|
131
|
-
const location = preserveRedirectDestinationQuery(dest, deps.rawSearch ?? search, redirect.destinationQuery);
|
|
130
|
+
const location = encodeRedirectLocation(preserveRedirectDestinationQuery(redirect.destination, deps.rawSearch ?? search, redirect.destinationQuery));
|
|
132
131
|
return {
|
|
133
132
|
type: "response",
|
|
134
133
|
response: new Response(null, {
|
|
135
|
-
status: redirect.
|
|
134
|
+
status: redirect.statusCode,
|
|
136
135
|
headers: { Location: location }
|
|
137
136
|
})
|
|
138
137
|
};
|
|
@@ -311,7 +310,7 @@ async function runPagesRequest(request, deps) {
|
|
|
311
310
|
apiRequest = cloneRequestWithUrl(request, apiRequestUrl.toString());
|
|
312
311
|
}
|
|
313
312
|
const response = await deps.handleApi(apiRequest, apiLookupUrl, deps.ctx ?? null, headersFromRecord(middlewareHeaders));
|
|
314
|
-
const merged = mergeHeaders(response, middlewareHeaders, middlewareStatus);
|
|
313
|
+
const merged = mergeHeaders(response, deps.handleApiAppliesStagedHeaders ? {} : middlewareHeaders, middlewareStatus);
|
|
315
314
|
if (merged !== response) merged.__vinextStreamedApiResponse = response.__vinextStreamedApiResponse;
|
|
316
315
|
return {
|
|
317
316
|
type: "response",
|
|
@@ -26,4 +26,5 @@ export declare function isPagesClientBuildFileRequest(request: Request, env: Pag
|
|
|
26
26
|
export declare function handleRequestStage(request: Request, env: PagesWorkerEnv | undefined, ctx: PagesWorkerExecutionContext | undefined, dispatchResponseStage: DispatchWorkerResponseStage): Promise<Response>;
|
|
27
27
|
/** Preserve the direct single-entry Worker path without retaining it in request-only builds. */
|
|
28
28
|
export declare function handleRequestStageLocally(request: Request, env: PagesWorkerEnv | undefined, ctx: PagesWorkerExecutionContext | undefined, dispatchResponseStage: PagesLocalResponseStage): Promise<Response>;
|
|
29
|
-
//#endregion
|
|
29
|
+
//#endregion
|
|
30
|
+
export {};
|