vinext 0.0.26 → 0.0.28

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 (227) hide show
  1. package/README.md +89 -85
  2. package/dist/build/static-export.d.ts +1 -1
  3. package/dist/build/static-export.d.ts.map +1 -1
  4. package/dist/build/static-export.js +5 -9
  5. package/dist/build/static-export.js.map +1 -1
  6. package/dist/check.d.ts.map +1 -1
  7. package/dist/check.js +152 -48
  8. package/dist/check.js.map +1 -1
  9. package/dist/cli.js +10 -11
  10. package/dist/cli.js.map +1 -1
  11. package/dist/cloudflare/kv-cache-handler.d.ts +43 -1
  12. package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -1
  13. package/dist/cloudflare/kv-cache-handler.js +135 -44
  14. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  15. package/dist/cloudflare/tpr.d.ts.map +1 -1
  16. package/dist/cloudflare/tpr.js +15 -4
  17. package/dist/cloudflare/tpr.js.map +1 -1
  18. package/dist/config/config-matchers.d.ts +28 -0
  19. package/dist/config/config-matchers.d.ts.map +1 -1
  20. package/dist/config/config-matchers.js +353 -79
  21. package/dist/config/config-matchers.js.map +1 -1
  22. package/dist/config/dotenv.d.ts.map +1 -1
  23. package/dist/config/dotenv.js +1 -6
  24. package/dist/config/dotenv.js.map +1 -1
  25. package/dist/config/next-config.d.ts +7 -0
  26. package/dist/config/next-config.d.ts.map +1 -1
  27. package/dist/config/next-config.js +44 -19
  28. package/dist/config/next-config.js.map +1 -1
  29. package/dist/deploy.d.ts +1 -1
  30. package/dist/deploy.d.ts.map +1 -1
  31. package/dist/deploy.js +81 -48
  32. package/dist/deploy.js.map +1 -1
  33. package/dist/entries/app-rsc-entry.d.ts +3 -1
  34. package/dist/entries/app-rsc-entry.d.ts.map +1 -1
  35. package/dist/entries/app-rsc-entry.js +584 -113
  36. package/dist/entries/app-rsc-entry.js.map +1 -1
  37. package/dist/entries/pages-client-entry.d.ts.map +1 -1
  38. package/dist/entries/pages-client-entry.js +5 -3
  39. package/dist/entries/pages-client-entry.js.map +1 -1
  40. package/dist/entries/pages-server-entry.d.ts.map +1 -1
  41. package/dist/entries/pages-server-entry.js +100 -32
  42. package/dist/entries/pages-server-entry.js.map +1 -1
  43. package/dist/index.d.ts +24 -8
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +327 -154
  46. package/dist/index.js.map +1 -1
  47. package/dist/init.d.ts.map +1 -1
  48. package/dist/init.js +6 -5
  49. package/dist/init.js.map +1 -1
  50. package/dist/plugins/client-reference-dedup.d.ts +19 -0
  51. package/dist/plugins/client-reference-dedup.d.ts.map +1 -0
  52. package/dist/plugins/client-reference-dedup.js +96 -0
  53. package/dist/plugins/client-reference-dedup.js.map +1 -0
  54. package/dist/routing/app-router.d.ts +2 -0
  55. package/dist/routing/app-router.d.ts.map +1 -1
  56. package/dist/routing/app-router.js +70 -107
  57. package/dist/routing/app-router.js.map +1 -1
  58. package/dist/routing/file-matcher.d.ts.map +1 -1
  59. package/dist/routing/file-matcher.js.map +1 -1
  60. package/dist/routing/pages-router.d.ts +3 -1
  61. package/dist/routing/pages-router.d.ts.map +1 -1
  62. package/dist/routing/pages-router.js +33 -18
  63. package/dist/routing/pages-router.js.map +1 -1
  64. package/dist/routing/route-validation.d.ts +8 -0
  65. package/dist/routing/route-validation.d.ts.map +1 -0
  66. package/dist/routing/route-validation.js +124 -0
  67. package/dist/routing/route-validation.js.map +1 -0
  68. package/dist/routing/utils.d.ts.map +1 -1
  69. package/dist/routing/utils.js.map +1 -1
  70. package/dist/server/api-handler.d.ts.map +1 -1
  71. package/dist/server/api-handler.js +31 -9
  72. package/dist/server/api-handler.js.map +1 -1
  73. package/dist/server/app-router-entry.d.ts +3 -2
  74. package/dist/server/app-router-entry.d.ts.map +1 -1
  75. package/dist/server/app-router-entry.js +8 -4
  76. package/dist/server/app-router-entry.js.map +1 -1
  77. package/dist/server/dev-module-runner.d.ts.map +1 -1
  78. package/dist/server/dev-module-runner.js +1 -1
  79. package/dist/server/dev-module-runner.js.map +1 -1
  80. package/dist/server/dev-origin-check.d.ts.map +1 -1
  81. package/dist/server/dev-origin-check.js.map +1 -1
  82. package/dist/server/dev-server.d.ts.map +1 -1
  83. package/dist/server/dev-server.js +39 -21
  84. package/dist/server/dev-server.js.map +1 -1
  85. package/dist/server/image-optimization.d.ts.map +1 -1
  86. package/dist/server/image-optimization.js.map +1 -1
  87. package/dist/server/instrumentation.js +1 -1
  88. package/dist/server/instrumentation.js.map +1 -1
  89. package/dist/server/isr-cache.d.ts +5 -1
  90. package/dist/server/isr-cache.d.ts.map +1 -1
  91. package/dist/server/isr-cache.js +13 -3
  92. package/dist/server/isr-cache.js.map +1 -1
  93. package/dist/server/metadata-routes.d.ts +8 -2
  94. package/dist/server/metadata-routes.d.ts.map +1 -1
  95. package/dist/server/metadata-routes.js +78 -45
  96. package/dist/server/metadata-routes.js.map +1 -1
  97. package/dist/server/middleware-codegen.d.ts +1 -1
  98. package/dist/server/middleware-codegen.d.ts.map +1 -1
  99. package/dist/server/middleware-codegen.js +177 -22
  100. package/dist/server/middleware-codegen.js.map +1 -1
  101. package/dist/server/middleware-request-headers.d.ts +9 -0
  102. package/dist/server/middleware-request-headers.d.ts.map +1 -0
  103. package/dist/server/middleware-request-headers.js +77 -0
  104. package/dist/server/middleware-request-headers.js.map +1 -0
  105. package/dist/server/middleware.d.ts +9 -8
  106. package/dist/server/middleware.d.ts.map +1 -1
  107. package/dist/server/middleware.js +112 -32
  108. package/dist/server/middleware.js.map +1 -1
  109. package/dist/server/normalize-path.js.map +1 -1
  110. package/dist/server/prod-server.d.ts +1 -1
  111. package/dist/server/prod-server.d.ts.map +1 -1
  112. package/dist/server/prod-server.js +127 -82
  113. package/dist/server/prod-server.js.map +1 -1
  114. package/dist/server/request-pipeline.d.ts +2 -1
  115. package/dist/server/request-pipeline.d.ts.map +1 -1
  116. package/dist/server/request-pipeline.js +5 -7
  117. package/dist/server/request-pipeline.js.map +1 -1
  118. package/dist/shims/cache-runtime.d.ts.map +1 -1
  119. package/dist/shims/cache-runtime.js +21 -16
  120. package/dist/shims/cache-runtime.js.map +1 -1
  121. package/dist/shims/cache.d.ts +2 -0
  122. package/dist/shims/cache.d.ts.map +1 -1
  123. package/dist/shims/cache.js +38 -25
  124. package/dist/shims/cache.js.map +1 -1
  125. package/dist/shims/constants.d.ts.map +1 -1
  126. package/dist/shims/constants.js +1 -6
  127. package/dist/shims/constants.js.map +1 -1
  128. package/dist/shims/dynamic.d.ts.map +1 -1
  129. package/dist/shims/dynamic.js +1 -1
  130. package/dist/shims/dynamic.js.map +1 -1
  131. package/dist/shims/error-boundary.d.ts.map +1 -1
  132. package/dist/shims/error-boundary.js +2 -3
  133. package/dist/shims/error-boundary.js.map +1 -1
  134. package/dist/shims/error.d.ts.map +1 -1
  135. package/dist/shims/error.js +1 -3
  136. package/dist/shims/error.js.map +1 -1
  137. package/dist/shims/fetch-cache.d.ts.map +1 -1
  138. package/dist/shims/fetch-cache.js +57 -30
  139. package/dist/shims/fetch-cache.js.map +1 -1
  140. package/dist/shims/font-google-base.d.ts.map +1 -1
  141. package/dist/shims/font-google-base.js +16 -4
  142. package/dist/shims/font-google-base.js.map +1 -1
  143. package/dist/shims/font-google.d.ts +1 -1
  144. package/dist/shims/font-google.d.ts.map +1 -1
  145. package/dist/shims/font-google.generated.d.ts.map +1 -1
  146. package/dist/shims/font-google.generated.js +412 -206
  147. package/dist/shims/font-google.generated.js.map +1 -1
  148. package/dist/shims/font-google.js +1 -1
  149. package/dist/shims/font-google.js.map +1 -1
  150. package/dist/shims/font-local.d.ts.map +1 -1
  151. package/dist/shims/font-local.js +13 -3
  152. package/dist/shims/font-local.js.map +1 -1
  153. package/dist/shims/form.d.ts.map +1 -1
  154. package/dist/shims/form.js +105 -10
  155. package/dist/shims/form.js.map +1 -1
  156. package/dist/shims/head.d.ts.map +1 -1
  157. package/dist/shims/head.js +10 -8
  158. package/dist/shims/head.js.map +1 -1
  159. package/dist/shims/headers.d.ts +34 -8
  160. package/dist/shims/headers.d.ts.map +1 -1
  161. package/dist/shims/headers.js +268 -53
  162. package/dist/shims/headers.js.map +1 -1
  163. package/dist/shims/image.d.ts.map +1 -1
  164. package/dist/shims/image.js +35 -8
  165. package/dist/shims/image.js.map +1 -1
  166. package/dist/shims/internal/parse-cookie-header.d.ts +12 -0
  167. package/dist/shims/internal/parse-cookie-header.d.ts.map +1 -0
  168. package/dist/shims/internal/parse-cookie-header.js +32 -0
  169. package/dist/shims/internal/parse-cookie-header.js.map +1 -0
  170. package/dist/shims/legacy-image.d.ts.map +1 -1
  171. package/dist/shims/legacy-image.js +1 -1
  172. package/dist/shims/legacy-image.js.map +1 -1
  173. package/dist/shims/link.d.ts +2 -1
  174. package/dist/shims/link.d.ts.map +1 -1
  175. package/dist/shims/link.js +37 -17
  176. package/dist/shims/link.js.map +1 -1
  177. package/dist/shims/metadata.d.ts +12 -2
  178. package/dist/shims/metadata.d.ts.map +1 -1
  179. package/dist/shims/metadata.js +10 -8
  180. package/dist/shims/metadata.js.map +1 -1
  181. package/dist/shims/navigation-state.d.ts.map +1 -1
  182. package/dist/shims/navigation-state.js +3 -2
  183. package/dist/shims/navigation-state.js.map +1 -1
  184. package/dist/shims/navigation.d.ts +3 -7
  185. package/dist/shims/navigation.d.ts.map +1 -1
  186. package/dist/shims/navigation.js +46 -29
  187. package/dist/shims/navigation.js.map +1 -1
  188. package/dist/shims/readonly-url-search-params.d.ts +11 -0
  189. package/dist/shims/readonly-url-search-params.d.ts.map +1 -0
  190. package/dist/shims/readonly-url-search-params.js +24 -0
  191. package/dist/shims/readonly-url-search-params.js.map +1 -0
  192. package/dist/shims/request-context.d.ts +50 -0
  193. package/dist/shims/request-context.d.ts.map +1 -0
  194. package/dist/shims/request-context.js +59 -0
  195. package/dist/shims/request-context.js.map +1 -0
  196. package/dist/shims/router-state.d.ts.map +1 -1
  197. package/dist/shims/router-state.js +2 -1
  198. package/dist/shims/router-state.js.map +1 -1
  199. package/dist/shims/router.d.ts +4 -3
  200. package/dist/shims/router.d.ts.map +1 -1
  201. package/dist/shims/router.js +59 -53
  202. package/dist/shims/router.js.map +1 -1
  203. package/dist/shims/script.d.ts.map +1 -1
  204. package/dist/shims/script.js.map +1 -1
  205. package/dist/shims/server.d.ts +14 -1
  206. package/dist/shims/server.d.ts.map +1 -1
  207. package/dist/shims/server.js +107 -47
  208. package/dist/shims/server.js.map +1 -1
  209. package/dist/shims/url-utils.d.ts.map +1 -1
  210. package/dist/shims/url-utils.js +1 -3
  211. package/dist/shims/url-utils.js.map +1 -1
  212. package/dist/utils/base-path.d.ts +17 -0
  213. package/dist/utils/base-path.d.ts.map +1 -0
  214. package/dist/utils/base-path.js +25 -0
  215. package/dist/utils/base-path.js.map +1 -0
  216. package/dist/utils/manifest-paths.d.ts +4 -0
  217. package/dist/utils/manifest-paths.d.ts.map +1 -0
  218. package/dist/utils/manifest-paths.js +20 -0
  219. package/dist/utils/manifest-paths.js.map +1 -0
  220. package/dist/utils/project.d.ts.map +1 -1
  221. package/dist/utils/project.js +2 -4
  222. package/dist/utils/project.js.map +1 -1
  223. package/dist/utils/query.d.ts +9 -0
  224. package/dist/utils/query.d.ts.map +1 -1
  225. package/dist/utils/query.js +59 -7
  226. package/dist/utils/query.js.map +1 -1
  227. package/package.json +47 -33
