vinext 0.1.8 → 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 (237) 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.js +40 -2
  17. package/dist/cli-args.d.ts +1 -2
  18. package/dist/cli-args.js +1 -1
  19. package/dist/cli-dev-config.d.ts +12 -0
  20. package/dist/cli-dev-config.js +23 -0
  21. package/dist/cli.js +111 -95
  22. package/dist/{server → client}/dev-error-overlay-store.d.ts +1 -1
  23. package/dist/{server → client}/dev-error-overlay-store.js +1 -1
  24. package/dist/{server → client}/dev-error-overlay.d.ts +1 -1
  25. package/dist/{server → client}/dev-error-overlay.js +2 -2
  26. package/dist/client/navigation-runtime.d.ts +2 -0
  27. package/dist/client/navigation-runtime.js +3 -1
  28. package/dist/client/window-next.d.ts +2 -1
  29. package/dist/cloudflare/index.d.ts +2 -2
  30. package/dist/cloudflare/index.js +2 -2
  31. package/dist/config/config-matchers.js +14 -10
  32. package/dist/config/next-config.d.ts +5 -3
  33. package/dist/config/next-config.js +44 -1
  34. package/dist/config/prerender.d.ts +34 -0
  35. package/dist/config/prerender.js +55 -0
  36. package/dist/entries/app-rsc-entry.d.ts +2 -1
  37. package/dist/entries/app-rsc-entry.js +40 -10
  38. package/dist/entries/app-rsc-manifest.js +2 -0
  39. package/dist/entries/pages-client-entry.d.ts +3 -0
  40. package/dist/entries/pages-client-entry.js +15 -1
  41. package/dist/entries/pages-server-entry.js +5 -2
  42. package/dist/image/image-adapters-virtual.d.ts +59 -0
  43. package/dist/image/image-adapters-virtual.js +59 -0
  44. package/dist/index.d.ts +33 -0
  45. package/dist/index.js +167 -100
  46. package/dist/init-cloudflare.d.ts +43 -0
  47. package/dist/init-cloudflare.js +839 -0
  48. package/dist/init-platform.d.ts +40 -0
  49. package/dist/init-platform.js +195 -0
  50. package/dist/init.d.ts +16 -38
  51. package/dist/init.js +209 -99
  52. package/dist/node_modules/.pnpm/am-i-vibing@0.5.0/node_modules/am-i-vibing/dist/detector-1yx2Hoe0.js +294 -0
  53. package/dist/node_modules/.pnpm/process-ancestry@0.1.0/node_modules/process-ancestry/dist/index.js +94 -0
  54. package/dist/{cloudflare → packages/cloudflare}/src/cache/cdn-adapter.runtime.js +1 -1
  55. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.d.ts +2 -2
  56. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.js +1 -1
  57. package/dist/packages/cloudflare/src/deploy-config.js +150 -0
  58. package/dist/packages/cloudflare/src/deploy-help.js +55 -0
  59. package/dist/packages/cloudflare/src/deploy.js +276 -0
  60. package/dist/{cloudflare → packages/cloudflare/src}/tpr.d.ts +4 -41
  61. package/dist/{cloudflare → packages/cloudflare/src}/tpr.js +18 -15
  62. package/dist/plugins/ast-scope.d.ts +16 -0
  63. package/dist/plugins/ast-scope.js +62 -0
  64. package/dist/plugins/ast-utils.d.ts +27 -1
  65. package/dist/plugins/ast-utils.js +32 -1
  66. package/dist/plugins/css-module-imports.d.ts +14 -0
  67. package/dist/plugins/css-module-imports.js +59 -0
  68. package/dist/plugins/extensionless-dynamic-import.js +2 -2
  69. package/dist/plugins/ignore-dynamic-requests.d.ts +11 -0
  70. package/dist/plugins/ignore-dynamic-requests.js +530 -0
  71. package/dist/plugins/typeof-window.d.ts +1 -1
  72. package/dist/plugins/typeof-window.js +28 -56
  73. package/dist/routing/app-route-graph.d.ts +23 -2
  74. package/dist/routing/app-route-graph.js +126 -32
  75. package/dist/routing/file-matcher.d.ts +3 -0
  76. package/dist/routing/file-matcher.js +3 -0
  77. package/dist/routing/pages-router.js +2 -2
  78. package/dist/server/api-handler.js +9 -14
  79. package/dist/server/app-browser-action-result.d.ts +4 -1
  80. package/dist/server/app-browser-action-result.js +8 -1
  81. package/dist/server/app-browser-entry.js +161 -52
  82. package/dist/server/app-browser-interception-context.d.ts +1 -0
  83. package/dist/server/app-browser-interception-context.js +4 -2
  84. package/dist/server/app-browser-navigation-controller.d.ts +2 -0
  85. package/dist/server/app-browser-navigation-controller.js +60 -31
  86. package/dist/server/app-browser-server-action-client.d.ts +1 -1
  87. package/dist/server/app-browser-server-action-client.js +3 -4
  88. package/dist/server/app-browser-state.d.ts +11 -1
  89. package/dist/server/app-browser-state.js +25 -8
  90. package/dist/server/app-browser-visible-commit.d.ts +6 -1
  91. package/dist/server/app-browser-visible-commit.js +43 -25
  92. package/dist/server/app-elements-wire.d.ts +9 -2
  93. package/dist/server/app-elements-wire.js +8 -1
  94. package/dist/server/app-elements.d.ts +2 -2
  95. package/dist/server/app-elements.js +4 -3
  96. package/dist/server/app-fallback-renderer.d.ts +2 -1
  97. package/dist/server/app-fallback-renderer.js +10 -6
  98. package/dist/server/app-hydration-cache-publication.d.ts +11 -0
  99. package/dist/server/app-hydration-cache-publication.js +43 -0
  100. package/dist/server/app-middleware.d.ts +4 -3
  101. package/dist/server/app-middleware.js +8 -3
  102. package/dist/server/app-optimistic-routing.js +11 -4
  103. package/dist/server/app-page-cache-finalizer.js +2 -1
  104. package/dist/server/app-page-cache-render.d.ts +1 -0
  105. package/dist/server/app-page-cache-render.js +8 -4
  106. package/dist/server/app-page-cache.d.ts +1 -0
  107. package/dist/server/app-page-cache.js +5 -2
  108. package/dist/server/app-page-dispatch.js +1 -0
  109. package/dist/server/app-page-element-builder.d.ts +2 -1
  110. package/dist/server/app-page-element-builder.js +58 -4
  111. package/dist/server/app-page-probe.js +5 -0
  112. package/dist/server/app-page-render-identity.d.ts +1 -0
  113. package/dist/server/app-page-render-identity.js +1 -1
  114. package/dist/server/app-page-render.js +18 -0
  115. package/dist/server/app-page-request.d.ts +14 -0
  116. package/dist/server/app-page-request.js +69 -4
  117. package/dist/server/app-page-route-wiring.d.ts +8 -1
  118. package/dist/server/app-page-route-wiring.js +32 -18
  119. package/dist/server/app-page-segment-state.d.ts +2 -1
  120. package/dist/server/app-page-segment-state.js +3 -1
  121. package/dist/server/app-page-stream.d.ts +5 -0
  122. package/dist/server/app-page-stream.js +3 -1
  123. package/dist/server/app-route-handler-execution.js +5 -1
  124. package/dist/server/app-route-handler-response.js +1 -0
  125. package/dist/server/app-route-handler-runtime.js +1 -1
  126. package/dist/server/app-router-entry.js +9 -2
  127. package/dist/server/app-rsc-handler.d.ts +1 -0
  128. package/dist/server/app-rsc-handler.js +62 -31
  129. package/dist/server/app-rsc-request-normalization.d.ts +3 -2
  130. package/dist/server/app-rsc-request-normalization.js +6 -3
  131. package/dist/server/app-segment-config.d.ts +11 -0
  132. package/dist/server/app-segment-config.js +62 -6
  133. package/dist/server/app-server-action-execution.d.ts +1 -0
  134. package/dist/server/app-server-action-execution.js +58 -28
  135. package/dist/server/app-ssr-entry.d.ts +3 -0
  136. package/dist/server/app-ssr-entry.js +15 -7
  137. package/dist/server/app-ssr-stream.d.ts +7 -3
  138. package/dist/server/app-ssr-stream.js +10 -6
  139. package/dist/server/app-visited-response-cache.d.ts +6 -0
  140. package/dist/server/app-visited-response-cache.js +3 -1
  141. package/dist/server/client-trace-metadata.js +26 -0
  142. package/dist/server/default-global-not-found-module.d.ts +14 -0
  143. package/dist/server/default-global-not-found-module.js +14 -0
  144. package/dist/server/dev-route-files.js +4 -0
  145. package/dist/server/dev-server.js +19 -18
  146. package/dist/server/dev-stack-sourcemap.d.ts +1 -1
  147. package/dist/server/dev-stack-sourcemap.js +1 -1
  148. package/dist/server/fetch-handler.d.ts +2 -0
  149. package/dist/server/fetch-handler.js +18 -0
  150. package/dist/server/headers.d.ts +3 -15
  151. package/dist/server/headers.js +2 -15
  152. package/dist/server/image-optimization.d.ts +51 -1
  153. package/dist/server/image-optimization.js +52 -2
  154. package/dist/server/implicit-tags.js +1 -1
  155. package/dist/server/isr-cache.d.ts +1 -1
  156. package/dist/server/isr-cache.js +2 -2
  157. package/dist/server/metadata-routes.d.ts +3 -1
  158. package/dist/server/metadata-routes.js +12 -2
  159. package/dist/server/middleware-runtime.js +6 -1
  160. package/dist/server/navigation-planner.d.ts +1 -0
  161. package/dist/server/navigation-planner.js +14 -3
  162. package/dist/server/pages-api-route.js +2 -2
  163. package/dist/server/pages-asset-tags.d.ts +4 -6
  164. package/dist/server/pages-asset-tags.js +12 -12
  165. package/dist/server/pages-client-assets.d.ts +12 -0
  166. package/dist/server/pages-client-assets.js +10 -0
  167. package/dist/server/pages-node-compat.d.ts +8 -1
  168. package/dist/server/pages-node-compat.js +32 -4
  169. package/dist/server/pages-page-data.d.ts +24 -1
  170. package/dist/server/pages-page-data.js +45 -24
  171. package/dist/server/pages-page-handler.d.ts +2 -1
  172. package/dist/server/pages-page-handler.js +19 -12
  173. package/dist/server/pages-page-response.d.ts +7 -0
  174. package/dist/server/pages-page-response.js +4 -1
  175. package/dist/server/pages-request-pipeline.d.ts +2 -0
  176. package/dist/server/pages-request-pipeline.js +25 -1
  177. package/dist/server/pages-router-entry.d.ts +30 -0
  178. package/dist/server/pages-router-entry.js +108 -0
  179. package/dist/server/prerender-manifest.d.ts +3 -1
  180. package/dist/server/prerender-route-params.js +1 -1
  181. package/dist/server/prod-server.d.ts +1 -1
  182. package/dist/server/prod-server.js +33 -20
  183. package/dist/server/request-pipeline.js +1 -0
  184. package/dist/server/seed-cache.js +4 -4
  185. package/dist/shims/app-router-scroll-state.d.ts +1 -0
  186. package/dist/shims/app-router-scroll-state.js +1 -0
  187. package/dist/shims/app-router-scroll.js +2 -1
  188. package/dist/shims/cache.js +19 -15
  189. package/dist/shims/cdn-cache.js +1 -1
  190. package/dist/shims/dynamic-preload-chunks.js +2 -1
  191. package/dist/shims/form.d.ts +3 -1
  192. package/dist/shims/form.js +37 -43
  193. package/dist/shims/headers.d.ts +7 -1
  194. package/dist/shims/headers.js +17 -3
  195. package/dist/shims/image.js +75 -14
  196. package/dist/shims/internal/app-route-detection.d.ts +2 -17
  197. package/dist/shims/internal/app-route-detection.js +4 -17
  198. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +23 -0
  199. package/dist/shims/internal/hybrid-client-route-owner-direct.js +51 -0
  200. package/dist/shims/internal/hybrid-client-route-owner.d.ts +2 -15
  201. package/dist/shims/internal/hybrid-client-route-owner.js +9 -60
  202. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +9 -5
  203. package/dist/shims/internal/pages-data-fetch-dedup.js +73 -14
  204. package/dist/shims/internal/pages-data-target.d.ts +10 -9
  205. package/dist/shims/internal/pages-data-target.js +91 -12
  206. package/dist/shims/internal/pages-router-components.d.ts +7 -0
  207. package/dist/shims/internal/pages-router-components.js +13 -0
  208. package/dist/shims/layout-segment-context.d.ts +4 -1
  209. package/dist/shims/layout-segment-context.js +18 -4
  210. package/dist/shims/link.js +55 -26
  211. package/dist/shims/navigation.d.ts +5 -1
  212. package/dist/shims/navigation.js +45 -10
  213. package/dist/shims/navigation.react-server.js +1 -1
  214. package/dist/shims/root-params.d.ts +15 -1
  215. package/dist/shims/root-params.js +21 -1
  216. package/dist/shims/router.d.ts +5 -7
  217. package/dist/shims/router.js +362 -93
  218. package/dist/shims/server.js +3 -2
  219. package/dist/shims/slot.js +3 -6
  220. package/dist/utils/client-runtime-metadata.d.ts +2 -18
  221. package/dist/utils/client-runtime-metadata.js +31 -22
  222. package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +4 -0
  223. package/dist/{server → utils}/dev-stack-sourcemap-endpoint.js +1 -1
  224. package/dist/utils/domain-locale.d.ts +6 -3
  225. package/dist/{server → utils}/middleware-request-headers.d.ts +1 -1
  226. package/dist/{server → utils}/middleware-request-headers.js +2 -2
  227. package/dist/utils/project.d.ts +48 -2
  228. package/dist/utils/project.js +225 -4
  229. package/dist/utils/protocol-headers.d.ts +17 -0
  230. package/dist/utils/protocol-headers.js +17 -0
  231. package/dist/utils/react-version.d.ts +4 -0
  232. package/dist/utils/react-version.js +44 -0
  233. package/package.json +47 -2
  234. package/dist/deploy.d.ts +0 -197
  235. package/dist/deploy.js +0 -1040
  236. package/dist/server/dev-stack-sourcemap-endpoint.d.ts +0 -4
  237. /package/dist/{cloudflare → packages/cloudflare}/src/utils/cache-control-metadata.js +0 -0
