vinext 0.0.0 → 0.0.1

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 (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/build/static-export.d.ts +78 -0
  4. package/dist/build/static-export.d.ts.map +1 -0
  5. package/dist/build/static-export.js +553 -0
  6. package/dist/build/static-export.js.map +1 -0
  7. package/dist/check.d.ts +52 -0
  8. package/dist/check.d.ts.map +1 -0
  9. package/dist/check.js +483 -0
  10. package/dist/check.js.map +1 -0
  11. package/dist/cli.d.ts +15 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +565 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/client/entry.d.ts +2 -0
  16. package/dist/client/entry.d.ts.map +1 -0
  17. package/dist/client/entry.js +85 -0
  18. package/dist/client/entry.js.map +1 -0
  19. package/dist/cloudflare/index.d.ts +8 -0
  20. package/dist/cloudflare/index.d.ts.map +1 -0
  21. package/dist/cloudflare/index.js +8 -0
  22. package/dist/cloudflare/index.js.map +1 -0
  23. package/dist/cloudflare/kv-cache-handler.d.ts +68 -0
  24. package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -0
  25. package/dist/cloudflare/kv-cache-handler.js +304 -0
  26. package/dist/cloudflare/kv-cache-handler.js.map +1 -0
  27. package/dist/cloudflare/tpr.d.ts +78 -0
  28. package/dist/cloudflare/tpr.d.ts.map +1 -0
  29. package/dist/cloudflare/tpr.js +672 -0
  30. package/dist/cloudflare/tpr.js.map +1 -0
  31. package/dist/config/config-matchers.d.ts +106 -0
  32. package/dist/config/config-matchers.d.ts.map +1 -0
  33. package/dist/config/config-matchers.js +499 -0
  34. package/dist/config/config-matchers.js.map +1 -0
  35. package/dist/config/next-config.d.ts +153 -0
  36. package/dist/config/next-config.d.ts.map +1 -0
  37. package/dist/config/next-config.js +274 -0
  38. package/dist/config/next-config.js.map +1 -0
  39. package/dist/deploy.d.ts +87 -0
  40. package/dist/deploy.d.ts.map +1 -0
  41. package/dist/deploy.js +644 -0
  42. package/dist/deploy.js.map +1 -0
  43. package/dist/index.d.ts +156 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +3287 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/init.d.ts +55 -0
  48. package/dist/init.d.ts.map +1 -0
  49. package/dist/init.js +201 -0
  50. package/dist/init.js.map +1 -0
  51. package/dist/routing/app-router.d.ts +96 -0
  52. package/dist/routing/app-router.d.ts.map +1 -0
  53. package/dist/routing/app-router.js +815 -0
  54. package/dist/routing/app-router.js.map +1 -0
  55. package/dist/routing/pages-router.d.ts +52 -0
  56. package/dist/routing/pages-router.d.ts.map +1 -0
  57. package/dist/routing/pages-router.js +239 -0
  58. package/dist/routing/pages-router.js.map +1 -0
  59. package/dist/server/api-handler.d.ts +18 -0
  60. package/dist/server/api-handler.d.ts.map +1 -0
  61. package/dist/server/api-handler.js +169 -0
  62. package/dist/server/api-handler.js.map +1 -0
  63. package/dist/server/app-dev-server.d.ts +42 -0
  64. package/dist/server/app-dev-server.d.ts.map +1 -0
  65. package/dist/server/app-dev-server.js +2718 -0
  66. package/dist/server/app-dev-server.js.map +1 -0
  67. package/dist/server/app-router-entry.d.ts +18 -0
  68. package/dist/server/app-router-entry.d.ts.map +1 -0
  69. package/dist/server/app-router-entry.js +34 -0
  70. package/dist/server/app-router-entry.js.map +1 -0
  71. package/dist/server/dev-server.d.ts +40 -0
  72. package/dist/server/dev-server.d.ts.map +1 -0
  73. package/dist/server/dev-server.js +758 -0
  74. package/dist/server/dev-server.js.map +1 -0
  75. package/dist/server/html.d.ts +22 -0
  76. package/dist/server/html.d.ts.map +1 -0
  77. package/dist/server/html.js +29 -0
  78. package/dist/server/html.js.map +1 -0
  79. package/dist/server/image-optimization.d.ts +56 -0
  80. package/dist/server/image-optimization.d.ts.map +1 -0
  81. package/dist/server/image-optimization.js +103 -0
  82. package/dist/server/image-optimization.js.map +1 -0
  83. package/dist/server/instrumentation.d.ts +68 -0
  84. package/dist/server/instrumentation.d.ts.map +1 -0
  85. package/dist/server/instrumentation.js +90 -0
  86. package/dist/server/instrumentation.js.map +1 -0
  87. package/dist/server/isr-cache.d.ts +61 -0
  88. package/dist/server/isr-cache.d.ts.map +1 -0
  89. package/dist/server/isr-cache.js +134 -0
  90. package/dist/server/isr-cache.js.map +1 -0
  91. package/dist/server/metadata-routes.d.ts +103 -0
  92. package/dist/server/metadata-routes.d.ts.map +1 -0
  93. package/dist/server/metadata-routes.js +270 -0
  94. package/dist/server/metadata-routes.js.map +1 -0
  95. package/dist/server/middleware.d.ts +77 -0
  96. package/dist/server/middleware.d.ts.map +1 -0
  97. package/dist/server/middleware.js +228 -0
  98. package/dist/server/middleware.js.map +1 -0
  99. package/dist/server/prod-server.d.ts +78 -0
  100. package/dist/server/prod-server.d.ts.map +1 -0
  101. package/dist/server/prod-server.js +712 -0
  102. package/dist/server/prod-server.js.map +1 -0
  103. package/dist/shims/amp.d.ts +17 -0
  104. package/dist/shims/amp.d.ts.map +1 -0
  105. package/dist/shims/amp.js +21 -0
  106. package/dist/shims/amp.js.map +1 -0
  107. package/dist/shims/app.d.ts +12 -0
  108. package/dist/shims/app.d.ts.map +1 -0
  109. package/dist/shims/app.js +2 -0
  110. package/dist/shims/app.js.map +1 -0
  111. package/dist/shims/cache-runtime.d.ts +68 -0
  112. package/dist/shims/cache-runtime.d.ts.map +1 -0
  113. package/dist/shims/cache-runtime.js +437 -0
  114. package/dist/shims/cache-runtime.js.map +1 -0
  115. package/dist/shims/cache.d.ts +243 -0
  116. package/dist/shims/cache.d.ts.map +1 -0
  117. package/dist/shims/cache.js +415 -0
  118. package/dist/shims/cache.js.map +1 -0
  119. package/dist/shims/client-only.d.ts +18 -0
  120. package/dist/shims/client-only.d.ts.map +1 -0
  121. package/dist/shims/client-only.js +18 -0
  122. package/dist/shims/client-only.js.map +1 -0
  123. package/dist/shims/config.d.ts +27 -0
  124. package/dist/shims/config.d.ts.map +1 -0
  125. package/dist/shims/config.js +30 -0
  126. package/dist/shims/config.js.map +1 -0
  127. package/dist/shims/constants.d.ts +13 -0
  128. package/dist/shims/constants.d.ts.map +1 -0
  129. package/dist/shims/constants.js +13 -0
  130. package/dist/shims/constants.js.map +1 -0
  131. package/dist/shims/document.d.ts +33 -0
  132. package/dist/shims/document.d.ts.map +1 -0
  133. package/dist/shims/document.js +32 -0
  134. package/dist/shims/document.js.map +1 -0
  135. package/dist/shims/dynamic.d.ts +33 -0
  136. package/dist/shims/dynamic.d.ts.map +1 -0
  137. package/dist/shims/dynamic.js +148 -0
  138. package/dist/shims/dynamic.js.map +1 -0
  139. package/dist/shims/error-boundary.d.ts +33 -0
  140. package/dist/shims/error-boundary.d.ts.map +1 -0
  141. package/dist/shims/error-boundary.js +88 -0
  142. package/dist/shims/error-boundary.js.map +1 -0
  143. package/dist/shims/error.d.ts +16 -0
  144. package/dist/shims/error.d.ts.map +1 -0
  145. package/dist/shims/error.js +45 -0
  146. package/dist/shims/error.js.map +1 -0
  147. package/dist/shims/fetch-cache.d.ts +61 -0
  148. package/dist/shims/fetch-cache.d.ts.map +1 -0
  149. package/dist/shims/fetch-cache.js +307 -0
  150. package/dist/shims/fetch-cache.js.map +1 -0
  151. package/dist/shims/font-google.d.ts +122 -0
  152. package/dist/shims/font-google.d.ts.map +1 -0
  153. package/dist/shims/font-google.js +387 -0
  154. package/dist/shims/font-google.js.map +1 -0
  155. package/dist/shims/font-local.d.ts +61 -0
  156. package/dist/shims/font-local.d.ts.map +1 -0
  157. package/dist/shims/font-local.js +303 -0
  158. package/dist/shims/font-local.js.map +1 -0
  159. package/dist/shims/form.d.ts +30 -0
  160. package/dist/shims/form.d.ts.map +1 -0
  161. package/dist/shims/form.js +78 -0
  162. package/dist/shims/form.js.map +1 -0
  163. package/dist/shims/head-state.d.ts +11 -0
  164. package/dist/shims/head-state.d.ts.map +1 -0
  165. package/dist/shims/head-state.js +47 -0
  166. package/dist/shims/head-state.js.map +1 -0
  167. package/dist/shims/head.d.ts +28 -0
  168. package/dist/shims/head.d.ts.map +1 -0
  169. package/dist/shims/head.js +148 -0
  170. package/dist/shims/head.js.map +1 -0
  171. package/dist/shims/headers.d.ts +150 -0
  172. package/dist/shims/headers.d.ts.map +1 -0
  173. package/dist/shims/headers.js +412 -0
  174. package/dist/shims/headers.js.map +1 -0
  175. package/dist/shims/image-config.d.ts +30 -0
  176. package/dist/shims/image-config.d.ts.map +1 -0
  177. package/dist/shims/image-config.js +91 -0
  178. package/dist/shims/image-config.js.map +1 -0
  179. package/dist/shims/image.d.ts +63 -0
  180. package/dist/shims/image.d.ts.map +1 -0
  181. package/dist/shims/image.js +284 -0
  182. package/dist/shims/image.js.map +1 -0
  183. package/dist/shims/internal/api-utils.d.ts +12 -0
  184. package/dist/shims/internal/api-utils.d.ts.map +1 -0
  185. package/dist/shims/internal/api-utils.js +7 -0
  186. package/dist/shims/internal/api-utils.js.map +1 -0
  187. package/dist/shims/internal/app-router-context.d.ts +21 -0
  188. package/dist/shims/internal/app-router-context.d.ts.map +1 -0
  189. package/dist/shims/internal/app-router-context.js +15 -0
  190. package/dist/shims/internal/app-router-context.js.map +1 -0
  191. package/dist/shims/internal/cookies.d.ts +9 -0
  192. package/dist/shims/internal/cookies.d.ts.map +1 -0
  193. package/dist/shims/internal/cookies.js +9 -0
  194. package/dist/shims/internal/cookies.js.map +1 -0
  195. package/dist/shims/internal/router-context.d.ts +2 -0
  196. package/dist/shims/internal/router-context.d.ts.map +1 -0
  197. package/dist/shims/internal/router-context.js +9 -0
  198. package/dist/shims/internal/router-context.js.map +1 -0
  199. package/dist/shims/internal/utils.d.ts +48 -0
  200. package/dist/shims/internal/utils.d.ts.map +1 -0
  201. package/dist/shims/internal/utils.js +35 -0
  202. package/dist/shims/internal/utils.js.map +1 -0
  203. package/dist/shims/internal/work-unit-async-storage.d.ts +12 -0
  204. package/dist/shims/internal/work-unit-async-storage.d.ts.map +1 -0
  205. package/dist/shims/internal/work-unit-async-storage.js +13 -0
  206. package/dist/shims/internal/work-unit-async-storage.js.map +1 -0
  207. package/dist/shims/layout-segment-context.d.ts +21 -0
  208. package/dist/shims/layout-segment-context.d.ts.map +1 -0
  209. package/dist/shims/layout-segment-context.js +27 -0
  210. package/dist/shims/layout-segment-context.js.map +1 -0
  211. package/dist/shims/legacy-image.d.ts +52 -0
  212. package/dist/shims/legacy-image.d.ts.map +1 -0
  213. package/dist/shims/legacy-image.js +46 -0
  214. package/dist/shims/legacy-image.js.map +1 -0
  215. package/dist/shims/link.d.ts +48 -0
  216. package/dist/shims/link.d.ts.map +1 -0
  217. package/dist/shims/link.js +395 -0
  218. package/dist/shims/link.js.map +1 -0
  219. package/dist/shims/metadata.d.ts +184 -0
  220. package/dist/shims/metadata.d.ts.map +1 -0
  221. package/dist/shims/metadata.js +472 -0
  222. package/dist/shims/metadata.js.map +1 -0
  223. package/dist/shims/navigation-state.d.ts +14 -0
  224. package/dist/shims/navigation-state.d.ts.map +1 -0
  225. package/dist/shims/navigation-state.js +77 -0
  226. package/dist/shims/navigation-state.js.map +1 -0
  227. package/dist/shims/navigation.d.ts +201 -0
  228. package/dist/shims/navigation.d.ts.map +1 -0
  229. package/dist/shims/navigation.js +672 -0
  230. package/dist/shims/navigation.js.map +1 -0
  231. package/dist/shims/og.d.ts +20 -0
  232. package/dist/shims/og.d.ts.map +1 -0
  233. package/dist/shims/og.js +19 -0
  234. package/dist/shims/og.js.map +1 -0
  235. package/dist/shims/router-state.d.ts +11 -0
  236. package/dist/shims/router-state.d.ts.map +1 -0
  237. package/dist/shims/router-state.js +56 -0
  238. package/dist/shims/router-state.js.map +1 -0
  239. package/dist/shims/router.d.ts +103 -0
  240. package/dist/shims/router.d.ts.map +1 -0
  241. package/dist/shims/router.js +536 -0
  242. package/dist/shims/router.js.map +1 -0
  243. package/dist/shims/script.d.ts +58 -0
  244. package/dist/shims/script.d.ts.map +1 -0
  245. package/dist/shims/script.js +163 -0
  246. package/dist/shims/script.js.map +1 -0
  247. package/dist/shims/server-only.d.ts +19 -0
  248. package/dist/shims/server-only.d.ts.map +1 -0
  249. package/dist/shims/server-only.js +19 -0
  250. package/dist/shims/server-only.js.map +1 -0
  251. package/dist/shims/server.d.ts +178 -0
  252. package/dist/shims/server.d.ts.map +1 -0
  253. package/dist/shims/server.js +377 -0
  254. package/dist/shims/server.js.map +1 -0
  255. package/dist/shims/web-vitals.d.ts +24 -0
  256. package/dist/shims/web-vitals.d.ts.map +1 -0
  257. package/dist/shims/web-vitals.js +17 -0
  258. package/dist/shims/web-vitals.js.map +1 -0
  259. package/dist/utils/hash.d.ts +6 -0
  260. package/dist/utils/hash.d.ts.map +1 -0
  261. package/dist/utils/hash.js +20 -0
  262. package/dist/utils/hash.js.map +1 -0
  263. package/dist/utils/project.d.ts +36 -0
  264. package/dist/utils/project.d.ts.map +1 -0
  265. package/dist/utils/project.js +112 -0
  266. package/dist/utils/project.js.map +1 -0
  267. package/dist/utils/query.d.ts +10 -0
  268. package/dist/utils/query.d.ts.map +1 -0
  269. package/dist/utils/query.js +27 -0
  270. package/dist/utils/query.js.map +1 -0
  271. package/package.json +65 -7
  272. package/index.js +0 -1
package/dist/cli.js ADDED
@@ -0,0 +1,565 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * vinext CLI — drop-in replacement for the `next` command
4
+ *
5
+ * vinext dev Start development server (Vite)
6
+ * vinext build Build for production
7
+ * vinext start Start production server
8
+ * vinext deploy Deploy to Cloudflare Workers
9
+ * vinext lint Run linter (delegates to eslint/oxlint)
10
+ *
11
+ * Automatically configures Vite with the vinext plugin — no vite.config.ts
12
+ * needed for most Next.js apps.
13
+ */
14
+ import vinext, { clientOutputConfig, clientTreeshakeConfig } from "./index.js";
15
+ import path from "node:path";
16
+ import fs from "node:fs";
17
+ import { createRequire } from "node:module";
18
+ import { execSync } from "node:child_process";
19
+ import { deploy as runDeploy } from "./deploy.js";
20
+ import { runCheck, formatReport } from "./check.js";
21
+ import { init as runInit } from "./init.js";
22
+ let _viteModule = null;
23
+ /**
24
+ * Dynamically load Vite from the project root. Falls back to the bundled
25
+ * copy if the project doesn't have its own Vite installation.
26
+ */
27
+ async function loadVite() {
28
+ if (_viteModule)
29
+ return _viteModule;
30
+ const projectRoot = process.cwd();
31
+ let vitePath;
32
+ try {
33
+ // Resolve "vite" from the project root, not from vinext's location
34
+ const require = createRequire(path.join(projectRoot, "package.json"));
35
+ vitePath = require.resolve("vite");
36
+ }
37
+ catch {
38
+ // Fallback: use the Vite that ships with vinext (works for non-linked installs)
39
+ vitePath = "vite";
40
+ }
41
+ const vite = (await import(/* @vite-ignore */ vitePath));
42
+ _viteModule = vite;
43
+ return vite;
44
+ }
45
+ /**
46
+ * Get the Vite version string. Returns "unknown" before loadVite() is called.
47
+ */
48
+ function getViteVersion() {
49
+ return _viteModule?.version ?? "unknown";
50
+ }
51
+ const VERSION = "0.0.1";
52
+ // ─── CLI Argument Parsing ──────────────────────────────────────────────────────
53
+ const command = process.argv[2];
54
+ const rawArgs = process.argv.slice(3);
55
+ function parseArgs(args) {
56
+ const result = {};
57
+ for (let i = 0; i < args.length; i++) {
58
+ const arg = args[i];
59
+ if (arg === "--help" || arg === "-h") {
60
+ result.help = true;
61
+ }
62
+ else if (arg === "--turbopack") {
63
+ result.turbopack = true; // no-op, accepted for script compat
64
+ }
65
+ else if (arg === "--experimental-https") {
66
+ result.experimental = true; // no-op
67
+ }
68
+ else if (arg === "--port" || arg === "-p") {
69
+ result.port = parseInt(args[++i], 10);
70
+ }
71
+ else if (arg.startsWith("--port=")) {
72
+ result.port = parseInt(arg.split("=")[1], 10);
73
+ }
74
+ else if (arg === "--hostname" || arg === "-H") {
75
+ result.hostname = args[++i];
76
+ }
77
+ else if (arg.startsWith("--hostname=")) {
78
+ result.hostname = arg.split("=")[1];
79
+ }
80
+ }
81
+ return result;
82
+ }
83
+ /** Parse a numeric flag like --tpr-coverage 95 or --tpr-coverage=95. */
84
+ function parseNumericFlag(args, flag) {
85
+ const idx = args.indexOf(flag);
86
+ if (idx !== -1 && args[idx + 1]) {
87
+ const val = parseInt(args[idx + 1], 10);
88
+ if (!isNaN(val))
89
+ return val;
90
+ }
91
+ const eq = args.find((a) => a.startsWith(`${flag}=`));
92
+ if (eq) {
93
+ const val = parseInt(eq.split("=")[1], 10);
94
+ if (!isNaN(val))
95
+ return val;
96
+ }
97
+ return undefined;
98
+ }
99
+ // ─── Auto-configuration ───────────────────────────────────────────────────────
100
+ /**
101
+ * Build the Vite config automatically. If a vite.config.ts exists in the
102
+ * project, Vite will merge our config with it (theirs takes precedence).
103
+ * If there's no vite.config, this provides everything needed.
104
+ */
105
+ function hasAppDir() {
106
+ return (fs.existsSync(path.join(process.cwd(), "app")) ||
107
+ fs.existsSync(path.join(process.cwd(), "src", "app")));
108
+ }
109
+ function hasViteConfig() {
110
+ return (fs.existsSync(path.join(process.cwd(), "vite.config.ts")) ||
111
+ fs.existsSync(path.join(process.cwd(), "vite.config.js")) ||
112
+ fs.existsSync(path.join(process.cwd(), "vite.config.mjs")));
113
+ }
114
+ function buildViteConfig(overrides = {}) {
115
+ const hasConfig = hasViteConfig();
116
+ // If a vite.config exists, let Vite load it — only set root and overrides.
117
+ // The user's config already has vinext() + rsc() plugins configured.
118
+ // Adding them here too would duplicate the RSC transform (causes
119
+ // "Identifier has already been declared" errors in production builds).
120
+ if (hasConfig) {
121
+ return {
122
+ root: process.cwd(),
123
+ ...overrides,
124
+ };
125
+ }
126
+ // No vite.config — auto-configure everything.
127
+ // vinext() auto-registers @vitejs/plugin-rsc when app/ is detected,
128
+ // so we only need vinext() in the plugins array.
129
+ const config = {
130
+ root: process.cwd(),
131
+ configFile: false,
132
+ plugins: [vinext()],
133
+ // Deduplicate React packages to prevent "Invalid hook call" errors
134
+ // when vinext is symlinked (bun link / npm link) and both vinext's
135
+ // and the project's node_modules contain React.
136
+ resolve: {
137
+ dedupe: [
138
+ "react",
139
+ "react-dom",
140
+ "react/jsx-runtime",
141
+ "react/jsx-dev-runtime",
142
+ ],
143
+ },
144
+ ...overrides,
145
+ };
146
+ return config;
147
+ }
148
+ // ─── Commands ─────────────────────────────────────────────────────────────────
149
+ async function dev() {
150
+ const parsed = parseArgs(rawArgs);
151
+ if (parsed.help)
152
+ return printHelp("dev");
153
+ const vite = await loadVite();
154
+ const port = parsed.port ?? 3000;
155
+ const host = parsed.hostname ?? "localhost";
156
+ console.log(`\n vinext dev (Vite ${getViteVersion()})\n`);
157
+ const config = buildViteConfig({
158
+ server: { port, host },
159
+ });
160
+ const server = await vite.createServer(config);
161
+ await server.listen();
162
+ server.printUrls();
163
+ }
164
+ async function buildApp() {
165
+ const parsed = parseArgs(rawArgs);
166
+ if (parsed.help)
167
+ return printHelp("build");
168
+ const vite = await loadVite();
169
+ console.log(`\n vinext build (Vite ${getViteVersion()})\n`);
170
+ const isApp = hasAppDir();
171
+ if (isApp) {
172
+ // App Router: use createBuilder for multi-environment RSC builds
173
+ const config = buildViteConfig();
174
+ const builder = await vite.createBuilder(config);
175
+ await builder.buildApp();
176
+ }
177
+ else {
178
+ // Pages Router: client + SSR builds
179
+ const appRoot = process.cwd();
180
+ console.log(" Building client...");
181
+ await vite.build({
182
+ root: appRoot,
183
+ plugins: [vinext()],
184
+ build: {
185
+ outDir: "dist/client",
186
+ manifest: true,
187
+ ssrManifest: true,
188
+ rollupOptions: {
189
+ input: "virtual:vinext-client-entry",
190
+ output: clientOutputConfig,
191
+ treeshake: clientTreeshakeConfig,
192
+ },
193
+ },
194
+ });
195
+ console.log(" Building server...");
196
+ await vite.build({
197
+ root: appRoot,
198
+ plugins: [vinext()],
199
+ build: {
200
+ outDir: "dist/server",
201
+ ssr: "virtual:vinext-server-entry",
202
+ rollupOptions: {
203
+ output: {
204
+ entryFileNames: "entry.js",
205
+ },
206
+ },
207
+ },
208
+ });
209
+ }
210
+ console.log("\n Build complete. Run `vinext start` to start the production server.\n");
211
+ }
212
+ async function start() {
213
+ const parsed = parseArgs(rawArgs);
214
+ if (parsed.help)
215
+ return printHelp("start");
216
+ const port = parsed.port ?? parseInt(process.env.PORT ?? "3000", 10);
217
+ const host = parsed.hostname ?? "0.0.0.0";
218
+ console.log(`\n vinext start (port ${port})\n`);
219
+ const { startProdServer } = (await import(
220
+ /* @vite-ignore */ "./server/prod-server.js"));
221
+ await startProdServer({
222
+ port,
223
+ host,
224
+ outDir: path.resolve(process.cwd(), "dist"),
225
+ });
226
+ }
227
+ async function lint() {
228
+ const parsed = parseArgs(rawArgs);
229
+ if (parsed.help)
230
+ return printHelp("lint");
231
+ console.log(`\n vinext lint\n`);
232
+ // Try oxlint first (fast), fall back to eslint
233
+ const cwd = process.cwd();
234
+ const hasOxlint = fs.existsSync(path.join(cwd, "node_modules", ".bin", "oxlint"));
235
+ const hasEslint = fs.existsSync(path.join(cwd, "node_modules", ".bin", "eslint"));
236
+ // Check for next lint config (eslint-config-next)
237
+ const hasNextLintConfig = fs.existsSync(path.join(cwd, ".eslintrc.json")) ||
238
+ fs.existsSync(path.join(cwd, ".eslintrc.js")) ||
239
+ fs.existsSync(path.join(cwd, ".eslintrc.cjs")) ||
240
+ fs.existsSync(path.join(cwd, "eslint.config.js")) ||
241
+ fs.existsSync(path.join(cwd, "eslint.config.mjs"));
242
+ try {
243
+ if (hasEslint && hasNextLintConfig) {
244
+ console.log(" Using eslint (with existing config)\n");
245
+ execSync("npx eslint .", { cwd, stdio: "inherit" });
246
+ }
247
+ else if (hasOxlint) {
248
+ console.log(" Using oxlint\n");
249
+ execSync("npx oxlint .", { cwd, stdio: "inherit" });
250
+ }
251
+ else if (hasEslint) {
252
+ console.log(" Using eslint\n");
253
+ execSync("npx eslint .", { cwd, stdio: "inherit" });
254
+ }
255
+ else {
256
+ console.log(" No linter found. Install eslint or oxlint:\n\n" +
257
+ " npm install -D eslint eslint-config-next\n" +
258
+ " # or\n" +
259
+ " npm install -D oxlint\n");
260
+ process.exit(1);
261
+ }
262
+ console.log("\n Lint passed.\n");
263
+ }
264
+ catch {
265
+ process.exit(1);
266
+ }
267
+ }
268
+ async function deployCommand() {
269
+ const parsed = parseArgs(rawArgs);
270
+ if (parsed.help)
271
+ return printHelp("deploy");
272
+ await loadVite();
273
+ console.log(`\n vinext deploy (Vite ${getViteVersion()})\n`);
274
+ // Parse deploy-specific flags
275
+ const preview = rawArgs.includes("--preview");
276
+ const skipBuild = rawArgs.includes("--skip-build");
277
+ const dryRun = rawArgs.includes("--dry-run");
278
+ const experimentalTPR = rawArgs.includes("--experimental-tpr");
279
+ // Parse --name flag
280
+ let name;
281
+ const nameIdx = rawArgs.indexOf("--name");
282
+ if (nameIdx !== -1 && rawArgs[nameIdx + 1]) {
283
+ name = rawArgs[nameIdx + 1];
284
+ }
285
+ else {
286
+ const nameEq = rawArgs.find((a) => a.startsWith("--name="));
287
+ if (nameEq)
288
+ name = nameEq.split("=")[1];
289
+ }
290
+ // Parse TPR flags
291
+ const tprCoverage = parseNumericFlag(rawArgs, "--tpr-coverage");
292
+ const tprLimit = parseNumericFlag(rawArgs, "--tpr-limit");
293
+ const tprWindow = parseNumericFlag(rawArgs, "--tpr-window");
294
+ await runDeploy({
295
+ root: process.cwd(),
296
+ preview,
297
+ skipBuild,
298
+ dryRun,
299
+ name,
300
+ experimentalTPR,
301
+ tprCoverage,
302
+ tprLimit,
303
+ tprWindow,
304
+ });
305
+ }
306
+ async function check() {
307
+ const parsed = parseArgs(rawArgs);
308
+ if (parsed.help)
309
+ return printHelp("check");
310
+ const root = process.cwd();
311
+ console.log(`\n vinext check\n`);
312
+ console.log(" Scanning project...\n");
313
+ const result = runCheck(root);
314
+ console.log(formatReport(result));
315
+ }
316
+ async function initCommand() {
317
+ const parsed = parseArgs(rawArgs);
318
+ if (parsed.help)
319
+ return printHelp("init");
320
+ console.log(`\n vinext init\n`);
321
+ // Parse init-specific flags
322
+ const port = parsed.port ?? 3001;
323
+ const skipCheck = rawArgs.includes("--skip-check");
324
+ const force = rawArgs.includes("--force");
325
+ await runInit({
326
+ root: process.cwd(),
327
+ port,
328
+ skipCheck,
329
+ force,
330
+ });
331
+ }
332
+ // ─── Help ─────────────────────────────────────────────────────────────────────
333
+ function printHelp(cmd) {
334
+ if (cmd === "dev") {
335
+ console.log(`
336
+ vinext dev - Start development server
337
+
338
+ Usage: vinext dev [options]
339
+
340
+ Options:
341
+ -p, --port <port> Port to listen on (default: 3000)
342
+ -H, --hostname <host> Hostname to bind to (default: localhost)
343
+ --turbopack Accepted for compatibility (no-op, Vite is always used)
344
+ -h, --help Show this help
345
+ `);
346
+ return;
347
+ }
348
+ if (cmd === "build") {
349
+ console.log(`
350
+ vinext build - Build for production
351
+
352
+ Usage: vinext build [options]
353
+
354
+ Automatically detects App Router (app/) or Pages Router (pages/) and
355
+ runs the appropriate multi-environment build via Vite.
356
+
357
+ Options:
358
+ -h, --help Show this help
359
+ `);
360
+ return;
361
+ }
362
+ if (cmd === "start") {
363
+ console.log(`
364
+ vinext start - Start production server
365
+
366
+ Usage: vinext start [options]
367
+
368
+ Serves the output from \`vinext build\`. Supports SSR, static files,
369
+ compression, and all middleware.
370
+
371
+ Options:
372
+ -p, --port <port> Port to listen on (default: 3000, or PORT env)
373
+ -H, --hostname <host> Hostname to bind to (default: 0.0.0.0)
374
+ -h, --help Show this help
375
+ `);
376
+ return;
377
+ }
378
+ if (cmd === "deploy") {
379
+ console.log(`
380
+ vinext deploy - Deploy to Cloudflare Workers
381
+
382
+ Usage: vinext deploy [options]
383
+
384
+ One-command deployment to Cloudflare Workers. Automatically:
385
+ - Detects App Router or Pages Router
386
+ - Generates wrangler.jsonc, worker/index.ts, vite.config.ts if missing
387
+ - Installs @cloudflare/vite-plugin and wrangler if needed
388
+ - Builds the project with Vite
389
+ - Deploys via wrangler
390
+
391
+ Options:
392
+ --preview Deploy to a preview environment
393
+ --name <name> Custom Worker name (default: from package.json)
394
+ --skip-build Skip the build step (use existing dist/)
395
+ --dry-run Generate config files without building or deploying
396
+ -h, --help Show this help
397
+
398
+ Experimental:
399
+ --experimental-tpr Enable Traffic-aware Pre-Rendering
400
+ --tpr-coverage <pct> Traffic coverage target, 0–100 (default: 90)
401
+ --tpr-limit <count> Hard cap on pages to pre-render (default: 1000)
402
+ --tpr-window <hours> Analytics lookback window in hours (default: 24)
403
+
404
+ TPR (Traffic-aware Pre-Rendering) uses Cloudflare zone analytics to determine
405
+ which pages get the most traffic and pre-renders them into KV cache during
406
+ deploy. This feature is experimental and must be explicitly enabled. Requires
407
+ a custom domain (zone analytics are unavailable on *.workers.dev) and the
408
+ CLOUDFLARE_API_TOKEN environment variable with Zone.Analytics read permission.
409
+
410
+ Examples:
411
+ vinext deploy Build and deploy to production
412
+ vinext deploy --preview Deploy to a preview URL
413
+ vinext deploy --dry-run See what files would be generated
414
+ vinext deploy --name my-app Deploy with a custom Worker name
415
+ vinext deploy --experimental-tpr Enable TPR during deploy
416
+ vinext deploy --experimental-tpr --tpr-coverage 95 Cover 95% of traffic
417
+ vinext deploy --experimental-tpr --tpr-limit 500 Cap at 500 pages
418
+ `);
419
+ return;
420
+ }
421
+ if (cmd === "check") {
422
+ console.log(`
423
+ vinext check - Scan Next.js app for compatibility
424
+
425
+ Usage: vinext check [options]
426
+
427
+ Scans your Next.js project and produces a compatibility report showing
428
+ which imports, config options, libraries, and conventions are supported,
429
+ partially supported, or unsupported by vinext.
430
+
431
+ Options:
432
+ -h, --help Show this help
433
+ `);
434
+ return;
435
+ }
436
+ if (cmd === "init") {
437
+ console.log(`
438
+ vinext init - Migrate a Next.js project to run under vinext
439
+
440
+ Usage: vinext init [options]
441
+
442
+ One-command migration: installs dependencies, configures ESM,
443
+ generates vite.config.ts, and adds npm scripts. Your Next.js
444
+ setup continues to work alongside vinext.
445
+
446
+ Options:
447
+ -p, --port <port> Dev server port for the vinext script (default: 3001)
448
+ --skip-check Skip the compatibility check step
449
+ --force Overwrite existing vite.config.ts
450
+ -h, --help Show this help
451
+
452
+ Examples:
453
+ vinext init Migrate with defaults
454
+ vinext init -p 4000 Use port 4000 for dev:vinext
455
+ vinext init --force Overwrite existing vite.config.ts
456
+ vinext init --skip-check Skip the compatibility report
457
+ `);
458
+ return;
459
+ }
460
+ if (cmd === "lint") {
461
+ console.log(`
462
+ vinext lint - Run linter
463
+
464
+ Usage: vinext lint [options]
465
+
466
+ Delegates to your project's eslint (with eslint-config-next) or oxlint.
467
+ If neither is installed, suggests how to add one.
468
+
469
+ Options:
470
+ -h, --help Show this help
471
+ `);
472
+ return;
473
+ }
474
+ console.log(`
475
+ vinext v${VERSION} - Run Next.js apps on Vite
476
+
477
+ Usage: vinext <command> [options]
478
+
479
+ Commands:
480
+ dev Start development server
481
+ build Build for production
482
+ start Start production server
483
+ deploy Deploy to Cloudflare Workers
484
+ init Migrate a Next.js project to vinext
485
+ check Scan Next.js app for compatibility
486
+ lint Run linter
487
+
488
+ Options:
489
+ -h, --help Show this help
490
+ --version Show version
491
+
492
+ Examples:
493
+ vinext dev Start dev server on port 3000
494
+ vinext dev -p 4000 Start dev server on port 4000
495
+ vinext build Build for production
496
+ vinext start Start production server
497
+ vinext deploy Deploy to Cloudflare Workers
498
+ vinext init Migrate a Next.js project
499
+ vinext check Check compatibility
500
+ vinext lint Run linter
501
+
502
+ vinext is a drop-in replacement for the \`next\` CLI.
503
+ No vite.config.ts needed — just run \`vinext dev\` in your Next.js project.
504
+ `);
505
+ }
506
+ // ─── Entry ────────────────────────────────────────────────────────────────────
507
+ if (command === "--version" || command === "-v") {
508
+ console.log(`vinext v${VERSION}`);
509
+ process.exit(0);
510
+ }
511
+ if (command === "--help" || command === "-h" || !command) {
512
+ printHelp();
513
+ if (!command)
514
+ process.exit(0);
515
+ process.exit(0);
516
+ }
517
+ switch (command) {
518
+ case "dev":
519
+ dev().catch((e) => {
520
+ console.error(e);
521
+ process.exit(1);
522
+ });
523
+ break;
524
+ case "build":
525
+ buildApp().catch((e) => {
526
+ console.error(e);
527
+ process.exit(1);
528
+ });
529
+ break;
530
+ case "start":
531
+ start().catch((e) => {
532
+ console.error(e);
533
+ process.exit(1);
534
+ });
535
+ break;
536
+ case "deploy":
537
+ deployCommand().catch((e) => {
538
+ console.error(e);
539
+ process.exit(1);
540
+ });
541
+ break;
542
+ case "init":
543
+ initCommand().catch((e) => {
544
+ console.error(e);
545
+ process.exit(1);
546
+ });
547
+ break;
548
+ case "check":
549
+ check().catch((e) => {
550
+ console.error(e);
551
+ process.exit(1);
552
+ });
553
+ break;
554
+ case "lint":
555
+ lint().catch((e) => {
556
+ console.error(e);
557
+ process.exit(1);
558
+ });
559
+ break;
560
+ default:
561
+ console.error(`\n Unknown command: ${command}\n`);
562
+ printHelp();
563
+ process.exit(1);
564
+ }
565
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "next/router";
2
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/client/entry.ts"],"names":[],"mappings":"AAeA,OAAO,aAAa,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Client-side hydration entry point.
3
+ *
4
+ * This module is injected as a <script type="module"> in the SSR HTML.
5
+ * It reads __NEXT_DATA__ from the window, dynamically imports the page
6
+ * component, and hydrates it onto #__next.
7
+ *
8
+ * The actual page import path is injected at serve-time by the plugin
9
+ * via a virtual module or inline script.
10
+ */
11
+ import React from "react";
12
+ import { hydrateRoot } from "react-dom/client";
13
+ // Eagerly import the router shim so its module-level popstate listener is
14
+ // registered. Without this, browser back/forward buttons do nothing because
15
+ // navigateClient() is never invoked on history changes.
16
+ import "next/router";
17
+ // Read the SSR data injected by the server
18
+ const nextData = window.__NEXT_DATA__;
19
+ const { pageProps } = nextData?.props ?? { pageProps: {} };
20
+ const pageModulePath = nextData?.__pageModule;
21
+ const appModulePath = nextData?.__appModule;
22
+ /** Defense-in-depth: validate module paths from __NEXT_DATA__. */
23
+ function isValidModulePath(p) {
24
+ if (typeof p !== "string" || p.length === 0)
25
+ return false;
26
+ // Must start with / or ./ (relative Vite module paths)
27
+ if (!p.startsWith("/") && !p.startsWith("./"))
28
+ return false;
29
+ // Must not contain protocol (prevents importing from external URLs)
30
+ if (p.includes("://"))
31
+ return false;
32
+ // Must not traverse directories
33
+ if (p.includes(".."))
34
+ return false;
35
+ return true;
36
+ }
37
+ async function hydrate() {
38
+ if (!isValidModulePath(pageModulePath)) {
39
+ console.error("[vinext] Invalid or missing __pageModule in __NEXT_DATA__");
40
+ return;
41
+ }
42
+ // Dynamically import the page module
43
+ const pageModule = await import(/* @vite-ignore */ pageModulePath);
44
+ const PageComponent = pageModule.default;
45
+ if (!PageComponent) {
46
+ console.error("[vinext] Page module has no default export");
47
+ return;
48
+ }
49
+ let element;
50
+ // If there's a custom _app, wrap the page with it
51
+ if (appModulePath) {
52
+ if (!isValidModulePath(appModulePath)) {
53
+ console.error("[vinext] Invalid __appModule in __NEXT_DATA__");
54
+ }
55
+ else {
56
+ try {
57
+ const appModule = await import(/* @vite-ignore */ appModulePath);
58
+ const AppComponent = appModule.default;
59
+ element = React.createElement(AppComponent, {
60
+ Component: PageComponent,
61
+ pageProps,
62
+ });
63
+ }
64
+ catch {
65
+ // No _app, render page directly
66
+ }
67
+ }
68
+ }
69
+ // @ts-expect-error -- element is assigned in the _app branch above, or falls through here
70
+ if (!element) {
71
+ element = React.createElement(PageComponent, pageProps);
72
+ }
73
+ const container = document.getElementById("__next");
74
+ if (!container) {
75
+ console.error("[vinext] No #__next element found");
76
+ return;
77
+ }
78
+ const root = hydrateRoot(container, element);
79
+ // Expose root on window so the router shim (a separate module) can
80
+ // re-render the tree during client-side navigation. import.meta.hot.data
81
+ // is module-scoped and cannot be read across module boundaries.
82
+ window.__VINEXT_ROOT__ = root;
83
+ }
84
+ hydrate();
85
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/client/entry.ts"],"names":[],"mappings":"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"}