@@ -128,7 +128,7 @@ function __normalizePath(pathname) {
128
128
  *
129
129
  * This includes:
130
130
  * - `matchMiddlewarePattern(pathname, pattern)` — matches a single pattern
131
- * - `matchesMiddleware(pathname, matcher)` — matches the full matcher config
131
+ * - `matchesMiddleware(pathname, matcher, request, i18nConfig)` — matches the full matcher config
132
132
  *
133
133
  * The generated code depends on `__safeRegExp` being defined in the same scope
134
134
  * (use `generateSafeRegExpCode` to emit it).
@@ -138,23 +138,15 @@ function __normalizePath(pathname) {
138
138
  export function generateMiddlewareMatcherCode(style = "modern") {
139
139
  const v = style === "modern" ? "const" : "var";
140
140
  const l = style === "modern" ? "let" : "var";
141
- const fn = style === "modern"
142
- ? (params, body) => `(${params}) => { ${body} }`
143
- : (params, body) => `function(${params}) { ${body} }`;
144
141
  // The pattern matching logic must be identical to matchPattern() in
145
142
  // packages/vinext/src/server/middleware.ts. Any changes here must be
146
143
  // mirrored there and vice versa.
147
144
  return `
148
- function matchMiddlewarePattern(pathname, pattern) {
149
- // Regex patterns: if the pattern contains "(" or "\\" it's a regex —
150
- // pass it through to RegExp directly WITHOUT dot-escaping.
151
- // This guard prevents regex pattern corruption from dot-escaping.
145
+ ${v} __mwPatternCache = new Map();
146
+ function __compileMwPattern(pattern) {
152
147
  if (pattern.includes("(") || pattern.includes("\\\\")) {
153
- ${v} re = __safeRegExp("^" + pattern + "$");
154
- if (re) return re.test(pathname);
148
+ return __safeRegExp("^" + pattern + "$");
155
149
  }
156
- // Single-pass tokenizer (avoids chained .replace() flagged by CodeQL as
157
- // incomplete sanitization — later passes could re-process earlier outputs).
158
150
  ${l} regexStr = "";
159
151
  ${v} tokenRe = /\\/:([\\w-]+)\\*|\\/:([\\w-]+)\\+|:([\\w-]+)|[.]|[^/:.]+|./g;
160
152
  ${l} tok;
@@ -165,23 +157,186 @@ function matchMiddlewarePattern(pathname, pattern) {
165
157
  else if (tok[0] === ".") { regexStr += "\\\\."; }
166
158
  else { regexStr += tok[0]; }
167
159
  }
168
- ${v} re2 = __safeRegExp("^" + regexStr + "$");
169
- return re2 ? re2.test(pathname) : pathname === pattern;
160
+ return __safeRegExp("^" + regexStr + "$");
161
+ }
162
+ function matchMiddlewarePattern(pathname, pattern) {
163
+ ${l} cached = __mwPatternCache.get(pattern);
164
+ if (cached === undefined) {
165
+ cached = __compileMwPattern(pattern);
166
+ __mwPatternCache.set(pattern, cached);
167
+ }
168
+ return cached ? cached.test(pathname) : pathname === pattern;
169
+ }
170
+
171
+ ${v} __middlewareConditionRegexCache = new Map();
172
+ // Requestless matcher checks reuse this singleton. Treat it as immutable.
173
+ ${v} __emptyMiddlewareRequestContext = {
174
+ headers: new Headers(),
175
+ cookies: {},
176
+ query: new URLSearchParams(),
177
+ host: "",
178
+ };
179
+
180
+ function __normalizeMiddlewareHost(hostHeader, fallbackHostname) {
181
+ ${v} host = hostHeader ?? fallbackHostname;
182
+ return host.split(":", 1)[0].toLowerCase();
183
+ }
184
+
185
+ function __parseMiddlewareCookies(cookieHeader) {
186
+ if (!cookieHeader) return {};
187
+ ${v} cookies = {};
188
+ for (${v} part of cookieHeader.split(";")) {
189
+ ${v} eq = part.indexOf("=");
190
+ if (eq === -1) continue;
191
+ ${v} key = part.slice(0, eq).trim();
192
+ ${v} value = part.slice(eq + 1).trim();
193
+ if (key) cookies[key] = value;
194
+ }
195
+ return cookies;
196
+ }
197
+
198
+ function __middlewareRequestContextFromRequest(request) {
199
+ if (!request) return __emptyMiddlewareRequestContext;
200
+ ${v} url = new URL(request.url);
201
+ return {
202
+ headers: request.headers,
203
+ cookies: __parseMiddlewareCookies(request.headers.get("cookie")),
204
+ query: url.searchParams,
205
+ host: __normalizeMiddlewareHost(request.headers.get("host"), url.hostname),
206
+ };
207
+ }
208
+
209
+ function __stripMiddlewareLocalePrefix(pathname, i18nConfig) {
210
+ if (pathname === "/") return null;
211
+ ${v} segments = pathname.split("/");
212
+ ${v} firstSegment = segments[1];
213
+ if (!firstSegment || !i18nConfig || !i18nConfig.locales.includes(firstSegment)) {
214
+ return null;
215
+ }
216
+ ${v} stripped = "/" + segments.slice(2).join("/");
217
+ return stripped === "/" ? "/" : stripped.replace(/\\/+$/, "") || "/";
218
+ }
219
+
220
+ function __matchMiddlewareMatcherPattern(pathname, pattern, i18nConfig) {
221
+ if (!i18nConfig) return matchMiddlewarePattern(pathname, pattern);
222
+ ${v} localeStrippedPathname = __stripMiddlewareLocalePrefix(pathname, i18nConfig);
223
+ return matchMiddlewarePattern(localeStrippedPathname ?? pathname, pattern);
224
+ }
225
+
226
+ function __middlewareConditionRegex(value) {
227
+ if (__middlewareConditionRegexCache.has(value)) {
228
+ return __middlewareConditionRegexCache.get(value);
229
+ }
230
+ ${v} re = __safeRegExp(value);
231
+ __middlewareConditionRegexCache.set(value, re);
232
+ return re;
233
+ }
234
+
235
+ function __checkMiddlewareCondition(condition, ctx) {
236
+ switch (condition.type) {
237
+ case "header": {
238
+ ${v} headerValue = ctx.headers.get(condition.key);
239
+ if (headerValue === null) return false;
240
+ if (condition.value !== undefined) {
241
+ ${v} re = __middlewareConditionRegex(condition.value);
242
+ if (re) return re.test(headerValue);
243
+ return headerValue === condition.value;
244
+ }
245
+ return true;
246
+ }
247
+ case "cookie": {
248
+ ${v} cookieValue = ctx.cookies[condition.key];
249
+ if (cookieValue === undefined) return false;
250
+ if (condition.value !== undefined) {
251
+ ${v} re = __middlewareConditionRegex(condition.value);
252
+ if (re) return re.test(cookieValue);
253
+ return cookieValue === condition.value;
254
+ }
255
+ return true;
256
+ }
257
+ case "query": {
258
+ ${v} queryValue = ctx.query.get(condition.key);
259
+ if (queryValue === null) return false;
260
+ if (condition.value !== undefined) {
261
+ ${v} re = __middlewareConditionRegex(condition.value);
262
+ if (re) return re.test(queryValue);
263
+ return queryValue === condition.value;
264
+ }
265
+ return true;
266
+ }
267
+ case "host": {
268
+ if (condition.value !== undefined) {
269
+ ${v} re = __middlewareConditionRegex(condition.value);
270
+ if (re) return re.test(ctx.host);
271
+ return ctx.host === condition.value;
272
+ }
273
+ return ctx.host === condition.key;
274
+ }
275
+ default:
276
+ return false;
277
+ }
278
+ }
279
+
280
+ function __checkMiddlewareHasConditions(has, missing, ctx) {
281
+ if (has) {
282
+ for (${v} condition of has) {
283
+ if (!__checkMiddlewareCondition(condition, ctx)) return false;
284
+ }
285
+ }
286
+ if (missing) {
287
+ for (${v} condition of missing) {
288
+ if (__checkMiddlewareCondition(condition, ctx)) return false;
289
+ }
290
+ }
291
+ return true;
292
+ }
293
+
294
+ // Keep this in sync with isValidMiddlewareMatcherObject in middleware.ts.
295
+ function __isValidMiddlewareMatcherObject(matcher) {
296
+ if (!matcher || typeof matcher !== "object" || Array.isArray(matcher)) return false;
297
+ if (typeof matcher.source !== "string") return false;
298
+ for (${v} key of Object.keys(matcher)) {
299
+ if (key !== "source" && key !== "locale" && key !== "has" && key !== "missing") {
300
+ return false;
301
+ }
302
+ }
303
+ if ("locale" in matcher && matcher.locale !== undefined && matcher.locale !== false) return false;
304
+ if ("has" in matcher && matcher.has !== undefined && !Array.isArray(matcher.has)) return false;
305
+ if ("missing" in matcher && matcher.missing !== undefined && !Array.isArray(matcher.missing)) {
306
+ return false;
307
+ }
308
+ return true;
170
309
  }
171
310
 
172
- function matchesMiddleware(pathname, matcher) {
311
+ function __matchMiddlewareObject(pathname, matcher, i18nConfig) {
312
+ return matcher.locale === false
313
+ ? matchMiddlewarePattern(pathname, matcher.source)
314
+ : __matchMiddlewareMatcherPattern(pathname, matcher.source, i18nConfig);
315
+ }
316
+
317
+ function matchesMiddleware(pathname, matcher, request, i18nConfig) {
173
318
  if (!matcher) {
174
319
  return true;
175
320
  }
176
- ${v} patterns = [];
177
- if (typeof matcher === "string") { patterns.push(matcher); }
178
- else if (Array.isArray(matcher)) {
179
- for (${v} m of matcher) {
180
- if (typeof m === "string") patterns.push(m);
181
- else if (m && typeof m === "object" && "source" in m) patterns.push(m.source);
321
+ if (typeof matcher === "string") {
322
+ return __matchMiddlewareMatcherPattern(pathname, matcher, i18nConfig);
323
+ }
324
+ if (!Array.isArray(matcher)) {
325
+ return false;
326
+ }
327
+ ${v} requestContext = __middlewareRequestContextFromRequest(request);
328
+ for (${v} m of matcher) {
329
+ if (typeof m === "string") {
330
+ if (__matchMiddlewareMatcherPattern(pathname, m, i18nConfig)) return true;
331
+ continue;
332
+ }
333
+ if (__isValidMiddlewareMatcherObject(m)) {
334
+ if (!__matchMiddlewareObject(pathname, m, i18nConfig)) continue;
335
+ if (!__checkMiddlewareHasConditions(m.has, m.missing, requestContext)) continue;
336
+ return true;
182
337
  }
183
338
  }
184
- return patterns.some(${fn("p", "return matchMiddlewarePattern(pathname, p);")});
339
+ return false;
185
340
  }`;
186
341
  }
187
342
  //# sourceMappingURL=middleware-codegen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-codegen.js","sourceRoot":"","sources":["../../src/server/middleware-codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA0B,QAAQ;IACvE,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,OAAO;;IAEL,CAAC;IACD,CAAC;IACD,CAAC;;MAEC,CAAC;;;;;;;;;;;;;;;;;;;QAmBC,CAAC;;QAED,CAAC;;;;;;;;;;;;;;QAcD,CAAC;;;;;;;;QAQD,CAAC;;;;;;;;;;;;;;;;;;EAkBP,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA0B,QAAQ;IAC1E,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,OAAO;;;;;;;;;;;;;;IAcL,CAAC;IACD,CAAC;SACI,CAAC;MACJ,CAAC;;;;;;EAML,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAA0B,QAAQ;IAC9E,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,EAAE,GAAG,KAAK,KAAK,QAAQ;QAC3B,CAAC,CAAC,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,UAAU,IAAI,IAAI;QAChE,CAAC,CAAC,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,YAAY,MAAM,OAAO,IAAI,IAAI,CAAC;IAExE,oEAAoE;IACpE,qEAAqE;IACrE,iCAAiC;IACjC,OAAO;;;;;;MAMH,CAAC;;;;;IAKH,CAAC;IACD,CAAC;IACD,CAAC;;;;;;;;IAQD,CAAC;;;;;;;;IAQD,CAAC;;;WAGM,CAAC;;;;;yBAKa,EAAE,CAAC,GAAG,EAAE,6CAA6C,CAAC;EAC7E,CAAC;AACH,CAAC","sourcesContent":["/**\n * Shared middleware matching code generator.\n *\n * Both the App Router RSC entry (entries/app-rsc-entry.ts) and the Pages Router\n * production entry (index.ts) need middleware matching logic inlined as\n * generated JavaScript strings. This module provides a single source of\n * truth to prevent the implementations from diverging.\n *\n * The regex detection guard (checking for \"(\" or \"\\\\\") is critical.\n * Without it, dot-escaping corrupts regex patterns like\n * /((?!api|_next).*), causing middleware to silently skip paths.\n */\n\n/**\n * Returns the generated JavaScript source for `__isSafeRegex` and `__safeRegExp`.\n *\n * @param style - \"modern\" emits const/let (for RSC entry), \"es5\" emits var (for prod entry)\n */\nexport function generateSafeRegExpCode(style: \"modern\" | \"es5\" = \"modern\"): string {\n const v = style === \"modern\" ? \"const\" : \"var\";\n const l = style === \"modern\" ? \"let\" : \"var\";\n return `\nfunction __isSafeRegex(pattern) {\n ${v} quantifierAtDepth = [];\n ${l} depth = 0;\n ${l} i = 0;\n while (i < pattern.length) {\n ${v} ch = pattern[i];\n if (ch === \"\\\\\\\\\") { i += 2; continue; }\n if (ch === \"[\") {\n i++;\n while (i < pattern.length && pattern[i] !== \"]\") {\n if (pattern[i] === \"\\\\\\\\\") i++;\n i++;\n }\n i++;\n continue;\n }\n if (ch === \"(\") {\n depth++;\n if (quantifierAtDepth.length <= depth) quantifierAtDepth.push(false);\n else quantifierAtDepth[depth] = false;\n i++;\n continue;\n }\n if (ch === \")\") {\n ${v} hadQ = depth > 0 && quantifierAtDepth[depth];\n if (depth > 0) depth--;\n ${v} next = pattern[i + 1];\n if (next === \"+\" || next === \"*\" || next === \"{\") {\n if (hadQ) return false;\n if (depth >= 0 && depth < quantifierAtDepth.length) quantifierAtDepth[depth] = true;\n }\n i++;\n continue;\n }\n if (ch === \"+\" || ch === \"*\") {\n if (depth > 0) quantifierAtDepth[depth] = true;\n i++;\n continue;\n }\n if (ch === \"?\") {\n ${v} prev = i > 0 ? pattern[i - 1] : \"\";\n if (prev !== \"+\" && prev !== \"*\" && prev !== \"?\" && prev !== \"}\") {\n if (depth > 0) quantifierAtDepth[depth] = true;\n }\n i++;\n continue;\n }\n if (ch === \"{\") {\n ${l} j = i + 1;\n while (j < pattern.length && /[\\\\d,]/.test(pattern[j])) j++;\n if (j < pattern.length && pattern[j] === \"}\" && j > i + 1) {\n if (depth > 0) quantifierAtDepth[depth] = true;\n i = j + 1;\n continue;\n }\n }\n i++;\n }\n return true;\n}\nfunction __safeRegExp(pattern, flags) {\n if (!__isSafeRegex(pattern)) {\n console.warn(\"[vinext] Ignoring potentially unsafe regex pattern (ReDoS risk): \" + pattern);\n return null;\n }\n try { return new RegExp(pattern, flags); } catch { return null; }\n}`;\n}\n\n/**\n * Returns the generated JavaScript source for `__normalizePath`.\n *\n * This must be kept in sync with `normalizePath()` in `normalize-path.ts`.\n * The inline version is used by codegen entries that can't import modules.\n *\n * @param style - \"modern\" emits const/let, \"es5\" emits var\n */\nexport function generateNormalizePathCode(style: \"modern\" | \"es5\" = \"modern\"): string {\n const v = style === \"modern\" ? \"const\" : \"var\";\n const l = style === \"modern\" ? \"let\" : \"var\";\n return `\nfunction __normalizePath(pathname) {\n if (\n pathname === \"/\" ||\n (pathname.length > 1 &&\n pathname[0] === \"/\" &&\n !pathname.includes(\"//\") &&\n !pathname.includes(\"/./\") &&\n !pathname.includes(\"/../\") &&\n !pathname.endsWith(\"/.\") &&\n !pathname.endsWith(\"/..\"))\n ) {\n return pathname;\n }\n ${v} segments = pathname.split(\"/\");\n ${v} resolved = [];\n for (${l} i = 0; i < segments.length; i++) {\n ${v} seg = segments[i];\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") { resolved.pop(); }\n else { resolved.push(seg); }\n }\n return \"/\" + resolved.join(\"/\");\n}`;\n}\n\n/**\n * Returns the generated JavaScript source for middleware pattern matching.\n *\n * This includes:\n * - `matchMiddlewarePattern(pathname, pattern)` — matches a single pattern\n * - `matchesMiddleware(pathname, matcher)` — matches the full matcher config\n *\n * The generated code depends on `__safeRegExp` being defined in the same scope\n * (use `generateSafeRegExpCode` to emit it).\n *\n * @param style - \"modern\" emits const/let/arrow functions, \"es5\" emits var/function\n */\nexport function generateMiddlewareMatcherCode(style: \"modern\" | \"es5\" = \"modern\"): string {\n const v = style === \"modern\" ? \"const\" : \"var\";\n const l = style === \"modern\" ? \"let\" : \"var\";\n const fn = style === \"modern\"\n ? (params: string, body: string) => `(${params}) => { ${body} }`\n : (params: string, body: string) => `function(${params}) { ${body} }`;\n\n // The pattern matching logic must be identical to matchPattern() in\n // packages/vinext/src/server/middleware.ts. Any changes here must be\n // mirrored there and vice versa.\n return `\nfunction matchMiddlewarePattern(pathname, pattern) {\n // Regex patterns: if the pattern contains \"(\" or \"\\\\\" it's a regex —\n // pass it through to RegExp directly WITHOUT dot-escaping.\n // This guard prevents regex pattern corruption from dot-escaping.\n if (pattern.includes(\"(\") || pattern.includes(\"\\\\\\\\\")) {\n ${v} re = __safeRegExp(\"^\" + pattern + \"$\");\n if (re) return re.test(pathname);\n }\n // Single-pass tokenizer (avoids chained .replace() flagged by CodeQL as\n // incomplete sanitization — later passes could re-process earlier outputs).\n ${l} regexStr = \"\";\n ${v} tokenRe = /\\\\/:([\\\\w-]+)\\\\*|\\\\/:([\\\\w-]+)\\\\+|:([\\\\w-]+)|[.]|[^/:.]+|./g;\n ${l} tok;\n while ((tok = tokenRe.exec(pattern)) !== null) {\n if (tok[1] !== undefined) { regexStr += \"(?:/.*)?\"; }\n else if (tok[2] !== undefined) { regexStr += \"(?:/.+)\"; }\n else if (tok[3] !== undefined) { regexStr += \"([^/]+)\"; }\n else if (tok[0] === \".\") { regexStr += \"\\\\\\\\.\"; }\n else { regexStr += tok[0]; }\n }\n ${v} re2 = __safeRegExp(\"^\" + regexStr + \"$\");\n return re2 ? re2.test(pathname) : pathname === pattern;\n}\n\nfunction matchesMiddleware(pathname, matcher) {\n if (!matcher) {\n return true;\n }\n ${v} patterns = [];\n if (typeof matcher === \"string\") { patterns.push(matcher); }\n else if (Array.isArray(matcher)) {\n for (${v} m of matcher) {\n if (typeof m === \"string\") patterns.push(m);\n else if (m && typeof m === \"object\" && \"source\" in m) patterns.push(m.source);\n }\n }\n return patterns.some(${fn(\"p\", \"return matchMiddlewarePattern(pathname, p);\")});\n}`;\n}\n\n\n"]}
1
+ {"version":3,"file":"middleware-codegen.js","sourceRoot":"","sources":["../../src/server/middleware-codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA0B,QAAQ;IACvE,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,OAAO;;IAEL,CAAC;IACD,CAAC;IACD,CAAC;;MAEC,CAAC;;;;;;;;;;;;;;;;;;;QAmBC,CAAC;;QAED,CAAC;;;;;;;;;;;;;;QAcD,CAAC;;;;;;;;QAQD,CAAC;;;;;;;;;;;;;;;;;;EAkBP,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA0B,QAAQ;IAC1E,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,OAAO;;;;;;;;;;;;;;IAcL,CAAC;IACD,CAAC;SACI,CAAC;MACJ,CAAC;;;;;;EAML,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAA0B,QAAQ;IAC9E,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAE7C,oEAAoE;IACpE,qEAAqE;IACrE,iCAAiC;IACjC,OAAO;EACP,CAAC;;;;;IAKC,CAAC;IACD,CAAC;IACD,CAAC;;;;;;;;;;;IAWD,CAAC;;;;;;;;EAQH,CAAC;;EAED,CAAC;;;;;;;;IAQC,CAAC;;;;;;IAMD,CAAC;SACI,CAAC;MACJ,CAAC;;MAED,CAAC;MACD,CAAC;;;;;;;;IAQH,CAAC;;;;;;;;;;;IAWD,CAAC;IACD,CAAC;;;;IAID,CAAC;;;;;;IAMD,CAAC;;;;;;;;IAQD,CAAC;;;;;;;;QAQG,CAAC;;;UAGC,CAAC;;;;;;;QAOH,CAAC;;;UAGC,CAAC;;;;;;;QAOH,CAAC;;;UAGC,CAAC;;;;;;;;UAQD,CAAC;;;;;;;;;;;;;WAaA,CAAC;;;;;WAKD,CAAC;;;;;;;;;;;SAWH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BN,CAAC;SACI,CAAC;;;;;;;;;;;;EAYR,CAAC;AACH,CAAC","sourcesContent":["/**\n * Shared middleware matching code generator.\n *\n * Both the App Router RSC entry (entries/app-rsc-entry.ts) and the Pages Router\n * production entry (index.ts) need middleware matching logic inlined as\n * generated JavaScript strings. This module provides a single source of\n * truth to prevent the implementations from diverging.\n *\n * The regex detection guard (checking for \"(\" or \"\\\\\") is critical.\n * Without it, dot-escaping corrupts regex patterns like\n * /((?!api|_next).*), causing middleware to silently skip paths.\n */\n\n/**\n * Returns the generated JavaScript source for `__isSafeRegex` and `__safeRegExp`.\n *\n * @param style - \"modern\" emits const/let (for RSC entry), \"es5\" emits var (for prod entry)\n */\nexport function generateSafeRegExpCode(style: \"modern\" | \"es5\" = \"modern\"): string {\n const v = style === \"modern\" ? \"const\" : \"var\";\n const l = style === \"modern\" ? \"let\" : \"var\";\n return `\nfunction __isSafeRegex(pattern) {\n ${v} quantifierAtDepth = [];\n ${l} depth = 0;\n ${l} i = 0;\n while (i < pattern.length) {\n ${v} ch = pattern[i];\n if (ch === \"\\\\\\\\\") { i += 2; continue; }\n if (ch === \"[\") {\n i++;\n while (i < pattern.length && pattern[i] !== \"]\") {\n if (pattern[i] === \"\\\\\\\\\") i++;\n i++;\n }\n i++;\n continue;\n }\n if (ch === \"(\") {\n depth++;\n if (quantifierAtDepth.length <= depth) quantifierAtDepth.push(false);\n else quantifierAtDepth[depth] = false;\n i++;\n continue;\n }\n if (ch === \")\") {\n ${v} hadQ = depth > 0 && quantifierAtDepth[depth];\n if (depth > 0) depth--;\n ${v} next = pattern[i + 1];\n if (next === \"+\" || next === \"*\" || next === \"{\") {\n if (hadQ) return false;\n if (depth >= 0 && depth < quantifierAtDepth.length) quantifierAtDepth[depth] = true;\n }\n i++;\n continue;\n }\n if (ch === \"+\" || ch === \"*\") {\n if (depth > 0) quantifierAtDepth[depth] = true;\n i++;\n continue;\n }\n if (ch === \"?\") {\n ${v} prev = i > 0 ? pattern[i - 1] : \"\";\n if (prev !== \"+\" && prev !== \"*\" && prev !== \"?\" && prev !== \"}\") {\n if (depth > 0) quantifierAtDepth[depth] = true;\n }\n i++;\n continue;\n }\n if (ch === \"{\") {\n ${l} j = i + 1;\n while (j < pattern.length && /[\\\\d,]/.test(pattern[j])) j++;\n if (j < pattern.length && pattern[j] === \"}\" && j > i + 1) {\n if (depth > 0) quantifierAtDepth[depth] = true;\n i = j + 1;\n continue;\n }\n }\n i++;\n }\n return true;\n}\nfunction __safeRegExp(pattern, flags) {\n if (!__isSafeRegex(pattern)) {\n console.warn(\"[vinext] Ignoring potentially unsafe regex pattern (ReDoS risk): \" + pattern);\n return null;\n }\n try { return new RegExp(pattern, flags); } catch { return null; }\n}`;\n}\n\n/**\n * Returns the generated JavaScript source for `__normalizePath`.\n *\n * This must be kept in sync with `normalizePath()` in `normalize-path.ts`.\n * The inline version is used by codegen entries that can't import modules.\n *\n * @param style - \"modern\" emits const/let, \"es5\" emits var\n */\nexport function generateNormalizePathCode(style: \"modern\" | \"es5\" = \"modern\"): string {\n const v = style === \"modern\" ? \"const\" : \"var\";\n const l = style === \"modern\" ? \"let\" : \"var\";\n return `\nfunction __normalizePath(pathname) {\n if (\n pathname === \"/\" ||\n (pathname.length > 1 &&\n pathname[0] === \"/\" &&\n !pathname.includes(\"//\") &&\n !pathname.includes(\"/./\") &&\n !pathname.includes(\"/../\") &&\n !pathname.endsWith(\"/.\") &&\n !pathname.endsWith(\"/..\"))\n ) {\n return pathname;\n }\n ${v} segments = pathname.split(\"/\");\n ${v} resolved = [];\n for (${l} i = 0; i < segments.length; i++) {\n ${v} seg = segments[i];\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") { resolved.pop(); }\n else { resolved.push(seg); }\n }\n return \"/\" + resolved.join(\"/\");\n}`;\n}\n\n/**\n * Returns the generated JavaScript source for middleware pattern matching.\n *\n * This includes:\n * - `matchMiddlewarePattern(pathname, pattern)` — matches a single pattern\n * - `matchesMiddleware(pathname, matcher, request, i18nConfig)` — matches the full matcher config\n *\n * The generated code depends on `__safeRegExp` being defined in the same scope\n * (use `generateSafeRegExpCode` to emit it).\n *\n * @param style - \"modern\" emits const/let/arrow functions, \"es5\" emits var/function\n */\nexport function generateMiddlewareMatcherCode(style: \"modern\" | \"es5\" = \"modern\"): string {\n const v = style === \"modern\" ? \"const\" : \"var\";\n const l = style === \"modern\" ? \"let\" : \"var\";\n\n // The pattern matching logic must be identical to matchPattern() in\n // packages/vinext/src/server/middleware.ts. Any changes here must be\n // mirrored there and vice versa.\n return `\n${v} __mwPatternCache = new Map();\nfunction __compileMwPattern(pattern) {\n if (pattern.includes(\"(\") || pattern.includes(\"\\\\\\\\\")) {\n return __safeRegExp(\"^\" + pattern + \"$\");\n }\n ${l} regexStr = \"\";\n ${v} tokenRe = /\\\\/:([\\\\w-]+)\\\\*|\\\\/:([\\\\w-]+)\\\\+|:([\\\\w-]+)|[.]|[^/:.]+|./g;\n ${l} tok;\n while ((tok = tokenRe.exec(pattern)) !== null) {\n if (tok[1] !== undefined) { regexStr += \"(?:/.*)?\"; }\n else if (tok[2] !== undefined) { regexStr += \"(?:/.+)\"; }\n else if (tok[3] !== undefined) { regexStr += \"([^/]+)\"; }\n else if (tok[0] === \".\") { regexStr += \"\\\\\\\\.\"; }\n else { regexStr += tok[0]; }\n }\n return __safeRegExp(\"^\" + regexStr + \"$\");\n}\nfunction matchMiddlewarePattern(pathname, pattern) {\n ${l} cached = __mwPatternCache.get(pattern);\n if (cached === undefined) {\n cached = __compileMwPattern(pattern);\n __mwPatternCache.set(pattern, cached);\n }\n return cached ? cached.test(pathname) : pathname === pattern;\n}\n\n${v} __middlewareConditionRegexCache = new Map();\n// Requestless matcher checks reuse this singleton. Treat it as immutable.\n${v} __emptyMiddlewareRequestContext = {\n headers: new Headers(),\n cookies: {},\n query: new URLSearchParams(),\n host: \"\",\n};\n\nfunction __normalizeMiddlewareHost(hostHeader, fallbackHostname) {\n ${v} host = hostHeader ?? fallbackHostname;\n return host.split(\":\", 1)[0].toLowerCase();\n}\n\nfunction __parseMiddlewareCookies(cookieHeader) {\n if (!cookieHeader) return {};\n ${v} cookies = {};\n for (${v} part of cookieHeader.split(\";\")) {\n ${v} eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n ${v} key = part.slice(0, eq).trim();\n ${v} value = part.slice(eq + 1).trim();\n if (key) cookies[key] = value;\n }\n return cookies;\n}\n\nfunction __middlewareRequestContextFromRequest(request) {\n if (!request) return __emptyMiddlewareRequestContext;\n ${v} url = new URL(request.url);\n return {\n headers: request.headers,\n cookies: __parseMiddlewareCookies(request.headers.get(\"cookie\")),\n query: url.searchParams,\n host: __normalizeMiddlewareHost(request.headers.get(\"host\"), url.hostname),\n };\n}\n\nfunction __stripMiddlewareLocalePrefix(pathname, i18nConfig) {\n if (pathname === \"/\") return null;\n ${v} segments = pathname.split(\"/\");\n ${v} firstSegment = segments[1];\n if (!firstSegment || !i18nConfig || !i18nConfig.locales.includes(firstSegment)) {\n return null;\n }\n ${v} stripped = \"/\" + segments.slice(2).join(\"/\");\n return stripped === \"/\" ? \"/\" : stripped.replace(/\\\\/+$/, \"\") || \"/\";\n}\n\nfunction __matchMiddlewareMatcherPattern(pathname, pattern, i18nConfig) {\n if (!i18nConfig) return matchMiddlewarePattern(pathname, pattern);\n ${v} localeStrippedPathname = __stripMiddlewareLocalePrefix(pathname, i18nConfig);\n return matchMiddlewarePattern(localeStrippedPathname ?? pathname, pattern);\n}\n\nfunction __middlewareConditionRegex(value) {\n if (__middlewareConditionRegexCache.has(value)) {\n return __middlewareConditionRegexCache.get(value);\n }\n ${v} re = __safeRegExp(value);\n __middlewareConditionRegexCache.set(value, re);\n return re;\n}\n\nfunction __checkMiddlewareCondition(condition, ctx) {\n switch (condition.type) {\n case \"header\": {\n ${v} headerValue = ctx.headers.get(condition.key);\n if (headerValue === null) return false;\n if (condition.value !== undefined) {\n ${v} re = __middlewareConditionRegex(condition.value);\n if (re) return re.test(headerValue);\n return headerValue === condition.value;\n }\n return true;\n }\n case \"cookie\": {\n ${v} cookieValue = ctx.cookies[condition.key];\n if (cookieValue === undefined) return false;\n if (condition.value !== undefined) {\n ${v} re = __middlewareConditionRegex(condition.value);\n if (re) return re.test(cookieValue);\n return cookieValue === condition.value;\n }\n return true;\n }\n case \"query\": {\n ${v} queryValue = ctx.query.get(condition.key);\n if (queryValue === null) return false;\n if (condition.value !== undefined) {\n ${v} re = __middlewareConditionRegex(condition.value);\n if (re) return re.test(queryValue);\n return queryValue === condition.value;\n }\n return true;\n }\n case \"host\": {\n if (condition.value !== undefined) {\n ${v} re = __middlewareConditionRegex(condition.value);\n if (re) return re.test(ctx.host);\n return ctx.host === condition.value;\n }\n return ctx.host === condition.key;\n }\n default:\n return false;\n }\n}\n\nfunction __checkMiddlewareHasConditions(has, missing, ctx) {\n if (has) {\n for (${v} condition of has) {\n if (!__checkMiddlewareCondition(condition, ctx)) return false;\n }\n }\n if (missing) {\n for (${v} condition of missing) {\n if (__checkMiddlewareCondition(condition, ctx)) return false;\n }\n }\n return true;\n}\n\n// Keep this in sync with isValidMiddlewareMatcherObject in middleware.ts.\nfunction __isValidMiddlewareMatcherObject(matcher) {\n if (!matcher || typeof matcher !== \"object\" || Array.isArray(matcher)) return false;\n if (typeof matcher.source !== \"string\") return false;\n for (${v} key of Object.keys(matcher)) {\n if (key !== \"source\" && key !== \"locale\" && key !== \"has\" && key !== \"missing\") {\n return false;\n }\n }\n if (\"locale\" in matcher && matcher.locale !== undefined && matcher.locale !== false) return false;\n if (\"has\" in matcher && matcher.has !== undefined && !Array.isArray(matcher.has)) return false;\n if (\"missing\" in matcher && matcher.missing !== undefined && !Array.isArray(matcher.missing)) {\n return false;\n }\n return true;\n}\n\nfunction __matchMiddlewareObject(pathname, matcher, i18nConfig) {\n return matcher.locale === false\n ? matchMiddlewarePattern(pathname, matcher.source)\n : __matchMiddlewareMatcherPattern(pathname, matcher.source, i18nConfig);\n}\n\nfunction matchesMiddleware(pathname, matcher, request, i18nConfig) {\n if (!matcher) {\n return true;\n }\n if (typeof matcher === \"string\") {\n return __matchMiddlewareMatcherPattern(pathname, matcher, i18nConfig);\n }\n if (!Array.isArray(matcher)) {\n return false;\n }\n ${v} requestContext = __middlewareRequestContextFromRequest(request);\n for (${v} m of matcher) {\n if (typeof m === \"string\") {\n if (__matchMiddlewareMatcherPattern(pathname, m, i18nConfig)) return true;\n continue;\n }\n if (__isValidMiddlewareMatcherObject(m)) {\n if (!__matchMiddlewareObject(pathname, m, i18nConfig)) continue;\n if (!__checkMiddlewareHasConditions(m.has, m.missing, requestContext)) continue;\n return true;\n }\n }\n return false;\n}`;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ export declare const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
2
+ export declare const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
3
+ type MiddlewareHeaderValue = string | string[];
4
+ type MiddlewareHeaderSource = Headers | Record<string, MiddlewareHeaderValue>;
5
+ export declare function encodeMiddlewareRequestHeaders(targetHeaders: Headers, requestHeaders: Headers): void;
6
+ export declare function buildRequestHeadersFromMiddlewareResponse(baseHeaders: Headers, middlewareHeaders: MiddlewareHeaderSource): Headers | null;
7
+ export declare function shouldKeepMiddlewareHeader(key: string): boolean;
8
+ export {};
9
+ //# sourceMappingURL=middleware-request-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-request-headers.d.ts","sourceRoot":"","sources":["../../src/server/middleware-request-headers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gCAAgC,0BAA0B,CAAC;AACxE,eAAO,MAAM,2BAA2B,kCAAkC,CAAC;AAE3E,KAAK,qBAAqB,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAC/C,KAAK,sBAAsB,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAkD9E,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,GACtB,IAAI,CAON;AAED,wBAAgB,yCAAyC,CACvD,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,sBAAsB,GACxC,OAAO,GAAG,IAAI,CAyBhB;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/D"}
@@ -0,0 +1,77 @@
1
+ export const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
2
+ export const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
3
+ function getMiddlewareHeaderValue(source, key) {
4
+ if (source instanceof Headers) {
5
+ return source.get(key);
6
+ }
7
+ const value = source[key];
8
+ if (value === undefined)
9
+ return null;
10
+ return Array.isArray(value) ? (value[0] ?? null) : value;
11
+ }
12
+ function getOverrideHeaderNames(source) {
13
+ const rawValue = getMiddlewareHeaderValue(source, MIDDLEWARE_OVERRIDE_HEADERS);
14
+ if (rawValue === null)
15
+ return null;
16
+ return rawValue
17
+ .split(",")
18
+ .map((key) => key.trim())
19
+ .filter(Boolean);
20
+ }
21
+ function getForwardedRequestHeaders(source) {
22
+ const forwardedHeaders = new Map();
23
+ if (source instanceof Headers) {
24
+ for (const [key, value] of source.entries()) {
25
+ if (key.startsWith(MIDDLEWARE_REQUEST_HEADER_PREFIX)) {
26
+ forwardedHeaders.set(key.slice(MIDDLEWARE_REQUEST_HEADER_PREFIX.length), value);
27
+ }
28
+ }
29
+ return forwardedHeaders;
30
+ }
31
+ for (const [key, value] of Object.entries(source)) {
32
+ if (!key.startsWith(MIDDLEWARE_REQUEST_HEADER_PREFIX))
33
+ continue;
34
+ const normalizedValue = Array.isArray(value) ? (value[0] ?? "") : value;
35
+ forwardedHeaders.set(key.slice(MIDDLEWARE_REQUEST_HEADER_PREFIX.length), normalizedValue);
36
+ }
37
+ return forwardedHeaders;
38
+ }
39
+ function cloneHeaders(source) {
40
+ const cloned = new Headers();
41
+ for (const [key, value] of source.entries()) {
42
+ cloned.append(key, value);
43
+ }
44
+ return cloned;
45
+ }
46
+ export function encodeMiddlewareRequestHeaders(targetHeaders, requestHeaders) {
47
+ const overrideHeaderNames = [...requestHeaders.keys()];
48
+ targetHeaders.set(MIDDLEWARE_OVERRIDE_HEADERS, overrideHeaderNames.join(","));
49
+ for (const [key, value] of requestHeaders.entries()) {
50
+ targetHeaders.set(`${MIDDLEWARE_REQUEST_HEADER_PREFIX}${key}`, value);
51
+ }
52
+ }
53
+ export function buildRequestHeadersFromMiddlewareResponse(baseHeaders, middlewareHeaders) {
54
+ const overrideHeaderNames = getOverrideHeaderNames(middlewareHeaders);
55
+ const forwardedHeaders = getForwardedRequestHeaders(middlewareHeaders);
56
+ if (overrideHeaderNames === null && forwardedHeaders.size === 0) {
57
+ return null;
58
+ }
59
+ const nextHeaders = overrideHeaderNames === null ? cloneHeaders(baseHeaders) : new Headers();
60
+ if (overrideHeaderNames === null) {
61
+ for (const [key, value] of forwardedHeaders) {
62
+ nextHeaders.set(key, value);
63
+ }
64
+ return nextHeaders;
65
+ }
66
+ for (const key of overrideHeaderNames) {
67
+ const value = forwardedHeaders.get(key);
68
+ if (value !== undefined) {
69
+ nextHeaders.set(key, value);
70
+ }
71
+ }
72
+ return nextHeaders;
73
+ }
74
+ export function shouldKeepMiddlewareHeader(key) {
75
+ return key === MIDDLEWARE_OVERRIDE_HEADERS || key.startsWith(MIDDLEWARE_REQUEST_HEADER_PREFIX);
76
+ }
77
+ //# sourceMappingURL=middleware-request-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-request-headers.js","sourceRoot":"","sources":["../../src/server/middleware-request-headers.ts"],"names":[],"mappings":"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","sourcesContent":["export const MIDDLEWARE_REQUEST_HEADER_PREFIX = \"x-middleware-request-\";\nexport const MIDDLEWARE_OVERRIDE_HEADERS = \"x-middleware-override-headers\";\n\ntype MiddlewareHeaderValue = string | string[];\ntype MiddlewareHeaderSource = Headers | Record<string, MiddlewareHeaderValue>;\n\nfunction getMiddlewareHeaderValue(source: MiddlewareHeaderSource, key: string): string | null {\n if (source instanceof Headers) {\n return source.get(key);\n }\n\n const value = source[key];\n if (value === undefined) return null;\n return Array.isArray(value) ? (value[0] ?? null) : value;\n}\n\nfunction getOverrideHeaderNames(source: MiddlewareHeaderSource): string[] | null {\n const rawValue = getMiddlewareHeaderValue(source, MIDDLEWARE_OVERRIDE_HEADERS);\n if (rawValue === null) return null;\n return rawValue\n .split(\",\")\n .map((key) => key.trim())\n .filter(Boolean);\n}\n\nfunction getForwardedRequestHeaders(source: MiddlewareHeaderSource): Map<string, string> {\n const forwardedHeaders = new Map<string, string>();\n\n if (source instanceof Headers) {\n for (const [key, value] of source.entries()) {\n if (key.startsWith(MIDDLEWARE_REQUEST_HEADER_PREFIX)) {\n forwardedHeaders.set(key.slice(MIDDLEWARE_REQUEST_HEADER_PREFIX.length), value);\n }\n }\n return forwardedHeaders;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (!key.startsWith(MIDDLEWARE_REQUEST_HEADER_PREFIX)) continue;\n const normalizedValue = Array.isArray(value) ? (value[0] ?? \"\") : value;\n forwardedHeaders.set(key.slice(MIDDLEWARE_REQUEST_HEADER_PREFIX.length), normalizedValue);\n }\n\n return forwardedHeaders;\n}\n\nfunction cloneHeaders(source: Headers): Headers {\n const cloned = new Headers();\n for (const [key, value] of source.entries()) {\n cloned.append(key, value);\n }\n return cloned;\n}\n\nexport function encodeMiddlewareRequestHeaders(\n targetHeaders: Headers,\n requestHeaders: Headers,\n): void {\n const overrideHeaderNames = [...requestHeaders.keys()];\n targetHeaders.set(MIDDLEWARE_OVERRIDE_HEADERS, overrideHeaderNames.join(\",\"));\n\n for (const [key, value] of requestHeaders.entries()) {\n targetHeaders.set(`${MIDDLEWARE_REQUEST_HEADER_PREFIX}${key}`, value);\n }\n}\n\nexport function buildRequestHeadersFromMiddlewareResponse(\n baseHeaders: Headers,\n middlewareHeaders: MiddlewareHeaderSource,\n): Headers | null {\n const overrideHeaderNames = getOverrideHeaderNames(middlewareHeaders);\n const forwardedHeaders = getForwardedRequestHeaders(middlewareHeaders);\n\n if (overrideHeaderNames === null && forwardedHeaders.size === 0) {\n return null;\n }\n\n const nextHeaders = overrideHeaderNames === null ? cloneHeaders(baseHeaders) : new Headers();\n\n if (overrideHeaderNames === null) {\n for (const [key, value] of forwardedHeaders) {\n nextHeaders.set(key, value);\n }\n return nextHeaders;\n }\n\n for (const key of overrideHeaderNames) {\n const value = forwardedHeaders.get(key);\n if (value !== undefined) {\n nextHeaders.set(key, value);\n }\n }\n\n return nextHeaders;\n}\n\nexport function shouldKeepMiddlewareHeader(key: string): boolean {\n return key === MIDDLEWARE_OVERRIDE_HEADERS || key.startsWith(MIDDLEWARE_REQUEST_HEADER_PREFIX);\n}\n"]}
@@ -18,6 +18,7 @@
18
18
  * Supports the `config.matcher` export for path filtering.
19
19
  */
20
20
  import type { ModuleRunner } from "vite/module-runner";
21
+ import type { HasCondition, NextI18nConfig } from "../config/next-config.js";
21
22
  /**
22
23
  * Determine whether a middleware/proxy file path refers to a proxy file.
23
24
  * proxy.ts files accept `proxy` or `default` exports.
@@ -47,19 +48,19 @@ export declare function resolveMiddlewareHandler(mod: Record<string, unknown>, f
47
48
  */
48
49
  export declare function findMiddlewareFile(root: string): string | null;
49
50
  /** Matcher pattern from middleware config export. */
50
- type MatcherConfig = string | string[] | {
51
+ type MiddlewareMatcherObject = {
51
52
  source: string;
52
- regexp?: string;
53
- locale?: boolean;
54
- has?: any[];
55
- missing?: any[];
56
- }[];
53
+ locale?: false;
54
+ has?: HasCondition[];
55
+ missing?: HasCondition[];
56
+ };
57
+ type MatcherConfig = string | Array<string | MiddlewareMatcherObject>;
57
58
  /**
58
59
  * Check if a pathname matches the middleware matcher config.
59
60
  * If no matcher is configured, middleware runs on all paths
60
61
  * except static files and internal Next.js paths.
61
62
  */
62
- export declare function matchesMiddleware(pathname: string, matcher: MatcherConfig | undefined): boolean;
63
+ export declare function matchesMiddleware(pathname: string, matcher: MatcherConfig | undefined, request?: Request, i18nConfig?: NextI18nConfig | null): boolean;
63
64
  /**
64
65
  * Match a single pattern against a pathname.
65
66
  * Supports Next.js matcher patterns:
@@ -98,6 +99,6 @@ export interface MiddlewareResult {
98
99
  * @param request - The incoming Request object
99
100
  * @returns Middleware result describing what action to take
100
101
  */
101
- export declare function runMiddleware(runner: ModuleRunner, middlewarePath: string, request: Request): Promise<MiddlewareResult>;
102
+ export declare function runMiddleware(runner: ModuleRunner, middlewarePath: string, request: Request, i18nConfig?: NextI18nConfig | null): Promise<MiddlewareResult>;
102
103
  export {};
103
104
  //# sourceMappingURL=middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,QAAQ,EAAE,MAAM,GACf,QAAQ,CAeV;AA0BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB9D;AAED,qDAAqD;AACrD,KAAK,aAAa,GACd,MAAM,GACN,MAAM,EAAE,GACR;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,CAAC;AAE1F;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GAAG,SAAS,GACjC,OAAO,CAqBT;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAkCvE;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,gBAAgB,CAAC,CAqI3B"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASvD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK7E;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAajG;AA0BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB9D;AAED,qDAAqD;AACrD,KAAK,uBAAuB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAEF,KAAK,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,uBAAuB,CAAC,CAAC;AAStE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,OAAO,CAAC,EAAE,OAAO,EACjB,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,GACjC,OAAO,CAwCT;AAyED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQvE;AAqCD,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAoI3B"}