vinext 0.1.7 → 0.2.0

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 (279) hide show
  1. package/README.md +51 -30
  2. package/dist/build/inject-pregenerated-paths.d.ts +4 -0
  3. package/dist/build/inject-pregenerated-paths.js +18 -0
  4. package/dist/build/layout-classification.js +1 -1
  5. package/dist/build/nitro-route-rules.js +1 -1
  6. package/dist/build/pages-client-assets-module.d.ts +11 -0
  7. package/dist/build/pages-client-assets-module.js +27 -0
  8. package/dist/build/prerender.d.ts +2 -1
  9. package/dist/build/prerender.js +13 -6
  10. package/dist/build/report.d.ts +13 -2
  11. package/dist/build/report.js +99 -2
  12. package/dist/build/run-prerender.d.ts +7 -0
  13. package/dist/build/run-prerender.js +10 -1
  14. package/dist/build/standalone.js +2 -0
  15. package/dist/cache/cache-adapters-virtual.js +3 -3
  16. package/dist/check.d.ts +18 -0
  17. package/dist/check.js +77 -19
  18. package/dist/cli-args.d.ts +1 -2
  19. package/dist/cli-args.js +1 -1
  20. package/dist/cli-dev-config.d.ts +12 -0
  21. package/dist/cli-dev-config.js +23 -0
  22. package/dist/cli.js +113 -97
  23. package/dist/{server → client}/dev-error-overlay-store.d.ts +1 -1
  24. package/dist/{server → client}/dev-error-overlay-store.js +1 -1
  25. package/dist/{server → client}/dev-error-overlay.d.ts +1 -1
  26. package/dist/{server → client}/dev-error-overlay.js +2 -2
  27. package/dist/client/navigation-runtime.d.ts +2 -0
  28. package/dist/client/navigation-runtime.js +3 -1
  29. package/dist/client/window-next.d.ts +2 -1
  30. package/dist/cloudflare/index.d.ts +2 -2
  31. package/dist/cloudflare/index.js +2 -2
  32. package/dist/config/config-matchers.js +14 -10
  33. package/dist/config/next-config.d.ts +6 -3
  34. package/dist/config/next-config.js +47 -1
  35. package/dist/config/prerender.d.ts +34 -0
  36. package/dist/config/prerender.js +55 -0
  37. package/dist/config/server-external-packages.d.ts +4 -0
  38. package/dist/config/server-external-packages.js +91 -0
  39. package/dist/entries/app-rsc-entry.d.ts +2 -1
  40. package/dist/entries/app-rsc-entry.js +89 -15
  41. package/dist/entries/app-rsc-manifest.js +10 -0
  42. package/dist/entries/pages-client-entry.d.ts +3 -0
  43. package/dist/entries/pages-client-entry.js +16 -1
  44. package/dist/entries/pages-server-entry.js +6 -2
  45. package/dist/image/image-adapters-virtual.d.ts +59 -0
  46. package/dist/image/image-adapters-virtual.js +59 -0
  47. package/dist/index.d.ts +33 -0
  48. package/dist/index.js +211 -118
  49. package/dist/init-cloudflare.d.ts +43 -0
  50. package/dist/init-cloudflare.js +839 -0
  51. package/dist/init-platform.d.ts +40 -0
  52. package/dist/init-platform.js +195 -0
  53. package/dist/init.d.ts +16 -38
  54. package/dist/init.js +208 -97
  55. package/dist/node_modules/.pnpm/am-i-vibing@0.5.0/node_modules/am-i-vibing/dist/detector-1yx2Hoe0.js +294 -0
  56. package/dist/node_modules/.pnpm/process-ancestry@0.1.0/node_modules/process-ancestry/dist/index.js +94 -0
  57. package/dist/{cloudflare → packages/cloudflare}/src/cache/cdn-adapter.runtime.js +1 -1
  58. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.d.ts +2 -2
  59. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.js +1 -1
  60. package/dist/packages/cloudflare/src/deploy-config.js +150 -0
  61. package/dist/packages/cloudflare/src/deploy-help.js +55 -0
  62. package/dist/packages/cloudflare/src/deploy.js +276 -0
  63. package/dist/{cloudflare → packages/cloudflare/src}/tpr.d.ts +4 -41
  64. package/dist/{cloudflare → packages/cloudflare/src}/tpr.js +18 -15
  65. package/dist/plugins/ast-scope.d.ts +16 -0
  66. package/dist/plugins/ast-scope.js +62 -0
  67. package/dist/plugins/ast-utils.d.ts +27 -1
  68. package/dist/plugins/ast-utils.js +32 -1
  69. package/dist/plugins/css-module-imports.d.ts +14 -0
  70. package/dist/plugins/css-module-imports.js +59 -0
  71. package/dist/plugins/extensionless-dynamic-import.js +2 -2
  72. package/dist/plugins/ignore-dynamic-requests.d.ts +11 -0
  73. package/dist/plugins/ignore-dynamic-requests.js +530 -0
  74. package/dist/plugins/middleware-server-only.d.ts +8 -6
  75. package/dist/plugins/middleware-server-only.js +8 -7
  76. package/dist/plugins/optimize-imports.js +1 -1
  77. package/dist/plugins/typeof-window.d.ts +1 -1
  78. package/dist/plugins/typeof-window.js +28 -56
  79. package/dist/routing/app-route-graph.d.ts +29 -4
  80. package/dist/routing/app-route-graph.js +182 -40
  81. package/dist/routing/app-router.d.ts +5 -0
  82. package/dist/routing/app-router.js +5 -0
  83. package/dist/routing/file-matcher.d.ts +8 -0
  84. package/dist/routing/file-matcher.js +10 -1
  85. package/dist/routing/pages-router.js +2 -2
  86. package/dist/server/api-handler.js +9 -14
  87. package/dist/server/app-browser-action-result.d.ts +4 -1
  88. package/dist/server/app-browser-action-result.js +8 -1
  89. package/dist/server/app-browser-entry.js +194 -190
  90. package/dist/server/app-browser-history-controller.d.ts +2 -1
  91. package/dist/server/app-browser-history-controller.js +6 -2
  92. package/dist/server/app-browser-interception-context.d.ts +1 -0
  93. package/dist/server/app-browser-interception-context.js +4 -2
  94. package/dist/server/app-browser-navigation-controller.d.ts +2 -0
  95. package/dist/server/app-browser-navigation-controller.js +60 -31
  96. package/dist/server/app-browser-server-action-client.d.ts +32 -0
  97. package/dist/server/app-browser-server-action-client.js +127 -0
  98. package/dist/server/app-browser-state.d.ts +11 -1
  99. package/dist/server/app-browser-state.js +25 -8
  100. package/dist/server/app-browser-visible-commit.d.ts +6 -1
  101. package/dist/server/app-browser-visible-commit.js +43 -25
  102. package/dist/server/app-elements-wire.d.ts +9 -2
  103. package/dist/server/app-elements-wire.js +8 -1
  104. package/dist/server/app-elements.d.ts +2 -2
  105. package/dist/server/app-elements.js +4 -3
  106. package/dist/server/app-fallback-renderer.d.ts +5 -2
  107. package/dist/server/app-fallback-renderer.js +15 -7
  108. package/dist/server/app-hydration-cache-publication.d.ts +11 -0
  109. package/dist/server/app-hydration-cache-publication.js +43 -0
  110. package/dist/server/app-middleware.d.ts +4 -3
  111. package/dist/server/app-middleware.js +8 -3
  112. package/dist/server/app-optimistic-routing.js +11 -4
  113. package/dist/server/app-page-boundary-render.d.ts +3 -0
  114. package/dist/server/app-page-boundary-render.js +14 -3
  115. package/dist/server/app-page-cache-finalizer.d.ts +1 -0
  116. package/dist/server/app-page-cache-finalizer.js +10 -3
  117. package/dist/server/app-page-cache-render.d.ts +1 -0
  118. package/dist/server/app-page-cache-render.js +8 -4
  119. package/dist/server/app-page-cache.d.ts +1 -0
  120. package/dist/server/app-page-cache.js +5 -2
  121. package/dist/server/app-page-dispatch.d.ts +33 -4
  122. package/dist/server/app-page-dispatch.js +63 -90
  123. package/dist/server/app-page-element-builder.d.ts +9 -2
  124. package/dist/server/app-page-element-builder.js +114 -23
  125. package/dist/server/app-page-head.d.ts +16 -1
  126. package/dist/server/app-page-head.js +44 -22
  127. package/dist/server/app-page-params.d.ts +2 -1
  128. package/dist/server/app-page-params.js +8 -1
  129. package/dist/server/app-page-ppr-runtime.d.ts +7 -0
  130. package/dist/server/app-page-ppr-runtime.js +70 -0
  131. package/dist/server/app-page-probe.d.ts +1 -0
  132. package/dist/server/app-page-probe.js +6 -1
  133. package/dist/server/app-page-render-identity.d.ts +1 -0
  134. package/dist/server/app-page-render-identity.js +1 -1
  135. package/dist/server/app-page-render.d.ts +4 -1
  136. package/dist/server/app-page-render.js +26 -3
  137. package/dist/server/app-page-request.d.ts +22 -1
  138. package/dist/server/app-page-request.js +92 -15
  139. package/dist/server/app-page-route-wiring.d.ts +14 -2
  140. package/dist/server/app-page-route-wiring.js +61 -25
  141. package/dist/server/app-page-search-params-observation.d.ts +4 -2
  142. package/dist/server/app-page-search-params-observation.js +11 -7
  143. package/dist/server/app-page-segment-state.d.ts +2 -1
  144. package/dist/server/app-page-segment-state.js +3 -1
  145. package/dist/server/app-page-stream.d.ts +5 -0
  146. package/dist/server/app-page-stream.js +3 -1
  147. package/dist/server/app-ppr-fallback-shell-render.d.ts +4 -3
  148. package/dist/server/app-route-handler-dispatch.js +1 -0
  149. package/dist/server/app-route-handler-execution.js +7 -2
  150. package/dist/server/app-route-handler-response.js +1 -0
  151. package/dist/server/app-route-handler-runtime.js +1 -1
  152. package/dist/server/app-route-module-loader.d.ts +2 -0
  153. package/dist/server/app-route-module-loader.js +1 -0
  154. package/dist/server/app-router-entry.js +16 -8
  155. package/dist/server/app-rsc-errors.js +7 -1
  156. package/dist/server/app-rsc-handler.d.ts +3 -1
  157. package/dist/server/app-rsc-handler.js +67 -39
  158. package/dist/server/app-rsc-request-normalization.d.ts +3 -2
  159. package/dist/server/app-rsc-request-normalization.js +6 -3
  160. package/dist/server/app-rsc-route-matching.d.ts +7 -0
  161. package/dist/server/app-rsc-route-matching.js +36 -3
  162. package/dist/server/app-segment-config.d.ts +12 -0
  163. package/dist/server/app-segment-config.js +91 -5
  164. package/dist/server/app-server-action-execution.d.ts +5 -0
  165. package/dist/server/app-server-action-execution.js +94 -33
  166. package/dist/server/app-ssr-entry.d.ts +3 -0
  167. package/dist/server/app-ssr-entry.js +19 -8
  168. package/dist/server/app-ssr-stream.d.ts +7 -3
  169. package/dist/server/app-ssr-stream.js +10 -6
  170. package/dist/server/app-static-generation.d.ts +1 -0
  171. package/dist/server/app-static-generation.js +1 -0
  172. package/dist/server/app-visited-response-cache.d.ts +6 -0
  173. package/dist/server/app-visited-response-cache.js +3 -1
  174. package/dist/server/client-trace-metadata.js +26 -0
  175. package/dist/server/default-global-not-found-module.d.ts +14 -0
  176. package/dist/server/default-global-not-found-module.js +14 -0
  177. package/dist/server/dev-route-files.js +4 -0
  178. package/dist/server/dev-server.js +19 -18
  179. package/dist/server/dev-stack-sourcemap.d.ts +1 -1
  180. package/dist/server/dev-stack-sourcemap.js +1 -1
  181. package/dist/server/fetch-handler.d.ts +2 -0
  182. package/dist/server/fetch-handler.js +18 -0
  183. package/dist/server/headers.d.ts +5 -15
  184. package/dist/server/headers.js +4 -15
  185. package/dist/server/image-optimization.d.ts +51 -1
  186. package/dist/server/image-optimization.js +52 -2
  187. package/dist/server/implicit-tags.js +1 -1
  188. package/dist/server/isr-cache.d.ts +1 -1
  189. package/dist/server/isr-cache.js +2 -2
  190. package/dist/server/metadata-routes.d.ts +3 -1
  191. package/dist/server/metadata-routes.js +12 -2
  192. package/dist/server/middleware-runtime.js +6 -1
  193. package/dist/server/navigation-planner.d.ts +1 -0
  194. package/dist/server/navigation-planner.js +14 -3
  195. package/dist/server/pages-api-route.js +2 -2
  196. package/dist/server/pages-asset-tags.d.ts +4 -6
  197. package/dist/server/pages-asset-tags.js +12 -12
  198. package/dist/server/pages-client-assets.d.ts +12 -0
  199. package/dist/server/pages-client-assets.js +10 -0
  200. package/dist/server/pages-node-compat.d.ts +8 -1
  201. package/dist/server/pages-node-compat.js +32 -4
  202. package/dist/server/pages-page-data.d.ts +24 -1
  203. package/dist/server/pages-page-data.js +45 -24
  204. package/dist/server/pages-page-handler.d.ts +2 -1
  205. package/dist/server/pages-page-handler.js +19 -12
  206. package/dist/server/pages-page-response.d.ts +7 -0
  207. package/dist/server/pages-page-response.js +4 -1
  208. package/dist/server/pages-request-pipeline.d.ts +2 -0
  209. package/dist/server/pages-request-pipeline.js +25 -1
  210. package/dist/server/pages-router-entry.d.ts +30 -0
  211. package/dist/server/pages-router-entry.js +108 -0
  212. package/dist/server/prerender-manifest.d.ts +3 -1
  213. package/dist/server/prerender-route-params.js +1 -1
  214. package/dist/server/prod-server.d.ts +1 -1
  215. package/dist/server/prod-server.js +48 -26
  216. package/dist/server/request-pipeline.js +1 -0
  217. package/dist/server/seed-cache.js +4 -4
  218. package/dist/server/worker-utils.d.ts +2 -1
  219. package/dist/server/worker-utils.js +7 -1
  220. package/dist/shims/app-router-scroll-state.d.ts +1 -0
  221. package/dist/shims/app-router-scroll-state.js +1 -0
  222. package/dist/shims/app-router-scroll.js +2 -1
  223. package/dist/shims/cache.js +19 -15
  224. package/dist/shims/cdn-cache.js +1 -1
  225. package/dist/shims/dynamic-preload-chunks.js +2 -1
  226. package/dist/shims/error-boundary.d.ts +19 -1
  227. package/dist/shims/error-boundary.js +11 -1
  228. package/dist/shims/form.d.ts +3 -1
  229. package/dist/shims/form.js +37 -43
  230. package/dist/shims/headers.d.ts +9 -1
  231. package/dist/shims/headers.js +31 -6
  232. package/dist/shims/image.js +75 -14
  233. package/dist/shims/internal/app-route-detection.d.ts +2 -17
  234. package/dist/shims/internal/app-route-detection.js +4 -17
  235. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +23 -0
  236. package/dist/shims/internal/hybrid-client-route-owner-direct.js +51 -0
  237. package/dist/shims/internal/hybrid-client-route-owner.d.ts +2 -15
  238. package/dist/shims/internal/hybrid-client-route-owner.js +9 -60
  239. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +9 -5
  240. package/dist/shims/internal/pages-data-fetch-dedup.js +73 -14
  241. package/dist/shims/internal/pages-data-target.d.ts +10 -9
  242. package/dist/shims/internal/pages-data-target.js +91 -12
  243. package/dist/shims/internal/pages-router-components.d.ts +7 -0
  244. package/dist/shims/internal/pages-router-components.js +13 -0
  245. package/dist/shims/layout-segment-context.d.ts +4 -1
  246. package/dist/shims/layout-segment-context.js +18 -4
  247. package/dist/shims/link.js +70 -37
  248. package/dist/shims/metadata.d.ts +3 -2
  249. package/dist/shims/metadata.js +8 -4
  250. package/dist/shims/navigation.d.ts +5 -1
  251. package/dist/shims/navigation.js +45 -10
  252. package/dist/shims/navigation.react-server.js +1 -1
  253. package/dist/shims/root-params.d.ts +15 -1
  254. package/dist/shims/root-params.js +21 -1
  255. package/dist/shims/router.d.ts +5 -7
  256. package/dist/shims/router.js +374 -94
  257. package/dist/shims/server.js +3 -2
  258. package/dist/shims/slot.js +3 -6
  259. package/dist/typegen.js +6 -5
  260. package/dist/utils/client-runtime-metadata.d.ts +2 -18
  261. package/dist/utils/client-runtime-metadata.js +31 -22
  262. package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +4 -0
  263. package/dist/{server → utils}/dev-stack-sourcemap-endpoint.js +1 -1
  264. package/dist/utils/domain-locale.d.ts +6 -3
  265. package/dist/{server → utils}/middleware-request-headers.d.ts +1 -1
  266. package/dist/{server → utils}/middleware-request-headers.js +2 -2
  267. package/dist/utils/path.d.ts +2 -1
  268. package/dist/utils/path.js +1 -1
  269. package/dist/utils/project.d.ts +52 -2
  270. package/dist/utils/project.js +230 -5
  271. package/dist/utils/protocol-headers.d.ts +17 -0
  272. package/dist/utils/protocol-headers.js +17 -0
  273. package/dist/utils/react-version.d.ts +4 -0
  274. package/dist/utils/react-version.js +44 -0
  275. package/package.json +53 -4
  276. package/dist/deploy.d.ts +0 -190
  277. package/dist/deploy.js +0 -1033
  278. package/dist/server/dev-stack-sourcemap-endpoint.d.ts +0 -4
  279. /package/dist/{cloudflare → packages/cloudflare}/src/utils/cache-control-metadata.js +0 -0
