create-better-fullstack 1.4.14 → 1.4.16

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/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { s as createBtsCli } from "./src-DkmebgOw.mjs";
2
+ import { s as createBtsCli } from "./src-BVbxA2WC.mjs";
3
3
 
4
4
  //#region src/cli.ts
5
5
  createBtsCli().run();
package/dist/index.d.mts CHANGED
@@ -196,6 +196,7 @@ declare const router: {
196
196
  payload: "payload";
197
197
  sanity: "sanity";
198
198
  strapi: "strapi";
199
+ tinacms: "tinacms";
199
200
  }>>;
200
201
  caching: z.ZodOptional<z.ZodEnum<{
201
202
  none: "none";
@@ -564,7 +565,7 @@ declare const router: {
564
565
  observability: "none" | "opentelemetry" | "sentry" | "grafana";
565
566
  featureFlags: "none" | "growthbook" | "posthog";
566
567
  analytics: "none" | "plausible" | "umami";
567
- cms: "none" | "payload" | "sanity" | "strapi";
568
+ cms: "none" | "payload" | "sanity" | "strapi" | "tinacms";
568
569
  caching: "none" | "upstash-redis";
569
570
  search: "none" | "meilisearch" | "typesense";
570
571
  fileStorage: "none" | "s3" | "r2";
@@ -650,7 +651,7 @@ declare const router: {
650
651
  observability: "none" | "opentelemetry" | "sentry" | "grafana";
651
652
  featureFlags: "none" | "growthbook" | "posthog";
652
653
  analytics: "none" | "plausible" | "umami";
653
- cms: "none" | "payload" | "sanity" | "strapi";
654
+ cms: "none" | "payload" | "sanity" | "strapi" | "tinacms";
654
655
  caching: "none" | "upstash-redis";
655
656
  search: "none" | "meilisearch" | "typesense";
656
657
  fileStorage: "none" | "s3" | "r2";
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import { a as builder, c as createVirtual, d as history, f as router, i as add, l as docs, n as TEMPLATE_COUNT, o as create, p as sponsors, r as VirtualFileSystem, s as createBtsCli, t as EMBEDDED_TEMPLATES, u as generateVirtualProject } from "./src-DkmebgOw.mjs";
2
+ import { a as builder, c as createVirtual, d as history, f as router, i as add, l as docs, n as TEMPLATE_COUNT, o as create, p as sponsors, r as VirtualFileSystem, s as createBtsCli, t as EMBEDDED_TEMPLATES, u as generateVirtualProject } from "./src-BVbxA2WC.mjs";
3
3
 
4
4
  export { EMBEDDED_TEMPLATES, TEMPLATE_COUNT, VirtualFileSystem, add, builder, create, createBtsCli, createVirtual, docs, generateVirtualProject, history, router, sponsors };
@@ -9,7 +9,7 @@ import envPaths from "env-paths";
9
9
  import fs from "fs-extra";
10
10
  import path from "node:path";
11
11
  import { fileURLToPath } from "node:url";
12
- import { ECOSYSTEM_GROUPS, EMBEDDED_TEMPLATES, EMBEDDED_TEMPLATES as EMBEDDED_TEMPLATES$1, TEMPLATE_COUNT, VirtualFileSystem, VirtualFileSystem as VirtualFileSystem$1, checkAllVersions, dependencyVersionMap, generateCliReport, generateVirtualProject, generateVirtualProject as generateVirtualProject$1, listEcosystems, processAddonTemplates, processAddonsDeps } from "@better-fullstack/template-generator";
12
+ import { ECOSYSTEM_GROUPS, EMBEDDED_TEMPLATES, EMBEDDED_TEMPLATES as EMBEDDED_TEMPLATES$1, TEMPLATE_COUNT, VirtualFileSystem, VirtualFileSystem as VirtualFileSystem$1, checkAllVersions, dependencyVersionMap, generateCliReport, generateVirtualProject, generateVirtualProject as generateVirtualProject$1, listEcosystems, processAddonTemplates, processAddonsDeps, validatePreflightConfig } from "@better-fullstack/template-generator";
13
13
  import gradient from "gradient-string";
14
14
  import path$1 from "path";
15
15
  import { writeTreeToFilesystem } from "@better-fullstack/template-generator/fs-writer";
@@ -3385,6 +3385,11 @@ async function getCMSChoice(cms, backend) {
3385
3385
  label: "Strapi",
3386
3386
  hint: "Open-source headless CMS with admin panel"
3387
3387
  },
3388
+ {
3389
+ value: "tinacms",
3390
+ label: "TinaCMS",
3391
+ hint: "Git-backed headless CMS with visual editing"
3392
+ },
3388
3393
  {
3389
3394
  value: "none",
3390
3395
  label: "None",
@@ -7048,6 +7053,26 @@ function validateConfigCompatibility(config, providedFlags, options) {
7048
7053
  else validateConfigForProgrammaticUse(config);
7049
7054
  }
7050
7055
 
7056
+ //#endregion
7057
+ //#region src/utils/preflight-display.ts
7058
+ function displayPreflightWarnings({ warnings }) {
7059
+ if (warnings.length === 0) return;
7060
+ const count = warnings.length;
7061
+ const lines = [pc.bold(pc.yellow(`${count} feature${count > 1 ? "s" : ""} will not generate templates:`)), ""];
7062
+ warnings.forEach((w, i) => {
7063
+ const selected = Array.isArray(w.selectedValue) ? w.selectedValue.join(", ") : w.selectedValue;
7064
+ lines.push(` ${pc.yellow(`${i + 1}.`)} ${pc.bold(w.featureDisplayName)} ${pc.dim(`(${selected})`)}`);
7065
+ lines.push(` ${w.reason}`);
7066
+ w.suggestions.forEach((s) => lines.push(` ${pc.green("•")} ${s}`));
7067
+ if (i < count - 1) lines.push("");
7068
+ });
7069
+ consola.box({
7070
+ title: pc.yellow("Pre-flight Check"),
7071
+ message: lines.join("\n"),
7072
+ style: { borderColor: "yellow" }
7073
+ });
7074
+ }
7075
+
7051
7076
  //#endregion
7052
7077
  //#region src/utils/file-formatter.ts
7053
7078
  const formatOptions = {
@@ -8337,8 +8362,9 @@ async function displayPostInstallInstructions(config) {
8337
8362
  if (polarInstructions) output += `\n${polarInstructions.trim()}\n`;
8338
8363
  if (noOrmWarning) output += `\n${noOrmWarning.trim()}\n`;
8339
8364
  if (bunWebNativeWarning) output += `\n${bunWebNativeWarning.trim()}\n`;
8340
- output += `\n${pc.bold("Like Better Fullstack?")} Please consider giving us a star\n on GitHub:\n`;
8341
- output += pc.cyan("https://github.com/Marve10s/Better-Fullstack");
8365
+ output += `\n${pc.bold("Enjoying Better Fullstack?")} Help us grow star the repo!\n`;
8366
+ output += `${pc.cyan("https://github.com/Marve10s/Better-Fullstack")}\n`;
8367
+ output += pc.dim("Your star helps other developers discover the project.");
8342
8368
  consola$1.box(output);
8343
8369
  }
8344
8370
  function getNativeInstructions(isConvex, isBackendSelf, frontend, runCmd) {
@@ -8476,8 +8502,9 @@ function displayRustInstructions(config) {
8476
8502
  output += `${pc.cyan("•")} Check: cargo check\n`;
8477
8503
  output += `${pc.cyan("•")} Format: cargo fmt\n`;
8478
8504
  output += `${pc.cyan("•")} Lint: cargo clippy\n`;
8479
- output += `\n${pc.bold("Like Better Fullstack?")} Please consider giving us a star\n on GitHub:\n`;
8480
- output += pc.cyan("https://github.com/Marve10s/Better-Fullstack");
8505
+ output += `\n${pc.bold("Enjoying Better Fullstack?")} Help us grow star the repo!\n`;
8506
+ output += `${pc.cyan("https://github.com/Marve10s/Better-Fullstack")}\n`;
8507
+ output += pc.dim("Your star helps other developers discover the project.");
8481
8508
  consola$1.box(output);
8482
8509
  }
8483
8510
  function displayGoInstructions(config) {
@@ -8512,8 +8539,9 @@ function displayGoInstructions(config) {
8512
8539
  output += `\n${pc.bold("Your project will be available at:")}\n`;
8513
8540
  output += `${pc.cyan("•")} API: http://localhost:8080\n`;
8514
8541
  if (goApi === "grpc-go") output += `${pc.cyan("•")} gRPC: localhost:50051\n`;
8515
- output += `\n${pc.bold("Like Better Fullstack?")} Please consider giving us a star\n on GitHub:\n`;
8516
- output += pc.cyan("https://github.com/Marve10s/Better-Fullstack");
8542
+ output += `\n${pc.bold("Enjoying Better Fullstack?")} Help us grow star the repo!\n`;
8543
+ output += `${pc.cyan("https://github.com/Marve10s/Better-Fullstack")}\n`;
8544
+ output += pc.dim("Your star helps other developers discover the project.");
8517
8545
  consola$1.box(output);
8518
8546
  }
8519
8547
  function displayPythonInstructions(config) {
@@ -8557,8 +8585,9 @@ function displayPythonInstructions(config) {
8557
8585
  output += `${pc.cyan("•")} Lint: uv run ruff check .\n`;
8558
8586
  output += `\n${pc.bold("Your project will be available at:")}\n`;
8559
8587
  output += `${pc.cyan("•")} API: http://localhost:8000\n`;
8560
- output += `\n${pc.bold("Like Better Fullstack?")} Please consider giving us a star\n on GitHub:\n`;
8561
- output += pc.cyan("https://github.com/Marve10s/Better-Fullstack");
8588
+ output += `\n${pc.bold("Enjoying Better Fullstack?")} Help us grow star the repo!\n`;
8589
+ output += `${pc.cyan("https://github.com/Marve10s/Better-Fullstack")}\n`;
8590
+ output += pc.dim("Your star helps other developers discover the project.");
8562
8591
  consola$1.box(output);
8563
8592
  }
8564
8593
 
@@ -8765,6 +8794,8 @@ async function createProjectHandler(input, options = {}) {
8765
8794
  relativePath: finalPathInput
8766
8795
  };
8767
8796
  validateConfigCompatibility(config, providedFlags, cliInput);
8797
+ const yesPreflight = validatePreflightConfig(config);
8798
+ if (yesPreflight.hasWarnings && !isSilent()) displayPreflightWarnings(yesPreflight);
8768
8799
  if (!isSilent()) {
8769
8800
  log.info(pc.yellow("Using default/flag options (config prompts skipped):"));
8770
8801
  log.message(displayConfig(config));
@@ -8779,6 +8810,8 @@ async function createProjectHandler(input, options = {}) {
8779
8810
  }
8780
8811
  config = await gatherConfig(flagConfig, finalBaseName, finalResolvedPath, finalPathInput);
8781
8812
  }
8813
+ const preflight = validatePreflightConfig(config);
8814
+ if (preflight.hasWarnings && !isSilent()) displayPreflightWarnings(preflight);
8782
8815
  await createProject(config, { manualDb: cliInput.manualDb ?? input.manualDb });
8783
8816
  const reproducibleCommand = generateReproducibleCommand(config);
8784
8817
  if (!isSilent()) log.success(pc.blue(`You can reproduce this setup with the following command:\n${reproducibleCommand}`));
package/package.json CHANGED
@@ -1,30 +1,51 @@
1
1
  {
2
2
  "name": "create-better-fullstack",
3
- "version": "1.4.14",
3
+ "version": "1.4.16",
4
4
  "description": "Scaffold production-ready fullstack apps in seconds. Pick your stack from 270+ options — the CLI wires everything together.",
5
5
  "keywords": [
6
+ "angular",
7
+ "astro",
8
+ "authentication",
6
9
  "better-auth",
7
10
  "better-fullstack",
8
11
  "biome",
9
12
  "boilerplate",
13
+ "bun",
10
14
  "cli",
15
+ "create",
16
+ "create-app",
17
+ "desktop",
18
+ "developer-tools",
19
+ "docker",
11
20
  "drizzle",
12
21
  "elysia",
13
22
  "expo",
23
+ "fastapi",
14
24
  "fullstack",
15
25
  "go",
16
26
  "golang",
17
27
  "hono",
28
+ "mobile",
18
29
  "monorepo",
30
+ "nextjs",
31
+ "nuxt",
32
+ "payments",
33
+ "pnpm",
19
34
  "prisma",
35
+ "project-generator",
20
36
  "pwa",
21
37
  "python",
22
38
  "react",
23
39
  "react-native",
24
40
  "rust",
41
+ "scaffold",
25
42
  "scaffolding",
26
43
  "shadcn",
44
+ "solid",
27
45
  "starter",
46
+ "starter-kit",
47
+ "svelte",
48
+ "sveltekit",
28
49
  "tailwind",
29
50
  "tanstack",
30
51
  "tauri",
@@ -33,6 +54,9 @@
33
54
  "turborepo",
34
55
  "type-safety",
35
56
  "typescript",
57
+ "vite",
58
+ "vue",
59
+ "web-app",
36
60
  "yarn"
37
61
  ],
38
62
  "homepage": "https://better-fullstack.dev/",
@@ -75,7 +99,8 @@
75
99
  "test:watch": "bun test --watch",
76
100
  "test:coverage": "bun test --coverage",
77
101
  "test:ci": "CI=1 bun test --bail=5",
78
- "test:e2e": "E2E=1 bun test test/e2e/e2e.e2e.ts",
102
+ "test:e2e": "E2E=1 bun test test/e2e/e2e.e2e.ts --timeout 600000",
103
+ "test:integration": "bun test test/e2e/cli-interaction.test.ts test/e2e/cli-binary.test.ts",
79
104
  "test:astro-combos": "bun run scripts/test-astro-combinations.ts",
80
105
  "test:matrix": "MATRIX_MODE=batched bun test ./test/matrix/matrix-test.test.ts",
81
106
  "test:matrix:fast": "MATRIX_MODE=sample MATRIX_SAMPLE=0.1 bun test ./test/matrix/matrix-test.test.ts",
@@ -83,15 +108,15 @@
83
108
  "prepublishOnly": "npm run build"
84
109
  },
85
110
  "dependencies": {
86
- "@better-fullstack/template-generator": "^1.4.14",
87
- "@better-fullstack/types": "^1.4.14",
111
+ "@better-fullstack/template-generator": "^1.4.16",
112
+ "@better-fullstack/types": "^1.4.16",
88
113
  "@clack/core": "^0.5.0",
89
- "@clack/prompts": "^1.0.0-alpha.8",
90
- "@orpc/server": "^1.13.0",
114
+ "@clack/prompts": "^1.1.0",
115
+ "@orpc/server": "^1.13.9",
91
116
  "consola": "^3.4.2",
92
117
  "env-paths": "^4.0.0",
93
118
  "execa": "^9.6.1",
94
- "fs-extra": "^11.3.3",
119
+ "fs-extra": "^11.3.4",
95
120
  "gradient-string": "^3.0.0",
96
121
  "handlebars": "^4.7.8",
97
122
  "jsonc-parser": "^3.3.1",
@@ -100,14 +125,14 @@
100
125
  "tinyglobby": "^0.2.15",
101
126
  "trpc-cli": "^0.12.1",
102
127
  "ts-morph": "^27.0.2",
103
- "yaml": "^2.8.2",
104
- "zod": "^4.2.1"
128
+ "yaml": "^2.8.3",
129
+ "zod": "^4.3.6"
105
130
  },
106
131
  "devDependencies": {
107
- "@types/bun": "^1.3.5",
132
+ "@types/bun": "^1.3.11",
108
133
  "@types/fs-extra": "^11.0.4",
109
- "@types/node": "^25.0.3",
110
- "publint": "^0.3.16",
134
+ "@types/node": "^25.5.0",
135
+ "publint": "^0.3.18",
111
136
  "tsdown": "^0.18.2",
112
137
  "typescript": "^5.9.3"
113
138
  }