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 +1 -1
- package/dist/index.d.mts +3 -2
- package/dist/index.mjs +1 -1
- package/dist/{src-DkmebgOw.mjs → src-BVbxA2WC.mjs} +42 -9
- package/package.json +37 -12
package/dist/cli.mjs
CHANGED
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-
|
|
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("
|
|
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("
|
|
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("
|
|
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("
|
|
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.
|
|
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.
|
|
87
|
-
"@better-fullstack/types": "^1.4.
|
|
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.
|
|
90
|
-
"@orpc/server": "^1.13.
|
|
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.
|
|
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.
|
|
104
|
-
"zod": "^4.
|
|
128
|
+
"yaml": "^2.8.3",
|
|
129
|
+
"zod": "^4.3.6"
|
|
105
130
|
},
|
|
106
131
|
"devDependencies": {
|
|
107
|
-
"@types/bun": "^1.3.
|
|
132
|
+
"@types/bun": "^1.3.11",
|
|
108
133
|
"@types/fs-extra": "^11.0.4",
|
|
109
|
-
"@types/node": "^25.0
|
|
110
|
-
"publint": "^0.3.
|
|
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
|
}
|