package/dist/check.d.ts CHANGED
@@ -59,22 +59,40 @@ type CheckResult = {
59
59
  declare function hasFreeCjsGlobal(content: string): boolean;
60
60
  /**
61
61
  * Scan source files for `import ... from 'next/...'` statements.
62
+ *
63
+ * `root` must be forward-slash: it is passed to `findSourceFiles` (which
64
+ * requires it) and used as the base of `path.posix.relative`, which only yields
65
+ * a canonical relative path when both operands are forward-slash.
62
66
  */
63
67
  declare function scanImports(root: string): CheckItem[];
64
68
  /**
65
69
  * Analyze next.config.js/mjs/ts for supported and unsupported options.
70
+ *
71
+ * `root` must be forward-slash — joined with `path.posix.join`. Only called
72
+ * from `runCheck`, which normalizes it.
66
73
  */
67
74
  declare function analyzeConfig(root: string): CheckItem[];
68
75
  /**
69
76
  * Check package.json dependencies for known libraries.
77
+ *
78
+ * `root` must be forward-slash — joined with `path.posix.join`. Only called
79
+ * from `runCheck`, which normalizes it.
70
80
  */
71
81
  declare function checkLibraries(root: string): CheckItem[];
72
82
  /**
73
83
  * Check file conventions (pages, app directory, middleware, etc.)
84
+ *
85
+ * `root` must be forward-slash — joined with `path.posix.join`, passed to
86
+ * `findDir`, and used as the base of `path.posix.relative`. Only called from
87
+ * `runCheck`, which normalizes it.
74
88
  */
75
89
  declare function checkConventions(root: string): CheckItem[];
76
90
  /**
77
91
  * Run the full compatibility check.
92
+ *
93
+ * `root` must be forward-slash — callers normalize it at the CLI entry, and it
94
+ * is forwarded to `scanImports` / `checkConventions` / `findDir`, which build
95
+ * paths with `path.posix.*`.
78
96
  */
79
97
  declare function runCheck(root: string): CheckResult;
80
98
  /**
package/dist/check.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { detectPackageManager, findDir } from "./utils/project.js";
2
- import { normalizePathSeparators } from "./utils/path.js";
3
2
  import fs from "node:fs";
4
3
  import path from "node:path";
5
4
  import { parseAst } from "vite";
@@ -193,7 +192,7 @@ const CONFIG_SUPPORT = {
193
192
  env: { status: "supported" },
194
193
  images: {
195
194
  status: "partial",
196
- detail: "remotePatterns validated, no local optimization"
195
+ detail: "remotePatterns validated; on-the-fly optimization via images.optimizer (Cloudflare Images), passthrough otherwise"
197
196
  },
198
197
  allowedDevOrigins: {
199
198
  status: "supported",
@@ -259,6 +258,42 @@ const CONFIG_SUPPORT = {
259
258
  status: "partial",
260
259
  detail: "config recognized; vinext does not implement navigation result caching"
261
260
  },
261
+ "experimental.middlewarePrefetch": {
262
+ status: "unsupported",
263
+ detail: "not recognized; use of this option is ignored"
264
+ },
265
+ "experimental.proxyPrefetch": {
266
+ status: "unsupported",
267
+ detail: "not recognized; use of this option is ignored"
268
+ },
269
+ "experimental.middlewareClientMaxBodySize": {
270
+ status: "unsupported",
271
+ detail: "not recognized; use of this option is ignored"
272
+ },
273
+ "experimental.proxyClientMaxBodySize": {
274
+ status: "unsupported",
275
+ detail: "not recognized; use of this option is ignored"
276
+ },
277
+ "experimental.externalMiddlewareRewritesResolve": {
278
+ status: "unsupported",
279
+ detail: "not recognized; use of this option is ignored"
280
+ },
281
+ "experimental.externalProxyRewritesResolve": {
282
+ status: "unsupported",
283
+ detail: "not recognized; use of this option is ignored"
284
+ },
285
+ "experimental.instrumentationHook": {
286
+ status: "unsupported",
287
+ detail: "not recognized; instrumentation files are enabled automatically"
288
+ },
289
+ skipMiddlewareUrlNormalize: {
290
+ status: "unsupported",
291
+ detail: "not recognized; use of this option is ignored"
292
+ },
293
+ skipProxyUrlNormalize: {
294
+ status: "unsupported",
295
+ detail: "not recognized; use of this option is ignored"
296
+ },
262
297
  "i18n.domains": {
263
298
  status: "partial",
264
299
  detail: "supported for Pages Router; App Router unchanged"
@@ -331,6 +366,11 @@ const LIBRARY_SUPPORT = {
331
366
  };
332
367
  /**
333
368
  * Recursively find all source files in a directory.
369
+ *
370
+ * `dir` must be forward-slash, and the returned paths are forward-slash too:
371
+ * each entry is joined with `path.posix.join`, which only stays canonical when
372
+ * the base already is. This keeps downstream substring checks (e.g.
373
+ * `f.includes("/api/")`) and reported paths consistent across platforms.
334
374
  */
335
375
  function findSourceFiles(dir, extensions = [
336
376
  ".ts",
@@ -343,7 +383,7 @@ function findSourceFiles(dir, extensions = [
343
383
  if (!fs.existsSync(dir)) return results;
344
384
  const entries = fs.readdirSync(dir, { withFileTypes: true });
345
385
  for (const entry of entries) {
346
- const fullPath = normalizePathSeparators(path.join(dir, entry.name));
386
+ const fullPath = path.posix.join(dir, entry.name);
347
387
  if (entry.isDirectory()) {
348
388
  if (entry.name === "node_modules" || entry.name === ".next" || entry.name === "dist" || entry.name === ".git") continue;
349
389
  results.push(...findSourceFiles(fullPath, extensions));
@@ -547,6 +587,10 @@ function hasFreeCjsGlobal(content) {
547
587
  }
548
588
  /**
549
589
  * Scan source files for `import ... from 'next/...'` statements.
590
+ *
591
+ * `root` must be forward-slash: it is passed to `findSourceFiles` (which
592
+ * requires it) and used as the base of `path.posix.relative`, which only yields
593
+ * a canonical relative path when both operands are forward-slash.
550
594
  */
551
595
  function scanImports(root) {
552
596
  const files = findSourceFiles(root);
@@ -564,7 +608,7 @@ function scanImports(root) {
564
608
  if (mod.startsWith("next/") || mod === "next" || mod === "server-only" || mod === "client-only") {
565
609
  const normalized = mod === "next" ? "next" : mod;
566
610
  if (!importUsage.has(normalized)) importUsage.set(normalized, []);
567
- const relFile = normalizePathSeparators(path.relative(root, file));
611
+ const relFile = path.posix.relative(root, file);
568
612
  const usedInFiles = importUsage.get(normalized) ?? [];
569
613
  if (!usedInFiles.includes(relFile)) usedInFiles.push(relFile);
570
614
  }
@@ -691,6 +735,9 @@ function collectConfigKeys(source) {
691
735
  }
692
736
  /**
693
737
  * Analyze next.config.js/mjs/ts for supported and unsupported options.
738
+ *
739
+ * `root` must be forward-slash — joined with `path.posix.join`. Only called
740
+ * from `runCheck`, which normalizes it.
694
741
  */
695
742
  function analyzeConfig(root) {
696
743
  const configFiles = [
@@ -702,7 +749,7 @@ function analyzeConfig(root) {
702
749
  ];
703
750
  let configPath = null;
704
751
  for (const f of configFiles) {
705
- const p = path.join(root, f);
752
+ const p = path.posix.join(root, f);
706
753
  if (fs.existsSync(p)) {
707
754
  configPath = p;
708
755
  break;
@@ -729,7 +776,9 @@ function analyzeConfig(root) {
729
776
  "transpilePackages",
730
777
  "webpack",
731
778
  "reactStrictMode",
732
- "poweredByHeader"
779
+ "poweredByHeader",
780
+ "skipMiddlewareUrlNormalize",
781
+ "skipProxyUrlNormalize"
733
782
  ]) {
734
783
  if (!present.top.has(opt)) continue;
735
784
  const support = CONFIG_SUPPORT[opt];
@@ -757,9 +806,12 @@ function analyzeConfig(root) {
757
806
  }
758
807
  /**
759
808
  * Check package.json dependencies for known libraries.
809
+ *
810
+ * `root` must be forward-slash — joined with `path.posix.join`. Only called
811
+ * from `runCheck`, which normalizes it.
760
812
  */
761
813
  function checkLibraries(root) {
762
- const pkgPath = path.join(root, "package.json");
814
+ const pkgPath = path.posix.join(root, "package.json");
763
815
  if (!fs.existsSync(pkgPath)) return [];
764
816
  const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
765
817
  const allDeps = {
@@ -777,17 +829,19 @@ function checkLibraries(root) {
777
829
  }
778
830
  /**
779
831
  * Check file conventions (pages, app directory, middleware, etc.)
832
+ *
833
+ * `root` must be forward-slash — joined with `path.posix.join`, passed to
834
+ * `findDir`, and used as the base of `path.posix.relative`. Only called from
835
+ * `runCheck`, which normalizes it.
780
836
  */
781
837
  function checkConventions(root) {
782
838
  const items = [];
783
- const pagesDir = findDir(root, "pages", path.join("src", "pages"));
784
- const appDirPath = findDir(root, "app", path.join("src", "app"));
785
- const hasPages = pagesDir !== null;
786
- const hasApp = appDirPath !== null;
787
- const hasProxy = fs.existsSync(path.join(root, "proxy.ts")) || fs.existsSync(path.join(root, "proxy.js"));
788
- const hasMiddleware = fs.existsSync(path.join(root, "middleware.ts")) || fs.existsSync(path.join(root, "middleware.js"));
839
+ const pagesDir = findDir(root, "pages", "src/pages");
840
+ const appDirPath = findDir(root, "app", "src/app");
841
+ const hasProxy = fs.existsSync(path.posix.join(root, "proxy.ts")) || fs.existsSync(path.posix.join(root, "proxy.js"));
842
+ const hasMiddleware = fs.existsSync(path.posix.join(root, "middleware.ts")) || fs.existsSync(path.posix.join(root, "middleware.js"));
789
843
  if (pagesDir !== null) {
790
- const isSrc = pagesDir.includes(path.join("src", "pages"));
844
+ const isSrc = pagesDir.includes("src/pages");
791
845
  items.push({
792
846
  name: isSrc ? "Pages Router (src/pages/)" : "Pages Router (pages/)",
793
847
  status: "supported"
@@ -813,7 +867,7 @@ function checkConventions(root) {
813
867
  });
814
868
  }
815
869
  if (appDirPath !== null) {
816
- const isSrc = appDirPath.includes(path.join("src", "app"));
870
+ const isSrc = appDirPath.includes("src/app");
817
871
  items.push({
818
872
  name: isSrc ? "App Router (src/app/)" : "App Router (app/)",
819
873
  status: "supported"
@@ -858,12 +912,12 @@ function checkConventions(root) {
858
912
  name: "middleware.ts (deprecated in Next.js 16)",
859
913
  status: "supported"
860
914
  });
861
- if (!hasPages && !hasApp) items.push({
915
+ if (pagesDir === null && appDirPath === null) items.push({
862
916
  name: "No pages/ or app/ directory found",
863
917
  status: "unsupported",
864
918
  detail: "vinext requires a pages/ or app/ directory"
865
919
  });
866
- const pkgPath = path.join(root, "package.json");
920
+ const pkgPath = path.posix.join(root, "package.json");
867
921
  if (fs.existsSync(pkgPath)) {
868
922
  if (JSON.parse(fs.readFileSync(pkgPath, "utf-8")).type !== "module") items.push({
869
923
  name: "Missing \"type\": \"module\" in package.json",
@@ -877,7 +931,7 @@ function checkConventions(root) {
877
931
  const cjsGlobalFiles = [];
878
932
  for (const file of allSourceFiles) {
879
933
  const content = fs.readFileSync(file, "utf-8");
880
- const rel = normalizePathSeparators(path.relative(root, file));
934
+ const rel = path.posix.relative(root, file);
881
935
  if (viewTransitionRegex.test(content)) viewTransitionFiles.push(rel);
882
936
  if (hasFreeCjsGlobal(content)) cjsGlobalFiles.push(rel);
883
937
  }
@@ -892,7 +946,7 @@ function checkConventions(root) {
892
946
  "postcss.config.js",
893
947
  "postcss.config.cjs"
894
948
  ]) {
895
- const configPath = path.join(root, configFile);
949
+ const configPath = path.posix.join(root, configFile);
896
950
  if (fs.existsSync(configPath)) {
897
951
  const content = fs.readFileSync(configPath, "utf-8");
898
952
  if (/plugins\s*:\s*\[\s*['"]/.test(content)) items.push({
@@ -913,6 +967,10 @@ function checkConventions(root) {
913
967
  }
914
968
  /**
915
969
  * Run the full compatibility check.
970
+ *
971
+ * `root` must be forward-slash — callers normalize it at the CLI entry, and it
972
+ * is forwarded to `scanImports` / `checkConventions` / `findDir`, which build
973
+ * paths with `path.posix.*`.
916
974
  */
917
975
  function runCheck(root) {
918
976
  const imports = scanImports(root);
@@ -18,7 +18,6 @@ type ParsedArgs = {
18
18
  precompress?: boolean;
19
19
  positionals?: string[];
20
20
  };
21
- declare function parsePositiveIntegerArg(raw: string, flag: string): number;
22
21
  /**
23
22
  * Parse CLI arguments into a structured object.
24
23
  *
@@ -30,4 +29,4 @@ declare function parsePositiveIntegerArg(raw: string, flag: string): number;
30
29
  */
31
30
  declare function parseArgs(args: string[]): ParsedArgs;
32
31
  //#endregion
33
- export { parseArgs, parsePositiveIntegerArg };
32
+ export { parseArgs };
package/dist/cli-args.js CHANGED
@@ -121,4 +121,4 @@ function parseArgs(args) {
121
121
  return result;
122
122
  }
123
123
  //#endregion
124
- export { parseArgs, parsePositiveIntegerArg };
124
+ export { parseArgs };
@@ -0,0 +1,12 @@
1
+ import { Plugin, ServerOptions } from "vite";
2
+
3
+ //#region src/cli-dev-config.d.ts
4
+ type DevServerCliOptions = {
5
+ port?: number;
6
+ hostname?: string;
7
+ };
8
+ declare function applyDevServerDefaults(server: ServerOptions, options: DevServerCliOptions): void;
9
+ declare function createDevServerConfigPlugin(options: DevServerCliOptions): Plugin;
10
+ declare function normalizeDevServerHostname(host: string | boolean | undefined): string;
11
+ //#endregion
12
+ export { DevServerCliOptions, applyDevServerDefaults, createDevServerConfigPlugin, normalizeDevServerHostname };
@@ -0,0 +1,23 @@
1
+ //#region src/cli-dev-config.ts
2
+ function applyDevServerDefaults(server, options) {
3
+ server.port = options.port ?? server.port ?? 3e3;
4
+ server.host = options.hostname ?? server.host ?? "localhost";
5
+ }
6
+ function createDevServerConfigPlugin(options) {
7
+ return {
8
+ name: "vinext:dev-server-config",
9
+ enforce: "post",
10
+ config: {
11
+ order: "post",
12
+ handler(config) {
13
+ applyDevServerDefaults(config.server ??= {}, options);
14
+ }
15
+ }
16
+ };
17
+ }
18
+ function normalizeDevServerHostname(host) {
19
+ if (typeof host === "string") return host;
20
+ return host === true ? "0.0.0.0" : "localhost";
21
+ }
22
+ //#endregion
23
+ export { applyDevServerDefaults, createDevServerConfigPlugin, normalizeDevServerHostname };