create-rudder 1.4.1 → 1.5.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 (243) hide show
  1. package/README.md +23 -5
  2. package/dist/agent-detect.d.ts +21 -0
  3. package/dist/agent-detect.d.ts.map +1 -0
  4. package/dist/agent-detect.js +36 -0
  5. package/dist/agent-detect.js.map +1 -0
  6. package/dist/cli-flags.d.ts +60 -0
  7. package/dist/cli-flags.d.ts.map +1 -0
  8. package/dist/cli-flags.js +251 -0
  9. package/dist/cli-flags.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +642 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/logo.d.ts +6 -0
  15. package/dist/logo.d.ts.map +1 -0
  16. package/dist/logo.js +52 -0
  17. package/dist/logo.js.map +1 -0
  18. package/dist/templates/app/auth-controller.d.ts +2 -0
  19. package/dist/templates/app/auth-controller.d.ts.map +1 -0
  20. package/dist/templates/app/auth-controller.js +53 -0
  21. package/dist/templates/app/auth-controller.js.map +1 -0
  22. package/dist/templates/app/mcp-echo-server.d.ts +2 -0
  23. package/dist/templates/app/mcp-echo-server.d.ts.map +1 -0
  24. package/dist/templates/app/mcp-echo-server.js +13 -0
  25. package/dist/templates/app/mcp-echo-server.js.map +1 -0
  26. package/dist/templates/app/mcp-echo-tool.d.ts +2 -0
  27. package/dist/templates/app/mcp-echo-tool.d.ts.map +1 -0
  28. package/dist/templates/app/mcp-echo-tool.js +20 -0
  29. package/dist/templates/app/mcp-echo-tool.js.map +1 -0
  30. package/dist/templates/app/service-provider.d.ts +3 -0
  31. package/dist/templates/app/service-provider.d.ts.map +1 -0
  32. package/dist/templates/app/service-provider.js +33 -0
  33. package/dist/templates/app/service-provider.js.map +1 -0
  34. package/dist/templates/app/terminal-dashboard.d.ts +2 -0
  35. package/dist/templates/app/terminal-dashboard.d.ts.map +1 -0
  36. package/dist/templates/app/terminal-dashboard.js +22 -0
  37. package/dist/templates/app/terminal-dashboard.js.map +1 -0
  38. package/dist/templates/app/user-model.d.ts +2 -0
  39. package/dist/templates/app/user-model.d.ts.map +1 -0
  40. package/dist/templates/app/user-model.js +19 -0
  41. package/dist/templates/app/user-model.js.map +1 -0
  42. package/dist/templates/bootstrap/app.d.ts +3 -0
  43. package/dist/templates/bootstrap/app.d.ts.map +1 -0
  44. package/dist/templates/bootstrap/app.js +41 -0
  45. package/dist/templates/bootstrap/app.js.map +1 -0
  46. package/dist/templates/bootstrap/providers.d.ts +3 -0
  47. package/dist/templates/bootstrap/providers.d.ts.map +1 -0
  48. package/dist/templates/bootstrap/providers.js +27 -0
  49. package/dist/templates/bootstrap/providers.js.map +1 -0
  50. package/dist/templates/components/site-header.d.ts +4 -0
  51. package/dist/templates/components/site-header.d.ts.map +1 -0
  52. package/dist/templates/components/site-header.js +233 -0
  53. package/dist/templates/components/site-header.js.map +1 -0
  54. package/dist/templates/configs/ai.d.ts +2 -0
  55. package/dist/templates/configs/ai.d.ts.map +1 -0
  56. package/dist/templates/configs/ai.js +32 -0
  57. package/dist/templates/configs/ai.js.map +1 -0
  58. package/dist/templates/configs/app.d.ts +2 -0
  59. package/dist/templates/configs/app.d.ts.map +1 -0
  60. package/dist/templates/configs/app.js +12 -0
  61. package/dist/templates/configs/app.js.map +1 -0
  62. package/dist/templates/configs/auth.d.ts +3 -0
  63. package/dist/templates/configs/auth.d.ts.map +1 -0
  64. package/dist/templates/configs/auth.js +16 -0
  65. package/dist/templates/configs/auth.js.map +1 -0
  66. package/dist/templates/configs/cache.d.ts +2 -0
  67. package/dist/templates/configs/cache.d.ts.map +1 -0
  68. package/dist/templates/configs/cache.js +28 -0
  69. package/dist/templates/configs/cache.js.map +1 -0
  70. package/dist/templates/configs/crypt.d.ts +2 -0
  71. package/dist/templates/configs/crypt.d.ts.map +1 -0
  72. package/dist/templates/configs/crypt.js +16 -0
  73. package/dist/templates/configs/crypt.js.map +1 -0
  74. package/dist/templates/configs/database.d.ts +3 -0
  75. package/dist/templates/configs/database.d.ts.map +1 -0
  76. package/dist/templates/configs/database.js +28 -0
  77. package/dist/templates/configs/database.js.map +1 -0
  78. package/dist/templates/configs/hash.d.ts +2 -0
  79. package/dist/templates/configs/hash.d.ts.map +1 -0
  80. package/dist/templates/configs/hash.js +12 -0
  81. package/dist/templates/configs/hash.js.map +1 -0
  82. package/dist/templates/configs/horizon.d.ts +2 -0
  83. package/dist/templates/configs/horizon.d.ts.map +1 -0
  84. package/dist/templates/configs/horizon.js +30 -0
  85. package/dist/templates/configs/horizon.js.map +1 -0
  86. package/dist/templates/configs/index.d.ts +3 -0
  87. package/dist/templates/configs/index.d.ts.map +1 -0
  88. package/dist/templates/configs/index.js +92 -0
  89. package/dist/templates/configs/index.js.map +1 -0
  90. package/dist/templates/configs/localization.d.ts +2 -0
  91. package/dist/templates/configs/localization.d.ts.map +1 -0
  92. package/dist/templates/configs/localization.js +13 -0
  93. package/dist/templates/configs/localization.js.map +1 -0
  94. package/dist/templates/configs/log.d.ts +2 -0
  95. package/dist/templates/configs/log.d.ts.map +1 -0
  96. package/dist/templates/configs/log.js +40 -0
  97. package/dist/templates/configs/log.js.map +1 -0
  98. package/dist/templates/configs/mail.d.ts +2 -0
  99. package/dist/templates/configs/mail.d.ts.map +1 -0
  100. package/dist/templates/configs/mail.js +33 -0
  101. package/dist/templates/configs/mail.js.map +1 -0
  102. package/dist/templates/configs/passport.d.ts +2 -0
  103. package/dist/templates/configs/passport.d.ts.map +1 -0
  104. package/dist/templates/configs/passport.js +22 -0
  105. package/dist/templates/configs/passport.js.map +1 -0
  106. package/dist/templates/configs/pennant.d.ts +2 -0
  107. package/dist/templates/configs/pennant.d.ts.map +1 -0
  108. package/dist/templates/configs/pennant.js +16 -0
  109. package/dist/templates/configs/pennant.js.map +1 -0
  110. package/dist/templates/configs/pulse.d.ts +2 -0
  111. package/dist/templates/configs/pulse.d.ts.map +1 -0
  112. package/dist/templates/configs/pulse.js +21 -0
  113. package/dist/templates/configs/pulse.js.map +1 -0
  114. package/dist/templates/configs/queue.d.ts +2 -0
  115. package/dist/templates/configs/queue.d.ts.map +1 -0
  116. package/dist/templates/configs/queue.js +28 -0
  117. package/dist/templates/configs/queue.js.map +1 -0
  118. package/dist/templates/configs/sanctum.d.ts +2 -0
  119. package/dist/templates/configs/sanctum.d.ts.map +1 -0
  120. package/dist/templates/configs/sanctum.js +19 -0
  121. package/dist/templates/configs/sanctum.js.map +1 -0
  122. package/dist/templates/configs/server.d.ts +2 -0
  123. package/dist/templates/configs/server.d.ts.map +1 -0
  124. package/dist/templates/configs/server.js +15 -0
  125. package/dist/templates/configs/server.js.map +1 -0
  126. package/dist/templates/configs/session.d.ts +2 -0
  127. package/dist/templates/configs/session.d.ts.map +1 -0
  128. package/dist/templates/configs/session.js +26 -0
  129. package/dist/templates/configs/session.js.map +1 -0
  130. package/dist/templates/configs/socialite.d.ts +2 -0
  131. package/dist/templates/configs/socialite.d.ts.map +1 -0
  132. package/dist/templates/configs/socialite.js +27 -0
  133. package/dist/templates/configs/socialite.js.map +1 -0
  134. package/dist/templates/configs/storage.d.ts +2 -0
  135. package/dist/templates/configs/storage.d.ts.map +1 -0
  136. package/dist/templates/configs/storage.js +35 -0
  137. package/dist/templates/configs/storage.js.map +1 -0
  138. package/dist/templates/configs/sync.d.ts +3 -0
  139. package/dist/templates/configs/sync.d.ts.map +1 -0
  140. package/dist/templates/configs/sync.js +17 -0
  141. package/dist/templates/configs/sync.js.map +1 -0
  142. package/dist/templates/configs/telescope.d.ts +2 -0
  143. package/dist/templates/configs/telescope.d.ts.map +1 -0
  144. package/dist/templates/configs/telescope.js +25 -0
  145. package/dist/templates/configs/telescope.js.map +1 -0
  146. package/dist/templates/css/index.d.ts +3 -0
  147. package/dist/templates/css/index.d.ts.map +1 -0
  148. package/dist/templates/css/index.js +140 -0
  149. package/dist/templates/css/index.js.map +1 -0
  150. package/dist/templates/css/plain.d.ts +2 -0
  151. package/dist/templates/css/plain.d.ts.map +1 -0
  152. package/dist/templates/css/plain.js +373 -0
  153. package/dist/templates/css/plain.js.map +1 -0
  154. package/dist/templates/css/tailwind.d.ts +2 -0
  155. package/dist/templates/css/tailwind.d.ts.map +1 -0
  156. package/dist/templates/css/tailwind.js +176 -0
  157. package/dist/templates/css/tailwind.js.map +1 -0
  158. package/dist/templates/env.d.ts +7 -0
  159. package/dist/templates/env.d.ts.map +1 -0
  160. package/dist/templates/env.js +113 -0
  161. package/dist/templates/env.js.map +1 -0
  162. package/dist/templates/package-json.d.ts +3 -0
  163. package/dist/templates/package-json.d.ts.map +1 -0
  164. package/dist/templates/package-json.js +204 -0
  165. package/dist/templates/package-json.js.map +1 -0
  166. package/dist/templates/package-managers.d.ts +14 -0
  167. package/dist/templates/package-managers.d.ts.map +1 -0
  168. package/dist/templates/package-managers.js +49 -0
  169. package/dist/templates/package-managers.js.map +1 -0
  170. package/dist/templates/pages/ai-chat.d.ts +7 -0
  171. package/dist/templates/pages/ai-chat.d.ts.map +1 -0
  172. package/dist/templates/pages/ai-chat.js +285 -0
  173. package/dist/templates/pages/ai-chat.js.map +1 -0
  174. package/dist/templates/pages/demo.d.ts +4 -0
  175. package/dist/templates/pages/demo.d.ts.map +1 -0
  176. package/dist/templates/pages/demo.js +71 -0
  177. package/dist/templates/pages/demo.js.map +1 -0
  178. package/dist/templates/pages/error.d.ts +7 -0
  179. package/dist/templates/pages/error.d.ts.map +1 -0
  180. package/dist/templates/pages/error.js +148 -0
  181. package/dist/templates/pages/error.js.map +1 -0
  182. package/dist/templates/pages/index.d.ts +22 -0
  183. package/dist/templates/pages/index.d.ts.map +1 -0
  184. package/dist/templates/pages/index.js +374 -0
  185. package/dist/templates/pages/index.js.map +1 -0
  186. package/dist/templates/prisma/auth.d.ts +2 -0
  187. package/dist/templates/prisma/auth.d.ts.map +1 -0
  188. package/dist/templates/prisma/auth.js +22 -0
  189. package/dist/templates/prisma/auth.js.map +1 -0
  190. package/dist/templates/prisma/base.d.ts +3 -0
  191. package/dist/templates/prisma/base.d.ts.map +1 -0
  192. package/dist/templates/prisma/base.js +14 -0
  193. package/dist/templates/prisma/base.js.map +1 -0
  194. package/dist/templates/prisma/config.d.ts +3 -0
  195. package/dist/templates/prisma/config.d.ts.map +1 -0
  196. package/dist/templates/prisma/config.js +15 -0
  197. package/dist/templates/prisma/config.js.map +1 -0
  198. package/dist/templates/prisma/notification.d.ts +2 -0
  199. package/dist/templates/prisma/notification.d.ts.map +1 -0
  200. package/dist/templates/prisma/notification.js +16 -0
  201. package/dist/templates/prisma/notification.js.map +1 -0
  202. package/dist/templates/prisma/passport.d.ts +2 -0
  203. package/dist/templates/prisma/passport.d.ts.map +1 -0
  204. package/dist/templates/prisma/passport.js +69 -0
  205. package/dist/templates/prisma/passport.js.map +1 -0
  206. package/dist/templates/routes/api.d.ts +3 -0
  207. package/dist/templates/routes/api.d.ts.map +1 -0
  208. package/dist/templates/routes/api.js +76 -0
  209. package/dist/templates/routes/api.js.map +1 -0
  210. package/dist/templates/routes/console.d.ts +3 -0
  211. package/dist/templates/routes/console.d.ts.map +1 -0
  212. package/dist/templates/routes/console.js +29 -0
  213. package/dist/templates/routes/console.js.map +1 -0
  214. package/dist/templates/routes/web.d.ts +4 -0
  215. package/dist/templates/routes/web.d.ts.map +1 -0
  216. package/dist/templates/routes/web.js +77 -0
  217. package/dist/templates/routes/web.js.map +1 -0
  218. package/dist/templates/routes-manifest.d.ts +28 -0
  219. package/dist/templates/routes-manifest.d.ts.map +1 -0
  220. package/dist/templates/routes-manifest.js +48 -0
  221. package/dist/templates/routes-manifest.js.map +1 -0
  222. package/dist/templates/server.d.ts +2 -0
  223. package/dist/templates/server.d.ts.map +1 -0
  224. package/dist/templates/server.js +10 -0
  225. package/dist/templates/server.js.map +1 -0
  226. package/dist/templates/tsconfig.d.ts +3 -0
  227. package/dist/templates/tsconfig.d.ts.map +1 -0
  228. package/dist/templates/tsconfig.js +33 -0
  229. package/dist/templates/tsconfig.js.map +1 -0
  230. package/dist/templates/views/welcome.d.ts +19 -0
  231. package/dist/templates/views/welcome.d.ts.map +1 -0
  232. package/dist/templates/views/welcome.js +338 -0
  233. package/dist/templates/views/welcome.js.map +1 -0
  234. package/dist/templates/vite.d.ts +3 -0
  235. package/dist/templates/vite.d.ts.map +1 -0
  236. package/dist/templates/vite.js +66 -0
  237. package/dist/templates/vite.js.map +1 -0
  238. package/dist/templates.d.ts +45 -0
  239. package/dist/templates.d.ts.map +1 -0
  240. package/dist/templates.js +202 -0
  241. package/dist/templates.js.map +1 -0
  242. package/package.json +27 -7
  243. package/bin/index.mjs +0 -18
