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.
Files changed (234) hide show
  1. package/README.md +10 -10
  2. package/dist/build/client-build-config.js +8 -1
  3. package/dist/build/report.d.ts +8 -1
  4. package/dist/build/report.js +12 -2
  5. package/dist/check.js +19 -2
  6. package/dist/cli.js +3 -2
  7. package/dist/config/config-matchers.d.ts +13 -37
  8. package/dist/config/config-matchers.js +35 -122
  9. package/dist/config/next-config.d.ts +15 -5
  10. package/dist/config/next-config.js +7 -1
  11. package/dist/config/request-context.d.ts +14 -0
  12. package/dist/config/request-context.js +26 -0
  13. package/dist/entries/app-browser-entry.d.ts +4 -10
  14. package/dist/entries/app-browser-entry.js +20 -4
  15. package/dist/entries/app-rsc-entry.js +30 -9
  16. package/dist/entries/app-rsc-manifest.js +36 -0
  17. package/dist/entries/pages-client-entry.js +0 -1
  18. package/dist/entries/pages-server-entry.js +13 -5
  19. package/dist/index.js +194 -101
  20. package/dist/init-cloudflare.d.ts +3 -1
  21. package/dist/init-cloudflare.js +59 -5
  22. package/dist/init.d.ts +6 -4
  23. package/dist/init.js +20 -22
  24. package/dist/plugins/extensionless-dynamic-import.js +23 -18
  25. package/dist/plugins/ignore-dynamic-requests.js +3 -1
  26. package/dist/plugins/import-meta-url.js +17 -6
  27. package/dist/plugins/og-assets.js +1 -1
  28. package/dist/plugins/require-context.js +20 -15
  29. package/dist/plugins/transform-cache.d.ts +19 -0
  30. package/dist/plugins/transform-cache.js +36 -0
  31. package/dist/routing/app-route-graph.d.ts +27 -11
  32. package/dist/routing/app-route-graph.js +158 -22
  33. package/dist/routing/app-router.js +12 -6
  34. package/dist/routing/file-matcher.d.ts +11 -22
  35. package/dist/routing/file-matcher.js +21 -33
  36. package/dist/routing/pages-router.js +23 -29
  37. package/dist/routing/route-matching.d.ts +14 -1
  38. package/dist/routing/route-matching.js +13 -1
  39. package/dist/routing/route-pattern.d.ts +2 -1
  40. package/dist/routing/route-pattern.js +7 -4
  41. package/dist/routing/route-trie.d.ts +5 -1
  42. package/dist/routing/route-trie.js +5 -2
  43. package/dist/server/api-handler.d.ts +2 -0
  44. package/dist/server/api-handler.js +3 -3
  45. package/dist/server/app-browser-entry.js +110 -37
  46. package/dist/server/app-browser-history-controller.d.ts +1 -1
  47. package/dist/server/app-browser-history-controller.js +3 -3
  48. package/dist/server/app-browser-navigation-controller.d.ts +23 -21
  49. package/dist/server/app-browser-navigation-controller.js +2 -2
  50. package/dist/server/app-browser-state.js +1 -1
  51. package/dist/server/app-browser-visible-commit.js +1 -1
  52. package/dist/server/app-fallback-renderer.d.ts +3 -0
  53. package/dist/server/app-fallback-renderer.js +4 -2
  54. package/dist/server/app-middleware.js +2 -1
  55. package/dist/server/app-page-boundary-render.d.ts +12 -1
  56. package/dist/server/app-page-boundary-render.js +84 -2
  57. package/dist/server/app-page-cache-finalizer.d.ts +1 -1
  58. package/dist/server/app-page-cache-finalizer.js +1 -1
  59. package/dist/server/app-page-cache.d.ts +2 -2
  60. package/dist/server/app-page-cache.js +16 -2
  61. package/dist/server/app-page-dispatch.d.ts +19 -2
  62. package/dist/server/app-page-dispatch.js +45 -23
  63. package/dist/server/app-page-element-builder.d.ts +9 -2
  64. package/dist/server/app-page-element-builder.js +144 -33
  65. package/dist/server/app-page-head.d.ts +56 -4
  66. package/dist/server/app-page-head.js +216 -85
  67. package/dist/server/app-page-http-access-fallback-metadata.d.ts +29 -0
  68. package/dist/server/app-page-http-access-fallback-metadata.js +114 -0
  69. package/dist/server/app-page-probe.d.ts +4 -0
  70. package/dist/server/app-page-probe.js +6 -2
  71. package/dist/server/app-page-render.d.ts +2 -2
  72. package/dist/server/app-page-render.js +1 -1
  73. package/dist/server/app-page-request.d.ts +15 -0
  74. package/dist/server/app-page-request.js +134 -14
  75. package/dist/server/app-page-response.js +1 -1
  76. package/dist/server/app-page-route-wiring.d.ts +16 -0
  77. package/dist/server/app-page-route-wiring.js +254 -52
  78. package/dist/server/app-pages-bridge.d.ts +1 -1
  79. package/dist/server/app-pages-bridge.js +2 -1
  80. package/dist/server/app-post-middleware-context.d.ts +1 -1
  81. package/dist/server/app-post-middleware-context.js +1 -1
  82. package/dist/server/app-route-handler-cache.js +4 -0
  83. package/dist/server/app-route-handler-dispatch.js +40 -20
  84. package/dist/server/app-route-handler-execution.d.ts +6 -1
  85. package/dist/server/app-route-handler-execution.js +42 -16
  86. package/dist/server/app-route-handler-policy.d.ts +2 -0
  87. package/dist/server/app-route-handler-policy.js +3 -3
  88. package/dist/server/app-route-handler-response.js +1 -1
  89. package/dist/server/app-route-module-loader.d.ts +9 -1
  90. package/dist/server/app-route-module-loader.js +4 -0
  91. package/dist/server/app-router-entry.js +6 -3
  92. package/dist/server/app-rsc-cache-busting.d.ts +1 -1
  93. package/dist/server/app-rsc-errors.d.ts +1 -1
  94. package/dist/server/app-rsc-errors.js +22 -2
  95. package/dist/server/app-rsc-handler.d.ts +10 -5
  96. package/dist/server/app-rsc-handler.js +73 -33
  97. package/dist/server/app-rsc-request-normalization.d.ts +3 -2
  98. package/dist/server/app-rsc-request-normalization.js +8 -2
  99. package/dist/server/app-rsc-response-finalizer.d.ts +2 -2
  100. package/dist/server/app-rsc-response-finalizer.js +5 -11
  101. package/dist/server/app-rsc-route-matching.d.ts +29 -0
  102. package/dist/server/app-rsc-route-matching.js +93 -11
  103. package/dist/server/app-segment-config.js +13 -3
  104. package/dist/server/app-server-action-execution.d.ts +3 -1
  105. package/dist/server/app-server-action-execution.js +9 -7
  106. package/dist/server/app-ssr-entry.js +6 -6
  107. package/dist/server/app-ssr-stream.d.ts +1 -7
  108. package/dist/server/app-ssr-stream.js +2 -10
  109. package/dist/server/cache-control.d.ts +2 -2
  110. package/dist/server/cache-control.js +2 -1
  111. package/dist/server/config-headers.d.ts +24 -0
  112. package/dist/server/config-headers.js +52 -0
  113. package/dist/server/dev-initial-server-error.d.ts +1 -1
  114. package/dist/server/dev-server.d.ts +3 -1
  115. package/dist/server/dev-server.js +170 -321
  116. package/dist/server/headers.d.ts +2 -2
  117. package/dist/server/headers.js +4 -3
  118. package/dist/server/isr-cache.d.ts +11 -34
  119. package/dist/server/isr-cache.js +33 -43
  120. package/dist/server/isr-decision.d.ts +2 -2
  121. package/dist/server/middleware-matcher-pattern.d.ts +22 -0
  122. package/dist/server/middleware-matcher-pattern.js +219 -0
  123. package/dist/server/middleware-matcher.d.ts +2 -7
  124. package/dist/server/middleware-matcher.js +13 -60
  125. package/dist/server/middleware-path-to-regexp.d.ts +14 -0
  126. package/dist/server/middleware-path-to-regexp.js +228 -0
  127. package/dist/server/middleware-runtime.js +4 -3
  128. package/dist/server/middleware.d.ts +1 -1
  129. package/dist/server/middleware.js +2 -1
  130. package/dist/server/pages-api-route.d.ts +2 -0
  131. package/dist/server/pages-api-route.js +4 -1
  132. package/dist/server/pages-data-route.d.ts +11 -1
  133. package/dist/server/pages-data-route.js +16 -1
  134. package/dist/server/pages-dev-hydration.js +0 -1
  135. package/dist/server/pages-get-initial-props.d.ts +16 -3
  136. package/dist/server/pages-get-initial-props.js +17 -10
  137. package/dist/server/pages-i18n.js +64 -16
  138. package/dist/server/pages-node-compat.d.ts +2 -0
  139. package/dist/server/pages-node-compat.js +7 -3
  140. package/dist/server/pages-page-data.d.ts +64 -10
  141. package/dist/server/pages-page-data.js +349 -80
  142. package/dist/server/pages-page-handler.d.ts +9 -3
  143. package/dist/server/pages-page-handler.js +131 -36
  144. package/dist/server/pages-page-response.d.ts +5 -3
  145. package/dist/server/pages-page-response.js +24 -27
  146. package/dist/server/pages-readiness.d.ts +3 -3
  147. package/dist/server/pages-request-pipeline.d.ts +8 -0
  148. package/dist/server/pages-request-pipeline.js +30 -12
  149. package/dist/server/pages-revalidate.d.ts +1 -1
  150. package/dist/server/pages-revalidate.js +54 -8
  151. package/dist/server/pages-router-entry.d.ts +1 -0
  152. package/dist/server/pages-router-entry.js +16 -4
  153. package/dist/server/prerender-route-params.js +2 -2
  154. package/dist/server/prod-server.d.ts +3 -5
  155. package/dist/server/prod-server.js +72 -35
  156. package/dist/server/request-pipeline.d.ts +15 -29
  157. package/dist/server/request-pipeline.js +24 -59
  158. package/dist/server/revalidation-host.d.ts +11 -0
  159. package/dist/server/revalidation-host.js +19 -0
  160. package/dist/server/rsc-stream-hints.js +122 -18
  161. package/dist/server/worker-revalidation-context.d.ts +13 -0
  162. package/dist/server/worker-revalidation-context.js +29 -0
  163. package/dist/shims/app.d.ts +1 -1
  164. package/dist/shims/cache-handler.d.ts +1 -1
  165. package/dist/shims/cache-handler.js +10 -7
  166. package/dist/shims/cache-request-state.d.ts +27 -1
  167. package/dist/shims/cache-request-state.js +60 -1
  168. package/dist/shims/cache-runtime.d.ts +18 -1
  169. package/dist/shims/cache-runtime.js +26 -8
  170. package/dist/shims/cache.d.ts +5 -5
  171. package/dist/shims/cache.js +27 -11
  172. package/dist/shims/document.d.ts +42 -83
  173. package/dist/shims/document.js +62 -53
  174. package/dist/shims/dynamic.d.ts +5 -25
  175. package/dist/shims/dynamic.js +29 -8
  176. package/dist/shims/error.d.ts +1 -1
  177. package/dist/shims/error.js +2 -2
  178. package/dist/shims/fetch-cache.js +13 -4
  179. package/dist/shims/font-google-base.d.ts +11 -4
  180. package/dist/shims/font-google-base.js +17 -8
  181. package/dist/shims/font-local.d.ts +10 -3
  182. package/dist/shims/font-local.js +41 -10
  183. package/dist/shims/head.d.ts +13 -2
  184. package/dist/shims/head.js +3 -3
  185. package/dist/shims/headers.d.ts +37 -43
  186. package/dist/shims/headers.js +183 -74
  187. package/dist/shims/image.d.ts +27 -37
  188. package/dist/shims/image.js +21 -14
  189. package/dist/shims/internal/cookie-serialize.d.ts +12 -9
  190. package/dist/shims/internal/cookie-serialize.js +10 -7
  191. package/dist/shims/internal/hybrid-client-route-owner.js +3 -1
  192. package/dist/shims/internal/interpolate-as.d.ts +15 -1
  193. package/dist/shims/internal/interpolate-as.js +27 -2
  194. package/dist/shims/internal/utils.d.ts +3 -3
  195. package/dist/shims/legacy-image.d.ts +3 -37
  196. package/dist/shims/legacy-image.js +6 -16
  197. package/dist/shims/link.d.ts +15 -22
  198. package/dist/shims/link.js +34 -13
  199. package/dist/shims/metadata.d.ts +7 -17
  200. package/dist/shims/metadata.js +74 -24
  201. package/dist/shims/navigation-context-state.d.ts +1 -1
  202. package/dist/shims/navigation.d.ts +7 -3
  203. package/dist/shims/navigation.js +25 -14
  204. package/dist/shims/navigation.react-server.js +1 -1
  205. package/dist/shims/next-shims-augmentations.d.ts +1 -0
  206. package/dist/shims/next-shims-public.d.ts +1 -0
  207. package/dist/shims/public-shim-map.json.js +103 -0
  208. package/dist/shims/readonly-url-search-params.d.ts +3 -3
  209. package/dist/shims/readonly-url-search-params.js +3 -3
  210. package/dist/shims/request-context.d.ts +4 -1
  211. package/dist/shims/request-state-types.d.ts +1 -1
  212. package/dist/shims/router.d.ts +55 -21
  213. package/dist/shims/router.js +180 -44
  214. package/dist/shims/script.d.ts +6 -10
  215. package/dist/shims/script.js +7 -4
  216. package/dist/shims/server.d.ts +50 -26
  217. package/dist/shims/server.js +193 -55
  218. package/dist/shims/unified-request-context.d.ts +22 -3
  219. package/dist/shims/unified-request-context.js +84 -1
  220. package/dist/shims/url-safety.d.ts +1 -1
  221. package/dist/shims/url-safety.js +2 -2
  222. package/dist/typegen.d.ts +8 -2
  223. package/dist/typegen.js +76 -15
  224. package/dist/utils/cache-control-metadata.d.ts +2 -1
  225. package/dist/utils/cache-control-metadata.js +5 -1
  226. package/dist/utils/domain-locale.d.ts +2 -2
  227. package/dist/utils/external-url.d.ts +5 -0
  228. package/dist/utils/external-url.js +7 -0
  229. package/dist/utils/html-limited-bots.js +1 -1
  230. package/dist/utils/protocol-headers.d.ts +7 -1
  231. package/dist/utils/protocol-headers.js +7 -1
  232. package/dist/utils/regex-safety.d.ts +8 -0
  233. package/dist/utils/regex-safety.js +737 -0
  234. 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
- return (layoutTreePosition ?? 0) - 1;
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 (staticValue === void 0) return true;
110
- if (Array.isArray(value)) return Array.isArray(staticValue) && value.length === staticValue.length && value.every((part, index) => typeof staticValue[index] === "string" ? part.toLowerCase() === staticValue[index].toLowerCase() : part === staticValue[index]);
111
- if (typeof staticValue === "string") return value.toLowerCase() === staticValue.toLowerCase();
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
- for (const source of generateStaticParamsSources) {
134
- const sourceParams = remapRouteParams(options.params, source);
135
- const staticParams = await runWithFetchDedupe(() => source.generateStaticParams({ params: pickRouteParams(sourceParams, source.parentParamNames) }));
136
- if (Array.isArray(staticParams) && !areStaticParamsAllowed(sourceParams, staticParams)) {
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.__loadInterceptLayouts) await loadAppInterceptLayouts(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;