@@ -0,0 +1,40 @@
1
+ import { Readable, Writable } from "node:stream";
2
+
3
+ //#region src/init-platform.d.ts
4
+ type InitPlatform = "cloudflare" | "node";
5
+ type InitDataCache = "kv" | "none";
6
+ type InitCdnCache = "data-cache" | "workers-cache";
7
+ type InitImageOptimization = "cloudflare-images" | "none";
8
+ type CloudflareInitOptions = {
9
+ dataCache: InitDataCache;
10
+ cdnCache: InitCdnCache;
11
+ imageOptimization: InitImageOptimization;
12
+ };
13
+ declare const INIT_PLATFORMS: {
14
+ cloudflare: {
15
+ name: string;
16
+ options: typeof resolveCloudflareInitOptions;
17
+ };
18
+ node: {
19
+ name: string;
20
+ options: () => Promise<undefined>;
21
+ };
22
+ };
23
+ type PlatformPromptOptions = {
24
+ env?: Record<string, string | undefined>;
25
+ input?: Readable;
26
+ output?: Writable;
27
+ isInteractive?: boolean;
28
+ question?: (prompt: string) => Promise<string>;
29
+ };
30
+ declare function isAgentEnvironment(env?: Record<string, string | undefined>): boolean;
31
+ declare function parsePlatformArg(args: string[]): InitPlatform | undefined;
32
+ declare function parseDataCacheArg(args: string[]): InitDataCache | undefined;
33
+ declare function parseCdnCacheArg(args: string[]): InitCdnCache | undefined;
34
+ declare function parseImageOptimizationArg(args: string[]): InitImageOptimization | undefined;
35
+ declare function parsePrerenderArg(args: string[]): boolean | undefined;
36
+ declare function resolveInitPlatform(args: string[], options?: PlatformPromptOptions): Promise<InitPlatform>;
37
+ declare function resolveInitPrerender(args: string[], options?: PlatformPromptOptions): Promise<boolean>;
38
+ declare function resolveCloudflareInitOptions(args: string[], options?: PlatformPromptOptions): Promise<CloudflareInitOptions>;
39
+ //#endregion
40
+ export { CloudflareInitOptions, INIT_PLATFORMS, InitCdnCache, InitDataCache, InitImageOptimization, InitPlatform, isAgentEnvironment, parseCdnCacheArg, parseDataCacheArg, parseImageOptimizationArg, parsePlatformArg, parsePrerenderArg, resolveCloudflareInitOptions, resolveInitPlatform, resolveInitPrerender };
@@ -0,0 +1,195 @@
1
+ import { isAgent } from "./node_modules/.pnpm/am-i-vibing@0.5.0/node_modules/am-i-vibing/dist/detector-1yx2Hoe0.js";
2
+ import { createInterface } from "node:readline/promises";
3
+ //#region src/init-platform.ts
4
+ const INIT_PLATFORMS = {
5
+ cloudflare: {
6
+ name: "Cloudflare",
7
+ options: resolveCloudflareInitOptions
8
+ },
9
+ node: {
10
+ name: "Node",
11
+ options: async () => void 0
12
+ }
13
+ };
14
+ function isAgentEnvironment(env = process.env) {
15
+ return isAgent({ env });
16
+ }
17
+ function parsePlatformArg(args) {
18
+ for (let index = 0; index < args.length; index++) {
19
+ const arg = args[index];
20
+ let value;
21
+ if (arg === "--platform") {
22
+ value = args[index + 1];
23
+ if (!value || value.startsWith("-")) throw new Error("--platform requires a value (cloudflare or node).");
24
+ } else if (arg.startsWith("--platform=")) {
25
+ value = arg.slice(11);
26
+ if (!value) throw new Error("--platform requires a value (cloudflare or node).");
27
+ }
28
+ if (value) {
29
+ if (value === "cloudflare" || value === "node") return value;
30
+ throw new Error(`Unsupported platform "${value}". Expected cloudflare or node.`);
31
+ }
32
+ }
33
+ }
34
+ function parseChoiceArg(args, flag, choices, displayedChoices = choices) {
35
+ for (let index = 0; index < args.length; index++) {
36
+ const arg = args[index];
37
+ let value;
38
+ if (arg === flag) {
39
+ value = args[index + 1];
40
+ if (!value || value.startsWith("-")) throw new Error(`${flag} requires a value (${displayedChoices.join(" or ")}).`);
41
+ } else if (arg.startsWith(`${flag}=`)) {
42
+ value = arg.slice(flag.length + 1);
43
+ if (!value) throw new Error(`${flag} requires a value (${displayedChoices.join(" or ")}).`);
44
+ }
45
+ if (value) {
46
+ if (choices.includes(value)) return value;
47
+ throw new Error(`Unsupported ${flag} value "${value}". Expected ${displayedChoices.join(" or ")}.`);
48
+ }
49
+ }
50
+ }
51
+ function parseDataCacheArg(args) {
52
+ return parseChoiceArg(args, "--data-cache", ["kv", "none"]);
53
+ }
54
+ function parseCdnCacheArg(args) {
55
+ return parseChoiceArg(args, "--cdn-cache", ["data-cache", "workers-cache"], ["data-cache"]);
56
+ }
57
+ function parseImageOptimizationArg(args) {
58
+ return parseChoiceArg(args, "--image-optimization", ["cloudflare-images", "none"]);
59
+ }
60
+ function parsePrerenderArg(args) {
61
+ for (const arg of args) {
62
+ if (arg === "--prerender") return true;
63
+ if (arg === "--no-prerender") return false;
64
+ if (!arg.startsWith("--prerender=")) continue;
65
+ const value = arg.slice(12).toLowerCase();
66
+ if (value === "true" || value === "yes" || value === "1") return true;
67
+ if (value === "false" || value === "no" || value === "0") return false;
68
+ throw new Error("--prerender expects true or false when using the \"--prerender=value\" form.");
69
+ }
70
+ }
71
+ async function resolveInitPlatform(args, options = {}) {
72
+ const explicitPlatform = parsePlatformArg(args);
73
+ if (explicitPlatform) return explicitPlatform;
74
+ if (isAgentEnvironment(options.env ?? process.env)) throw new Error("vinext init needs a deployment target. Ask the user whether they want Cloudflare or Node, then re-run the command with --platform=cloudflare or --platform=node.");
75
+ const input = options.input ?? process.stdin;
76
+ const output = options.output ?? process.stdout;
77
+ if (!(options.isInteractive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY))) return "cloudflare";
78
+ const readline = options.question ? void 0 : createInterface({
79
+ input,
80
+ output
81
+ });
82
+ const question = options.question ?? ((prompt) => readline.question(prompt));
83
+ try {
84
+ while (true) {
85
+ const answer = (await question(` Choose a deployment platform:
86
+ 1. ${INIT_PLATFORMS.cloudflare.name} (default)\n 2. ${INIT_PLATFORMS.node.name}\n Platform [1]: `)).trim().toLowerCase();
87
+ if (answer === "" || answer === "1" || answer === "cloudflare") {
88
+ output.write("\n");
89
+ return "cloudflare";
90
+ }
91
+ if (answer === "2" || answer === "node") {
92
+ output.write("\n");
93
+ return "node";
94
+ }
95
+ output.write(" Please choose Cloudflare (1) or Node (2).\n");
96
+ }
97
+ } finally {
98
+ readline?.close();
99
+ }
100
+ }
101
+ async function resolveInitPrerender(args, options = {}) {
102
+ const explicitPrerender = parsePrerenderArg(args);
103
+ if (explicitPrerender !== void 0) return explicitPrerender;
104
+ const env = options.env ?? process.env;
105
+ const input = options.input ?? process.stdin;
106
+ const output = options.output ?? process.stdout;
107
+ const isInteractive = options.isInteractive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);
108
+ if (isAgentEnvironment(env) || !isInteractive) return false;
109
+ const readline = options.question ? void 0 : createInterface({
110
+ input,
111
+ output
112
+ });
113
+ const question = options.question ?? ((prompt) => readline.question(prompt));
114
+ try {
115
+ while (true) {
116
+ const answer = (await question(" Pre-render all static routes after build? [y/N]: ")).trim().toLowerCase();
117
+ if (answer === "") {
118
+ output.write("\n");
119
+ return false;
120
+ }
121
+ if (answer === "y" || answer === "yes") {
122
+ output.write("\n");
123
+ return true;
124
+ }
125
+ if (answer === "n" || answer === "no") {
126
+ output.write("\n");
127
+ return false;
128
+ }
129
+ output.write(" Please answer yes or no.\n");
130
+ }
131
+ } finally {
132
+ readline?.close();
133
+ }
134
+ }
135
+ async function resolveCloudflareInitOptions(args, options = {}) {
136
+ const explicitDataCache = parseDataCacheArg(args);
137
+ const explicitCdnCache = parseCdnCacheArg(args);
138
+ const explicitImageOptimization = parseImageOptimizationArg(args);
139
+ if (explicitDataCache && explicitImageOptimization) return {
140
+ dataCache: explicitDataCache,
141
+ cdnCache: explicitCdnCache ?? "data-cache",
142
+ imageOptimization: explicitImageOptimization
143
+ };
144
+ if (isAgentEnvironment(options.env ?? process.env)) throw new Error("vinext init needs Cloudflare cache and image choices. Ask the user which data cache (kv or none) and image optimization (cloudflare-images or none) they want, then re-run with --data-cache=... and --image-optimization=....");
145
+ const input = options.input ?? process.stdin;
146
+ const output = options.output ?? process.stdout;
147
+ if (!(options.isInteractive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY))) return {
148
+ dataCache: explicitDataCache ?? "kv",
149
+ cdnCache: explicitCdnCache ?? "data-cache",
150
+ imageOptimization: explicitImageOptimization ?? "cloudflare-images"
151
+ };
152
+ const readline = options.question ? void 0 : createInterface({
153
+ input,
154
+ output
155
+ });
156
+ const question = options.question ?? ((prompt) => readline.question(prompt));
157
+ try {
158
+ const promptChoice = async (current, prompt, values, defaultValue, error) => {
159
+ if (current) return current;
160
+ while (true) {
161
+ const answer = (await question(prompt)).trim().toLowerCase();
162
+ if (answer === "") {
163
+ output.write("\n");
164
+ return defaultValue;
165
+ }
166
+ const value = values[answer];
167
+ if (value) {
168
+ output.write("\n");
169
+ return value;
170
+ }
171
+ output.write(` ${error}\n`);
172
+ }
173
+ };
174
+ return {
175
+ dataCache: await promptChoice(explicitDataCache, " Choose a data cache:\n 1. Cloudflare KV (default)\n 2. None\n Data cache [1]: ", {
176
+ "1": "kv",
177
+ kv: "kv",
178
+ "2": "none",
179
+ none: "none"
180
+ }, "kv", "Please choose Cloudflare KV (1) or None (2)."),
181
+ cdnCache: explicitCdnCache ?? "data-cache",
182
+ imageOptimization: await promptChoice(explicitImageOptimization, " Choose image optimization:\n 1. Cloudflare Images (default)\n 2. None\n Image optimization [1]: ", {
183
+ "1": "cloudflare-images",
184
+ "cloudflare-images": "cloudflare-images",
185
+ images: "cloudflare-images",
186
+ "2": "none",
187
+ none: "none"
188
+ }, "cloudflare-images", "Please choose Cloudflare Images (1) or None (2).")
189
+ };
190
+ } finally {
191
+ readline?.close();
192
+ }
193
+ }
194
+ //#endregion
195
+ export { INIT_PLATFORMS, isAgentEnvironment, parseCdnCacheArg, parseDataCacheArg, parseImageOptimizationArg, parsePlatformArg, parsePrerenderArg, resolveCloudflareInitOptions, resolveInitPlatform, resolveInitPrerender };
package/dist/init.d.ts CHANGED
@@ -1,30 +1,21 @@
1
+ import { CloudflareInitOptions, InitPlatform } from "./init-platform.js";
2
+ import { getReactUpgradeDeps } from "./utils/react-version.js";
3
+
1
4
  //#region src/init.d.ts
