vinext 0.0.52 → 0.0.53
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 +1 -1
- package/dist/build/clean-output.d.ts +14 -0
- package/dist/build/clean-output.js +36 -0
- package/dist/build/clean-output.js.map +1 -0
- package/dist/build/prerender.d.ts +6 -2
- package/dist/build/prerender.js +49 -11
- package/dist/build/prerender.js.map +1 -1
- package/dist/build/run-prerender.js +10 -1
- package/dist/build/run-prerender.js.map +1 -1
- package/dist/build/static-export.d.ts +5 -0
- package/dist/build/static-export.js +8 -3
- package/dist/build/static-export.js.map +1 -1
- package/dist/cli.js +19 -4
- package/dist/cli.js.map +1 -1
- package/dist/client/instrumentation-client-inject.d.ts +34 -0
- package/dist/client/instrumentation-client-inject.js +57 -0
- package/dist/client/instrumentation-client-inject.js.map +1 -0
- package/dist/client/navigation-runtime.d.ts +14 -1
- package/dist/client/navigation-runtime.js +16 -1
- package/dist/client/navigation-runtime.js.map +1 -1
- package/dist/client/vinext-next-data.d.ts +2 -1
- package/dist/client/vinext-next-data.js.map +1 -1
- package/dist/client/window-next.d.ts +10 -2
- package/dist/client/window-next.js.map +1 -1
- package/dist/cloudflare/tpr.js +1 -1
- package/dist/cloudflare/tpr.js.map +1 -1
- package/dist/config/config-matchers.js +2 -1
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/next-config.d.ts +12 -3
- package/dist/config/next-config.js +44 -14
- package/dist/config/next-config.js.map +1 -1
- package/dist/deploy.js +29 -7
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +4 -2
- package/dist/entries/app-rsc-entry.js +23 -3
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/pages-client-entry.js +22 -1
- package/dist/entries/pages-client-entry.js.map +1 -1
- package/dist/entries/pages-server-entry.js +211 -31
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/index.js +29 -6
- package/dist/index.js.map +1 -1
- package/dist/plugins/fonts.js +25 -2
- package/dist/plugins/fonts.js.map +1 -1
- package/dist/routing/route-trie.js +13 -18
- package/dist/routing/route-trie.js.map +1 -1
- package/dist/routing/utils.d.ts +11 -1
- package/dist/routing/utils.js +15 -1
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.js +18 -9
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/app-browser-action-result.d.ts +16 -1
- package/dist/server/app-browser-action-result.js +15 -1
- package/dist/server/app-browser-action-result.js.map +1 -1
- package/dist/server/app-browser-entry.js +22 -12
- package/dist/server/app-browser-entry.js.map +1 -1
- package/dist/server/app-elements.js +1 -1
- package/dist/server/app-fallback-renderer.d.ts +12 -3
- package/dist/server/app-fallback-renderer.js +10 -5
- package/dist/server/app-fallback-renderer.js.map +1 -1
- package/dist/server/app-history-state.js +6 -2
- package/dist/server/app-history-state.js.map +1 -1
- package/dist/server/app-interception-context-header.d.ts +33 -0
- package/dist/server/app-interception-context-header.js +44 -0
- package/dist/server/app-interception-context-header.js.map +1 -0
- package/dist/server/app-mounted-slots-header.d.ts +19 -0
- package/dist/server/app-mounted-slots-header.js +40 -1
- package/dist/server/app-mounted-slots-header.js.map +1 -1
- package/dist/server/app-optimistic-routing.js +26 -18
- package/dist/server/app-optimistic-routing.js.map +1 -1
- package/dist/server/app-page-boundary-render.d.ts +1 -0
- package/dist/server/app-page-boundary-render.js +2 -0
- package/dist/server/app-page-boundary-render.js.map +1 -1
- package/dist/server/app-page-boundary.d.ts +1 -0
- package/dist/server/app-page-boundary.js +2 -0
- package/dist/server/app-page-boundary.js.map +1 -1
- package/dist/server/app-page-cache.d.ts +2 -0
- package/dist/server/app-page-cache.js +7 -1
- package/dist/server/app-page-cache.js.map +1 -1
- package/dist/server/app-page-dispatch.d.ts +3 -0
- package/dist/server/app-page-dispatch.js +11 -4
- package/dist/server/app-page-dispatch.js.map +1 -1
- package/dist/server/app-page-element-builder.d.ts +2 -1
- package/dist/server/app-page-element-builder.js +5 -2
- package/dist/server/app-page-element-builder.js.map +1 -1
- package/dist/server/app-page-execution.d.ts +1 -0
- package/dist/server/app-page-execution.js +2 -0
- package/dist/server/app-page-execution.js.map +1 -1
- package/dist/server/app-page-head.d.ts +1 -0
- package/dist/server/app-page-head.js +8 -0
- package/dist/server/app-page-head.js.map +1 -1
- package/dist/server/app-page-render-observation.js +1 -1
- package/dist/server/app-page-render.d.ts +1 -0
- package/dist/server/app-page-render.js +5 -2
- package/dist/server/app-page-render.js.map +1 -1
- package/dist/server/app-page-response.d.ts +11 -1
- package/dist/server/app-page-response.js +14 -2
- package/dist/server/app-page-response.js.map +1 -1
- package/dist/server/app-page-route-wiring.d.ts +1 -0
- package/dist/server/app-page-route-wiring.js +19 -6
- package/dist/server/app-page-route-wiring.js.map +1 -1
- package/dist/server/app-page-stream.d.ts +1 -0
- package/dist/server/app-page-stream.js +2 -0
- package/dist/server/app-page-stream.js.map +1 -1
- package/dist/server/app-route-handler-dispatch.d.ts +1 -0
- package/dist/server/app-route-handler-dispatch.js +3 -0
- package/dist/server/app-route-handler-dispatch.js.map +1 -1
- 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-execution.js.map +1 -1
- package/dist/server/app-route-handler-response.js +1 -1
- package/dist/server/app-rsc-handler.d.ts +2 -0
- package/dist/server/app-rsc-handler.js +18 -9
- package/dist/server/app-rsc-handler.js.map +1 -1
- package/dist/server/app-rsc-request-normalization.js +3 -2
- package/dist/server/app-rsc-request-normalization.js.map +1 -1
- package/dist/server/app-segment-config.d.ts +4 -1
- package/dist/server/app-segment-config.js +6 -1
- package/dist/server/app-segment-config.js.map +1 -1
- package/dist/server/app-server-action-execution.d.ts +1 -0
- package/dist/server/app-server-action-execution.js +4 -0
- package/dist/server/app-server-action-execution.js.map +1 -1
- package/dist/server/app-ssr-entry.js +39 -3
- package/dist/server/app-ssr-entry.js.map +1 -1
- package/dist/server/app-ssr-stream.d.ts +24 -1
- package/dist/server/app-ssr-stream.js +78 -5
- package/dist/server/app-ssr-stream.js.map +1 -1
- package/dist/server/app-static-generation.d.ts +1 -0
- package/dist/server/app-static-generation.js +2 -1
- package/dist/server/app-static-generation.js.map +1 -1
- package/dist/server/default-not-found-module.d.ts +20 -0
- package/dist/server/default-not-found-module.js +20 -0
- package/dist/server/default-not-found-module.js.map +1 -0
- package/dist/server/dev-server.d.ts +1 -1
- package/dist/server/dev-server.js +23 -7
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/headers.d.ts +5 -1
- package/dist/server/headers.js +5 -1
- package/dist/server/headers.js.map +1 -1
- package/dist/server/image-optimization.d.ts +13 -4
- package/dist/server/image-optimization.js +15 -4
- package/dist/server/image-optimization.js.map +1 -1
- package/dist/server/middleware.js +1 -1
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/pages-api-route.d.ts +18 -0
- package/dist/server/pages-api-route.js +3 -1
- package/dist/server/pages-api-route.js.map +1 -1
- package/dist/server/pages-body-parser-config.d.ts +60 -0
- package/dist/server/pages-body-parser-config.js +79 -0
- package/dist/server/pages-body-parser-config.js.map +1 -0
- package/dist/server/pages-data-route.js +1 -0
- package/dist/server/pages-data-route.js.map +1 -1
- package/dist/server/pages-default-404.d.ts +31 -0
- package/dist/server/pages-default-404.js +40 -0
- package/dist/server/pages-default-404.js.map +1 -0
- package/dist/server/pages-node-compat.d.ts +10 -0
- package/dist/server/pages-node-compat.js +12 -1
- package/dist/server/pages-node-compat.js.map +1 -1
- package/dist/server/pages-page-data.d.ts +40 -0
- package/dist/server/pages-page-data.js +16 -14
- package/dist/server/pages-page-data.js.map +1 -1
- package/dist/server/pages-page-response.d.ts +2 -0
- package/dist/server/pages-page-response.js +11 -8
- package/dist/server/pages-page-response.js.map +1 -1
- package/dist/server/prerender-route-params.d.ts +14 -0
- package/dist/server/prerender-route-params.js +94 -0
- package/dist/server/prerender-route-params.js.map +1 -0
- package/dist/server/prod-server.d.ts +3 -23
- package/dist/server/prod-server.js +40 -57
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/proxy-trust.d.ts +41 -0
- package/dist/server/proxy-trust.js +70 -0
- package/dist/server/proxy-trust.js.map +1 -0
- package/dist/server/request-pipeline.d.ts +3 -3
- package/dist/server/request-pipeline.js +5 -4
- package/dist/server/request-pipeline.js.map +1 -1
- package/dist/server/seed-cache.js +12 -6
- package/dist/server/seed-cache.js.map +1 -1
- package/dist/server/static-file-cache.js +1 -1
- package/dist/server/static-file-cache.js.map +1 -1
- package/dist/server/streaming-metadata.d.ts +5 -0
- package/dist/server/streaming-metadata.js +10 -0
- package/dist/server/streaming-metadata.js.map +1 -0
- package/dist/shims/app-router-scroll-state.d.ts +12 -0
- package/dist/shims/app-router-scroll-state.js +38 -0
- package/dist/shims/app-router-scroll-state.js.map +1 -0
- package/dist/shims/app-router-scroll.d.ts +14 -0
- package/dist/shims/app-router-scroll.js +100 -0
- package/dist/shims/app-router-scroll.js.map +1 -0
- package/dist/shims/before-interactive-context.d.ts +30 -0
- package/dist/shims/before-interactive-context.js +10 -0
- package/dist/shims/before-interactive-context.js.map +1 -0
- package/dist/shims/cache-runtime.d.ts +1 -1
- package/dist/shims/cache-runtime.js +14 -1
- package/dist/shims/cache-runtime.js.map +1 -1
- package/dist/shims/default-not-found.d.ts +12 -0
- package/dist/shims/default-not-found.js +61 -0
- package/dist/shims/default-not-found.js.map +1 -0
- package/dist/shims/font-local.d.ts +5 -0
- package/dist/shims/font-local.js +6 -2
- package/dist/shims/font-local.js.map +1 -1
- package/dist/shims/head.js +4 -4
- package/dist/shims/head.js.map +1 -1
- package/dist/shims/headers.d.ts +6 -2
- package/dist/shims/headers.js +64 -21
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/image.d.ts +1 -1
- package/dist/shims/image.js +4 -4
- package/dist/shims/image.js.map +1 -1
- package/dist/shims/internal/pages-data-target.d.ts +58 -0
- package/dist/shims/internal/pages-data-target.js +91 -0
- package/dist/shims/internal/pages-data-target.js.map +1 -0
- package/dist/shims/internal/pages-data-url.d.ts +42 -0
- package/dist/shims/internal/pages-data-url.js +73 -0
- package/dist/shims/internal/pages-data-url.js.map +1 -0
- package/dist/shims/link.js +59 -9
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +2 -1
- package/dist/shims/metadata.js +61 -2
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.js +32 -9
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/router.js +376 -77
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/script.js +86 -12
- package/dist/shims/script.js.map +1 -1
- package/dist/shims/server.js +1 -0
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/url-utils.d.ts +2 -1
- package/dist/shims/url-utils.js +15 -4
- package/dist/shims/url-utils.js.map +1 -1
- package/dist/utils/html-limited-bots.d.ts +5 -0
- package/dist/utils/html-limited-bots.js +15 -0
- package/dist/utils/html-limited-bots.js.map +1 -0
- package/dist/utils/query.d.ts +6 -0
- package/dist/utils/query.js +10 -1
- package/dist/utils/query.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { StaticFileCache } from "./static-file-cache.js";
|
|
2
|
+
import { resolveRequestHost, trustProxy, trustedHosts } from "./proxy-trust.js";
|
|
2
3
|
import * as _$node_http0 from "node:http";
|
|
3
4
|
import { IncomingMessage, ServerResponse } from "node:http";
|
|
4
5
|
|
|
@@ -50,27 +51,6 @@ declare function sendCompressed(req: IncomingMessage, res: ServerResponse, body:
|
|
|
50
51
|
* unlike the old sync existsSync/statSync approach).
|
|
51
52
|
*/
|
|
52
53
|
declare function tryServeStatic(req: IncomingMessage, res: ServerResponse, clientDir: string, pathname: string, compress: boolean, cache?: StaticFileCache, extraHeaders?: Record<string, string | string[]>, statusCode?: number): Promise<boolean>;
|
|
53
|
-
/**
|
|
54
|
-
* Resolve the host for a request, ignoring X-Forwarded-Host to prevent
|
|
55
|
-
* host header poisoning attacks (open redirects, cache poisoning).
|
|
56
|
-
*
|
|
57
|
-
* X-Forwarded-Host is only trusted when the VINEXT_TRUSTED_HOSTS env var
|
|
58
|
-
* lists the forwarded host value. Without this, an attacker can send
|
|
59
|
-
* X-Forwarded-Host: evil.com and poison any redirect that resolves
|
|
60
|
-
* against request.url.
|
|
61
|
-
*
|
|
62
|
-
* On Cloudflare Workers, X-Forwarded-Host is always set by Cloudflare
|
|
63
|
-
* itself, so this is only a concern for the Node.js prod-server.
|
|
64
|
-
*/
|
|
65
|
-
declare function resolveHost(req: IncomingMessage, fallback: string): string;
|
|
66
|
-
/** Hosts that are allowed as X-Forwarded-Host values (stored lowercase). */
|
|
67
|
-
declare const trustedHosts: Set<string>;
|
|
68
|
-
/**
|
|
69
|
-
* Whether to trust X-Forwarded-Proto from upstream proxies.
|
|
70
|
-
* Enabled when VINEXT_TRUST_PROXY=1 or when VINEXT_TRUSTED_HOSTS is set
|
|
71
|
-
* (having trusted hosts implies a trusted proxy).
|
|
72
|
-
*/
|
|
73
|
-
declare const trustProxy: boolean;
|
|
74
54
|
/**
|
|
75
55
|
* Convert a Node.js IncomingMessage to a Web Request object.
|
|
76
56
|
*
|
|
@@ -80,7 +60,7 @@ declare const trustProxy: boolean;
|
|
|
80
60
|
* Router prod server normalizes before static-asset lookup, and can pass
|
|
81
61
|
* the result here so the downstream RSC handler doesn't re-normalize).
|
|
82
62
|
*/
|
|
83
|
-
declare function nodeToWebRequest(req: IncomingMessage, urlOverride?: string): Request;
|
|
63
|
+
declare function nodeToWebRequest(req: IncomingMessage, urlOverride?: string, prerenderSecret?: string): Request;
|
|
84
64
|
/**
|
|
85
65
|
* Stream a Web Response back to a Node.js ServerResponse.
|
|
86
66
|
* Supports streaming compression for SSR responses.
|
|
@@ -122,5 +102,5 @@ declare function resolveAppRouterPrerenderSeeder(entryModule: unknown): AppRoute
|
|
|
122
102
|
*/
|
|
123
103
|
declare function resolveAppRouterAssetPath(pathname: string, assetPathPrefix: string, assetPrefix: string): string | null;
|
|
124
104
|
//#endregion
|
|
125
|
-
export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, ProdServerOptions, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveAppRouterPrerenderSeeder, resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
|
|
105
|
+
export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, ProdServerOptions, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveAppRouterPrerenderSeeder, resolveRequestHost as resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
|
|
126
106
|
//# sourceMappingURL=prod-server.d.ts.map
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
2
2
|
import { hasBasePath, stripBasePath } from "../utils/base-path.js";
|
|
3
|
-
import { VINEXT_PRERENDER_SECRET_HEADER, VINEXT_STATIC_FILE_HEADER } from "./headers.js";
|
|
3
|
+
import { VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_STATIC_FILE_HEADER } from "./headers.js";
|
|
4
4
|
import { normalizePath } from "./normalize-path.js";
|
|
5
5
|
import { applyMiddlewareRequestHeaders, isExternalUrl, matchRedirect, matchRewrite, proxyExternalRequest, requestContextFromRequest, sanitizeDestination } from "../config/config-matchers.js";
|
|
6
6
|
import { notFoundResponse } from "./http-error-responses.js";
|
|
7
7
|
import { applyConfigHeadersToHeaderRecord, filterInternalHeaders, isOpenRedirectShaped, normalizeTrailingSlash } from "./request-pipeline.js";
|
|
8
8
|
import { mergeRewriteQuery } from "../utils/query.js";
|
|
9
9
|
import { normalizeDefaultLocalePathname, stripI18nLocaleForApiRoute } from "./pages-i18n.js";
|
|
10
|
+
import { resolveRequestHost, resolveRequestProtocol, trustProxy, trustedHosts } from "./proxy-trust.js";
|
|
11
|
+
import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isImageOptimizationPath, isSafeImageContentType, parseImageParams } from "./image-optimization.js";
|
|
10
12
|
import { installSocketErrorBackstop } from "./socket-error-backstop.js";
|
|
11
13
|
import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix } from "../utils/asset-prefix.js";
|
|
12
14
|
import { CONTENT_TYPES, StaticFileCache, etagFromFilenameHash } from "./static-file-cache.js";
|
|
13
15
|
import { buildNextDataNotFoundResponse, isNextDataPathname, parseNextDataPathname } from "./pages-data-route.js";
|
|
14
16
|
import { manifestFileWithBase } from "../utils/manifest-paths.js";
|
|
15
|
-
import {
|
|
17
|
+
import { readTrustedPrerenderRouteParamsFromHeaders, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
|
|
16
18
|
import { computeLazyChunks } from "../utils/lazy-chunks.js";
|
|
17
19
|
import { readPrerenderSecret } from "../build/server-manifest.js";
|
|
18
20
|
import { seedMemoryCacheFromPrerender } from "./seed-cache.js";
|
|
@@ -132,8 +134,20 @@ function mergeResponseHeaders(middlewareHeaders, response) {
|
|
|
132
134
|
}
|
|
133
135
|
function toWebHeaders(headersRecord) {
|
|
134
136
|
const headers = new Headers();
|
|
135
|
-
for (const [key, value] of Object.entries(headersRecord))
|
|
136
|
-
|
|
137
|
+
for (const [key, value] of Object.entries(headersRecord)) appendWebHeader(headers, key, value);
|
|
138
|
+
return headers;
|
|
139
|
+
}
|
|
140
|
+
function appendWebHeader(headers, key, value) {
|
|
141
|
+
if (value === void 0) return;
|
|
142
|
+
if (Array.isArray(value)) {
|
|
143
|
+
for (const item of value) headers.append(key, item);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
headers.set(key, value);
|
|
147
|
+
}
|
|
148
|
+
function nodeHeadersToWebHeaders(headersRecord) {
|
|
149
|
+
const headers = new Headers();
|
|
150
|
+
for (const [key, value] of Object.entries(headersRecord)) appendWebHeader(headers, key, value);
|
|
137
151
|
return headers;
|
|
138
152
|
}
|
|
139
153
|
const NO_BODY_RESPONSE_STATUSES = new Set([
|
|
@@ -428,35 +442,6 @@ async function statIfFile(filePath) {
|
|
|
428
442
|
}
|
|
429
443
|
}
|
|
430
444
|
/**
|
|
431
|
-
* Resolve the host for a request, ignoring X-Forwarded-Host to prevent
|
|
432
|
-
* host header poisoning attacks (open redirects, cache poisoning).
|
|
433
|
-
*
|
|
434
|
-
* X-Forwarded-Host is only trusted when the VINEXT_TRUSTED_HOSTS env var
|
|
435
|
-
* lists the forwarded host value. Without this, an attacker can send
|
|
436
|
-
* X-Forwarded-Host: evil.com and poison any redirect that resolves
|
|
437
|
-
* against request.url.
|
|
438
|
-
*
|
|
439
|
-
* On Cloudflare Workers, X-Forwarded-Host is always set by Cloudflare
|
|
440
|
-
* itself, so this is only a concern for the Node.js prod-server.
|
|
441
|
-
*/
|
|
442
|
-
function resolveHost(req, fallback) {
|
|
443
|
-
const rawForwarded = req.headers["x-forwarded-host"];
|
|
444
|
-
const hostHeader = req.headers.host;
|
|
445
|
-
if (rawForwarded) {
|
|
446
|
-
const forwardedHost = rawForwarded.split(",")[0].trim().toLowerCase();
|
|
447
|
-
if (forwardedHost && trustedHosts.has(forwardedHost)) return forwardedHost;
|
|
448
|
-
}
|
|
449
|
-
return hostHeader || fallback;
|
|
450
|
-
}
|
|
451
|
-
/** Hosts that are allowed as X-Forwarded-Host values (stored lowercase). */
|
|
452
|
-
const trustedHosts = new Set((process.env.VINEXT_TRUSTED_HOSTS ?? "").split(",").map((h) => h.trim().toLowerCase()).filter(Boolean));
|
|
453
|
-
/**
|
|
454
|
-
* Whether to trust X-Forwarded-Proto from upstream proxies.
|
|
455
|
-
* Enabled when VINEXT_TRUST_PROXY=1 or when VINEXT_TRUSTED_HOSTS is set
|
|
456
|
-
* (having trusted hosts implies a trusted proxy).
|
|
457
|
-
*/
|
|
458
|
-
const trustProxy = process.env.VINEXT_TRUST_PROXY === "1" || trustedHosts.size > 0;
|
|
459
|
-
/**
|
|
460
445
|
* Convert a Node.js IncomingMessage to a Web Request object.
|
|
461
446
|
*
|
|
462
447
|
* When `urlOverride` is provided, it is used as the path + query string
|
|
@@ -465,17 +450,14 @@ const trustProxy = process.env.VINEXT_TRUST_PROXY === "1" || trustedHosts.size >
|
|
|
465
450
|
* Router prod server normalizes before static-asset lookup, and can pass
|
|
466
451
|
* the result here so the downstream RSC handler doesn't re-normalize).
|
|
467
452
|
*/
|
|
468
|
-
function nodeToWebRequest(req, urlOverride) {
|
|
469
|
-
const
|
|
470
|
-
const origin = `${rawProto === "https" || rawProto === "http" ? rawProto : "http"}://${resolveHost(req, "localhost")}`;
|
|
453
|
+
function nodeToWebRequest(req, urlOverride, prerenderSecret) {
|
|
454
|
+
const origin = `${resolveRequestProtocol(req)}://${resolveRequestHost(req, "localhost")}`;
|
|
471
455
|
const url = new URL(urlOverride ?? req.url ?? "/", origin);
|
|
472
|
-
const rawHeaders =
|
|
473
|
-
|
|
474
|
-
if (value === void 0) continue;
|
|
475
|
-
if (Array.isArray(value)) for (const v of value) rawHeaders.append(key, v);
|
|
476
|
-
else rawHeaders.set(key, value);
|
|
477
|
-
}
|
|
456
|
+
const rawHeaders = nodeHeadersToWebHeaders(req.headers);
|
|
457
|
+
const prerenderRouteParamsPayload = readTrustedPrerenderRouteParamsFromHeaders(rawHeaders, prerenderSecret);
|
|
478
458
|
const headers = filterInternalHeaders(rawHeaders);
|
|
459
|
+
const prerenderRouteParamsHeader = serializePrerenderRouteParamsHeader(prerenderRouteParamsPayload);
|
|
460
|
+
if (prerenderRouteParamsHeader !== null) headers.set(VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, prerenderRouteParamsHeader);
|
|
479
461
|
const method = req.method ?? "GET";
|
|
480
462
|
const hasBody = method !== "GET" && method !== "HEAD";
|
|
481
463
|
const init = {
|
|
@@ -707,7 +689,7 @@ async function startAppRouterServer(options) {
|
|
|
707
689
|
return;
|
|
708
690
|
}
|
|
709
691
|
}
|
|
710
|
-
if (pathname
|
|
692
|
+
if (isImageOptimizationPath(pathname)) {
|
|
711
693
|
const params = parseImageParams(new URL(rawUrl, "http://localhost"), [...DEFAULT_DEVICE_SIZES, ...DEFAULT_IMAGE_SIZES]);
|
|
712
694
|
if (!params) {
|
|
713
695
|
res.writeHead(400);
|
|
@@ -731,7 +713,7 @@ async function startAppRouterServer(options) {
|
|
|
731
713
|
}
|
|
732
714
|
try {
|
|
733
715
|
const qs = rawUrl.includes("?") ? rawUrl.slice(rawUrl.indexOf("?")) : "";
|
|
734
|
-
const response = await rscHandler(nodeToWebRequest(req, pathname + qs));
|
|
716
|
+
const response = await rscHandler(nodeToWebRequest(req, pathname + qs, prerenderSecret));
|
|
735
717
|
const staticFileSignal = response.headers.get(VINEXT_STATIC_FILE_HEADER);
|
|
736
718
|
if (staticFileSignal) {
|
|
737
719
|
let staticFilePath = "/";
|
|
@@ -892,7 +874,7 @@ async function startPagesRouterServer(options) {
|
|
|
892
874
|
res.end("Not Found");
|
|
893
875
|
return;
|
|
894
876
|
}
|
|
895
|
-
if (pathname
|
|
877
|
+
if (isImageOptimizationPath(pathname) || isImageOptimizationPath(staticLookupPath)) {
|
|
896
878
|
const params = parseImageParams(new URL(rawUrl, "http://localhost"), allowedImageWidths);
|
|
897
879
|
if (!params) {
|
|
898
880
|
res.writeHead(400);
|
|
@@ -949,13 +931,9 @@ async function startPagesRouterServer(options) {
|
|
|
949
931
|
url = dataMatch.pagePathname + qs;
|
|
950
932
|
pathname = dataMatch.pagePathname;
|
|
951
933
|
}
|
|
952
|
-
const
|
|
953
|
-
const
|
|
954
|
-
const
|
|
955
|
-
const rawReqHeaders = Object.entries(req.headers).reduce((h, [k, v]) => {
|
|
956
|
-
if (v) h.set(k, Array.isArray(v) ? v.join(", ") : v);
|
|
957
|
-
return h;
|
|
958
|
-
}, new Headers());
|
|
934
|
+
const protocol = resolveRequestProtocol(req);
|
|
935
|
+
const hostHeader = resolveRequestHost(req, `${host}:${port}`);
|
|
936
|
+
const rawReqHeaders = nodeHeadersToWebHeaders(req.headers);
|
|
959
937
|
const isDataRequest = rawReqHeaders.get("x-nextjs-data") === "1";
|
|
960
938
|
const reqHeaders = filterInternalHeaders(rawReqHeaders);
|
|
961
939
|
const method = req.method ?? "GET";
|
|
@@ -1087,18 +1065,23 @@ async function startPagesRouterServer(options) {
|
|
|
1087
1065
|
let response;
|
|
1088
1066
|
if (typeof renderPage === "function") {
|
|
1089
1067
|
const middlewareResponseHeaders = toWebHeaders(middlewareHeaders);
|
|
1090
|
-
const
|
|
1091
|
-
|
|
1092
|
-
|
|
1068
|
+
const renderPageMatch = matchPageRoute ? matchPageRoute(resolvedPathname, webRequest) : null;
|
|
1069
|
+
const shouldDeferErrorPageOnMiss = !isDataReq && !!matchPageRoute && !renderPageMatch;
|
|
1070
|
+
const dataRenderOptions = isDataReq ? { isDataReq: true } : void 0;
|
|
1071
|
+
response = await renderPage(webRequest, resolvedUrl, ssrManifest, void 0, middlewareResponseHeaders, shouldDeferErrorPageOnMiss ? { renderErrorPageOnMiss: false } : dataRenderOptions);
|
|
1072
|
+
let matchedFallbackRewrite = false;
|
|
1073
|
+
if (response && response.status === 404 && shouldDeferErrorPageOnMiss && configRewrites.fallback?.length) {
|
|
1093
1074
|
const fallbackRewrite = matchRewrite(matchResolvedPathname(resolvedPathname), configRewrites.fallback, postMwReqCtx, basePathState);
|
|
1094
1075
|
if (fallbackRewrite) {
|
|
1095
1076
|
if (isExternalUrl(fallbackRewrite)) {
|
|
1096
1077
|
await sendWebResponse(await proxyExternalRequest(webRequest, fallbackRewrite), req, res, compress);
|
|
1097
1078
|
return;
|
|
1098
1079
|
}
|
|
1099
|
-
|
|
1080
|
+
matchedFallbackRewrite = true;
|
|
1081
|
+
response = await renderPage(webRequest, mergeRewriteQuery(resolvedUrl, fallbackRewrite), ssrManifest, void 0, middlewareResponseHeaders, dataRenderOptions);
|
|
1100
1082
|
}
|
|
1101
1083
|
}
|
|
1084
|
+
if (response && response.status === 404 && shouldDeferErrorPageOnMiss && !matchedFallbackRewrite) response = await renderPage(webRequest, resolvedUrl, ssrManifest, void 0, middlewareResponseHeaders);
|
|
1102
1085
|
}
|
|
1103
1086
|
if (!response) {
|
|
1104
1087
|
res.writeHead(404);
|
|
@@ -1141,6 +1124,6 @@ async function startPagesRouterServer(options) {
|
|
|
1141
1124
|
};
|
|
1142
1125
|
}
|
|
1143
1126
|
//#endregion
|
|
1144
|
-
export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveAppRouterPrerenderSeeder, resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
|
|
1127
|
+
export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveAppRouterPrerenderSeeder, resolveRequestHost as resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
|
|
1145
1128
|
|
|
1146
1129
|
//# sourceMappingURL=prod-server.js.map
|