vinext 1.3.1 → 1.4.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 +25 -22
- package/THIRD_PARTY_LICENSES.md +47 -0
- package/dist/_virtual/_rolldown/runtime.js +3 -2
- package/dist/build/prerender.js +4 -3
- package/dist/build/report.d.ts +0 -14
- package/dist/build/report.js +1 -51
- package/dist/check.js +4 -7
- package/dist/cli.js +3 -0
- package/dist/client/dev-error-overlay-store.d.ts +1 -0
- package/dist/client/dev-error-overlay.d.ts +2 -0
- package/dist/client/dev-error-overlay.js +20 -4
- package/dist/client/navigation-runtime.d.ts +13 -1
- package/dist/client/navigation-runtime.js +1 -1
- package/dist/config/config-matchers.js +2 -0
- package/dist/config/destination-params.d.ts +2 -1
- package/dist/config/destination-params.js +52 -2
- package/dist/config/next-config.d.ts +25 -0
- package/dist/config/next-config.js +82 -4
- 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/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
- package/dist/entries/app-rsc-entry.js +17 -49
- package/dist/entries/app-rsc-manifest.js +3 -4
- package/dist/entries/app-ssr-entry.js +1 -0
- package/dist/entries/pages-server-entry.js +36 -9
- package/dist/index.js +112 -90
- 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/extensionless-dynamic-import.js +6 -2
- package/dist/plugins/next-intl-catalog.d.ts +12 -0
- package/dist/plugins/next-intl-catalog.js +85 -0
- package/dist/plugins/pages-node-externals.d.ts +1 -0
- package/dist/plugins/pages-node-externals.js +1 -1
- package/dist/plugins/strip-server-exports.js +2 -1
- package/dist/plugins/use-cache-callable.d.ts +1 -1
- package/dist/plugins/use-cache-callable.js +136 -94
- package/dist/routing/app-route-graph.d.ts +6 -0
- package/dist/routing/app-route-graph.js +9 -1
- package/dist/server/api-handler.js +21 -5
- package/dist/server/app-bfcache-identity.js +1 -1
- package/dist/server/app-browser-entry.js +86 -66
- package/dist/server/app-browser-history-controller.d.ts +5 -4
- package/dist/server/app-browser-history-controller.js +93 -15
- package/dist/server/app-browser-navigation-controller.d.ts +2 -2
- package/dist/server/app-browser-navigation-controller.js +1 -2
- package/dist/server/app-browser-rsc-redirect.js +7 -7
- package/dist/server/app-browser-server-action-client.d.ts +2 -0
- package/dist/server/app-browser-server-action-client.js +5 -4
- package/dist/server/app-browser-state.d.ts +2 -4
- package/dist/server/app-browser-state.js +9 -4
- package/dist/server/app-browser-supplemental-refresh.js +16 -1
- package/dist/server/app-browser-visible-commit.d.ts +1 -1
- package/dist/server/app-browser-visible-commit.js +4 -14
- package/dist/server/app-elements-wire.d.ts +6 -38
- package/dist/server/app-elements-wire.js +4 -41
- package/dist/server/app-elements.d.ts +2 -2
- package/dist/server/app-elements.js +2 -2
- package/dist/server/app-history-state.d.ts +2 -2
- package/dist/server/app-history-state.js +5 -2
- 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 +19 -1
- package/dist/server/app-optimistic-routing.js +43 -4
- package/dist/server/app-page-boundary-render.js +10 -14
- package/dist/server/app-page-boundary.js +2 -2
- package/dist/server/app-page-cache-finalizer.d.ts +12 -1
- package/dist/server/app-page-cache-finalizer.js +70 -29
- package/dist/server/app-page-cache.d.ts +13 -1
- package/dist/server/app-page-cache.js +31 -9
- package/dist/server/app-page-dispatch.d.ts +5 -11
- package/dist/server/app-page-dispatch.js +84 -155
- package/dist/server/app-page-element-builder.d.ts +2 -2
- package/dist/server/app-page-element-builder.js +13 -12
- package/dist/server/app-page-execution.d.ts +17 -52
- package/dist/server/app-page-execution.js +102 -95
- package/dist/server/app-page-head.d.ts +13 -0
- package/dist/server/app-page-head.js +44 -16
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +1 -0
- package/dist/server/app-page-http-access-fallback-metadata.js +2 -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-params.d.ts +0 -1
- package/dist/server/app-page-params.js +1 -14
- package/dist/server/app-page-probe.d.ts +3 -21
- package/dist/server/app-page-probe.js +4 -37
- package/dist/server/app-page-render.d.ts +2 -13
- package/dist/server/app-page-render.js +103 -234
- package/dist/server/app-page-request.d.ts +1 -3
- package/dist/server/app-page-request.js +1 -1
- package/dist/server/app-page-response.js +3 -3
- package/dist/server/app-page-route-wiring.d.ts +13 -6
- package/dist/server/app-page-route-wiring.js +86 -63
- package/dist/server/app-page-rsc-render-status.d.ts +27 -1
- package/dist/server/app-page-rsc-render-status.js +121 -13
- package/dist/server/app-page-stream.d.ts +12 -8
- package/dist/server/app-page-stream.js +4 -3
- package/dist/server/app-pages-bridge.d.ts +4 -0
- package/dist/server/app-pages-bridge.js +7 -3
- package/dist/server/app-render-dependency.d.ts +11 -4
- package/dist/server/app-render-dependency.js +86 -38
- package/dist/server/app-request-stage-dispatch.js +1 -1
- package/dist/server/app-request-stage-independent-entry.js +1 -1
- package/dist/server/app-route-handler-cache.js +2 -2
- package/dist/server/app-route-handler-dispatch.js +14 -9
- package/dist/server/app-route-handler-execution.js +11 -5
- 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.js +1 -1
- package/dist/server/app-route-handler-runtime.d.ts +1 -1
- package/dist/server/app-route-handler-runtime.js +28 -11
- package/dist/server/app-router-entry.js +1 -1
- package/dist/server/app-rsc-cache-busting.d.ts +12 -12
- package/dist/server/app-rsc-cache-busting.js +31 -72
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-error-handler.js +10 -2
- package/dist/server/app-rsc-errors.d.ts +8 -0
- package/dist/server/app-rsc-errors.js +11 -1
- package/dist/server/app-rsc-handler.d.ts +5 -5
- package/dist/server/app-rsc-handler.js +80 -83
- package/dist/server/app-rsc-request-normalization.d.ts +10 -16
- package/dist/server/app-rsc-request-normalization.js +12 -18
- package/dist/server/app-rsc-response-finalizer.js +2 -2
- package/dist/server/app-rsc-response-stage.js +9 -15
- package/dist/server/app-server-action-execution.d.ts +3 -1
- package/dist/server/app-server-action-execution.js +15 -8
- package/dist/server/app-ssr-entry.d.ts +8 -0
- package/dist/server/app-ssr-entry.js +22 -16
- package/dist/server/app-ssr-stream.js +1 -1
- package/dist/server/app-visited-response-cache.d.ts +36 -1
- package/dist/server/app-visited-response-cache.js +46 -5
- package/dist/server/app-worker-stages.d.ts +37 -6
- package/dist/server/app-worker-stages.js +81 -9
- package/dist/server/artifact-compatibility.d.ts +0 -1
- package/dist/server/artifact-compatibility.js +1 -10
- package/dist/server/bfcache-identity.d.ts +7 -0
- package/dist/server/bfcache-identity.js +10 -1
- package/dist/server/cache-proof.d.ts +1 -115
- package/dist/server/cache-proof.js +1 -544
- package/dist/server/cacheability-manifest.js +1 -2
- package/dist/server/cacheability-request.js +13 -8
- package/dist/server/dev-origin-check.d.ts +2 -1
- package/dist/server/dev-origin-check.js +2 -1
- package/dist/server/dev-server.js +6 -4
- package/dist/server/headers.d.ts +6 -3
- package/dist/server/headers.js +9 -5
- package/dist/server/image-optimization.d.ts +5 -0
- package/dist/server/image-optimization.js +6 -1
- package/dist/server/isr-cache.d.ts +8 -2
- package/dist/server/isr-cache.js +30 -2
- package/dist/server/metadata-route-response.js +32 -15
- package/dist/server/middleware-matcher.js +19 -6
- package/dist/server/middleware-runtime.js +6 -2
- package/dist/server/multi-stage.d.ts +57 -12
- package/dist/server/multi-stage.js +13 -1
- package/dist/server/navigation-planner.js +1 -1
- package/dist/server/pages-api-route.js +28 -19
- 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.d.ts +1 -1
- package/dist/server/pages-node-compat.js +54 -27
- package/dist/server/pages-page-data.js +2 -1
- package/dist/server/pages-page-handler.js +28 -26
- package/dist/server/pages-page-response.d.ts +9 -0
- package/dist/server/pages-page-response.js +18 -4
- package/dist/server/pages-request-pipeline.d.ts +8 -0
- package/dist/server/pages-request-pipeline.js +2 -2
- package/dist/server/pages-request-stage-entry.js +36 -14
- package/dist/server/pages-response-stage-entry.js +9 -3
- package/dist/server/pages-router-entry.js +3 -2
- package/dist/server/prod-server.d.ts +2 -2
- package/dist/server/prod-server.js +47 -9
- package/dist/server/request-error-log.d.ts +9 -0
- package/dist/server/request-error-log.js +13 -0
- package/dist/server/request-pipeline.d.ts +15 -4
- package/dist/server/request-pipeline.js +43 -15
- package/dist/server/rsc-completion-metadata.js +3 -0
- 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 +9 -0
- package/dist/server/static-file-cache.js +13 -2
- package/dist/server/worker-stages.d.ts +16 -3
- package/dist/server/worker-stages.js +23 -4
- package/dist/shims/cache-handler.js +2 -2
- package/dist/shims/cache-request-state.d.ts +23 -26
- package/dist/shims/cache-request-state.js +22 -57
- package/dist/shims/cache-runtime.d.ts +3 -1
- package/dist/shims/cache-runtime.js +94 -48
- package/dist/shims/cache.d.ts +16 -10
- package/dist/shims/cache.js +47 -36
- package/dist/shims/cacheability-classification.d.ts +2 -0
- package/dist/shims/cdn-cache.d.ts +22 -5
- package/dist/shims/client-hook-error.d.ts +2 -0
- package/dist/shims/client-hook-error.js +16 -1
- package/dist/shims/client-page-root.js +2 -2
- package/dist/shims/dynamic.js +9 -6
- package/dist/shims/error-boundary.js +2 -2
- 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 +39 -25
- package/dist/shims/form.js +2 -2
- package/dist/shims/headers.d.ts +10 -24
- package/dist/shims/headers.js +22 -70
- package/dist/shims/internal/cache-context-accessor.d.ts +1 -1
- package/dist/shims/internal/navigation-untracked.js +1 -1
- package/dist/shims/link.js +8 -11
- package/dist/shims/metadata.d.ts +23 -21
- package/dist/shims/metadata.js +62 -24
- package/dist/shims/navigation-server.js +1 -1
- package/dist/shims/navigation.d.ts +74 -7
- package/dist/shims/navigation.js +184 -31
- package/dist/shims/navigation.react-server.js +2 -2
- package/dist/shims/request-state-types.d.ts +3 -2
- package/dist/shims/slot.d.ts +16 -0
- package/dist/shims/slot.js +44 -9
- package/dist/shims/unified-request-context.d.ts +7 -1
- package/dist/shims/unified-request-context.js +3 -3
- package/dist/utils/cache-control-metadata.d.ts +5 -0
- package/dist/utils/cache-control-metadata.js +9 -1
- package/dist/utils/cache-life-profiles.d.ts +33 -0
- package/dist/utils/cache-life-profiles.js +111 -0
- package/dist/utils/middleware-request-headers.d.ts +14 -3
- package/dist/utils/middleware-request-headers.js +54 -7
- package/dist/utils/project.d.ts +2 -2
- package/dist/utils/project.js +3 -16
- 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/package.json +2 -1
- 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 -62
- package/dist/build/layout-classification.js +0 -98
- package/dist/build/route-classification-injector.d.ts +0 -33
- package/dist/build/route-classification-injector.js +0 -59
- package/dist/build/route-classification-manifest.d.ts +0 -54
- package/dist/build/route-classification-manifest.js +0 -143
- package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -11
- package/dist/server/app-browser-client-reuse-manifest.js +0 -101
- package/dist/server/app-layout-param-observation.d.ts +0 -42
- package/dist/server/app-layout-param-observation.js +0 -168
- package/dist/server/client-reuse-manifest.d.ts +0 -103
- package/dist/server/client-reuse-manifest.js +0 -209
- 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 -14
- package/dist/server/static-layout-client-reuse-proof.js +0 -33
- package/dist/utils/sorted-array.d.ts +0 -8
- package/dist/utils/sorted-array.js +0 -20
|
@@ -8,7 +8,7 @@ import { addBasePathToPathname, hasBasePath, stripBasePath } from "../utils/base
|
|
|
8
8
|
import "./app-rsc-vary.js";
|
|
9
9
|
import { ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_REWRITTEN_HEADER, VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, VINEXT_SPECIAL_ERROR_STATUS_HEADER } from "./headers.js";
|
|
10
10
|
import { badRequestResponse, notFoundResponse, notFoundStaticAssetResponse } from "./http-error-responses.js";
|
|
11
|
-
import { cloneRequestWithHeaders, cloneRequestWithUrl, filterInternalHeaders, normalizeTrailingSlash, normalizeTrailingSlashPathname, resolvePublicFileRoute } from "./request-pipeline.js";
|
|
11
|
+
import { cloneRequestWithHeaders, cloneRequestWithUrl, filterInternalHeaders, normalizeTrailingSlash, normalizeTrailingSlashPathname, resolvePublicFileRoute, stripRequestUrlFragment } from "./request-pipeline.js";
|
|
12
12
|
import { assetPrefixPathname, isNextStaticPath } from "../utils/asset-prefix.js";
|
|
13
13
|
import { normalizePathnameForRouteMatch, normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
14
14
|
import { patternToNextFormat } from "../routing/route-validation.js";
|
|
@@ -17,7 +17,6 @@ import { runOutsideWorkStoreScope } from "../shims/internal/work-store-scope.js"
|
|
|
17
17
|
import { isInterceptionMatchedUrlPath, normalizePath } from "./normalize-path.js";
|
|
18
18
|
import { normalizeDefaultLocalePathname, shouldRestoreLocaleRootTrailingSlash } from "./pages-i18n.js";
|
|
19
19
|
import { buildNextDataNotFoundResponse, normalizePagesDataRequest } from "./pages-data-route.js";
|
|
20
|
-
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
21
20
|
import { markRouteCacheabilityDynamic, preserveRouteCacheabilityResponsePolicy } from "../shims/cacheability-classification.js";
|
|
22
21
|
import { NEVER_CACHE_CONTROL, applyCdnResponseHeaders, captureCdnResponsePolicyOverrides, isCdnResponsePolicyHeader, reconcileCdnResponseHeadersAfterOuterPolicy } from "./cache-control.js";
|
|
23
22
|
import { isOnDemandRevalidateRequest } from "./revalidation-request.js";
|
|
@@ -28,29 +27,30 @@ import { traceFindPageComponents } from "./pages-execution-tracing.js";
|
|
|
28
27
|
import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isImageOptimizationPath, markImageOptimizationSignal, resolveDevImageRedirect } from "./image-optimization.js";
|
|
29
28
|
import { parseCacheabilityManifest } from "./cacheability-manifest.js";
|
|
30
29
|
import { getRenderedConcreteUrlPathsForRoute } from "./pregenerated-concrete-paths.js";
|
|
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, mergeMiddlewareResponseHeadersOntoResponse, withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
|
|
33
|
-
import { consumeResponseStageLinkProvenance, copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
|
|
34
|
-
import "./app-page-response.js";
|
|
35
|
-
import { parseNextHttpErrorDigest } from "./next-error-digest.js";
|
|
36
|
-
import { traceAppPageRender } from "./app-page-tracing.js";
|
|
37
30
|
import { openForwardedMiddlewareContext } from "./forwarded-middleware-context.js";
|
|
31
|
+
import { consumeResponseStageLinkProvenance, copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
|
|
38
32
|
import { setFrameworkRequestRoute, traceFrameworkRequest } from "./request-tracing.js";
|
|
33
|
+
import { mergeMiddlewareResponseHeaders, mergeMiddlewareResponseHeadersOntoResponse, withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
|
|
34
|
+
import { VINEXT_RSC_CACHE_BUSTING_SEARCH_PARAM, canonicalizeLoadingShellRscRequestHeaders, canonicalizePrewarmableRscRequestHeaders, createCanonicalRscRequestUrl, createRscRedirectLocation, createRscRequestUrl, hasRscCacheBustingSearchParam, resolveInvalidRscCacheBustingRequest, stripRscCacheBustingSearchParam } from "./app-rsc-cache-busting.js";
|
|
39
35
|
import { matchPrerenderRouteParamsPayload, readTrustedPrerenderRouteParams, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
|
|
40
36
|
import { createServerActionNotFoundResponse, getServerActionNotFoundMessage } from "./server-action-not-found.js";
|
|
41
37
|
import { isPossibleAppRouteActionRequest } from "./app-action-request.js";
|
|
38
|
+
import "./app-page-response.js";
|
|
39
|
+
import { parseNextHttpErrorDigest } from "./next-error-digest.js";
|
|
42
40
|
import { isAppRouteHandlerRoute } from "./app-rsc-route-matching.js";
|
|
41
|
+
import { traceAppPageRender } from "./app-page-tracing.js";
|
|
43
42
|
import { normalizeInterceptionContextHeader } from "./app-interception-context-header.js";
|
|
44
43
|
import { buildPageCacheTags } from "./implicit-tags.js";
|
|
45
44
|
import { buildPostMwRequestContext } from "./app-post-middleware-context.js";
|
|
46
45
|
import { pickRootParams, setRootParams } from "../shims/root-params.js";
|
|
47
46
|
import { createRouteTreePrefetchResponse, isRouteTreePrefetchRequest } from "./app-route-tree-prefetch.js";
|
|
48
|
-
import { createSharedAppPageCacheIdentity, isStaticCandidateAppPageDispatch, prepareSharedAppPageDispatch, withoutAppPageDispatchQuery } from "./app-worker-stages.js";
|
|
47
|
+
import { createSharedAppCacheIdentity, createSharedAppPageCacheIdentity, createSharedAppRouteCacheIdentity, createSharedHybridPagesCacheIdentity, isStaticCandidateAppPageDispatch, prepareSharedAppPageDispatch, withoutAppPageDispatchQuery } from "./app-worker-stages.js";
|
|
49
48
|
import { flattenErrorCauses } from "../utils/error-cause.js";
|
|
50
49
|
import { applyAppRscConfigHeaders, finalizeAppRscResponse, markAppRscResponseConfigHeadersApplied } from "./app-rsc-response-finalizer.js";
|
|
51
50
|
import { normalizeRscRequest } from "./app-rsc-request-normalization.js";
|
|
52
51
|
import { hasPagesPreviewCookie } from "./pages-response-stage.js";
|
|
53
52
|
import { runWithPrerenderWorkUnit } from "./prerender-work-unit-setup.js";
|
|
53
|
+
import { adapterSharedCacheIdentity, adapterUsesSharedCacheIdentity, pagesCacheIdentityOrigin, pagesPageSharesAcrossHosts } from "./shared-cache-identity.js";
|
|
54
54
|
import { consumePagesResponseStagePolicyOwner, withoutResponseStageVary } from "./response-stage-policy.js";
|
|
55
55
|
//#region src/server/app-rsc-handler.ts
|
|
56
56
|
const HAS_CONFIG_HEADERS = process.env.__VINEXT_HAS_CONFIG_HEADERS !== "false";
|
|
@@ -132,10 +132,6 @@ function readCacheabilityRequestProjection(options) {
|
|
|
132
132
|
};
|
|
133
133
|
return parsedCacheabilityRequestProjection.manifest;
|
|
134
134
|
}
|
|
135
|
-
function adapterUsesQueryFreeCacheIdentity() {
|
|
136
|
-
const adapter = getCdnCacheAdapter();
|
|
137
|
-
return adapter.requiresCompletedResponseAdmission === true && adapter.responseStageCacheIdentity === "query-free";
|
|
138
|
-
}
|
|
139
135
|
function hasUrlParserDotSegment(pathname) {
|
|
140
136
|
return pathname.split("/").some((segment) => {
|
|
141
137
|
const decodedDots = segment.replaceAll(/%2e/gi, ".");
|
|
@@ -261,13 +257,6 @@ function requestWithoutRscCacheBustingSearchParam(request) {
|
|
|
261
257
|
stripRscCacheBustingSearchParam(url);
|
|
262
258
|
return cloneRequestWithUrl(request, url.toString());
|
|
263
259
|
}
|
|
264
|
-
function requestWithoutRscSuffix(request) {
|
|
265
|
-
const url = new URL(request.url);
|
|
266
|
-
const pathname = stripRscSuffix(url.pathname);
|
|
267
|
-
if (pathname === url.pathname) return request;
|
|
268
|
-
url.pathname = pathname;
|
|
269
|
-
return cloneRequestWithUrl(request, url.toString());
|
|
270
|
-
}
|
|
271
260
|
/** Send a response with the never-cache policy, rebuilding immutable headers. */
|
|
272
261
|
function withNeverCacheControl(response) {
|
|
273
262
|
const applyNoStore = (headers) => {
|
|
@@ -312,7 +301,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
312
301
|
if (request.headers.has("X-Vinext-Interception-Context") || request.headers.has("X-Vinext-Interception-Id")) setInterceptionResponseUncacheable(true);
|
|
313
302
|
return normalized;
|
|
314
303
|
}
|
|
315
|
-
const { url, isRscRequest, interceptionContextHeader, interceptionIdHeader, mountedSlotsHeader, renderMode,
|
|
304
|
+
const { url, isRscRequest, interceptionContextHeader, interceptionIdHeader, mountedSlotsHeader, renderMode, hadBasePath } = normalized;
|
|
316
305
|
setFrameworkRequestRoute(void 0, isRscRequest);
|
|
317
306
|
const hasRawInterceptionContext = isRscRequest && request.headers.has("X-Vinext-Interception-Context");
|
|
318
307
|
if (hasRawInterceptionContext) setInterceptionResponseUncacheable(true);
|
|
@@ -324,8 +313,8 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
324
313
|
setInterceptionResponseUncacheable(true);
|
|
325
314
|
return badRequestResponse();
|
|
326
315
|
}
|
|
327
|
-
const {
|
|
328
|
-
let
|
|
316
|
+
const { pathname, requestPathname } = normalized;
|
|
317
|
+
let cleanPathname = pathname;
|
|
329
318
|
let resolvedUrl = cleanPathname + url.search;
|
|
330
319
|
const originalResolvedUrl = serializeResolvedUrl(resolvedUrl, url);
|
|
331
320
|
const getResolvedSearchParams = () => new URL(resolvedUrl, url).searchParams;
|
|
@@ -335,7 +324,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
335
324
|
hadBasePath
|
|
336
325
|
};
|
|
337
326
|
let cleanPathnameIsRequestPathname = true;
|
|
338
|
-
const matchCleanPathname = () => cleanPathnameIsRequestPathname && options.matchRequestRoute ? options.matchRequestRoute(
|
|
327
|
+
const matchCleanPathname = () => cleanPathnameIsRequestPathname && options.matchRequestRoute ? options.matchRequestRoute(requestPathname) : options.matchRoute(cleanPathname);
|
|
339
328
|
if (interceptionIdHeader !== null && (!isRscRequest || interceptionContextHeader === null || request.method !== "GET" && request.method !== "HEAD" || !options.hasInterceptionId(interceptionIdHeader))) {
|
|
340
329
|
setInterceptionResponseUncacheable(true);
|
|
341
330
|
return badRequestResponse();
|
|
@@ -352,7 +341,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
352
341
|
if (sourceMatch.interceptionSourceIsConcrete !== void 0) return sourceMatch.interceptionSourceIsConcrete;
|
|
353
342
|
return sourceContext !== null && (options.matchRequestRoute ?? options.matchRoute)(sourceContext)?.route === sourceMatch.route;
|
|
354
343
|
};
|
|
355
|
-
if (provesConcreteInterceptionSource(hadBasePath && hasRawInterceptionContext && interceptionContextHeader !== null ? options.matchInterceptRoute?.(
|
|
344
|
+
if (provesConcreteInterceptionSource(hadBasePath && hasRawInterceptionContext && interceptionContextHeader !== null ? options.matchInterceptRoute?.(requestPathname, interceptionContextHeader, interceptionIdHeader) ?? null : null)) setInterceptionResponseUncacheable(false);
|
|
356
345
|
if (pathname === "/__vinext/prerender/static-params" || pathname === "/__vinext/prerender/pages-static-paths" || pathname === "/__vinext/prerender/metadata-routes") {
|
|
357
346
|
const { handleAppPrerenderEndpoint } = await import("./app-prerender-endpoints.js");
|
|
358
347
|
const prerenderEndpointResponse = await handleAppPrerenderEndpoint(request, {
|
|
@@ -368,16 +357,16 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
368
357
|
if (prerenderEndpointResponse) return prerenderEndpointResponse;
|
|
369
358
|
}
|
|
370
359
|
if (!isDataRequest && !options.skipTrailingSlashRedirect) {
|
|
371
|
-
const trailingSlashRedirect = options.trailingSlash && options.isMetadataRoutePath && await options.isMetadataRoutePath(cleanPathname) ? null : normalizeTrailingSlash(
|
|
360
|
+
const trailingSlashRedirect = options.trailingSlash && options.isMetadataRoutePath && await options.isMetadataRoutePath(cleanPathname) ? null : normalizeTrailingSlash(requestPathname, hadBasePath ? options.basePath : "", options.trailingSlash, url.search);
|
|
372
361
|
if (trailingSlashRedirect) return trailingSlashRedirect;
|
|
373
362
|
}
|
|
374
363
|
const matchPathname = (p) => normalizeDefaultLocalePathname(p, options.i18nConfig, { hostname: url.hostname });
|
|
375
|
-
const restoreLocaleRootTrailingSlash = !pagesDataRequest && shouldRestoreLocaleRootTrailingSlash(
|
|
376
|
-
const headerMatchPathname = normalizeDefaultLocalePathname(
|
|
364
|
+
const restoreLocaleRootTrailingSlash = !pagesDataRequest && shouldRestoreLocaleRootTrailingSlash(url.pathname, options);
|
|
365
|
+
const headerMatchPathname = normalizeDefaultLocalePathname(requestPathname, options.i18nConfig, {
|
|
377
366
|
hostname: url.hostname,
|
|
378
367
|
restoreRootTrailingSlash: restoreLocaleRootTrailingSlash
|
|
379
368
|
});
|
|
380
|
-
const redirectPathname = matchPathname(
|
|
369
|
+
const redirectPathname = matchPathname(requestPathname);
|
|
381
370
|
const configMatchers = HAS_CONFIG_REDIRECTS && options.configRedirects.length ? await import("../config/config-matchers.js") : null;
|
|
382
371
|
const redirect = configMatchers ? configMatchers.matchRedirect(redirectPathname, options.configRedirects, preMiddlewareRequestContext, basePathState, dispatchResponseStage ? void 0 : markConditionalRedirectCacheability) : null;
|
|
383
372
|
if (configMatchers && redirect) {
|
|
@@ -403,9 +392,8 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
403
392
|
};
|
|
404
393
|
const runMiddleware = isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate")) ? void 0 : options.runMiddleware;
|
|
405
394
|
const isolatedMiddlewareSource = runMiddleware && request.body && !request.bodyUsed ? request.clone() : null;
|
|
406
|
-
const
|
|
407
|
-
const
|
|
408
|
-
const isolatedMiddlewareRequest = isolatedMiddlewareSource ? requestWithoutRscCacheBustingSearchParam(requestWithoutRscSuffix(isolatedMiddlewareSource)) : void 0;
|
|
395
|
+
const userlandRequest = requestWithoutRscCacheBustingSearchParam(request);
|
|
396
|
+
const isolatedMiddlewareRequest = isolatedMiddlewareSource ? requestWithoutRscCacheBustingSearchParam(isolatedMiddlewareSource) : void 0;
|
|
409
397
|
let didMiddlewareRewrite = false;
|
|
410
398
|
let didMiddlewareRewritePathname = false;
|
|
411
399
|
let resolvedPathnameHasBasePath = hadBasePath;
|
|
@@ -417,7 +405,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
417
405
|
const middlewareResult = await runMiddleware({
|
|
418
406
|
cleanPathname,
|
|
419
407
|
context: middlewareContext,
|
|
420
|
-
externalRewriteRequest:
|
|
408
|
+
externalRewriteRequest: request,
|
|
421
409
|
hadBasePath,
|
|
422
410
|
isDataRequest: isMiddlewareDataRequest,
|
|
423
411
|
middlewareRequest: isolatedMiddlewareRequest,
|
|
@@ -452,8 +440,8 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
452
440
|
cleanPathname = middlewareResult.cleanPathname;
|
|
453
441
|
didMiddlewareRewrite = middlewareResult.rewritten;
|
|
454
442
|
if (didMiddlewareRewrite) resolvedPathnameHasBasePath = middlewareResult.rewriteHadBasePath ?? true;
|
|
455
|
-
if (didMiddlewareRewrite || cleanPathname !==
|
|
456
|
-
didMiddlewareRewritePathname = cleanPathname !==
|
|
443
|
+
if (didMiddlewareRewrite || cleanPathname !== pathname) cleanPathnameIsRequestPathname = false;
|
|
444
|
+
didMiddlewareRewritePathname = cleanPathname !== pathname;
|
|
457
445
|
if (middlewareResult.search !== null) url.search = middlewareResult.search;
|
|
458
446
|
resolvedUrl = cleanPathname + url.search;
|
|
459
447
|
}
|
|
@@ -509,7 +497,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
509
497
|
const rscPath = canonicalRsc.navigation ? createCanonicalRscRequestUrl(dispatchRequest.url) : await createRscRequestUrl(dispatchRequest.url, canonicalRsc.headers);
|
|
510
498
|
dispatchRequest = cloneRequestWithUrl(dispatchRequest, new URL(rscPath, dispatchRequest.url).toString());
|
|
511
499
|
}
|
|
512
|
-
const cacheIdentity = cache
|
|
500
|
+
const cacheIdentity = cache !== "shared" || stageProps.kind === "app-full-request" || stageProps.kind === "hybrid-pages" || !adapterUsesSharedCacheIdentity() ? void 0 : adapterSharedCacheIdentity() !== "query-free" || responseStagePolicy !== null ? createSharedAppCacheIdentity(dispatchRequest, stageProps) : stageProps.kind === "app-page" && stageProps.matchKind !== "interception" && stageProps.interceptionContext === null && stageProps.interceptionId === null && stageProps.mountedSlotsHeader === null ? createSharedAppPageCacheIdentity(dispatchRequest, stageProps) : stageProps.kind === "app-metadata" || stageProps.kind === "app-route-handler" && stageProps.matchKind !== "interception" ? createSharedAppRouteCacheIdentity(dispatchRequest, stageProps) : createSharedAppCacheIdentity(dispatchRequest, stageProps);
|
|
513
501
|
let response = await dispatchResponseStage(dispatchRequest, stageProps, cacheIdentity ? {
|
|
514
502
|
cache,
|
|
515
503
|
cacheIdentity
|
|
@@ -540,7 +528,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
540
528
|
};
|
|
541
529
|
const renderMetadataRouteIfMatched = async () => {
|
|
542
530
|
if (!filesystemRouteEligible || (options.isMetadataRoute ? !options.isMetadataRoute(cleanPathname) : !options.handleMetadataRouteRequest)) return null;
|
|
543
|
-
const metadataRoutePathname = cleanPathnameIsRequestPathname ?
|
|
531
|
+
const metadataRoutePathname = cleanPathnameIsRequestPathname ? requestPathname : cleanPathname;
|
|
544
532
|
const metadataResponseStage = transportedResponseStage ?? options.renderResponseStageLocally;
|
|
545
533
|
if (metadataResponseStage) {
|
|
546
534
|
const response = await metadataResponseStage(responseStageRequest(), {
|
|
@@ -553,7 +541,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
553
541
|
isRscRequest,
|
|
554
542
|
middlewareCookieOverlay,
|
|
555
543
|
mountedSlotsHeader,
|
|
556
|
-
protocolVersion:
|
|
544
|
+
protocolVersion: 13,
|
|
557
545
|
requestOrigin: url.origin,
|
|
558
546
|
renderMode,
|
|
559
547
|
resolvedUrl,
|
|
@@ -620,9 +608,9 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
620
608
|
basePathState: currentBasePathState(),
|
|
621
609
|
clearRequestContext: options.clearRequestContext,
|
|
622
610
|
middlewareContext,
|
|
623
|
-
request
|
|
611
|
+
request,
|
|
624
612
|
requestContext: requestContextForResolvedUrl(postMiddlewareRequestContext, resolvedUrl, url),
|
|
625
|
-
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ?
|
|
613
|
+
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ? requestPathname : cleanPathname),
|
|
626
614
|
rewrites: [rewrite],
|
|
627
615
|
validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
|
|
628
616
|
}, matchPathname(cleanPathname), dispatchResponseStage === void 0);
|
|
@@ -667,7 +655,6 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
667
655
|
const publicFileResponse = resolvePublicFileRoute({
|
|
668
656
|
cleanPathname: cleanPathnameIsRequestPathname ? cleanPathname : normalizePathnameForRouteMatch(cleanPathname),
|
|
669
657
|
middlewareContext,
|
|
670
|
-
pathname,
|
|
671
658
|
publicFiles: options.publicFiles,
|
|
672
659
|
request
|
|
673
660
|
});
|
|
@@ -684,7 +671,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
684
671
|
params: {}
|
|
685
672
|
});
|
|
686
673
|
const directPreActionMatch = filesystemRouteEligible ? matchCleanPathname() : null;
|
|
687
|
-
const preActionRoutePathname = cleanPathnameIsRequestPathname ?
|
|
674
|
+
const preActionRoutePathname = cleanPathnameIsRequestPathname ? requestPathname : cleanPathname;
|
|
688
675
|
let interceptionSourceContext = interceptionSourcePathname !== null ? interceptionContextHeader : null;
|
|
689
676
|
let interceptionSourceMatch = filesystemRouteEligible && interceptionSourcePathname !== null && interceptionContextHeader !== null ? options.matchInterceptRoute?.(preActionRoutePathname, interceptionContextHeader, interceptionIdHeader) ?? null : null;
|
|
690
677
|
let hasVerifiedInterceptionSource = provesConcreteInterceptionSource(interceptionSourceMatch);
|
|
@@ -753,7 +740,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
753
740
|
sourceMiddlewareResult = await runWithHeadersContext(sourceHeadersContext, () => runMiddleware({
|
|
754
741
|
cleanPathname: decodedSourceRequestPathname,
|
|
755
742
|
context: sourceMiddlewareContext,
|
|
756
|
-
externalRewriteRequest:
|
|
743
|
+
externalRewriteRequest: request,
|
|
757
744
|
hadBasePath: resolvedPathnameHasBasePath,
|
|
758
745
|
isDataRequest: isMiddlewareDataRequest,
|
|
759
746
|
request: sourceMiddlewareRequest,
|
|
@@ -796,21 +783,22 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
796
783
|
sourceRulesPathname = sourceMiddlewareResult.cleanPathname;
|
|
797
784
|
}
|
|
798
785
|
}
|
|
799
|
-
if (HAS_CONFIG_REWRITES && options.configRewrites.beforeFiles.length) {
|
|
786
|
+
if (HAS_CONFIG_REWRITES && (options.configRewrites.beforeFiles.length || options.configRewrites.afterFiles.length)) {
|
|
800
787
|
const { matchRewrite } = await import("../config/config-matchers.js");
|
|
801
788
|
const sourceRewriteContext = requestContextForResolvedUrl(buildPostMwRequestContext(userlandRequest), resolvedUrl, url);
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
789
|
+
const rewriteSource = (rewrites, stopAtRoute) => {
|
|
790
|
+
let didRewriteSource = false;
|
|
791
|
+
for (const rewrite of rewrites) {
|
|
792
|
+
const destination = matchRewrite(matchPathname(sourceRulesPathname), [rewrite], sourceRewriteContext, currentBasePathState(), matchPathname(sourceRulesPathname), dispatchResponseStage === void 0 ? markConditionalRewriteCacheability : void 0);
|
|
793
|
+
if (!destination) continue;
|
|
794
|
+
if (isExternalUrl(destination) || destination.includes("?")) return false;
|
|
795
|
+
sourceRulesPathname = pathnameForResolvedUrl(destination);
|
|
796
|
+
didRewriteSource = true;
|
|
797
|
+
if (stopAtRoute && options.matchRoute(sourceRulesPathname)) break;
|
|
809
798
|
}
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
if (didRewriteSource && !adoptRewrittenInterceptionSource(sourceRulesPathname)) {
|
|
799
|
+
return !didRewriteSource || adoptRewrittenInterceptionSource(sourceRulesPathname);
|
|
800
|
+
};
|
|
801
|
+
if (!rewriteSource(options.configRewrites.beforeFiles, false) || interceptionSourceMatch.route.isDynamic && !rewriteSource(options.configRewrites.afterFiles, true)) {
|
|
814
802
|
options.clearRequestContext();
|
|
815
803
|
return notFoundResponse();
|
|
816
804
|
}
|
|
@@ -835,7 +823,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
835
823
|
const isInterceptionMatch = interceptionPreActionMatch !== null;
|
|
836
824
|
const rendersRawRequestMatch = options.matchRawRequestRoute !== void 0 && (isPossibleAppRouteActionRequest(request) || isDraftModeRequest(request, options.draftModeSecret) || isDraftModeEnabled());
|
|
837
825
|
const usesRawRequestMatch = () => rendersRawRequestMatch && cleanPathnameIsRequestPathname && !isInterceptionMatch;
|
|
838
|
-
const renderedRouteMatch = (routeMatch) => routeMatch !== null && usesRawRequestMatch() ? options.matchRawRequestRoute(
|
|
826
|
+
const renderedRouteMatch = (routeMatch) => routeMatch !== null && usesRawRequestMatch() ? options.matchRawRequestRoute(requestPathname) ?? routeMatch : routeMatch;
|
|
839
827
|
const renderedPreActionMatch = renderedRouteMatch(preActionMatch);
|
|
840
828
|
if (renderedPreActionMatch) setRootParams(pickRootParams(renderedPreActionMatch.params, renderedPreActionMatch.route.rootParamNames));
|
|
841
829
|
if (pagesDataRequest && didMiddlewareRewritePathname && preActionMatch && !preActionMatch.route.isDynamic) {
|
|
@@ -858,9 +846,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
858
846
|
if (routeMatch && isAppRouteHandlerRoute(routeMatch.route)) return null;
|
|
859
847
|
if (!options.handleServerActionRequest) return createMissingServerActionResponse(options, actionId);
|
|
860
848
|
const sourceConfigHeaders = new Headers();
|
|
861
|
-
|
|
862
|
-
sourceConfigUrl.pathname = hadBasePath ? addBasePathToPathname(requestCleanPathname, options.basePath) : requestCleanPathname;
|
|
863
|
-
await applyAppRscConfigHeaders(sourceConfigHeaders, cloneRequestWithUrl(request, sourceConfigUrl.toString()), {
|
|
849
|
+
await applyAppRscConfigHeaders(sourceConfigHeaders, request, {
|
|
864
850
|
basePath: options.basePath,
|
|
865
851
|
configHeaders: options.configHeaders,
|
|
866
852
|
i18nConfig: options.i18nConfig,
|
|
@@ -919,12 +905,17 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
919
905
|
let match = preActionMatch;
|
|
920
906
|
const renderPagesForMatchKind = async (matchKind) => {
|
|
921
907
|
if (!filesystemRouteEligible) return null;
|
|
922
|
-
const pagesRouteUrl = cleanPathnameIsRequestPathname ?
|
|
908
|
+
const pagesRouteUrl = cleanPathnameIsRequestPathname ? requestPathname + resolvedUrl.slice(pathnameForResolvedUrl(resolvedUrl).length) : resolvedUrl;
|
|
923
909
|
let sharedOuterPolicyNeedsReconciliation = false;
|
|
924
|
-
const dispatchPagesResponseStage = dispatchResponseStage ? async (stageRequest, resourceKind, dataKind, hasRequestAwareDocument) => {
|
|
910
|
+
const dispatchPagesResponseStage = dispatchResponseStage ? async (stageRequest, resourceKind, dataKind, hasRequestAwareDocument, runsInitialProps) => {
|
|
925
911
|
const pagesOnDemandRevalidate = resourceKind === "page" && isOnDemandRevalidateRequest(stageRequest.headers.get("x-prerender-revalidate"));
|
|
926
912
|
const cache = responseStageProbeMode || pagesOnDemandRevalidate || hasPagesPreviewCookie(stageRequest.headers.get("cookie")) || resourceKind === "page" && dataKind === "static" && hasRequestAwareDocument ? "bypass" : canUseSharedWorkerResponseStage ? "shared" : "bypass";
|
|
927
|
-
|
|
913
|
+
const renderRequest = responseStageRequest(stageRequest);
|
|
914
|
+
const sharedAcrossHosts = (cache === "shared" || responseStageProbeMode !== null) && resourceKind === "page" && pagesPageSharesAcrossHosts({
|
|
915
|
+
dataKind,
|
|
916
|
+
runsInitialProps
|
|
917
|
+
}) && adapterUsesSharedCacheIdentity();
|
|
918
|
+
const hybridProps = {
|
|
928
919
|
kind: "hybrid-pages",
|
|
929
920
|
buildId: options.buildId,
|
|
930
921
|
cacheability: {
|
|
@@ -945,13 +936,18 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
945
936
|
matchKind,
|
|
946
937
|
middlewareCookieOverlay,
|
|
947
938
|
preHandlerHeaders: cache === "shared" && resourceKind === "page" && dataKind === "static" ? null : [...await loadPreHandlerResponseHeaders()],
|
|
948
|
-
protocolVersion:
|
|
939
|
+
protocolVersion: 13,
|
|
949
940
|
requestOrigin: url.origin,
|
|
950
941
|
resourceKind,
|
|
951
942
|
requestUrl: request.url,
|
|
952
943
|
resolvedUrl: pagesRouteUrl,
|
|
953
|
-
scriptNonce: scriptNonce ?? null
|
|
954
|
-
|
|
944
|
+
scriptNonce: scriptNonce ?? null,
|
|
945
|
+
sharedAcrossHosts
|
|
946
|
+
};
|
|
947
|
+
let response = await dispatchResponseStage(renderRequest, hybridProps, cache === "shared" && sharedAcrossHosts ? {
|
|
948
|
+
cache,
|
|
949
|
+
cacheIdentity: createSharedHybridPagesCacheIdentity(renderRequest, hybridProps, pagesCacheIdentityOrigin(request.url, options.i18nConfig))
|
|
950
|
+
} : { cache });
|
|
955
951
|
const policyOwner = resourceKind === "page" ? consumePagesResponseStagePolicyOwner(response) : {
|
|
956
952
|
owner: null,
|
|
957
953
|
response
|
|
@@ -1003,9 +999,9 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1003
999
|
basePathState: currentBasePathState(),
|
|
1004
1000
|
clearRequestContext: options.clearRequestContext,
|
|
1005
1001
|
middlewareContext,
|
|
1006
|
-
request
|
|
1002
|
+
request,
|
|
1007
1003
|
requestContext: requestContextForResolvedUrl(postMiddlewareRequestContext, resolvedUrl, url),
|
|
1008
|
-
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ?
|
|
1004
|
+
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ? requestPathname : cleanPathname),
|
|
1009
1005
|
rewrites: [rewrite],
|
|
1010
1006
|
validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
|
|
1011
1007
|
}, matchPathname(cleanPathname), dispatchResponseStage === void 0);
|
|
@@ -1051,9 +1047,9 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1051
1047
|
basePathState: currentBasePathState(),
|
|
1052
1048
|
clearRequestContext: options.clearRequestContext,
|
|
1053
1049
|
middlewareContext,
|
|
1054
|
-
request
|
|
1050
|
+
request,
|
|
1055
1051
|
requestContext: requestContextForResolvedUrl(postMiddlewareRequestContext, resolvedUrl, url),
|
|
1056
|
-
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ?
|
|
1052
|
+
paramsPathname: matchPathname(cleanPathnameIsRequestPathname ? requestPathname : cleanPathname),
|
|
1057
1053
|
rewrites: [rewrite],
|
|
1058
1054
|
validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
|
|
1059
1055
|
}, matchPathname(cleanPathname), dispatchResponseStage === void 0);
|
|
@@ -1090,7 +1086,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1090
1086
|
if (match) break;
|
|
1091
1087
|
}
|
|
1092
1088
|
if (interceptionCacheProofInvalidated && interceptionSourceContext !== null) {
|
|
1093
|
-
const finalInterceptionTargetPathname = cleanPathnameIsRequestPathname ?
|
|
1089
|
+
const finalInterceptionTargetPathname = cleanPathnameIsRequestPathname ? requestPathname : cleanPathname;
|
|
1094
1090
|
const finalInterceptionSourceMatch = filesystemRouteEligible && match !== null ? options.matchInterceptRoute?.(finalInterceptionTargetPathname, interceptionSourceContext, interceptionIdHeader) ?? null : null;
|
|
1095
1091
|
const hasVerifiedFinalInterceptionSource = hasVerifiedInterceptionSource && interceptionSourceMatch !== null && provesConcreteInterceptionSource(finalInterceptionSourceMatch) && finalInterceptionSourceMatch?.route === interceptionSourceMatch.route && haveSamePageParams(finalInterceptionSourceMatch.params, interceptionSourceMatch.params);
|
|
1096
1092
|
if (interceptionIdHeader !== null && !hasVerifiedFinalInterceptionSource) {
|
|
@@ -1134,7 +1130,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1134
1130
|
const finalRouteMatch = renderedRouteMatch(match);
|
|
1135
1131
|
setRootParams(finalRouteMatch ? pickRootParams(finalRouteMatch.params, finalRouteMatch.route.rootParamNames) : null);
|
|
1136
1132
|
if (isServerActionRequest) {
|
|
1137
|
-
const serverActionResponse = await handleServerAction(finalRouteMatch, cleanPathnameIsRequestPathname ?
|
|
1133
|
+
const serverActionResponse = await handleServerAction(finalRouteMatch, cleanPathnameIsRequestPathname ? requestPathname : cleanPathname);
|
|
1138
1134
|
if (serverActionResponse) return serverActionResponse;
|
|
1139
1135
|
} else {
|
|
1140
1136
|
const progressiveActionResult = await handleProgressiveAction(finalRouteMatch, match);
|
|
@@ -1159,7 +1155,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1159
1155
|
isRscRequest,
|
|
1160
1156
|
middlewareCookieOverlay,
|
|
1161
1157
|
mountedSlotsHeader,
|
|
1162
|
-
protocolVersion:
|
|
1158
|
+
protocolVersion: 13,
|
|
1163
1159
|
requestOrigin: url.origin,
|
|
1164
1160
|
renderMode,
|
|
1165
1161
|
resolvedUrl,
|
|
@@ -1180,7 +1176,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1180
1176
|
}
|
|
1181
1177
|
match = renderedRouteMatch(match);
|
|
1182
1178
|
const { route, params } = match;
|
|
1183
|
-
const requestPathnameDiffersFromCachePath =
|
|
1179
|
+
const requestPathnameDiffersFromCachePath = requestPathname !== cleanPathname;
|
|
1184
1180
|
const rawRequestPathnameIsObservable = isInterceptionMatch || route.routeHandler != null || typeof route.__loadRouteHandler === "function";
|
|
1185
1181
|
if ((!isInterceptionMatch || requestPathnameDiffersFromCachePath) && options.matchRequestRoute) {
|
|
1186
1182
|
const cachePathMatch = options.matchRoute(cleanPathname);
|
|
@@ -1207,7 +1203,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1207
1203
|
const isPrerenderFallbackShell = prerenderRouteParamsMatch?.kind === "fallback-shell";
|
|
1208
1204
|
const renderParams = prerenderRouteParams ?? params;
|
|
1209
1205
|
const responseStageMatchKind = isInterceptionMatch ? "interception" : cleanPathnameIsRequestPathname && options.matchRequestRoute ? usesRawRequestMatch() ? "raw-request" : "request" : "resolved";
|
|
1210
|
-
const responseStageRoutePathname = isInterceptionMatch ? preActionRoutePathname : cleanPathnameIsRequestPathname ?
|
|
1206
|
+
const responseStageRoutePathname = isInterceptionMatch ? preActionRoutePathname : cleanPathnameIsRequestPathname ? requestPathname || "/" : cleanPathname || "/";
|
|
1211
1207
|
const matchedResponseStage = transportedResponseStage ?? options.renderResponseStageLocally;
|
|
1212
1208
|
let runtimeFallbackShells = [];
|
|
1213
1209
|
if (options.createPprFallbackShells && request.method === "GET" && !isRscRequest && !isPrerenderFallbackShell && route.params) runtimeFallbackShells = options.createPprFallbackShells({
|
|
@@ -1223,7 +1219,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1223
1219
|
const rootParams = pickRootParams(renderParams, route.rootParamNames);
|
|
1224
1220
|
setRootParams(rootParams);
|
|
1225
1221
|
if (route.routeHandler) {
|
|
1226
|
-
const routeHandlerRequest = isEdgeRouteHandler(route.routeHandler) ? userlandRequest :
|
|
1222
|
+
const routeHandlerRequest = isEdgeRouteHandler(route.routeHandler) ? userlandRequest : request;
|
|
1227
1223
|
const routeHandlerUrl = new URL(routeHandlerRequest.url);
|
|
1228
1224
|
const internalRscValues = isEdgeRouteHandler(route.routeHandler) ? [] : routeHandlerUrl.searchParams.getAll(VINEXT_RSC_CACHE_BUSTING_SEARCH_PARAM);
|
|
1229
1225
|
routeHandlerUrl.search = resolvedSearchParams.toString();
|
|
@@ -1246,7 +1242,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1246
1242
|
middlewareCookieOverlay,
|
|
1247
1243
|
mountedSlotsHeader,
|
|
1248
1244
|
params,
|
|
1249
|
-
protocolVersion:
|
|
1245
|
+
protocolVersion: 13,
|
|
1250
1246
|
requestOrigin: url.origin,
|
|
1251
1247
|
renderMode,
|
|
1252
1248
|
resolvedUrl,
|
|
@@ -1288,7 +1284,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1288
1284
|
middlewareCookieOverlay,
|
|
1289
1285
|
mountedSlotsHeader,
|
|
1290
1286
|
params,
|
|
1291
|
-
protocolVersion:
|
|
1287
|
+
protocolVersion: 13,
|
|
1292
1288
|
requestOrigin: url.origin,
|
|
1293
1289
|
renderMode,
|
|
1294
1290
|
resolvedUrl,
|
|
@@ -1298,7 +1294,6 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1298
1294
|
}).then(composeResponseStageResponse) : await options.dispatchMatchedPage({
|
|
1299
1295
|
bypassInterceptionContextCache,
|
|
1300
1296
|
cachePathname,
|
|
1301
|
-
clientReuseManifest,
|
|
1302
1297
|
cleanPathname,
|
|
1303
1298
|
displayPathname: canonicalPathname,
|
|
1304
1299
|
formState: progressiveActionFormState?.formState ?? null,
|
|
@@ -1307,7 +1302,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
|
|
|
1307
1302
|
handlerStart,
|
|
1308
1303
|
interceptionContext: interceptionSourceContext,
|
|
1309
1304
|
interceptionId: interceptionIdHeader,
|
|
1310
|
-
interceptionPathname: cleanPathnameIsRequestPathname ?
|
|
1305
|
+
interceptionPathname: cleanPathnameIsRequestPathname ? requestPathname : cleanPathname,
|
|
1311
1306
|
isProgressiveActionRender: progressiveActionFormState !== null,
|
|
1312
1307
|
isRscRequest,
|
|
1313
1308
|
middlewareContext,
|
|
@@ -1370,8 +1365,9 @@ function applyProgressiveActionSideEffects(response, sideEffects) {
|
|
|
1370
1365
|
}
|
|
1371
1366
|
/** Build the request-only handler without retaining the response renderer graph. */
|
|
1372
1367
|
function createAppRscRequestHandler(options) {
|
|
1373
|
-
const handleAppRscRequestLifecycle = async (
|
|
1374
|
-
const rawRequestSignal =
|
|
1368
|
+
const handleAppRscRequestLifecycle = async (hostRequest, ctx, allowInternalRscDocumentFallback = false, dispatchResponseStage, responseStageProbeMode = null, transportedPrerenderState) => {
|
|
1369
|
+
const rawRequestSignal = hostRequest.signal;
|
|
1370
|
+
const rawRequest = stripRequestUrlFragment(hostRequest);
|
|
1375
1371
|
const mwCtx = openForwardedMiddlewareContext(rawRequest.headers.get(VINEXT_MW_CTX_HEADER), options.devForwardedMiddlewareContextKey);
|
|
1376
1372
|
const pagesDataUrl = new URL(rawRequest.url);
|
|
1377
1373
|
const pagesDataInScope = !options.basePath || hasBasePath(pagesDataUrl.pathname, options.basePath);
|
|
@@ -1406,6 +1402,7 @@ function createAppRscRequestHandler(options) {
|
|
|
1406
1402
|
const requestContext = createRequestContext({
|
|
1407
1403
|
headersContext,
|
|
1408
1404
|
executionContext,
|
|
1405
|
+
isOnDemandRevalidate: isOnDemandRevalidateRequest(request.headers.get(PRERENDER_REVALIDATE_HEADER)),
|
|
1409
1406
|
requestSignal: executionContext?.requestSignal ?? rawRequestSignal,
|
|
1410
1407
|
unstableCacheRevalidation: "background"
|
|
1411
1408
|
});
|
|
@@ -1434,7 +1431,7 @@ function createAppRscRequestHandler(options) {
|
|
|
1434
1431
|
basePath: options.basePath,
|
|
1435
1432
|
configHeaders: options.configHeaders,
|
|
1436
1433
|
i18nConfig: options.i18nConfig,
|
|
1437
|
-
restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(
|
|
1434
|
+
restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(new URL(rawRequest.url).pathname, options),
|
|
1438
1435
|
middlewareHeaders: middlewareContext.headers,
|
|
1439
1436
|
recordCacheability: dispatchResponseStage === void 0,
|
|
1440
1437
|
requestContext: preMiddlewareRequestContext
|
|
@@ -1462,7 +1459,7 @@ function createAppRscRequestHandler(options) {
|
|
|
1462
1459
|
detached: detachedTrace,
|
|
1463
1460
|
getStatus: (response) => response?.status,
|
|
1464
1461
|
headers: rawRequest.headers,
|
|
1465
|
-
isRsc:
|
|
1462
|
+
isRsc: rawRequest.headers.get("RSC") === "1",
|
|
1466
1463
|
method: rawRequest.method,
|
|
1467
1464
|
target: traceUrl.pathname + traceUrl.search
|
|
1468
1465
|
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ClientReuseManifestParseResult } from "./client-reuse-manifest.js";
|
|
2
1
|
import { AppRscRenderMode } from "./app-rsc-render-mode.js";
|
|
3
2
|
import { normalizeMountedSlotsHeader } from "./app-mounted-slots-header.js";
|
|
4
3
|
//#region src/server/app-rsc-request-normalization.d.ts
|
|
@@ -7,11 +6,9 @@ export type NormalizedRscRequest = {
|
|
|
7
6
|
url: URL;
|
|
8
7
|
/** Normalized pathname with basePath stripped. Used for all internal routing. */
|
|
9
8
|
pathname: string;
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
requestCleanPathname: string;
|
|
14
|
-
/** True when the request targets a canonical `.rsc` payload URL. */
|
|
9
|
+
/** Original encoded request pathname with basePath stripped. */
|
|
10
|
+
requestPathname: string;
|
|
11
|
+
/** True when the request selects the RSC payload with `RSC: 1`. */
|
|
15
12
|
isRscRequest: boolean;
|
|
16
13
|
/** Sanitized X-Vinext-Interception-Context header (null bytes stripped). null when absent. */
|
|
17
14
|
interceptionContextHeader: string | null;
|
|
@@ -21,8 +18,6 @@ export type NormalizedRscRequest = {
|
|
|
21
18
|
mountedSlotsHeader: string | null;
|
|
22
19
|
/** Semantic RSC payload mode. HTML requests always normalize to "navigation". */
|
|
23
20
|
renderMode: AppRscRenderMode;
|
|
24
|
-
/** Parsed ClientReuseManifest hint. Verification and skip authorization happen later. */
|
|
25
|
-
clientReuseManifest: ClientReuseManifestParseResult;
|
|
26
21
|
/** Whether the incoming pathname included the configured basePath. */
|
|
27
22
|
hadBasePath: boolean;
|
|
28
23
|
};
|
|
@@ -45,14 +40,13 @@ export type NormalizedRscRequest = {
|
|
|
45
40
|
* 4. Collapse double-slashes, resolve `.` and `..` segments (normalizePath)
|
|
46
41
|
* 5. basePath check + strip — 404 when pathname lacks the basePath prefix.
|
|
47
42
|
* `/__vinext/` bypasses this for internal prerender endpoints.
|
|
48
|
-
* 6. RSC detection:
|
|
49
|
-
* `_rsc` cache-busting query is
|
|
50
|
-
* responses do not share the
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* 11. Parse ClientReuseManifest hints on canonical RSC payload requests
|
|
43
|
+
* 6. RSC detection: `RSC: 1`, as in Next.js. A `.rsc` suffix is an ordinary
|
|
44
|
+
* part of the pathname. The internal `_rsc` cache-busting query is
|
|
45
|
+
* validated separately so full-route Flight responses do not share the
|
|
46
|
+
* canonical HTML URL in caches that ignore Vary.
|
|
47
|
+
* 7. Sanitize X-Vinext-Interception-Context — strip null bytes (header injection)
|
|
48
|
+
* 8. Normalize x-vinext-mounted-slots — dedup and sort for canonical cache keys
|
|
49
|
+
* 9. Read semantic render mode for refresh/action payload rendering
|
|
56
50
|
*
|
|
57
51
|
* @returns A 400 or 404 Response for invalid or out-of-scope inputs,
|
|
58
52
|
* or a NormalizedRscRequest for valid requests.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { hasBasePath, stripBasePath } from "../utils/base-path.js";
|
|
2
2
|
import { NEXT_ROUTER_STATE_TREE_HEADER, NEXT_URL_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_INTERCEPTION_ID_HEADER, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_RSC_RENDER_MODE_HEADER } from "./app-rsc-vary.js";
|
|
3
|
-
import
|
|
3
|
+
import "./headers.js";
|
|
4
4
|
import { badRequestResponse, notFoundResponse } from "./http-error-responses.js";
|
|
5
5
|
import { guardProtocolRelativeUrl } from "./request-pipeline.js";
|
|
6
6
|
import { assetPrefixPathname, isNextStaticPath } from "../utils/asset-prefix.js";
|
|
@@ -8,8 +8,7 @@ import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
|
8
8
|
import { normalizePath } from "./normalize-path.js";
|
|
9
9
|
import { normalizeMountedSlotsHeader } from "./app-mounted-slots-header.js";
|
|
10
10
|
import { APP_RSC_RENDER_MODE_NAVIGATION, APP_RSC_RENDER_MODE_PREFETCH_EMPTY, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL, parseAppRscRenderMode } from "./app-rsc-render-mode.js";
|
|
11
|
-
import { VINEXT_RSC_CACHE_BUSTING_SEARCH_PARAM
|
|
12
|
-
import { parseClientReuseManifestHeader } from "./client-reuse-manifest.js";
|
|
11
|
+
import { VINEXT_RSC_CACHE_BUSTING_SEARCH_PARAM } from "./app-rsc-cache-busting.js";
|
|
13
12
|
import { normalizeInterceptionContextHeader } from "./app-interception-context-header.js";
|
|
14
13
|
//#region src/server/app-rsc-request-normalization.ts
|
|
15
14
|
function extractFlightRouterStatePath(value, depth = 0) {
|
|
@@ -79,14 +78,13 @@ function tryNormalizeComparablePathAndSearch(value, basePath, baseUrl) {
|
|
|
79
78
|
* 4. Collapse double-slashes, resolve `.` and `..` segments (normalizePath)
|
|
80
79
|
* 5. basePath check + strip — 404 when pathname lacks the basePath prefix.
|
|
81
80
|
* `/__vinext/` bypasses this for internal prerender endpoints.
|
|
82
|
-
* 6. RSC detection:
|
|
83
|
-
* `_rsc` cache-busting query is
|
|
84
|
-
* responses do not share the
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* 11. Parse ClientReuseManifest hints on canonical RSC payload requests
|
|
81
|
+
* 6. RSC detection: `RSC: 1`, as in Next.js. A `.rsc` suffix is an ordinary
|
|
82
|
+
* part of the pathname. The internal `_rsc` cache-busting query is
|
|
83
|
+
* validated separately so full-route Flight responses do not share the
|
|
84
|
+
* canonical HTML URL in caches that ignore Vary.
|
|
85
|
+
* 7. Sanitize X-Vinext-Interception-Context — strip null bytes (header injection)
|
|
86
|
+
* 8. Normalize x-vinext-mounted-slots — dedup and sort for canonical cache keys
|
|
87
|
+
* 9. Read semantic render mode for refresh/action payload rendering
|
|
90
88
|
*
|
|
91
89
|
* @returns A 400 or 404 Response for invalid or out-of-scope inputs,
|
|
92
90
|
* or a NormalizedRscRequest for valid requests.
|
|
@@ -112,9 +110,7 @@ function normalizeRscRequest(request, basePath, allowOutsideBasePath = false, as
|
|
|
112
110
|
requestPathname = stripBasePath(requestPathname, basePath);
|
|
113
111
|
}
|
|
114
112
|
}
|
|
115
|
-
const isRscRequest =
|
|
116
|
-
const cleanPathname = stripRscSuffix(pathname);
|
|
117
|
-
const requestCleanPathname = stripRscSuffix(requestPathname);
|
|
113
|
+
const isRscRequest = request.headers.get("RSC") === "1";
|
|
118
114
|
const interceptionContextHeader = normalizeInterceptionContextHeader(request.headers.get(VINEXT_INTERCEPTION_CONTEXT_HEADER));
|
|
119
115
|
const rawInterceptionId = request.headers.get(VINEXT_INTERCEPTION_ID_HEADER);
|
|
120
116
|
if (rawInterceptionId !== null && (rawInterceptionId.length > 4096 || !rawInterceptionId.startsWith("interception:"))) return badRequestResponse();
|
|
@@ -126,7 +122,7 @@ function normalizeRscRequest(request, basePath, allowOutsideBasePath = false, as
|
|
|
126
122
|
const routerState = parsePrefetchRouterState(request.headers.get(NEXT_ROUTER_STATE_TREE_HEADER));
|
|
127
123
|
if (nextUrl && routerState) {
|
|
128
124
|
const targetUrl = new URL(url);
|
|
129
|
-
targetUrl.pathname =
|
|
125
|
+
targetUrl.pathname = pathname;
|
|
130
126
|
targetUrl.searchParams.delete(VINEXT_RSC_CACHE_BUSTING_SEARCH_PARAM);
|
|
131
127
|
const routerPathAndSearch = tryNormalizeComparablePathAndSearch(routerState.pathAndSearch, basePath, url);
|
|
132
128
|
const nextPathAndSearch = tryNormalizeComparablePathAndSearch(nextUrl, basePath, url);
|
|
@@ -135,12 +131,10 @@ function normalizeRscRequest(request, basePath, allowOutsideBasePath = false, as
|
|
|
135
131
|
}
|
|
136
132
|
}
|
|
137
133
|
return {
|
|
138
|
-
clientReuseManifest: isRscRequest ? parseClientReuseManifestHeader(request.headers.get(VINEXT_CLIENT_REUSE_MANIFEST_HEADER)) : { kind: "absent" },
|
|
139
134
|
hadBasePath,
|
|
140
135
|
url,
|
|
141
136
|
pathname,
|
|
142
|
-
|
|
143
|
-
requestCleanPathname,
|
|
137
|
+
requestPathname,
|
|
144
138
|
isRscRequest,
|
|
145
139
|
interceptionContextHeader,
|
|
146
140
|
interceptionIdHeader,
|
|
@@ -6,9 +6,9 @@ import { normalizeDefaultLocalePathname } from "./pages-i18n.js";
|
|
|
6
6
|
import { isNonCacheableCacheControl } from "../shims/cdn-cache.js";
|
|
7
7
|
import { captureRouteCacheabilityResponsePolicy } from "../shims/cacheability-classification.js";
|
|
8
8
|
import { NO_STORE_CACHE_CONTROL, applyCdnResponseHeaders, captureCdnResponsePolicyHeaders, hasExplicitNonCacheableResponsePolicy, isCdnResponsePolicyHeader } from "./cache-control.js";
|
|
9
|
-
import "./app-rsc-cache-busting.js";
|
|
10
|
-
import { mergeVaryHeader } from "./middleware-response-headers.js";
|
|
11
9
|
import { hasPostConfigLinkHeaders } from "./app-response-header-provenance.js";
|
|
10
|
+
import { mergeVaryHeader } from "./middleware-response-headers.js";
|
|
11
|
+
import "./app-rsc-cache-busting.js";
|
|
12
12
|
//#region src/server/app-rsc-response-finalizer.ts
|
|
13
13
|
const HAS_CONFIG_HEADERS = process.env.__VINEXT_HAS_CONFIG_HEADERS !== "false";
|
|
14
14
|
const configHeadersAlreadyApplied = /* @__PURE__ */ new WeakSet();
|