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/deploy.js ADDED
@@ -0,0 +1,644 @@
1
+ /**
2
+ * vinext deploy — one-command Cloudflare Workers deployment.
3
+ *
4
+ * Takes any Next.js app and deploys it to Cloudflare Workers:
5
+ *
6
+ * 1. Detects App Router vs Pages Router
7
+ * 2. Auto-generates missing config files (wrangler.jsonc, worker/index.ts, vite.config.ts)
8
+ * 3. Ensures dependencies are installed (@cloudflare/vite-plugin, wrangler, @vitejs/plugin-rsc)
9
+ * 4. Runs the Vite build
10
+ * 5. Deploys to Cloudflare Workers via wrangler
11
+ *
12
+ * Design: Everything is auto-generated into a `.vinext/` directory (not the
13
+ * project root) to avoid cluttering the user's project. If the user already
14
+ * has these files, we use theirs.
15
+ */
16
+ import fs from "node:fs";
17
+ import path from "node:path";
18
+ import { execSync } from "node:child_process";
19
+ import { createBuilder, build } from "vite";
20
+ import { ensureESModule as _ensureESModule, renameCJSConfigs as _renameCJSConfigs, detectPackageManager as _detectPackageManager, } from "./utils/project.js";
21
+ import { runTPR } from "./cloudflare/tpr.js";
22
+ // ─── Detection ───────────────────────────────────────────────────────────────
23
+ export function detectProject(root) {
24
+ const hasApp = fs.existsSync(path.join(root, "app")) ||
25
+ fs.existsSync(path.join(root, "src", "app"));
26
+ const hasPages = fs.existsSync(path.join(root, "pages")) ||
27
+ fs.existsSync(path.join(root, "src", "pages"));
28
+ // Prefer App Router if both exist
29
+ const isAppRouter = hasApp;
30
+ const isPagesRouter = !hasApp && hasPages;
31
+ const hasViteConfig = fs.existsSync(path.join(root, "vite.config.ts")) ||
32
+ fs.existsSync(path.join(root, "vite.config.js")) ||
33
+ fs.existsSync(path.join(root, "vite.config.mjs"));
34
+ const hasWranglerConfig = fs.existsSync(path.join(root, "wrangler.jsonc")) ||
35
+ fs.existsSync(path.join(root, "wrangler.json")) ||
36
+ fs.existsSync(path.join(root, "wrangler.toml"));
37
+ const hasWorkerEntry = fs.existsSync(path.join(root, "worker", "index.ts")) ||
38
+ fs.existsSync(path.join(root, "worker", "index.js"));
39
+ // Check node_modules for installed packages
40
+ const hasCloudflarePlugin = fs.existsSync(path.join(root, "node_modules", "@cloudflare", "vite-plugin"));
41
+ const hasRscPlugin = fs.existsSync(path.join(root, "node_modules", "@vitejs", "plugin-rsc"));
42
+ const hasWrangler = fs.existsSync(path.join(root, "node_modules", ".bin", "wrangler"));
43
+ // Derive project name from package.json or directory name
44
+ let projectName = path.basename(root);
45
+ const pkgPath = path.join(root, "package.json");
46
+ if (fs.existsSync(pkgPath)) {
47
+ try {
48
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
49
+ if (pkg.name) {
50
+ // Sanitize: Workers names must be lowercase alphanumeric + hyphens
51
+ projectName = pkg.name
52
+ .replace(/^@[^/]+\//, "") // strip npm scope
53
+ .replace(/[^a-z0-9-]/g, "-")
54
+ .replace(/-+/g, "-")
55
+ .replace(/^-|-$/g, "");
56
+ }
57
+ }
58
+ catch {
59
+ // ignore parse errors
60
+ }
61
+ }
62
+ // Detect ISR usage (rough heuristic: search for `revalidate` exports)
63
+ const hasISR = detectISR(root, isAppRouter);
64
+ // Detect "type": "module" in package.json
65
+ let hasTypeModule = false;
66
+ if (fs.existsSync(pkgPath)) {
67
+ try {
68
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
69
+ hasTypeModule = pkg.type === "module";
70
+ }
71
+ catch {
72
+ // ignore
73
+ }
74
+ }
75
+ // Detect MDX usage
76
+ const hasMDX = detectMDX(root, isAppRouter, hasPages);
77
+ // Detect CodeHike dependency
78
+ let hasCodeHike = false;
79
+ if (fs.existsSync(pkgPath)) {
80
+ try {
81
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
82
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
83
+ hasCodeHike = "codehike" in allDeps;
84
+ }
85
+ catch {
86
+ // ignore
87
+ }
88
+ }
89
+ // Detect native Node modules that need stubbing for Workers
90
+ const nativeModulesToStub = detectNativeModules(root);
91
+ return {
92
+ root,
93
+ isAppRouter,
94
+ isPagesRouter,
95
+ hasViteConfig,
96
+ hasWranglerConfig,
97
+ hasWorkerEntry,
98
+ hasCloudflarePlugin,
99
+ hasRscPlugin,
100
+ hasWrangler,
101
+ projectName,
102
+ hasISR,
103
+ hasTypeModule,
104
+ hasMDX,
105
+ hasCodeHike,
106
+ nativeModulesToStub,
107
+ };
108
+ }
109
+ function detectISR(root, isAppRouter) {
110
+ if (!isAppRouter)
111
+ return false;
112
+ try {
113
+ // Check root-level app/ first, then fall back to src/app/
114
+ let appDir = path.join(root, "app");
115
+ if (!fs.existsSync(appDir)) {
116
+ appDir = path.join(root, "src", "app");
117
+ }
118
+ if (!fs.existsSync(appDir))
119
+ return false;
120
+ // Quick check: search .ts/.tsx files in app/ for `export const revalidate`
121
+ return scanDirForPattern(appDir, /export\s+const\s+revalidate\s*=/);
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ }
127
+ function scanDirForPattern(dir, pattern) {
128
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
129
+ for (const entry of entries) {
130
+ const fullPath = path.join(dir, entry.name);
131
+ if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
132
+ if (scanDirForPattern(fullPath, pattern))
133
+ return true;
134
+ }
135
+ else if (entry.isFile() && /\.(ts|tsx|js|jsx)$/.test(entry.name)) {
136
+ try {
137
+ const content = fs.readFileSync(fullPath, "utf-8");
138
+ if (pattern.test(content))
139
+ return true;
140
+ }
141
+ catch {
142
+ // skip unreadable files
143
+ }
144
+ }
145
+ }
146
+ return false;
147
+ }
148
+ /**
149
+ * Detect .mdx files in the project's app/ or pages/ directory,
150
+ * or `pageExtensions` including "mdx" in next.config.
151
+ */
152
+ function detectMDX(root, isAppRouter, hasPages) {
153
+ // Check next.config for pageExtensions with mdx
154
+ const configFiles = ["next.config.ts", "next.config.mjs", "next.config.js", "next.config.cjs"];
155
+ for (const f of configFiles) {
156
+ const p = path.join(root, f);
157
+ if (fs.existsSync(p)) {
158
+ try {
159
+ const content = fs.readFileSync(p, "utf-8");
160
+ if (/pageExtensions.*mdx/i.test(content) || /@next\/mdx/.test(content))
161
+ return true;
162
+ }
163
+ catch {
164
+ // ignore
165
+ }
166
+ }
167
+ }
168
+ // Check for .mdx files in app/ or pages/ (with src/ fallback)
169
+ const dirs = [];
170
+ if (isAppRouter) {
171
+ const appDir = fs.existsSync(path.join(root, "app"))
172
+ ? path.join(root, "app")
173
+ : path.join(root, "src", "app");
174
+ dirs.push(appDir);
175
+ }
176
+ if (hasPages) {
177
+ const pagesDir = fs.existsSync(path.join(root, "pages"))
178
+ ? path.join(root, "pages")
179
+ : path.join(root, "src", "pages");
180
+ dirs.push(pagesDir);
181
+ }
182
+ for (const dir of dirs) {
183
+ if (fs.existsSync(dir) && scanDirForExtension(dir, ".mdx"))
184
+ return true;
185
+ }
186
+ return false;
187
+ }
188
+ function scanDirForExtension(dir, ext) {
189
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
190
+ for (const entry of entries) {
191
+ const fullPath = path.join(dir, entry.name);
192
+ if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
193
+ if (scanDirForExtension(fullPath, ext))
194
+ return true;
195
+ }
196
+ else if (entry.isFile() && entry.name.endsWith(ext)) {
197
+ return true;
198
+ }
199
+ }
200
+ return false;
201
+ }
202
+ /** Known native Node modules that can't run in Workers */
203
+ const NATIVE_MODULES_TO_STUB = [
204
+ "@resvg/resvg-js",
205
+ "satori",
206
+ "lightningcss",
207
+ "@napi-rs/canvas",
208
+ "sharp",
209
+ ];
210
+ /**
211
+ * Detect native Node modules in dependencies that need stubbing for Workers.
212
+ */
213
+ function detectNativeModules(root) {
214
+ const pkgPath = path.join(root, "package.json");
215
+ if (!fs.existsSync(pkgPath))
216
+ return [];
217
+ try {
218
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
219
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
220
+ return NATIVE_MODULES_TO_STUB.filter((mod) => mod in allDeps);
221
+ }
222
+ catch {
223
+ return [];
224
+ }
225
+ }
226
+ // ─── Project Preparation (pre-build transforms) ─────────────────────────────
227
+ //
228
+ // These are delegated to shared utilities in ./utils/project.ts so they can
229
+ // be reused by both `vinext deploy` and `vinext init`.
230
+ /** @see {@link _ensureESModule} */
231
+ export const ensureESModule = _ensureESModule;
232
+ /** @see {@link _renameCJSConfigs} */
233
+ export const renameCJSConfigs = _renameCJSConfigs;
234
+ // ─── File Generation ─────────────────────────────────────────────────────────
235
+ /** Generate wrangler.jsonc content */
236
+ export function generateWranglerConfig(info) {
237
+ const today = new Date().toISOString().split("T")[0];
238
+ const config = {
239
+ $schema: "node_modules/wrangler/config-schema.json",
240
+ name: info.projectName,
241
+ compatibility_date: today,
242
+ compatibility_flags: ["nodejs_compat"],
243
+ main: "./worker/index.ts",
244
+ assets: {
245
+ not_found_handling: "none",
246
+ // Expose static assets to the Worker via env.ASSETS so the image
247
+ // optimization handler can fetch source images programmatically.
248
+ binding: "ASSETS",
249
+ },
250
+ // Cloudflare Images binding for next/image optimization.
251
+ // Enables resize, format negotiation (AVIF/WebP), and quality transforms
252
+ // at the edge. No user setup needed — wrangler creates the binding automatically.
253
+ images: {
254
+ binding: "IMAGES",
255
+ },
256
+ };
257
+ if (info.hasISR) {
258
+ config.kv_namespaces = [
259
+ {
260
+ binding: "VINEXT_CACHE",
261
+ id: "<your-kv-namespace-id>",
262
+ },
263
+ ];
264
+ }
265
+ return JSON.stringify(config, null, 2) + "\n";
266
+ }
267
+ /** Generate worker/index.ts for App Router */
268
+ export function generateAppRouterWorkerEntry() {
269
+ return `/**
270
+ * Cloudflare Worker entry point — auto-generated by vinext deploy.
271
+ * Edit freely or delete to regenerate on next deploy.
272
+ *
273
+ * For apps without image optimization, you can use vinext/server/app-router-entry
274
+ * directly in wrangler.jsonc: "main": "vinext/server/app-router-entry"
275
+ */
276
+ import { handleImageOptimization } from "vinext/server/image-optimization";
277
+ import handler from "vinext/server/app-router-entry";
278
+
279
+ interface Env {
280
+ ASSETS: Fetcher;
281
+ IMAGES: {
282
+ input(stream: ReadableStream): {
283
+ transform(options: Record<string, unknown>): {
284
+ output(options: { format: string; quality: number }): Promise<{ response(): Response }>;
285
+ };
286
+ };
287
+ };
288
+ }
289
+
290
+ export default {
291
+ async fetch(request: Request, env: Env): Promise<Response> {
292
+ const url = new URL(request.url);
293
+
294
+ // Image optimization via Cloudflare Images binding
295
+ if (url.pathname === "/_vinext/image") {
296
+ return handleImageOptimization(request, {
297
+ fetchAsset: (path) => env.ASSETS.fetch(new Request(new URL(path, request.url))),
298
+ transformImage: async (body, { width, format, quality }) => {
299
+ const result = await env.IMAGES.input(body).transform(width > 0 ? { width } : {}).output({ format, quality });
300
+ return result.response();
301
+ },
302
+ });
303
+ }
304
+
305
+ // Delegate everything else to vinext
306
+ return handler.fetch(request);
307
+ },
308
+ };
309
+ `;
310
+ }
311
+ /** Generate worker/index.ts for Pages Router */
312
+ export function generatePagesRouterWorkerEntry() {
313
+ return `/**
314
+ * Cloudflare Worker entry point — auto-generated by vinext deploy.
315
+ * Edit freely or delete to regenerate on next deploy.
316
+ */
317
+ import { handleImageOptimization } from "vinext/server/image-optimization";
318
+
319
+ // @ts-expect-error — virtual module resolved by vinext at build time
320
+ import { renderPage, handleApiRoute } from "virtual:vinext-server-entry";
321
+
322
+ interface Env {
323
+ ASSETS: Fetcher;
324
+ IMAGES: {
325
+ input(stream: ReadableStream): {
326
+ transform(options: Record<string, unknown>): {
327
+ output(options: { format: string; quality: number }): Promise<{ response(): Response }>;
328
+ };
329
+ };
330
+ };
331
+ }
332
+
333
+ export default {
334
+ async fetch(request: Request, env: Env): Promise<Response> {
335
+ try {
336
+ const url = new URL(request.url);
337
+ const pathname = url.pathname;
338
+ const urlWithQuery = pathname + url.search;
339
+
340
+ // Block protocol-relative URL open redirect attacks (//evil.com/).
341
+ if (pathname.startsWith("//")) {
342
+ return new Response("404 Not Found", { status: 404 });
343
+ }
344
+
345
+ // ── Image optimization via Cloudflare Images binding ──────────
346
+ if (pathname === "/_vinext/image") {
347
+ return handleImageOptimization(request, {
348
+ fetchAsset: (path) => env.ASSETS.fetch(new Request(new URL(path, request.url))),
349
+ transformImage: async (body, { width, format, quality }) => {
350
+ const result = await env.IMAGES.input(body).transform(width > 0 ? { width } : {}).output({ format, quality });
351
+ return result.response();
352
+ },
353
+ });
354
+ }
355
+
356
+ // API routes
357
+ if (pathname.startsWith("/api/") || pathname === "/api") {
358
+ return await handleApiRoute(request, urlWithQuery);
359
+ }
360
+
361
+ // Page routes
362
+ return await renderPage(request, urlWithQuery, null);
363
+ } catch (error) {
364
+ console.error("[vinext] Worker error:", error);
365
+ return new Response("Internal Server Error", { status: 500 });
366
+ }
367
+ },
368
+ };
369
+ `;
370
+ }
371
+ /** Generate vite.config.ts for App Router */
372
+ export function generateAppRouterViteConfig(info) {
373
+ const imports = [
374
+ `import { defineConfig } from "vite";`,
375
+ `import vinext from "vinext";`,
376
+ `import rsc from "@vitejs/plugin-rsc";`,
377
+ `import { cloudflare } from "@cloudflare/vite-plugin";`,
378
+ ];
379
+ if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
380
+ imports.push(`import path from "node:path";`);
381
+ }
382
+ const plugins = [];
383
+ if (info?.hasMDX) {
384
+ plugins.push(` // vinext auto-injects @mdx-js/rollup with plugins from next.config`);
385
+ }
386
+ plugins.push(` vinext(),`);
387
+ plugins.push(` rsc({
388
+ entries: {
389
+ rsc: "virtual:vinext-rsc-entry",
390
+ ssr: "virtual:vinext-app-ssr-entry",
391
+ client: "virtual:vinext-app-browser-entry",
392
+ },
393
+ }),`);
394
+ plugins.push(` cloudflare({
395
+ viteEnvironment: {
396
+ name: "rsc",
397
+ childEnvironments: ["ssr"],
398
+ },
399
+ }),`);
400
+ // Build resolve.alias for native module stubs (tsconfig paths are handled
401
+ // automatically by vite-tsconfig-paths inside the vinext plugin)
402
+ let resolveBlock = "";
403
+ const aliases = [];
404
+ if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
405
+ for (const mod of info.nativeModulesToStub) {
406
+ aliases.push(` "${mod}": path.resolve(__dirname, "empty-stub.js"),`);
407
+ }
408
+ }
409
+ if (aliases.length > 0) {
410
+ resolveBlock = `\n resolve: {\n alias: {\n${aliases.join("\n")}\n },\n },`;
411
+ }
412
+ return `${imports.join("\n")}
413
+
414
+ export default defineConfig({
415
+ plugins: [
416
+ ${plugins.join("\n")}
417
+ ],${resolveBlock}
418
+ });
419
+ `;
420
+ }
421
+ /** Generate vite.config.ts for Pages Router */
422
+ export function generatePagesRouterViteConfig(info) {
423
+ const imports = [
424
+ `import { defineConfig } from "vite";`,
425
+ `import vinext from "vinext";`,
426
+ `import { cloudflare } from "@cloudflare/vite-plugin";`,
427
+ ];
428
+ if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
429
+ imports.push(`import path from "node:path";`);
430
+ }
431
+ // Build resolve.alias for native module stubs (tsconfig paths are handled
432
+ // automatically by vite-tsconfig-paths inside the vinext plugin)
433
+ let resolveBlock = "";
434
+ const aliases = [];
435
+ if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
436
+ for (const mod of info.nativeModulesToStub) {
437
+ aliases.push(` "${mod}": path.resolve(__dirname, "empty-stub.js"),`);
438
+ }
439
+ }
440
+ if (aliases.length > 0) {
441
+ resolveBlock = `\n resolve: {\n alias: {\n${aliases.join("\n")}\n },\n },`;
442
+ }
443
+ return `${imports.join("\n")}
444
+
445
+ export default defineConfig({
446
+ plugins: [
447
+ vinext(),
448
+ cloudflare(),
449
+ ],${resolveBlock}
450
+ });
451
+ `;
452
+ }
453
+ export function getMissingDeps(info) {
454
+ const missing = [];
455
+ if (!info.hasCloudflarePlugin) {
456
+ missing.push({ name: "@cloudflare/vite-plugin", version: "latest" });
457
+ }
458
+ if (!info.hasWrangler) {
459
+ missing.push({ name: "wrangler", version: "latest" });
460
+ }
461
+ if (info.isAppRouter && !info.hasRscPlugin) {
462
+ missing.push({ name: "@vitejs/plugin-rsc", version: "latest" });
463
+ }
464
+ if (info.hasMDX) {
465
+ // Check if @mdx-js/rollup is already installed
466
+ const hasMdxRollup = fs.existsSync(path.join(info.root, "node_modules", "@mdx-js", "rollup"));
467
+ if (!hasMdxRollup) {
468
+ missing.push({ name: "@mdx-js/rollup", version: "latest" });
469
+ }
470
+ }
471
+ return missing;
472
+ }
473
+ function installDeps(root, deps) {
474
+ if (deps.length === 0)
475
+ return;
476
+ const depsStr = deps.map((d) => `${d.name}@${d.version}`).join(" ");
477
+ const installCmd = detectPackageManager(root);
478
+ console.log(` Installing: ${deps.map((d) => d.name).join(", ")}`);
479
+ execSync(`${installCmd} ${depsStr}`, {
480
+ cwd: root,
481
+ stdio: "inherit",
482
+ });
483
+ }
484
+ const detectPackageManager = _detectPackageManager;
485
+ export function getFilesToGenerate(info) {
486
+ const files = [];
487
+ if (!info.hasWranglerConfig) {
488
+ files.push({
489
+ path: path.join(info.root, "wrangler.jsonc"),
490
+ content: generateWranglerConfig(info),
491
+ description: "wrangler.jsonc",
492
+ });
493
+ }
494
+ if (!info.hasWorkerEntry) {
495
+ const workerContent = info.isAppRouter
496
+ ? generateAppRouterWorkerEntry()
497
+ : generatePagesRouterWorkerEntry();
498
+ files.push({
499
+ path: path.join(info.root, "worker", "index.ts"),
500
+ content: workerContent,
501
+ description: "worker/index.ts",
502
+ });
503
+ }
504
+ if (!info.hasViteConfig) {
505
+ const viteContent = info.isAppRouter
506
+ ? generateAppRouterViteConfig(info)
507
+ : generatePagesRouterViteConfig(info);
508
+ files.push({
509
+ path: path.join(info.root, "vite.config.ts"),
510
+ content: viteContent,
511
+ description: "vite.config.ts",
512
+ });
513
+ }
514
+ return files;
515
+ }
516
+ function writeGeneratedFiles(files) {
517
+ for (const file of files) {
518
+ const dir = path.dirname(file.path);
519
+ if (!fs.existsSync(dir)) {
520
+ fs.mkdirSync(dir, { recursive: true });
521
+ }
522
+ fs.writeFileSync(file.path, file.content, "utf-8");
523
+ console.log(` Created ${file.description}`);
524
+ }
525
+ }
526
+ // ─── Build ───────────────────────────────────────────────────────────────────
527
+ async function runBuild(info) {
528
+ console.log("\n Building for Cloudflare Workers...\n");
529
+ // Use Vite's JS API for the build. The user's vite.config.ts (or our
530
+ // generated one) has the cloudflare() plugin which handles the Worker
531
+ // output format. We just need to trigger the build.
532
+ //
533
+ // For App Router, createBuilder().buildApp() handles multi-environment builds.
534
+ // For Pages Router, a single build() call suffices (cloudflare plugin manages it).
535
+ if (info.isAppRouter) {
536
+ const builder = await createBuilder({ root: info.root });
537
+ await builder.buildApp();
538
+ }
539
+ else {
540
+ await build({ root: info.root });
541
+ }
542
+ }
543
+ // ─── Deploy ──────────────────────────────────────────────────────────────────
544
+ function runWranglerDeploy(root, preview) {
545
+ const wranglerBin = path.join(root, "node_modules", ".bin", "wrangler");
546
+ const execOpts = {
547
+ cwd: root,
548
+ stdio: "pipe",
549
+ encoding: "utf-8",
550
+ };
551
+ // wrangler deploy outputs the URL to stdout
552
+ const args = preview ? ["deploy", "--env", "preview"] : ["deploy"];
553
+ const cmd = `"${wranglerBin}" ${args.join(" ")}`;
554
+ console.log(preview ? "\n Deploying to preview..." : "\n Deploying to production...");
555
+ const output = execSync(cmd, execOpts);
556
+ // Parse the deployed URL from wrangler output
557
+ // Wrangler prints: "Published <name> (version_id)\n https://<name>.<subdomain>.workers.dev"
558
+ const urlMatch = output.match(/https:\/\/[^\s]+\.workers\.dev[^\s]*/);
559
+ const deployedUrl = urlMatch ? urlMatch[0] : null;
560
+ // Also print raw output for transparency
561
+ if (output.trim()) {
562
+ for (const line of output.trim().split("\n")) {
563
+ console.log(` ${line}`);
564
+ }
565
+ }
566
+ return deployedUrl ?? "(URL not detected in wrangler output)";
567
+ }
568
+ // ─── Main Entry ──────────────────────────────────────────────────────────────
569
+ export async function deploy(options) {
570
+ const root = path.resolve(options.root);
571
+ console.log("\n vinext deploy\n");
572
+ // Step 1: Detect project structure
573
+ const info = detectProject(root);
574
+ if (!info.isAppRouter && !info.isPagesRouter) {
575
+ console.error(" Error: No app/ or pages/ directory found.");
576
+ console.error(" vinext deploy requires a Next.js project with an app/ or pages/ directory");
577
+ console.error(" (also checks src/app/ and src/pages/).\n");
578
+ process.exit(1);
579
+ }
580
+ if (options.name) {
581
+ info.projectName = options.name;
582
+ }
583
+ console.log(` Project: ${info.projectName}`);
584
+ console.log(` Router: ${info.isAppRouter ? "App Router" : "Pages Router"}`);
585
+ console.log(` ISR: ${info.hasISR ? "detected" : "none"}`);
586
+ // Step 2: Check and install missing dependencies
587
+ const missingDeps = getMissingDeps(info);
588
+ if (missingDeps.length > 0) {
589
+ console.log();
590
+ installDeps(root, missingDeps);
591
+ // Re-detect after install
592
+ info.hasCloudflarePlugin = true;
593
+ info.hasWrangler = true;
594
+ if (info.isAppRouter)
595
+ info.hasRscPlugin = true;
596
+ }
597
+ // Step 3: Ensure ESM + rename CJS configs
598
+ if (!info.hasTypeModule) {
599
+ const renamedConfigs = renameCJSConfigs(root);
600
+ for (const [oldName, newName] of renamedConfigs) {
601
+ console.log(` Renamed ${oldName} → ${newName} (CJS → .cjs)`);
602
+ }
603
+ if (ensureESModule(root)) {
604
+ console.log(` Added "type": "module" to package.json`);
605
+ info.hasTypeModule = true;
606
+ }
607
+ }
608
+ // Step 4: Generate missing config files
609
+ const filesToGenerate = getFilesToGenerate(info);
610
+ if (filesToGenerate.length > 0) {
611
+ console.log();
612
+ writeGeneratedFiles(filesToGenerate);
613
+ }
614
+ if (options.dryRun) {
615
+ console.log("\n Dry run complete. Files generated but no build or deploy performed.\n");
616
+ return;
617
+ }
618
+ // Step 5: Build
619
+ if (!options.skipBuild) {
620
+ await runBuild(info);
621
+ }
622
+ else {
623
+ console.log("\n Skipping build (--skip-build)");
624
+ }
625
+ // Step 6: TPR — pre-render hot pages into KV cache (experimental, opt-in)
626
+ if (options.experimentalTPR) {
627
+ console.log();
628
+ const tprResult = await runTPR({
629
+ root,
630
+ coverage: Math.max(1, Math.min(100, options.tprCoverage ?? 90)),
631
+ limit: Math.max(1, options.tprLimit ?? 1000),
632
+ window: Math.max(1, options.tprWindow ?? 24),
633
+ });
634
+ if (tprResult.skipped) {
635
+ console.log(` TPR: Skipped (${tprResult.skipped})`);
636
+ }
637
+ }
638
+ // Step 7: Deploy via wrangler
639
+ const url = runWranglerDeploy(root, options.preview ?? false);
640
+ console.log("\n ─────────────────────────────────────────");
641
+ console.log(` Deployed to: ${url}`);
642
+ console.log(" ─────────────────────────────────────────\n");
643
+ }
644
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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"}