@qzsy/vinext 0.1.11 → 0.1.80
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 +19 -5
- package/dist/build/inject-pregenerated-paths.d.ts +4 -0
- package/dist/build/inject-pregenerated-paths.js +18 -0
- package/dist/build/pages-client-assets-module.d.ts +11 -0
- package/dist/build/pages-client-assets-module.js +27 -0
- package/dist/build/prerender.d.ts +2 -1
- package/dist/build/prerender.js +11 -4
- package/dist/build/report.d.ts +2 -1
- package/dist/build/report.js +2 -1
- package/dist/build/run-prerender.d.ts +7 -0
- package/dist/build/run-prerender.js +9 -0
- package/dist/build/standalone.js +2 -0
- package/dist/check.d.ts +18 -0
- package/dist/check.js +77 -19
- package/dist/cli-dev-config.d.ts +12 -0
- package/dist/cli-dev-config.js +23 -0
- package/dist/cli.js +64 -28
- package/dist/{server → client}/dev-error-overlay-store.d.ts +1 -1
- package/dist/{server → client}/dev-error-overlay-store.js +1 -1
- package/dist/{server → client}/dev-error-overlay.d.ts +1 -1
- package/dist/{server → client}/dev-error-overlay.js +2 -2
- package/dist/cloudflare/deploy-config.d.ts +51 -0
- package/dist/cloudflare/deploy-config.js +153 -0
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/cloudflare/project.d.ts +41 -0
- package/dist/cloudflare/project.js +243 -0
- package/dist/cloudflare/tpr.js +1 -1
- package/dist/config/config-matchers.js +14 -10
- package/dist/config/next-config.d.ts +6 -3
- package/dist/config/next-config.js +47 -1
- package/dist/config/server-external-packages.d.ts +4 -0
- package/dist/config/server-external-packages.js +91 -0
- package/dist/deploy.d.ts +2 -122
- package/dist/deploy.js +20 -793
- package/dist/entries/app-rsc-entry.d.ts +2 -1
- package/dist/entries/app-rsc-entry.js +70 -12
- package/dist/entries/app-rsc-manifest.js +8 -0
- package/dist/entries/pages-client-entry.d.ts +1 -0
- package/dist/entries/pages-client-entry.js +2 -1
- package/dist/entries/pages-server-entry.js +6 -2
- package/dist/image/image-adapters-virtual.d.ts +59 -0
- package/dist/image/image-adapters-virtual.js +50 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +158 -109
- package/dist/init-cloudflare.d.ts +43 -0
- package/dist/init-cloudflare.js +1000 -0
- package/dist/init-platform.d.ts +38 -0
- package/dist/init-platform.js +150 -0
- package/dist/init.d.ts +14 -37
- package/dist/init.js +205 -95
- package/dist/node_modules/.pnpm/am-i-vibing@0.5.0/node_modules/am-i-vibing/dist/detector-1yx2Hoe0.js +294 -0
- package/dist/node_modules/.pnpm/process-ancestry@0.1.0/node_modules/process-ancestry/dist/index.js +94 -0
- package/dist/{cloudflare → packages/cloudflare}/src/cache/cdn-adapter.runtime.js +1 -1
- package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.d.ts +2 -2
- package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.js +1 -1
- package/dist/plugins/ast-scope.d.ts +16 -0
- package/dist/plugins/ast-scope.js +62 -0
- package/dist/plugins/ast-utils.js +3 -0
- package/dist/plugins/css-module-imports.d.ts +14 -0
- package/dist/plugins/css-module-imports.js +59 -0
- package/dist/plugins/ignore-dynamic-requests.d.ts +11 -0
- package/dist/plugins/ignore-dynamic-requests.js +530 -0
- package/dist/plugins/middleware-server-only.d.ts +8 -6
- package/dist/plugins/middleware-server-only.js +8 -7
- package/dist/plugins/optimize-imports.js +1 -1
- package/dist/plugins/typeof-window.d.ts +1 -1
- package/dist/plugins/typeof-window.js +28 -56
- package/dist/routing/app-route-graph.d.ts +13 -2
- package/dist/routing/app-route-graph.js +116 -32
- package/dist/routing/app-router.d.ts +5 -0
- package/dist/routing/app-router.js +5 -0
- package/dist/routing/file-matcher.d.ts +8 -0
- package/dist/routing/file-matcher.js +10 -1
- package/dist/routing/pages-router.js +2 -2
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-action-result.js +5 -1
- package/dist/server/app-browser-entry.js +17 -12
- package/dist/server/app-browser-history-controller.d.ts +2 -1
- package/dist/server/app-browser-history-controller.js +6 -2
- package/dist/server/app-browser-interception-context.d.ts +1 -0
- package/dist/server/app-browser-interception-context.js +4 -2
- package/dist/server/app-browser-navigation-controller.js +1 -0
- package/dist/server/app-browser-server-action-client.js +2 -3
- package/dist/server/app-browser-state.d.ts +1 -0
- package/dist/server/app-browser-state.js +3 -2
- package/dist/server/app-fallback-renderer.d.ts +3 -2
- package/dist/server/app-fallback-renderer.js +12 -7
- package/dist/server/app-middleware.d.ts +2 -3
- package/dist/server/app-middleware.js +3 -2
- package/dist/server/app-optimistic-routing.js +1 -1
- package/dist/server/app-page-boundary-render.d.ts +1 -0
- package/dist/server/app-page-boundary-render.js +12 -3
- package/dist/server/app-page-cache-finalizer.d.ts +1 -0
- package/dist/server/app-page-cache-finalizer.js +10 -3
- package/dist/server/app-page-cache-render.d.ts +1 -0
- package/dist/server/app-page-cache-render.js +8 -4
- package/dist/server/app-page-cache.d.ts +1 -0
- package/dist/server/app-page-cache.js +4 -1
- package/dist/server/app-page-dispatch.d.ts +11 -3
- package/dist/server/app-page-dispatch.js +55 -15
- package/dist/server/app-page-element-builder.d.ts +5 -1
- package/dist/server/app-page-element-builder.js +57 -20
- package/dist/server/app-page-head.d.ts +12 -0
- package/dist/server/app-page-head.js +42 -19
- package/dist/server/app-page-params.d.ts +2 -1
- package/dist/server/app-page-params.js +8 -1
- package/dist/server/app-page-probe.d.ts +1 -0
- package/dist/server/app-page-probe.js +6 -1
- package/dist/server/app-page-render-identity.d.ts +1 -0
- package/dist/server/app-page-render-identity.js +1 -1
- package/dist/server/app-page-render.d.ts +4 -1
- package/dist/server/app-page-render.js +8 -3
- package/dist/server/app-page-request.d.ts +22 -1
- package/dist/server/app-page-request.js +89 -13
- package/dist/server/app-page-route-wiring.d.ts +6 -1
- package/dist/server/app-page-route-wiring.js +31 -15
- package/dist/server/app-page-search-params-observation.d.ts +4 -2
- package/dist/server/app-page-search-params-observation.js +11 -7
- package/dist/server/app-page-segment-state.js +2 -0
- package/dist/server/app-route-handler-dispatch.js +1 -0
- package/dist/server/app-route-handler-execution.js +7 -2
- package/dist/server/app-route-handler-response.js +1 -0
- package/dist/server/app-route-handler-runtime.js +1 -1
- package/dist/server/app-route-module-loader.d.ts +2 -0
- package/dist/server/app-route-module-loader.js +1 -0
- package/dist/server/app-router-entry.d.ts +12 -0
- package/dist/server/app-router-entry.js +22 -8
- package/dist/server/app-router-image-optimization.d.ts +37 -0
- package/dist/server/app-router-image-optimization.js +40 -0
- package/dist/server/app-rsc-errors.js +7 -1
- package/dist/server/app-rsc-handler.js +27 -14
- package/dist/server/app-rsc-route-matching.d.ts +7 -0
- package/dist/server/app-rsc-route-matching.js +36 -3
- package/dist/server/app-segment-config.d.ts +12 -0
- package/dist/server/app-segment-config.js +91 -5
- package/dist/server/app-server-action-execution.d.ts +5 -0
- package/dist/server/app-server-action-execution.js +94 -33
- package/dist/server/app-ssr-entry.js +12 -1
- package/dist/server/app-static-generation.d.ts +1 -0
- package/dist/server/app-static-generation.js +1 -0
- package/dist/server/client-trace-metadata.js +26 -0
- package/dist/server/default-global-not-found-module.d.ts +14 -0
- package/dist/server/default-global-not-found-module.js +14 -0
- package/dist/server/dev-server.js +8 -15
- package/dist/server/dev-stack-sourcemap.d.ts +1 -1
- package/dist/server/dev-stack-sourcemap.js +1 -1
- package/dist/server/headers.d.ts +5 -15
- package/dist/server/headers.js +4 -15
- package/dist/server/image-optimization.d.ts +51 -1
- package/dist/server/image-optimization.js +52 -2
- package/dist/server/isr-cache.d.ts +1 -1
- package/dist/server/isr-cache.js +2 -2
- package/dist/server/middleware-runtime.js +6 -1
- package/dist/server/navigation-planner.d.ts +1 -0
- package/dist/server/navigation-planner.js +14 -3
- package/dist/server/pages-asset-tags.d.ts +4 -6
- package/dist/server/pages-asset-tags.js +12 -12
- package/dist/server/pages-client-assets.d.ts +12 -0
- package/dist/server/pages-client-assets.js +10 -0
- package/dist/server/pages-page-data.d.ts +23 -1
- package/dist/server/pages-page-data.js +43 -24
- package/dist/server/pages-page-handler.d.ts +2 -1
- package/dist/server/pages-page-handler.js +10 -4
- package/dist/server/pages-request-pipeline.d.ts +2 -0
- package/dist/server/pages-request-pipeline.js +25 -1
- package/dist/server/prerender-manifest.d.ts +3 -1
- package/dist/server/prerender-route-params.js +1 -1
- package/dist/server/prod-server.d.ts +1 -1
- package/dist/server/prod-server.js +47 -25
- package/dist/server/request-pipeline.js +1 -0
- package/dist/server/seed-cache.js +4 -4
- package/dist/server/worker-utils.d.ts +2 -1
- package/dist/server/worker-utils.js +7 -1
- package/dist/shims/app-router-scroll-state.d.ts +1 -0
- package/dist/shims/app-router-scroll-state.js +1 -0
- package/dist/shims/app-router-scroll.js +2 -1
- package/dist/shims/cache.js +19 -15
- package/dist/shims/cdn-cache.js +1 -1
- package/dist/shims/dynamic-preload-chunks.js +2 -1
- package/dist/shims/error-boundary.d.ts +19 -1
- package/dist/shims/error-boundary.js +11 -1
- package/dist/shims/form.d.ts +3 -1
- package/dist/shims/form.js +37 -43
- package/dist/shims/headers.d.ts +9 -1
- package/dist/shims/headers.js +31 -6
- package/dist/shims/image-optimization-url.d.ts +4 -0
- package/dist/shims/image-optimization-url.js +33 -1
- package/dist/shims/image.js +46 -13
- package/dist/shims/internal/app-route-detection.d.ts +2 -17
- package/dist/shims/internal/app-route-detection.js +4 -17
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +23 -0
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +51 -0
- package/dist/shims/internal/hybrid-client-route-owner.d.ts +2 -5
- package/dist/shims/internal/hybrid-client-route-owner.js +9 -60
- package/dist/shims/internal/pages-router-components.d.ts +7 -0
- package/dist/shims/internal/pages-router-components.js +13 -0
- package/dist/shims/link.js +23 -16
- package/dist/shims/metadata.d.ts +3 -2
- package/dist/shims/metadata.js +8 -4
- package/dist/shims/navigation.js +4 -2
- package/dist/shims/root-params.d.ts +15 -1
- package/dist/shims/root-params.js +21 -1
- package/dist/shims/router.d.ts +2 -5
- package/dist/shims/router.js +41 -22
- package/dist/shims/server.js +3 -2
- package/dist/typegen.js +6 -5
- package/dist/utils/client-runtime-metadata.d.ts +2 -18
- package/dist/utils/client-runtime-metadata.js +31 -22
- package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +4 -0
- package/dist/{server → utils}/dev-stack-sourcemap-endpoint.js +1 -1
- package/dist/utils/domain-locale.d.ts +6 -3
- package/dist/{server → utils}/middleware-request-headers.d.ts +1 -1
- package/dist/{server → utils}/middleware-request-headers.js +2 -2
- package/dist/utils/path.d.ts +2 -1
- package/dist/utils/path.js +1 -1
- package/dist/utils/project.d.ts +9 -1
- package/dist/utils/project.js +21 -4
- package/dist/utils/protocol-headers.d.ts +17 -0
- package/dist/utils/protocol-headers.js +17 -0
- package/dist/utils/react-version.d.ts +4 -0
- package/dist/utils/react-version.js +44 -0
- package/package.json +28 -24
- package/dist/server/dev-stack-sourcemap-endpoint.d.ts +0 -4
- /package/dist/{cloudflare → packages/cloudflare}/src/utils/cache-control-metadata.js +0 -0
|
@@ -5,7 +5,7 @@ import { isExternalUrl } from "../config/config-matchers.js";
|
|
|
5
5
|
import { internalServerErrorResponse, payloadTooLargeResponse } from "./http-error-responses.js";
|
|
6
6
|
import { validateCsrfOrigin, validateServerActionPayload } from "./request-pipeline.js";
|
|
7
7
|
import { APP_RSC_RENDER_MODE_ACTION_RERENDER_PRESERVE_UI } from "./app-rsc-render-mode.js";
|
|
8
|
-
import { headersContextFromRequest, setHeadersContext } from "../shims/headers.js";
|
|
8
|
+
import { headersContextFromRequest, isDraftModeRequest, setHeadersContext } from "../shims/headers.js";
|
|
9
9
|
import { getAndClearActionRevalidationKind } from "../shims/cache-request-state.js";
|
|
10
10
|
import { setCurrentFetchCacheMode, setCurrentFetchSoftTags, setCurrentForceDynamicFetchDefault } from "../shims/fetch-cache.js";
|
|
11
11
|
import { readStreamAsTextWithLimit } from "../utils/text-stream.js";
|
|
@@ -13,6 +13,7 @@ import { VINEXT_RSC_CONTENT_TYPE, VINEXT_RSC_VARY_HEADER, applyRscCompatibilityI
|
|
|
13
13
|
import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
|
|
14
14
|
import { applyEdgeRuntimeHeader } from "./app-page-response.js";
|
|
15
15
|
import { getNextErrorDigest, parseNextHttpErrorDigest, parseNextRedirectDigest } from "./next-error-digest.js";
|
|
16
|
+
import { createRootParamsUsageController, pickRootParams, runWithRootParamsScope, runWithRootParamsUsage } from "../shims/root-params.js";
|
|
16
17
|
import { createServerActionNotFoundResponse, getServerActionNotFoundMessage, isServerActionNotFoundError } from "./server-action-not-found.js";
|
|
17
18
|
import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
|
|
18
19
|
import "./app-page-stream.js";
|
|
@@ -20,7 +21,29 @@ import { buildAppPageTags } from "./implicit-tags.js";
|
|
|
20
21
|
import { resolveAppPageNavigationParams } from "./app-page-element-builder.js";
|
|
21
22
|
import { resolveAppPageActionRerenderTarget } from "./app-page-request.js";
|
|
22
23
|
import { getSetCookieName } from "./cookie-utils.js";
|
|
24
|
+
import { createStaticGenerationHeadersContext } from "./app-static-generation.js";
|
|
23
25
|
//#region src/server/app-server-action-execution.ts
|
|
26
|
+
function prepareActionPageRerenderContext(options) {
|
|
27
|
+
if (options.dynamicConfig === "force-static" || options.dynamicConfig === "error") setHeadersContext(createStaticGenerationHeadersContext({
|
|
28
|
+
draftModeEnabled: isDraftModeRequest(createActionRerenderRequest({
|
|
29
|
+
draftModeCookie: options.draftModeCookie,
|
|
30
|
+
request: options.request
|
|
31
|
+
}), options.draftModeSecret),
|
|
32
|
+
draftModeSecret: options.draftModeSecret,
|
|
33
|
+
dynamicConfig: options.dynamicConfig,
|
|
34
|
+
routeKind: "page",
|
|
35
|
+
routePattern: options.routePattern
|
|
36
|
+
}));
|
|
37
|
+
return options.dynamicConfig === "force-static" ? new URLSearchParams() : options.searchParams;
|
|
38
|
+
}
|
|
39
|
+
function createActionRerenderRequest(options) {
|
|
40
|
+
if (!options.draftModeCookie) return options.request;
|
|
41
|
+
const headers = new Headers(options.request.headers);
|
|
42
|
+
const cookieHeader = applySetCookieMutationsToRequestCookieHeader(headers.get("cookie"), [options.draftModeCookie]);
|
|
43
|
+
if (cookieHeader === null) headers.delete("cookie");
|
|
44
|
+
else headers.set("cookie", cookieHeader);
|
|
45
|
+
return new Request(options.request.url, { headers });
|
|
46
|
+
}
|
|
24
47
|
/**
|
|
25
48
|
* Matches Next.js' server action argument cap to prevent stack overflow in
|
|
26
49
|
* Function.prototype.apply when decoding hostile action payloads.
|
|
@@ -351,11 +374,14 @@ async function handleProgressiveServerActionRequest(options) {
|
|
|
351
374
|
let actionRedirect = null;
|
|
352
375
|
let actionError = void 0;
|
|
353
376
|
let actionFailed = false;
|
|
377
|
+
let actionThrew = false;
|
|
354
378
|
let actionResult;
|
|
379
|
+
const rootParamsUsage = createRootParamsUsageController();
|
|
355
380
|
const previousHeadersPhase = options.setHeadersAccessPhase("action");
|
|
356
381
|
try {
|
|
357
|
-
actionResult = await action
|
|
382
|
+
actionResult = await runWithRootParamsUsage({ kind: "server-action" }, action, rootParamsUsage);
|
|
358
383
|
} catch (error) {
|
|
384
|
+
actionThrew = true;
|
|
359
385
|
actionRedirect = getActionRedirect(error);
|
|
360
386
|
if (!actionRedirect) {
|
|
361
387
|
actionError = error;
|
|
@@ -375,8 +401,10 @@ async function handleProgressiveServerActionRequest(options) {
|
|
|
375
401
|
}
|
|
376
402
|
} finally {
|
|
377
403
|
options.setHeadersAccessPhase(previousHeadersPhase);
|
|
404
|
+
if (actionThrew) rootParamsUsage.transitionToRender();
|
|
378
405
|
}
|
|
379
406
|
if (!actionRedirect) {
|
|
407
|
+
if (!actionThrew) rootParamsUsage.transitionToRender();
|
|
380
408
|
const actionPendingCookies = dedupePendingCookies(options.getAndClearPendingCookies());
|
|
381
409
|
const actionDraftCookie = options.getDraftModeCookieHeader();
|
|
382
410
|
const revalidationKind = resolveActionRevalidationKind(actionPendingCookies.length > 0 || Boolean(actionDraftCookie));
|
|
@@ -544,16 +572,19 @@ async function handleServerActionRscRequest(options) {
|
|
|
544
572
|
let returnValue;
|
|
545
573
|
let actionRedirect = null;
|
|
546
574
|
let actionStatus = 200;
|
|
575
|
+
let actionThrew = false;
|
|
547
576
|
const actionWasForwarded = Boolean(options.request.headers.get(ACTION_FORWARDED_HEADER));
|
|
577
|
+
const rootParamsUsage = createRootParamsUsageController();
|
|
548
578
|
const previousHeadersPhase = options.setHeadersAccessPhase("action");
|
|
549
579
|
try {
|
|
550
580
|
try {
|
|
551
581
|
validateServerActionArgs(args);
|
|
552
582
|
returnValue = {
|
|
553
583
|
ok: true,
|
|
554
|
-
data: await action.apply(null, args)
|
|
584
|
+
data: await runWithRootParamsUsage({ kind: "server-action" }, () => action.apply(null, args), rootParamsUsage)
|
|
555
585
|
};
|
|
556
586
|
} catch (error) {
|
|
587
|
+
actionThrew = true;
|
|
557
588
|
actionRedirect = getActionRedirect(error);
|
|
558
589
|
if (actionRedirect) returnValue = {
|
|
559
590
|
ok: true,
|
|
@@ -568,6 +599,7 @@ async function handleServerActionRscRequest(options) {
|
|
|
568
599
|
data: error
|
|
569
600
|
};
|
|
570
601
|
} else {
|
|
602
|
+
actionStatus = 500;
|
|
571
603
|
console.error("[vinext] Server action error:", error);
|
|
572
604
|
returnValue = {
|
|
573
605
|
ok: false,
|
|
@@ -578,6 +610,7 @@ async function handleServerActionRscRequest(options) {
|
|
|
578
610
|
}
|
|
579
611
|
} finally {
|
|
580
612
|
options.setHeadersAccessPhase(previousHeadersPhase);
|
|
613
|
+
if (actionThrew && !actionWasForwarded) rootParamsUsage.transitionToRender();
|
|
581
614
|
}
|
|
582
615
|
if (actionRedirect) {
|
|
583
616
|
const actionPendingCookies = dedupePendingCookies(options.getAndClearPendingCookies());
|
|
@@ -622,35 +655,48 @@ async function handleServerActionRscRequest(options) {
|
|
|
622
655
|
request: options.request,
|
|
623
656
|
url: redirectTarget
|
|
624
657
|
});
|
|
625
|
-
setHeadersContext(headersContextFromRequest(redirectRenderRequest));
|
|
658
|
+
setHeadersContext(headersContextFromRequest(redirectRenderRequest, { draftModeSecret: options.draftModeSecret }));
|
|
659
|
+
const redirectDynamicConfig = options.resolveRouteDynamicConfig?.(targetMatch.route);
|
|
660
|
+
const redirectSearchParams = prepareActionPageRerenderContext({
|
|
661
|
+
draftModeCookie: actionDraftCookie,
|
|
662
|
+
draftModeSecret: options.draftModeSecret,
|
|
663
|
+
dynamicConfig: redirectDynamicConfig,
|
|
664
|
+
request: redirectRenderRequest,
|
|
665
|
+
routePattern: targetMatch.route.pattern,
|
|
666
|
+
searchParams: redirectTarget.searchParams
|
|
667
|
+
});
|
|
626
668
|
const redirectNavigationParams = resolveAppPageNavigationParams(targetMatch.route, targetMatch.params, targetPathname, null);
|
|
627
669
|
options.setNavigationContext({
|
|
628
670
|
pathname: targetPathname,
|
|
629
|
-
searchParams:
|
|
671
|
+
searchParams: redirectSearchParams,
|
|
630
672
|
params: redirectNavigationParams
|
|
631
673
|
});
|
|
632
674
|
setCurrentFetchCacheMode(options.resolveRouteFetchCacheMode?.(targetMatch.route) ?? null);
|
|
633
|
-
setCurrentForceDynamicFetchDefault(
|
|
675
|
+
setCurrentForceDynamicFetchDefault(redirectDynamicConfig === "force-dynamic");
|
|
634
676
|
setCurrentFetchSoftTags(buildServerActionPageTags(targetMatch.route, targetPathname));
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
677
|
+
return createServerActionRscResponse(await runWithRootParamsScope(pickRootParams(targetMatch.params, targetMatch.route.rootParamNames), () => runWithRootParamsUsage({ kind: "route" }, async () => {
|
|
678
|
+
const element = options.buildPageElement({
|
|
679
|
+
cleanPathname: targetPathname,
|
|
680
|
+
interceptOpts: void 0,
|
|
681
|
+
isRscRequest: true,
|
|
682
|
+
mountedSlotsHeader: null,
|
|
683
|
+
params: targetMatch.params,
|
|
684
|
+
request: redirectRenderRequest,
|
|
685
|
+
route: targetMatch.route,
|
|
686
|
+
searchParams: redirectSearchParams,
|
|
687
|
+
renderMode: APP_RSC_RENDER_MODE_ACTION_RERENDER_PRESERVE_UI,
|
|
688
|
+
observeMetadataSearchParamsAccess: redirectDynamicConfig !== "force-static",
|
|
689
|
+
observePageSearchParamsAccess: redirectDynamicConfig !== "force-static"
|
|
690
|
+
});
|
|
691
|
+
const onRenderError = options.createRscOnErrorHandler(redirectRenderRequest, targetPathname, targetMatch.route.pattern);
|
|
692
|
+
return options.renderToReadableStream({
|
|
693
|
+
root: element,
|
|
694
|
+
returnValue
|
|
695
|
+
}, {
|
|
696
|
+
temporaryReferences,
|
|
697
|
+
onError: onRenderError
|
|
698
|
+
});
|
|
699
|
+
})), {
|
|
654
700
|
status: shouldUseForwardedActionRedirectStatus({
|
|
655
701
|
actionWasForwarded,
|
|
656
702
|
currentPathname: options.cleanPathname,
|
|
@@ -665,7 +711,8 @@ async function handleServerActionRscRequest(options) {
|
|
|
665
711
|
const actionPendingCookies = dedupePendingCookies(options.getAndClearPendingCookies());
|
|
666
712
|
const actionDraftCookie = options.getDraftModeCookieHeader();
|
|
667
713
|
const actionRevalidationKind = resolveActionRevalidationKind(actionPendingCookies.length > 0 || Boolean(actionDraftCookie));
|
|
668
|
-
|
|
714
|
+
const isHttpFallback = actionStatus === 401 || actionStatus === 403 || actionStatus === 404;
|
|
715
|
+
if (!isHttpFallback && (actionWasForwarded || actionRevalidationKind === ACTION_DID_NOT_REVALIDATE)) {
|
|
669
716
|
const onRenderError = options.createRscOnErrorHandler(options.request, options.cleanPathname, options.cleanPathname);
|
|
670
717
|
const rscStream = await options.renderToReadableStream({ returnValue }, {
|
|
671
718
|
temporaryReferences,
|
|
@@ -686,6 +733,7 @@ async function handleServerActionRscRequest(options) {
|
|
|
686
733
|
headers: actionHeaders
|
|
687
734
|
}, options.clearRequestContext);
|
|
688
735
|
}
|
|
736
|
+
if (!actionThrew) rootParamsUsage.transitionToRender();
|
|
689
737
|
const match = options.matchRoute(options.cleanPathname);
|
|
690
738
|
let element;
|
|
691
739
|
let errorPattern = match ? match.route.pattern : options.cleanPathname;
|
|
@@ -702,16 +750,25 @@ async function handleServerActionRscRequest(options) {
|
|
|
702
750
|
toInterceptOpts: options.toInterceptOpts
|
|
703
751
|
});
|
|
704
752
|
const resolvedActionNavigationParams = resolveAppPageNavigationParams(actionRerenderTarget.route, actionRerenderTarget.navigationParams, options.cleanPathname, actionRerenderTarget.interceptOpts);
|
|
753
|
+
await options.ensureRouteLoaded?.(actionRerenderTarget.route);
|
|
754
|
+
const actionRerenderDynamicConfig = options.resolveRouteDynamicConfig?.(actionRerenderTarget.route);
|
|
755
|
+
const actionRerenderSearchParams = prepareActionPageRerenderContext({
|
|
756
|
+
draftModeCookie: actionDraftCookie,
|
|
757
|
+
draftModeSecret: options.draftModeSecret,
|
|
758
|
+
dynamicConfig: actionRerenderDynamicConfig,
|
|
759
|
+
request: options.request,
|
|
760
|
+
routePattern: actionRerenderTarget.route.pattern,
|
|
761
|
+
searchParams: options.searchParams
|
|
762
|
+
});
|
|
705
763
|
options.setNavigationContext({
|
|
706
764
|
pathname: options.cleanPathname,
|
|
707
|
-
searchParams:
|
|
765
|
+
searchParams: actionRerenderSearchParams,
|
|
708
766
|
params: resolvedActionNavigationParams
|
|
709
767
|
});
|
|
710
|
-
await options.ensureRouteLoaded?.(actionRerenderTarget.route);
|
|
711
768
|
setCurrentFetchCacheMode(options.resolveRouteFetchCacheMode?.(actionRerenderTarget.route) ?? null);
|
|
712
|
-
setCurrentForceDynamicFetchDefault(
|
|
769
|
+
setCurrentForceDynamicFetchDefault(actionRerenderDynamicConfig === "force-dynamic");
|
|
713
770
|
setCurrentFetchSoftTags(buildServerActionPageTags(actionRerenderTarget.route, options.cleanPathname));
|
|
714
|
-
|
|
771
|
+
const buildActionRerenderElement = () => options.buildPageElement({
|
|
715
772
|
cleanPathname: options.cleanPathname,
|
|
716
773
|
interceptOpts: actionRerenderTarget.interceptOpts,
|
|
717
774
|
isRscRequest: options.isRscRequest,
|
|
@@ -719,22 +776,26 @@ async function handleServerActionRscRequest(options) {
|
|
|
719
776
|
params: actionRerenderTarget.params,
|
|
720
777
|
request: options.request,
|
|
721
778
|
route: actionRerenderTarget.route,
|
|
722
|
-
searchParams:
|
|
723
|
-
renderMode: APP_RSC_RENDER_MODE_ACTION_RERENDER_PRESERVE_UI
|
|
779
|
+
searchParams: actionRerenderSearchParams,
|
|
780
|
+
renderMode: APP_RSC_RENDER_MODE_ACTION_RERENDER_PRESERVE_UI,
|
|
781
|
+
observeMetadataSearchParamsAccess: actionRerenderDynamicConfig !== "force-static",
|
|
782
|
+
observePageSearchParamsAccess: actionRerenderDynamicConfig !== "force-static"
|
|
724
783
|
});
|
|
784
|
+
element = actionWasForwarded && isHttpFallback ? await runWithRootParamsUsage({ kind: "route" }, async () => buildActionRerenderElement()) : buildActionRerenderElement();
|
|
725
785
|
errorPattern = actionRerenderTarget.route.pattern;
|
|
726
786
|
} else {
|
|
727
787
|
const actionRouteId = options.createPayloadRouteId(options.cleanPathname, null);
|
|
728
788
|
element = options.createNotFoundElement(actionRouteId);
|
|
729
789
|
}
|
|
730
790
|
const onRenderError = options.createRscOnErrorHandler(options.request, options.cleanPathname, errorPattern);
|
|
731
|
-
const
|
|
791
|
+
const renderActionRerender = () => options.renderToReadableStream({
|
|
732
792
|
root: element,
|
|
733
793
|
returnValue
|
|
734
794
|
}, {
|
|
735
795
|
temporaryReferences,
|
|
736
796
|
onError: onRenderError
|
|
737
797
|
});
|
|
798
|
+
const rscStream = await (actionWasForwarded && isHttpFallback ? runWithRootParamsUsage({ kind: "route" }, renderActionRerender) : renderActionRerender());
|
|
738
799
|
const actionHeaders = new Headers({
|
|
739
800
|
"Content-Type": VINEXT_RSC_CONTENT_TYPE,
|
|
740
801
|
Vary: VINEXT_RSC_VARY_HEADER
|
|
@@ -16,6 +16,7 @@ import DefaultGlobalError from "../shims/default-global-error.js";
|
|
|
16
16
|
import { BfcacheStateKeyMapContext, ElementsContext, Slot } from "../shims/slot.js";
|
|
17
17
|
import { createSsrErrorMetaRenderer } from "./app-ssr-error-meta.js";
|
|
18
18
|
import { createNavigationRuntimeRscMetadataScript, createRscEmbedTransform, createTickBufferedTransform } from "./app-ssr-stream.js";
|
|
19
|
+
import { setPagesClientAssets } from "./pages-client-assets.js";
|
|
19
20
|
import { BeforeInteractiveContext } from "../shims/before-interactive-context.js";
|
|
20
21
|
import { runWithRootParamsScope } from "../shims/root-params.js";
|
|
21
22
|
import { createInitialBfcacheMaps } from "./app-bfcache-identity.js";
|
|
@@ -27,9 +28,12 @@ import { createInitialDevServerErrorScript } from "./dev-initial-server-error.js
|
|
|
27
28
|
import { ssrAppRouterInstance } from "./app-ssr-router-instance.js";
|
|
28
29
|
import { Fragment, createElement, use } from "react";
|
|
29
30
|
import { renderToReadableStream, renderToStaticMarkup } from "react-dom/server.edge";
|
|
31
|
+
import { preinitModule } from "react-dom";
|
|
30
32
|
import { createFromReadableStream } from "@vitejs/plugin-rsc/ssr";
|
|
31
33
|
import clientReferences from "virtual:vite-rsc/client-references";
|
|
34
|
+
import pagesClientAssets from "virtual:vinext-pages-client-assets";
|
|
32
35
|
//#region src/server/app-ssr-entry.ts
|
|
36
|
+
setPagesClientAssets(pagesClientAssets);
|
|
33
37
|
/**
|
|
34
38
|
* Default cap for the preload `Link` header, matching Next.js's
|
|
35
39
|
* `defaultConfig.reactMaxHeadersLength`. Used when no config value threads
|
|
@@ -52,7 +56,10 @@ async function loadStaticPrerender() {
|
|
|
52
56
|
const [{ createRequire }, path] = await Promise.all([import("node:module"), import("node:path")]);
|
|
53
57
|
const reactDomPackageJson = createRequire(import.meta.url).resolve("react-dom/package.json");
|
|
54
58
|
const reactDomDir = path.dirname(reactDomPackageJson);
|
|
55
|
-
const devRenderer = await import(
|
|
59
|
+
const devRenderer = await import(
|
|
60
|
+
/* @vite-ignore */
|
|
61
|
+
path.join(reactDomDir, "cjs/react-dom-server.edge.development.js")
|
|
62
|
+
);
|
|
56
63
|
if (isStaticPrerenderModule(devRenderer)) return devRenderer.prerender;
|
|
57
64
|
const devRendererDefault = typeof devRenderer === "object" && devRenderer !== null && "default" in devRenderer && devRenderer.default;
|
|
58
65
|
if (isStaticPrerenderModule(devRendererDefault)) return devRendererDefault.prerender;
|
|
@@ -182,6 +189,10 @@ async function handleSsr(rscStream, navContext, fontData, options) {
|
|
|
182
189
|
}
|
|
183
190
|
let flightRoot = null;
|
|
184
191
|
function VinextFlightRoot() {
|
|
192
|
+
for (const moduleUrl of pagesClientAssets.appBootstrapPreinitModules ?? []) preinitModule(moduleUrl, {
|
|
193
|
+
as: "script",
|
|
194
|
+
nonce: options?.scriptNonce
|
|
195
|
+
});
|
|
185
196
|
if (!flightRoot) flightRoot = createFromReadableStream(ssrStream);
|
|
186
197
|
const wireElements = use(flightRoot);
|
|
187
198
|
const elements = AppElementsWire.decode(wireElements);
|
|
@@ -3,6 +3,7 @@ import { HeadersContext } from "../shims/headers.js";
|
|
|
3
3
|
//#region src/server/app-static-generation.d.ts
|
|
4
4
|
type AppStaticGenerationRouteKind = "page" | "route";
|
|
5
5
|
type CreateStaticGenerationHeadersContextOptions = {
|
|
6
|
+
draftModeEnabled?: boolean;
|
|
6
7
|
draftModeSecret?: string;
|
|
7
8
|
dynamicConfig?: string;
|
|
8
9
|
routeKind: AppStaticGenerationRouteKind;
|
|
@@ -9,6 +9,7 @@ function createStaticGenerationHeadersContext(options) {
|
|
|
9
9
|
const context = {
|
|
10
10
|
headers: new Headers(),
|
|
11
11
|
cookies: /* @__PURE__ */ new Map(),
|
|
12
|
+
draftModeEnabled: options.draftModeEnabled,
|
|
12
13
|
draftModeSecret: options.draftModeSecret
|
|
13
14
|
};
|
|
14
15
|
if (options.dynamicConfig === "force-static") context.forceStatic = true;
|
|
@@ -24,7 +24,32 @@ const carrierSetter = { set(carrier, key, value) {
|
|
|
24
24
|
value
|
|
25
25
|
});
|
|
26
26
|
} };
|
|
27
|
+
const OPEN_TELEMETRY_API_SYMBOL = Symbol.for("opentelemetry.js.api.1");
|
|
28
|
+
const OPEN_TELEMETRY_SPAN_SYMBOL = Symbol.for("OpenTelemetry Context Key SPAN");
|
|
29
|
+
function getRegisteredOpenTelemetryTraceData() {
|
|
30
|
+
let metadataSpan = null;
|
|
31
|
+
try {
|
|
32
|
+
const registry = globalThis[OPEN_TELEMETRY_API_SYMBOL];
|
|
33
|
+
if (!registry?.context || !registry.propagation) return null;
|
|
34
|
+
const contextApi = registry.context;
|
|
35
|
+
const propagation = registry.propagation;
|
|
36
|
+
const activeContext = contextApi.active();
|
|
37
|
+
metadataSpan = activeContext.getValue(OPEN_TELEMETRY_SPAN_SYMBOL) !== void 0 ? null : registry.trace?.getTracer("vinext").startSpan("vinext.clientTraceMetadata", void 0, activeContext) ?? null;
|
|
38
|
+
const context = metadataSpan ? activeContext.setValue(OPEN_TELEMETRY_SPAN_SYMBOL, metadataSpan) : activeContext;
|
|
39
|
+
const entries = [];
|
|
40
|
+
contextApi.with(context, () => {
|
|
41
|
+
propagation.inject(context, entries, carrierSetter);
|
|
42
|
+
});
|
|
43
|
+
return entries;
|
|
44
|
+
} catch {
|
|
45
|
+
return [];
|
|
46
|
+
} finally {
|
|
47
|
+
metadataSpan?.end();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
27
50
|
function getOpenTelemetryTraceData() {
|
|
51
|
+
const registeredEntries = getRegisteredOpenTelemetryTraceData();
|
|
52
|
+
if (registeredEntries) return registeredEntries;
|
|
28
53
|
let api;
|
|
29
54
|
try {
|
|
30
55
|
const req = globalThis.require;
|
|
@@ -75,6 +100,7 @@ function renderClientTraceMetadataTags(entries) {
|
|
|
75
100
|
*/
|
|
76
101
|
function getClientTraceMetadataHTML(allowList) {
|
|
77
102
|
if (!allowList || allowList.length === 0) return "";
|
|
103
|
+
if (typeof process !== "undefined" && process.env.VINEXT_PRERENDER === "1") return "";
|
|
78
104
|
return renderClientTraceMetadataTags(filterClientTraceMetadata(getOpenTelemetryTraceData(), allowList));
|
|
79
105
|
}
|
|
80
106
|
//#endregion
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/server/default-global-not-found-module.d.ts
|
|
4
|
+
declare function DefaultGlobalNotFound(): React.ReactElement;
|
|
5
|
+
/**
|
|
6
|
+
* Module-shaped wrapper around Next.js's built-in global not-found document.
|
|
7
|
+
* Unlike the regular default not-found boundary, this component owns the
|
|
8
|
+
* document shell because global not-found responses skip the root layout.
|
|
9
|
+
*/
|
|
10
|
+
declare const DEFAULT_GLOBAL_NOT_FOUND_MODULE: {
|
|
11
|
+
readonly default: typeof DefaultGlobalNotFound;
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { DEFAULT_GLOBAL_NOT_FOUND_MODULE };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import DefaultNotFound from "../shims/default-not-found.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
//#region src/server/default-global-not-found-module.ts
|
|
4
|
+
function DefaultGlobalNotFound() {
|
|
5
|
+
return React.createElement("html", null, React.createElement("body", null, React.createElement(DefaultNotFound)));
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Module-shaped wrapper around Next.js's built-in global not-found document.
|
|
9
|
+
* Unlike the regular default not-found boundary, this component owns the
|
|
10
|
+
* document shell because global not-found responses skip the root layout.
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_GLOBAL_NOT_FOUND_MODULE = { default: DefaultGlobalNotFound };
|
|
13
|
+
//#endregion
|
|
14
|
+
export { DEFAULT_GLOBAL_NOT_FOUND_MODULE };
|
|
@@ -3,7 +3,6 @@ import { createValidFileMatcher, findFileWithExtensions } from "../routing/file-
|
|
|
3
3
|
import { patternToNextFormat } from "../routing/route-validation.js";
|
|
4
4
|
import { matchRoute } from "../routing/pages-router.js";
|
|
5
5
|
import { NEXTJS_DEPLOYMENT_ID_HEADER } from "./headers.js";
|
|
6
|
-
import { normalizeStaticPathname } from "../routing/route-pattern.js";
|
|
7
6
|
import { importModule, reportRequestError } from "./instrumentation.js";
|
|
8
7
|
import { buildCacheStateHeaders } from "./cache-headers.js";
|
|
9
8
|
import { isUnknownRecord } from "../utils/record.js";
|
|
@@ -26,12 +25,13 @@ import { detectLocaleFromAcceptLanguage, extractLocaleFromUrl as extractLocaleFr
|
|
|
26
25
|
import { buildDefaultPagesNotFoundResponse } from "./pages-default-404.js";
|
|
27
26
|
import { buildPagesReadinessNextData } from "./pages-readiness.js";
|
|
28
27
|
import { resolvePagesPageMethodResponse } from "./pages-page-method.js";
|
|
29
|
-
import { createPagesDevModuleUrl } from "./pages-dev-module-url.js";
|
|
30
|
-
import { isSerializableProps } from "./pages-serializable-props.js";
|
|
31
28
|
import { loadUserDocumentInitialProps, runDocumentRenderPage } from "./pages-document-initial-props.js";
|
|
32
29
|
import { callDocumentGetInitialProps } from "./document-initial-head.js";
|
|
33
30
|
import { hasPagesGetInitialProps, loadDevAppInitialProps, loadPagesGetInitialProps } from "./pages-get-initial-props.js";
|
|
31
|
+
import { isSerializableProps } from "./pages-serializable-props.js";
|
|
34
32
|
import { isBotUserAgent } from "../utils/html-limited-bots.js";
|
|
33
|
+
import { getPagesRouteParams, matchesPagesStaticPath } from "./pages-page-data.js";
|
|
34
|
+
import { createPagesDevModuleUrl } from "./pages-dev-module-url.js";
|
|
35
35
|
import path from "node:path";
|
|
36
36
|
import React from "react";
|
|
37
37
|
import { renderToReadableStream } from "react-dom/server.edge";
|
|
@@ -248,8 +248,9 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
|
|
|
248
248
|
if (isDataReq) {
|
|
249
249
|
const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
|
|
250
250
|
const notFoundHeaders = { "Content-Type": "application/json" };
|
|
251
|
+
if (hasMiddleware) notFoundHeaders["x-nextjs-matched-path"] = `${locale ? `/${locale}` : ""}${localeStrippedUrl}`;
|
|
251
252
|
if (deploymentId) notFoundHeaders[NEXTJS_DEPLOYMENT_ID_HEADER] = deploymentId;
|
|
252
|
-
res.writeHead(404, notFoundHeaders);
|
|
253
|
+
res.writeHead(hasMiddleware ? 200 : 404, notFoundHeaders);
|
|
253
254
|
res.end("{}");
|
|
254
255
|
return;
|
|
255
256
|
}
|
|
@@ -340,17 +341,8 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
|
|
|
340
341
|
});
|
|
341
342
|
const fallback = pathsResult?.fallback ?? false;
|
|
342
343
|
const paths = pathsResult?.paths ?? [];
|
|
343
|
-
const
|
|
344
|
-
const isValidPath = paths.some((
|
|
345
|
-
if (typeof p === "string") return normalizeStaticPathname(p) === currentPathname;
|
|
346
|
-
const entryParams = p.params;
|
|
347
|
-
if (entryParams === void 0 || entryParams === null) return false;
|
|
348
|
-
return Object.entries(entryParams).every(([key, val]) => {
|
|
349
|
-
const actual = params[key];
|
|
350
|
-
if (Array.isArray(val)) return Array.isArray(actual) && val.join("/") === actual.join("/");
|
|
351
|
-
return String(val) === String(actual);
|
|
352
|
-
});
|
|
353
|
-
});
|
|
344
|
+
const routeParams = getPagesRouteParams(patternToNextFormat(route.pattern));
|
|
345
|
+
const isValidPath = paths.some((pathEntry) => matchesPagesStaticPath(pathEntry, params, routeParams, url));
|
|
354
346
|
if (fallback === false && !isValidPath) {
|
|
355
347
|
if (isDataReq) {
|
|
356
348
|
const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
|
|
@@ -762,6 +754,7 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
|
|
|
762
754
|
setRevalidateDuration(cacheKey, revalidateSeconds);
|
|
763
755
|
}
|
|
764
756
|
const dataHeaders = { "Content-Type": "application/json" };
|
|
757
|
+
if ((statusCode ?? 200) === 200) dataHeaders["x-nextjs-matched-path"] = `${locale ? `/${locale}` : ""}${patternToNextFormat(route.pattern)}`;
|
|
765
758
|
if (gsspExtraHeaders) for (const [k, v] of Object.entries(gsspExtraHeaders)) dataHeaders[k] = v;
|
|
766
759
|
const dataRoutePattern = patternToNextFormat(route.pattern);
|
|
767
760
|
if (dataRoutePattern !== "/_error" && dataRoutePattern !== "/500") {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "
|
|
1
|
+
import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "../utils/dev-stack-sourcemap-endpoint.js";
|
|
2
2
|
import { ViteDevServer } from "vite";
|
|
3
3
|
|
|
4
4
|
//#region src/server/dev-stack-sourcemap.d.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "
|
|
1
|
+
import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "../utils/dev-stack-sourcemap-endpoint.js";
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
4
|
//#region src/server/dev-stack-sourcemap.ts
|
package/dist/server/headers.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_SET_COOKIE_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER } from "../utils/protocol-headers.js";
|
|
2
|
+
|
|
1
3
|
//#region src/server/headers.d.ts
|
|
2
4
|
/**
|
|
3
5
|
* Internal HTTP header name constants used throughout vinext.
|
|
@@ -15,14 +17,8 @@ declare const VINEXT_CACHE_HEADER = "X-Vinext-Cache";
|
|
|
15
17
|
declare const NEXTJS_CACHE_HEADER = "x-nextjs-cache";
|
|
16
18
|
/** Static file signal — value is URL-encoded pathname. */
|
|
17
19
|
declare const VINEXT_STATIC_FILE_HEADER = "x-vinext-static-file";
|
|
18
|
-
/** Serialized middleware context (JSON) forwarded from dev server to RSC entry. */
|
|
19
|
-
declare const VINEXT_MW_CTX_HEADER = "x-vinext-mw-ctx";
|
|
20
20
|
/** Timing metrics: `handlerStart,compileMs,renderMs`. */
|
|
21
21
|
declare const VINEXT_TIMING_HEADER = "x-vinext-timing";
|
|
22
|
-
/** Build-time prerender authentication secret. */
|
|
23
|
-
declare const VINEXT_PRERENDER_SECRET_HEADER = "x-vinext-prerender-secret";
|
|
24
|
-
/** URL-encoded JSON route params for build-time prerender renders. */
|
|
25
|
-
declare const VINEXT_PRERENDER_ROUTE_PARAMS_HEADER = "x-vinext-prerender-route-params";
|
|
26
22
|
/** Internal endpoint used to evaluate App Router generateStaticParams exports. */
|
|
27
23
|
declare const VINEXT_PRERENDER_STATIC_PARAMS_PATH = "/__vinext/prerender/static-params";
|
|
28
24
|
/** Internal endpoint used to evaluate Pages Router getStaticPaths exports. */
|
|
@@ -81,22 +77,16 @@ declare const ACTION_REDIRECT_HEADER = "x-action-redirect";
|
|
|
81
77
|
declare const ACTION_REDIRECT_TYPE_HEADER = "x-action-redirect-type";
|
|
82
78
|
/** HTTP status for a Server Action redirect (e.g. "308"). */
|
|
83
79
|
declare const ACTION_REDIRECT_STATUS_HEADER = "x-action-redirect-status";
|
|
84
|
-
/** Prefix for forwarded request headers (e.g. `x-middleware-request-cookie`). */
|
|
85
|
-
declare const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
|
|
86
|
-
/** Comma-separated list of header names that middleware wants to override. */
|
|
87
|
-
declare const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
|
|
88
|
-
/** Carries cookies set by middleware for same-render reads. */
|
|
89
|
-
declare const MIDDLEWARE_SET_COOKIE_HEADER = "x-middleware-set-cookie";
|
|
90
80
|
/** Signal from `NextResponse.next()` — value "1" means "continue to next handler". */
|
|
91
81
|
declare const MIDDLEWARE_NEXT_HEADER = "x-middleware-next";
|
|
92
82
|
/** Rewrite destination URL set by `NextResponse.rewrite()`. */
|
|
93
83
|
declare const MIDDLEWARE_REWRITE_HEADER = "x-middleware-rewrite";
|
|
94
|
-
/** Generic prefix for all middleware internal headers. */
|
|
95
|
-
declare const MIDDLEWARE_HEADER_PREFIX = "x-middleware-";
|
|
96
84
|
declare const NEXT_ROUTER_STATE_TREE_HEADER = "Next-Router-State-Tree";
|
|
97
85
|
declare const NEXT_ROUTER_PREFETCH_HEADER = "Next-Router-Prefetch";
|
|
98
86
|
declare const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = "Next-Router-Segment-Prefetch";
|
|
99
87
|
declare const NEXT_URL_HEADER = "Next-Url";
|
|
88
|
+
declare const NEXT_REQUEST_ID_HEADER = "x-nextjs-request-id";
|
|
89
|
+
declare const NEXT_HTML_REQUEST_ID_HEADER = "x-nextjs-html-request-id";
|
|
100
90
|
/** Lowercase flight header variants used in middleware forwarding. */
|
|
101
91
|
declare const FLIGHT_HEADERS: readonly string[];
|
|
102
92
|
/**
|
|
@@ -111,4 +101,4 @@ declare const INTERNAL_HEADERS: string[];
|
|
|
111
101
|
/** Vinext-only internal headers stripped alongside Next.js protocol internals. */
|
|
112
102
|
declare const VINEXT_INTERNAL_HEADERS: string[];
|
|
113
103
|
//#endregion
|
|
114
|
-
export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER,
|
|
104
|
+
export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER, MIDDLEWARE_REWRITE_HEADER, MIDDLEWARE_SET_COOKIE_HEADER, NEXTJS_ACTION_NOT_FOUND_HEADER, NEXTJS_CACHE_HEADER, NEXTJS_DEPLOYMENT_ID_HEADER, NEXT_ACTION_HEADER, NEXT_HTML_REQUEST_ID_HEADER, NEXT_REQUEST_ID_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, NEXT_URL_HEADER, RSC_ACTION_HEADER, RSC_HEADER, VINEXT_CACHE_HEADER, VINEXT_CLIENT_REUSE_MANIFEST_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_INTERNAL_HEADERS, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_PAGES_STATIC_PATHS_PATH, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_STATIC_PARAMS_PATH, VINEXT_REVALIDATE_HEADER, VINEXT_RSC_MARKER_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_RENDER_MODE_HEADER, VINEXT_STATIC_FILE_HEADER, VINEXT_TIMING_HEADER };
|
package/dist/server/headers.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_SET_COOKIE_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER } from "../utils/protocol-headers.js";
|
|
1
2
|
//#region src/server/headers.ts
|
|
2
3
|
/**
|
|
3
4
|
* Internal HTTP header name constants used throughout vinext.
|
|
@@ -15,14 +16,8 @@ const VINEXT_CACHE_HEADER = "X-Vinext-Cache";
|
|
|
15
16
|
const NEXTJS_CACHE_HEADER = "x-nextjs-cache";
|
|
16
17
|
/** Static file signal — value is URL-encoded pathname. */
|
|
17
18
|
const VINEXT_STATIC_FILE_HEADER = "x-vinext-static-file";
|
|
18
|
-
/** Serialized middleware context (JSON) forwarded from dev server to RSC entry. */
|
|
19
|
-
const VINEXT_MW_CTX_HEADER = "x-vinext-mw-ctx";
|
|
20
19
|
/** Timing metrics: `handlerStart,compileMs,renderMs`. */
|
|
21
20
|
const VINEXT_TIMING_HEADER = "x-vinext-timing";
|
|
22
|
-
/** Build-time prerender authentication secret. */
|
|
23
|
-
const VINEXT_PRERENDER_SECRET_HEADER = "x-vinext-prerender-secret";
|
|
24
|
-
/** URL-encoded JSON route params for build-time prerender renders. */
|
|
25
|
-
const VINEXT_PRERENDER_ROUTE_PARAMS_HEADER = "x-vinext-prerender-route-params";
|
|
26
21
|
/** Internal endpoint used to evaluate App Router generateStaticParams exports. */
|
|
27
22
|
const VINEXT_PRERENDER_STATIC_PARAMS_PATH = "/__vinext/prerender/static-params";
|
|
28
23
|
/** Internal endpoint used to evaluate Pages Router getStaticPaths exports. */
|
|
@@ -81,12 +76,6 @@ const ACTION_REDIRECT_HEADER = "x-action-redirect";
|
|
|
81
76
|
const ACTION_REDIRECT_TYPE_HEADER = "x-action-redirect-type";
|
|
82
77
|
/** HTTP status for a Server Action redirect (e.g. "308"). */
|
|
83
78
|
const ACTION_REDIRECT_STATUS_HEADER = "x-action-redirect-status";
|
|
84
|
-
/** Prefix for forwarded request headers (e.g. `x-middleware-request-cookie`). */
|
|
85
|
-
const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
|
|
86
|
-
/** Comma-separated list of header names that middleware wants to override. */
|
|
87
|
-
const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
|
|
88
|
-
/** Carries cookies set by middleware for same-render reads. */
|
|
89
|
-
const MIDDLEWARE_SET_COOKIE_HEADER = "x-middleware-set-cookie";
|
|
90
79
|
/** Signal from `NextResponse.next()` — value "1" means "continue to next handler". */
|
|
91
80
|
const MIDDLEWARE_NEXT_HEADER = "x-middleware-next";
|
|
92
81
|
/** Rewrite destination URL set by `NextResponse.rewrite()`. */
|
|
@@ -95,12 +84,12 @@ const MIDDLEWARE_REWRITE_HEADER = "x-middleware-rewrite";
|
|
|
95
84
|
const MIDDLEWARE_REDIRECT_HEADER = "x-middleware-redirect";
|
|
96
85
|
/** Skip-middleware signal. */
|
|
97
86
|
const MIDDLEWARE_SKIP_HEADER = "x-middleware-skip";
|
|
98
|
-
/** Generic prefix for all middleware internal headers. */
|
|
99
|
-
const MIDDLEWARE_HEADER_PREFIX = "x-middleware-";
|
|
100
87
|
const NEXT_ROUTER_STATE_TREE_HEADER = "Next-Router-State-Tree";
|
|
101
88
|
const NEXT_ROUTER_PREFETCH_HEADER = "Next-Router-Prefetch";
|
|
102
89
|
const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = "Next-Router-Segment-Prefetch";
|
|
103
90
|
const NEXT_URL_HEADER = "Next-Url";
|
|
91
|
+
const NEXT_REQUEST_ID_HEADER = "x-nextjs-request-id";
|
|
92
|
+
const NEXT_HTML_REQUEST_ID_HEADER = "x-nextjs-html-request-id";
|
|
104
93
|
/** Lowercase flight header variants used in middleware forwarding. */
|
|
105
94
|
const FLIGHT_HEADERS = [
|
|
106
95
|
"rsc",
|
|
@@ -133,4 +122,4 @@ const INTERNAL_HEADERS = [
|
|
|
133
122
|
/** Vinext-only internal headers stripped alongside Next.js protocol internals. */
|
|
134
123
|
const VINEXT_INTERNAL_HEADERS = [VINEXT_PRERENDER_ROUTE_PARAMS_HEADER];
|
|
135
124
|
//#endregion
|
|
136
|
-
export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER,
|
|
125
|
+
export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER, MIDDLEWARE_REWRITE_HEADER, MIDDLEWARE_SET_COOKIE_HEADER, NEXTJS_ACTION_NOT_FOUND_HEADER, NEXTJS_CACHE_HEADER, NEXTJS_DEPLOYMENT_ID_HEADER, NEXT_ACTION_HEADER, NEXT_HTML_REQUEST_ID_HEADER, NEXT_REQUEST_ID_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, NEXT_URL_HEADER, RSC_ACTION_HEADER, RSC_HEADER, VINEXT_CACHE_HEADER, VINEXT_CLIENT_REUSE_MANIFEST_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_INTERNAL_HEADERS, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_PAGES_STATIC_PATHS_PATH, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_STATIC_PARAMS_PATH, VINEXT_REVALIDATE_HEADER, VINEXT_RSC_MARKER_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_RENDER_MODE_HEADER, VINEXT_STATIC_FILE_HEADER, VINEXT_TIMING_HEADER };
|
|
@@ -126,5 +126,55 @@ type ImageHandlers = {
|
|
|
126
126
|
* cache headers.
|
|
127
127
|
*/
|
|
128
128
|
declare function handleImageOptimization(request: Request, handlers: ImageHandlers, allowedWidths?: number[], imageConfig?: ImageConfig): Promise<Response>;
|
|
129
|
+
/**
|
|
130
|
+
* A server-side image optimizer: the transform backend that resizes/transcodes
|
|
131
|
+
* a source image. Produced by an adapter factory (e.g. `imagesOptimizer()` from
|
|
132
|
+
* `@vinext/cloudflare/images/images-optimizer`) and registered via
|
|
133
|
+
* {@link setImageOptimizer}.
|
|
134
|
+
*/
|
|
135
|
+
type ImageOptimizer = {
|
|
136
|
+
/** Transform the source image (resize, format, quality). */transformImage: (body: ReadableStream, options: {
|
|
137
|
+
width: number;
|
|
138
|
+
format: string;
|
|
139
|
+
quality: number;
|
|
140
|
+
}) => Promise<Response>;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Register the active image optimizer (transform backend). An explicit
|
|
144
|
+
* registration always wins; passing `null` clears it (falling back to
|
|
145
|
+
* unoptimized passthrough).
|
|
146
|
+
*
|
|
147
|
+
* Configure this declaratively via the `images.optimizer` option on the
|
|
148
|
+
* `vinext()` plugin in your `vite.config.ts` rather than calling it directly.
|
|
149
|
+
* On Cloudflare Workers:
|
|
150
|
+
*
|
|
151
|
+
* ```ts
|
|
152
|
+
* import { vinext } from "vinext";
|
|
153
|
+
* import { imagesOptimizer } from "@vinext/cloudflare/images/images-optimizer";
|
|
154
|
+
*
|
|
155
|
+
* export default defineConfig({
|
|
156
|
+
* plugins: [vinext({ images: { optimizer: imagesOptimizer() } })],
|
|
157
|
+
* });
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* The plugin registers the optimizer across every runtime/router entry, so you
|
|
161
|
+
* don't have to wire `env.IMAGES` into a custom worker entry. This setter
|
|
162
|
+
* remains the internal registration target.
|
|
163
|
+
*/
|
|
164
|
+
declare function setImageOptimizer(optimizer: ImageOptimizer | null): void;
|
|
165
|
+
/** Get the active image optimizer, or `null` when none is configured. */
|
|
166
|
+
declare function getImageOptimizer(): ImageOptimizer | null;
|
|
167
|
+
/**
|
|
168
|
+
* Handle an image optimization request using the configured optimizer (if any).
|
|
169
|
+
*
|
|
170
|
+
* This is the single entry point every runtime/router seam (App Router worker,
|
|
171
|
+
* Pages worker, Node prod server) should call: it reads the registered
|
|
172
|
+
* {@link ImageOptimizer} and wires its `transformImage` into
|
|
173
|
+
* {@link handleImageOptimization}, with the caller supplying the runtime's
|
|
174
|
+
* `fetchAsset` (e.g. the Cloudflare `ASSETS` binding, or filesystem reads on
|
|
175
|
+
* Node). When no optimizer is registered, the request is served unoptimized
|
|
176
|
+
* (passthrough) with the same security/cache headers.
|
|
177
|
+
*/
|
|
178
|
+
declare function handleConfiguredImageOptimization(request: Request, fetchAsset: (path: string, request: Request) => Promise<Response>, allowedWidths?: number[], imageConfig?: ImageConfig): Promise<Response>;
|
|
129
179
|
//#endregion
|
|
130
|
-
export { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, IMAGE_CACHE_CONTROL, IMAGE_CONTENT_SECURITY_POLICY, IMAGE_OPTIMIZATION_PATH, ImageConfig, ImageHandlers, ParseImageParamsOptions, VINEXT_IMAGE_OPTIMIZATION_PATH, handleImageOptimization, isImageOptimizationPath, isSafeImageContentType, negotiateImageFormat, parseImageParams, resolveDevImageRedirect, snapToNearestAllowedWidth };
|
|
180
|
+
export { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, IMAGE_CACHE_CONTROL, IMAGE_CONTENT_SECURITY_POLICY, IMAGE_OPTIMIZATION_PATH, ImageConfig, ImageHandlers, ImageOptimizer, ParseImageParamsOptions, VINEXT_IMAGE_OPTIMIZATION_PATH, getImageOptimizer, handleConfiguredImageOptimization, handleImageOptimization, isImageOptimizationPath, isSafeImageContentType, negotiateImageFormat, parseImageParams, resolveDevImageRedirect, setImageOptimizer, snapToNearestAllowedWidth };
|