create-better-fullstack 2.0.2 → 2.0.3
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/dist/{add-handler-BPAZM8Zo.mjs → add-handler-BQN6pwGJ.mjs} +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +27 -24
- package/dist/index.mjs +2 -2
- package/dist/{install-dependencies-D6-GO3BZ.mjs → install-dependencies-D0Z1dZEx.mjs} +6 -0
- package/dist/{run-DQlymC4z.mjs → run-BhcXBjxh.mjs} +46 -4
- package/dist/{run-QRBymn-p.mjs → run-DCxVLUMS.mjs} +2 -2
- package/package.json +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { g as getDefaultConfig, n as readBtsConfig, r as updateBtsConfig } from "./bts-config-Bg1Qea9Y.mjs";
|
|
3
|
-
import { W as renderTitle, c as applyDependencyVersionChannel, t as installDependencies, u as getAddonsToAdd } from "./install-dependencies-
|
|
3
|
+
import { W as renderTitle, c as applyDependencyVersionChannel, t as installDependencies, u as getAddonsToAdd } from "./install-dependencies-D0Z1dZEx.mjs";
|
|
4
4
|
import { a as CLIError, f as isSilent, o as UserCancelledError, p as runWithContextAsync, t as setupAddons } from "./addons-setup-HSghQS7c.mjs";
|
|
5
5
|
import { intro, log, outro } from "@clack/prompts";
|
|
6
6
|
import pc from "picocolors";
|
package/dist/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
//#region src/cli.ts
|
|
3
3
|
if (process.argv[2] === "mcp" && process.argv.length === 3) import("./mcp-58r70ZcL.mjs").then((m) => m.startMcpServer());
|
|
4
|
-
else import("./run-
|
|
4
|
+
else import("./run-DCxVLUMS.mjs").then((m) => m.createBtsCli().run());
|
|
5
5
|
|
|
6
6
|
//#endregion
|
|
7
7
|
export { };
|
package/dist/index.d.mts
CHANGED
|
@@ -22,10 +22,10 @@ declare const router: {
|
|
|
22
22
|
create: _orpc_server0.Procedure<_orpc_server0.MergedInitialContext<Record<never, never>, Record<never, never>, Record<never, never>>, Record<never, never>, z.ZodTuple<[z.ZodOptional<z.ZodString>, z.ZodObject<{
|
|
23
23
|
template: z.ZodOptional<z.ZodEnum<{
|
|
24
24
|
none: "none";
|
|
25
|
-
uniwind: "uniwind";
|
|
26
25
|
mern: "mern";
|
|
27
26
|
pern: "pern";
|
|
28
27
|
t3: "t3";
|
|
28
|
+
uniwind: "uniwind";
|
|
29
29
|
}>>;
|
|
30
30
|
yes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
31
31
|
yolo: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
@@ -101,8 +101,8 @@ declare const router: {
|
|
|
101
101
|
uppy: "uppy";
|
|
102
102
|
}>>;
|
|
103
103
|
effect: z.ZodOptional<z.ZodEnum<{
|
|
104
|
-
effect: "effect";
|
|
105
104
|
none: "none";
|
|
105
|
+
effect: "effect";
|
|
106
106
|
"effect-full": "effect-full";
|
|
107
107
|
}>>;
|
|
108
108
|
stateManagement: z.ZodOptional<z.ZodEnum<{
|
|
@@ -252,9 +252,9 @@ declare const router: {
|
|
|
252
252
|
}>>;
|
|
253
253
|
mobileUI: z.ZodOptional<z.ZodEnum<{
|
|
254
254
|
none: "none";
|
|
255
|
+
uniwind: "uniwind";
|
|
255
256
|
tamagui: "tamagui";
|
|
256
257
|
"gluestack-ui": "gluestack-ui";
|
|
257
|
-
uniwind: "uniwind";
|
|
258
258
|
unistyles: "unistyles";
|
|
259
259
|
}>>;
|
|
260
260
|
mobileStorage: z.ZodOptional<z.ZodEnum<{
|
|
@@ -319,6 +319,7 @@ declare const router: {
|
|
|
319
319
|
mcp: "mcp";
|
|
320
320
|
skills: "skills";
|
|
321
321
|
turborepo: "turborepo";
|
|
322
|
+
nx: "nx";
|
|
322
323
|
fumadocs: "fumadocs";
|
|
323
324
|
ultracite: "ultracite";
|
|
324
325
|
oxlint: "oxlint";
|
|
@@ -336,8 +337,8 @@ declare const router: {
|
|
|
336
337
|
"docker-compose": "docker-compose";
|
|
337
338
|
}>>>;
|
|
338
339
|
examples: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
339
|
-
ai: "ai";
|
|
340
340
|
none: "none";
|
|
341
|
+
ai: "ai";
|
|
341
342
|
"chat-sdk": "chat-sdk";
|
|
342
343
|
"tanstack-showcase": "tanstack-showcase";
|
|
343
344
|
}>>>;
|
|
@@ -393,6 +394,7 @@ declare const router: {
|
|
|
393
394
|
"ts-rest": "ts-rest";
|
|
394
395
|
garph: "garph";
|
|
395
396
|
"graphql-yoga": "graphql-yoga";
|
|
397
|
+
openapi: "openapi";
|
|
396
398
|
}>>;
|
|
397
399
|
cssFramework: z.ZodOptional<z.ZodEnum<{
|
|
398
400
|
none: "none";
|
|
@@ -484,8 +486,8 @@ declare const router: {
|
|
|
484
486
|
"geist-mono": "geist-mono";
|
|
485
487
|
}>>;
|
|
486
488
|
shadcnRadius: z.ZodOptional<z.ZodEnum<{
|
|
487
|
-
default: "default";
|
|
488
489
|
none: "none";
|
|
490
|
+
default: "default";
|
|
489
491
|
small: "small";
|
|
490
492
|
medium: "medium";
|
|
491
493
|
large: "large";
|
|
@@ -513,10 +515,10 @@ declare const router: {
|
|
|
513
515
|
vercel: "vercel";
|
|
514
516
|
}>>;
|
|
515
517
|
directoryConflict: z.ZodOptional<z.ZodEnum<{
|
|
516
|
-
error: "error";
|
|
517
518
|
merge: "merge";
|
|
518
519
|
overwrite: "overwrite";
|
|
519
520
|
increment: "increment";
|
|
521
|
+
error: "error";
|
|
520
522
|
}>>;
|
|
521
523
|
renderTitle: z.ZodOptional<z.ZodBoolean>;
|
|
522
524
|
disableAnalytics: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
@@ -549,12 +551,12 @@ declare const router: {
|
|
|
549
551
|
ratatui: "ratatui";
|
|
550
552
|
}>>;
|
|
551
553
|
rustLibraries: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
552
|
-
config: "config";
|
|
553
554
|
none: "none";
|
|
554
555
|
serde: "serde";
|
|
555
556
|
uuid: "uuid";
|
|
556
557
|
chrono: "chrono";
|
|
557
558
|
reqwest: "reqwest";
|
|
559
|
+
config: "config";
|
|
558
560
|
dashmap: "dashmap";
|
|
559
561
|
"parking-lot": "parking-lot";
|
|
560
562
|
secrecy: "secrecy";
|
|
@@ -969,8 +971,8 @@ declare const router: {
|
|
|
969
971
|
}>>;
|
|
970
972
|
elixirLibraries: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
971
973
|
none: "none";
|
|
972
|
-
broadway: "broadway";
|
|
973
974
|
nx: "nx";
|
|
975
|
+
broadway: "broadway";
|
|
974
976
|
}>>>;
|
|
975
977
|
aiDocs: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
976
978
|
none: "none";
|
|
@@ -990,7 +992,7 @@ declare const router: {
|
|
|
990
992
|
backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
|
|
991
993
|
runtime: "none" | "bun" | "node" | "workers";
|
|
992
994
|
frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
|
|
993
|
-
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
995
|
+
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "nx" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
994
996
|
examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
|
|
995
997
|
auth: "none" | "better-auth" | "better-auth-organizations" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0" | "workos" | "kinde";
|
|
996
998
|
payments: "none" | "polar" | "stripe" | "lemon-squeezy" | "paddle" | "dodo";
|
|
@@ -999,7 +1001,7 @@ declare const router: {
|
|
|
999
1001
|
versionChannel: "stable" | "latest" | "beta";
|
|
1000
1002
|
install: boolean;
|
|
1001
1003
|
dbSetup: "none" | "turso" | "neon" | "prisma-postgres" | "planetscale" | "mongodb-atlas" | "supabase" | "upstash" | "d1" | "docker";
|
|
1002
|
-
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga";
|
|
1004
|
+
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga" | "openapi";
|
|
1003
1005
|
webDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1004
1006
|
serverDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1005
1007
|
ai: "none" | "langgraph" | "google-adk" | "langchain" | "llamaindex" | "vercel-ai" | "mastra" | "voltagent" | "openai-agents" | "modelfusion" | "tanstack-ai" | "ai-cli";
|
|
@@ -1037,7 +1039,7 @@ declare const router: {
|
|
|
1037
1039
|
rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
|
|
1038
1040
|
rustApi: "none" | "tonic" | "async-graphql";
|
|
1039
1041
|
rustCli: "none" | "clap" | "ratatui";
|
|
1040
|
-
rustLibraries: ("none" | "
|
|
1042
|
+
rustLibraries: ("none" | "serde" | "uuid" | "chrono" | "reqwest" | "config" | "dashmap" | "parking-lot" | "secrecy" | "tokio-util" | "utoipa" | "validator" | "jsonwebtoken" | "argon2" | "tokio-test" | "mockall" | "proptest" | "insta")[];
|
|
1041
1043
|
rustLogging: "none" | "tracing" | "env-logger";
|
|
1042
1044
|
rustErrorHandling: "none" | "anyhow-thiserror" | "eyre";
|
|
1043
1045
|
rustCaching: "none" | "redis" | "moka";
|
|
@@ -1106,7 +1108,7 @@ declare const router: {
|
|
|
1106
1108
|
elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
|
|
1107
1109
|
elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
|
|
1108
1110
|
elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
|
|
1109
|
-
elixirLibraries: ("none" | "
|
|
1111
|
+
elixirLibraries: ("none" | "nx" | "broadway")[];
|
|
1110
1112
|
aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
|
|
1111
1113
|
astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
|
|
1112
1114
|
shadcnBase?: "radix" | "base" | undefined;
|
|
@@ -1150,7 +1152,7 @@ declare const router: {
|
|
|
1150
1152
|
backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
|
|
1151
1153
|
runtime: "none" | "bun" | "node" | "workers";
|
|
1152
1154
|
frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
|
|
1153
|
-
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
1155
|
+
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "nx" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
1154
1156
|
examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
|
|
1155
1157
|
auth: "none" | "better-auth" | "better-auth-organizations" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0" | "workos" | "kinde";
|
|
1156
1158
|
payments: "none" | "polar" | "stripe" | "lemon-squeezy" | "paddle" | "dodo";
|
|
@@ -1159,7 +1161,7 @@ declare const router: {
|
|
|
1159
1161
|
versionChannel: "stable" | "latest" | "beta";
|
|
1160
1162
|
install: boolean;
|
|
1161
1163
|
dbSetup: "none" | "turso" | "neon" | "prisma-postgres" | "planetscale" | "mongodb-atlas" | "supabase" | "upstash" | "d1" | "docker";
|
|
1162
|
-
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga";
|
|
1164
|
+
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga" | "openapi";
|
|
1163
1165
|
webDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1164
1166
|
serverDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1165
1167
|
ai: "none" | "langgraph" | "google-adk" | "langchain" | "llamaindex" | "vercel-ai" | "mastra" | "voltagent" | "openai-agents" | "modelfusion" | "tanstack-ai" | "ai-cli";
|
|
@@ -1197,7 +1199,7 @@ declare const router: {
|
|
|
1197
1199
|
rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
|
|
1198
1200
|
rustApi: "none" | "tonic" | "async-graphql";
|
|
1199
1201
|
rustCli: "none" | "clap" | "ratatui";
|
|
1200
|
-
rustLibraries: ("none" | "
|
|
1202
|
+
rustLibraries: ("none" | "serde" | "uuid" | "chrono" | "reqwest" | "config" | "dashmap" | "parking-lot" | "secrecy" | "tokio-util" | "utoipa" | "validator" | "jsonwebtoken" | "argon2" | "tokio-test" | "mockall" | "proptest" | "insta")[];
|
|
1201
1203
|
rustLogging: "none" | "tracing" | "env-logger";
|
|
1202
1204
|
rustErrorHandling: "none" | "anyhow-thiserror" | "eyre";
|
|
1203
1205
|
rustCaching: "none" | "redis" | "moka";
|
|
@@ -1266,7 +1268,7 @@ declare const router: {
|
|
|
1266
1268
|
elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
|
|
1267
1269
|
elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
|
|
1268
1270
|
elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
|
|
1269
|
-
elixirLibraries: ("none" | "
|
|
1271
|
+
elixirLibraries: ("none" | "nx" | "broadway")[];
|
|
1270
1272
|
aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
|
|
1271
1273
|
astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
|
|
1272
1274
|
shadcnBase?: "radix" | "base" | undefined;
|
|
@@ -1323,7 +1325,7 @@ declare const router: {
|
|
|
1323
1325
|
backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
|
|
1324
1326
|
runtime: "none" | "bun" | "node" | "workers";
|
|
1325
1327
|
frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
|
|
1326
|
-
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
1328
|
+
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "nx" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
1327
1329
|
examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
|
|
1328
1330
|
auth: "none" | "better-auth" | "better-auth-organizations" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0" | "workos" | "kinde";
|
|
1329
1331
|
payments: "none" | "polar" | "stripe" | "lemon-squeezy" | "paddle" | "dodo";
|
|
@@ -1332,7 +1334,7 @@ declare const router: {
|
|
|
1332
1334
|
versionChannel: "stable" | "latest" | "beta";
|
|
1333
1335
|
install: boolean;
|
|
1334
1336
|
dbSetup: "none" | "turso" | "neon" | "prisma-postgres" | "planetscale" | "mongodb-atlas" | "supabase" | "upstash" | "d1" | "docker";
|
|
1335
|
-
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga";
|
|
1337
|
+
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga" | "openapi";
|
|
1336
1338
|
webDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1337
1339
|
serverDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1338
1340
|
ai: "none" | "langgraph" | "google-adk" | "langchain" | "llamaindex" | "vercel-ai" | "mastra" | "voltagent" | "openai-agents" | "modelfusion" | "tanstack-ai" | "ai-cli";
|
|
@@ -1370,7 +1372,7 @@ declare const router: {
|
|
|
1370
1372
|
rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
|
|
1371
1373
|
rustApi: "none" | "tonic" | "async-graphql";
|
|
1372
1374
|
rustCli: "none" | "clap" | "ratatui";
|
|
1373
|
-
rustLibraries: ("none" | "
|
|
1375
|
+
rustLibraries: ("none" | "serde" | "uuid" | "chrono" | "reqwest" | "config" | "dashmap" | "parking-lot" | "secrecy" | "tokio-util" | "utoipa" | "validator" | "jsonwebtoken" | "argon2" | "tokio-test" | "mockall" | "proptest" | "insta")[];
|
|
1374
1376
|
rustLogging: "none" | "tracing" | "env-logger";
|
|
1375
1377
|
rustErrorHandling: "none" | "anyhow-thiserror" | "eyre";
|
|
1376
1378
|
rustCaching: "none" | "redis" | "moka";
|
|
@@ -1439,7 +1441,7 @@ declare const router: {
|
|
|
1439
1441
|
elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
|
|
1440
1442
|
elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
|
|
1441
1443
|
elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
|
|
1442
|
-
elixirLibraries: ("none" | "
|
|
1444
|
+
elixirLibraries: ("none" | "nx" | "broadway")[];
|
|
1443
1445
|
aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
|
|
1444
1446
|
astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
|
|
1445
1447
|
shadcnBase?: "radix" | "base" | undefined;
|
|
@@ -1483,7 +1485,7 @@ declare const router: {
|
|
|
1483
1485
|
backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
|
|
1484
1486
|
runtime: "none" | "bun" | "node" | "workers";
|
|
1485
1487
|
frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
|
|
1486
|
-
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
1488
|
+
addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "nx" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "docker-compose")[];
|
|
1487
1489
|
examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
|
|
1488
1490
|
auth: "none" | "better-auth" | "better-auth-organizations" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0" | "workos" | "kinde";
|
|
1489
1491
|
payments: "none" | "polar" | "stripe" | "lemon-squeezy" | "paddle" | "dodo";
|
|
@@ -1492,7 +1494,7 @@ declare const router: {
|
|
|
1492
1494
|
versionChannel: "stable" | "latest" | "beta";
|
|
1493
1495
|
install: boolean;
|
|
1494
1496
|
dbSetup: "none" | "turso" | "neon" | "prisma-postgres" | "planetscale" | "mongodb-atlas" | "supabase" | "upstash" | "d1" | "docker";
|
|
1495
|
-
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga";
|
|
1497
|
+
api: "none" | "trpc" | "orpc" | "ts-rest" | "garph" | "graphql-yoga" | "openapi";
|
|
1496
1498
|
webDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1497
1499
|
serverDeploy: "none" | "docker" | "cloudflare" | "fly" | "railway" | "render" | "netlify" | "sst" | "vercel";
|
|
1498
1500
|
ai: "none" | "langgraph" | "google-adk" | "langchain" | "llamaindex" | "vercel-ai" | "mastra" | "voltagent" | "openai-agents" | "modelfusion" | "tanstack-ai" | "ai-cli";
|
|
@@ -1530,7 +1532,7 @@ declare const router: {
|
|
|
1530
1532
|
rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
|
|
1531
1533
|
rustApi: "none" | "tonic" | "async-graphql";
|
|
1532
1534
|
rustCli: "none" | "clap" | "ratatui";
|
|
1533
|
-
rustLibraries: ("none" | "
|
|
1535
|
+
rustLibraries: ("none" | "serde" | "uuid" | "chrono" | "reqwest" | "config" | "dashmap" | "parking-lot" | "secrecy" | "tokio-util" | "utoipa" | "validator" | "jsonwebtoken" | "argon2" | "tokio-test" | "mockall" | "proptest" | "insta")[];
|
|
1534
1536
|
rustLogging: "none" | "tracing" | "env-logger";
|
|
1535
1537
|
rustErrorHandling: "none" | "anyhow-thiserror" | "eyre";
|
|
1536
1538
|
rustCaching: "none" | "redis" | "moka";
|
|
@@ -1599,7 +1601,7 @@ declare const router: {
|
|
|
1599
1601
|
elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
|
|
1600
1602
|
elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
|
|
1601
1603
|
elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
|
|
1602
|
-
elixirLibraries: ("none" | "
|
|
1604
|
+
elixirLibraries: ("none" | "nx" | "broadway")[];
|
|
1603
1605
|
aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
|
|
1604
1606
|
astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
|
|
1605
1607
|
shadcnBase?: "radix" | "base" | undefined;
|
|
@@ -1661,6 +1663,7 @@ declare const router: {
|
|
|
1661
1663
|
mcp: "mcp";
|
|
1662
1664
|
skills: "skills";
|
|
1663
1665
|
turborepo: "turborepo";
|
|
1666
|
+
nx: "nx";
|
|
1664
1667
|
fumadocs: "fumadocs";
|
|
1665
1668
|
ultracite: "ultracite";
|
|
1666
1669
|
oxlint: "oxlint";
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./bts-config-Bg1Qea9Y.mjs";
|
|
3
|
-
import { a as docs, c as sponsors, i as createBtsCli, n as builder, o as history, r as create, s as router, t as add } from "./run-
|
|
4
|
-
import "./install-dependencies-
|
|
3
|
+
import { a as docs, c as sponsors, i as createBtsCli, n as builder, o as history, r as create, s as router, t as add } from "./run-BhcXBjxh.mjs";
|
|
4
|
+
import "./install-dependencies-D0Z1dZEx.mjs";
|
|
5
5
|
import "./addons-setup-HSghQS7c.mjs";
|
|
6
6
|
import { EMBEDDED_TEMPLATES, TEMPLATE_COUNT, VirtualFileSystem, generateVirtualProject } from "@better-fullstack/template-generator";
|
|
7
7
|
|
|
@@ -280,6 +280,7 @@ function getCompatibleAddons$1(allAddons, frontend, existingAddons = [], auth, b
|
|
|
280
280
|
});
|
|
281
281
|
}
|
|
282
282
|
function validateAddonsAgainstFrontends(addons = [], frontends = [], auth, backend, runtime, ecosystem, rustFrontend, javaWebFramework, database) {
|
|
283
|
+
if (addons.includes("nx") && addons.includes("turborepo")) exitWithError("Nx and Turborepo are alternative workspace runners. Choose one addon.");
|
|
283
284
|
for (const addon of addons) {
|
|
284
285
|
if (addon === "none") continue;
|
|
285
286
|
const { isCompatible, reason } = validateAddonCompatibility$1(addon, frontends, auth, backend, runtime, ecosystem, rustFrontend, javaWebFramework, database);
|
|
@@ -635,6 +636,10 @@ function getAddonDisplay(addon) {
|
|
|
635
636
|
label = "Turborepo";
|
|
636
637
|
hint = "High-performance build system";
|
|
637
638
|
break;
|
|
639
|
+
case "nx":
|
|
640
|
+
label = "Nx";
|
|
641
|
+
hint = "Smart monorepo task runner and cache";
|
|
642
|
+
break;
|
|
638
643
|
case "pwa":
|
|
639
644
|
label = "PWA";
|
|
640
645
|
hint = "Make your app installable and work offline";
|
|
@@ -743,6 +748,7 @@ function getAddonDisplay(addon) {
|
|
|
743
748
|
const ADDON_GROUPS = {
|
|
744
749
|
Tooling: [
|
|
745
750
|
"turborepo",
|
|
751
|
+
"nx",
|
|
746
752
|
"biome",
|
|
747
753
|
"oxlint",
|
|
748
754
|
"ultracite",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { _ as getUserPkgManager, c as getGraphPart, d as hasGraphPart, f as types_exports, g as getDefaultConfig, h as DEFAULT_UI_LIBRARY_BY_FRONTEND, i as writeBtsConfig, l as getGraphSummary, m as DEFAULT_CONFIG, o as getGraphBackendDeployInstructions, p as getLatestCLIVersion, s as getGraphBackendUrl, u as getPrimaryGraphPart } from "./bts-config-Bg1Qea9Y.mjs";
|
|
3
|
-
import { A as validateAddonsAgainstFrontends, B as validateWorkersCompatibility, C as isExampleAIAllowed$1, D as requiresChatSdkVercelAI, E as isWebFrontend$1, F as validateServerDeployRequiresBackend, H as incompatibilityError, I as validateUILibraryCSSFrameworkCompatibility, L as validateUILibraryFrontendCompatibility, M as validateExamplesCompatibility, N as validatePaymentsCompatibility, O as splitFrontends$1, P as validateSelfBackendCompatibility, R as validateWebDeployFrontendTemplates, S as hasWebStyling$1, T as isFrontendAllowedWithBackend$1, U as missingRequirementError, V as constraintError, W as renderTitle, _ as isGoBack, a as runMavenTests, b as getCompatibleCSSFrameworks$1, c as applyDependencyVersionChannel, d as isCancel$1, f as navigableConfirm, g as GO_BACK_SYMBOL, h as setIsFirstPrompt, i as runGradleTests, j as validateApiFrontendCompatibility, k as validateAIFrontendCompatibility, l as getAddonsChoice, m as navigableSelect, n as runCargoBuild, o as runMixCompile, p as navigableMultiselect, r as runGoModTidy, s as runUvSync, t as installDependencies, v as allowedApisForFrontends$1, w as isExampleChatSdkAllowed$1, x as getCompatibleUILibraries$1, y as ensureSingleWebAndNative, z as validateWebDeployRequiresWebFrontend } from "./install-dependencies-
|
|
3
|
+
import { A as validateAddonsAgainstFrontends, B as validateWorkersCompatibility, C as isExampleAIAllowed$1, D as requiresChatSdkVercelAI, E as isWebFrontend$1, F as validateServerDeployRequiresBackend, H as incompatibilityError, I as validateUILibraryCSSFrameworkCompatibility, L as validateUILibraryFrontendCompatibility, M as validateExamplesCompatibility, N as validatePaymentsCompatibility, O as splitFrontends$1, P as validateSelfBackendCompatibility, R as validateWebDeployFrontendTemplates, S as hasWebStyling$1, T as isFrontendAllowedWithBackend$1, U as missingRequirementError, V as constraintError, W as renderTitle, _ as isGoBack, a as runMavenTests, b as getCompatibleCSSFrameworks$1, c as applyDependencyVersionChannel, d as isCancel$1, f as navigableConfirm, g as GO_BACK_SYMBOL, h as setIsFirstPrompt, i as runGradleTests, j as validateApiFrontendCompatibility, k as validateAIFrontendCompatibility, l as getAddonsChoice, m as navigableSelect, n as runCargoBuild, o as runMixCompile, p as navigableMultiselect, r as runGoModTidy, s as runUvSync, t as installDependencies, v as allowedApisForFrontends$1, w as isExampleChatSdkAllowed$1, x as getCompatibleUILibraries$1, y as ensureSingleWebAndNative, z as validateWebDeployRequiresWebFrontend } from "./install-dependencies-D0Z1dZEx.mjs";
|
|
4
4
|
import { a as CLIError, c as exitWithError, d as isFirstPrompt, f as isSilent, h as setLastPromptShownUI, i as canPromptInteractively, l as handleError, m as setIsFirstPrompt$1, n as getPackageExecutionArgs, o as UserCancelledError, p as runWithContextAsync, r as addPackageDependency, s as exitCancelled, t as setupAddons, u as didLastPromptShowUI } from "./addons-setup-HSghQS7c.mjs";
|
|
5
5
|
import { cancel, confirm, intro, isCancel, log, outro, select, spinner, text } from "@clack/prompts";
|
|
6
6
|
import { createRouterClient, os } from "@orpc/server";
|
|
@@ -531,6 +531,11 @@ const API_PROMPT_OPTION_MAP = {
|
|
|
531
531
|
label: "GraphQL Yoga",
|
|
532
532
|
hint: "Batteries-included GraphQL server with Pothos schema builder"
|
|
533
533
|
},
|
|
534
|
+
openapi: {
|
|
535
|
+
value: "openapi",
|
|
536
|
+
label: "OpenAPI",
|
|
537
|
+
hint: "REST scaffolding with an OpenAPI 3.1 spec and Scalar docs"
|
|
538
|
+
},
|
|
534
539
|
none: {
|
|
535
540
|
value: "none",
|
|
536
541
|
label: "None",
|
|
@@ -8439,7 +8444,44 @@ function validateFrontendConstraints(config, providedFlags) {
|
|
|
8439
8444
|
validateWebDeployRequiresWebFrontend(config.webDeploy, hasWebFrontendFlag);
|
|
8440
8445
|
validateWebDeployFrontendTemplates(config.webDeploy, frontend);
|
|
8441
8446
|
}
|
|
8442
|
-
function validateApiConstraints(
|
|
8447
|
+
function validateApiConstraints(config, _options) {
|
|
8448
|
+
if (config.api !== "openapi") return;
|
|
8449
|
+
const frontend = config.frontend ?? [];
|
|
8450
|
+
if (frontend.some((item) => [
|
|
8451
|
+
"native-bare",
|
|
8452
|
+
"native-uniwind",
|
|
8453
|
+
"native-unistyles"
|
|
8454
|
+
].includes(item))) incompatibilityError({
|
|
8455
|
+
message: "OpenAPI is currently available for web frontends, not React Native.",
|
|
8456
|
+
provided: {
|
|
8457
|
+
api: "openapi",
|
|
8458
|
+
frontend
|
|
8459
|
+
},
|
|
8460
|
+
suggestions: [
|
|
8461
|
+
"Use --api trpc",
|
|
8462
|
+
"Use --api orpc",
|
|
8463
|
+
"Use a web frontend"
|
|
8464
|
+
]
|
|
8465
|
+
});
|
|
8466
|
+
if (!config.backend || ![
|
|
8467
|
+
"hono",
|
|
8468
|
+
"express",
|
|
8469
|
+
"fastify",
|
|
8470
|
+
"elysia"
|
|
8471
|
+
].includes(config.backend)) incompatibilityError({
|
|
8472
|
+
message: "OpenAPI currently supports Hono, Express, Fastify, and Elysia backends.",
|
|
8473
|
+
provided: {
|
|
8474
|
+
api: "openapi",
|
|
8475
|
+
backend: config.backend ?? "none"
|
|
8476
|
+
},
|
|
8477
|
+
suggestions: [
|
|
8478
|
+
"Use --backend hono",
|
|
8479
|
+
"Use --backend express",
|
|
8480
|
+
"Use --backend fastify",
|
|
8481
|
+
"Use --backend elysia"
|
|
8482
|
+
]
|
|
8483
|
+
});
|
|
8484
|
+
}
|
|
8443
8485
|
function validateJavaConstraints(config, providedFlags = /* @__PURE__ */ new Set()) {
|
|
8444
8486
|
if (config.ecosystem !== "java") return;
|
|
8445
8487
|
const hasSpringBoot = config.javaWebFramework === "spring-boot";
|
|
@@ -11434,7 +11476,7 @@ const router = os.router({
|
|
|
11434
11476
|
packageManager: types_exports.PackageManagerSchema.optional().describe("Package manager to use"),
|
|
11435
11477
|
projectDir: z.string().optional().describe("Project directory (defaults to current)")
|
|
11436
11478
|
})).handler(async ({ input }) => {
|
|
11437
|
-
const { addHandler } = await import("./add-handler-
|
|
11479
|
+
const { addHandler } = await import("./add-handler-BQN6pwGJ.mjs");
|
|
11438
11480
|
await addHandler(input);
|
|
11439
11481
|
}),
|
|
11440
11482
|
history: os.meta({ description: "Show history of scaffolded projects with reproducible commands" }).input(z.object({
|
|
@@ -11531,7 +11573,7 @@ async function builder() {
|
|
|
11531
11573
|
return caller.builder();
|
|
11532
11574
|
}
|
|
11533
11575
|
async function add(input) {
|
|
11534
|
-
const { addHandler } = await import("./add-handler-
|
|
11576
|
+
const { addHandler } = await import("./add-handler-BQN6pwGJ.mjs");
|
|
11535
11577
|
return addHandler(input, { silent: true });
|
|
11536
11578
|
}
|
|
11537
11579
|
async function history(options) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./bts-config-Bg1Qea9Y.mjs";
|
|
3
|
-
import { a as docs, c as sponsors, i as createBtsCli, n as builder, o as history, r as create, s as router, t as add } from "./run-
|
|
4
|
-
import "./install-dependencies-
|
|
3
|
+
import { a as docs, c as sponsors, i as createBtsCli, n as builder, o as history, r as create, s as router, t as add } from "./run-BhcXBjxh.mjs";
|
|
4
|
+
import "./install-dependencies-D0Z1dZEx.mjs";
|
|
5
5
|
import "./addons-setup-HSghQS7c.mjs";
|
|
6
6
|
|
|
7
7
|
export { createBtsCli };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-better-fullstack",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "Scaffold production-ready fullstack apps in seconds. Pick your stack from 425 options — the CLI wires everything together.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"algolia",
|
|
@@ -127,11 +127,11 @@
|
|
|
127
127
|
"prepublishOnly": "npm run build"
|
|
128
128
|
},
|
|
129
129
|
"dependencies": {
|
|
130
|
-
"@better-fullstack/template-generator": "^2.0.
|
|
131
|
-
"@better-fullstack/types": "^2.0.
|
|
130
|
+
"@better-fullstack/template-generator": "^2.0.3",
|
|
131
|
+
"@better-fullstack/types": "^2.0.3",
|
|
132
132
|
"@clack/core": "^0.5.0",
|
|
133
133
|
"@clack/prompts": "^1.5.1",
|
|
134
|
-
"@orpc/server": "^1.14.
|
|
134
|
+
"@orpc/server": "^1.14.6",
|
|
135
135
|
"consola": "^3.4.2",
|
|
136
136
|
"env-paths": "^4.0.0",
|
|
137
137
|
"execa": "^9.6.1",
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"@types/bun": "^1.3.14",
|
|
149
149
|
"ts-morph": "^27.0.2",
|
|
150
150
|
"@types/fs-extra": "^11.0.4",
|
|
151
|
-
"@types/node": "^25.9.
|
|
151
|
+
"@types/node": "^25.9.3",
|
|
152
152
|
"publint": "^0.3.21",
|
|
153
153
|
"tsdown": "^0.18.2",
|
|
154
154
|
"typescript": "^5.9.3"
|