2
- /**
3
- * vinext init — one-command project migration for Next.js apps.
4
- *
5
- * Automates the steps needed to run a Next.js app under vinext:
6
- *
7
- * 1. Run `vinext check` to show compatibility report
8
- * 2. Install dependencies (vite, @vitejs/plugin-react, and App Router deps)
9
- * 3. Add "type": "module" to package.json
10
- * 4. Rename CJS config files to .cjs
11
- * 5. Add vinext scripts to package.json
12
- * 6. Generate vite.config.ts
13
- * 7. Update .gitignore to include /dist/ and .vinext/
14
- * 8. Print summary
15
- *
16
- * Non-destructive: does NOT modify next.config, tsconfig, or source files.
17
- * The project should work with both Next.js and vinext simultaneously.
18
- */
19
5
  type InitOptions = {
20
6
  /** Project root directory */root: string; /** Dev server port (default: 3001) */
21
7
  port?: number; /** Skip the compatibility check step */
22
8
  skipCheck?: boolean; /** Force overwrite even if vite.config.ts exists */
23
- force?: boolean; /** @internal override exec for testing (avoids ESM spy issues) */
9
+ force?: boolean; /** Deployment target selected by the user */
10
+ platform?: InitPlatform; /** Configure build-time pre-rendering for all discovered static routes */
11
+ prerender?: boolean; /** Cloudflare cache and image choices. */
12
+ cloudflare?: CloudflareInitOptions; /** @internal — override exec for testing (avoids ESM spy issues) */
24
13
  _exec?: (cmd: string, opts: {
25
14
  cwd: string;
26
15
  stdio: string;
27
- }) => void;
16
+ }) => string | void | Promise<string | void>; /** @internal — override pnpm ignored-builds inspection for testing */
17
+ _inspectPnpmIgnoredBuilds?: (root: string) => string; /** @internal — stable compatibility date for snapshot tests */
18
+ _today?: string;
28
19
  };