package/README.md CHANGED
@@ -8,7 +8,13 @@ cd my-app && pnpm dev
8
8
  # → http://localhost:3000 — welcome page + register/login working end-to-end
9
9
  ```
10
10
 
11
- Works with every major package manager the installer detects which one you used and adapts every generated file, install command, and post-scaffold hint.
11
+ The installer asks four to six questions, then runs `pnpm install`, generates the Prisma client, pushes the schema (for SQLite) or asks first (for Postgres/MySQL), publishes auth views, generates Passport keys (when selected), and initializes git — all in one shot.
12
+
13
+ ---
14
+
15
+ ## Install
16
+
17
+ All four major package managers work. The installer detects which one you used and adapts every generated file, install command, and post-scaffold hint.
12
18
 
13
19
  ```bash
14
20
  pnpm create rudder [name]
@@ -17,13 +23,15 @@ yarn create rudder [name]
17
23
  bunx create-rudder [name]
18
24
  ```
19
25
 
20
- Skip `[name]` to be prompted for one. The installer then asks four to six questions, runs `pnpm install`, generates the Prisma client, pushes the schema (for SQLite) or asks first (for Postgres/MySQL), publishes auth views, generates Passport keys (when selected), and initializes git — all in one shot.
26
+ Skip `[name]` to be prompted for one.
27
+
28
+ > The legacy `create-rudder-app` invocation (`pnpm create rudder-app …`) still works — it now prints a one-line nudge to switch to `create-rudder` and otherwise scaffolds identically.
21
29
 
22
30
  ---
23
31
 
24
32
  ## Full documentation
25
33
 
26
- Recipe table, prompt-by-prompt walkthrough, generated structure, non-interactive (CI/AI agent) flag list, after-scaffold cascade — all live with the framework guide:
34
+ The detailed scaffolder docs — recipe table, prompt-by-prompt walkthrough, generated structure, non-interactive (CI/AI agent) flag list, after-scaffold cascade — live with the framework guide:
27
35
 
28
36
  - **Installation guide**: <https://github.com/rudderjs/rudder/blob/main/docs/guide/installation.md>
29
37
  - **Main framework**: <https://github.com/rudderjs/rudder>
@@ -31,9 +39,19 @@ Recipe table, prompt-by-prompt walkthrough, generated structure, non-interactive
31
39
 
32
40
  ---
33
41
 
34
- ## About this package
42
+ ## Contributing to the scaffolder
43
+
44
+ The scaffolder source lives at `create-rudder/` in the framework monorepo (the `create-rudder-app` package is a thin stub that re-spawns this one):
35
45
 
36
- `create-rudder` is the package you reach for when you run `npm create rudder@latest`. It's a thin alias around [`create-rudder-app`](https://www.npmjs.com/package/create-rudder-app), which still exists for backwards compatibility — both spawn the same scaffolder. New docs use the shorter `create-rudder` form to match the brand.
46
+ ```bash
47
+ git clone https://github.com/rudderjs/rudder.git
48
+ cd rudder/create-rudder
49
+ pnpm install
50
+ pnpm build
51
+ node dist/index.js # launches the interactive CLI from source
52
+ pnpm test # template tests + snapshot baseline
53
+ pnpm smoke # default end-to-end smoke
54
+ ```
37
55
 
38
56
  ---
39
57
 
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Detect when create-rudder is running inside an AI coding agent.
3
+ *
4
+ * In agent contexts the interactive @clack/prompts UI degrades to garbage
5
+ * (TTY redraws, ANSI escapes the agent can't fill in), and the agent often
6
+ * just hangs or times out. When detected, the installer switches to a
7
+ * non-interactive flag-driven mode and emits a single line of JSON to stdout.
8
+ *
9
+ * Inspired by Laravel Installer v5.27 (Joe Tannenbaum, 2025).
10
+ */
11
+ export interface AgentDetectionResult {
12
+ detected: boolean;
13
+ /** Friendly name of the detected agent, included in JSON output. */
14
+ name?: string;
15
+ }
16
+ /**
17
+ * Inspect process.env for markers set by common agent runtimes.
18
+ * Returns the first match in declaration order.
19
+ */
20
+ export declare function detectAgent(env?: NodeJS.ProcessEnv): AgentDetectionResult;
21
+ //# sourceMappingURL=agent-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-detect.d.ts","sourceRoot":"","sources":["../src/agent-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAA;IACjB,oEAAoE;IACpE,IAAI,CAAC,EAAK,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,oBAAoB,CA8BtF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Inspect process.env for markers set by common agent runtimes.
3
+ * Returns the first match in declaration order.
4
+ */
5
+ export function detectAgent(env = process.env) {
6
+ // Claude Code — sets CLAUDECODE=1 and CLAUDE_CODE_ENTRYPOINT
7
+ if (env['CLAUDECODE'] || env['CLAUDE_CODE_ENTRYPOINT']) {
8
+ return { detected: true, name: 'claude-code' };
9
+ }
10
+ // Cursor — sets CURSOR_TRACE_ID; also reports TERM_PROGRAM=cursor in the integrated terminal
11
+ if (env['CURSOR_TRACE_ID'] || env['TERM_PROGRAM'] === 'cursor') {
12
+ return { detected: true, name: 'cursor' };
13
+ }
14
+ // GitHub Copilot CLI
15
+ if (env['GITHUB_COPILOT_CLI']) {
16
+ return { detected: true, name: 'copilot' };
17
+ }
18
+ // OpenAI Codex CLI
19
+ if (env['CODEX_CLI'] || env['OPENAI_CODEX']) {
20
+ return { detected: true, name: 'codex' };
21
+ }
22
+ // Google Gemini CLI
23
+ if (env['GEMINI_CLI']) {
24
+ return { detected: true, name: 'gemini' };
25
+ }
26
+ // Windsurf
27
+ if (env['WINDSURF_AGENT'] || env['WINDSURF']) {
28
+ return { detected: true, name: 'windsurf' };
29
+ }
30
+ // Generic opt-in (CI, scripts, custom integrations)
31
+ if (env['RUDDER_NONINTERACTIVE'] === '1' || env['RUDDER_NONINTERACTIVE'] === 'true') {
32
+ return { detected: true, name: 'noninteractive' };
33
+ }
34
+ return { detected: false };
35
+ }
36
+ //# sourceMappingURL=agent-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-detect.js","sourceRoot":"","sources":["../src/agent-detect.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,6DAA6D;IAC7D,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;IAChD,CAAC;IACD,6FAA6F;IAC7F,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3C,CAAC;IACD,qBAAqB;IACrB,IAAI,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;IAC5C,CAAC;IACD,mBAAmB;IACnB,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1C,CAAC;IACD,oBAAoB;IACpB,IAAI,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3C,CAAC;IACD,WAAW;IACX,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IAC7C,CAAC;IACD,oDAAoD;IACpD,IAAI,GAAG,CAAC,uBAAuB,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,KAAK,MAAM,EAAE,CAAC;QACpF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { TemplateContext } from './templates.js';
2
+ export type Frameworks = ('react' | 'vue' | 'solid')[];
3
+ export type Orm = 'prisma' | 'drizzle' | false;
4
+ export type Db = 'sqlite' | 'postgresql' | 'mysql';
5
+ export type Recipe = 'web-app' | 'saas' | 'api-service' | 'realtime' | 'minimal' | 'custom';
6
+ export type Styling = 'tailwind+shadcn' | 'tailwind' | 'plain';
7
+ export interface Answers {
8
+ name: string;
9
+ recipe: Recipe;
10
+ orm: Orm;
11
+ db: Db;
12
+ packages: TemplateContext['packages'];
13
+ /** Single framework picked in the new flow; multi-framework only via legacy --frameworks flag. */
14
+ frameworks: Frameworks;
15
+ primary: 'react' | 'vue' | 'solid';
16
+ tailwind: boolean;
17
+ shadcn: boolean;
18
+ /** Whether to run `git init` + initial commit after scaffolding. */
19
+ git: boolean;
20
+ /** Whether the user's DB is currently reachable — set to false to skip `db:push`. */
21
+ dbReady: boolean;
22
+ install: boolean;
23
+ }
24
+ /**
25
+ * Recipe → packages preset. Each recipe is a curated bundle that covers
26
+ * what the named scenario actually needs. "Custom" carries no preset —
27
+ * the user picks packages via the (legacy) multiselect.
28
+ */
29
+ export declare const RECIPES: Record<Exclude<Recipe, 'custom'>, {
30
+ packages: ReadonlyArray<keyof TemplateContext['packages']>;
31
+ needsOrm: boolean;
32
+ needsFrontend: boolean;
33
+ }>;
34
+ export type PartialAnswers = Partial<Answers>;
35
+ export interface ParsedFlags {
36
+ name: string | undefined;
37
+ partial: PartialAnswers;
38
+ jsonRequested: boolean;
39
+ forceInteractive: boolean;
40
+ }
41
+ export declare class FlagError extends Error {
42
+ }
43
+ export declare const PACKAGE_KEYS: ReadonlyArray<keyof TemplateContext['packages']>;
44
+ export declare const DB_GATED: Set<string>;
45
+ export declare function emptyPackages(): TemplateContext['packages'];
46
+ export declare function packagesFromList(list: string[], orm: Orm): TemplateContext['packages'];
47
+ export declare function parseFlags(argv: string[]): ParsedFlags;
48
+ /**
49
+ * JSON-mode required-flags validation.
50
+ *
51
+ * Two valid call shapes:
52
+ * 1. Recipe shortcut — `--recipe + --db + --install` (and `--framework`
53
+ * when the recipe has `needsFrontend: true`). Everything else inferred.
54
+ * 2. Legacy explicit — `--orm + --packages + --frameworks + --tailwind +
55
+ * --install` (the pre-recipe contract; still supported for older
56
+ * scripts/CI).
57
+ */
58
+ export declare function validateJsonMode(name: string | undefined, p: PartialAnswers): string[];
59
+ export declare function resolveJsonAnswers(name: string, p: PartialAnswers): Answers;
60
+ //# sourceMappingURL=cli-flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-flags.d.ts","sourceRoot":"","sources":["../src/cli-flags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,EAAE,CAAA;AACtD,MAAM,MAAM,GAAG,GAAU,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAA;AACrD,MAAM,MAAM,EAAE,GAAW,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAA;AAC1D,MAAM,MAAM,MAAM,GAAO,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;AAC/F,MAAM,MAAM,OAAO,GAAM,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAA;AAEjE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAQ,MAAM,CAAA;IAClB,MAAM,EAAM,MAAM,CAAA;IAClB,GAAG,EAAS,GAAG,CAAA;IACf,EAAE,EAAU,EAAE,CAAA;IACd,QAAQ,EAAI,eAAe,CAAC,UAAU,CAAC,CAAA;IACvC,kGAAkG;IAClG,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAK,OAAO,GAAG,KAAK,GAAG,OAAO,CAAA;IACrC,QAAQ,EAAI,OAAO,CAAA;IACnB,MAAM,EAAM,OAAO,CAAA;IACnB,oEAAoE;IACpE,GAAG,EAAS,OAAO,CAAA;IACnB,qFAAqF;IACrF,OAAO,EAAK,OAAO,CAAA;IACnB,OAAO,EAAK,OAAO,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;IACtD,QAAQ,EAAK,aAAa,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC,CAAA;IAC7D,QAAQ,EAAK,OAAO,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;CACvB,CAMS,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAc,MAAM,GAAG,SAAS,CAAA;IACpC,OAAO,EAAW,cAAc,CAAA;IAChC,aAAa,EAAK,OAAO,CAAA;IACzB,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,qBAAa,SAAU,SAAQ,KAAK;CAAG;AAEvC,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,CAQhE,CAAA;AAEV,eAAO,MAAM,QAAQ,aAA2C,CAAA;AAEhE,wBAAgB,aAAa,IAAI,eAAe,CAAC,UAAU,CAAC,CAI3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,CAWtF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAmGtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,EAAE,CA4BtF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,OAAO,CAmD3E"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Recipe → packages preset. Each recipe is a curated bundle that covers
3
+ * what the named scenario actually needs. "Custom" carries no preset —
4
+ * the user picks packages via the (legacy) multiselect.
5
+ */
6
+ export const RECIPES = {
7
+ 'web-app': { packages: ['auth'], needsOrm: true, needsFrontend: true },
8
+ 'saas': { packages: ['auth', 'queue', 'mail', 'notifications'], needsOrm: true, needsFrontend: true },
9
+ 'api-service': { packages: ['auth', 'http'], needsOrm: true, needsFrontend: false },
10
+ 'realtime': { packages: ['auth', 'broadcast', 'sync'], needsOrm: true, needsFrontend: true },
11
+ 'minimal': { packages: [], needsOrm: false, needsFrontend: false },
12
+ };
13
+ export class FlagError extends Error {
14
+ }
15
+ export const PACKAGE_KEYS = [
16
+ 'auth', 'sanctum', 'passport', 'socialite',
17
+ 'queue', 'storage', 'scheduler',
18
+ 'image', 'mail', 'notifications', 'broadcast', 'sync',
19
+ 'ai', 'mcp', 'boost',
20
+ 'localization', 'pennant',
21
+ 'telescope', 'pulse', 'horizon',
22
+ 'crypt', 'http', 'process', 'concurrency', 'terminal',
23
+ ];
24
+ export const DB_GATED = new Set(['auth', 'sanctum', 'passport']);
25
+ export function emptyPackages() {
26
+ const out = {};
27
+ for (const k of PACKAGE_KEYS)
28
+ out[k] = false;
29
+ return out;
30
+ }
31
+ export function packagesFromList(list, orm) {
32
+ const out = emptyPackages();
33
+ const wanted = list.includes('*')
34
+ ? PACKAGE_KEYS.filter(k => orm !== false || !DB_GATED.has(k))
35
+ : list;
36
+ for (const k of wanted) {
37
+ if (PACKAGE_KEYS.includes(k)) {
38
+ ;
39
+ out[k] = true;
40
+ }
41
+ }
42
+ return out;
43
+ }
44
+ export function parseFlags(argv) {
45
+ let name;
46
+ const flags = {};
47
+ const bools = {};
48
+ for (const arg of argv) {
49
+ if (!arg.startsWith('--')) {
50
+ if (!name)
51
+ name = arg;
52
+ continue;
53
+ }
54
+ const eq = arg.indexOf('=');
55
+ if (eq !== -1)
56
+ flags[arg.slice(2, eq)] = arg.slice(eq + 1);
57
+ else
58
+ bools[arg.slice(2)] = true;
59
+ }
60
+ const partial = {};
61
+ if (flags['orm']) {
62
+ const v = flags['orm'];
63
+ if (v === 'none')
64
+ partial.orm = false;
65
+ else if (v === 'prisma' || v === 'drizzle')
66
+ partial.orm = v;
67
+ else
68
+ throw new FlagError(`--orm must be one of: prisma, drizzle, none (got "${v}")`);
69
+ }
70
+ if (flags['db']) {
71
+ const v = flags['db'];
72
+ if (v === 'sqlite' || v === 'postgresql' || v === 'mysql')
73
+ partial.db = v;
74
+ else
75
+ throw new FlagError(`--db must be one of: sqlite, postgresql, mysql (got "${v}")`);
76
+ }
77
+ if (flags['packages'] !== undefined) {
78
+ const list = flags['packages'].split(',').map(s => s.trim()).filter(Boolean);
79
+ const valid = new Set([...PACKAGE_KEYS, '*']);
80
+ for (const k of list) {
81
+ if (!valid.has(k))
82
+ throw new FlagError(`--packages: unknown package "${k}". Valid: ${[...valid].join(', ')}`);
83
+ }
84
+ partial.packages = packagesFromList(list, partial.orm ?? 'prisma');
85
+ }
86
+ if (flags['frameworks'] !== undefined) {
87
+ const list = flags['frameworks'].split(',').map(s => s.trim()).filter(Boolean);
88
+ for (const f of list) {
89
+ if (f !== 'react' && f !== 'vue' && f !== 'solid') {
90
+ throw new FlagError(`--frameworks: unknown framework "${f}". Valid: react, vue, solid`);
91
+ }
92
+ }
93
+ if (list.length === 0)
94
+ throw new FlagError('--frameworks must include at least one of: react, vue, solid');
95
+ partial.frameworks = list;
96
+ }
97
+ if (flags['primary-framework']) {
98
+ const v = flags['primary-framework'];
99
+ if (v !== 'react' && v !== 'vue' && v !== 'solid') {
100
+ throw new FlagError(`--primary-framework must be one of: react, vue, solid (got "${v}")`);
101
+ }
102
+ partial.primary = v;
103
+ }
104
+ if ('tailwind' in flags)
105
+ partial.tailwind = flags['tailwind'] === 'true';
106
+ if ('shadcn' in flags)
107
+ partial.shadcn = flags['shadcn'] === 'true';
108
+ if ('install' in flags)
109
+ partial.install = flags['install'] === 'true';
110
+ if ('git' in flags)
111
+ partial.git = flags['git'] === 'true';
112
+ if ('db-ready' in flags)
113
+ partial.dbReady = flags['db-ready'] === 'true';
114
+ // --recipe — preset that derives orm/packages/needsFrontend.
115
+ if (flags['recipe']) {
116
+ const v = flags['recipe'];
117
+ const valid = new Set(['web-app', 'saas', 'api-service', 'realtime', 'minimal', 'custom']);
118
+ if (!valid.has(v)) {
119
+ throw new FlagError(`--recipe must be one of: ${[...valid].join(', ')} (got "${v}")`);
120
+ }
121
+ partial.recipe = v;
122
+ }
123
+ // --framework — singular shortcut. Maps to --frameworks=react + --primary-framework=react.
124
+ if (flags['framework']) {
125
+ const v = flags['framework'];
126
+ if (v !== 'react' && v !== 'vue' && v !== 'solid' && v !== 'none') {
127
+ throw new FlagError(`--framework must be one of: react, vue, solid, none (got "${v}")`);
128
+ }
129
+ if (v === 'none') {
130
+ partial.frameworks = [];
131
+ }
132
+ else {
133
+ partial.frameworks = [v];
134
+ partial.primary = v;
135
+ }
136
+ }
137
+ // --styling — collapses --tailwind + --shadcn into one. Explicit --tailwind/--shadcn override.
138
+ if (flags['styling']) {
139
+ const v = flags['styling'];
140
+ if (v !== 'tailwind+shadcn' && v !== 'tailwind' && v !== 'plain') {
141
+ throw new FlagError(`--styling must be one of: tailwind+shadcn, tailwind, plain (got "${v}")`);
142
+ }
143
+ if (partial.tailwind === undefined)
144
+ partial.tailwind = v !== 'plain';
145
+ if (partial.shadcn === undefined)
146
+ partial.shadcn = v === 'tailwind+shadcn';
147
+ }
148
+ return {
149
+ name,
150
+ partial,
151
+ jsonRequested: bools['json'] ?? false,
152
+ forceInteractive: bools['interactive'] ?? false,
153
+ };
154
+ }
155
+ /**
156
+ * JSON-mode required-flags validation.
157
+ *
158
+ * Two valid call shapes:
159
+ * 1. Recipe shortcut — `--recipe + --db + --install` (and `--framework`
160
+ * when the recipe has `needsFrontend: true`). Everything else inferred.
161
+ * 2. Legacy explicit — `--orm + --packages + --frameworks + --tailwind +
162
+ * --install` (the pre-recipe contract; still supported for older
163
+ * scripts/CI).
164
+ */
165
+ export function validateJsonMode(name, p) {
166
+ const missing = [];
167
+ if (!name)
168
+ missing.push('<project-name>');
169
+ if (p.recipe) {
170
+ // Recipe path — most fields inferred from the preset.
171
+ if (p.recipe !== 'custom' && p.recipe !== 'minimal' && !p.db)
172
+ missing.push('--db');
173
+ const preset = p.recipe === 'custom' ? null : RECIPES[p.recipe];
174
+ if (preset?.needsFrontend && !p.frameworks?.length && !p.primary) {
175
+ missing.push('--framework');
176
+ }
177
+ if (p.recipe === 'custom' && p.packages === undefined)
178
+ missing.push('--packages');
179
+ if (p.install === undefined)
180
+ missing.push('--install');
181
+ return missing;
182
+ }
183
+ // Legacy explicit path
184
+ if (p.orm === undefined)
185
+ missing.push('--orm');
186
+ if (p.orm !== false && !p.db)
187
+ missing.push('--db');
188
+ if (p.packages === undefined)
189
+ missing.push('--packages');
190
+ if (!p.frameworks)
191
+ missing.push('--frameworks');
192
+ if (p.frameworks && p.frameworks.length > 1 && !p.primary)
193
+ missing.push('--primary-framework');
194
+ if (p.tailwind === undefined)
195
+ missing.push('--tailwind');
196
+ if (p.frameworks?.includes('react') && p.tailwind === true && p.shadcn === undefined) {
197
+ missing.push('--shadcn');
198
+ }
199
+ if (p.install === undefined)
200
+ missing.push('--install');
201
+ return missing;
202
+ }
203
+ export function resolveJsonAnswers(name, p) {
204
+ // Recipe path — derive everything from the preset, with explicit flags as overrides.
205
+ if (p.recipe) {
206
+ const recipe = p.recipe;
207
+ const preset = recipe === 'custom' ? null : RECIPES[recipe];
208
+ const orm = p.orm !== undefined
209
+ ? p.orm
210
+ : (preset?.needsOrm ? 'prisma' : false);
211
+ const db = (orm === false ? 'sqlite' : (p.db ?? 'sqlite'));
212
+ const packages = recipe === 'custom'
213
+ ? p.packages
214
+ : packagesFromList([...(preset?.packages ?? [])], orm);
215
+ // Allow explicit overrides on top of the recipe
216
+ if (recipe !== 'custom' && p.packages) {
217
+ for (const k of Object.keys(p.packages)) {
218
+ if (p.packages[k])
219
+ packages[k] = true;
220
+ }
221
+ }
222
+ const wantsFrontend = preset ? preset.needsFrontend : (p.frameworks?.length ?? 0) > 0;
223
+ const frameworks = wantsFrontend
224
+ ? (p.frameworks?.length ? p.frameworks : ['react'])
225
+ : [];
226
+ const primary = (frameworks[0] ?? p.primary ?? 'react');
227
+ const tailwind = p.tailwind ?? wantsFrontend;
228
+ const shadcn = p.shadcn ?? (wantsFrontend && primary === 'react' && tailwind);
229
+ return {
230
+ name, recipe, orm, db, packages, frameworks, primary, tailwind, shadcn,
231
+ git: p.git ?? true,
232
+ dbReady: p.dbReady ?? (db === 'sqlite'),
233
+ install: p.install,
234
+ };
235
+ }
236
+ // Legacy explicit path (pre-recipe)
237
+ const orm = p.orm;
238
+ const db = (orm === false ? 'sqlite' : p.db);
239
+ const packages = p.packages;
240
+ const frameworks = p.frameworks;
241
+ const primary = p.primary ?? frameworks[0];
242
+ const tailwind = p.tailwind;
243
+ const shadcn = p.shadcn ?? false;
244
+ return {
245
+ name, recipe: 'custom', orm, db, packages, frameworks, primary, tailwind, shadcn,
246
+ git: p.git ?? true,
247
+ dbReady: p.dbReady ?? (db === 'sqlite'),
248
+ install: p.install,
249
+ };
250
+ }
251
+ //# sourceMappingURL=cli-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-flags.js","sourceRoot":"","sources":["../src/cli-flags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}