create-better-fullstack 1.7.0 → 1.8.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.
- package/README.md +2 -2
- package/dist/addons-setup-CJwQAWFg.mjs +5 -0
- package/dist/{addons-setup-DQa6TRrx.mjs → addons-setup-CUmA_nra.mjs} +5 -5
- package/dist/{bts-config-B_rZ4_sj.mjs → bts-config-YcroedMK.mjs} +48 -0
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +333 -64
- package/dist/index.mjs +1539 -133
- package/dist/{mcp-CuEEG8e5.mjs → mcp-DoPutOIG.mjs} +1 -1
- package/dist/mcp-entry.mjs +307 -53
- package/package.json +11 -11
- package/dist/addons-setup-CBK1Htlc.mjs +0 -5
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ Configure your stack visually — pick every option from a UI, preview your choi
|
|
|
32
32
|
## Features
|
|
33
33
|
|
|
34
34
|
- **425 options** — frontend, backend, database, auth, payments, AI, DevOps, and more
|
|
35
|
-
- **
|
|
35
|
+
- **7 ecosystems** — TypeScript, React Native, Rust, Python, Go, Java, Elixir
|
|
36
36
|
- **Visual builder** — configure your stack in the browser
|
|
37
37
|
- **Wired for you** — every picked integration is preconfigured and working out of the box
|
|
38
38
|
|
|
@@ -42,7 +42,7 @@ Configure your stack visually — pick every option from a UI, preview your choi
|
|
|
42
42
|
--yes # Accept all defaults
|
|
43
43
|
--yolo # Scaffold a random stack — good for exploring
|
|
44
44
|
--template <name> # Use a preset (t3, mern, pern, uniwind)
|
|
45
|
-
--ecosystem <lang> # Start in typescript, rust, python, go, or
|
|
45
|
+
--ecosystem <lang> # Start in typescript, react-native, rust, python, go, java, or elixir mode
|
|
46
46
|
--version-channel # Dependency channel: stable, latest, beta
|
|
47
47
|
--no-git # Skip git initialization
|
|
48
48
|
--no-install # Skip dependency installation
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { s as dependencyVersionMap, t as readBtsConfig } from "./bts-config-
|
|
2
|
+
import { s as dependencyVersionMap, t as readBtsConfig } from "./bts-config-YcroedMK.mjs";
|
|
3
3
|
import { autocompleteMultiselect, cancel, group, isCancel, log, multiselect, select, spinner } from "@clack/prompts";
|
|
4
4
|
import pc from "picocolors";
|
|
5
5
|
import fs from "fs-extra";
|
|
@@ -377,7 +377,7 @@ function uniqueValues$1(values) {
|
|
|
377
377
|
return Array.from(new Set(values));
|
|
378
378
|
}
|
|
379
379
|
function hasReactBasedFrontend$1(frontend) {
|
|
380
|
-
return frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("tanstack-start") || frontend.includes("next");
|
|
380
|
+
return frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("tanstack-start") || frontend.includes("next") || frontend.includes("vinext");
|
|
381
381
|
}
|
|
382
382
|
function hasNativeFrontend$1(frontend) {
|
|
383
383
|
return frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
|
|
@@ -409,7 +409,7 @@ function getRecommendedMcpServers(config) {
|
|
|
409
409
|
name: "shadcn",
|
|
410
410
|
target: "npx -y shadcn@latest mcp"
|
|
411
411
|
});
|
|
412
|
-
if (config.frontend.includes("next")) servers.push({
|
|
412
|
+
if (config.frontend.includes("next") || config.frontend.includes("vinext")) servers.push({
|
|
413
413
|
key: "next-devtools",
|
|
414
414
|
label: "Next Devtools",
|
|
415
415
|
name: "next-devtools",
|
|
@@ -1331,11 +1331,11 @@ async function setupWxt(config) {
|
|
|
1331
1331
|
async function setupAddons(config) {
|
|
1332
1332
|
const warnings = [];
|
|
1333
1333
|
const { addons, frontend, projectDir } = config;
|
|
1334
|
-
const hasReactWebFrontend = frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("next");
|
|
1334
|
+
const hasReactWebFrontend = frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("next") || frontend.includes("vinext");
|
|
1335
1335
|
const hasNuxtFrontend = frontend.includes("nuxt");
|
|
1336
1336
|
const hasSvelteFrontend = frontend.includes("svelte");
|
|
1337
1337
|
const hasSolidFrontend = frontend.includes("solid");
|
|
1338
|
-
const hasNextFrontend = frontend.includes("next");
|
|
1338
|
+
const hasNextFrontend = frontend.includes("next") || frontend.includes("vinext");
|
|
1339
1339
|
if (addons.includes("tauri") && (hasReactWebFrontend || hasNuxtFrontend || hasSvelteFrontend || hasSolidFrontend || hasNextFrontend)) await /* @__PURE__ */ setupTauri(config);
|
|
1340
1340
|
const hasUltracite = addons.includes("ultracite");
|
|
1341
1341
|
const hasBiome = addons.includes("biome");
|
|
@@ -47,6 +47,7 @@ const DEFAULT_UI_LIBRARY_BY_FRONTEND = {
|
|
|
47
47
|
"react-vite": "shadcn-ui",
|
|
48
48
|
"tanstack-start": "shadcn-ui",
|
|
49
49
|
next: "shadcn-ui",
|
|
50
|
+
vinext: "shadcn-ui",
|
|
50
51
|
nuxt: "daisyui",
|
|
51
52
|
svelte: "daisyui",
|
|
52
53
|
solid: "daisyui",
|
|
@@ -109,6 +110,13 @@ async function writeBtsConfig(projectConfig) {
|
|
|
109
110
|
observability: projectConfig.observability,
|
|
110
111
|
featureFlags: projectConfig.featureFlags,
|
|
111
112
|
analytics: projectConfig.analytics,
|
|
113
|
+
mobileNavigation: projectConfig.mobileNavigation,
|
|
114
|
+
mobileUI: projectConfig.mobileUI,
|
|
115
|
+
mobileStorage: projectConfig.mobileStorage,
|
|
116
|
+
mobileTesting: projectConfig.mobileTesting,
|
|
117
|
+
mobilePush: projectConfig.mobilePush,
|
|
118
|
+
mobileOTA: projectConfig.mobileOTA,
|
|
119
|
+
mobileDeepLinking: projectConfig.mobileDeepLinking,
|
|
112
120
|
cms: projectConfig.cms,
|
|
113
121
|
caching: projectConfig.caching,
|
|
114
122
|
i18n: projectConfig.i18n,
|
|
@@ -129,6 +137,7 @@ async function writeBtsConfig(projectConfig) {
|
|
|
129
137
|
pythonValidation: projectConfig.pythonValidation,
|
|
130
138
|
pythonAi: projectConfig.pythonAi,
|
|
131
139
|
pythonAuth: projectConfig.pythonAuth,
|
|
140
|
+
pythonApi: projectConfig.pythonApi,
|
|
132
141
|
pythonTaskQueue: projectConfig.pythonTaskQueue,
|
|
133
142
|
pythonGraphql: projectConfig.pythonGraphql,
|
|
134
143
|
pythonQuality: projectConfig.pythonQuality,
|
|
@@ -144,6 +153,21 @@ async function writeBtsConfig(projectConfig) {
|
|
|
144
153
|
javaAuth: projectConfig.javaAuth,
|
|
145
154
|
javaLibraries: projectConfig.javaLibraries,
|
|
146
155
|
javaTestingLibraries: projectConfig.javaTestingLibraries,
|
|
156
|
+
elixirWebFramework: projectConfig.elixirWebFramework,
|
|
157
|
+
elixirOrm: projectConfig.elixirOrm,
|
|
158
|
+
elixirAuth: projectConfig.elixirAuth,
|
|
159
|
+
elixirApi: projectConfig.elixirApi,
|
|
160
|
+
elixirRealtime: projectConfig.elixirRealtime,
|
|
161
|
+
elixirJobs: projectConfig.elixirJobs,
|
|
162
|
+
elixirValidation: projectConfig.elixirValidation,
|
|
163
|
+
elixirHttp: projectConfig.elixirHttp,
|
|
164
|
+
elixirJson: projectConfig.elixirJson,
|
|
165
|
+
elixirEmail: projectConfig.elixirEmail,
|
|
166
|
+
elixirCaching: projectConfig.elixirCaching,
|
|
167
|
+
elixirObservability: projectConfig.elixirObservability,
|
|
168
|
+
elixirTesting: projectConfig.elixirTesting,
|
|
169
|
+
elixirQuality: projectConfig.elixirQuality,
|
|
170
|
+
elixirDeploy: projectConfig.elixirDeploy,
|
|
147
171
|
aiDocs: projectConfig.aiDocs
|
|
148
172
|
};
|
|
149
173
|
const baseContent = {
|
|
@@ -183,6 +207,13 @@ async function writeBtsConfig(projectConfig) {
|
|
|
183
207
|
observability: btsConfig.observability,
|
|
184
208
|
featureFlags: btsConfig.featureFlags,
|
|
185
209
|
analytics: btsConfig.analytics,
|
|
210
|
+
mobileNavigation: btsConfig.mobileNavigation,
|
|
211
|
+
mobileUI: btsConfig.mobileUI,
|
|
212
|
+
mobileStorage: btsConfig.mobileStorage,
|
|
213
|
+
mobileTesting: btsConfig.mobileTesting,
|
|
214
|
+
mobilePush: btsConfig.mobilePush,
|
|
215
|
+
mobileOTA: btsConfig.mobileOTA,
|
|
216
|
+
mobileDeepLinking: btsConfig.mobileDeepLinking,
|
|
186
217
|
cms: btsConfig.cms,
|
|
187
218
|
caching: btsConfig.caching,
|
|
188
219
|
i18n: btsConfig.i18n,
|
|
@@ -203,7 +234,9 @@ async function writeBtsConfig(projectConfig) {
|
|
|
203
234
|
pythonValidation: btsConfig.pythonValidation,
|
|
204
235
|
pythonAi: btsConfig.pythonAi,
|
|
205
236
|
pythonAuth: btsConfig.pythonAuth,
|
|
237
|
+
pythonApi: btsConfig.pythonApi ?? "none",
|
|
206
238
|
pythonTaskQueue: btsConfig.pythonTaskQueue,
|
|
239
|
+
pythonGraphql: btsConfig.pythonGraphql,
|
|
207
240
|
pythonQuality: btsConfig.pythonQuality,
|
|
208
241
|
goWebFramework: btsConfig.goWebFramework,
|
|
209
242
|
goOrm: btsConfig.goOrm,
|
|
@@ -217,6 +250,21 @@ async function writeBtsConfig(projectConfig) {
|
|
|
217
250
|
javaAuth: btsConfig.javaAuth,
|
|
218
251
|
javaLibraries: btsConfig.javaLibraries,
|
|
219
252
|
javaTestingLibraries: btsConfig.javaTestingLibraries,
|
|
253
|
+
elixirWebFramework: btsConfig.elixirWebFramework,
|
|
254
|
+
elixirOrm: btsConfig.elixirOrm,
|
|
255
|
+
elixirAuth: btsConfig.elixirAuth,
|
|
256
|
+
elixirApi: btsConfig.elixirApi,
|
|
257
|
+
elixirRealtime: btsConfig.elixirRealtime,
|
|
258
|
+
elixirJobs: btsConfig.elixirJobs,
|
|
259
|
+
elixirValidation: btsConfig.elixirValidation,
|
|
260
|
+
elixirHttp: btsConfig.elixirHttp,
|
|
261
|
+
elixirJson: btsConfig.elixirJson,
|
|
262
|
+
elixirEmail: btsConfig.elixirEmail,
|
|
263
|
+
elixirCaching: btsConfig.elixirCaching,
|
|
264
|
+
elixirObservability: btsConfig.elixirObservability,
|
|
265
|
+
elixirTesting: btsConfig.elixirTesting,
|
|
266
|
+
elixirQuality: btsConfig.elixirQuality,
|
|
267
|
+
elixirDeploy: btsConfig.elixirDeploy,
|
|
220
268
|
aiDocs: btsConfig.aiDocs
|
|
221
269
|
};
|
|
222
270
|
let configContent = JSON.stringify(baseContent);
|
package/dist/cli.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
//#region src/cli.ts
|
|
3
|
-
if (process.argv[2] === "mcp" && process.argv.length === 3) import("./mcp-
|
|
3
|
+
if (process.argv[2] === "mcp" && process.argv.length === 3) import("./mcp-DoPutOIG.mjs").then((m) => m.startMcpServer());
|
|
4
4
|
else import("./index.mjs").then((m) => m.createBtsCli().run());
|
|
5
5
|
|
|
6
6
|
//#endregion
|