29
20
  type InitResult = {
30
21
  /** Whether dependencies were installed */installedDeps: string[]; /** Whether "type": "module" was added */
@@ -33,37 +24,24 @@ type InitResult = {
33
24
  addedScripts: string[]; /** Whether vite.config.ts was generated */
34
25
  generatedViteConfig: boolean; /** Whether vite.config.ts generation was skipped (already exists) */
35
26
  skippedViteConfig: boolean; /** Whether .gitignore was updated to include vinext-generated output */
36
- updatedGitignore: boolean;
27
+ updatedGitignore: boolean; /** Deployment target configured by init */
28
+ platform: InitPlatform; /** Platform-specific deployment files generated by init */
29
+ generatedPlatformFiles: string[];
37
30
  };
38
- declare function generateViteConfig(_isAppRouter: boolean): string;
31
+ declare function generateViteConfig(_isAppRouter: boolean, prerender?: boolean): string;
39
32
  /**
40
33
  * Add vinext scripts to package.json without overwriting existing scripts.
41
34
  * Returns the list of script names that were added.
42
35
  */
43
36
  declare function addScripts(root: string, port: number): string[];
44
- declare function getInitDeps(isAppRouter: boolean): string[];
37
+ declare function getInitDeps(isAppRouter: boolean, platform: InitPlatform): string[];
45
38
  declare function isDepInstalled(root: string, dep: string): boolean;
46
- /**
47
- * Check if react/react-dom need upgrading for react-server-dom-webpack compatibility.
48
- *
49
- * react-server-dom-webpack versions are pinned to match their React version
50
- * (e.g. rsdw@19.2.6 requires react@^19.2.6). When a project has an older
51
- * React (e.g. create-next-app ships react@19.2.3), we need to upgrade
52
- * react/react-dom BEFORE installing rsdw to avoid peer-dep conflicts.
53
- *
54
- * Uses createRequire to resolve react's package.json through Node's module
55
- * resolution, which works correctly across all package managers (npm, pnpm,
56
- * yarn, Yarn PnP) and monorepo layouts with hoisting/symlinking.
57
- *
58
- * Returns ["react@latest", "react-dom@latest"] if upgrade is needed, [] otherwise.
59
- */
60
- declare function getReactUpgradeDeps(root: string): string[];
61
39
  /**
62
40
  * Ensure vinext-generated output directories are listed in .gitignore.
63
41
  * Creates the file if it doesn't exist. Returns true if the file was modified
64
42
  * (or created), false if all entries were already present.
65
43
  */
66
- declare function updateGitignore(root: string): boolean;
44
+ declare function updateGitignore(root: string, platform?: InitPlatform): boolean;
67
45
  declare function init(options: InitOptions): Promise<InitResult>;
68
46
  //#endregion
69
47
  export { InitOptions, addScripts, generateViteConfig, getInitDeps, getReactUpgradeDeps, init, isDepInstalled, updateGitignore };