vinext 1.0.0-beta.1 → 1.0.0-beta.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 +10 -10
- package/dist/build/client-build-config.js +8 -1
- package/dist/build/report.d.ts +8 -1
- package/dist/build/report.js +12 -2
- package/dist/check.js +19 -2
- package/dist/cli.js +3 -2
- package/dist/config/config-matchers.d.ts +13 -37
- package/dist/config/config-matchers.js +35 -122
- package/dist/config/next-config.d.ts +15 -5
- package/dist/config/next-config.js +7 -1
- package/dist/config/request-context.d.ts +14 -0
- package/dist/config/request-context.js +26 -0
- package/dist/entries/app-browser-entry.d.ts +4 -10
- package/dist/entries/app-browser-entry.js +20 -4
- package/dist/entries/app-rsc-entry.js +30 -9
- package/dist/entries/app-rsc-manifest.js +36 -0
- package/dist/entries/pages-client-entry.js +0 -1
- package/dist/entries/pages-server-entry.js +13 -5
- package/dist/index.js +194 -101
- package/dist/init-cloudflare.d.ts +3 -1
- package/dist/init-cloudflare.js +59 -5
- package/dist/init.d.ts +6 -4
- package/dist/init.js +20 -22
- package/dist/plugins/extensionless-dynamic-import.js +23 -18
- package/dist/plugins/ignore-dynamic-requests.js +3 -1
- package/dist/plugins/import-meta-url.js +17 -6
- package/dist/plugins/og-assets.js +1 -1
- package/dist/plugins/require-context.js +20 -15
- package/dist/plugins/transform-cache.d.ts +19 -0
- package/dist/plugins/transform-cache.js +36 -0
- package/dist/routing/app-route-graph.d.ts +27 -11
- package/dist/routing/app-route-graph.js +158 -22
- package/dist/routing/app-router.js +12 -6
- package/dist/routing/file-matcher.d.ts +11 -22
- package/dist/routing/file-matcher.js +21 -33
- package/dist/routing/pages-router.js +23 -29
- package/dist/routing/route-matching.d.ts +14 -1
- package/dist/routing/route-matching.js +13 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/routing/route-pattern.js +7 -4
- package/dist/routing/route-trie.d.ts +5 -1
- package/dist/routing/route-trie.js +5 -2
- package/dist/server/api-handler.d.ts +2 -0
- package/dist/server/api-handler.js +3 -3
- package/dist/server/app-browser-entry.js +110 -37
- package/dist/server/app-browser-history-controller.d.ts +1 -1
- package/dist/server/app-browser-history-controller.js +3 -3
- package/dist/server/app-browser-navigation-controller.d.ts +23 -21
- package/dist/server/app-browser-navigation-controller.js +2 -2
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-visible-commit.js +1 -1
- package/dist/server/app-fallback-renderer.d.ts +3 -0
- package/dist/server/app-fallback-renderer.js +4 -2
- package/dist/server/app-middleware.js +2 -1
- package/dist/server/app-page-boundary-render.d.ts +12 -1
- package/dist/server/app-page-boundary-render.js +84 -2
- package/dist/server/app-page-cache-finalizer.d.ts +1 -1
- package/dist/server/app-page-cache-finalizer.js +1 -1
- package/dist/server/app-page-cache.d.ts +2 -2
- package/dist/server/app-page-cache.js +16 -2
- package/dist/server/app-page-dispatch.d.ts +19 -2
- package/dist/server/app-page-dispatch.js +45 -23
- package/dist/server/app-page-element-builder.d.ts +9 -2
- package/dist/server/app-page-element-builder.js +144 -33
- package/dist/server/app-page-head.d.ts +56 -4
- package/dist/server/app-page-head.js +216 -85
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +29 -0
- package/dist/server/app-page-http-access-fallback-metadata.js +114 -0
- package/dist/server/app-page-probe.d.ts +4 -0
- package/dist/server/app-page-probe.js +6 -2
- package/dist/server/app-page-render.d.ts +2 -2
- package/dist/server/app-page-render.js +1 -1
- package/dist/server/app-page-request.d.ts +15 -0
- package/dist/server/app-page-request.js +134 -14
- package/dist/server/app-page-response.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +16 -0
- package/dist/server/app-page-route-wiring.js +254 -52
- package/dist/server/app-pages-bridge.d.ts +1 -1
- package/dist/server/app-pages-bridge.js +2 -1
- package/dist/server/app-post-middleware-context.d.ts +1 -1
- package/dist/server/app-post-middleware-context.js +1 -1
- package/dist/server/app-route-handler-cache.js +4 -0
- package/dist/server/app-route-handler-dispatch.js +40 -20
- package/dist/server/app-route-handler-execution.d.ts +6 -1
- package/dist/server/app-route-handler-execution.js +42 -16
- package/dist/server/app-route-handler-policy.d.ts +2 -0
- package/dist/server/app-route-handler-policy.js +3 -3
- package/dist/server/app-route-handler-response.js +1 -1
- package/dist/server/app-route-module-loader.d.ts +9 -1
- package/dist/server/app-route-module-loader.js +4 -0
- package/dist/server/app-router-entry.js +6 -3
- package/dist/server/app-rsc-cache-busting.d.ts +1 -1
- package/dist/server/app-rsc-errors.d.ts +1 -1
- package/dist/server/app-rsc-errors.js +22 -2
- package/dist/server/app-rsc-handler.d.ts +10 -5
- package/dist/server/app-rsc-handler.js +73 -33
- package/dist/server/app-rsc-request-normalization.d.ts +3 -2
- package/dist/server/app-rsc-request-normalization.js +8 -2
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -2
- package/dist/server/app-rsc-response-finalizer.js +5 -11
- package/dist/server/app-rsc-route-matching.d.ts +29 -0
- package/dist/server/app-rsc-route-matching.js +93 -11
- package/dist/server/app-segment-config.js +13 -3
- package/dist/server/app-server-action-execution.d.ts +3 -1
- package/dist/server/app-server-action-execution.js +9 -7
- package/dist/server/app-ssr-entry.js +6 -6
- package/dist/server/app-ssr-stream.d.ts +1 -7
- package/dist/server/app-ssr-stream.js +2 -10
- package/dist/server/cache-control.d.ts +2 -2
- package/dist/server/cache-control.js +2 -1
- package/dist/server/config-headers.d.ts +24 -0
- package/dist/server/config-headers.js +52 -0
- package/dist/server/dev-initial-server-error.d.ts +1 -1
- package/dist/server/dev-server.d.ts +3 -1
- package/dist/server/dev-server.js +170 -321
- package/dist/server/headers.d.ts +2 -2
- package/dist/server/headers.js +4 -3
- package/dist/server/isr-cache.d.ts +11 -34
- package/dist/server/isr-cache.js +33 -43
- package/dist/server/isr-decision.d.ts +2 -2
- package/dist/server/middleware-matcher-pattern.d.ts +22 -0
- package/dist/server/middleware-matcher-pattern.js +219 -0
- package/dist/server/middleware-matcher.d.ts +2 -7
- package/dist/server/middleware-matcher.js +13 -60
- package/dist/server/middleware-path-to-regexp.d.ts +14 -0
- package/dist/server/middleware-path-to-regexp.js +228 -0
- package/dist/server/middleware-runtime.js +4 -3
- package/dist/server/middleware.d.ts +1 -1
- package/dist/server/middleware.js +2 -1
- package/dist/server/pages-api-route.d.ts +2 -0
- package/dist/server/pages-api-route.js +4 -1
- package/dist/server/pages-data-route.d.ts +11 -1
- package/dist/server/pages-data-route.js +16 -1
- package/dist/server/pages-dev-hydration.js +0 -1
- package/dist/server/pages-get-initial-props.d.ts +16 -3
- package/dist/server/pages-get-initial-props.js +17 -10
- package/dist/server/pages-i18n.js +64 -16
- package/dist/server/pages-node-compat.d.ts +2 -0
- package/dist/server/pages-node-compat.js +7 -3
- package/dist/server/pages-page-data.d.ts +64 -10
- package/dist/server/pages-page-data.js +349 -80
- package/dist/server/pages-page-handler.d.ts +9 -3
- package/dist/server/pages-page-handler.js +131 -36
- package/dist/server/pages-page-response.d.ts +5 -3
- package/dist/server/pages-page-response.js +24 -27
- package/dist/server/pages-readiness.d.ts +3 -3
- package/dist/server/pages-request-pipeline.d.ts +8 -0
- package/dist/server/pages-request-pipeline.js +30 -12
- package/dist/server/pages-revalidate.d.ts +1 -1
- package/dist/server/pages-revalidate.js +54 -8
- package/dist/server/pages-router-entry.d.ts +1 -0
- package/dist/server/pages-router-entry.js +16 -4
- package/dist/server/prerender-route-params.js +2 -2
- package/dist/server/prod-server.d.ts +3 -5
- package/dist/server/prod-server.js +72 -35
- package/dist/server/request-pipeline.d.ts +15 -29
- package/dist/server/request-pipeline.js +24 -59
- package/dist/server/revalidation-host.d.ts +11 -0
- package/dist/server/revalidation-host.js +19 -0
- package/dist/server/rsc-stream-hints.js +122 -18
- package/dist/server/worker-revalidation-context.d.ts +13 -0
- package/dist/server/worker-revalidation-context.js +29 -0
- package/dist/shims/app.d.ts +1 -1
- package/dist/shims/cache-handler.d.ts +1 -1
- package/dist/shims/cache-handler.js +10 -7
- package/dist/shims/cache-request-state.d.ts +27 -1
- package/dist/shims/cache-request-state.js +60 -1
- package/dist/shims/cache-runtime.d.ts +18 -1
- package/dist/shims/cache-runtime.js +26 -8
- package/dist/shims/cache.d.ts +5 -5
- package/dist/shims/cache.js +27 -11
- package/dist/shims/document.d.ts +42 -83
- package/dist/shims/document.js +62 -53
- package/dist/shims/dynamic.d.ts +5 -25
- package/dist/shims/dynamic.js +29 -8
- package/dist/shims/error.d.ts +1 -1
- package/dist/shims/error.js +2 -2
- package/dist/shims/fetch-cache.js +13 -4
- package/dist/shims/font-google-base.d.ts +11 -4
- package/dist/shims/font-google-base.js +17 -8
- package/dist/shims/font-local.d.ts +10 -3
- package/dist/shims/font-local.js +41 -10
- package/dist/shims/head.d.ts +13 -2
- package/dist/shims/head.js +3 -3
- package/dist/shims/headers.d.ts +37 -43
- package/dist/shims/headers.js +183 -74
- package/dist/shims/image.d.ts +27 -37
- package/dist/shims/image.js +21 -14
- package/dist/shims/internal/cookie-serialize.d.ts +12 -9
- package/dist/shims/internal/cookie-serialize.js +10 -7
- package/dist/shims/internal/hybrid-client-route-owner.js +3 -1
- package/dist/shims/internal/interpolate-as.d.ts +15 -1
- package/dist/shims/internal/interpolate-as.js +27 -2
- package/dist/shims/internal/utils.d.ts +3 -3
- package/dist/shims/legacy-image.d.ts +3 -37
- package/dist/shims/legacy-image.js +6 -16
- package/dist/shims/link.d.ts +15 -22
- package/dist/shims/link.js +34 -13
- package/dist/shims/metadata.d.ts +7 -17
- package/dist/shims/metadata.js +74 -24
- package/dist/shims/navigation-context-state.d.ts +1 -1
- package/dist/shims/navigation.d.ts +7 -3
- package/dist/shims/navigation.js +25 -14
- package/dist/shims/navigation.react-server.js +1 -1
- package/dist/shims/next-shims-augmentations.d.ts +1 -0
- package/dist/shims/next-shims-public.d.ts +1 -0
- package/dist/shims/public-shim-map.json.js +103 -0
- package/dist/shims/readonly-url-search-params.d.ts +3 -3
- package/dist/shims/readonly-url-search-params.js +3 -3
- package/dist/shims/request-context.d.ts +4 -1
- package/dist/shims/request-state-types.d.ts +1 -1
- package/dist/shims/router.d.ts +55 -21
- package/dist/shims/router.js +180 -44
- package/dist/shims/script.d.ts +6 -10
- package/dist/shims/script.js +7 -4
- package/dist/shims/server.d.ts +50 -26
- package/dist/shims/server.js +193 -55
- package/dist/shims/unified-request-context.d.ts +22 -3
- package/dist/shims/unified-request-context.js +84 -1
- package/dist/shims/url-safety.d.ts +1 -1
- package/dist/shims/url-safety.js +2 -2
- package/dist/typegen.d.ts +8 -2
- package/dist/typegen.js +76 -15
- package/dist/utils/cache-control-metadata.d.ts +2 -1
- package/dist/utils/cache-control-metadata.js +5 -1
- package/dist/utils/domain-locale.d.ts +2 -2
- package/dist/utils/external-url.d.ts +5 -0
- package/dist/utils/external-url.js +7 -0
- package/dist/utils/html-limited-bots.js +1 -1
- package/dist/utils/protocol-headers.d.ts +7 -1
- package/dist/utils/protocol-headers.js +7 -1
- package/dist/utils/regex-safety.d.ts +8 -0
- package/dist/utils/regex-safety.js +737 -0
- package/package.json +13 -2
|
@@ -46,8 +46,14 @@ function collectParentParamNames(routeSegments, boundaryPosition) {
|
|
|
46
46
|
}
|
|
47
47
|
return names;
|
|
48
48
|
}
|
|
49
|
-
function getLayoutGenerateStaticParamsBoundary(layoutTreePosition) {
|
|
50
|
-
|
|
49
|
+
function getLayoutGenerateStaticParamsBoundary(routeSegments, layoutTreePosition) {
|
|
50
|
+
let boundary = Math.min((layoutTreePosition ?? 0) - 1, routeSegments.length - 1);
|
|
51
|
+
while (boundary >= 0) {
|
|
52
|
+
const segment = routeSegments[boundary];
|
|
53
|
+
if (!segment.startsWith("@") && !(segment.startsWith("(") && segment.endsWith(")"))) break;
|
|
54
|
+
boundary -= 1;
|
|
55
|
+
}
|
|
56
|
+
return boundary;
|
|
51
57
|
}
|
|
52
58
|
function getParallelParentParamNames(routeParamNames, branch, boundaryPosition) {
|
|
53
59
|
const slotParamNames = branch.paramNames ?? routeParamNames;
|
|
@@ -64,11 +70,13 @@ function resolveAppPageGenerateStaticParamsSources(options) {
|
|
|
64
70
|
options.layouts?.forEach((layout, index) => {
|
|
65
71
|
if (typeof layout?.generateStaticParams !== "function") return;
|
|
66
72
|
sources.push({
|
|
73
|
+
chained: true,
|
|
67
74
|
generateStaticParams: layout.generateStaticParams,
|
|
68
|
-
parentParamNames: collectParentParamNames(options.routeSegments, getLayoutGenerateStaticParamsBoundary(options.layoutTreePositions?.[index]))
|
|
75
|
+
parentParamNames: collectParentParamNames(options.routeSegments, getLayoutGenerateStaticParamsBoundary(options.routeSegments, options.layoutTreePositions?.[index]))
|
|
69
76
|
});
|
|
70
77
|
});
|
|
71
78
|
if (typeof options.page?.generateStaticParams === "function") sources.push({
|
|
79
|
+
chained: true,
|
|
72
80
|
generateStaticParams: options.page.generateStaticParams,
|
|
73
81
|
parentParamNames: collectParentParamNames(options.routeSegments, Math.max(0, options.routeSegments.length - 1))
|
|
74
82
|
});
|
|
@@ -76,7 +84,7 @@ function resolveAppPageGenerateStaticParamsSources(options) {
|
|
|
76
84
|
const name = getAppPageSegmentParamName(segment);
|
|
77
85
|
return name ? [name] : [];
|
|
78
86
|
});
|
|
79
|
-
for (const parallelBranch of options.parallelBranches ?? []) {
|
|
87
|
+
for (const [independentChain, parallelBranch] of (options.parallelBranches ?? []).entries()) {
|
|
80
88
|
if (!parallelBranch) continue;
|
|
81
89
|
const slotParamNames = parallelBranch.paramNames ?? routeParamNames;
|
|
82
90
|
const paramAliases = Object.fromEntries(routeParamNames.flatMap((routeParamName, index) => {
|
|
@@ -87,6 +95,7 @@ function resolveAppPageGenerateStaticParamsSources(options) {
|
|
|
87
95
|
if (typeof module?.generateStaticParams !== "function") return;
|
|
88
96
|
sources.push({
|
|
89
97
|
generateStaticParams: module.generateStaticParams,
|
|
98
|
+
independentChain,
|
|
90
99
|
...Object.keys(paramAliases).length > 0 ? { paramAliases } : {},
|
|
91
100
|
...parallelBranch.patternParts ? { paramPatternParts: parallelBranch.patternParts } : {},
|
|
92
101
|
...options.routePatternParts ? { routePatternParts: options.routePatternParts } : {},
|
|
@@ -95,24 +104,101 @@ function resolveAppPageGenerateStaticParamsSources(options) {
|
|
|
95
104
|
};
|
|
96
105
|
addParallelSource(parallelBranch.layout, -1);
|
|
97
106
|
parallelBranch.configLayouts?.forEach((layout, index) => {
|
|
98
|
-
addParallelSource(layout, getLayoutGenerateStaticParamsBoundary(parallelBranch.configLayoutTreePositions?.[index]));
|
|
107
|
+
addParallelSource(layout, getLayoutGenerateStaticParamsBoundary(parallelBranch.routeSegments ?? [], parallelBranch.configLayoutTreePositions?.[index]));
|
|
99
108
|
});
|
|
100
109
|
addParallelSource(parallelBranch.page, Math.max(0, (parallelBranch.routeSegments?.length ?? 0) - 1));
|
|
101
110
|
}
|
|
102
111
|
return sources;
|
|
103
112
|
}
|
|
104
|
-
function areStaticParamsAllowed(params, staticParams) {
|
|
113
|
+
function areStaticParamsAllowed(params, staticParams, allowMissingValues = false) {
|
|
105
114
|
const paramKeys = Object.keys(params);
|
|
115
|
+
const stringParamMatches = (value, staticValue) => value === encodeURIComponent(staticValue);
|
|
106
116
|
return staticParams.some((staticParamSet) => paramKeys.every((key) => {
|
|
107
117
|
const value = params[key];
|
|
108
118
|
const staticValue = staticParamSet[key];
|
|
109
|
-
if (
|
|
110
|
-
if (Array.isArray(value)) return Array.isArray(staticValue) && value.length === staticValue.length && value.every((part, index) => typeof staticValue[index] === "string" ? part
|
|
111
|
-
if (typeof staticValue === "string") return value
|
|
119
|
+
if (!Object.hasOwn(staticParamSet, key)) return allowMissingValues;
|
|
120
|
+
if (Array.isArray(value)) return Array.isArray(staticValue) && value.length === staticValue.length && value.every((part, index) => typeof staticValue[index] === "string" ? stringParamMatches(part, staticValue[index]) : part === staticValue[index]);
|
|
121
|
+
if (typeof staticValue === "string") return stringParamMatches(value, staticValue);
|
|
112
122
|
if (typeof staticValue === "number" || typeof staticValue === "boolean") return String(value) === String(staticValue);
|
|
113
123
|
return JSON.stringify(value) === JSON.stringify(staticValue);
|
|
114
124
|
}));
|
|
115
125
|
}
|
|
126
|
+
function remapStaticParamsToRouteParams(staticParams, source) {
|
|
127
|
+
if (!source.paramAliases) return [...staticParams];
|
|
128
|
+
const routeParamNamesBySourceName = new Map(Object.entries(source.paramAliases).map(([routeParamName, sourceParamName]) => [sourceParamName, routeParamName]));
|
|
129
|
+
return staticParams.map((params) => Object.fromEntries(Object.entries(params).map(([name, value]) => [routeParamNamesBySourceName.get(name) ?? name, value])));
|
|
130
|
+
}
|
|
131
|
+
async function generateIndependentStaticParams(sources, primaryParams, requestParams) {
|
|
132
|
+
let rows = (primaryParams ?? []).map((params) => ({
|
|
133
|
+
params,
|
|
134
|
+
branchParams: {}
|
|
135
|
+
}));
|
|
136
|
+
let hasParentParams = rows.length > 0;
|
|
137
|
+
let validated = false;
|
|
138
|
+
for (const source of sources) {
|
|
139
|
+
const parents = hasParentParams ? rows : [{
|
|
140
|
+
params: {},
|
|
141
|
+
branchParams: {}
|
|
142
|
+
}];
|
|
143
|
+
const nextRows = [];
|
|
144
|
+
for (const parent of parents) {
|
|
145
|
+
const sourceParams = remapRouteParams({
|
|
146
|
+
...requestParams,
|
|
147
|
+
...parent.params
|
|
148
|
+
}, source);
|
|
149
|
+
const branchParams = remapRouteParams(parent.branchParams, source);
|
|
150
|
+
const result = await runWithFetchDedupe(() => source.generateStaticParams({ params: {
|
|
151
|
+
...pickRouteParams(sourceParams, source.parentParamNames),
|
|
152
|
+
...branchParams
|
|
153
|
+
} }));
|
|
154
|
+
if (!Array.isArray(result)) {
|
|
155
|
+
if (hasParentParams) nextRows.push(parent);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
validated = true;
|
|
159
|
+
const routeResults = remapStaticParamsToRouteParams(result, source);
|
|
160
|
+
if (routeResults.length === 0) {
|
|
161
|
+
if (hasParentParams) nextRows.push(parent);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
for (const routeResult of routeResults) nextRows.push({
|
|
165
|
+
params: {
|
|
166
|
+
...parent.params,
|
|
167
|
+
...routeResult
|
|
168
|
+
},
|
|
169
|
+
branchParams: {
|
|
170
|
+
...parent.branchParams,
|
|
171
|
+
...routeResult
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
rows = nextRows;
|
|
176
|
+
hasParentParams = rows.length > 0;
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
staticParams: rows.map((row) => row.params),
|
|
180
|
+
validated
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
async function generateChainedStaticParams(sources) {
|
|
184
|
+
let generatedParams = [];
|
|
185
|
+
for (const source of sources) {
|
|
186
|
+
const hasParentParams = generatedParams.length > 0;
|
|
187
|
+
const parents = hasParentParams ? generatedParams : [{}];
|
|
188
|
+
const nextParams = [];
|
|
189
|
+
for (const parentParams of parents) {
|
|
190
|
+
const result = await runWithFetchDedupe(() => source.generateStaticParams({ params: parentParams }));
|
|
191
|
+
if (Array.isArray(result) && result.length > 0) {
|
|
192
|
+
for (const item of result) if (item !== null && typeof item === "object" && !Array.isArray(item)) nextParams.push({
|
|
193
|
+
...parentParams,
|
|
194
|
+
...item
|
|
195
|
+
});
|
|
196
|
+
} else if (hasParentParams) nextParams.push(parentParams);
|
|
197
|
+
}
|
|
198
|
+
generatedParams = nextParams;
|
|
199
|
+
}
|
|
200
|
+
return generatedParams;
|
|
201
|
+
}
|
|
116
202
|
function normalizeGenerateStaticParams(generateStaticParams) {
|
|
117
203
|
return (Array.isArray(generateStaticParams) ? generateStaticParams : [generateStaticParams]).flatMap((source) => {
|
|
118
204
|
if (typeof source === "function") return [{
|
|
@@ -130,10 +216,28 @@ async function validateAppPageDynamicParams(options) {
|
|
|
130
216
|
options.clearRequestContext();
|
|
131
217
|
return notFoundResponse();
|
|
132
218
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
219
|
+
const chainedSources = generateStaticParamsSources.filter((source) => source.chained);
|
|
220
|
+
let chainedStaticParams = null;
|
|
221
|
+
if (chainedSources.length > 0) chainedStaticParams = await generateChainedStaticParams(chainedSources);
|
|
222
|
+
const independentChains = /* @__PURE__ */ new Map();
|
|
223
|
+
for (const source of generateStaticParamsSources.filter((source) => !source.chained)) {
|
|
224
|
+
const chain = independentChains.get(source.independentChain ?? source) ?? [];
|
|
225
|
+
chain.push(source);
|
|
226
|
+
independentChains.set(source.independentChain ?? source, chain);
|
|
227
|
+
}
|
|
228
|
+
let validatedIndependentResults = false;
|
|
229
|
+
for (const sources of independentChains.values()) {
|
|
230
|
+
const result = await generateIndependentStaticParams(sources, chainedStaticParams, options.params);
|
|
231
|
+
if (result.validated) {
|
|
232
|
+
validatedIndependentResults = true;
|
|
233
|
+
if (!areStaticParamsAllowed(options.params, result.staticParams, true)) {
|
|
234
|
+
options.clearRequestContext();
|
|
235
|
+
return notFoundResponse();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (chainedStaticParams && !validatedIndependentResults) {
|
|
240
|
+
if (!areStaticParamsAllowed(options.params, chainedStaticParams)) {
|
|
137
241
|
options.clearRequestContext();
|
|
138
242
|
return notFoundResponse();
|
|
139
243
|
}
|
|
@@ -187,7 +291,23 @@ async function resolveAppPageInterceptState(options) {
|
|
|
187
291
|
if (loadState) loadState.pageLoading = loading;
|
|
188
292
|
await loading;
|
|
189
293
|
}
|
|
190
|
-
if (intercept.
|
|
294
|
+
if (loadState?.notFound != null) intercept.notFound = loadState.notFound;
|
|
295
|
+
if (intercept.__loadNotFound && intercept.notFound == null) {
|
|
296
|
+
const loading = loadState?.notFoundLoading ?? intercept.__loadNotFound().then((notFound) => {
|
|
297
|
+
intercept.notFound = notFound;
|
|
298
|
+
if (loadState) {
|
|
299
|
+
loadState.notFound = notFound;
|
|
300
|
+
loadState.notFoundLoading = null;
|
|
301
|
+
}
|
|
302
|
+
return notFound;
|
|
303
|
+
}).catch((error) => {
|
|
304
|
+
if (loadState) loadState.notFoundLoading = null;
|
|
305
|
+
throw error;
|
|
306
|
+
});
|
|
307
|
+
if (loadState) loadState.notFoundLoading = loading;
|
|
308
|
+
await loading;
|
|
309
|
+
}
|
|
310
|
+
if (intercept.__loadInterceptLayouts || intercept.__loadInterceptLoadings) await loadAppInterceptLayouts(intercept);
|
|
191
311
|
const sourceRoute = await options.getSourceRoute(intercept.sourceRouteIndex);
|
|
192
312
|
if (!sourceRoute) return { kind: "none" };
|
|
193
313
|
if (sourceRoute === options.currentRoute) return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_CACHE_LIFE_HEADER, VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, VINEXT_TIMING_HEADER } from "./headers.js";
|
|
2
|
-
import { setCacheStateHeaders } from "./cache-headers.js";
|
|
3
2
|
import { NO_STORE_CACHE_CONTROL, STATIC_CACHE_CONTROL, buildRevalidateCacheControl } from "./cache-control.js";
|
|
3
|
+
import { setCacheStateHeaders } from "./cache-headers.js";
|
|
4
4
|
import { VINEXT_RSC_CONTENT_TYPE, VINEXT_RSC_VARY_HEADER, applyRscCompatibilityIdHeader, applyRscDeploymentIdHeader } from "./app-rsc-cache-busting.js";
|
|
5
5
|
import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
|
|
6
6
|
//#region src/server/app-page-response.ts
|
|
@@ -37,6 +37,11 @@ type AppPageRouteWiringSlot<TModule extends AppPageModule = AppPageModule, TErro
|
|
|
37
37
|
layout?: TModule | null;
|
|
38
38
|
layoutIndex: number;
|
|
39
39
|
loading?: TModule | null;
|
|
40
|
+
loadings?: readonly (TModule | null | undefined)[] | null;
|
|
41
|
+
loadingTreePositions?: readonly number[] | null;
|
|
42
|
+
ownerTreePosition?: number | null;
|
|
43
|
+
notFound?: TModule | null;
|
|
44
|
+
notFoundTreePosition?: number | null;
|
|
40
45
|
page?: TModule | null;
|
|
41
46
|
routeSegments?: readonly string[] | null;
|
|
42
47
|
/**
|
|
@@ -57,11 +62,16 @@ type AppPageRouteWiringRoute<TModule extends AppPageModule = AppPageModule, TErr
|
|
|
57
62
|
layoutTreePositions?: readonly number[] | null;
|
|
58
63
|
layouts: readonly (TModule | null | undefined)[];
|
|
59
64
|
loading?: TModule | null;
|
|
65
|
+
loadings?: readonly (TModule | null | undefined)[] | null;
|
|
66
|
+
loadingTreePositions?: readonly number[] | null;
|
|
60
67
|
notFound?: TModule | null;
|
|
61
68
|
notFounds?: readonly (TModule | null | undefined)[] | null;
|
|
69
|
+
notFoundTreePosition?: number | null;
|
|
62
70
|
forbidden?: TModule | null;
|
|
71
|
+
forbiddenTreePosition?: number | null;
|
|
63
72
|
forbiddens?: readonly (TModule | null | undefined)[] | null;
|
|
64
73
|
unauthorized?: TModule | null;
|
|
74
|
+
unauthorizedTreePosition?: number | null;
|
|
65
75
|
unauthorizeds?: readonly (TModule | null | undefined)[] | null;
|
|
66
76
|
routeSegments?: readonly string[];
|
|
67
77
|
childrenRouteSegments?: readonly string[] | null;
|
|
@@ -94,6 +104,8 @@ type AppPageSlotOverride<TModule extends AppPageModule = AppPageModule> = {
|
|
|
94
104
|
branchSegments?: readonly string[] | null;
|
|
95
105
|
layoutSegments?: readonly (readonly string[])[] | null;
|
|
96
106
|
layoutModules?: readonly (TModule | null | undefined)[] | null;
|
|
107
|
+
loadingModules?: readonly (TModule | null | undefined)[] | null;
|
|
108
|
+
loadingTreePositions?: readonly number[] | null;
|
|
97
109
|
/**
|
|
98
110
|
* The page module to render for this slot. Optional — when omitted, the
|
|
99
111
|
* slot's existing `page` is used (e.g. when the override only changes the
|
|
@@ -124,6 +136,10 @@ type BuildAppPageRouteElementOptions<TModule extends AppPageModule = AppPageModu
|
|
|
124
136
|
resolvedMetadata: Metadata | null;
|
|
125
137
|
resolvedMetadataPathname?: string;
|
|
126
138
|
resolvedViewport: Viewport;
|
|
139
|
+
streamingMetadata?: Promise<Metadata | null> | null;
|
|
140
|
+
streamingMetadataOutlet?: Promise<unknown> | null;
|
|
141
|
+
streamingMetadataOutletSuspended?: boolean;
|
|
142
|
+
streamingMetadataTags?: Promise<Metadata | null> | null;
|
|
127
143
|
trailingSlash?: boolean;
|
|
128
144
|
rootForbiddenModule?: TModule | null;
|
|
129
145
|
rootNotFoundModule?: TModule | null;
|