vinext 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -10
- package/dist/build/app-page-static-eligibility.d.ts +15 -0
- package/dist/build/app-page-static-eligibility.js +82 -0
- package/dist/build/client-build-config.d.ts +10 -0
- package/dist/build/client-build-config.js +18 -2
- package/dist/build/pages-client-assets-module.d.ts +8 -0
- package/dist/build/pages-client-assets-module.js +21 -1
- package/dist/build/prerender-paths.js +8 -81
- package/dist/build/prerender.js +33 -8
- package/dist/build/run-prerender.js +1 -1
- package/dist/build/server-manifest.d.ts +7 -0
- package/dist/build/server-manifest.js +11 -1
- package/dist/build/ssr-manifest.d.ts +2 -0
- package/dist/build/ssr-manifest.js +6 -2
- package/dist/cache/cache-adapters-virtual.d.ts +7 -1
- package/dist/cache/cache-adapters-virtual.js +3 -3
- package/dist/check.js +7 -6
- package/dist/cli.js +2 -1
- package/dist/client/client-redirect-matcher.d.ts +14 -0
- package/dist/client/client-redirect-matcher.js +37 -0
- package/dist/client/client-redirects.d.ts +27 -0
- package/dist/client/client-redirects.js +28 -0
- package/dist/client/client-rewrites.d.ts +2 -1
- package/dist/client/client-rewrites.js +1 -1
- package/dist/client/navigation-runtime.d.ts +11 -0
- package/dist/client/navigation-runtime.js +1 -1
- package/dist/config/config-matchers.d.ts +26 -11
- package/dist/config/config-matchers.js +81 -82
- package/dist/config/destination-params.d.ts +47 -0
- package/dist/config/destination-params.js +116 -0
- package/dist/config/next-config.d.ts +14 -0
- package/dist/config/next-config.js +21 -3
- package/dist/entries/app-rsc-entry.d.ts +6 -0
- package/dist/entries/app-rsc-entry.js +84 -49
- package/dist/entries/pages-client-entry.js +3 -1
- package/dist/entries/pages-server-entry.js +13 -37
- package/dist/index.d.ts +7 -2
- package/dist/index.js +193 -73
- package/dist/init-cloudflare.d.ts +9 -0
- package/dist/init-cloudflare.js +107 -31
- package/dist/init-platform.d.ts +4 -0
- package/dist/init-platform.js +27 -2
- package/dist/init.d.ts +1 -0
- package/dist/init.js +67 -3
- package/dist/plugins/ast-scope.d.ts +7 -0
- package/dist/plugins/ast-scope.js +59 -3
- package/dist/plugins/cache-flight-codec.d.ts +19 -0
- package/dist/plugins/cache-flight-codec.js +68 -0
- package/dist/plugins/commonjs-esm-facade.d.ts +35 -0
- package/dist/plugins/commonjs-esm-facade.js +80 -0
- package/dist/plugins/dynamic-preload-metadata.d.ts +1 -1
- package/dist/plugins/dynamic-preload-metadata.js +9 -8
- package/dist/plugins/fonts.d.ts +8 -11
- package/dist/plugins/fonts.js +71 -34
- package/dist/plugins/ignore-dynamic-requests.d.ts +1 -1
- package/dist/plugins/ignore-dynamic-requests.js +3 -4
- package/dist/plugins/middleware-server-only.d.ts +5 -4
- package/dist/plugins/middleware-server-only.js +8 -5
- package/dist/plugins/pages-node-externals.js +1 -1
- package/dist/plugins/rsc-scan-glob-imports.d.ts +19 -0
- package/dist/plugins/rsc-scan-glob-imports.js +50 -0
- package/dist/plugins/strip-server-exports.js +262 -98
- package/dist/plugins/transform-result.d.ts +9 -5
- package/dist/plugins/transitive-externals.js +1 -1
- package/dist/plugins/typeof-window.d.ts +2 -2
- package/dist/plugins/use-cache-callable.js +8 -2
- package/dist/plugins/worker-server-only-imports.d.ts +20 -0
- package/dist/plugins/worker-server-only-imports.js +31 -0
- package/dist/plugins/worker-use-server.d.ts +25 -0
- package/dist/plugins/worker-use-server.js +129 -0
- package/dist/routing/file-matcher.d.ts +1 -0
- package/dist/routing/file-matcher.js +1 -1
- package/dist/server/api-handler.d.ts +1 -0
- package/dist/server/api-handler.js +19 -8
- package/dist/server/app-browser-action-result.d.ts +1 -1
- package/dist/server/app-browser-action-result.js +9 -2
- package/dist/server/app-browser-entry.js +11 -7
- package/dist/server/app-browser-history-controller.d.ts +2 -0
- package/dist/server/app-browser-history-controller.js +8 -0
- package/dist/server/app-browser-interception-context.js +26 -2
- package/dist/server/app-browser-navigation-controller.d.ts +7 -1
- package/dist/server/app-browser-navigation-controller.js +94 -11
- package/dist/server/app-browser-server-action-client.js +1 -1
- package/dist/server/app-fallback-renderer.d.ts +2 -0
- package/dist/server/app-fallback-renderer.js +1 -0
- package/dist/server/app-history-state.d.ts +3 -0
- package/dist/server/app-history-state.js +7 -0
- package/dist/server/app-middleware.d.ts +11 -0
- package/dist/server/app-middleware.js +19 -3
- package/dist/server/app-optimistic-routing.js +1 -1
- package/dist/server/app-page-boundary-render.d.ts +5 -0
- package/dist/server/app-page-boundary-render.js +6 -4
- package/dist/server/app-page-cache-finalizer.d.ts +11 -0
- package/dist/server/app-page-cache-finalizer.js +41 -7
- package/dist/server/app-page-cache-render.d.ts +18 -0
- package/dist/server/app-page-cache-render.js +63 -43
- package/dist/server/app-page-cache.d.ts +6 -1
- package/dist/server/app-page-cache.js +28 -8
- package/dist/server/app-page-dispatch.d.ts +12 -2
- package/dist/server/app-page-dispatch.js +51 -33
- package/dist/server/app-page-element-builder.d.ts +7 -0
- package/dist/server/app-page-element-builder.js +27 -42
- package/dist/server/app-page-execution.d.ts +15 -12
- package/dist/server/app-page-execution.js +30 -40
- package/dist/server/app-page-head.d.ts +5 -0
- package/dist/server/app-page-head.js +9 -3
- package/dist/server/app-page-ppr-runtime.js +1 -1
- package/dist/server/app-page-probe.d.ts +0 -109
- package/dist/server/app-page-probe.js +3 -136
- package/dist/server/app-page-render-identity.d.ts +0 -1
- package/dist/server/app-page-render-identity.js +1 -1
- package/dist/server/app-page-render-observation.js +3 -3
- package/dist/server/app-page-render.d.ts +13 -5
- package/dist/server/app-page-render.js +219 -119
- package/dist/server/app-page-request.d.ts +0 -1
- package/dist/server/app-page-request.js +54 -17
- package/dist/server/app-page-response.d.ts +4 -3
- package/dist/server/app-page-response.js +4 -3
- package/dist/server/app-page-route-wiring.d.ts +17 -5
- package/dist/server/app-page-route-wiring.js +57 -35
- package/dist/server/app-page-rsc-render-status.d.ts +48 -0
- package/dist/server/app-page-rsc-render-status.js +54 -0
- package/dist/server/app-page-stream.d.ts +15 -8
- package/dist/server/app-page-stream.js +6 -0
- package/dist/server/app-pages-bridge.d.ts +1 -1
- package/dist/server/app-pages-bridge.js +2 -3
- package/dist/server/app-prerender-endpoints.js +9 -6
- package/dist/server/app-request-stage-dispatch.js +7 -3
- package/dist/server/app-request-stage-independent-entry.js +29 -9
- package/dist/server/app-response-header-provenance.d.ts +2 -0
- package/dist/server/app-response-header-provenance.js +10 -4
- package/dist/server/app-response-stage-entry.js +10 -2
- package/dist/server/app-route-handler-cache.d.ts +1 -0
- package/dist/server/app-route-handler-cache.js +1 -0
- package/dist/server/app-route-handler-dispatch.d.ts +1 -0
- package/dist/server/app-route-handler-dispatch.js +6 -3
- package/dist/server/app-route-handler-execution.d.ts +1 -0
- package/dist/server/app-route-handler-execution.js +1 -0
- package/dist/server/app-route-handler-runtime.d.ts +4 -1
- package/dist/server/app-route-handler-runtime.js +45 -24
- package/dist/server/app-router-entry.js +27 -8
- package/dist/server/app-rsc-cache-busting.js +1 -1
- package/dist/server/app-rsc-errors.js +20 -16
- package/dist/server/app-rsc-handler.d.ts +11 -0
- package/dist/server/app-rsc-handler.js +291 -125
- package/dist/server/app-rsc-request-normalization.d.ts +3 -1
- package/dist/server/app-rsc-request-normalization.js +4 -2
- package/dist/server/app-rsc-response-stage.d.ts +1 -1
- package/dist/server/app-rsc-response-stage.js +10 -6
- package/dist/server/app-rsc-route-matching.d.ts +9 -1
- package/dist/server/app-rsc-route-matching.js +36 -19
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-server-action-execution.d.ts +2 -1
- package/dist/server/app-server-action-execution.js +62 -23
- package/dist/server/app-ssr-entry.d.ts +3 -2
- package/dist/server/app-ssr-entry.js +8 -5
- package/dist/server/app-ssr-stream.d.ts +6 -1
- package/dist/server/app-ssr-stream.js +34 -15
- package/dist/server/app-worker-stages.d.ts +7 -2
- package/dist/server/app-worker-stages.js +4 -4
- package/dist/server/cacheability-request.js +11 -7
- package/dist/server/client-build-files.d.ts +16 -0
- package/dist/server/client-build-files.js +36 -0
- package/dist/server/client-reuse-manifest.js +1 -1
- package/dist/server/config-headers.js +2 -0
- package/dist/server/dev-server.js +50 -29
- package/dist/server/dev-stack-sourcemap.js +18 -23
- package/dist/server/document-initial-head.d.ts +0 -11
- package/dist/server/document-initial-head.js +1 -1
- package/dist/server/forwarded-middleware-context.d.ts +5 -0
- package/dist/server/forwarded-middleware-context.js +22 -0
- package/dist/server/headers.d.ts +18 -1
- package/dist/server/headers.js +19 -2
- package/dist/server/http-conditional.d.ts +11 -0
- package/dist/server/http-conditional.js +10 -1
- package/dist/server/http-error-responses.d.ts +1 -1
- package/dist/server/image-optimization.d.ts +54 -0
- package/dist/server/image-optimization.js +118 -9
- package/dist/server/isr-cache.d.ts +10 -0
- package/dist/server/isr-cache.js +43 -8
- package/dist/server/metadata-route-response.js +9 -8
- package/dist/server/middleware-matcher-pattern.js +8 -4
- package/dist/server/middleware-matcher.d.ts +2 -0
- package/dist/server/middleware-matcher.js +23 -2
- package/dist/server/middleware-response-headers.js +2 -0
- package/dist/server/middleware-runtime.d.ts +13 -0
- package/dist/server/middleware-runtime.js +33 -20
- package/dist/server/middleware.d.ts +1 -1
- package/dist/server/middleware.js +3 -1
- package/dist/server/multi-stage.d.ts +19 -0
- package/dist/server/navigation-planner.js +1 -1
- package/dist/server/node-response-signal.d.ts +16 -0
- package/dist/server/node-response-signal.js +26 -0
- package/dist/server/normalize-path.d.ts +0 -13
- package/dist/server/normalize-path.js +1 -34
- package/dist/server/open-redirect.d.ts +47 -0
- package/dist/server/open-redirect.js +74 -1
- package/dist/server/pages-api-route.d.ts +3 -2
- package/dist/server/pages-api-route.js +4 -3
- package/dist/server/pages-cache-tag.d.ts +12 -0
- package/dist/server/pages-cache-tag.js +19 -0
- package/dist/server/pages-client-assets.d.ts +2 -0
- package/dist/server/pages-data-route.d.ts +10 -0
- package/dist/server/pages-data-route.js +19 -2
- package/dist/server/pages-document-asset-props.d.ts +5 -1
- package/dist/server/pages-document-asset-props.js +13 -5
- package/dist/server/pages-document-splice.d.ts +19 -0
- package/dist/server/pages-document-splice.js +55 -0
- package/dist/server/pages-i18n.d.ts +12 -1
- package/dist/server/pages-i18n.js +18 -4
- package/dist/server/pages-node-compat.d.ts +16 -5
- package/dist/server/pages-node-compat.js +20 -12
- package/dist/server/pages-page-data.d.ts +32 -24
- package/dist/server/pages-page-data.js +50 -120
- package/dist/server/pages-page-handler.d.ts +0 -6
- package/dist/server/pages-page-handler.js +209 -130
- package/dist/server/pages-page-response.d.ts +12 -6
- package/dist/server/pages-page-response.js +41 -34
- package/dist/server/pages-request-pipeline.d.ts +10 -2
- package/dist/server/pages-request-pipeline.js +37 -18
- package/dist/server/pages-request-stage-entry.d.ts +6 -0
- package/dist/server/pages-request-stage-entry.js +79 -16
- package/dist/server/pages-response-stage-entry.js +4 -0
- package/dist/server/pages-revalidate.js +1 -1
- package/dist/server/pages-router-entry.js +4 -3
- package/dist/server/prerender-manifest.d.ts +3 -3
- package/dist/server/prerender-manifest.js +4 -3
- package/dist/server/prerender-work-unit-setup.js +4 -0
- package/dist/server/prod-server.d.ts +20 -7
- package/dist/server/prod-server.js +343 -129
- package/dist/server/proper-error.d.ts +4 -0
- package/dist/server/proper-error.js +31 -0
- package/dist/server/request-pipeline.d.ts +24 -9
- package/dist/server/request-pipeline.js +24 -9
- package/dist/server/response-compression.d.ts +43 -0
- package/dist/server/response-compression.js +111 -0
- package/dist/server/revalidation-request.d.ts +1 -0
- package/dist/server/revalidation-request.js +1 -1
- package/dist/server/rsc-stream-hints.js +31 -2
- package/dist/server/seed-cache.d.ts +1 -0
- package/dist/server/seed-cache.js +15 -11
- package/dist/server/server-reference-loader.d.ts +4 -0
- package/dist/server/server-reference-loader.js +29 -0
- package/dist/server/socket-error-backstop.d.ts +23 -1
- package/dist/server/socket-error-backstop.js +69 -17
- package/dist/server/static-file-signal.d.ts +15 -4
- package/dist/server/static-file-signal.js +46 -12
- package/dist/server/worker-image-optimization.d.ts +34 -0
- package/dist/server/worker-image-optimization.js +86 -0
- package/dist/server/worker-stages.d.ts +1 -1
- package/dist/server/worker-stages.js +2 -2
- package/dist/server/worker-utils.d.ts +8 -3
- package/dist/server/worker-utils.js +12 -7
- package/dist/shims/app-router-scroll.js +4 -1
- package/dist/shims/app-router-tree-context.d.ts +5 -0
- package/dist/shims/app-router-tree-context.js +27 -0
- package/dist/shims/cache-adapter-instantiate.d.ts +50 -0
- package/dist/shims/cache-adapter-instantiate.js +118 -0
- package/dist/shims/cache-callable-runtime.d.ts +6 -42
- package/dist/shims/cache-callable-runtime.js +65 -174
- package/dist/shims/cache-flight-arguments.d.ts +22 -0
- package/dist/shims/cache-flight-arguments.js +56 -0
- package/dist/shims/cache-handler.js +1 -9
- package/dist/shims/cache-request-state.d.ts +15 -0
- package/dist/shims/cache-request-state.js +31 -8
- package/dist/shims/cache-runtime.d.ts +12 -20
- package/dist/shims/cache-runtime.js +166 -225
- package/dist/shims/cache.d.ts +4 -4
- package/dist/shims/cache.js +44 -16
- package/dist/shims/cacheability-classification.d.ts +7 -0
- package/dist/shims/cdn-cache.d.ts +8 -0
- package/dist/shims/cdn-cache.js +17 -1
- package/dist/shims/disable-smooth-scroll.d.ts +3 -0
- package/dist/shims/disable-smooth-scroll.js +36 -0
- package/dist/shims/document-placeholders.d.ts +19 -0
- package/dist/shims/document-placeholders.js +45 -0
- package/dist/shims/document.js +21 -5
- package/dist/shims/dynamic-preload-chunks.d.ts +1 -0
- package/dist/shims/dynamic-preload-chunks.js +13 -9
- package/dist/shims/dynamic.d.ts +1 -1
- package/dist/shims/dynamic.js +60 -8
- package/dist/shims/error-boundary-navigation.d.ts +7 -0
- package/dist/shims/error-boundary-navigation.js +19 -1
- package/dist/shims/error-boundary.d.ts +10 -10
- package/dist/shims/error-boundary.js +26 -7
- package/dist/shims/fetch-cache-state.d.ts +66 -0
- package/dist/shims/fetch-cache-state.js +92 -0
- package/dist/shims/fetch-cache.d.ts +3 -61
- package/dist/shims/fetch-cache.js +161 -108
- package/dist/shims/form.js +1 -1
- package/dist/shims/head.d.ts +10 -6
- package/dist/shims/head.js +15 -13
- package/dist/shims/headers.d.ts +13 -0
- package/dist/shims/headers.js +47 -4
- package/dist/shims/image.js +2 -1
- package/dist/shims/internal/app-page-props-cache-key.d.ts +5 -2
- package/dist/shims/internal/app-page-props-cache-key.js +24 -15
- package/dist/shims/internal/headers-state.d.ts +0 -1
- package/dist/shims/internal/work-store-scope.d.ts +5 -0
- package/dist/shims/internal/work-store-scope.js +24 -0
- package/dist/shims/metadata.js +3 -3
- package/dist/shims/navigation-errors.d.ts +6 -0
- package/dist/shims/navigation-errors.js +11 -1
- package/dist/shims/navigation.d.ts +7 -0
- package/dist/shims/navigation.js +45 -9
- package/dist/shims/request-context.d.ts +11 -0
- package/dist/shims/request-state-types.d.ts +2 -1
- package/dist/shims/router.js +12 -20
- package/dist/shims/server.d.ts +16 -0
- package/dist/shims/server.js +24 -4
- package/dist/shims/thenable-params.d.ts +4 -0
- package/dist/shims/thenable-params.js +25 -3
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/unified-request-context.js +1 -0
- package/dist/shims/url-utils.d.ts +2 -0
- package/dist/shims/url-utils.js +3 -1
- package/dist/utils/client-runtime-metadata.js +1 -1
- package/dist/utils/hash.d.ts +7 -0
- package/dist/utils/hash.js +11 -1
- package/dist/utils/mdx-scan.d.ts +5 -0
- package/dist/utils/mdx-scan.js +8 -1
- package/dist/utils/package-name.d.ts +6 -0
- package/dist/utils/package-name.js +12 -1
- package/dist/utils/plugin-rsc-version.d.ts +4 -0
- package/dist/utils/plugin-rsc-version.js +15 -0
- package/dist/utils/prerender-output-paths.js +15 -4
- package/dist/utils/public-file-path.d.ts +10 -2
- package/dist/utils/public-file-path.js +13 -9
- package/dist/utils/public-routes.js +2 -2
- package/dist/utils/react-version.d.ts +3 -0
- package/dist/utils/react-version.js +1 -1
- package/dist/utils/regex-safety.d.ts +10 -0
- package/dist/utils/regex-safety.js +70 -18
- package/package.json +9 -5
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { preserveFullyBufferedBodyMetadata } from "./fully-buffered-response.js";
|
|
2
2
|
import { closeAfterResponse, closeAfterResponseWithBody, createRequestContext, runWithRequestContext } from "../shims/unified-request-context.js";
|
|
3
3
|
import { PRERENDER_REVALIDATE_HEADER } from "../utils/protocol-headers.js";
|
|
4
|
+
import { normalizePathnameForRouteMatch } from "../routing/utils.js";
|
|
4
5
|
import { patternToNextFormat } from "../routing/route-validation.js";
|
|
5
6
|
import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
6
7
|
import { NEXTJS_CACHE_HEADER, NEXTJS_DEPLOYMENT_ID_HEADER, VINEXT_CACHE_HEADER, VINEXT_REVALIDATED_CACHE_TAG_HEADER } from "./headers.js";
|
|
7
8
|
import { extractLocaleFromUrl, resolvePagesI18nRequest } from "./pages-i18n.js";
|
|
9
|
+
import { buildNextDataNotFoundResponse, buildNextDataPropsJsonResponse, normalizePagesDataRequest, parseNextDataPathname } from "./pages-data-route.js";
|
|
8
10
|
import { reportRequestError } from "./instrumentation.js";
|
|
9
11
|
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
10
|
-
import { beginRouteCacheability, isRouteCacheabilityIdentityProbe, isRouteCacheabilityProbe, markRouteCacheabilityExplicitResponsePolicy, recordRouteCacheability } from "../shims/cacheability-classification.js";
|
|
12
|
+
import { beginRouteCacheability, isRouteCacheabilityIdentityProbe, isRouteCacheabilityProbe, markRouteCacheabilityExplicitResponsePolicy, markRouteCacheabilityFinalResponseUncacheable, recordRouteCacheability } from "../shims/cacheability-classification.js";
|
|
11
13
|
import { BROWSER_REVALIDATE_CACHE_CONTROL, NEVER_CACHE_CONTROL, STATIC_CACHE_CONTROL, applyCdnResponseHeaders, hasCdnResponsePolicy, hasExplicitNonCacheableResponsePolicy, shouldUseNextDeployCacheControl } from "./cache-control.js";
|
|
12
14
|
import { buildMissIsrCacheControl } from "./isr-decision.js";
|
|
13
15
|
import { isOnDemandRevalidateRequest } from "./revalidation-request.js";
|
|
14
16
|
import { coalesceOnDemandRevalidation, isrGet, isrSet, pagesIsrCacheKey, triggerBackgroundRegeneration } from "./isr-cache.js";
|
|
15
|
-
import { encodeCacheTag } from "../utils/encode-cache-tag.js";
|
|
16
17
|
import { ensureFetchPatch } from "../shims/fetch-cache.js";
|
|
17
18
|
import { mergeRouteParamsIntoQuery, parseQueryString } from "../utils/query.js";
|
|
18
19
|
import { getScriptNonceFromHeaderSources } from "./csp.js";
|
|
@@ -20,12 +21,11 @@ import { buildDefaultPagesNotFoundResponse } from "./pages-default-404.js";
|
|
|
20
21
|
import { buildPagesReadinessNextData } from "./pages-readiness.js";
|
|
21
22
|
import { resolvePagesPageMethodResponse } from "./pages-page-method.js";
|
|
22
23
|
import { setCacheStateHeaders } from "./cache-headers.js";
|
|
23
|
-
import {
|
|
24
|
+
import { pagesPathCacheTag } from "./pages-cache-tag.js";
|
|
24
25
|
import { renderPagesPageResponse } from "./pages-page-response.js";
|
|
25
26
|
import { hasPagesGetInitialProps } from "./pages-get-initial-props.js";
|
|
26
|
-
import { buildNextDataNotFoundResponse, buildNextDataPropsJsonResponse, normalizePagesDataRequest, parseNextDataPathname } from "./pages-data-route.js";
|
|
27
27
|
import { traceFindPageComponents, tracePagesDocumentStream } from "./pages-execution-tracing.js";
|
|
28
|
-
import { mergePagesNotFoundSourceHeaders, resolvePagesPageData } from "./pages-page-data.js";
|
|
28
|
+
import { mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesStatusPageRenderPath } from "./pages-page-data.js";
|
|
29
29
|
import { collectAssetTags, resolveClientModuleUrl } from "./pages-asset-tags.js";
|
|
30
30
|
import { PAGES_PREVIEW_CACHE_CONTROL, appendPagesPreviewClearCookies, getPagesPreviewState } from "./pages-preview.js";
|
|
31
31
|
import { createPagesReqRes } from "./pages-node-compat.js";
|
|
@@ -68,10 +68,7 @@ function withPagesCacheState(response, state, revalidatedPathname) {
|
|
|
68
68
|
if (state === "REVALIDATED") {
|
|
69
69
|
headers.set(NEXTJS_CACHE_HEADER, state);
|
|
70
70
|
headers.delete(VINEXT_CACHE_HEADER);
|
|
71
|
-
if (revalidatedPathname !== void 0)
|
|
72
|
-
const stem = revalidatedPathname.length > 1 && revalidatedPathname.endsWith("/") ? revalidatedPathname.slice(0, -1) : revalidatedPathname;
|
|
73
|
-
headers.set(VINEXT_REVALIDATED_CACHE_TAG_HEADER, encodeCacheTag(`_N_T_${stem || "/"}`));
|
|
74
|
-
}
|
|
71
|
+
if (revalidatedPathname !== void 0) headers.set(VINEXT_REVALIDATED_CACHE_TAG_HEADER, encodeURIComponent(pagesPathCacheTag(revalidatedPathname)));
|
|
75
72
|
} else setCacheStateHeaders(headers, state);
|
|
76
73
|
return new Response(response.body, {
|
|
77
74
|
headers,
|
|
@@ -98,13 +95,10 @@ function applyPagesErrorCachePolicy(response, revalidateSeconds, expireSeconds,
|
|
|
98
95
|
});
|
|
99
96
|
if (hasExplicitNonCacheableResponsePolicy(headers)) return response;
|
|
100
97
|
if (revalidateSeconds === void 0) applyCdnResponseHeaders(headers, { cacheControl: NEVER_CACHE_CONTROL });
|
|
101
|
-
else {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
tags: [encodeCacheTag(`_N_T_${stem || "/"}`)]
|
|
106
|
-
});
|
|
107
|
-
}
|
|
98
|
+
else applyCdnResponseHeaders(headers, {
|
|
99
|
+
cacheControl: buildMissIsrCacheControl(revalidateSeconds, expireSeconds),
|
|
100
|
+
tags: [pagesPathCacheTag(cacheTagPathname)]
|
|
101
|
+
});
|
|
108
102
|
return new Response(response.body, {
|
|
109
103
|
headers,
|
|
110
104
|
status: response.status,
|
|
@@ -131,7 +125,7 @@ function buildI18nRenderContext(i18nConfig, locale, currentDefaultLocale, domain
|
|
|
131
125
|
* accepts the same options shape the generated entry always passed inline.
|
|
132
126
|
*/
|
|
133
127
|
function createPagesPageHandler(opts) {
|
|
134
|
-
const { pageRoutes, errorPageRoute, matchRoute, i18nConfig, vinextConfig, buildId, hasMiddleware, appAssetPath, hasRewrites, setSSRContext, getPagesNavigationIsReadyFromSerializedState, setI18nContext, wrapWithRouterContext, router, resetSSRHead, getSSRHeadHTML, setDocumentInitialHead, flushPreloads, getFontLinks, getFontStyles, getFontPreloads, renderToReadableStream,
|
|
128
|
+
const { pageRoutes, errorPageRoute, matchRoute, i18nConfig, vinextConfig, buildId, hasMiddleware, appAssetPath, hasRewrites, setSSRContext, getPagesNavigationIsReadyFromSerializedState, setI18nContext, wrapWithRouterContext, router, resetSSRHead, getSSRHeadHTML, setDocumentInitialHead, flushPreloads, getFontLinks, getFontStyles, getFontPreloads, renderToReadableStream, safeJsonStringify, sanitizeDestination, createPageElement, enhancePageElement, AppComponent, DocumentComponent } = opts;
|
|
135
129
|
function renderToStringAsync(element) {
|
|
136
130
|
return renderToReadableStream(element).then((stream) => new Response(stream).text());
|
|
137
131
|
}
|
|
@@ -187,7 +181,7 @@ function createPagesPageHandler(opts) {
|
|
|
187
181
|
redirectUrl: void 0
|
|
188
182
|
};
|
|
189
183
|
const locale = localeInfo.locale;
|
|
190
|
-
|
|
184
|
+
let routeUrl = localeInfo.url;
|
|
191
185
|
const currentDefaultLocale = i18nConfig ? localeInfo.domainLocale ? localeInfo.domainLocale.defaultLocale : i18nConfig.defaultLocale : void 0;
|
|
192
186
|
const domainLocales = i18nConfig ? i18nConfig.domains : void 0;
|
|
193
187
|
const pageIsrCacheKey = isrCacheKeyForRequest(i18nConfig ? localeInfo.domainLocale ? JSON.stringify([String(localeInfo.domainLocale.domain).toLowerCase(), locale]) : "locale:" + String(locale) : null);
|
|
@@ -216,6 +210,22 @@ function createPagesPageHandler(opts) {
|
|
|
216
210
|
renderAsPath = routeUrl;
|
|
217
211
|
} else return buildDefaultPagesNotFoundResponse();
|
|
218
212
|
}
|
|
213
|
+
const routePathname = routeUrl.split("?")[0];
|
|
214
|
+
const cachePathname = normalizePathnameForRouteMatch(routePathname);
|
|
215
|
+
let cacheIdentityDiverges = false;
|
|
216
|
+
if (!isRouteMissErrorRender && options?.__forcedRoute === void 0 && cachePathname !== routePathname) {
|
|
217
|
+
const cachePathRoute = matchRoute(cachePathname, pageRoutes)?.route;
|
|
218
|
+
if (cachePathRoute !== match.route) {
|
|
219
|
+
const cachePathModule = cachePathRoute?.module;
|
|
220
|
+
if (match.route.isDynamic && typeof match.route.module.getStaticProps === "function" && cachePathRoute && !cachePathRoute.isDynamic && typeof cachePathModule?.getStaticProps === "function" && typeof cachePathModule.getServerSideProps !== "function" && getPagesPreviewState(request.headers.get("cookie"), { isOnDemandRevalidate: isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate")) }).data === false) {
|
|
221
|
+
match = {
|
|
222
|
+
route: cachePathRoute,
|
|
223
|
+
params: {}
|
|
224
|
+
};
|
|
225
|
+
routeUrl = cachePathname + routeUrl.slice(routePathname.length);
|
|
226
|
+
} else cacheIdentityDiverges = true;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
219
229
|
const { route, params } = match;
|
|
220
230
|
const pageModule = traceFindPageComponents(route.pattern, () => route.module);
|
|
221
231
|
const isStaticPropsRoute = typeof pageModule.getStaticProps === "function";
|
|
@@ -234,10 +244,10 @@ function createPagesPageHandler(opts) {
|
|
|
234
244
|
});
|
|
235
245
|
else recordRouteCacheability({ cacheable: false });
|
|
236
246
|
}
|
|
237
|
-
const routeIsrGet = isCacheabilityProbe ? async () => null : isrGet;
|
|
238
|
-
const routeIsrSet = isCacheabilityProbe ? async () => {} : isrSet;
|
|
247
|
+
const routeIsrGet = isCacheabilityProbe || cacheIdentityDiverges ? async () => null : isrGet;
|
|
248
|
+
const routeIsrSet = isCacheabilityProbe || cacheIdentityDiverges ? async () => {} : isrSet;
|
|
239
249
|
const isStaticPropsRender = isStaticPropsRoute && typeof pageModule.getServerSideProps !== "function";
|
|
240
|
-
if (!options?.__skipOnDemandCoalesce && !options?.__forcedRoute && isStaticPropsRoute && isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate"))) {
|
|
250
|
+
if (!options?.__skipOnDemandCoalesce && !options?.__forcedRoute && !cacheIdentityDiverges && isStaticPropsRoute && isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate"))) {
|
|
241
251
|
const cacheKey = pageIsrCacheKey("pages", routeUrl.split("?")[0]);
|
|
242
252
|
const snapshot = await coalesceOnDemandRevalidation(cacheKey, async () => {
|
|
243
253
|
const response = await renderPage(request, url, manifest, middlewareHeaders, {
|
|
@@ -257,17 +267,39 @@ function createPagesPageHandler(opts) {
|
|
|
257
267
|
statusText: snapshot.statusText
|
|
258
268
|
});
|
|
259
269
|
}
|
|
260
|
-
const
|
|
270
|
+
const routePattern = patternToNextFormat(route.pattern);
|
|
271
|
+
const renderStatusCode = renderStatusCodeOverride ?? (routePattern === "/404" ? 404 : void 0);
|
|
272
|
+
const isStatusPageIdentity = (isStaticPropsRender || pagesReadiness.autoExport) && (routePattern === "/404" || routePattern === "/500" || routePattern === "/_error");
|
|
273
|
+
const statusPagePathname = routePattern === "/_error" && renderStatusCode === 404 ? "/404" : routePattern;
|
|
274
|
+
const renderRouteUrl = isStaticPropsRender && isStatusPageIdentity ? resolvePagesStatusPageRenderPath(statusPagePathname, vinextConfig.trailingSlash, originalRequestUrl.pathname) : isStaticPropsRender ? routeUrl.split("?")[0] : routeUrl;
|
|
261
275
|
const routerAsPathSource = isStaticPropsRender ? renderRouteUrl : renderAsPath ?? renderRouteUrl;
|
|
262
276
|
const routerAsPath = i18nConfig ? extractLocaleFromUrl(routerAsPathSource, i18nConfig, locale).url : routerAsPathSource;
|
|
263
277
|
const uCtx = createRequestContext({ executionContext: getRequestExecutionContext() });
|
|
264
|
-
|
|
278
|
+
let pageReqRes = null;
|
|
279
|
+
const pageResponseSent = () => pageReqRes?.res.headersSent === true;
|
|
280
|
+
const sendsEarly = isStaticPropsRoute && !isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate"));
|
|
281
|
+
let resolveSentResponse = () => {};
|
|
282
|
+
const sentResponse = new Promise((resolve) => {
|
|
283
|
+
resolveSentResponse = resolve;
|
|
284
|
+
});
|
|
285
|
+
const reportSsrError = async (e) => {
|
|
286
|
+
console.error("[vinext] SSR error:", e);
|
|
287
|
+
await reportRequestError(e, {
|
|
288
|
+
path: url,
|
|
289
|
+
method: request.method,
|
|
290
|
+
headers: Object.fromEntries(request.headers.entries())
|
|
291
|
+
}, {
|
|
292
|
+
routerKind: "Pages Router",
|
|
293
|
+
routePath: route.pattern,
|
|
294
|
+
routeType: "render",
|
|
295
|
+
revalidateReason: isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate")) ? "on-demand" : typeof pageModule.getStaticProps === "function" ? "stale" : void 0
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
const rendering = runWithRequestContext(uCtx, async () => {
|
|
265
299
|
ensureFetchPatch();
|
|
266
300
|
try {
|
|
267
|
-
const routePattern = patternToNextFormat(route.pattern);
|
|
268
301
|
setFrameworkRequestRoute(routePattern);
|
|
269
|
-
const
|
|
270
|
-
const isrCachePathname = (isStaticPropsRender || pagesReadiness.autoExport) && (routePattern === "/404" || routePattern === "/500" || routePattern === "/_error") ? routePattern === "/_error" && renderStatusCode === 404 ? "/404" : routePattern : renderRouteUrl.split("?")[0];
|
|
302
|
+
const isrCachePathname = isStatusPageIdentity ? statusPagePathname : renderRouteUrl.split("?")[0];
|
|
271
303
|
const isNotFoundErrorRender = routePattern === "/404" || routePattern === "/_error" && renderStatusCode === 404;
|
|
272
304
|
const isStatusErrorRender = isNotFoundErrorRender || routePattern === "/500" || routePattern === "/_error" && renderStatusCode === 500;
|
|
273
305
|
const errorPageRevalidateSeconds = isNotFoundErrorRender ? options?.__notFoundRevalidateSeconds : void 0;
|
|
@@ -357,15 +389,109 @@ function createPagesPageHandler(opts) {
|
|
|
357
389
|
if (options?.__notFoundSourceHeaders) for (const [name, value] of Object.entries(options.__notFoundSourceHeaders)) reqRes.res.setHeader(name, value);
|
|
358
390
|
return reqRes;
|
|
359
391
|
};
|
|
392
|
+
const createForegroundReqRes = () => {
|
|
393
|
+
const reqRes = createPageReqRes();
|
|
394
|
+
pageReqRes = reqRes;
|
|
395
|
+
if (sendsEarly) reqRes.responsePromise.then(resolveSentResponse);
|
|
396
|
+
return reqRes;
|
|
397
|
+
};
|
|
398
|
+
const buildPageResponseOptions = (render) => {
|
|
399
|
+
const pageModuleIds = [];
|
|
400
|
+
if (appAssetPath) pageModuleIds.push(appAssetPath);
|
|
401
|
+
if (route.filePath) pageModuleIds.push(route.filePath);
|
|
402
|
+
const initialStylesheetHrefs = /* @__PURE__ */ new Set();
|
|
403
|
+
return {
|
|
404
|
+
assetTags: collectAssetTags({
|
|
405
|
+
manifest,
|
|
406
|
+
moduleIds: pageModuleIds,
|
|
407
|
+
scriptNonce,
|
|
408
|
+
disableOptimizedLoading: vinextConfig.disableOptimizedLoading,
|
|
409
|
+
basePath: vinextConfig.basePath,
|
|
410
|
+
assetPrefix: vinextConfig.assetPrefix,
|
|
411
|
+
deploymentId: process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID,
|
|
412
|
+
crossOrigin: vinextConfig.crossOrigin,
|
|
413
|
+
initialStylesheetHrefs
|
|
414
|
+
}),
|
|
415
|
+
buildId,
|
|
416
|
+
clearSsrContext() {
|
|
417
|
+
if (typeof setSSRContext === "function") setSSRContext(null);
|
|
418
|
+
},
|
|
419
|
+
createPageElement(currentProps) {
|
|
420
|
+
const el = createPageElement(PageComponent, AppComponent, currentProps);
|
|
421
|
+
return typeof wrapWithRouterContext === "function" ? wrapWithRouterContext(el) : el;
|
|
422
|
+
},
|
|
423
|
+
enhancePageElement(renderPageOpts) {
|
|
424
|
+
const el = enhancePageElement(PageComponent, AppComponent, render.renderProps, renderPageOpts);
|
|
425
|
+
return typeof wrapWithRouterContext === "function" ? wrapWithRouterContext(el) : el;
|
|
426
|
+
},
|
|
427
|
+
DocumentComponent,
|
|
428
|
+
err: err instanceof Error ? err : void 0,
|
|
429
|
+
flushPreloads: typeof flushPreloads === "function" ? flushPreloads : void 0,
|
|
430
|
+
fontLinkHeader,
|
|
431
|
+
fontPreloads: allFontPreloads,
|
|
432
|
+
getFontLinks,
|
|
433
|
+
getFontStyles,
|
|
434
|
+
getSSRHeadHTML: typeof getSSRHeadHTML === "function" ? getSSRHeadHTML : void 0,
|
|
435
|
+
clientTraceMetadata: shouldEmitPagesClientTraceMetadata(pageModule, AppComponent) ? vinextConfig.clientTraceMetadata : void 0,
|
|
436
|
+
documentReqRes: render.documentReqRes,
|
|
437
|
+
gsspRes: render.gsspRes,
|
|
438
|
+
isrCacheKey: pageIsrCacheKey,
|
|
439
|
+
isrCachePathname,
|
|
440
|
+
expireSeconds: render.expireSeconds,
|
|
441
|
+
isrRevalidateSeconds: render.isrRevalidateSeconds,
|
|
442
|
+
isStaticPropsRoute,
|
|
443
|
+
isrSet: routeIsrSet,
|
|
444
|
+
i18n: buildI18nRenderContext(i18nConfig, locale, currentDefaultLocale, domainLocales),
|
|
445
|
+
isFallback: render.isFallback,
|
|
446
|
+
pageProps: render.pageProps,
|
|
447
|
+
props: render.renderProps,
|
|
448
|
+
params,
|
|
449
|
+
query,
|
|
450
|
+
renderDocumentToString(element) {
|
|
451
|
+
return renderToStringAsync(element);
|
|
452
|
+
},
|
|
453
|
+
renderToReadableStream,
|
|
454
|
+
resetSSRHead: typeof resetSSRHead === "function" ? resetSSRHead : void 0,
|
|
455
|
+
setDocumentInitialHead: typeof setDocumentInitialHead === "function" ? setDocumentInitialHead : void 0,
|
|
456
|
+
routePattern,
|
|
457
|
+
routeUrl: renderRouteUrl,
|
|
458
|
+
safeJsonStringify,
|
|
459
|
+
scriptNonce,
|
|
460
|
+
initialStylesheetHrefs,
|
|
461
|
+
crossOrigin: vinextConfig.crossOrigin,
|
|
462
|
+
disableOptimizedLoading: vinextConfig.disableOptimizedLoading,
|
|
463
|
+
statusCode: renderStatusCode,
|
|
464
|
+
nextData: serializedPagesNextData
|
|
465
|
+
};
|
|
466
|
+
};
|
|
467
|
+
const withErrorStatusCode = (pageProps, renderProps) => {
|
|
468
|
+
if (routePattern === "/_error" && typeof renderStatusCode === "number" && renderProps.pageProps !== void 0) {
|
|
469
|
+
const statusPageProps = {
|
|
470
|
+
...pageProps,
|
|
471
|
+
statusCode: renderStatusCode
|
|
472
|
+
};
|
|
473
|
+
return {
|
|
474
|
+
pageProps: statusPageProps,
|
|
475
|
+
renderProps: {
|
|
476
|
+
...renderProps,
|
|
477
|
+
pageProps: statusPageProps
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
return {
|
|
482
|
+
pageProps,
|
|
483
|
+
renderProps
|
|
484
|
+
};
|
|
485
|
+
};
|
|
360
486
|
const pageDataResult = await resolvePagesPageData({
|
|
361
487
|
isDataReq,
|
|
362
488
|
err: err instanceof Error ? err : void 0,
|
|
363
489
|
applyRequestContexts: applySSRContext,
|
|
364
490
|
basePath: vinextConfig.basePath,
|
|
365
|
-
buildId,
|
|
366
491
|
deploymentId: process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID,
|
|
367
492
|
htmlLimitedBots: vinextConfig.htmlLimitedBots,
|
|
368
|
-
createGsspReqRes:
|
|
493
|
+
createGsspReqRes: createForegroundReqRes,
|
|
494
|
+
createRegenerationReqRes: createPageReqRes,
|
|
369
495
|
createAppTree(appTreeProps) {
|
|
370
496
|
const el = createPageElement(PageComponent, AppComponent, appTreeProps);
|
|
371
497
|
return typeof wrapWithRouterContext === "function" ? wrapWithRouterContext(el) : el;
|
|
@@ -386,6 +512,7 @@ function createPagesPageHandler(opts) {
|
|
|
386
512
|
validatePropsSerialization: process.env.NODE_ENV !== "production" || process.env.VINEXT_PRERENDER === "1",
|
|
387
513
|
isOnDemandRevalidate,
|
|
388
514
|
revalidateOnlyGenerated,
|
|
515
|
+
regeneratesStoredEntry: getRequestExecutionContext()?.isStoredEntryRegeneration === true,
|
|
389
516
|
previewData,
|
|
390
517
|
pageModule,
|
|
391
518
|
AppComponent,
|
|
@@ -394,8 +521,26 @@ function createPagesPageHandler(opts) {
|
|
|
394
521
|
query,
|
|
395
522
|
asPath: routerAsPath,
|
|
396
523
|
resolvedUrl: pagesResolvedUrl,
|
|
397
|
-
|
|
398
|
-
|
|
524
|
+
async renderIsrDocument(regeneration) {
|
|
525
|
+
const renderAllReady = async (element) => {
|
|
526
|
+
const stream = await renderToReadableStream(element);
|
|
527
|
+
await stream.allReady;
|
|
528
|
+
return stream;
|
|
529
|
+
};
|
|
530
|
+
await (await renderPagesPageResponse({
|
|
531
|
+
...buildPageResponseOptions({
|
|
532
|
+
documentReqRes: regeneration.documentReqRes,
|
|
533
|
+
expireSeconds: regeneration.expireSeconds,
|
|
534
|
+
gsspRes: null,
|
|
535
|
+
isFallback: false,
|
|
536
|
+
isrRevalidateSeconds: regeneration.revalidateSeconds,
|
|
537
|
+
...withErrorStatusCode(regeneration.pageProps, regeneration.props)
|
|
538
|
+
}),
|
|
539
|
+
isStaleRegeneration: true,
|
|
540
|
+
renderDocumentToString: (element) => renderAllReady(element).then((stream) => new Response(stream).text()),
|
|
541
|
+
renderToReadableStream: renderAllReady
|
|
542
|
+
})).body?.cancel();
|
|
543
|
+
},
|
|
399
544
|
route: { isDynamic: route.isDynamic },
|
|
400
545
|
routePattern,
|
|
401
546
|
routeUrl: renderRouteUrl,
|
|
@@ -417,10 +562,10 @@ function createPagesPageHandler(opts) {
|
|
|
417
562
|
statusCode: renderStatusCode,
|
|
418
563
|
notFoundSourceHeaders: options?.__notFoundSourceHeaders,
|
|
419
564
|
triggerBackgroundRegeneration,
|
|
420
|
-
vinext: serializedPagesNextData.__vinext,
|
|
421
565
|
nextData: serializedPagesNextData,
|
|
422
566
|
userAgent: request.headers.get("user-agent") ?? void 0,
|
|
423
567
|
ifNoneMatch: request.headers.get("if-none-match") ?? void 0,
|
|
568
|
+
ifModifiedSince: request.headers.get("if-modified-since") ?? void 0,
|
|
424
569
|
requestCacheControl: request.headers.get("cache-control") ?? void 0
|
|
425
570
|
});
|
|
426
571
|
if (pageDataResult.kind === "notFound") {
|
|
@@ -443,28 +588,17 @@ function createPagesPageHandler(opts) {
|
|
|
443
588
|
return finalizePagesPreviewResponse(withBrowserPolicy(notFoundResponse), preview);
|
|
444
589
|
}
|
|
445
590
|
if (pageDataResult.kind === "response") {
|
|
591
|
+
if (sendsEarly && pageResponseSent()) return pageDataResult.response;
|
|
446
592
|
let response = isOnDemandRevalidate && pageDataResult.onDemandRevalidateSuccess !== false ? withPagesCacheState(pageDataResult.response, "REVALIDATED", isrCachePathname) : pageDataResult.response;
|
|
447
593
|
if (shouldApplyErrorResponsePolicy) response = applyPagesErrorCachePolicy(response, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname);
|
|
448
594
|
return finalizePagesPreviewResponse(withBrowserPolicy(response), preview);
|
|
449
595
|
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
if (previewData !== false) renderProps = {
|
|
453
|
-
...renderProps,
|
|
596
|
+
const { pageProps, renderProps } = withErrorStatusCode(pageDataResult.pageProps, previewData !== false ? {
|
|
597
|
+
...pageDataResult.props,
|
|
454
598
|
__N_PREVIEW: true
|
|
455
|
-
};
|
|
456
|
-
if (routePattern === "/_error" && typeof renderStatusCode === "number" && renderProps.pageProps !== void 0) {
|
|
457
|
-
pageProps = {
|
|
458
|
-
...pageProps,
|
|
459
|
-
statusCode: renderStatusCode
|
|
460
|
-
};
|
|
461
|
-
renderProps = {
|
|
462
|
-
...renderProps,
|
|
463
|
-
pageProps
|
|
464
|
-
};
|
|
465
|
-
}
|
|
599
|
+
} : pageDataResult.props);
|
|
466
600
|
const gsspRes = pageDataResult.gsspRes;
|
|
467
|
-
const documentReqRes = serializedPagesNextData.autoExport === true && !options?.__notFoundSourceHeaders ? null : pageDataResult.documentReqRes ??
|
|
601
|
+
const documentReqRes = serializedPagesNextData.autoExport === true && !options?.__notFoundSourceHeaders ? null : pageDataResult.documentReqRes ?? createForegroundReqRes();
|
|
468
602
|
const isrRevalidateSeconds = pageDataResult.isrRevalidateSeconds;
|
|
469
603
|
if (isStaticPropsRoute && preview.data === false && !preview.shouldClear && isrRevalidateSeconds !== null) recordRouteCacheability({
|
|
470
604
|
cacheable: isrRevalidateSeconds !== 0,
|
|
@@ -493,13 +627,11 @@ function createPagesPageHandler(opts) {
|
|
|
493
627
|
if (gsspRes) {
|
|
494
628
|
if (!headers.has("Cache-Control")) headers.set("Cache-Control", NEVER_CACHE_CONTROL);
|
|
495
629
|
} else if (isStaticPropsRoute) {
|
|
496
|
-
if (isrRevalidateSeconds !== null) {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
});
|
|
502
|
-
} else if (shouldUseNextDeployCacheControl()) headers.set("Cache-Control", BROWSER_REVALIDATE_CACHE_CONTROL);
|
|
630
|
+
if (isrRevalidateSeconds !== null) applyCdnResponseHeaders(headers, {
|
|
631
|
+
cacheControl: buildMissIsrCacheControl(isrRevalidateSeconds, vinextConfig.expireTime),
|
|
632
|
+
tags: [pagesPathCacheTag(isrCachePathname)]
|
|
633
|
+
});
|
|
634
|
+
else if (shouldUseNextDeployCacheControl()) headers.set("Cache-Control", BROWSER_REVALIDATE_CACHE_CONTROL);
|
|
503
635
|
}
|
|
504
636
|
if (routePattern !== "/_error" && routePattern !== "/500") {
|
|
505
637
|
const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
|
|
@@ -507,91 +639,28 @@ function createPagesPageHandler(opts) {
|
|
|
507
639
|
}
|
|
508
640
|
return finalizePagesPreviewResponse(withBrowserPolicy(buildNextDataPropsJsonResponse(renderProps, safeJsonStringify, { headers })), preview);
|
|
509
641
|
}
|
|
510
|
-
const pageModuleIds = [];
|
|
511
|
-
if (appAssetPath) pageModuleIds.push(appAssetPath);
|
|
512
|
-
if (route.filePath) pageModuleIds.push(route.filePath);
|
|
513
|
-
const initialStylesheetHrefs = /* @__PURE__ */ new Set();
|
|
514
642
|
let pageResponse = await renderTracedPagesPageResponse({
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
crossOrigin: vinextConfig.crossOrigin,
|
|
524
|
-
initialStylesheetHrefs
|
|
643
|
+
...buildPageResponseOptions({
|
|
644
|
+
documentReqRes,
|
|
645
|
+
expireSeconds: isrExpireSeconds,
|
|
646
|
+
gsspRes,
|
|
647
|
+
isFallback: isFallbackRender,
|
|
648
|
+
isrRevalidateSeconds,
|
|
649
|
+
pageProps,
|
|
650
|
+
renderProps
|
|
525
651
|
}),
|
|
526
|
-
buildId,
|
|
527
|
-
clearSsrContext() {
|
|
528
|
-
if (typeof setSSRContext === "function") setSSRContext(null);
|
|
529
|
-
},
|
|
530
|
-
createPageElement(currentProps) {
|
|
531
|
-
const el = createPageElement(PageComponent, AppComponent, currentProps);
|
|
532
|
-
return typeof wrapWithRouterContext === "function" ? wrapWithRouterContext(el) : el;
|
|
533
|
-
},
|
|
534
|
-
enhancePageElement(renderPageOpts) {
|
|
535
|
-
const el = enhancePageElement(PageComponent, AppComponent, renderProps, renderPageOpts);
|
|
536
|
-
return typeof wrapWithRouterContext === "function" ? wrapWithRouterContext(el) : el;
|
|
537
|
-
},
|
|
538
|
-
DocumentComponent,
|
|
539
|
-
err: err instanceof Error ? err : void 0,
|
|
540
|
-
flushPreloads: typeof flushPreloads === "function" ? flushPreloads : void 0,
|
|
541
|
-
fontLinkHeader,
|
|
542
|
-
fontPreloads: allFontPreloads,
|
|
543
|
-
getFontLinks,
|
|
544
|
-
getFontStyles,
|
|
545
|
-
getSSRHeadHTML: typeof getSSRHeadHTML === "function" ? getSSRHeadHTML : void 0,
|
|
546
|
-
clientTraceMetadata: shouldEmitPagesClientTraceMetadata(pageModule, AppComponent) ? vinextConfig.clientTraceMetadata : void 0,
|
|
547
|
-
documentReqRes,
|
|
548
|
-
gsspRes,
|
|
549
|
-
isrCacheKey: pageIsrCacheKey,
|
|
550
|
-
isrCachePathname,
|
|
551
|
-
expireSeconds: isrExpireSeconds,
|
|
552
|
-
isrRevalidateSeconds,
|
|
553
652
|
isOnDemandRevalidate,
|
|
554
|
-
isStaticPropsRoute,
|
|
555
|
-
isrSet: routeIsrSet,
|
|
556
|
-
i18n: buildI18nRenderContext(i18nConfig, locale, currentDefaultLocale, domainLocales),
|
|
557
|
-
isFallback: isFallbackRender,
|
|
558
|
-
pageProps,
|
|
559
|
-
props: renderProps,
|
|
560
|
-
params,
|
|
561
|
-
query,
|
|
562
|
-
renderDocumentToString(element) {
|
|
563
|
-
return renderToStringAsync(element);
|
|
564
|
-
},
|
|
565
|
-
renderToReadableStream,
|
|
566
|
-
resetSSRHead: typeof resetSSRHead === "function" ? resetSSRHead : void 0,
|
|
567
|
-
setDocumentInitialHead: typeof setDocumentInitialHead === "function" ? setDocumentInitialHead : void 0,
|
|
568
|
-
routePattern,
|
|
569
|
-
routeUrl: renderRouteUrl,
|
|
570
|
-
safeJsonStringify,
|
|
571
|
-
scriptNonce,
|
|
572
|
-
initialStylesheetHrefs,
|
|
573
|
-
crossOrigin: vinextConfig.crossOrigin,
|
|
574
|
-
disableOptimizedLoading: vinextConfig.disableOptimizedLoading,
|
|
575
|
-
statusCode: renderStatusCode,
|
|
576
|
-
nextData: serializedPagesNextData,
|
|
577
653
|
userAgent: request.headers.get("user-agent") ?? void 0,
|
|
578
654
|
ifNoneMatch: request.headers.get("if-none-match") ?? void 0,
|
|
655
|
+
ifModifiedSince: request.headers.get("if-modified-since") ?? void 0,
|
|
579
656
|
requestCacheControl: request.headers.get("cache-control") ?? void 0
|
|
580
657
|
});
|
|
658
|
+
if (sendsEarly && pageResponseSent()) return pageResponse;
|
|
581
659
|
if (shouldApplyErrorResponsePolicy) pageResponse = applyPagesErrorCachePolicy(pageResponse, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname);
|
|
582
660
|
return finalizePagesPreviewResponse(withBrowserPolicy(pageResponse), preview);
|
|
583
661
|
} catch (e) {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
path: url,
|
|
587
|
-
method: request.method,
|
|
588
|
-
headers: Object.fromEntries(request.headers.entries())
|
|
589
|
-
}, {
|
|
590
|
-
routerKind: "Pages Router",
|
|
591
|
-
routePath: route.pattern,
|
|
592
|
-
routeType: "render",
|
|
593
|
-
revalidateReason: isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate")) ? "on-demand" : typeof pageModule.getStaticProps === "function" ? "stale" : void 0
|
|
594
|
-
});
|
|
662
|
+
await reportSsrError(e);
|
|
663
|
+
if (sendsEarly && pageResponseSent()) return sentResponse;
|
|
595
664
|
if (!isInternalErrorRender && !isDataReq) {
|
|
596
665
|
let errorRoute = null;
|
|
597
666
|
for (let i = 0; i < pageRoutes.length; i++) if (pageRoutes[i].pattern === "/500") {
|
|
@@ -618,7 +687,17 @@ function createPagesPageHandler(opts) {
|
|
|
618
687
|
return new Response("Internal Server Error", { status: 500 });
|
|
619
688
|
}
|
|
620
689
|
});
|
|
621
|
-
return closeAfterResponseWithBody(
|
|
690
|
+
if (!sendsEarly) return closeAfterResponseWithBody(await rendering, uCtx);
|
|
691
|
+
const settled = await Promise.race([rendering.then((response) => ({
|
|
692
|
+
response,
|
|
693
|
+
rendered: true
|
|
694
|
+
})), sentResponse.then((response) => ({
|
|
695
|
+
response,
|
|
696
|
+
rendered: false
|
|
697
|
+
}))]);
|
|
698
|
+
if (pageResponseSent()) markRouteCacheabilityFinalResponseUncacheable("_app or _document sent the response of a getStaticProps page");
|
|
699
|
+
if (!settled.rendered) getRequestExecutionContext()?.waitUntil(rendering.then(() => void 0, () => void 0));
|
|
700
|
+
return closeAfterResponseWithBody(settled.response, uCtx);
|
|
622
701
|
}
|
|
623
702
|
return renderPage;
|
|
624
703
|
}
|
|
@@ -11,13 +11,12 @@ import { ComponentType, ReactNode } from "react";
|
|
|
11
11
|
export declare function isPagesStreamingBot(userAgent: string): boolean;
|
|
12
12
|
export declare function generatePagesETag(payload: string): string;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* `pages-page-data.ts` so the two cannot drift.
|
|
14
|
+
* Whether a render answers a matching If-None-Match with a 304. Next.js stores
|
|
15
|
+
* the page before it evaluates the ETag, so when the CDN adapter stores the
|
|
16
|
+
* completed response, the render returns the page and the adapter sends the 304.
|
|
17
|
+
* A page whose status carries no body has nothing to store.
|
|
19
18
|
*/
|
|
20
|
-
export declare function
|
|
19
|
+
export declare function rendersPagesNotModified(status: number): boolean;
|
|
21
20
|
type PagesFontPreload = {
|
|
22
21
|
href: string;
|
|
23
22
|
type: string;
|
|
@@ -87,6 +86,8 @@ type RenderPagesPageResponseOptions = {
|
|
|
87
86
|
isrRevalidateSeconds: number | false | null;
|
|
88
87
|
/** Synchronous `res.revalidate()` render; cache persistence must finish before returning. */
|
|
89
88
|
isOnDemandRevalidate?: boolean;
|
|
89
|
+
/** Background ISR regeneration; the cache write must finish before returning. */
|
|
90
|
+
isStaleRegeneration?: boolean;
|
|
90
91
|
isStaticPropsRoute?: boolean;
|
|
91
92
|
isrSet: (key: string, data: CachedPagesValue, policy: IsrWritePolicy) => Promise<void>;
|
|
92
93
|
i18n: PagesI18nRenderContext;
|
|
@@ -133,6 +134,11 @@ type RenderPagesPageResponseOptions = {
|
|
|
133
134
|
* Only evaluated on bot/buffered responses that carry an ETag.
|
|
134
135
|
*/
|
|
135
136
|
ifNoneMatch?: string;
|
|
137
|
+
/**
|
|
138
|
+
* The incoming request's `If-Modified-Since` header value. As in Next.js,
|
|
139
|
+
* which gives a page no Last-Modified, a request with it gets the page.
|
|
140
|
+
*/
|
|
141
|
+
ifModifiedSince?: string;
|
|
136
142
|
/**
|
|
137
143
|
* The incoming request's `Cache-Control` header value. When the value
|
|
138
144
|
* contains `no-cache`, the 304 short-circuit is skipped and a full 200
|