vinext 1.1.0 → 1.2.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 +22 -10
- package/dist/build/client-build-config.d.ts +10 -0
- package/dist/build/client-build-config.js +18 -2
- package/dist/build/output-root-externals.d.ts +21 -0
- package/dist/build/output-root-externals.js +40 -0
- 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 +6 -4
- package/dist/build/prerender.js +1 -1
- package/dist/build/run-prerender.js +1 -1
- package/dist/build/ssr-manifest.d.ts +2 -0
- package/dist/build/ssr-manifest.js +6 -2
- package/dist/check.js +12 -12
- package/dist/cli-dev-config.js +3 -3
- package/dist/cli.js +3 -2
- 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/config/config-matchers.d.ts +26 -11
- package/dist/config/config-matchers.js +90 -88
- package/dist/config/destination-params.d.ts +47 -0
- package/dist/config/destination-params.js +116 -0
- package/dist/config/next-config.d.ts +7 -0
- package/dist/config/next-config.js +3 -0
- package/dist/entries/app-rsc-entry.d.ts +4 -0
- package/dist/entries/app-rsc-entry.js +20 -6
- package/dist/entries/pages-client-entry.js +3 -1
- package/dist/entries/pages-server-entry.js +13 -37
- package/dist/index.d.ts +3 -1
- package/dist/index.js +246 -136
- 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 +2 -1
- package/dist/init.js +153 -9
- package/dist/plugins/ast-scope.d.ts +7 -0
- package/dist/plugins/ast-scope.js +59 -3
- package/dist/plugins/ast-utils.d.ts +53 -2
- package/dist/plugins/ast-utils.js +90 -2
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +41 -0
- package/dist/plugins/cloudflare-dev-module-urls.js +271 -0
- package/dist/plugins/commonjs-esm-facade.js +2 -2
- package/dist/plugins/css-module-imports.js +13 -20
- package/dist/plugins/dynamic-preload-metadata.d.ts +1 -1
- package/dist/plugins/dynamic-preload-metadata.js +11 -11
- package/dist/plugins/extensionless-dynamic-import.js +2 -3
- package/dist/plugins/fonts.d.ts +1 -1
- package/dist/plugins/fonts.js +3 -3
- package/dist/plugins/ignore-dynamic-requests.d.ts +1 -1
- package/dist/plugins/ignore-dynamic-requests.js +5 -7
- package/dist/plugins/import-meta-url.js +3 -4
- package/dist/plugins/instrumentation-client.js +3 -2
- package/dist/plugins/middleware-export-validation.js +2 -3
- package/dist/plugins/middleware-server-only.d.ts +5 -4
- package/dist/plugins/middleware-server-only.js +8 -5
- package/dist/plugins/og-harfbuzz.js +2 -3
- package/dist/plugins/optimize-imports.js +3 -4
- package/dist/plugins/pages-node-externals.js +3 -4
- package/dist/plugins/remove-console.js +2 -18
- package/dist/plugins/require-condition-resolution.js +3 -3
- package/dist/plugins/require-context.js +2 -3
- 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 +265 -102
- package/dist/plugins/styled-jsx.js +2 -3
- 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.d.ts +21 -2
- package/dist/plugins/use-cache-callable.js +84 -35
- package/dist/plugins/worker-image-imports.js +30 -33
- 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 +153 -0
- package/dist/server/api-handler.d.ts +1 -0
- package/dist/server/api-handler.js +3 -2
- package/dist/server/app-action-forwarding.js +2 -2
- 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 +3 -3
- package/dist/server/app-browser-interception-context.js +1 -1
- package/dist/server/app-browser-navigation-controller.js +1 -1
- package/dist/server/app-browser-prefetch-response.js +2 -2
- package/dist/server/app-browser-server-action-client.js +1 -1
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-supplemental-refresh.js +1 -1
- package/dist/server/app-middleware.d.ts +11 -0
- package/dist/server/app-middleware.js +17 -2
- package/dist/server/app-optimistic-routing.js +1 -1
- package/dist/server/app-page-cache.d.ts +1 -1
- package/dist/server/app-page-cache.js +1 -1
- package/dist/server/app-page-dispatch.d.ts +3 -1
- package/dist/server/app-page-dispatch.js +5 -4
- package/dist/server/app-page-ppr-runtime.js +1 -1
- package/dist/server/app-page-render-observation.js +1 -1
- package/dist/server/app-page-render.js +1 -1
- package/dist/server/app-page-request.js +53 -15
- package/dist/server/app-page-route-wiring.js +2 -2
- package/dist/server/app-pages-bridge.d.ts +1 -1
- package/dist/server/app-pages-bridge.js +3 -4
- package/dist/server/app-prerender-endpoints.js +9 -6
- package/dist/server/app-render-abort-error.d.ts +19 -0
- package/dist/server/app-render-abort-error.js +31 -1
- package/dist/server/app-request-stage-dispatch.js +6 -2
- package/dist/server/app-request-stage-independent-entry.js +29 -9
- package/dist/server/app-response-stage-entry.js +11 -3
- 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 +5 -2
- 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 +46 -25
- package/dist/server/app-router-entry.js +29 -10
- package/dist/server/app-rsc-cache-busting.d.ts +16 -0
- package/dist/server/app-rsc-cache-busting.js +30 -13
- package/dist/server/app-rsc-errors.js +20 -16
- package/dist/server/app-rsc-handler.d.ts +7 -0
- package/dist/server/app-rsc-handler.js +89 -39
- package/dist/server/app-rsc-request-normalization.js +3 -3
- package/dist/server/app-rsc-response-stage.js +5 -3
- 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.js +7 -5
- package/dist/server/app-visited-response-cache.js +2 -2
- package/dist/server/app-worker-stages.d.ts +5 -0
- package/dist/server/app-worker-stages.js +1 -1
- package/dist/server/cacheability-request.js +2 -2
- 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 +1 -1
- package/dist/server/defer-until-stream-consumed.d.ts +2 -1
- package/dist/server/defer-until-stream-consumed.js +3 -1
- package/dist/server/dev-server.js +39 -28
- 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 +4 -1
- package/dist/server/headers.js +4 -1
- 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 +38 -0
- package/dist/server/image-optimization.js +94 -4
- package/dist/server/isr-cache.d.ts +10 -0
- package/dist/server/isr-cache.js +41 -6
- package/dist/server/metadata-route-response.js +11 -10
- package/dist/server/middleware-matcher.d.ts +2 -0
- package/dist/server/middleware-matcher.js +23 -2
- package/dist/server/middleware-path-to-regexp.js +1 -1
- package/dist/server/middleware-runtime.d.ts +13 -0
- package/dist/server/middleware-runtime.js +38 -25
- package/dist/server/middleware.d.ts +1 -1
- package/dist/server/middleware.js +3 -1
- package/dist/server/multi-stage.d.ts +11 -0
- package/dist/server/navigation-planner.js +1 -1
- package/dist/server/normalize-path.d.ts +0 -13
- package/dist/server/normalize-path.js +1 -34
- package/dist/server/open-redirect.d.ts +11 -4
- package/dist/server/open-redirect.js +11 -4
- package/dist/server/pages-api-route.d.ts +3 -2
- package/dist/server/pages-api-route.js +6 -5
- 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 +21 -3
- 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 +51 -121
- package/dist/server/pages-page-handler.d.ts +0 -6
- package/dist/server/pages-page-handler.js +189 -127
- package/dist/server/pages-page-response.d.ts +12 -6
- package/dist/server/pages-page-response.js +42 -35
- package/dist/server/pages-request-pipeline.d.ts +10 -2
- package/dist/server/pages-request-pipeline.js +41 -22
- package/dist/server/pages-request-stage-entry.d.ts +6 -0
- package/dist/server/pages-request-stage-entry.js +75 -16
- package/dist/server/pages-response-stage-entry.js +4 -0
- package/dist/server/pages-revalidate.js +3 -3
- package/dist/server/pages-router-entry.js +5 -4
- 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 +12 -0
- package/dist/server/prod-server.js +204 -74
- package/dist/server/proper-error.d.ts +4 -0
- package/dist/server/proper-error.js +31 -0
- package/dist/server/request-pipeline.d.ts +4 -1
- package/dist/server/request-pipeline.js +3 -2
- package/dist/server/revalidation-request.d.ts +1 -0
- package/dist/server/revalidation-request.js +1 -1
- package/dist/server/rsc-stream-hints.d.ts +1 -1
- package/dist/server/rsc-stream-hints.js +52 -5
- package/dist/server/seed-cache.d.ts +1 -0
- package/dist/server/seed-cache.js +5 -4
- 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 +9 -1
- package/dist/server/socket-error-backstop.js +46 -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 +99 -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-callable-runtime.d.ts +4 -2
- package/dist/shims/cache-callable-runtime.js +21 -12
- package/dist/shims/cache-handler.js +1 -9
- package/dist/shims/cache-runtime.d.ts +6 -1
- package/dist/shims/cache-runtime.js +2 -1
- package/dist/shims/cache.d.ts +2 -2
- package/dist/shims/cache.js +40 -13
- 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/fetch-cache-state.d.ts +66 -0
- package/dist/shims/fetch-cache-state.js +92 -0
- package/dist/shims/fetch-cache.d.ts +3 -67
- package/dist/shims/fetch-cache.js +160 -125
- package/dist/shims/head.d.ts +10 -6
- package/dist/shims/head.js +16 -14
- package/dist/shims/headers.js +2 -2
- package/dist/shims/image.js +2 -1
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +1 -1
- package/dist/shims/internal/hybrid-client-route-owner.js +1 -0
- package/dist/shims/internal/work-store-scope.d.ts +5 -0
- package/dist/shims/internal/work-store-scope.js +24 -0
- package/dist/shims/link-prefetch.js +5 -4
- package/dist/shims/link.js +2 -2
- package/dist/shims/navigation.js +34 -9
- package/dist/shims/request-context.d.ts +2 -0
- package/dist/shims/request-state-types.d.ts +2 -1
- package/dist/shims/router.js +21 -32
- package/dist/shims/server.d.ts +27 -4
- package/dist/shims/server.js +65 -9
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/url-utils.d.ts +9 -0
- package/dist/shims/url-utils.js +15 -4
- package/dist/utils/client-runtime-metadata.js +1 -1
- package/dist/utils/domain-locale.js +1 -1
- package/dist/utils/hash.d.ts +7 -0
- package/dist/utils/hash.js +11 -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 +6 -0
- package/dist/utils/plugin-rsc-version.js +41 -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 +10 -0
- package/dist/utils/react-version.js +39 -16
- package/package.json +11 -7
- package/dist/build/nitro-route-rules.d.ts +0 -47
- package/dist/build/nitro-route-rules.js +0 -79
- package/dist/plugins/cache-flight-codec.d.ts +0 -19
- package/dist/plugins/cache-flight-codec.js +0 -68
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { VINEXT_PRERENDER_SECRET_HEADER, VINEXT_REVALIDATE_HOST_HEADER } from "../utils/protocol-headers.js";
|
|
2
2
|
import { requestContextFromRequest } from "../config/request-context.js";
|
|
3
|
-
import { assetPrefixPathname, isNextStaticPath } from "../utils/asset-prefix.js";
|
|
4
|
-
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
5
3
|
import { hasBasePath, stripBasePath } from "../utils/base-path.js";
|
|
6
|
-
import { runWithExecutionContext } from "../shims/request-context.js";
|
|
7
4
|
import { VINEXT_CACHEABILITY_PROBE_QUERY_PARAM, VINEXT_EXPECTED_WORKER_VERSION_HEADER } from "./headers.js";
|
|
8
5
|
import { notFoundStaticAssetResponse } from "./http-error-responses.js";
|
|
9
6
|
import { attachRequestCfMetadata, cloneRequestWithHeaders, cloneRequestWithUrl, filterInternalHeaders, guardProtocolRelativeUrl } from "./request-pipeline.js";
|
|
7
|
+
import { assetPrefixPathname, isNextStaticPath } from "../utils/asset-prefix.js";
|
|
8
|
+
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
9
|
+
import { runWithExecutionContext } from "../shims/request-context.js";
|
|
10
10
|
import { normalizeDefaultLocalePathname } from "./pages-i18n.js";
|
|
11
|
+
import { isNextDataPathname } from "./pages-data-route.js";
|
|
11
12
|
import { getExplicitCdnCacheAdapter } from "../shims/cdn-cache-state.js";
|
|
12
13
|
import { CACHEABILITY_REQUEST_STATE } from "../shims/cacheability-classification.js";
|
|
13
14
|
import { applyCdnResponseIdentityHeaders, captureCdnResponsePolicyOverrides, reconcileCdnResponseHeadersAfterOuterPolicy, validateCdnRequest } from "./cache-control.js";
|
|
14
15
|
import { registerLazyDataCacheHandler } from "../shims/cache-handler.js";
|
|
15
|
-
import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, handleConfiguredImageOptimization, isImageOptimizationPath } from "./image-optimization.js";
|
|
16
|
+
import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, handleConfiguredImageOptimization, isImageOptimizationPath, isImageSourceBodyStatus } from "./image-optimization.js";
|
|
16
17
|
import { traceFrameworkRequest } from "./request-tracing.js";
|
|
17
18
|
import { resolveResponseStageCachePolicy } from "./config-headers.js";
|
|
19
|
+
import { createStaticAssetRequest } from "./worker-utils.js";
|
|
18
20
|
import { fetchWorkerFilesystemRoute, runPagesRequest, wrapMiddlewareWithBasePath } from "./pages-request-pipeline.js";
|
|
21
|
+
import { resolveClientBuildFile } from "./client-build-files.js";
|
|
19
22
|
import { createWorkerRevalidationContext } from "./worker-revalidation-context.js";
|
|
20
23
|
import { createWorkerPrerenderDiscoveryContext, createWorkerPrerenderReadinessResponse, isWorkerPrerenderDiscoveryPath } from "./worker-prerender-discovery.js";
|
|
21
24
|
import { getPagesResponseStageCacheDisposition } from "./pages-response-stage.js";
|
|
@@ -39,12 +42,13 @@ function haveSameHeaders(first, second) {
|
|
|
39
42
|
function captureOuterResponsePolicyHeaders(stagedHeaders, transportedPolicyHeaders) {
|
|
40
43
|
return captureCdnResponsePolicyOverrides(stagedHeaders, new Headers(transportedPolicyHeaders ?? []));
|
|
41
44
|
}
|
|
42
|
-
const { authorizeOnDemandRevalidate, hasMiddleware, hasRequestAwareDocument, matchApiRoute, matchPageRoute, normalizeDataRequest, publicFiles, runMiddleware, vinextConfig } = pagesEntry;
|
|
45
|
+
const { authorizeOnDemandRevalidate, hasMiddleware, hasRequestAwareDocument, matchApiRoute, matchPageRoute, normalizeDataRequest, publicFiles, clientBuildFiles, runMiddleware, vinextConfig } = pagesEntry;
|
|
43
46
|
const pagesRequestStageBuildId = pagesEntry.buildId ?? null;
|
|
44
47
|
const pagesRequestStagePrerenderSecret = pagesEntry.prerenderSecret ?? null;
|
|
45
48
|
const basePath = vinextConfig?.basePath ?? "";
|
|
46
49
|
const assetPathPrefix = assetPrefixPathname(vinextConfig?.assetPrefix ?? "");
|
|
47
50
|
const trailingSlash = vinextConfig?.trailingSlash ?? false;
|
|
51
|
+
const skipTrailingSlashRedirect = vinextConfig?.skipTrailingSlashRedirect ?? false;
|
|
48
52
|
const i18nConfig = vinextConfig?.i18n ?? null;
|
|
49
53
|
const configRedirects = vinextConfig?.redirects ?? [];
|
|
50
54
|
const configRewrites = vinextConfig?.rewrites ?? {
|
|
@@ -60,6 +64,17 @@ const imageConfig = vinextConfig?.images ? {
|
|
|
60
64
|
contentDispositionType: vinextConfig.images.contentDispositionType,
|
|
61
65
|
contentSecurityPolicy: vinextConfig.images.contentSecurityPolicy
|
|
62
66
|
} : void 0;
|
|
67
|
+
/**
|
|
68
|
+
* Whether the request stage serves this request as a client build file
|
|
69
|
+
* outside `_next/static`. Such responses resolve no route, so the Worker
|
|
70
|
+
* keeps their ASSETS cache policy out of route cacheability admission.
|
|
71
|
+
*/
|
|
72
|
+
function isPagesClientBuildFileRequest(request, env, ctx) {
|
|
73
|
+
return (request.method === "GET" || request.method === "HEAD") && resolveAssetFetcher(ctx?.assets, env, "worker") !== void 0 && resolveClientBuildFile(new URL(request.url).pathname, basePath, clientBuildFiles) !== null;
|
|
74
|
+
}
|
|
75
|
+
function resolveAssetFetcher(assets, env, defaultHostRuntime) {
|
|
76
|
+
return assets ?? getExplicitCdnCacheAdapter()?.assets ?? (defaultHostRuntime === "worker" ? env?.ASSETS : void 0);
|
|
77
|
+
}
|
|
63
78
|
/** Run the request-time stage with a host-owned response dispatcher. */
|
|
64
79
|
function handleRequestStage(request, env, ctx, dispatchResponseStage) {
|
|
65
80
|
const originalRequest = request;
|
|
@@ -89,7 +104,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
89
104
|
let sharedOuterPolicyHeaders = null;
|
|
90
105
|
let ctx = createWorkerRevalidationContext(platformCtx, (internalRequest, internalCtx) => handleRequest(internalRequest, env, internalCtx, dispatchResponseStage, forceCacheBypass, defaultHostRuntime, assets), defaultHostRuntime);
|
|
91
106
|
configuredCdnCacheAdapters.registerConfiguredCacheAdapters(env);
|
|
92
|
-
assets
|
|
107
|
+
assets = resolveAssetFetcher(assets, env, defaultHostRuntime);
|
|
93
108
|
if (configuredCdnCacheAdapters.hasConfiguredDataCache) registerLazyDataCacheHandler(async () => {
|
|
94
109
|
(await import("virtual:vinext-cache-adapters")).registerConfiguredCacheAdapters(env);
|
|
95
110
|
});
|
|
@@ -113,7 +128,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
113
128
|
probeRoute = readWorkerCacheabilityProbeRoute(request);
|
|
114
129
|
const probeUrl = new URL(request.url);
|
|
115
130
|
probeUrl.searchParams.delete(VINEXT_CACHEABILITY_PROBE_QUERY_PARAM);
|
|
116
|
-
request =
|
|
131
|
+
request = cloneRequestWithUrl(request, probeUrl.href);
|
|
117
132
|
}
|
|
118
133
|
}
|
|
119
134
|
let responseStageDispatched = false;
|
|
@@ -143,7 +158,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
143
158
|
resolvedRoutePathname: pathname
|
|
144
159
|
},
|
|
145
160
|
kind: "pages-prerender-discovery",
|
|
146
|
-
protocolVersion:
|
|
161
|
+
protocolVersion: 5,
|
|
147
162
|
requestHost: url.host,
|
|
148
163
|
stagedHeaders: null
|
|
149
164
|
}, { cache: "bypass" }, env, ctx);
|
|
@@ -154,6 +169,10 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
154
169
|
} catch {
|
|
155
170
|
return new Response("Bad Request", { status: 400 });
|
|
156
171
|
}
|
|
172
|
+
if (assets && (request.method === "GET" || request.method === "HEAD")) {
|
|
173
|
+
const clientBuildFile = resolveClientBuildFile(pathname, basePath, clientBuildFiles);
|
|
174
|
+
if (clientBuildFile) return await assets.fetch(createStaticAssetRequest(clientBuildFile, request));
|
|
175
|
+
}
|
|
157
176
|
const missingBuildAsset = isNextStaticPath(pathname, basePath, assetPathPrefix);
|
|
158
177
|
const hadBasePath = !basePath || hasBasePath(pathname, basePath);
|
|
159
178
|
{
|
|
@@ -189,6 +208,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
189
208
|
assetPrefix: vinextConfig?.assetPrefix,
|
|
190
209
|
basePath,
|
|
191
210
|
trailingSlash,
|
|
211
|
+
skipTrailingSlashRedirect,
|
|
192
212
|
i18nConfig,
|
|
193
213
|
configRedirects,
|
|
194
214
|
configRewrites,
|
|
@@ -228,7 +248,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
228
248
|
resolvedRoutePathname: new URL(resolvedUrl, req.url).pathname
|
|
229
249
|
},
|
|
230
250
|
kind: "pages-page",
|
|
231
|
-
protocolVersion:
|
|
251
|
+
protocolVersion: 5,
|
|
232
252
|
requestHost: new URL(req.url).host,
|
|
233
253
|
renderOptions: isDataReq ? {
|
|
234
254
|
...options,
|
|
@@ -268,7 +288,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
268
288
|
resolvedRoutePathname: new URL(apiUrl, req.url).pathname
|
|
269
289
|
},
|
|
270
290
|
kind: "pages-api",
|
|
271
|
-
protocolVersion:
|
|
291
|
+
protocolVersion: 5,
|
|
272
292
|
requestHost: new URL(req.url).host,
|
|
273
293
|
stagedHeaders: [...stagedHeaders]
|
|
274
294
|
});
|
|
@@ -285,17 +305,56 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
285
305
|
return response;
|
|
286
306
|
}) : dispatched;
|
|
287
307
|
},
|
|
288
|
-
serveFilesystemRoute: async (requestPathname, _stagedHeaders, phase, resolvedUrl) => {
|
|
308
|
+
serveFilesystemRoute: async (requestPathname, _stagedHeaders, phase, resolvedUrl, filesystemRequest, resolvedPathnameHasBasePath) => {
|
|
289
309
|
if (!assets) return false;
|
|
290
|
-
if (isImageOptimizationPath(requestPathname)) {
|
|
310
|
+
if (resolvedPathnameHasBasePath && isImageOptimizationPath(requestPathname)) {
|
|
291
311
|
const imageUrl = new URL(resolvedUrl, request.url);
|
|
292
|
-
const imageRequest =
|
|
312
|
+
const imageRequest = cloneRequestWithUrl(request, imageUrl.href);
|
|
293
313
|
const allowedWidths = [...vinextConfig?.images?.deviceSizes ?? DEFAULT_DEVICE_SIZES, ...vinextConfig?.images?.imageSizes ?? DEFAULT_IMAGE_SIZES];
|
|
294
|
-
|
|
314
|
+
const { fetchWorkerImageSource } = await import("./worker-image-optimization.js");
|
|
315
|
+
return handleConfiguredImageOptimization(imageRequest, (sourceUrl, sourceImageRequest) => fetchWorkerImageSource(sourceUrl, sourceImageRequest, {
|
|
316
|
+
assets,
|
|
317
|
+
basePath,
|
|
318
|
+
assetPathPrefix,
|
|
319
|
+
clientBuildFiles,
|
|
320
|
+
fetchPublicFile: (sourceRequest) => resolvePublicImageSource(sourceRequest, assets)
|
|
321
|
+
}), allowedWidths, imageConfig);
|
|
295
322
|
}
|
|
296
|
-
return fetchWorkerFilesystemRoute(
|
|
323
|
+
return fetchWorkerFilesystemRoute(filesystemRequest, requestPathname, phase, (assetRequest) => Promise.resolve(assets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, hadBasePath);
|
|
297
324
|
}
|
|
298
325
|
};
|
|
326
|
+
const resolvePublicImageSource = async (sourceRequest, sourceAssets) => {
|
|
327
|
+
const sourceUrl = new URL(sourceRequest.url);
|
|
328
|
+
if (guardProtocolRelativeUrl(sourceUrl.pathname, sourceUrl.search)) return null;
|
|
329
|
+
const sourceHadBasePath = !basePath || hasBasePath(sourceUrl.pathname, basePath);
|
|
330
|
+
const sourcePathname = stripBasePath(sourceUrl.pathname, basePath);
|
|
331
|
+
if (isNextDataPathname(sourcePathname)) return null;
|
|
332
|
+
let sourceAsset = null;
|
|
333
|
+
const sourceResult = await runPagesRequest(attachRequestCfMetadata(new Request(new URL(sourcePathname + sourceUrl.search, sourceUrl), { signal: sourceRequest.signal }), sourceRequest), {
|
|
334
|
+
...deps,
|
|
335
|
+
hadBasePath: sourceHadBasePath,
|
|
336
|
+
isDataReq: false,
|
|
337
|
+
isDataRequest: false,
|
|
338
|
+
middlewareRequest: void 0,
|
|
339
|
+
dataNotFoundResponse: null,
|
|
340
|
+
recordCacheability: false,
|
|
341
|
+
runMiddleware: typeof runMiddleware === "function" ? wrapMiddlewareWithBasePath(runMiddleware, basePath, sourceHadBasePath) : null,
|
|
342
|
+
renderPage: null,
|
|
343
|
+
handleApi: null,
|
|
344
|
+
serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, filesystemRequest) => {
|
|
345
|
+
if (isImageOptimizationPath(candidate)) return false;
|
|
346
|
+
const asset = await fetchWorkerFilesystemRoute(filesystemRequest, candidate, phase, (assetRequest) => Promise.resolve(sourceAssets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, sourceHadBasePath);
|
|
347
|
+
if (asset === false) return false;
|
|
348
|
+
sourceAsset = asset;
|
|
349
|
+
return new Response(null);
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
if (sourceResult.type !== "response") return null;
|
|
353
|
+
await sourceResult.response.body?.cancel().catch(() => {});
|
|
354
|
+
if (isImageSourceBodyStatus(sourceResult.response.status)) return sourceAsset;
|
|
355
|
+
await sourceAsset?.body?.cancel().catch(() => {});
|
|
356
|
+
return null;
|
|
357
|
+
};
|
|
299
358
|
const result = await runPagesRequest(request, deps);
|
|
300
359
|
if (result.type === "response") {
|
|
301
360
|
let response = result.response;
|
|
@@ -317,4 +376,4 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
|
|
|
317
376
|
}
|
|
318
377
|
}
|
|
319
378
|
//#endregion
|
|
320
|
-
export { handleRequestStage, handleRequestStageLocally, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret };
|
|
379
|
+
export { handleRequestStage, handleRequestStageLocally, isPagesClientBuildFileRequest, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret };
|
|
@@ -53,6 +53,10 @@ async function renderPagesResponse(request, env, platformCtx, props, stagedHeade
|
|
|
53
53
|
...ctx,
|
|
54
54
|
isPrerenderPathDiscovery: true
|
|
55
55
|
};
|
|
56
|
+
else if (props.kind === "pages-page" && dispatchOptions.regeneratesStoredEntry === true) ctx = {
|
|
57
|
+
...ctx,
|
|
58
|
+
isStoredEntryRegeneration: true
|
|
59
|
+
};
|
|
56
60
|
const render = async (cacheabilityContext) => {
|
|
57
61
|
if (props.kind === "pages-prerender-discovery") {
|
|
58
62
|
const readinessResponse = createWorkerPrerenderReadinessResponse(cacheabilityContext, request);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { PRERENDER_REVALIDATE_HEADER, PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER, VINEXT_REVALIDATE_HOST_HEADER } from "../utils/protocol-headers.js";
|
|
2
|
-
import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
3
2
|
import { VINEXT_REVALIDATED_CACHE_TAG_HEADER } from "./headers.js";
|
|
3
|
+
import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
4
|
+
import { resolveRequestHost, resolveRequestProtocol } from "./proxy-trust.js";
|
|
4
5
|
import { normalizeDomainHostname } from "../utils/domain-locale.js";
|
|
5
6
|
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
6
7
|
import { getRevalidateSecret, isOnDemandRevalidateRequest } from "./revalidation-request.js";
|
|
7
8
|
import "./isr-cache.js";
|
|
8
|
-
import { resolveRequestHost, resolveRequestProtocol } from "./proxy-trust.js";
|
|
9
9
|
//#region src/server/pages-revalidate.ts
|
|
10
10
|
async function performOnDemandRevalidate(source, urlPath, opts = {}, trustedOrigin, allowedRevalidateHeaderKeys = [], dev = false) {
|
|
11
11
|
if (typeof urlPath !== "string" || !urlPath.startsWith("/")) throw new Error(`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received ${urlPath}`);
|
|
@@ -29,7 +29,7 @@ async function performOnDemandRevalidate(source, urlPath, opts = {}, trustedOrig
|
|
|
29
29
|
const res = await fetchRevalidateTarget(target, headers, dispatchRevalidate);
|
|
30
30
|
if (!((res.headers.get("x-vercel-cache") ?? res.headers.get("x-nextjs-cache"))?.toUpperCase() === "REVALIDATED" || res.status === 200 || res.status === 404 && opts.unstable_onlyGenerated === true)) throw new Error(`Failed to revalidate ${urlPath}: ${res.status}`);
|
|
31
31
|
const regeneratedTag = res.headers.get(VINEXT_REVALIDATED_CACHE_TAG_HEADER);
|
|
32
|
-
if (regeneratedTag) await getCdnCacheAdapter().revalidateTag(regeneratedTag);
|
|
32
|
+
if (regeneratedTag) await getCdnCacheAdapter().revalidateTag(decodeURIComponent(regeneratedTag));
|
|
33
33
|
}
|
|
34
34
|
function readSourceHeader(source, key) {
|
|
35
35
|
if (isWebHeaders(source)) return source.get(key) ?? void 0;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { runWithExecutionContext } from "../shims/request-context.js";
|
|
2
1
|
import { VINEXT_CACHEABILITY_PROBE_HEADER, VINEXT_CACHEABILITY_PROBE_QUERY_PARAM } from "./headers.js";
|
|
3
2
|
import { cloneRequestWithHeaders, cloneRequestWithUrl } from "./request-pipeline.js";
|
|
3
|
+
import { runWithExecutionContext } from "../shims/request-context.js";
|
|
4
4
|
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
5
5
|
import { validateCdnRequest } from "./cache-control.js";
|
|
6
6
|
import { createWorkerRevalidationContext } from "./worker-revalidation-context.js";
|
|
7
7
|
import { createWorkerPrerenderDiscoveryContext, createWorkerPrerenderReadinessResponse } from "./worker-prerender-discovery.js";
|
|
8
|
-
import { handleRequestStageLocally, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret } from "./pages-request-stage-entry.js";
|
|
8
|
+
import { handleRequestStageLocally, isPagesClientBuildFileRequest, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret } from "./pages-request-stage-entry.js";
|
|
9
9
|
import { renderPagesResponse } from "./pages-response-stage-entry.js";
|
|
10
10
|
import { registerConfiguredCacheAdapters } from "virtual:vinext-cache-adapters";
|
|
11
11
|
import { __ensureInstrumentation } from "virtual:vinext-pages-request-entry";
|
|
@@ -23,8 +23,9 @@ async function handleSingleStageRequest(request, env, platformCtx) {
|
|
|
23
23
|
if (readinessResponse.status === 204) await Promise.all([__ensureInstrumentation(), __ensureInstrumentation$1()]);
|
|
24
24
|
return await validateCdnRequest(request) ?? readinessResponse;
|
|
25
25
|
}
|
|
26
|
+
const isClientBuildFile = isPagesClientBuildFileRequest(request, env, ctx);
|
|
26
27
|
let finalize;
|
|
27
|
-
if (request.headers.has("X-Vinext-Cacheability-Probe")) {
|
|
28
|
+
if (!isClientBuildFile && request.headers.has("X-Vinext-Cacheability-Probe")) {
|
|
28
29
|
const cacheability = await import("./cacheability-request.js");
|
|
29
30
|
const probeContext = cacheability.createWorkerCacheabilityContext(ctx, request, pagesRequestStagePrerenderSecret, adapter.responseVary);
|
|
30
31
|
if (probeContext !== ctx) {
|
|
@@ -39,7 +40,7 @@ async function handleSingleStageRequest(request, env, platformCtx) {
|
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
const requiresCompletedResponseAdmission = adapter.requiresCompletedResponseAdmission === true;
|
|
42
|
-
if (!finalize && (__cacheabilityManifest || requiresCompletedResponseAdmission)) {
|
|
43
|
+
if (!finalize && !isClientBuildFile && (__cacheabilityManifest || requiresCompletedResponseAdmission)) {
|
|
43
44
|
const cacheability = await import("./cacheability-request.js");
|
|
44
45
|
const admissionContext = cacheability.createWorkerCacheabilityAdmissionContext(ctx, request, __cacheabilityManifest, pagesRequestStageBuildId, requiresCompletedResponseAdmission, adapter.responseVary);
|
|
45
46
|
if (admissionContext !== ctx) {
|
|
@@ -32,7 +32,6 @@ export type PrerenderManifest = {
|
|
|
32
32
|
pregeneratedConcretePaths?: Array<[string, string[]]>;
|
|
33
33
|
};
|
|
34
34
|
export type PrerenderedPathSelectionOptions = {
|
|
35
|
-
includeFallbackShells?: boolean;
|
|
36
35
|
includeErrorDocuments?: boolean;
|
|
37
36
|
};
|
|
38
37
|
export declare function readPrerenderManifest(manifestPath: string): PrerenderManifest | null;
|
|
@@ -58,8 +57,9 @@ export declare function buildPregeneratedConcretePathTable(manifest: PrerenderMa
|
|
|
58
57
|
* This intentionally includes both App Router and Pages Router entries because
|
|
59
58
|
* deploy-time cache warmup should exercise the same URLs the prerender phase
|
|
60
59
|
* proved are statically renderable. PPR fallback-shell placeholder artifacts
|
|
61
|
-
* and known error documents
|
|
62
|
-
* synthetic bracket paths or treat a healthy 404 response as a failed
|
|
60
|
+
* are always excluded, and known error documents by default, so warmup does not
|
|
61
|
+
* request synthetic bracket paths or treat a healthy 404 response as a failed
|
|
62
|
+
* warmup.
|
|
63
63
|
*/
|
|
64
64
|
export declare function getPrerenderedConcretePaths(manifest: PrerenderManifest, options?: PrerenderedPathSelectionOptions): string[];
|
|
65
65
|
//#endregion
|
|
@@ -65,8 +65,9 @@ function buildPregeneratedConcretePathTable(manifest) {
|
|
|
65
65
|
* This intentionally includes both App Router and Pages Router entries because
|
|
66
66
|
* deploy-time cache warmup should exercise the same URLs the prerender phase
|
|
67
67
|
* proved are statically renderable. PPR fallback-shell placeholder artifacts
|
|
68
|
-
* and known error documents
|
|
69
|
-
* synthetic bracket paths or treat a healthy 404 response as a failed
|
|
68
|
+
* are always excluded, and known error documents by default, so warmup does not
|
|
69
|
+
* request synthetic bracket paths or treat a healthy 404 response as a failed
|
|
70
|
+
* warmup.
|
|
70
71
|
*/
|
|
71
72
|
function getPrerenderedConcretePaths(manifest, options) {
|
|
72
73
|
const routes = manifest.routes;
|
|
@@ -76,7 +77,7 @@ function getPrerenderedConcretePaths(manifest, options) {
|
|
|
76
77
|
for (const route of routes) {
|
|
77
78
|
if (route.status !== "rendered" || route.notFound) continue;
|
|
78
79
|
const pathname = route.path ?? route.route;
|
|
79
|
-
if (
|
|
80
|
+
if (isFallbackShellArtifactPath(pathname, route)) continue;
|
|
80
81
|
if (!options?.includeErrorDocuments && isErrorDocumentRoute(pathname, route)) continue;
|
|
81
82
|
if (seen.has(pathname)) continue;
|
|
82
83
|
seen.add(pathname);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { runInWorkStoreScope } from "../shims/internal/work-store-scope.js";
|
|
1
2
|
import { workUnitAsyncStorage } from "../shims/internal/work-unit-async-storage.js";
|
|
2
3
|
import { isRouteCacheabilityProbe } from "../shims/cacheability-classification.js";
|
|
3
4
|
import { NO_STORE_CACHE_CONTROL } from "./cache-control.js";
|
|
@@ -15,6 +16,9 @@ import { NO_STORE_CACHE_CONTROL } from "./cache-control.js";
|
|
|
15
16
|
*
|
|
16
17
|
*/
|
|
17
18
|
function runWithPrerenderWorkUnit(fn, options) {
|
|
19
|
+
return runInWorkStoreScope(() => runWithWorkUnit(fn, options));
|
|
20
|
+
}
|
|
21
|
+
function runWithWorkUnit(fn, options) {
|
|
18
22
|
if (process.env.VINEXT_PRERENDER === "1" || isRouteCacheabilityProbe()) {
|
|
19
23
|
if (options?.cacheComponents !== true) return workUnitAsyncStorage.run({ type: "prerender-legacy" }, fn);
|
|
20
24
|
return runWithPrerenderWorkUnitOwner(fn, options);
|
|
@@ -155,5 +155,17 @@ export declare function resolveAppRouterPrerenderSeeder(entryModule: unknown): A
|
|
|
155
155
|
* route through; the on-disk path is just `_next/static/...`.
|
|
156
156
|
*/
|
|
157
157
|
export declare function resolveAppRouterAssetPath(pathname: string, assetPathPrefix: string, assetPrefix: string): string | null;
|
|
158
|
+
/**
|
|
159
|
+
* Create the Pages Router request handler for `vite preview`. Vite's preview
|
|
160
|
+
* middleware (proxy, compression, `base`, static files) runs first, so this
|
|
161
|
+
* handles only the requests Vite doesn't serve and leaves compression to Vite.
|
|
162
|
+
* Resolves to null when the build has no Pages Router server entry.
|
|
163
|
+
*/
|
|
164
|
+
export declare function createPagesPreviewHandler(options: {
|
|
165
|
+
clientDir: string;
|
|
166
|
+
serverDir: string;
|
|
167
|
+
host: string;
|
|
168
|
+
port: number;
|
|
169
|
+
}): Promise<((req: IncomingMessage, res: ServerResponse) => void) | null>;
|
|
158
170
|
//#endregion
|
|
159
171
|
export { COMPRESS_THRESHOLD, isCompressibleContentType, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveRequestHost as resolveHost, sendCompressed, sendWebResponse, trustProxy, trustedHosts, tryServeStatic, waitForNodeResponseCompletion };
|