vinext 0.1.1 → 0.1.3
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 +2 -5
- package/dist/build/client-build-config.d.ts +7 -1
- package/dist/build/client-build-config.js +9 -1
- package/dist/build/prerender.d.ts +9 -1
- package/dist/build/prerender.js +41 -12
- package/dist/build/run-prerender.d.ts +10 -2
- package/dist/build/run-prerender.js +15 -1
- package/dist/check.js +4 -3
- package/dist/client/app-nav-failure-handler.d.ts +8 -0
- package/dist/client/app-nav-failure-handler.js +44 -0
- package/dist/client/navigation-runtime.d.ts +3 -2
- package/dist/client/vinext-next-data.d.ts +18 -1
- package/dist/client/window-next.d.ts +8 -5
- package/dist/client/window-next.js +12 -1
- package/dist/cloudflare/src/cache/cdn-adapter.runtime.js +6 -1
- package/dist/config/config-matchers.d.ts +11 -4
- package/dist/config/config-matchers.js +88 -16
- package/dist/config/next-config.d.ts +59 -4
- package/dist/config/next-config.js +149 -48
- package/dist/deploy.d.ts +30 -11
- package/dist/deploy.js +189 -101
- package/dist/entries/app-browser-entry.d.ts +9 -3
- package/dist/entries/app-browser-entry.js +21 -3
- package/dist/entries/app-rsc-entry.d.ts +2 -0
- package/dist/entries/app-rsc-entry.js +71 -6
- package/dist/entries/app-rsc-manifest.js +2 -0
- package/dist/entries/app-ssr-entry.js +1 -1
- package/dist/entries/pages-client-entry.js +54 -9
- package/dist/entries/pages-server-entry.js +48 -11
- package/dist/index.d.ts +0 -2
- package/dist/index.js +285 -139
- package/dist/plugins/dynamic-preload-metadata.d.ts +13 -0
- package/dist/plugins/dynamic-preload-metadata.js +415 -0
- package/dist/plugins/extensionless-dynamic-import.d.ts +6 -0
- package/dist/plugins/extensionless-dynamic-import.js +152 -0
- package/dist/plugins/og-assets.js +2 -2
- package/dist/plugins/optimize-imports.d.ts +10 -5
- package/dist/plugins/optimize-imports.js +27 -21
- package/dist/plugins/postcss.js +7 -7
- package/dist/plugins/sass.d.ts +53 -24
- package/dist/plugins/sass.js +249 -1
- package/dist/plugins/typeof-window.d.ts +14 -0
- package/dist/plugins/typeof-window.js +150 -0
- package/dist/plugins/wasm-module-import.d.ts +15 -0
- package/dist/plugins/wasm-module-import.js +50 -0
- package/dist/routing/app-route-graph.d.ts +25 -2
- package/dist/routing/app-route-graph.js +91 -22
- package/dist/routing/file-matcher.d.ts +10 -1
- package/dist/routing/file-matcher.js +23 -2
- package/dist/routing/pages-router.js +3 -3
- package/dist/routing/utils.d.ts +35 -6
- package/dist/routing/utils.js +59 -7
- package/dist/server/api-handler.d.ts +6 -1
- package/dist/server/api-handler.js +21 -15
- package/dist/server/app-browser-action-result.d.ts +19 -6
- package/dist/server/app-browser-action-result.js +19 -10
- package/dist/server/app-browser-entry.js +269 -297
- package/dist/server/app-browser-error.d.ts +10 -3
- package/dist/server/app-browser-error.js +47 -6
- package/dist/server/app-browser-history-controller.d.ts +104 -0
- package/dist/server/app-browser-history-controller.js +210 -0
- package/dist/server/app-browser-hydration.d.ts +2 -0
- package/dist/server/app-browser-hydration.js +1 -0
- package/dist/server/app-browser-navigation-controller.d.ts +7 -4
- package/dist/server/app-browser-navigation-controller.js +33 -9
- package/dist/server/app-browser-rsc-redirect.d.ts +11 -2
- package/dist/server/app-browser-rsc-redirect.js +30 -8
- package/dist/server/app-browser-server-action-navigation.d.ts +6 -0
- package/dist/server/app-browser-server-action-navigation.js +9 -0
- package/dist/server/app-browser-state.js +4 -7
- package/dist/server/app-browser-stream.js +86 -43
- package/dist/server/app-browser-visible-commit.js +1 -1
- package/dist/server/app-elements-wire.d.ts +6 -1
- package/dist/server/app-elements-wire.js +14 -4
- package/dist/server/app-elements.d.ts +2 -2
- package/dist/server/app-elements.js +2 -2
- package/dist/server/app-fallback-renderer.d.ts +3 -1
- package/dist/server/app-fallback-renderer.js +6 -2
- package/dist/server/app-middleware.js +1 -0
- package/dist/server/app-optimistic-routing.js +24 -3
- package/dist/server/app-page-boundary-render.d.ts +3 -1
- package/dist/server/app-page-boundary-render.js +31 -16
- package/dist/server/app-page-cache-render.d.ts +53 -0
- package/dist/server/app-page-cache-render.js +91 -0
- package/dist/server/app-page-cache.d.ts +16 -2
- package/dist/server/app-page-cache.js +71 -8
- package/dist/server/app-page-dispatch.d.ts +34 -0
- package/dist/server/app-page-dispatch.js +167 -97
- package/dist/server/app-page-element-builder.d.ts +23 -2
- package/dist/server/app-page-element-builder.js +42 -10
- package/dist/server/app-page-execution.d.ts +7 -2
- package/dist/server/app-page-execution.js +53 -18
- package/dist/server/app-page-probe.d.ts +1 -0
- package/dist/server/app-page-probe.js +4 -0
- package/dist/server/app-page-render-observation.d.ts +3 -1
- package/dist/server/app-page-render-observation.js +17 -1
- package/dist/server/app-page-render.d.ts +13 -2
- package/dist/server/app-page-render.js +48 -17
- package/dist/server/app-page-request.d.ts +3 -0
- package/dist/server/app-page-request.js +5 -3
- package/dist/server/app-page-response.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +5 -1
- package/dist/server/app-page-route-wiring.js +21 -11
- package/dist/server/app-page-stream.d.ts +16 -9
- package/dist/server/app-page-stream.js +12 -9
- package/dist/server/app-pages-bridge.d.ts +18 -0
- package/dist/server/app-pages-bridge.js +22 -5
- package/dist/server/app-ppr-fallback-shell-render.d.ts +17 -0
- package/dist/server/app-ppr-fallback-shell-render.js +26 -0
- package/dist/server/app-ppr-fallback-shell.d.ts +13 -1
- package/dist/server/app-ppr-fallback-shell.js +8 -1
- package/dist/server/app-route-handler-dispatch.js +9 -2
- package/dist/server/app-route-handler-policy.d.ts +1 -0
- package/dist/server/app-route-handler-response.js +11 -10
- package/dist/server/app-route-handler-runtime.js +12 -1
- package/dist/server/app-router-entry.js +5 -0
- package/dist/server/app-rsc-cache-busting.js +2 -0
- package/dist/server/app-rsc-handler.d.ts +25 -0
- package/dist/server/app-rsc-handler.js +153 -53
- package/dist/server/app-rsc-response-finalizer.js +1 -1
- package/dist/server/app-rsc-route-matching.d.ts +3 -0
- package/dist/server/app-rsc-route-matching.js +2 -0
- package/dist/server/app-segment-config.d.ts +9 -1
- package/dist/server/app-segment-config.js +12 -3
- package/dist/server/app-server-action-execution.d.ts +12 -0
- package/dist/server/app-server-action-execution.js +47 -15
- package/dist/server/app-ssr-entry.d.ts +2 -0
- package/dist/server/app-ssr-entry.js +81 -8
- package/dist/server/app-ssr-stream.js +9 -1
- package/dist/server/cache-control.js +4 -0
- package/dist/server/dev-lockfile.js +2 -1
- package/dist/server/dev-server.d.ts +2 -2
- package/dist/server/dev-server.js +287 -63
- package/dist/server/headers.d.ts +8 -1
- package/dist/server/headers.js +8 -1
- package/dist/server/hybrid-route-priority.d.ts +22 -0
- package/dist/server/hybrid-route-priority.js +33 -0
- package/dist/server/image-optimization.d.ts +18 -9
- package/dist/server/image-optimization.js +37 -23
- package/dist/server/implicit-tags.d.ts +2 -1
- package/dist/server/implicit-tags.js +4 -1
- package/dist/server/instrumentation-runtime.d.ts +6 -0
- package/dist/server/instrumentation-runtime.js +8 -0
- package/dist/server/isr-decision.d.ts +79 -0
- package/dist/server/isr-decision.js +70 -0
- package/dist/server/metadata-route-response.js +5 -3
- package/dist/server/middleware-runtime.d.ts +13 -0
- package/dist/server/middleware-runtime.js +11 -7
- package/dist/server/middleware.js +1 -0
- package/dist/server/navigation-planner.d.ts +186 -22
- package/dist/server/navigation-planner.js +302 -0
- package/dist/server/navigation-trace.d.ts +18 -1
- package/dist/server/navigation-trace.js +18 -1
- package/dist/server/normalize-path.d.ts +0 -8
- package/dist/server/normalize-path.js +3 -1
- package/dist/server/otel-tracer-extension.d.ts +45 -0
- package/dist/server/otel-tracer-extension.js +89 -0
- package/dist/server/pages-api-route.d.ts +20 -3
- package/dist/server/pages-api-route.js +19 -3
- package/dist/server/pages-asset-tags.d.ts +16 -4
- package/dist/server/pages-asset-tags.js +22 -12
- package/dist/server/pages-data-route.d.ts +8 -1
- package/dist/server/pages-data-route.js +16 -3
- package/dist/server/pages-get-initial-props.d.ts +54 -4
- package/dist/server/pages-get-initial-props.js +43 -1
- package/dist/server/pages-node-compat.d.ts +3 -11
- package/dist/server/pages-node-compat.js +175 -122
- package/dist/server/pages-page-data.d.ts +39 -2
- package/dist/server/pages-page-data.js +261 -46
- package/dist/server/pages-page-handler.d.ts +5 -2
- package/dist/server/pages-page-handler.js +78 -25
- package/dist/server/pages-page-response.d.ts +47 -2
- package/dist/server/pages-page-response.js +73 -9
- package/dist/server/pages-readiness.d.ts +1 -1
- package/dist/server/pages-request-pipeline.d.ts +16 -1
- package/dist/server/pages-request-pipeline.js +96 -38
- package/dist/server/pregenerated-concrete-paths.d.ts +1 -17
- package/dist/server/pregenerated-concrete-paths.js +2 -19
- package/dist/server/prerender-manifest.d.ts +33 -0
- package/dist/server/prerender-manifest.js +54 -0
- package/dist/server/prerender-route-params.d.ts +1 -2
- package/dist/server/prod-server.d.ts +39 -1
- package/dist/server/prod-server.js +107 -37
- package/dist/server/request-pipeline.d.ts +3 -15
- package/dist/server/request-pipeline.js +58 -47
- package/dist/server/rsc-stream-hints.d.ts +5 -1
- package/dist/server/rsc-stream-hints.js +6 -1
- package/dist/server/seed-cache.js +10 -18
- package/dist/shims/app-router-scroll-state.d.ts +3 -1
- package/dist/shims/app-router-scroll-state.js +14 -2
- package/dist/shims/app-router-scroll.d.ts +3 -0
- package/dist/shims/app-router-scroll.js +28 -18
- package/dist/shims/cache-runtime.js +12 -4
- package/dist/shims/cache.d.ts +1 -0
- package/dist/shims/cache.js +1 -1
- package/dist/shims/cdn-cache.d.ts +5 -5
- package/dist/shims/dynamic-preload-chunks.d.ts +8 -0
- package/dist/shims/dynamic-preload-chunks.js +79 -0
- package/dist/shims/dynamic.d.ts +4 -0
- package/dist/shims/dynamic.js +4 -2
- package/dist/shims/error-boundary.d.ts +6 -4
- package/dist/shims/error-boundary.js +7 -0
- package/dist/shims/error.js +38 -11
- package/dist/shims/error.react-server.d.ts +9 -0
- package/dist/shims/error.react-server.js +6 -0
- package/dist/shims/fetch-cache.d.ts +11 -1
- package/dist/shims/fetch-cache.js +55 -20
- package/dist/shims/hash-scroll.js +6 -1
- package/dist/shims/head.js +6 -1
- package/dist/shims/headers.d.ts +16 -2
- package/dist/shims/headers.js +66 -5
- package/dist/shims/image-config.js +7 -1
- package/dist/shims/internal/als-registry.js +28 -1
- package/dist/shims/internal/app-route-detection.d.ts +6 -3
- package/dist/shims/internal/app-route-detection.js +18 -23
- package/dist/shims/internal/app-router-context.d.ts +5 -0
- package/dist/shims/internal/hybrid-client-route-owner.d.ts +31 -0
- package/dist/shims/internal/hybrid-client-route-owner.js +143 -0
- package/dist/shims/internal/navigation-untracked.d.ts +35 -0
- package/dist/shims/internal/navigation-untracked.js +55 -0
- package/dist/shims/internal/pages-data-target.d.ts +7 -2
- package/dist/shims/internal/pages-data-target.js +17 -8
- package/dist/shims/internal/pages-router-accessor.d.ts +19 -0
- package/dist/shims/internal/pages-router-accessor.js +13 -0
- package/dist/shims/internal/router-context.d.ts +2 -1
- package/dist/shims/internal/router-context.js +3 -1
- package/dist/shims/link.js +12 -5
- package/dist/shims/metadata.d.ts +6 -2
- package/dist/shims/metadata.js +32 -14
- package/dist/shims/navigation.d.ts +14 -17
- package/dist/shims/navigation.js +93 -46
- package/dist/shims/ppr-fallback-shell.d.ts +5 -1
- package/dist/shims/ppr-fallback-shell.js +28 -7
- package/dist/shims/router.d.ts +13 -2
- package/dist/shims/router.js +434 -116
- package/dist/shims/script-nonce-context.d.ts +1 -1
- package/dist/shims/script-nonce-context.js +11 -3
- package/dist/shims/server.d.ts +33 -2
- package/dist/shims/server.js +75 -18
- package/dist/shims/slot.js +1 -1
- package/dist/shims/unified-request-context.js +2 -0
- package/dist/typegen.js +1 -0
- package/dist/utils/built-asset-url.d.ts +4 -0
- package/dist/utils/built-asset-url.js +11 -0
- package/dist/utils/client-build-manifest.js +15 -5
- package/dist/utils/client-runtime-metadata.d.ts +45 -0
- package/dist/utils/client-runtime-metadata.js +63 -0
- package/dist/utils/commonjs-loader.d.ts +16 -0
- package/dist/utils/commonjs-loader.js +100 -0
- package/dist/utils/deployment-id.d.ts +8 -0
- package/dist/utils/deployment-id.js +22 -0
- package/dist/utils/hash.d.ts +17 -1
- package/dist/utils/hash.js +36 -1
- package/dist/utils/html-limited-bots.d.ts +18 -1
- package/dist/utils/html-limited-bots.js +23 -1
- package/dist/utils/lazy-chunks.d.ts +27 -1
- package/dist/utils/lazy-chunks.js +65 -1
- package/dist/utils/manifest-paths.d.ts +20 -2
- package/dist/utils/manifest-paths.js +38 -3
- package/dist/utils/parse-cookie.d.ts +13 -0
- package/dist/utils/parse-cookie.js +52 -0
- package/dist/utils/path.d.ts +8 -1
- package/dist/utils/path.js +13 -1
- package/package.json +2 -2
- package/dist/shims/internal/parse-cookie-header.d.ts +0 -14
- package/dist/shims/internal/parse-cookie-header.js +0 -30
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import "./server-globals.js";
|
|
2
2
|
import { notFoundResponse } from "./http-error-responses.js";
|
|
3
3
|
import { isOpenRedirectShaped } from "./request-pipeline.js";
|
|
4
|
+
import { isPprFallbackShellAbortError } from "../shims/ppr-fallback-shell.js";
|
|
4
5
|
import { AppElementsWire } from "./app-elements-wire.js";
|
|
5
6
|
import "./app-elements.js";
|
|
6
7
|
import { AppRouterContext } from "../shims/internal/app-router-context.js";
|
|
8
|
+
import { appendAssetDeploymentIdQuery } from "../utils/deployment-id.js";
|
|
7
9
|
import { ServerInsertedHTMLContext, appRouterInstance, clearServerInsertedHTML, getBfcacheIdMapContext, renderServerInsertedHTML, setNavigationContext, useServerInsertedHTML } from "../shims/navigation.js";
|
|
8
10
|
import { runWithNavigationContext } from "../shims/navigation-state.js";
|
|
9
11
|
import { withScriptNonce } from "../shims/script-nonce-context.js";
|
|
10
12
|
import { createInlineScriptTag, createNonceAttribute, escapeHtmlAttr, safeJsonStringify } from "./html.js";
|
|
11
13
|
import { getClientTraceMetadataHTML } from "./client-trace-metadata.js";
|
|
14
|
+
import DefaultGlobalError from "../shims/default-global-error.js";
|
|
12
15
|
import { BfcacheStateKeyMapContext, ElementsContext, Slot } from "../shims/slot.js";
|
|
13
16
|
import { createSsrErrorMetaRenderer } from "./app-ssr-error-meta.js";
|
|
14
17
|
import { createNavigationRuntimeRscMetadataScript, createRscEmbedTransform, createTickBufferedTransform } from "./app-ssr-stream.js";
|
|
@@ -31,6 +34,50 @@ import clientReferences from "virtual:vite-rsc/client-references";
|
|
|
31
34
|
* the response-layer combine cap.
|
|
32
35
|
*/
|
|
33
36
|
const DEFAULT_REACT_MAX_HEADERS_LENGTH = 6e3;
|
|
37
|
+
function isReactDevelopmentRuntime() {
|
|
38
|
+
if (process.env.NODE_ENV === "production") return false;
|
|
39
|
+
if (process.env.NODE_ENV === "development") return true;
|
|
40
|
+
return Function.prototype.toString.call(createElement).includes("getOwner");
|
|
41
|
+
}
|
|
42
|
+
function isStaticPrerenderModule(value) {
|
|
43
|
+
return typeof value === "object" && value !== null && "prerender" in value && typeof value.prerender === "function";
|
|
44
|
+
}
|
|
45
|
+
async function loadStaticPrerender() {
|
|
46
|
+
const staticRenderer = await import("react-dom/static.edge");
|
|
47
|
+
if (isStaticPrerenderModule(staticRenderer)) return staticRenderer.prerender;
|
|
48
|
+
if (isReactDevelopmentRuntime()) try {
|
|
49
|
+
const [{ createRequire }, path] = await Promise.all([import("node:module"), import("node:path")]);
|
|
50
|
+
const reactDomPackageJson = createRequire(import.meta.url).resolve("react-dom/package.json");
|
|
51
|
+
const reactDomDir = path.dirname(reactDomPackageJson);
|
|
52
|
+
const devRenderer = await import(path.join(reactDomDir, "cjs/react-dom-server.edge.development.js"));
|
|
53
|
+
if (isStaticPrerenderModule(devRenderer)) return devRenderer.prerender;
|
|
54
|
+
const devRendererDefault = typeof devRenderer === "object" && devRenderer !== null && "default" in devRenderer && devRenderer.default;
|
|
55
|
+
if (isStaticPrerenderModule(devRendererDefault)) return devRendererDefault.prerender;
|
|
56
|
+
throw new Error("react-dom development renderer did not expose prerender().");
|
|
57
|
+
} catch (error) {
|
|
58
|
+
throw new Error("[vinext] Failed to load React static development renderer.", { cause: error });
|
|
59
|
+
}
|
|
60
|
+
throw new Error("[vinext] react-dom/static.edge did not expose prerender().");
|
|
61
|
+
}
|
|
62
|
+
function createUtf8Stream(html) {
|
|
63
|
+
const encoder = new TextEncoder();
|
|
64
|
+
return new ReadableStream({ start(controller) {
|
|
65
|
+
controller.enqueue(encoder.encode(html));
|
|
66
|
+
controller.close();
|
|
67
|
+
} });
|
|
68
|
+
}
|
|
69
|
+
function buildBootstrapModuleScript(bootstrapModuleUrl, nonce) {
|
|
70
|
+
if (!bootstrapModuleUrl) return "";
|
|
71
|
+
return `<script type="module"${createNonceAttribute(nonce)} src="` + escapeHtmlAttr(bootstrapModuleUrl) + "\" id=\"_R_\" async=\"\"><\/script>";
|
|
72
|
+
}
|
|
73
|
+
function renderSsrErrorDocumentShell(bootstrapModuleUrl, nonce) {
|
|
74
|
+
const html = renderToStaticMarkup(createElement(DefaultGlobalError, { error: null })).replace("<style>", "<style data-vinext-error-shell-style=\"\">");
|
|
75
|
+
const bootstrapScript = buildBootstrapModuleScript(bootstrapModuleUrl, nonce);
|
|
76
|
+
if (!bootstrapScript) return createUtf8Stream(`<!DOCTYPE html>${html}`);
|
|
77
|
+
const documentClose = "</body></html>";
|
|
78
|
+
if (!html.endsWith(documentClose)) return createUtf8Stream(`<!DOCTYPE html>${html}${bootstrapScript}`);
|
|
79
|
+
return createUtf8Stream(`<!DOCTYPE html>${html.slice(0, -14)}${bootstrapScript}${documentClose}`);
|
|
80
|
+
}
|
|
34
81
|
const clientReferencePreloader = createClientReferencePreloader({
|
|
35
82
|
getReferences() {
|
|
36
83
|
return clientReferences;
|
|
@@ -94,8 +141,8 @@ function renderFontHtml(fontData, nonce, options = {}) {
|
|
|
94
141
|
let fontHTML = "";
|
|
95
142
|
const nonceAttr = createNonceAttribute(nonce);
|
|
96
143
|
const includeStyles = options.includeStyles ?? true;
|
|
97
|
-
for (const url of fontData.links ?? []) fontHTML += `<link rel="stylesheet"${nonceAttr} href="${escapeHtmlAttr(url)}" />\n`;
|
|
98
|
-
for (const preload of fontData.preloads ?? []) fontHTML += `<link rel="preload"${nonceAttr} href="${escapeHtmlAttr(preload.href)}" as="font" type="${escapeHtmlAttr(preload.type)}" crossorigin />\n`;
|
|
144
|
+
for (const url of fontData.links ?? []) fontHTML += `<link rel="stylesheet"${nonceAttr} href="${escapeHtmlAttr(appendAssetDeploymentIdQuery(url))}" />\n`;
|
|
145
|
+
for (const preload of fontData.preloads ?? []) fontHTML += `<link rel="preload"${nonceAttr} href="${escapeHtmlAttr(appendAssetDeploymentIdQuery(preload.href))}" as="font" type="${escapeHtmlAttr(preload.type)}" crossorigin />\n`;
|
|
99
146
|
if (includeStyles && fontData.styles && fontData.styles.length > 0) fontHTML += `<style data-vinext-fonts${nonceAttr}>${fontData.styles.join("\n")}</style>\n`;
|
|
100
147
|
return fontHTML;
|
|
101
148
|
}
|
|
@@ -182,24 +229,50 @@ async function handleSsr(rscStream, navContext, fontData, options) {
|
|
|
182
229
|
const ssrRoot = withScriptNonce(createElement(BeforeInteractiveContext.Provider, { value: registerBeforeInteractiveInlineScript }, ssrTree), options?.scriptNonce);
|
|
183
230
|
const bootstrapModuleUrl = extractBootstrapModuleUrl(await import.meta.viteRsc.loadBootstrapScriptContent("index"));
|
|
184
231
|
const errorMetaRenderer = createSsrErrorMetaRenderer({ basePath: options?.basePath });
|
|
232
|
+
const pprFallbackShellSignal = options?.pprFallbackShellSignal;
|
|
185
233
|
let reactLinkHeader = "";
|
|
186
234
|
const maxHeadersLength = options?.reactMaxHeadersLength ?? DEFAULT_REACT_MAX_HEADERS_LENGTH;
|
|
187
235
|
const captureHeaders = maxHeadersLength > 0;
|
|
188
|
-
const
|
|
236
|
+
const renderOptions = {
|
|
237
|
+
bootstrapModules: bootstrapModuleUrl ? [bootstrapModuleUrl] : void 0,
|
|
238
|
+
formState: options?.formState ?? null,
|
|
239
|
+
nonce: options?.scriptNonce,
|
|
189
240
|
onHeaders: captureHeaders ? (headers) => {
|
|
190
241
|
const link = headers.get("Link");
|
|
191
242
|
if (link) reactLinkHeader = link;
|
|
192
243
|
} : void 0,
|
|
193
244
|
maxHeadersLength: captureHeaders ? maxHeadersLength : void 0,
|
|
194
|
-
bootstrapModules: bootstrapModuleUrl ? [bootstrapModuleUrl] : void 0,
|
|
195
|
-
formState: options?.formState ?? null,
|
|
196
|
-
nonce: options?.scriptNonce,
|
|
197
245
|
onError(error) {
|
|
246
|
+
if (pprFallbackShellSignal && isPprFallbackShellAbortError(error)) return;
|
|
198
247
|
errorMetaRenderer.capture(error);
|
|
199
248
|
if (error && typeof error === "object" && "digest" in error) return String(error.digest);
|
|
200
249
|
if (process.env.NODE_ENV === "production" && error) return ssrErrorDigest(getErrorMessage(error) + (error instanceof Error ? error.stack ?? "" : ""));
|
|
201
250
|
}
|
|
202
|
-
}
|
|
251
|
+
};
|
|
252
|
+
let htmlStream;
|
|
253
|
+
let shellErrorRecovered = false;
|
|
254
|
+
if (pprFallbackShellSignal) {
|
|
255
|
+
const prerender = await loadStaticPrerender();
|
|
256
|
+
const htmlAbortController = new AbortController();
|
|
257
|
+
const pendingHtml = prerender(ssrRoot, {
|
|
258
|
+
...renderOptions,
|
|
259
|
+
signal: htmlAbortController.signal
|
|
260
|
+
});
|
|
261
|
+
setTimeout(() => htmlAbortController.abort(), 0);
|
|
262
|
+
htmlStream = (await pendingHtml).prelude;
|
|
263
|
+
} else {
|
|
264
|
+
let streamingHtmlStream;
|
|
265
|
+
try {
|
|
266
|
+
streamingHtmlStream = await renderToReadableStream(ssrRoot, { ...renderOptions });
|
|
267
|
+
if (options?.waitForAllReady === true) await streamingHtmlStream.allReady;
|
|
268
|
+
htmlStream = streamingHtmlStream;
|
|
269
|
+
} catch (error) {
|
|
270
|
+
streamingHtmlStream?.cancel().catch(() => {});
|
|
271
|
+
if (options?.fallbackToErrorDocumentOnShellError !== true || options?.waitForAllReady === true || typeof error?.digest === "string") throw error;
|
|
272
|
+
shellErrorRecovered = true;
|
|
273
|
+
htmlStream = renderSsrErrorDocumentShell(bootstrapModuleUrl, options?.scriptNonce);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
203
276
|
const inlineCssManifest = globalThis.__VINEXT_INLINE_CSS__;
|
|
204
277
|
const fontStyles = fontData?.styles ?? [];
|
|
205
278
|
const mergeFontStylesIntoInlineCss = fontStyles.length > 0 && hasInlineCssManifest(inlineCssManifest);
|
|
@@ -221,11 +294,11 @@ async function handleSsr(rscStream, navContext, fontData, options) {
|
|
|
221
294
|
return buildHeadInjectionHtml(ssrNavigationContext, bootstrapModuleUrl, options?.formState ?? null, insertedHTML + errorMetaHTML + getTraceMetaHTML() + initialDevServerErrorHTML, fontHTML, options?.scriptNonce);
|
|
222
295
|
};
|
|
223
296
|
const getBeforeInteractiveHeadHTML = () => renderBeforeInteractiveInlineScripts(beforeInteractiveInlineScripts);
|
|
224
|
-
if (options?.waitForAllReady === true) await htmlStream.allReady;
|
|
225
297
|
return {
|
|
226
298
|
htmlStream: deferUntilStreamConsumed(htmlStream.pipeThrough(createTickBufferedTransform(rscEmbed, getInsertedHTML, getBeforeInteractiveHeadHTML, inlineCssManifest, inlineCssFontStyles, inlineCssFontStyleFallbackHTML, options?.scriptNonce)), cleanup),
|
|
227
299
|
metadataReady: Promise.resolve(),
|
|
228
300
|
capturedRscData: options?.capturedRscDataRef?.value ?? null,
|
|
301
|
+
shellErrorRecovered,
|
|
229
302
|
linkHeader: reactLinkHeader
|
|
230
303
|
};
|
|
231
304
|
} catch (error) {
|
|
@@ -89,6 +89,12 @@ function fixPreloadAs(html) {
|
|
|
89
89
|
const LINK_TAG_RE = /<link\b[^>]*>/gi;
|
|
90
90
|
const HTML_REWRITE_EXCLUDED_REGION_RE = /<!--[\s\S]*?-->|<(script|style|textarea|title)\b[^>]*>[\s\S]*?<\/\1\s*>/gi;
|
|
91
91
|
const HTML_REWRITE_EXCLUDED_REGION_START_RE = /<!--|<(script|style|textarea|title)\b[^>]*>/gi;
|
|
92
|
+
const CLOSE_TAG_RES = {
|
|
93
|
+
script: /<\/script\s*>/i,
|
|
94
|
+
style: /<\/style\s*>/i,
|
|
95
|
+
textarea: /<\/textarea\s*>/i,
|
|
96
|
+
title: /<\/title\s*>/i
|
|
97
|
+
};
|
|
92
98
|
function getHtmlAttribute(tag, name) {
|
|
93
99
|
const attrRe = /\s([^\s"'=<>`]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
|
|
94
100
|
let match;
|
|
@@ -141,7 +147,9 @@ function findTrailingOpenHtmlRewriteExcludedRegionStart(html) {
|
|
|
141
147
|
}
|
|
142
148
|
const tagName = match[1]?.toLowerCase();
|
|
143
149
|
if (!tagName) continue;
|
|
144
|
-
const
|
|
150
|
+
const closeTagRe = CLOSE_TAG_RES[tagName];
|
|
151
|
+
if (!closeTagRe) continue;
|
|
152
|
+
const close = closeTagRe.exec(html.slice(HTML_REWRITE_EXCLUDED_REGION_START_RE.lastIndex));
|
|
145
153
|
if (!close) return start;
|
|
146
154
|
HTML_REWRITE_EXCLUDED_REGION_START_RE.lastIndex += close.index + close[0].length;
|
|
147
155
|
}
|
|
@@ -19,6 +19,10 @@ function applyCdnResponseHeaders(headers, input) {
|
|
|
19
19
|
headers.delete("Cache-Control");
|
|
20
20
|
const map = getCdnCacheAdapter().buildResponseHeaders(input);
|
|
21
21
|
for (const [name, value] of Object.entries(map)) {
|
|
22
|
+
if (value === null) {
|
|
23
|
+
headers.delete(name);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
22
26
|
if (value === "") continue;
|
|
23
27
|
headers.set(name, value);
|
|
24
28
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { normalizePathSeparators } from "../utils/path.js";
|
|
1
2
|
import fs from "node:fs";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
//#region src/server/dev-lockfile.ts
|
|
@@ -98,7 +99,7 @@ function formatAlreadyRunningError(opts) {
|
|
|
98
99
|
if (!existing) return [
|
|
99
100
|
"Another vinext dev server appears to be running in this directory.",
|
|
100
101
|
"",
|
|
101
|
-
`Stale lock file: ${path.relative(cwd, lockfilePath)}`,
|
|
102
|
+
`Stale lock file: ${normalizePathSeparators(path.relative(cwd, lockfilePath))}`,
|
|
102
103
|
"Remove it manually if no server is running, then re-run `vinext dev`."
|
|
103
104
|
].join("\n");
|
|
104
105
|
const killCommand = process.platform === "win32" ? `taskkill /PID ${existing.pid} /F` : `kill ${existing.pid}`;
|
|
@@ -43,7 +43,7 @@ declare function createSSRHandler(server: ViteDevServer, runner: ModuleImporter,
|
|
|
43
43
|
* `next.config`. When undefined or empty, no meta tags are emitted.
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
|
-
clientTraceMetadata?: readonly string[]): (req: IncomingMessage, res: ServerResponse, url: string, /** Status code override — propagated from middleware rewrite status. */
|
|
46
|
+
clientTraceMetadata?: readonly string[], htmlLimitedBots?: string): (req: IncomingMessage, res: ServerResponse, url: string, /** Status code override — propagated from middleware rewrite status. */
|
|
47
47
|
|
|
48
48
|
statusCode?: number,
|
|
49
49
|
/**
|
|
@@ -53,6 +53,6 @@ statusCode?: number,
|
|
|
53
53
|
* client-side navigations in the Pages Router.
|
|
54
54
|
*/
|
|
55
55
|
|
|
56
|
-
isDataReq?: boolean) => Promise<void>;
|
|
56
|
+
isDataReq?: boolean, originalUrl?: string) => Promise<void>;
|
|
57
57
|
//#endregion
|
|
58
58
|
export { createSSRHandler, detectLocaleFromHeaders, extractLocaleFromUrl, parseCookieLocale };
|