create-lumen 2.0.0-alpha.2 → 2.0.0-beta.2

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 (174) hide show
  1. package/README.md +24 -6
  2. package/bin/cli.js +2 -1
  3. package/package.json +2 -2
  4. package/schema/lumen.config.v2.json +29 -0
  5. package/src/agent-context.js +71 -47
  6. package/src/cleanup.js +19 -1
  7. package/src/cli-args.js +131 -5
  8. package/src/configure.js +8 -4
  9. package/src/dependencies.js +46 -13
  10. package/src/engine/capabilities.js +71 -1
  11. package/src/engine/composition.js +334 -17
  12. package/src/engine/providers/base-provider.js +4 -4
  13. package/src/env.js +24 -6
  14. package/src/main.js +38 -15
  15. package/src/manifest/emit.js +14 -1
  16. package/src/manifest/schema.js +30 -0
  17. package/src/prompts.js +227 -23
  18. package/templates/bases/next/app-router/js/.provenance.json +19 -0
  19. package/templates/bases/next/app-router/js/README.md +36 -0
  20. package/templates/bases/next/app-router/js/jsconfig.json +7 -0
  21. package/templates/bases/next/app-router/js/next.config.mjs +6 -0
  22. package/templates/bases/next/app-router/js/package.json +15 -0
  23. package/templates/bases/next/app-router/js/public/file.svg +1 -0
  24. package/templates/bases/next/app-router/js/public/globe.svg +1 -0
  25. package/templates/bases/next/app-router/js/public/next.svg +1 -0
  26. package/templates/bases/next/app-router/js/public/vercel.svg +1 -0
  27. package/templates/bases/next/app-router/js/public/window.svg +1 -0
  28. package/templates/bases/next/app-router/js/src/app/api/hello/route.js +5 -0
  29. package/templates/bases/next/app-router/js/src/app/blog/[slug]/page.js +33 -0
  30. package/templates/bases/next/app-router/js/src/app/favicon.ico +0 -0
  31. package/templates/bases/next/app-router/js/src/app/globals.css +49 -0
  32. package/templates/bases/next/app-router/js/src/app/layout.js +25 -0
  33. package/templates/bases/next/app-router/js/src/app/loading.js +15 -0
  34. package/templates/bases/next/app-router/js/src/app/not-found.js +29 -0
  35. package/templates/bases/next/app-router/js/src/app/page.js +69 -0
  36. package/templates/bases/next/app-router/js/src/app/page.module.css +150 -0
  37. package/templates/bases/next/app-router/ts/.provenance.json +19 -0
  38. package/templates/bases/next/app-router/ts/README.md +36 -0
  39. package/templates/bases/next/app-router/ts/next.config.ts +7 -0
  40. package/templates/bases/next/app-router/ts/package.json +21 -0
  41. package/templates/bases/next/app-router/ts/public/file.svg +1 -0
  42. package/templates/bases/next/app-router/ts/public/globe.svg +1 -0
  43. package/templates/bases/next/app-router/ts/public/next.svg +1 -0
  44. package/templates/bases/next/app-router/ts/public/vercel.svg +1 -0
  45. package/templates/bases/next/app-router/ts/public/window.svg +1 -0
  46. package/templates/bases/next/app-router/ts/src/app/api/hello/route.ts +5 -0
  47. package/templates/bases/next/app-router/ts/src/app/blog/[slug]/page.tsx +38 -0
  48. package/templates/bases/next/app-router/ts/src/app/favicon.ico +0 -0
  49. package/templates/bases/next/app-router/ts/src/app/globals.css +49 -0
  50. package/templates/bases/next/app-router/ts/src/app/layout.tsx +30 -0
  51. package/templates/bases/next/app-router/ts/src/app/loading.tsx +15 -0
  52. package/templates/bases/next/app-router/ts/src/app/not-found.tsx +29 -0
  53. package/templates/bases/next/app-router/ts/src/app/page.module.css +150 -0
  54. package/templates/bases/next/app-router/ts/src/app/page.tsx +69 -0
  55. package/templates/bases/next/app-router/ts/tsconfig.json +34 -0
  56. package/templates/bases/next/pages-router/js/.provenance.json +19 -0
  57. package/templates/bases/next/pages-router/js/README.md +40 -0
  58. package/templates/bases/next/pages-router/js/jsconfig.json +7 -0
  59. package/templates/bases/next/pages-router/js/next.config.mjs +7 -0
  60. package/templates/bases/next/pages-router/js/package.json +15 -0
  61. package/templates/bases/next/pages-router/js/public/favicon.ico +0 -0
  62. package/templates/bases/next/pages-router/js/public/file.svg +1 -0
  63. package/templates/bases/next/pages-router/js/public/globe.svg +1 -0
  64. package/templates/bases/next/pages-router/js/public/next.svg +1 -0
  65. package/templates/bases/next/pages-router/js/public/vercel.svg +1 -0
  66. package/templates/bases/next/pages-router/js/public/window.svg +1 -0
  67. package/templates/bases/next/pages-router/js/src/pages/404.js +35 -0
  68. package/templates/bases/next/pages-router/js/src/pages/500.js +35 -0
  69. package/templates/bases/next/pages-router/js/src/pages/_app.js +20 -0
  70. package/templates/bases/next/pages-router/js/src/pages/_document.js +15 -0
  71. package/templates/bases/next/pages-router/js/src/pages/api/hello.js +5 -0
  72. package/templates/bases/next/pages-router/js/src/pages/blog/[slug].js +41 -0
  73. package/templates/bases/next/pages-router/js/src/pages/index.js +77 -0
  74. package/templates/bases/next/pages-router/js/src/styles/Home.module.css +149 -0
  75. package/templates/bases/next/pages-router/js/src/styles/globals.css +42 -0
  76. package/templates/bases/next/pages-router/ts/.provenance.json +19 -0
  77. package/templates/bases/next/pages-router/ts/README.md +40 -0
  78. package/templates/bases/next/pages-router/ts/next.config.ts +8 -0
  79. package/templates/bases/next/pages-router/ts/package.json +21 -0
  80. package/templates/bases/next/pages-router/ts/public/favicon.ico +0 -0
  81. package/templates/bases/next/pages-router/ts/public/file.svg +1 -0
  82. package/templates/bases/next/pages-router/ts/public/globe.svg +1 -0
  83. package/templates/bases/next/pages-router/ts/public/next.svg +1 -0
  84. package/templates/bases/next/pages-router/ts/public/vercel.svg +1 -0
  85. package/templates/bases/next/pages-router/ts/public/window.svg +1 -0
  86. package/templates/bases/next/pages-router/ts/src/pages/404.tsx +35 -0
  87. package/templates/bases/next/pages-router/ts/src/pages/500.tsx +35 -0
  88. package/templates/bases/next/pages-router/ts/src/pages/_app.tsx +21 -0
  89. package/templates/bases/next/pages-router/ts/src/pages/_document.tsx +15 -0
  90. package/templates/bases/next/pages-router/ts/src/pages/api/hello.ts +13 -0
  91. package/templates/bases/next/pages-router/ts/src/pages/blog/[slug].tsx +46 -0
  92. package/templates/bases/next/pages-router/ts/src/pages/index.tsx +77 -0
  93. package/templates/bases/next/pages-router/ts/src/styles/Home.module.css +149 -0
  94. package/templates/bases/next/pages-router/ts/src/styles/globals.css +42 -0
  95. package/templates/bases/next/pages-router/ts/tsconfig.json +29 -0
  96. package/templates/conditional/database/prisma/db.js +14 -0
  97. package/templates/conditional/database/prisma/db.ts +16 -0
  98. package/templates/conditional/database/prisma/schema.prisma +9 -0
  99. package/templates/conditional/database/prisma/seed.js +16 -0
  100. package/templates/conditional/database/prisma/seed.ts +16 -0
  101. package/templates/conditional/docker/.dockerignore +10 -0
  102. package/templates/conditional/docker/Dockerfile +57 -0
  103. package/templates/conditional/docker/docker-compose.yml +35 -0
  104. package/templates/conditional/linting/biome/biome.json +31 -0
  105. package/templates/conditional/next/config/cloudflare/next.config.mjs +6 -0
  106. package/templates/conditional/next/config/cloudflare/next.config.ts +7 -0
  107. package/templates/conditional/next/config/node/next.config.mjs +6 -0
  108. package/templates/conditional/next/config/node/next.config.ts +7 -0
  109. package/templates/conditional/next/config/static/next.config.mjs +6 -0
  110. package/templates/conditional/next/config/static/next.config.ts +7 -0
  111. package/templates/conditional/next/config/turbopack/next.config.mjs +7 -0
  112. package/templates/conditional/next/config/turbopack/next.config.ts +8 -0
  113. package/templates/conditional/next/config/vercel/next.config.mjs +6 -0
  114. package/templates/conditional/next/config/vercel/next.config.ts +7 -0
  115. package/templates/conditional/next/config/webpack/next.config.mjs +9 -0
  116. package/templates/conditional/next/config/webpack/next.config.ts +10 -0
  117. package/templates/conditional/next/font/BUILD_SIZE_NOTE.md +17 -0
  118. package/templates/conditional/next/font/app-router/src/app/layout.js +25 -0
  119. package/templates/conditional/next/font/app-router/src/app/layout.tsx +30 -0
  120. package/templates/conditional/next/font/pages-router/src/pages/_app.js +20 -0
  121. package/templates/conditional/next/font/pages-router/src/pages/_app.tsx +21 -0
  122. package/templates/conditional/next/font/pages-router/src/pages/_document.js +18 -0
  123. package/templates/conditional/next/font/pages-router/src/pages/_document.tsx +18 -0
  124. package/templates/conditional/next/font/src/app/layout.js +25 -0
  125. package/templates/conditional/next/font/src/app/layout.tsx +30 -0
  126. package/templates/conditional/next/font/src/lib/fonts.js +11 -0
  127. package/templates/conditional/next/font/src/lib/fonts.ts +11 -0
  128. package/templates/conditional/next/font/src/pages/_app.js +20 -0
  129. package/templates/conditional/next/font/src/pages/_app.tsx +21 -0
  130. package/templates/conditional/next/font/src/pages/_document.js +18 -0
  131. package/templates/conditional/next/font/src/pages/_document.tsx +18 -0
  132. package/templates/conditional/next/image/BUILD_SIZE_NOTE.md +15 -0
  133. package/templates/conditional/next/image/app-router/src/components/ImageExample.jsx +34 -0
  134. package/templates/conditional/next/image/app-router/src/components/ImageExample.tsx +44 -0
  135. package/templates/conditional/next/image/pages-router/src/components/ImageExample.jsx +34 -0
  136. package/templates/conditional/next/image/pages-router/src/components/ImageExample.tsx +44 -0
  137. package/templates/conditional/next/image/src/components/ImageExample.jsx +44 -0
  138. package/templates/conditional/next/image/src/components/ImageExample.tsx +54 -0
  139. package/templates/conditional/next/image/src/components/image/index.js +1 -0
  140. package/templates/conditional/next/image/src/components/image/index.ts +2 -0
  141. package/templates/conditional/next/route-groups/js/src/app/(admin)/layout.jsx +23 -0
  142. package/templates/conditional/next/route-groups/js/src/app/(auth)/layout.jsx +17 -0
  143. package/templates/conditional/next/route-groups/js/src/app/(private)/layout.jsx +27 -0
  144. package/templates/conditional/next/route-groups/js/src/app/(public)/layout.jsx +28 -0
  145. package/templates/conditional/next/route-groups/js/src/app/(public)/page.jsx +38 -0
  146. package/templates/conditional/next/route-groups/js/src/middleware.js +48 -0
  147. package/templates/conditional/next/route-groups/ts/src/app/(admin)/layout.tsx +28 -0
  148. package/templates/conditional/next/route-groups/ts/src/app/(auth)/layout.tsx +22 -0
  149. package/templates/conditional/next/route-groups/ts/src/app/(private)/layout.tsx +32 -0
  150. package/templates/conditional/next/route-groups/ts/src/app/(public)/layout.tsx +33 -0
  151. package/templates/conditional/next/route-groups/ts/src/app/(public)/page.tsx +38 -0
  152. package/templates/conditional/next/route-groups/ts/src/middleware.ts +49 -0
  153. package/templates/conditional/next/server-components/README.md +13 -0
  154. package/templates/conditional/next/server-components/eslint.config.mjs +47 -0
  155. package/templates/conditional/next/server-components/rules/no-server-imports-in-client.js +89 -0
  156. package/templates/conditional/next/server-components/rules/no-server-imports-in-client.mjs +88 -0
  157. package/templates/conditional/next/server-components/src/components/boundaries/ClientCounter.jsx +48 -0
  158. package/templates/conditional/next/server-components/src/components/boundaries/ClientCounter.tsx +53 -0
  159. package/templates/conditional/next/server-components/src/components/boundaries/ServerCard.jsx +41 -0
  160. package/templates/conditional/next/server-components/src/components/boundaries/ServerCard.tsx +46 -0
  161. package/templates/conditional/next/server-components/src/components/boundaries/index.js +2 -0
  162. package/templates/conditional/next/server-components/src/components/boundaries/index.ts +4 -0
  163. package/templates/conditional/testing/jest/next/app-router/src/__tests__/page.test.jsx +10 -0
  164. package/templates/conditional/testing/jest/next/app-router/src/__tests__/page.test.tsx +10 -0
  165. package/templates/conditional/testing/jest/next/jest.config.mjs +20 -0
  166. package/templates/conditional/testing/jest/next/jest.config.ts +20 -0
  167. package/templates/conditional/testing/jest/next/pages-router/src/__tests__/index.test.jsx +10 -0
  168. package/templates/conditional/testing/jest/next/pages-router/src/__tests__/index.test.tsx +10 -0
  169. package/templates/conditional/testing/vitest/next/app-router/src/__tests__/page.test.jsx +11 -0
  170. package/templates/conditional/testing/vitest/next/app-router/src/__tests__/page.test.tsx +11 -0
  171. package/templates/conditional/testing/vitest/next/pages-router/src/__tests__/index.test.jsx +11 -0
  172. package/templates/conditional/testing/vitest/next/pages-router/src/__tests__/index.test.tsx +11 -0
  173. package/templates/conditional/testing/vitest/next/vitest.config.js +16 -0
  174. package/templates/conditional/testing/vitest/next/vitest.config.ts +16 -0
