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
|
@@ -15,7 +15,7 @@ import { patternToNextFormat } from "../routing/route-validation.js";
|
|
|
15
15
|
import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
16
16
|
import { runOutsideWorkStoreScope } from "../shims/internal/work-store-scope.js";
|
|
17
17
|
import { isInterceptionMatchedUrlPath, normalizePath } from "./normalize-path.js";
|
|
18
|
-
import { normalizeDefaultLocalePathname } from "./pages-i18n.js";
|
|
18
|
+
import { normalizeDefaultLocalePathname, shouldRestoreLocaleRootTrailingSlash } from "./pages-i18n.js";
|
|
19
19
|
import { buildNextDataNotFoundResponse, normalizePagesDataRequest } from "./pages-data-route.js";
|
|
20
20
|
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
21
21
|
import { markRouteCacheabilityDynamic, preserveRouteCacheabilityResponsePolicy } from "../shims/cacheability-classification.js";
|
|
@@ -29,7 +29,7 @@ import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isImageOptimizationPath, mar
|
|
|
29
29
|
import { parseCacheabilityManifest } from "./cacheability-manifest.js";
|
|
30
30
|
import { getRenderedConcreteUrlPathsForRoute } from "./pregenerated-concrete-paths.js";
|
|
31
31
|
import { VINEXT_RSC_CACHE_BUSTING_SEARCH_PARAM, canonicalizeLoadingShellRscRequestHeaders, canonicalizePrewarmableRscRequestHeaders, createCanonicalRscRequestUrl, createRscRedirectLocation, createRscRequestUrl, hasRscCacheBustingSearchParam, resolveInvalidRscCacheBustingRequest, stripRscCacheBustingSearchParam, stripRscSuffix } from "./app-rsc-cache-busting.js";
|
|
32
|
-
import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
|
|
32
|
+
import { mergeMiddlewareResponseHeaders, mergeMiddlewareResponseHeadersOntoResponse, withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
|
|
33
33
|
import { consumeResponseStageLinkProvenance, copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
|
|
34
34
|
import "./app-page-response.js";
|
|
35
35
|
import { parseNextHttpErrorDigest } from "./next-error-digest.js";
|
|
@@ -37,10 +37,11 @@ import { traceAppPageRender } from "./app-page-tracing.js";
|
|
|
37
37
|
import { openForwardedMiddlewareContext } from "./forwarded-middleware-context.js";
|
|
38
38
|
import { setFrameworkRequestRoute, traceFrameworkRequest } from "./request-tracing.js";
|
|
39
39
|
import { matchPrerenderRouteParamsPayload, readTrustedPrerenderRouteParams, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
|
|
40
|
-
import { buildPageCacheTags } from "./implicit-tags.js";
|
|
41
40
|
import { createServerActionNotFoundResponse, getServerActionNotFoundMessage } from "./server-action-not-found.js";
|
|
42
41
|
import { isPossibleAppRouteActionRequest } from "./app-action-request.js";
|
|
42
|
+
import { isAppRouteHandlerRoute } from "./app-rsc-route-matching.js";
|
|
43
43
|
import { normalizeInterceptionContextHeader } from "./app-interception-context-header.js";
|
|
44
|
+
import { buildPageCacheTags } from "./implicit-tags.js";
|
|
44
45
|
import { buildPostMwRequestContext } from "./app-post-middleware-context.js";
|
|
45
46
|
import { pickRootParams, setRootParams } from "../shims/root-params.js";
|
|
46
47
|
import { createRouteTreePrefetchResponse, isRouteTreePrefetchRequest } from "./app-route-tree-prefetch.js";
|
|
@@ -145,7 +146,7 @@ function applyMiddlewareContextToResponse(response, middlewareContext, appendToP
|
|
|
145
146
|
if (!middlewareContext.headers && middlewareContext.status == null) return response;
|
|
146
147
|
const headers = new Headers(response.headers);
|
|
147
148
|
const responseLink = appendToPostConfigLink ? headers.get("link") : null;
|
|
148
|
-
|
|
149
|
+
mergeMiddlewareResponseHeadersOntoResponse(headers, middlewareContext.headers);
|
|
149
150
|
const middlewareLink = middlewareContext.headers?.get("link");
|
|
150
151
|
if (responseLink && middlewareLink) headers.set("link", `${middlewareLink}, ${responseLink}`);
|
|
151
152
|
return preserveFullyBufferedBodyMetadata(response, new Response(response.body, {
|
|
@@ -194,10 +195,6 @@ function createMissingServerActionResponse(options, actionId) {
|
|
|
194
195
|
options.clearRequestContext();
|
|
195
196
|
return createServerActionNotFoundResponse();
|
|
196
197
|
}
|
|
197
|
-
function redirectDestinationWithBasePath(destination, basePath, hadBasePath) {
|
|
198
|
-
if (!basePath || !hadBasePath || isExternalUrl(destination) || hasBasePath(destination, basePath)) return destination;
|
|
199
|
-
return basePath + destination;
|
|
200
|
-
}
|
|
201
198
|
async function applyRewrite(options, cleanPathname, recordCacheability = true) {
|
|
202
199
|
if (!HAS_CONFIG_REWRITES || !options.rewrites.length) return null;
|
|
203
200
|
const sourcePathname = options.paramsPathname ?? cleanPathname;
|
|
@@ -210,7 +207,7 @@ async function applyRewrite(options, cleanPathname, recordCacheability = true) {
|
|
|
210
207
|
const { requestWithMiddlewareContextHeaders } = await import("./app-middleware.js");
|
|
211
208
|
const proxyRequest = requestWithMiddlewareContextHeaders(options.request, options.middlewareContext);
|
|
212
209
|
options.clearRequestContext();
|
|
213
|
-
return configMatchers.proxyExternalRequest(proxyRequest, rewritten);
|
|
210
|
+
return markAppRscResponseConfigHeadersApplied(withExternalRewriteResponseHeaders(await configMatchers.proxyExternalRequest(proxyRequest, rewritten), new Headers(), options.middlewareContext.headers?.getSetCookie() ?? []));
|
|
214
211
|
}
|
|
215
212
|
return rewritten;
|
|
216
213
|
}
|
|
@@ -245,6 +242,7 @@ async function applyConfigHeadersToMiddlewareRedirect(response, options) {
|
|
|
245
242
|
pathname: options.pathname,
|
|
246
243
|
requestContext: options.requestContext,
|
|
247
244
|
basePathState: options.basePathState,
|
|
245
|
+
middlewareHeaders: response.headers,
|
|
248
246
|
recordCacheability: options.recordCacheability
|
|
249
247
|
});
|
|
250
248
|
if (!headers.entries().next().done) {
|
|
@@ -369,19 +367,24 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
369
367
|
});
|
|
370
368
|
if (prerenderEndpointResponse) return prerenderEndpointResponse;
|
|
371
369
|
}
|
|
372
|
-
if (!options.skipTrailingSlashRedirect) {
|
|
370
|
+
if (!isDataRequest && !options.skipTrailingSlashRedirect) {
|
|
373
371
|
const trailingSlashRedirect = options.trailingSlash && options.isMetadataRoutePath && await options.isMetadataRoutePath(cleanPathname) ? null : normalizeTrailingSlash(requestCleanPathname, hadBasePath ? options.basePath : "", options.trailingSlash, url.search);
|
|
374
372
|
if (trailingSlashRedirect) return trailingSlashRedirect;
|
|
375
373
|
}
|
|
376
374
|
const matchPathname = (p) => normalizeDefaultLocalePathname(p, options.i18nConfig, { hostname: url.hostname });
|
|
375
|
+
const restoreLocaleRootTrailingSlash = !pagesDataRequest && shouldRestoreLocaleRootTrailingSlash(stripRscSuffix(url.pathname), options);
|
|
376
|
+
const headerMatchPathname = normalizeDefaultLocalePathname(requestCleanPathname, options.i18nConfig, {
|
|
377
|
+
hostname: url.hostname,
|
|
378
|
+
restoreRootTrailingSlash: restoreLocaleRootTrailingSlash
|
|
379
|
+
});
|
|
377
380
|
const redirectPathname = matchPathname(requestCleanPathname);
|
|
378
381
|
const configMatchers = HAS_CONFIG_REDIRECTS && options.configRedirects.length ? await import("../config/config-matchers.js") : null;
|
|
379
382
|
const redirect = configMatchers ? configMatchers.matchRedirect(redirectPathname, options.configRedirects, preMiddlewareRequestContext, basePathState, dispatchResponseStage ? void 0 : markConditionalRedirectCacheability) : null;
|
|
380
383
|
if (configMatchers && redirect) {
|
|
381
|
-
const destination =
|
|
382
|
-
const location = isRscRequest && request.headers.get("RSC") === "1" ? await createRscRedirectLocation(destination, request) : configMatchers.preserveRedirectDestinationQuery(destination, url.search, redirect.destinationQuery);
|
|
384
|
+
const destination = redirect.destination;
|
|
385
|
+
const location = isRscRequest && request.headers.get("RSC") === "1" ? await createRscRedirectLocation(configMatchers.encodeRedirectLocation(destination), request) : configMatchers.encodeRedirectLocation(configMatchers.preserveRedirectDestinationQuery(destination, url.search, redirect.destinationQuery));
|
|
383
386
|
return new Response(null, {
|
|
384
|
-
status: redirect.
|
|
387
|
+
status: redirect.statusCode,
|
|
385
388
|
headers: { Location: location }
|
|
386
389
|
});
|
|
387
390
|
}
|
|
@@ -424,10 +427,24 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
424
427
|
if (!dispatchResponseStage && middlewareResult.pathnameEligible) markRouteCacheabilityDynamic(middlewareResult.matched ? "middleware matched this request" : "middleware is eligible for this pathname");
|
|
425
428
|
if (middlewareResult.kind === "response") {
|
|
426
429
|
if (request.body && !request.body.locked) request.body.cancel().catch(() => {});
|
|
430
|
+
if (middlewareResult.externalRewrite) {
|
|
431
|
+
const headers = new Headers();
|
|
432
|
+
await applyAppRscConfigHeaders(headers, request, {
|
|
433
|
+
basePath: options.basePath,
|
|
434
|
+
configHeaders: options.configHeaders,
|
|
435
|
+
i18nConfig: options.i18nConfig,
|
|
436
|
+
restoreLocaleRootTrailingSlash,
|
|
437
|
+
middlewareHeaders: middlewareContext.headers,
|
|
438
|
+
recordCacheability: dispatchResponseStage === void 0,
|
|
439
|
+
requestContext: preMiddlewareRequestContext
|
|
440
|
+
});
|
|
441
|
+
return markAppRscResponseConfigHeadersApplied(withExternalRewriteResponseHeaders(middlewareResult.response, headers, []));
|
|
442
|
+
}
|
|
443
|
+
middlewareContext.headers ??= new Headers(middlewareResult.response.headers);
|
|
427
444
|
return applyConfigHeadersToMiddlewareRedirect(middlewareResult.response, {
|
|
428
445
|
basePathState,
|
|
429
446
|
configHeaders: options.configHeaders,
|
|
430
|
-
pathname:
|
|
447
|
+
pathname: headerMatchPathname,
|
|
431
448
|
recordCacheability: dispatchResponseStage === void 0,
|
|
432
449
|
requestContext: preMiddlewareRequestContext
|
|
433
450
|
});
|
|
@@ -453,7 +470,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
453
470
|
const loadResponseStagePolicy = () => responseStagePolicyPromise ??= options.configHeaders.length ? import("./config-headers.js").then(({ resolveResponseStageCachePolicy }) => withoutResponseStageVary(resolveResponseStageCachePolicy({
|
|
454
471
|
basePathState,
|
|
455
472
|
configHeaders: options.configHeaders,
|
|
456
|
-
pathname:
|
|
473
|
+
pathname: headerMatchPathname,
|
|
457
474
|
requestContext: preMiddlewareRequestContext
|
|
458
475
|
}))) : Promise.resolve(null);
|
|
459
476
|
let canUseSharedWorkerResponseStage = draftModeCookie === null && !hasMiddlewareCookieOverlay && !hasMiddlewareRequestHeaderOverrides(middlewareContext.requestHeaders ?? middlewareContext.headers) && !requestOptsOutOfWorkerResponseStage(request, options, scriptNonce, allowInternalRscDocumentFallback);
|
|
@@ -463,7 +480,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
463
480
|
const cache = responseStageProbeMode || isOnDemandRevalidate || (props.kind === "app-page" || props.kind === "app-route-handler") && (props.bypassInterceptionContextCache || props.forceDynamic === true && responseStagePolicy === null) ? "bypass" : canUseSharedWorkerResponseStage ? "shared" : "bypass";
|
|
464
481
|
let dispatchRequest = props.kind === "app-page" ? prepareSharedAppPageDispatch(stageRequest, cache) : stageRequest;
|
|
465
482
|
let canonicalRsc = null;
|
|
466
|
-
if (cache === "shared" && props.kind === "app-page" && props.isRscRequest && props.matchKind === "request" && props.interceptionContext === null && props.interceptionId === null && props.mountedSlotsHeader === null) {
|
|
483
|
+
if (cache === "shared" && props.kind === "app-page" && props.isRscRequest && (props.matchKind === "request" || props.matchKind === "resolved") && props.interceptionContext === null && props.interceptionId === null && props.mountedSlotsHeader === null) {
|
|
467
484
|
const headers = new Headers(dispatchRequest.headers);
|
|
468
485
|
if (props.renderMode === "navigation" ? canonicalizePrewarmableRscRequestHeaders(headers) : props.renderMode === "prefetch-loading-shell" && props.canUseCanonicalLoadingShell ? canonicalizeLoadingShellRscRequestHeaders(headers) : false) {
|
|
469
486
|
canonicalRsc = {
|
|
@@ -558,6 +575,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
558
575
|
basePath: options.basePath,
|
|
559
576
|
configHeaders: options.configHeaders,
|
|
560
577
|
i18nConfig: options.i18nConfig,
|
|
578
|
+
restoreLocaleRootTrailingSlash,
|
|
561
579
|
middlewareHeaders: middlewareContext.headers,
|
|
562
580
|
overwriteExisting: preserveExistingPolicy ? /* @__PURE__ */ new Set() : isCdnResponsePolicyHeader,
|
|
563
581
|
recordCacheability: dispatchResponseStage === void 0,
|
|
@@ -576,6 +594,8 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
576
594
|
basePath: options.basePath,
|
|
577
595
|
configHeaders: options.configHeaders,
|
|
578
596
|
i18nConfig: options.i18nConfig,
|
|
597
|
+
restoreLocaleRootTrailingSlash,
|
|
598
|
+
middlewareHeaders: middlewareContext.headers,
|
|
579
599
|
overwriteExisting: isCdnResponsePolicyHeader,
|
|
580
600
|
recordCacheability: false,
|
|
581
601
|
requestContext: preMiddlewareRequestContext
|
|
@@ -594,7 +614,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
594
614
|
return markAppRscResponseConfigHeadersApplied(response);
|
|
595
615
|
};
|
|
596
616
|
const postMiddlewareRequestContext = buildPostMwRequestContext(userlandRequest);
|
|
597
|
-
filesystemRouteEligible
|
|
617
|
+
if (didMiddlewareRewrite) filesystemRouteEligible = resolvedPathnameHasBasePath;
|
|
598
618
|
for (const rewrite of options.configRewrites.beforeFiles) {
|
|
599
619
|
const beforeFilesRewrite = await applyRewrite({
|
|
600
620
|
basePathState: currentBasePathState(),
|
|
@@ -611,8 +631,8 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
611
631
|
resolvedUrl = mergeRewriteQuery(resolvedUrl, beforeFilesRewrite);
|
|
612
632
|
cleanPathname = pathnameForResolvedUrl(resolvedUrl);
|
|
613
633
|
cleanPathnameIsRequestPathname = false;
|
|
614
|
-
filesystemRouteEligible = true;
|
|
615
634
|
resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
|
|
635
|
+
filesystemRouteEligible = resolvedPathnameHasBasePath;
|
|
616
636
|
}
|
|
617
637
|
}
|
|
618
638
|
const claimedRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
|
|
@@ -621,55 +641,6 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
621
641
|
const isPostRequest = request.method.toUpperCase() === "POST";
|
|
622
642
|
const contentType = request.headers.get("content-type") || "";
|
|
623
643
|
const isProgressiveActionRequest = isPostRequest && !actionId && contentType.startsWith("multipart/form-data");
|
|
624
|
-
let resolvedLateRewritesForAction = false;
|
|
625
|
-
if (!filesystemRouteEligible && (actionId || isProgressiveActionRequest)) {
|
|
626
|
-
let actionMatch = null;
|
|
627
|
-
for (const rewrite of options.configRewrites.afterFiles) {
|
|
628
|
-
const rewritten = await applyRewrite({
|
|
629
|
-
basePathState: currentBasePathState(),
|
|
630
|
-
clearRequestContext: options.clearRequestContext,
|
|
631
|
-
middlewareContext,
|
|
632
|
-
request: normalizedUserlandRequest,
|
|
633
|
-
requestContext: requestContextForResolvedUrl(postMiddlewareRequestContext, resolvedUrl, url),
|
|
634
|
-
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname),
|
|
635
|
-
rewrites: [rewrite],
|
|
636
|
-
validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
|
|
637
|
-
}, matchPathname(cleanPathname), dispatchResponseStage === void 0);
|
|
638
|
-
if (rewritten instanceof Response) return rewritten;
|
|
639
|
-
if (!rewritten) continue;
|
|
640
|
-
resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
|
|
641
|
-
cleanPathname = pathnameForResolvedUrl(resolvedUrl);
|
|
642
|
-
cleanPathnameIsRequestPathname = false;
|
|
643
|
-
filesystemRouteEligible = true;
|
|
644
|
-
resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
|
|
645
|
-
actionMatch = matchCleanPathname();
|
|
646
|
-
if (actionMatch) break;
|
|
647
|
-
}
|
|
648
|
-
if (!actionMatch) for (const rewrite of options.configRewrites.fallback) {
|
|
649
|
-
const rewritten = await applyRewrite({
|
|
650
|
-
basePathState: currentBasePathState(),
|
|
651
|
-
clearRequestContext: options.clearRequestContext,
|
|
652
|
-
middlewareContext,
|
|
653
|
-
request: normalizedUserlandRequest,
|
|
654
|
-
requestContext: requestContextForResolvedUrl(postMiddlewareRequestContext, resolvedUrl, url),
|
|
655
|
-
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname),
|
|
656
|
-
rewrites: [rewrite],
|
|
657
|
-
validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
|
|
658
|
-
}, matchPathname(cleanPathname), dispatchResponseStage === void 0);
|
|
659
|
-
if (rewritten instanceof Response) return rewritten;
|
|
660
|
-
if (!rewritten) continue;
|
|
661
|
-
resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
|
|
662
|
-
cleanPathname = pathnameForResolvedUrl(resolvedUrl);
|
|
663
|
-
cleanPathnameIsRequestPathname = false;
|
|
664
|
-
filesystemRouteEligible = true;
|
|
665
|
-
resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
|
|
666
|
-
actionMatch = matchCleanPathname();
|
|
667
|
-
if (actionMatch) break;
|
|
668
|
-
}
|
|
669
|
-
resolvedLateRewritesForAction = filesystemRouteEligible;
|
|
670
|
-
}
|
|
671
|
-
const lateActionRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
|
|
672
|
-
if (lateActionRscCacheBustingRedirect) return lateActionRscCacheBustingRedirect;
|
|
673
644
|
const serveImageEndpointIfMatched = () => {
|
|
674
645
|
if (!filesystemRouteEligible || !resolvedPathnameHasBasePath || !isImageOptimizationPath(cleanPathname)) return null;
|
|
675
646
|
const imageUrl = new URL(resolvedUrl, url);
|
|
@@ -691,17 +662,20 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
691
662
|
if (imageEndpointResponse) return imageEndpointResponse;
|
|
692
663
|
const metadataRouteResponse = await renderMetadataRouteIfMatched();
|
|
693
664
|
if (metadataRouteResponse) return composeResponseStageResponse(metadataRouteResponse);
|
|
694
|
-
const
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
665
|
+
const servePublicFileIfMatched = () => {
|
|
666
|
+
if (!filesystemRouteEligible) return null;
|
|
667
|
+
const publicFileResponse = resolvePublicFileRoute({
|
|
668
|
+
cleanPathname: cleanPathnameIsRequestPathname ? cleanPathname : normalizePathnameForRouteMatch(cleanPathname),
|
|
669
|
+
middlewareContext,
|
|
670
|
+
pathname,
|
|
671
|
+
publicFiles: options.publicFiles,
|
|
672
|
+
request
|
|
673
|
+
});
|
|
674
|
+
if (publicFileResponse) options.clearRequestContext();
|
|
703
675
|
return publicFileResponse;
|
|
704
|
-
}
|
|
676
|
+
};
|
|
677
|
+
const publicFileResponse = servePublicFileIfMatched();
|
|
678
|
+
if (publicFileResponse) return publicFileResponse;
|
|
705
679
|
stripRscCacheBustingSearchParam(url);
|
|
706
680
|
resolvedUrl = serializeResolvedUrl(resolvedUrl, url);
|
|
707
681
|
options.setNavigationContext({
|
|
@@ -740,7 +714,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
740
714
|
const rewrittenSourceMatch = options.matchRoute(rewrittenPathname);
|
|
741
715
|
return interceptionSourceMatch !== null && rewrittenSourceMatch?.route === interceptionSourceMatch.route && haveSamePageParams(rewrittenSourceMatch.params, interceptionSourceMatch.params);
|
|
742
716
|
};
|
|
743
|
-
if (configMatchers?.matchRedirect(matchPathname(sourceRequestPathname), options.configRedirects, preMiddlewareRequestContext,
|
|
717
|
+
if (configMatchers?.matchRedirect(matchPathname(sourceRequestPathname), options.configRedirects, preMiddlewareRequestContext, currentBasePathState(), dispatchResponseStage ? void 0 : markConditionalRedirectCacheability)) {
|
|
744
718
|
options.clearRequestContext();
|
|
745
719
|
return notFoundResponse();
|
|
746
720
|
}
|
|
@@ -748,7 +722,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
748
722
|
if (runMiddleware) {
|
|
749
723
|
const sourceUrl = new URL(userlandRequest.url);
|
|
750
724
|
sourceUrl.search = new URL(resolvedUrl, url).search;
|
|
751
|
-
const sourceUrlPathname =
|
|
725
|
+
const sourceUrlPathname = resolvedPathnameHasBasePath && options.basePath ? sourceRequestPathname === "/" ? options.basePath : options.basePath + sourceRequestPathname : sourceRequestPathname;
|
|
752
726
|
sourceUrl.pathname = sourceUrlPathname;
|
|
753
727
|
if (sourceUrl.pathname !== sourceUrlPathname) {
|
|
754
728
|
options.clearRequestContext();
|
|
@@ -780,7 +754,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
780
754
|
cleanPathname: decodedSourceRequestPathname,
|
|
781
755
|
context: sourceMiddlewareContext,
|
|
782
756
|
externalRewriteRequest: normalizedUserlandRequest,
|
|
783
|
-
hadBasePath,
|
|
757
|
+
hadBasePath: resolvedPathnameHasBasePath,
|
|
784
758
|
isDataRequest: isMiddlewareDataRequest,
|
|
785
759
|
request: sourceMiddlewareRequest,
|
|
786
760
|
validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
|
|
@@ -815,7 +789,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
815
789
|
canUseSharedWorkerResponseStage = false;
|
|
816
790
|
}
|
|
817
791
|
if (sourceMiddlewareResult.rewritten) {
|
|
818
|
-
if (sourceMiddlewareResult.search !== sourceUrl.search || !adoptRewrittenInterceptionSource(sourceMiddlewareResult.cleanPathname)) {
|
|
792
|
+
if (options.basePath && sourceMiddlewareResult.rewriteHadBasePath === false || sourceMiddlewareResult.search !== sourceUrl.search || !adoptRewrittenInterceptionSource(sourceMiddlewareResult.cleanPathname)) {
|
|
819
793
|
options.clearRequestContext();
|
|
820
794
|
return notFoundResponse();
|
|
821
795
|
}
|
|
@@ -827,7 +801,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
827
801
|
const sourceRewriteContext = requestContextForResolvedUrl(buildPostMwRequestContext(userlandRequest), resolvedUrl, url);
|
|
828
802
|
let didRewriteSource = false;
|
|
829
803
|
for (const rewrite of options.configRewrites.beforeFiles) {
|
|
830
|
-
const destination = matchRewrite(matchPathname(sourceRulesPathname), [rewrite], sourceRewriteContext,
|
|
804
|
+
const destination = matchRewrite(matchPathname(sourceRulesPathname), [rewrite], sourceRewriteContext, currentBasePathState(), matchPathname(sourceRulesPathname), dispatchResponseStage === void 0 ? markConditionalRewriteCacheability : void 0);
|
|
831
805
|
if (!destination) continue;
|
|
832
806
|
if (isExternalUrl(destination) || destination.includes("?")) {
|
|
833
807
|
options.clearRequestContext();
|
|
@@ -872,64 +846,76 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
872
846
|
options.clearRequestContext();
|
|
873
847
|
return new Response("{}", { headers });
|
|
874
848
|
}
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
routeMatch: renderedPreActionMatch
|
|
888
|
-
});
|
|
889
|
-
else if (preActionMatch?.route.__loadPage && !preActionMatch.route.__loadRouteHandler) return createMissingServerActionResponse(options, null);
|
|
890
|
-
}
|
|
891
|
-
if (progressiveActionResult instanceof Response) return progressiveActionResult;
|
|
892
|
-
const progressiveActionFormState = progressiveActionResult?.kind === "form-state" ? progressiveActionResult : null;
|
|
893
|
-
const isProgressiveActionRender = progressiveActionFormState !== null;
|
|
894
|
-
const formState = progressiveActionFormState?.formState ?? null;
|
|
895
|
-
const failedProgressiveActionResult = progressiveActionFormState && "actionError" in progressiveActionFormState ? progressiveActionFormState : null;
|
|
896
|
-
const actionFailed = failedProgressiveActionResult !== null;
|
|
897
|
-
const actionError = failedProgressiveActionResult?.actionError;
|
|
898
|
-
const actionErrorDigest = actionError && typeof actionError === "object" && "digest" in actionError ? String(actionError.digest) : null;
|
|
899
|
-
const actionHttpFallbackStatus = actionErrorDigest ? parseNextHttpErrorDigest(actionErrorDigest)?.status ?? null : null;
|
|
900
|
-
const normalizedProgressiveActionError = actionHttpFallbackStatus === null || actionHttpFallbackStatus === 404 ? actionError : { digest: "NEXT_NOT_FOUND" };
|
|
901
|
-
if (actionFailed && middlewareContext.status === null && actionHttpFallbackStatus === null) middlewareContext.status = 500;
|
|
902
|
-
let sourceConfigHeaders = null;
|
|
903
|
-
if (filesystemRouteEligible && isPostRequest && actionId && options.handleServerActionRequest) {
|
|
904
|
-
sourceConfigHeaders = new Headers();
|
|
849
|
+
const literalRoutePattern = preActionMatch !== null && !isAppRouteHandlerRoute(preActionMatch.route) ? patternToNextFormat(preActionMatch.route.pattern) : null;
|
|
850
|
+
const routeMatchPathname = cleanPathnameIsRequestPathname ? cleanPathname : normalizePathnameForRouteMatch(cleanPathname);
|
|
851
|
+
const isServerActionRequest = isPostRequest && Boolean(actionId);
|
|
852
|
+
const requestsLiteralRoutePattern = (isProgressiveActionRequest || isServerActionRequest) && literalRoutePattern !== null && literalRoutePattern === (routeMatchPathname.length > 1 && routeMatchPathname.endsWith("/") ? routeMatchPathname.slice(0, -1) : routeMatchPathname);
|
|
853
|
+
const isFinalRouteMatch = isInterceptionMatch || requestsLiteralRoutePattern;
|
|
854
|
+
const preActionMatchIsFinal = preActionMatch !== null && (isFinalRouteMatch || !preActionMatch.route.isDynamic);
|
|
855
|
+
let serverActionHandled = false;
|
|
856
|
+
const handleServerAction = async (routeMatch, routePathname) => {
|
|
857
|
+
if (!filesystemRouteEligible || !isPostRequest || !actionId) return null;
|
|
858
|
+
if (routeMatch && isAppRouteHandlerRoute(routeMatch.route)) return null;
|
|
859
|
+
if (!options.handleServerActionRequest) return createMissingServerActionResponse(options, actionId);
|
|
860
|
+
const sourceConfigHeaders = new Headers();
|
|
905
861
|
const sourceConfigUrl = new URL(request.url);
|
|
906
862
|
sourceConfigUrl.pathname = hadBasePath ? addBasePathToPathname(requestCleanPathname, options.basePath) : requestCleanPathname;
|
|
907
863
|
await applyAppRscConfigHeaders(sourceConfigHeaders, cloneRequestWithUrl(request, sourceConfigUrl.toString()), {
|
|
908
864
|
basePath: options.basePath,
|
|
909
865
|
configHeaders: options.configHeaders,
|
|
910
866
|
i18nConfig: options.i18nConfig,
|
|
867
|
+
restoreLocaleRootTrailingSlash,
|
|
868
|
+
middlewareHeaders: middlewareContext.headers,
|
|
911
869
|
recordCacheability: dispatchResponseStage === void 0,
|
|
912
870
|
requestContext: preMiddlewareRequestContext
|
|
913
871
|
});
|
|
872
|
+
return options.handleServerActionRequest({
|
|
873
|
+
actionId,
|
|
874
|
+
cleanPathname,
|
|
875
|
+
contentType,
|
|
876
|
+
interceptionContext: interceptionSourceContext,
|
|
877
|
+
isRscRequest,
|
|
878
|
+
middlewareContext,
|
|
879
|
+
mountedSlotsHeader,
|
|
880
|
+
request,
|
|
881
|
+
scriptNonce,
|
|
882
|
+
routeMatch,
|
|
883
|
+
routePathname,
|
|
884
|
+
dispatchRedirectTargetRequest: dispatchInternalRequest,
|
|
885
|
+
sourceConfigHeaders,
|
|
886
|
+
searchParams: getResolvedSearchParams()
|
|
887
|
+
});
|
|
888
|
+
};
|
|
889
|
+
let progressiveActionHandled = false;
|
|
890
|
+
let progressiveActionFormState = null;
|
|
891
|
+
const handleProgressiveAction = async (routeMatch, unrenderedRouteMatch) => {
|
|
892
|
+
if (!filesystemRouteEligible || !isProgressiveActionRequest) return null;
|
|
893
|
+
if (routeMatch && isAppRouteHandlerRoute(routeMatch.route)) return null;
|
|
894
|
+
if (!options.handleProgressiveActionRequest) return unrenderedRouteMatch?.route.__loadPage && !unrenderedRouteMatch.route.__loadRouteHandler ? createMissingServerActionResponse(options, null) : null;
|
|
895
|
+
const progressiveActionResult = await options.handleProgressiveActionRequest({
|
|
896
|
+
actionId,
|
|
897
|
+
cleanPathname,
|
|
898
|
+
contentType,
|
|
899
|
+
middlewareContext,
|
|
900
|
+
request,
|
|
901
|
+
routeMatch
|
|
902
|
+
});
|
|
903
|
+
if (progressiveActionResult instanceof Response) return progressiveActionResult;
|
|
904
|
+
if (progressiveActionResult?.kind !== "form-state") return null;
|
|
905
|
+
if ("actionError" in progressiveActionResult && middlewareContext.status === null && progressiveActionHttpFallbackStatus(progressiveActionResult.actionError) === null) middlewareContext.status = 500;
|
|
906
|
+
return progressiveActionResult;
|
|
907
|
+
};
|
|
908
|
+
if (preActionMatchIsFinal) {
|
|
909
|
+
progressiveActionHandled = true;
|
|
910
|
+
const progressiveActionResult = await handleProgressiveAction(renderedPreActionMatch, preActionMatch);
|
|
911
|
+
if (progressiveActionResult instanceof Response) return progressiveActionResult;
|
|
912
|
+
progressiveActionFormState = progressiveActionResult;
|
|
913
|
+
}
|
|
914
|
+
if (isServerActionRequest && preActionMatchIsFinal) {
|
|
915
|
+
serverActionHandled = true;
|
|
916
|
+
const serverActionResponse = await handleServerAction(renderedPreActionMatch, preActionRoutePathname);
|
|
917
|
+
if (serverActionResponse) return serverActionResponse;
|
|
914
918
|
}
|
|
915
|
-
const serverActionResponse = filesystemRouteEligible && isPostRequest && actionId && options.handleServerActionRequest ? await options.handleServerActionRequest({
|
|
916
|
-
actionId,
|
|
917
|
-
cleanPathname,
|
|
918
|
-
contentType,
|
|
919
|
-
interceptionContext: interceptionSourceContext,
|
|
920
|
-
isRscRequest,
|
|
921
|
-
middlewareContext,
|
|
922
|
-
mountedSlotsHeader,
|
|
923
|
-
request,
|
|
924
|
-
scriptNonce,
|
|
925
|
-
routeMatch: renderedPreActionMatch,
|
|
926
|
-
routePathname: preActionRoutePathname,
|
|
927
|
-
dispatchRedirectTargetRequest: dispatchInternalRequest,
|
|
928
|
-
sourceConfigHeaders,
|
|
929
|
-
searchParams: getResolvedSearchParams()
|
|
930
|
-
}) : null;
|
|
931
|
-
if (serverActionResponse) return serverActionResponse;
|
|
932
|
-
if (filesystemRouteEligible && isPostRequest && actionId && !options.handleServerActionRequest) return createMissingServerActionResponse(options, actionId);
|
|
933
919
|
let match = preActionMatch;
|
|
934
920
|
const renderPagesForMatchKind = async (matchKind) => {
|
|
935
921
|
if (!filesystemRouteEligible) return null;
|
|
@@ -978,7 +964,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
978
964
|
if (!responseStageHasContentLength) response.headers.delete("Content-Length");
|
|
979
965
|
return response;
|
|
980
966
|
} : void 0;
|
|
981
|
-
const response = !
|
|
967
|
+
const response = !isFinalRouteMatch && (match === null || match.route.isDynamic) ? await runOutsideWorkStoreScope(() => options.renderPagesFallback?.({
|
|
982
968
|
appRouteMatch: match ?? null,
|
|
983
969
|
allowRscDocumentFallback: didMiddlewareRewritePathname || allowInternalRscDocumentFallback,
|
|
984
970
|
dispatchPagesResponseStage,
|
|
@@ -1012,7 +998,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1012
998
|
options.clearRequestContext();
|
|
1013
999
|
return staticPagesFallbackResponse;
|
|
1014
1000
|
}
|
|
1015
|
-
if (!
|
|
1001
|
+
if (!isFinalRouteMatch && (!match || match.route.isDynamic)) for (const rewrite of options.configRewrites.afterFiles) {
|
|
1016
1002
|
const afterFilesRewrite = await applyRewrite({
|
|
1017
1003
|
basePathState: currentBasePathState(),
|
|
1018
1004
|
clearRequestContext: options.clearRequestContext,
|
|
@@ -1032,14 +1018,16 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1032
1018
|
cleanPathname = pathnameForResolvedUrl(resolvedUrl);
|
|
1033
1019
|
cleanPathnameIsRequestPathname = false;
|
|
1034
1020
|
invalidateInterceptionCacheProof();
|
|
1035
|
-
filesystemRouteEligible = true;
|
|
1036
1021
|
resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
|
|
1022
|
+
filesystemRouteEligible = resolvedPathnameHasBasePath;
|
|
1037
1023
|
const claimedRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
|
|
1038
1024
|
if (claimedRscCacheBustingRedirect) return claimedRscCacheBustingRedirect;
|
|
1039
1025
|
const rewrittenImageEndpointResponse = serveImageEndpointIfMatched();
|
|
1040
1026
|
if (rewrittenImageEndpointResponse) return rewrittenImageEndpointResponse;
|
|
1041
1027
|
const rewrittenMetadataResponse = await renderMetadataRouteIfMatched();
|
|
1042
1028
|
if (rewrittenMetadataResponse) return composeResponseStageResponse(rewrittenMetadataResponse);
|
|
1029
|
+
const rewrittenPublicFileResponse = servePublicFileIfMatched();
|
|
1030
|
+
if (rewrittenPublicFileResponse) return rewrittenPublicFileResponse;
|
|
1043
1031
|
match = matchCleanPathname();
|
|
1044
1032
|
const rewrittenStaticPagesResponse = await renderPagesForMatchKind("static");
|
|
1045
1033
|
if (rewrittenStaticPagesResponse) {
|
|
@@ -1058,7 +1046,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1058
1046
|
options.clearRequestContext();
|
|
1059
1047
|
return dynamicPagesFallbackResponse;
|
|
1060
1048
|
}
|
|
1061
|
-
if (!
|
|
1049
|
+
if (!match) for (const rewrite of options.configRewrites.fallback) {
|
|
1062
1050
|
const fallbackRewrite = await applyRewrite({
|
|
1063
1051
|
basePathState: currentBasePathState(),
|
|
1064
1052
|
clearRequestContext: options.clearRequestContext,
|
|
@@ -1078,14 +1066,16 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1078
1066
|
cleanPathname = pathnameForResolvedUrl(resolvedUrl);
|
|
1079
1067
|
cleanPathnameIsRequestPathname = false;
|
|
1080
1068
|
invalidateInterceptionCacheProof();
|
|
1081
|
-
filesystemRouteEligible = true;
|
|
1082
1069
|
resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
|
|
1070
|
+
filesystemRouteEligible = resolvedPathnameHasBasePath;
|
|
1083
1071
|
const claimedRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
|
|
1084
1072
|
if (claimedRscCacheBustingRedirect) return claimedRscCacheBustingRedirect;
|
|
1085
1073
|
const rewrittenImageEndpointResponse = serveImageEndpointIfMatched();
|
|
1086
1074
|
if (rewrittenImageEndpointResponse) return rewrittenImageEndpointResponse;
|
|
1087
1075
|
const rewrittenMetadataResponse = await renderMetadataRouteIfMatched();
|
|
1088
1076
|
if (rewrittenMetadataResponse) return composeResponseStageResponse(rewrittenMetadataResponse);
|
|
1077
|
+
const rewrittenPublicFileResponse = servePublicFileIfMatched();
|
|
1078
|
+
if (rewrittenPublicFileResponse) return rewrittenPublicFileResponse;
|
|
1089
1079
|
match = matchCleanPathname();
|
|
1090
1080
|
const rewrittenStaticPagesResponse = await renderPagesForMatchKind("static");
|
|
1091
1081
|
if (rewrittenStaticPagesResponse) {
|
|
@@ -1140,6 +1130,18 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1140
1130
|
}
|
|
1141
1131
|
return buildNextDataNotFoundResponse();
|
|
1142
1132
|
}
|
|
1133
|
+
if (isProgressiveActionRequest && !progressiveActionHandled || isServerActionRequest && !serverActionHandled) {
|
|
1134
|
+
const finalRouteMatch = renderedRouteMatch(match);
|
|
1135
|
+
setRootParams(finalRouteMatch ? pickRootParams(finalRouteMatch.params, finalRouteMatch.route.rootParamNames) : null);
|
|
1136
|
+
if (isServerActionRequest) {
|
|
1137
|
+
const serverActionResponse = await handleServerAction(finalRouteMatch, cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname);
|
|
1138
|
+
if (serverActionResponse) return serverActionResponse;
|
|
1139
|
+
} else {
|
|
1140
|
+
const progressiveActionResult = await handleProgressiveAction(finalRouteMatch, match);
|
|
1141
|
+
if (progressiveActionResult instanceof Response) return progressiveActionResult;
|
|
1142
|
+
progressiveActionFormState = progressiveActionResult;
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1143
1145
|
if (!match) {
|
|
1144
1146
|
if (process.env.NODE_ENV !== "production" && canonicalPathname === "/favicon.ico") {
|
|
1145
1147
|
options.clearRequestContext();
|
|
@@ -1265,6 +1267,9 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1265
1267
|
searchParams: resolvedSearchParams
|
|
1266
1268
|
});
|
|
1267
1269
|
}
|
|
1270
|
+
const failedProgressiveActionResult = progressiveActionFormState && "actionError" in progressiveActionFormState ? progressiveActionFormState : null;
|
|
1271
|
+
const actionHttpFallbackStatus = failedProgressiveActionResult ? progressiveActionHttpFallbackStatus(failedProgressiveActionResult.actionError) : null;
|
|
1272
|
+
const normalizedProgressiveActionError = actionHttpFallbackStatus === null || actionHttpFallbackStatus === 404 ? failedProgressiveActionResult?.actionError : { digest: "NEXT_NOT_FOUND" };
|
|
1268
1273
|
const pageResponse = withStoredSpecialErrorStatus(matchedResponseStage ? await matchedResponseStage(responseStageRequest(), {
|
|
1269
1274
|
kind: "app-page",
|
|
1270
1275
|
buildId: options.buildId,
|
|
@@ -1296,14 +1301,14 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1296
1301
|
clientReuseManifest,
|
|
1297
1302
|
cleanPathname,
|
|
1298
1303
|
displayPathname: canonicalPathname,
|
|
1299
|
-
formState,
|
|
1304
|
+
formState: progressiveActionFormState?.formState ?? null,
|
|
1300
1305
|
actionError: normalizedProgressiveActionError,
|
|
1301
|
-
actionFailed,
|
|
1306
|
+
actionFailed: failedProgressiveActionResult !== null,
|
|
1302
1307
|
handlerStart,
|
|
1303
1308
|
interceptionContext: interceptionSourceContext,
|
|
1304
1309
|
interceptionId: interceptionIdHeader,
|
|
1305
1310
|
interceptionPathname: cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname,
|
|
1306
|
-
isProgressiveActionRender,
|
|
1311
|
+
isProgressiveActionRender: progressiveActionFormState !== null,
|
|
1307
1312
|
isRscRequest,
|
|
1308
1313
|
middlewareContext,
|
|
1309
1314
|
mountedSlotsHeader,
|
|
@@ -1324,9 +1329,13 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1324
1329
|
searchParams: resolvedSearchParams,
|
|
1325
1330
|
renderMode
|
|
1326
1331
|
}), isRscRequest && request.headers.get("Next-Router-Prefetch") === "1" && request.headers.has("Next-Router-Segment-Prefetch"));
|
|
1327
|
-
if (
|
|
1332
|
+
if (progressiveActionFormState) return applyProgressiveActionSideEffects(pageResponse, progressiveActionFormState);
|
|
1328
1333
|
return pageResponse;
|
|
1329
1334
|
}
|
|
1335
|
+
function progressiveActionHttpFallbackStatus(actionError) {
|
|
1336
|
+
const actionErrorDigest = actionError && typeof actionError === "object" && "digest" in actionError ? String(actionError.digest) : null;
|
|
1337
|
+
return actionErrorDigest ? parseNextHttpErrorDigest(actionErrorDigest)?.status ?? null : null;
|
|
1338
|
+
}
|
|
1330
1339
|
/**
|
|
1331
1340
|
* Append `Set-Cookie` headers and the `x-action-revalidated` marker captured
|
|
1332
1341
|
* during progressive (no-JS) server action execution to the page render
|
|
@@ -1362,6 +1371,7 @@ function applyProgressiveActionSideEffects(response, sideEffects) {
|
|
|
1362
1371
|
/** Build the request-only handler without retaining the response renderer graph. */
|
|
1363
1372
|
function createAppRscRequestHandler(options) {
|
|
1364
1373
|
const handleAppRscRequestLifecycle = async (rawRequest, ctx, allowInternalRscDocumentFallback = false, dispatchResponseStage, responseStageProbeMode = null, transportedPrerenderState) => {
|
|
1374
|
+
const rawRequestSignal = rawRequest.signal;
|
|
1365
1375
|
const mwCtx = openForwardedMiddlewareContext(rawRequest.headers.get(VINEXT_MW_CTX_HEADER), options.devForwardedMiddlewareContextKey);
|
|
1366
1376
|
const pagesDataUrl = new URL(rawRequest.url);
|
|
1367
1377
|
const pagesDataInScope = !options.basePath || hasBasePath(pagesDataUrl.pathname, options.basePath);
|
|
@@ -1396,6 +1406,7 @@ function createAppRscRequestHandler(options) {
|
|
|
1396
1406
|
const requestContext = createRequestContext({
|
|
1397
1407
|
headersContext,
|
|
1398
1408
|
executionContext,
|
|
1409
|
+
requestSignal: executionContext?.requestSignal ?? rawRequestSignal,
|
|
1399
1410
|
unstableCacheRevalidation: "background"
|
|
1400
1411
|
});
|
|
1401
1412
|
let interceptionResponseUncacheable = false;
|
|
@@ -1423,6 +1434,7 @@ function createAppRscRequestHandler(options) {
|
|
|
1423
1434
|
basePath: options.basePath,
|
|
1424
1435
|
configHeaders: options.configHeaders,
|
|
1425
1436
|
i18nConfig: options.i18nConfig,
|
|
1437
|
+
restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(stripRscSuffix(new URL(rawRequest.url).pathname), options),
|
|
1426
1438
|
middlewareHeaders: middlewareContext.headers,
|
|
1427
1439
|
recordCacheability: dispatchResponseStage === void 0,
|
|
1428
1440
|
requestContext: preMiddlewareRequestContext
|
|
@@ -1443,7 +1455,7 @@ function createAppRscRequestHandler(options) {
|
|
|
1443
1455
|
};
|
|
1444
1456
|
const appRscHandler = async function appRscHandler(rawRequest, ctx, allowInternalRscDocumentFallback = false, dispatchResponseStage, responseStageProbeMode = null, transportedPrerenderState, detachedTrace = false) {
|
|
1445
1457
|
options.registerCacheAdapters();
|
|
1446
|
-
await options.ensureInstrumentation?.();
|
|
1458
|
+
await options.ensureInstrumentation?.(isExecutionContextLike(ctx) ? ctx : null);
|
|
1447
1459
|
const traceUrl = new URL(rawRequest.url);
|
|
1448
1460
|
return traceFrameworkRequest({
|
|
1449
1461
|
callback: () => handleAppRscRequestLifecycle(rawRequest, ctx, allowInternalRscDocumentFallback, dispatchResponseStage, responseStageProbeMode, transportedPrerenderState),
|
|
@@ -11,6 +11,11 @@ type FinalizeAppRscResponseOptions = {
|
|
|
11
11
|
* default-locale URLs (issue #1336, item 4).
|
|
12
12
|
*/
|
|
13
13
|
i18nConfig: NextI18nConfig | null;
|
|
14
|
+
/**
|
|
15
|
+
* Whether the root keeps its trailing slash when the default locale is
|
|
16
|
+
* spliced in (`shouldRestoreLocaleRootTrailingSlash` on the raw request).
|
|
17
|
+
*/
|
|
18
|
+
restoreLocaleRootTrailingSlash?: boolean;
|
|
14
19
|
/**
|
|
15
20
|
* Original pre-middleware request context.
|
|
16
21
|
* Next.js evaluates config header has/missing conditions against the
|
|
@@ -42,4 +47,5 @@ export declare function applyAppRscConfigHeaders(headers: Headers, request: Requ
|
|
|
42
47
|
* to redirects regardless.
|
|
43
48
|
*/
|
|
44
49
|
export declare function finalizeAppRscResponse(response: Response, request: Request, options: FinalizeAppRscResponseOptions): Promise<Response>;
|
|
45
|
-
//#endregion
|
|
50
|
+
//#endregion
|
|
51
|
+
export {};
|
|
@@ -32,7 +32,10 @@ async function applyAppRscConfigHeaders(headers, request, options) {
|
|
|
32
32
|
let pathname = url.pathname;
|
|
33
33
|
const hadBasePath = !options.basePath || hasBasePath(pathname, options.basePath);
|
|
34
34
|
pathname = stripBasePath(pathname, options.basePath);
|
|
35
|
-
const matchPathname = options.i18nConfig ? normalizeDefaultLocalePathname(pathname, options.i18nConfig, {
|
|
35
|
+
const matchPathname = options.i18nConfig ? normalizeDefaultLocalePathname(pathname, options.i18nConfig, {
|
|
36
|
+
hostname: url.hostname,
|
|
37
|
+
restoreRootTrailingSlash: options.restoreLocaleRootTrailingSlash
|
|
38
|
+
}) : pathname;
|
|
36
39
|
const { applyConfigHeadersToResponse } = await import("./config-headers.js");
|
|
37
40
|
applyConfigHeadersToResponse(headers, {
|
|
38
41
|
configHeaders: options.configHeaders,
|
|
@@ -71,9 +71,10 @@ function rematchAppWorkerResponseStageRoute(options, normalized, props) {
|
|
|
71
71
|
async function renderAppWorkerResponseStage(options, rawRequest, ctx, props, stageOptions) {
|
|
72
72
|
if (props.protocolVersion !== 11 || props.buildId !== options.buildId) return new Response("Incompatible vinext App response stage", { status: 409 });
|
|
73
73
|
if (props.kind === "app-full-request") return new Response("Invalid vinext App response stage", { status: 400 });
|
|
74
|
+
const rawRequestSignal = rawRequest.signal;
|
|
74
75
|
options.registerCacheAdapters();
|
|
75
|
-
await options.ensureInstrumentation?.();
|
|
76
76
|
const executionContext = isExecutionContextLike(ctx) ? ctx : getRequestExecutionContext() ?? null;
|
|
77
|
+
await options.ensureInstrumentation?.(executionContext);
|
|
77
78
|
const filteredHeaders = executionContext?.isInternalPagesRevalidation ? new Headers(rawRequest.headers) : filterInternalHeaders(rawRequest.headers);
|
|
78
79
|
filteredHeaders.delete(VINEXT_REVALIDATE_HOST_HEADER);
|
|
79
80
|
const request = cloneRequestWithHeaders(rawRequest, filteredHeaders);
|
|
@@ -103,6 +104,7 @@ async function renderAppWorkerResponseStage(options, rawRequest, ctx, props, sta
|
|
|
103
104
|
const requestContext = createRequestContext({
|
|
104
105
|
headersContext,
|
|
105
106
|
executionContext,
|
|
107
|
+
requestSignal: executionContext?.requestSignal ?? rawRequestSignal,
|
|
106
108
|
unstableCacheRevalidation: "background"
|
|
107
109
|
});
|
|
108
110
|
const middlewareContext = {
|