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
@@ -29,6 +29,6 @@ declare function isDangerousScheme(url: string): boolean;
29
29
  * packages/next/src/shared/lib/router/router.ts:1025,1057
30
30
  */
31
31
  declare function reportBlockedDangerousNavigation(): void;
32
- declare function assertSafeNavigationUrl(url: string): void;
32
+ declare function assertSafeNavigationUrl(url: string, ErrorConstructor?: new (message: string) => Error): void;
33
33
  //#endregion
34
34
  export { DANGEROUS_URL_BLOCK_MESSAGE, assertSafeNavigationUrl, isDangerousScheme, reportBlockedDangerousNavigation };
@@ -60,10 +60,10 @@ function isDangerousScheme(url) {
60
60
  function reportBlockedDangerousNavigation() {
61
61
  console.error(DANGEROUS_URL_BLOCK_MESSAGE);
62
62
  }
63
- function assertSafeNavigationUrl(url) {
63
+ function assertSafeNavigationUrl(url, ErrorConstructor = Error) {
64
64
  if (isDangerousScheme(url)) {
65
65
  reportBlockedDangerousNavigation();
66
- throw new Error(DANGEROUS_URL_BLOCK_MESSAGE);
66
+ throw new ErrorConstructor(DANGEROUS_URL_BLOCK_MESSAGE);
67
67
  }
68
68
  }
69
69
  //#endregion
package/dist/typegen.d.ts CHANGED
@@ -4,6 +4,12 @@ type GenerateRouteTypesOptions = {
4
4
  appDir?: string | null;
5
5
  pageExtensions?: readonly string[];
6
6
  };
7
- declare function generateRouteTypes(options: GenerateRouteTypesOptions): Promise<string>;
7
+ type GenerateRouteTypesResult = {
8
+ routeTypesPath: string;
9
+ nextEnvPath: string;
10
+ nextEnvStatus: "created" | "updated" | "unchanged";
11
+ };
12
+ declare function nextEnvFileContent(hasNext: boolean, hasAppDir: boolean, eol?: string): string;
13
+ declare function generateRouteTypes(options: GenerateRouteTypesOptions): Promise<GenerateRouteTypesResult>;
8
14
  //#endregion
9
- export { generateRouteTypes };
15
+ export { GenerateRouteTypesResult, generateRouteTypes, nextEnvFileContent };
package/dist/typegen.js CHANGED
@@ -4,34 +4,82 @@ import { decodeRouteSegment, isInvisibleSegment } from "./routing/utils.js";
4
4
  import { patternToNextFormat } from "./routing/route-validation.js";
5
5
  import { compareStrings } from "./utils/compare.js";
6
6
  import { appRouteGraph } from "./routing/app-router.js";
7
+ import { createRequire } from "node:module";
7
8
  import fsp from "node:fs/promises";
9
+ import os from "node:os";
8
10
  //#region src/typegen.ts
9
- const NEXT_ENV_FILE_CONTENT = `/// <reference types="next" />
11
+ function nextEnvFileContent(hasNext, hasAppDir, eol = "\n") {
12
+ return `${hasNext ? `/// <reference types="next" />
10
13
  /// <reference types="next/image-types/global" />
11
- import "./.next/types/routes.d.ts";
14
+ import "vinext/types/augmentations";
15
+ ` : `import "vinext/types";
16
+ `}import "./.next/types/routes.d.ts";
12
17
 
13
18
  // NOTE: This file should not be edited
14
- // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
15
- `;
19
+ // see https://nextjs.org/docs/${hasAppDir ? "app" : "pages"}/api-reference/config/typescript for more information.
20
+ `.replaceAll("\n", eol);
21
+ }
16
22
  async function generateRouteTypes(options) {
17
23
  const root = path.resolve(options.root);
18
- const appDir = options.appDir ? path.resolve(options.appDir) : findDir(root, "app", "src/app");
24
+ const appDir = options.appDir === null ? null : options.appDir ? path.resolve(options.appDir) : findDir(root, "app", "src/app");
19
25
  const outPath = path.join(root, ".next", "types", "routes.d.ts");
20
- const content = appDir ? renderRouteTypes(await collectRouteTypeModel(appDir, options.pageExtensions)) : renderRouteTypes(emptyRouteTypeModel());
26
+ const pagesDir = findDir(root, "pages", "src/pages");
27
+ const content = appDir ? renderRouteTypes(await collectRouteTypeModel(appDir, options.pageExtensions), pagesDir !== null) : renderRouteTypes(emptyRouteTypeModel(), false);
21
28
  await fsp.mkdir(path.dirname(outPath), { recursive: true });
22
29
  await fsp.writeFile(outPath, content, "utf-8");
23
- await ensureNextEnvFile(root);
24
- return outPath;
30
+ const nextEnv = await ensureNextEnvFile(root, appDir !== null);
31
+ return {
32
+ routeTypesPath: outPath,
33
+ nextEnvPath: nextEnv.path,
34
+ nextEnvStatus: nextEnv.status
35
+ };
25
36
  }
26
- async function ensureNextEnvFile(root) {
37
+ async function ensureNextEnvFile(root, hasAppDir) {
27
38
  const envPath = path.join(root, "next-env.d.ts");
39
+ let eol = os.EOL;
40
+ let existing;
28
41
  try {
29
- await fsp.writeFile(envPath, NEXT_ENV_FILE_CONTENT, {
30
- encoding: "utf-8",
31
- flag: "wx"
42
+ existing = await fsp.readFile(envPath, "utf-8");
43
+ const newline = existing.indexOf("\n", 1);
44
+ if (newline !== -1) eol = existing[newline - 1] === "\r" ? "\r\n" : "\n";
45
+ } catch (error) {
46
+ if (error.code !== "ENOENT") throw error;
47
+ }
48
+ const content = nextEnvFileContent(await hasNextPackage(root), hasAppDir, eol);
49
+ if (existing === content) return {
50
+ path: envPath,
51
+ status: "unchanged"
52
+ };
53
+ await fsp.writeFile(envPath, content, "utf-8");
54
+ return {
55
+ path: envPath,
56
+ status: existing === void 0 ? "created" : "updated"
57
+ };
58
+ }
59
+ async function hasNextPackage(root) {
60
+ const manifestPath = path.join(root, "package.json");
61
+ let declaresNext;
62
+ try {
63
+ const manifest = JSON.parse(await fsp.readFile(manifestPath, "utf-8"));
64
+ declaresNext = [
65
+ "dependencies",
66
+ "devDependencies",
67
+ "peerDependencies",
68
+ "optionalDependencies"
69
+ ].some((field) => {
70
+ const dependencies = manifest[field];
71
+ return typeof dependencies === "object" && dependencies !== null && Object.hasOwn(dependencies, "next");
32
72
  });
33
73
  } catch (error) {
34
- if (error.code !== "EEXIST") throw error;
74
+ if (error.code !== "ENOENT") throw error;
75
+ }
76
+ if (declaresNext === false) return false;
77
+ try {
78
+ const packageJsonPath = createRequire(manifestPath).resolve("next/package.json");
79
+ await fsp.access(packageJsonPath);
80
+ return true;
81
+ } catch {
82
+ return false;
35
83
  }
36
84
  }
37
85
  function emptyRouteTypeModel() {
@@ -84,12 +132,23 @@ async function collectRouteTypeModel(appDir, pageExtensions) {
84
132
  for (const slotNames of model.layoutSlots.values()) slotNames.sort(compareStrings);
85
133
  return model;
86
134
  }
87
- function renderRouteTypes(model) {
135
+ function renderRouteTypes(model, hasPagesCompat) {
88
136
  const allRoutes = uniqueSorted([
89
137
  ...model.pageRoutes,
90
138
  ...model.layoutRoutes,
91
139
  ...model.routeHandlerRoutes
92
140
  ]);
141
+ const navigationCompat = hasPagesCompat ? `
142
+ declare module "next/navigation" {
143
+ function useSearchParams(): import("next/navigation").ReadonlyURLSearchParams | null;
144
+ function usePathname(): string | null;
145
+ function useParams<
146
+ T extends Record<string, string | string[]> = Record<string, string | string[]>,
147
+ >(): T | null;
148
+ function useSelectedLayoutSegments(): string[] | null;
149
+ function useSelectedLayoutSegment(): string | null;
150
+ }
151
+ ` : "";
93
152
  return `// This file is generated by vinext. Do not edit.
94
153
  import type * as React from "react";
95
154
 
@@ -126,6 +185,8 @@ ${renderLayoutSlotMap(model.layoutRoutes, model.layoutSlots)}
126
185
  }
127
186
  }
128
187
 
188
+ ${navigationCompat}
189
+
129
190
  export {};
130
191
  `;
131
192
  }
@@ -224,4 +285,4 @@ function quote(value) {
224
285
  return JSON.stringify(value);
225
286
  }
226
287
  //#endregion
227
- export { generateRouteTypes };
288
+ export { generateRouteTypes, nextEnvFileContent };
@@ -1,4 +1,5 @@
1
1
  //#region src/utils/cache-control-metadata.d.ts
2
2
  declare function readCacheControlNumberField(ctx: Record<string, unknown> | undefined, field: string): number | undefined;
3
+ declare function readCacheControlRevalidateField(ctx: Record<string, unknown> | undefined): number | false | undefined;
3
4
  //#endregion
4
- export { readCacheControlNumberField };
5
+ export { readCacheControlNumberField, readCacheControlRevalidateField };
@@ -8,5 +8,9 @@ function readCacheControlNumberField(ctx, field) {
8
8
  const value = readRecordField(ctx, "cacheControl")?.[field] ?? ctx?.[field];
9
9
  return typeof value === "number" ? value : void 0;
10
10
  }
11
+ function readCacheControlRevalidateField(ctx) {
12
+ const value = readRecordField(ctx, "cacheControl")?.revalidate ?? ctx?.revalidate;
13
+ return typeof value === "number" || value === false ? value : void 0;
14
+ }
11
15
  //#endregion
12
- export { readCacheControlNumberField };
16
+ export { readCacheControlNumberField, readCacheControlRevalidateField };
@@ -2,8 +2,8 @@
2
2
  type DomainLocale = {
3
3
  domain: string;
4
4
  defaultLocale: string;
5
- locales?: string[];
6
- http?: boolean;
5
+ locales?: readonly string[];
6
+ http?: true;
7
7
  };
8
8
  declare function normalizeDomainHostname(hostname: string | null | undefined): string | undefined;
9
9
  /**
@@ -0,0 +1,5 @@
1
+ //#region src/utils/external-url.d.ts
2
+ /** Detect an absolute URL with any scheme, or a protocol-relative URL. */
3
+ declare function isExternalUrl(url: string): boolean;
4
+ //#endregion
5
+ export { isExternalUrl };
@@ -0,0 +1,7 @@
1
+ //#region src/utils/external-url.ts
2
+ /** Detect an absolute URL with any scheme, or a protocol-relative URL. */
3
+ function isExternalUrl(url) {
4
+ return /^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith("//");
5
+ }
6
+ //#endregion
7
+ export { isExternalUrl };
@@ -1,5 +1,5 @@
1
1
  //#region src/utils/html-limited-bots.ts
2
- const HTML_LIMITED_BOT_UA_RE_STRING = String.raw`[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight`;
2
+ const HTML_LIMITED_BOT_UA_RE_STRING = String.raw`[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|meta-externalagent|meta-externalfetcher|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight`;
3
3
  const HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i;
4
4
  const htmlLimitedBotRegexCache = /* @__PURE__ */ new Map();
5
5
  function getHtmlLimitedBotRegex(htmlLimitedBots) {
@@ -7,6 +7,8 @@ declare const VINEXT_PRERENDER_SECRET_HEADER = "x-vinext-prerender-secret";
7
7
  declare const VINEXT_PRERENDER_ROUTE_PARAMS_HEADER = "x-vinext-prerender-route-params";
8
8
  /** Indicates a build-time prerender render is probing whether a route can be static. */
9
9
  declare const VINEXT_PRERENDER_SPECULATIVE_HEADER = "x-vinext-prerender-speculative";
10
+ /** Logical hostname carried only by authenticated Node revalidation loopbacks. */
11
+ declare const VINEXT_REVALIDATE_HOST_HEADER = "x-vinext-revalidate-host";
10
12
  /** Prefix for forwarded request headers (e.g. `x-middleware-request-cookie`). */
11
13
  declare const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
12
14
  /** Comma-separated list of header names that middleware wants to override. */
@@ -19,5 +21,9 @@ declare const MIDDLEWARE_CACHE_HEADER = "x-middleware-cache";
19
21
  declare const MIDDLEWARE_SKIP_HEADER = "x-middleware-skip";
20
22
  /** Generic prefix for all middleware internal headers. */
21
23
  declare const MIDDLEWARE_HEADER_PREFIX = "x-middleware-";
24
+ /** Authenticates an internal Pages Router on-demand revalidation request. */
25
+ declare const PRERENDER_REVALIDATE_HEADER = "x-prerender-revalidate";
26
+ /** Restricts on-demand revalidation to paths that were already generated. */
27
+ declare const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = "x-prerender-revalidate-if-generated";
22
28
  //#endregion
23
- export { MIDDLEWARE_CACHE_HEADER, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX, MIDDLEWARE_SET_COOKIE_HEADER, MIDDLEWARE_SKIP_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_SPECULATIVE_HEADER };
29
+ export { MIDDLEWARE_CACHE_HEADER, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX, MIDDLEWARE_SET_COOKIE_HEADER, MIDDLEWARE_SKIP_HEADER, PRERENDER_REVALIDATE_HEADER, PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_SPECULATIVE_HEADER, VINEXT_REVALIDATE_HOST_HEADER };
@@ -7,6 +7,8 @@ const VINEXT_PRERENDER_SECRET_HEADER = "x-vinext-prerender-secret";
7
7
  const VINEXT_PRERENDER_ROUTE_PARAMS_HEADER = "x-vinext-prerender-route-params";
8
8
  /** Indicates a build-time prerender render is probing whether a route can be static. */
9
9
  const VINEXT_PRERENDER_SPECULATIVE_HEADER = "x-vinext-prerender-speculative";
10
+ /** Logical hostname carried only by authenticated Node revalidation loopbacks. */
11
+ const VINEXT_REVALIDATE_HOST_HEADER = "x-vinext-revalidate-host";
10
12
  /** Prefix for forwarded request headers (e.g. `x-middleware-request-cookie`). */
11
13
  const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
12
14
  /** Comma-separated list of header names that middleware wants to override. */
@@ -19,5 +21,9 @@ const MIDDLEWARE_CACHE_HEADER = "x-middleware-cache";
19
21
  const MIDDLEWARE_SKIP_HEADER = "x-middleware-skip";
20
22
  /** Generic prefix for all middleware internal headers. */
21
23
  const MIDDLEWARE_HEADER_PREFIX = "x-middleware-";
24
+ /** Authenticates an internal Pages Router on-demand revalidation request. */
25
+ const PRERENDER_REVALIDATE_HEADER = "x-prerender-revalidate";
26
+ /** Restricts on-demand revalidation to paths that were already generated. */
27
+ const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = "x-prerender-revalidate-if-generated";
22
28
  //#endregion
23
- export { MIDDLEWARE_CACHE_HEADER, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX, MIDDLEWARE_SET_COOKIE_HEADER, MIDDLEWARE_SKIP_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_SPECULATIVE_HEADER };
29
+ export { MIDDLEWARE_CACHE_HEADER, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX, MIDDLEWARE_SET_COOKIE_HEADER, MIDDLEWARE_SKIP_HEADER, PRERENDER_REVALIDATE_HEADER, PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_SPECULATIVE_HEADER, VINEXT_REVALIDATE_HOST_HEADER };
@@ -0,0 +1,8 @@
1
+ //#region src/utils/regex-safety.d.ts
2
+ type RegexSafetyIssue = "nested repetition" | "ambiguous alternatives under repetition" | "ambiguous sequence expansion" | "overlapping sequential repetition" | "analysis budget exceeded";
3
+ declare function analyzeRegexSafety(pattern: string, options?: {
4
+ ignoreCase?: boolean;
5
+ }): RegexSafetyIssue | null;
6
+ declare function regexAtomsMayOverlap(left: string, right: string, ignoreCase?: boolean): boolean;
7
+ //#endregion
8
+ export { RegexSafetyIssue, analyzeRegexSafety, regexAtomsMayOverlap };