@@ -1,4 +1,5 @@
1
1
  import { execa } from "execa";
2
+ import { normalizeFramework } from "./engine/capabilities.js";
2
3
 
3
4
  export async function installDeps(pkgManager, dev, packages, cwd) {
4
5
  let cmd, args;
@@ -40,14 +41,22 @@ export async function installAllDeps(responses, pkg, cwd) {
40
41
  // the conditional wiring stays verifiable without a network install.
41
42
  export function computeDeps(responses) {
42
43
  const deps = [];
44
+ const fw = normalizeFramework(
45
+ responses.framework || {
46
+ name: responses.frameworkName,
47
+ variant: responses.frameworkVariant,
48
+ }
49
+ );
50
+ const fwName = fw.name;
43
51
  const cssDevDeps = [];
52
+ const databaseDevDeps = [];
44
53
  const testingDevDeps = [];
45
54
  const linterDevDeps = [];
46
55
  const formatterDevDeps = [];
47
56
 
48
57
  // CSS framework
49
58
  if (responses.cssFramework === "tailwind") {
50
- if (responses.framework === "next") {
59
+ if (fwName === "next") {
51
60
  cssDevDeps.push("tailwindcss", "@tailwindcss/postcss", "postcss");
52
61
  } else {
53
62
  cssDevDeps.push("tailwindcss", "@tailwindcss/vite");
@@ -79,6 +88,15 @@ export function computeDeps(responses) {
79
88
  deps.push("axios");
80
89
  }
81
90
 
91
+ // Database
92
+ if (responses.database === "prisma") {
93
+ deps.push("@prisma/client");
94
+ databaseDevDeps.push("prisma");
95
+ if (responses.language === "ts") {
96
+ databaseDevDeps.push("tsx");
97
+ }
98
+ }
99
+
82
100
  // Testing
83
101
  if (responses.testing === "vitest") {
84
102
  testingDevDeps.push(
@@ -88,22 +106,34 @@ export function computeDeps(responses) {
88
106
  "jsdom"
89
107
  );
90
108
  } else if (responses.testing === "jest") {
91
- testingDevDeps.push(
92
- "jest",
93
- "jest-environment-jsdom",
94
- "@testing-library/react",
95
- "@testing-library/jest-dom",
96
- "jsdom",
97
- "babel-jest",
98
- "@babel/preset-env",
99
- "@babel/preset-react",
100
- "@babel/preset-typescript"
101
- );
109
+ if (fwName === "next") {
110
+ testingDevDeps.push(
111
+ "jest",
112
+ "jest-environment-jsdom",
113
+ "@testing-library/react",
114
+ "@testing-library/jest-dom"
115
+ );
116
+ if (responses.language === "ts") {
117
+ testingDevDeps.push("@types/jest");
118
+ }
119
+ } else {
120
+ testingDevDeps.push(
121
+ "jest",
122
+ "jest-environment-jsdom",
123
+ "@testing-library/react",
124
+ "@testing-library/jest-dom",
125
+ "jsdom",
126
+ "babel-jest",
127
+ "@babel/preset-env",
128
+ "@babel/preset-react",
129
+ "@babel/preset-typescript"
130
+ );
131
+ }
102
132
  }
103
133
 
104
134
  // Linter
105
135
  if (responses.linter === "eslint") {
106
- if (responses.framework === "next") {
136
+ if (fwName === "next") {
107
137
  linterDevDeps.push("eslint", "eslint-config-next");
108
138
  } else {
109
139
  linterDevDeps.push("eslint", "@eslint/js", "eslint-plugin-react-hooks", "eslint-plugin-react-refresh", "globals");
@@ -113,6 +143,8 @@ export function computeDeps(responses) {
113
143
  }
114
144
  } else if (responses.linter === "oxlint") {
115
145
  linterDevDeps.push("oxlint");
146
+ } else if (responses.linter === "biome") {
147
+ linterDevDeps.push("@biomejs/biome");
116
148
  }
117
149
 
118
150
  // Formatter
@@ -130,6 +162,7 @@ export function computeDeps(responses) {
130
162
 
131
163
  const devDepBatches = [
132
164
  cssDevDeps,
165
+ databaseDevDeps,
133
166
  testingDevDeps,
134
167
  linterDevDeps,
135
168
  formatterDevDeps,
@@ -18,6 +18,9 @@ export const CAPABILITIES = {
18
18
  NEXT_IMAGE: "next-image",
19
19
  SPA_FALLBACK: "spa-fallback",
20
20
  AGENT_DOCS: "agent-docs",
21
+ DATABASE: "database",
22
+ DOCKER: "docker",
23
+ ROUTE_GROUPS: "route-groups",
21
24
  };
22
25
 
23
26
  export const FRAMEWORK_CAPABILITIES = {
@@ -37,6 +40,7 @@ export const FRAMEWORK_CAPABILITIES = {
37
40
  allowedFormatters: ["prettier", "oxfmt", "none"],
38
41
  allowedBundlers: [],
39
42
  allowedAdapters: [],
43
+ allowedDatabases: [],
40
44
  supportsRouterPrompt: true,
41
45
  },
42
46
  "next:app-router": {
@@ -52,6 +56,9 @@ export const FRAMEWORK_CAPABILITIES = {
52
56
  CAPABILITIES.NEXT_FONT,
53
57
  CAPABILITIES.NEXT_IMAGE,
54
58
  CAPABILITIES.AGENT_DOCS,
59
+ CAPABILITIES.DATABASE,
60
+ CAPABILITIES.DOCKER,
61
+ CAPABILITIES.ROUTE_GROUPS,
55
62
  ],
56
63
  allowedArchitectures: ["feature-based", "hybrid", "none"],
57
64
  allowedStyling: ["tailwind", "none"],
@@ -61,6 +68,7 @@ export const FRAMEWORK_CAPABILITIES = {
61
68
  allowedFormatters: ["prettier", "none"],
62
69
  allowedBundlers: ["turbopack", "webpack"],
63
70
  allowedAdapters: ["node", "vercel", "cloudflare", "static"],
71
+ allowedDatabases: ["prisma", "none"],
64
72
  supportsRouterPrompt: false, // filesystem routing is built-in
65
73
  },
66
74
  "next:pages-router": {
@@ -74,6 +82,8 @@ export const FRAMEWORK_CAPABILITIES = {
74
82
  CAPABILITIES.NEXT_FONT,
75
83
  CAPABILITIES.NEXT_IMAGE,
76
84
  CAPABILITIES.AGENT_DOCS,
85
+ CAPABILITIES.DATABASE,
86
+ CAPABILITIES.DOCKER,
77
87
  ],
78
88
  allowedArchitectures: ["feature-based", "hybrid", "none"],
79
89
  allowedStyling: ["tailwind", "none"],
@@ -83,6 +93,7 @@ export const FRAMEWORK_CAPABILITIES = {
83
93
  allowedFormatters: ["prettier", "none"],
84
94
  allowedBundlers: ["turbopack", "webpack"],
85
95
  allowedAdapters: ["node", "vercel", "cloudflare", "static"],
96
+ allowedDatabases: ["prisma", "none"],
86
97
  supportsRouterPrompt: false, // filesystem routing is built-in
87
98
  },
88
99
  };
@@ -153,6 +164,9 @@ export function isOptionCompatible(framework, optionKey, optionValue) {
153
164
  case "bundler":
154
165
  return desc.allowedBundlers.includes(optionValue);
155
166
  case "adapter":
167
+ if (optionValue === "none") {
168
+ return desc.allowedAdapters.length > 0;
169
+ }
156
170
  return desc.allowedAdapters.includes(optionValue);
157
171
  case "router":
158
172
  // If framework has filesystem routing, external router options (true) are incompatible
@@ -160,6 +174,27 @@ export function isOptionCompatible(framework, optionKey, optionValue) {
160
174
  return optionValue === false || optionValue === "none";
161
175
  }
162
176
  return true;
177
+ case "reactCompiler":
178
+ if (optionValue === true) {
179
+ return hasCapability(framework, CAPABILITIES.REACT_COMPILER);
180
+ }
181
+ return true;
182
+ case "database":
183
+ case "db":
184
+ if (!desc.allowedDatabases || desc.allowedDatabases.length === 0) {
185
+ return optionValue === "none" || !optionValue;
186
+ }
187
+ return desc.allowedDatabases.includes(optionValue);
188
+ case "docker":
189
+ if (optionValue === true) {
190
+ return hasCapability(framework, CAPABILITIES.DOCKER);
191
+ }
192
+ return true;
193
+ case "routeGroups":
194
+ if (optionValue === true) {
195
+ return hasCapability(framework, CAPABILITIES.ROUTE_GROUPS);
196
+ }
197
+ return true;
163
198
  default:
164
199
  return true;
165
200
  }
@@ -184,6 +219,7 @@ export function getCompatibleOptions(framework) {
184
219
  formatters: [...desc.allowedFormatters],
185
220
  bundlers: [...desc.allowedBundlers],
186
221
  adapters: [...desc.allowedAdapters],
222
+ databases: [...(desc.allowedDatabases || [])],
187
223
  supportsRouterPrompt: desc.supportsRouterPrompt,
188
224
  };
189
225
  }
@@ -281,6 +317,12 @@ export function isPromptVisible(framework, promptName) {
281
317
  return hasCapability(fw, CAPABILITIES.ADAPTERS);
282
318
  case "reactCompiler":
283
319
  return hasCapability(fw, CAPABILITIES.REACT_COMPILER);
320
+ case "database":
321
+ return hasCapability(fw, CAPABILITIES.DATABASE);
322
+ case "docker":
323
+ return hasCapability(fw, CAPABILITIES.DOCKER);
324
+ case "routeGroups":
325
+ return hasCapability(fw, CAPABILITIES.ROUTE_GROUPS);
284
326
  default:
285
327
  return true;
286
328
  }
@@ -318,13 +360,17 @@ export function getDefaultResponses(framework, { projectName = "my-app" } = {})
318
360
  architecture: "feature-based",
319
361
  language: "ts",
320
362
  cssFramework: "tailwind",
321
- testing: "vitest",
363
+ testing: "none",
322
364
  router: false,
323
365
  bundler: "turbopack",
324
366
  adapter: "none",
367
+ uiKit: "none",
325
368
  stateManagement: "none",
326
369
  iconLibrary: "none",
327
370
  apiClient: "none",
371
+ database: "none",
372
+ docker: false,
373
+ routeGroups: false,
328
374
  linter: "eslint",
329
375
  formatter: "prettier",
330
376
  docsLanguage: "en",
@@ -342,9 +388,13 @@ export function getDefaultResponses(framework, { projectName = "my-app" } = {})
342
388
  cssFramework: "tailwind",
343
389
  testing: "vitest",
344
390
  router: true,
391
+ uiKit: "none",
345
392
  stateManagement: "none",
346
393
  iconLibrary: "none",
347
394
  apiClient: "none",
395
+ database: "none",
396
+ docker: false,
397
+ routeGroups: false,
348
398
  linter: "eslint",
349
399
  formatter: "prettier",
350
400
  docsLanguage: "en",
@@ -369,6 +419,26 @@ export function sanitizeResponsesForFramework(framework, responses = {}) {
369
419
  if (!isPromptVisible(fw, "router")) {
370
420
  sanitized.router = false;
371
421
  }
422
+ if (!isPromptVisible(fw, "bundler")) {
423
+ delete sanitized.bundler;
424
+ }
425
+ if (!isPromptVisible(fw, "adapter")) {
426
+ delete sanitized.adapter;
427
+ }
428
+ if (!isPromptVisible(fw, "reactCompiler")) {
429
+ if (sanitized.reactCompiler !== undefined) {
430
+ sanitized.reactCompiler = false;
431
+ }
432
+ }
433
+ if (!isPromptVisible(fw, "database")) {
434
+ sanitized.database = "none";
435
+ }
436
+ if (!isPromptVisible(fw, "docker")) {
437
+ sanitized.docker = false;
438
+ }
439
+ if (!isPromptVisible(fw, "routeGroups")) {
440
+ sanitized.routeGroups = false;
441
+ }
372
442
 
373
443
  for (const [key, val] of Object.entries(sanitized)) {
374
444
  if (val === undefined || val === null) continue;