create-better-fullstack 2.1.8 → 2.3.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 +4 -4
- package/dist/{add-handler-ztNjzoMN.mjs → add-handler-z4NCxoq6.mjs} +9 -8
- package/dist/addons-setup-COE1e1db.mjs +7 -0
- package/dist/{addons-setup-LaAj43NP.mjs → addons-setup-DKtiNexf.mjs} +1 -1
- package/dist/{analytics-DVltG11u.mjs → analytics-BD8hZvIj.mjs} +1 -1
- package/dist/{bts-config-DQVWvPDs.mjs → bts-config-Bwd6GB7B.mjs} +59 -0
- package/dist/cli.mjs +2 -2
- package/dist/command-exists-DtX9ldL8.mjs +15 -0
- package/dist/{config-processing-D9-F2Us9.mjs → config-processing-B-RT_mVE.mjs} +32 -3
- package/dist/{doctor-a4ca3SMd.mjs → doctor-LmNs-hDr.mjs} +4 -3
- package/dist/{file-formatter-gvmrpd-g.mjs → file-formatter-DxF56-mO.mjs} +550 -24
- package/dist/{gen-CCClL7Ve.mjs → gen-CQfQU0uZ.mjs} +1 -1
- package/dist/{generated-checks-BV9jol5h.mjs → generated-checks-BUcI5VM2.mjs} +55 -22
- package/dist/index.d.mts +741 -211
- package/dist/index.mjs +30 -9
- package/dist/{install-dependencies-RoUyaE8o.mjs → install-dependencies-CJiUklm3.mjs} +132 -23
- package/dist/{mcp-492OkjcS.mjs → mcp-BBammItk.mjs} +5 -5
- package/dist/mcp-entry.mjs +76 -236
- package/dist/{registry-DSf2CEaU.mjs → registry-D0JfLCoH.mjs} +1 -1
- package/dist/{run-T6g1jkfy.mjs → run-BAIeghcU.mjs} +1948 -318
- package/dist/run-CAl4L4uU.mjs +16 -0
- package/dist/scaffold-manifest-CQwvyttq.mjs +4 -0
- package/dist/{scaffold-manifest-Dyi0voqE.mjs → scaffold-manifest-Dr3Anmlf.mjs} +34 -5
- package/dist/{update-DJ8CI5KW.mjs → update-CnrBdWrh.mjs} +182 -25
- package/package.json +24 -7
- package/dist/addons-setup-DnLjAzTw.mjs +0 -7
- package/dist/run-CD8f7PHh.mjs +0 -15
- package/dist/scaffold-manifest-DGRyepdb.mjs +0 -4
- /package/dist/{update-deps-aD-iQw4U.mjs → update-deps-G3FgqBlW.mjs} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Better Fullstack
|
|
2
2
|
|
|
3
|
-
Scaffold
|
|
3
|
+
Scaffold configurable fullstack apps across web, mobile, and backend ecosystems — the CLI wires your selected stack together.
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
@@ -31,8 +31,8 @@ Configure your stack visually — pick every option from a UI, preview your choi
|
|
|
31
31
|
|
|
32
32
|
## Features
|
|
33
33
|
|
|
34
|
-
- **
|
|
35
|
-
- **
|
|
34
|
+
- **Broad stack catalog** — frontend, backend, database, auth, payments, AI, DevOps, and more
|
|
35
|
+
- **Multi-ecosystem projects** — compose web, mobile, and backend stacks across supported ecosystems
|
|
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> #
|
|
45
|
+
--ecosystem <lang> # Choose the primary project ecosystem
|
|
46
46
|
--part <binding> # Add a multi-ecosystem stack part, e.g. frontend:typescript:next
|
|
47
47
|
--version-channel # Dependency channel: stable, latest, beta
|
|
48
48
|
--no-git # Skip git initialization
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as updateBtsConfig, r as readBtsConfig, v as getDefaultConfig } from "./bts-config-
|
|
2
|
+
import { a as updateBtsConfig, r as readBtsConfig, v as getDefaultConfig } from "./bts-config-Bwd6GB7B.mjs";
|
|
3
3
|
import { t as renderTitle } from "./render-title-zvyKC1ej.mjs";
|
|
4
4
|
import { c as isSilent, l as runWithContextAsync, n as UserCancelledError, t as CLIError } from "./errors-ns_o2OKg.mjs";
|
|
5
5
|
import "./prompt-environment-BR0Kkw2W.mjs";
|
|
6
|
-
import { i as trackEvent, r as maybeShowTelemetryNotice } from "./analytics-
|
|
7
|
-
import "./file-formatter-
|
|
8
|
-
import { c as applyDependencyVersionChannel, t as installDependencies, u as getAddonsToAdd } from "./install-dependencies-
|
|
9
|
-
import "./
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
6
|
+
import { i as trackEvent, r as maybeShowTelemetryNotice } from "./analytics-BD8hZvIj.mjs";
|
|
7
|
+
import "./file-formatter-DxF56-mO.mjs";
|
|
8
|
+
import { c as applyDependencyVersionChannel, t as installDependencies, u as getAddonsToAdd } from "./install-dependencies-CJiUklm3.mjs";
|
|
9
|
+
import "./command-exists-DtX9ldL8.mjs";
|
|
10
|
+
import "./scaffold-manifest-Dr3Anmlf.mjs";
|
|
11
|
+
import { t as setupAddons } from "./addons-setup-DKtiNexf.mjs";
|
|
12
|
+
import { p as planStackUpdate, s as applyStackUpdate } from "./mcp-entry.mjs";
|
|
12
13
|
import { intro, log, outro } from "@clack/prompts";
|
|
13
14
|
import pc from "picocolors";
|
|
14
15
|
import fs from "fs-extra";
|
|
@@ -211,7 +212,7 @@ async function addHandlerInternal(input) {
|
|
|
211
212
|
const existingAddons = btsConfig.addons || [];
|
|
212
213
|
let addonsToAdd = [];
|
|
213
214
|
if (input.addons && input.addons.length > 0) addonsToAdd = input.addons.filter((addon) => addon !== "none" && !existingAddons.includes(addon));
|
|
214
|
-
else addonsToAdd = (await getAddonsToAdd(btsConfig.frontend || [], existingAddons, btsConfig.auth)).filter((addon) => addon !== "none");
|
|
215
|
+
else addonsToAdd = (await getAddonsToAdd(btsConfig.frontend || [], existingAddons, btsConfig.auth, btsConfig.backend, btsConfig.runtime, btsConfig.api ?? "none")).filter((addon) => addon !== "none");
|
|
215
216
|
if (addonsToAdd.length === 0) {
|
|
216
217
|
if (!isSilent()) {
|
|
217
218
|
log.info(pc.dim("No new addons selected."));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { r as readBtsConfig } from "./bts-config-
|
|
2
|
+
import { r as readBtsConfig } from "./bts-config-Bwd6GB7B.mjs";
|
|
3
3
|
import { c as isSilent, r as exitCancelled } from "./errors-ns_o2OKg.mjs";
|
|
4
4
|
import { t as canPromptInteractively } from "./prompt-environment-BR0Kkw2W.mjs";
|
|
5
5
|
import { autocompleteMultiselect, group, isCancel, log, multiselect, select, spinner } from "@clack/prompts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { m as getLatestCLIVersion } from "./bts-config-
|
|
2
|
+
import { m as getLatestCLIVersion } from "./bts-config-Bwd6GB7B.mjs";
|
|
3
3
|
import { t as canPromptInteractively } from "./prompt-environment-BR0Kkw2W.mjs";
|
|
4
4
|
import { log } from "@clack/prompts";
|
|
5
5
|
import pc from "picocolors";
|
|
@@ -40,6 +40,8 @@ function getDefaultConfig() {
|
|
|
40
40
|
pythonAi: [...DEFAULT_CONFIG_BASE.pythonAi],
|
|
41
41
|
javaLibraries: [...DEFAULT_CONFIG_BASE.javaLibraries],
|
|
42
42
|
javaTestingLibraries: [...DEFAULT_CONFIG_BASE.javaTestingLibraries],
|
|
43
|
+
mobileLibraries: [...DEFAULT_CONFIG_BASE.mobileLibraries],
|
|
44
|
+
dotnetLibraries: [...DEFAULT_CONFIG_BASE.dotnetLibraries],
|
|
43
45
|
aiDocs: [...DEFAULT_CONFIG_BASE.aiDocs]
|
|
44
46
|
};
|
|
45
47
|
}
|
|
@@ -52,6 +54,8 @@ const DEFAULT_UI_LIBRARY_BY_FRONTEND = {
|
|
|
52
54
|
"tanstack-router": "shadcn-ui",
|
|
53
55
|
"react-router": "shadcn-ui",
|
|
54
56
|
"react-vite": "shadcn-ui",
|
|
57
|
+
"vanilla-vite": "none",
|
|
58
|
+
vue: "none",
|
|
55
59
|
"tanstack-start": "shadcn-ui",
|
|
56
60
|
next: "shadcn-ui",
|
|
57
61
|
vinext: "shadcn-ui",
|
|
@@ -299,6 +303,13 @@ function normalizeGraphConfigForPersistence(projectConfig, stackParts) {
|
|
|
299
303
|
normalized.pythonRealtime = "none";
|
|
300
304
|
normalized.pythonObservability = "none";
|
|
301
305
|
normalized.pythonCli = [];
|
|
306
|
+
normalized.pythonCloudSdk = "none";
|
|
307
|
+
normalized.pythonHttpClient = "none";
|
|
308
|
+
normalized.pythonData = [];
|
|
309
|
+
normalized.pythonMedia = "none";
|
|
310
|
+
normalized.pythonServer = "none";
|
|
311
|
+
normalized.pythonPackageManager = "uv";
|
|
312
|
+
normalized.pythonMessageQueue = "none";
|
|
302
313
|
}
|
|
303
314
|
if (!selectedEcosystems.has("go")) {
|
|
304
315
|
normalized.goWebFramework = "none";
|
|
@@ -313,6 +324,12 @@ function normalizeGraphConfigForPersistence(projectConfig, stackParts) {
|
|
|
313
324
|
normalized.goCaching = "none";
|
|
314
325
|
normalized.goConfig = "none";
|
|
315
326
|
normalized.goObservability = "none";
|
|
327
|
+
normalized.goValidation = "none";
|
|
328
|
+
normalized.goQuality = "none";
|
|
329
|
+
normalized.goMigrations = "none";
|
|
330
|
+
normalized.goTemplating = "none";
|
|
331
|
+
normalized.goProtoTooling = "none";
|
|
332
|
+
normalized.goDI = "none";
|
|
316
333
|
}
|
|
317
334
|
if (selectedEcosystems.has("go") && projectConfig.auth === "go-better-auth" && legacyConfig.auth === "none") normalized.auth = projectConfig.auth;
|
|
318
335
|
if (!selectedEcosystems.has("java")) {
|
|
@@ -338,6 +355,7 @@ function normalizeGraphConfigForPersistence(projectConfig, stackParts) {
|
|
|
338
355
|
normalized.dotnetValidation = "none";
|
|
339
356
|
normalized.dotnetCaching = "none";
|
|
340
357
|
normalized.dotnetDeploy = "none";
|
|
358
|
+
normalized.dotnetLibraries = [];
|
|
341
359
|
}
|
|
342
360
|
if (!selectedEcosystems.has("elixir")) {
|
|
343
361
|
normalized.elixirWebFramework = "none";
|
|
@@ -373,6 +391,7 @@ function normalizeGraphConfigForPersistence(projectConfig, stackParts) {
|
|
|
373
391
|
normalized.mobilePush = "none";
|
|
374
392
|
normalized.mobileOTA = "none";
|
|
375
393
|
normalized.mobileDeepLinking = "none";
|
|
394
|
+
normalized.mobileLibraries = [];
|
|
376
395
|
}
|
|
377
396
|
return normalized;
|
|
378
397
|
}
|
|
@@ -489,6 +508,7 @@ function buildBtsConfigForPersistence(projectConfig, metadata = {}) {
|
|
|
489
508
|
mobilePush: persistedConfig.mobilePush,
|
|
490
509
|
mobileOTA: persistedConfig.mobileOTA,
|
|
491
510
|
mobileDeepLinking: persistedConfig.mobileDeepLinking,
|
|
511
|
+
mobileLibraries: persistedConfig.mobileLibraries,
|
|
492
512
|
cms: persistedConfig.cms,
|
|
493
513
|
caching: persistedConfig.caching,
|
|
494
514
|
rateLimit: persistedConfig.rateLimit,
|
|
@@ -524,6 +544,13 @@ function buildBtsConfigForPersistence(projectConfig, metadata = {}) {
|
|
|
524
544
|
pythonRealtime: persistedConfig.pythonRealtime,
|
|
525
545
|
pythonObservability: persistedConfig.pythonObservability,
|
|
526
546
|
pythonCli: persistedConfig.pythonCli,
|
|
547
|
+
pythonCloudSdk: persistedConfig.pythonCloudSdk,
|
|
548
|
+
pythonHttpClient: persistedConfig.pythonHttpClient,
|
|
549
|
+
pythonData: persistedConfig.pythonData,
|
|
550
|
+
pythonMedia: persistedConfig.pythonMedia,
|
|
551
|
+
pythonServer: persistedConfig.pythonServer,
|
|
552
|
+
pythonPackageManager: persistedConfig.pythonPackageManager,
|
|
553
|
+
pythonMessageQueue: persistedConfig.pythonMessageQueue,
|
|
527
554
|
goWebFramework: persistedConfig.goWebFramework,
|
|
528
555
|
goOrm: persistedConfig.goOrm,
|
|
529
556
|
goApi: persistedConfig.goApi,
|
|
@@ -536,6 +563,12 @@ function buildBtsConfigForPersistence(projectConfig, metadata = {}) {
|
|
|
536
563
|
goCaching: persistedConfig.goCaching,
|
|
537
564
|
goConfig: persistedConfig.goConfig,
|
|
538
565
|
goObservability: persistedConfig.goObservability,
|
|
566
|
+
goValidation: persistedConfig.goValidation,
|
|
567
|
+
goQuality: persistedConfig.goQuality,
|
|
568
|
+
goMigrations: persistedConfig.goMigrations,
|
|
569
|
+
goTemplating: persistedConfig.goTemplating,
|
|
570
|
+
goProtoTooling: persistedConfig.goProtoTooling,
|
|
571
|
+
goDI: persistedConfig.goDI,
|
|
539
572
|
javaLanguage: persistedConfig.javaLanguage,
|
|
540
573
|
javaWebFramework: persistedConfig.javaWebFramework,
|
|
541
574
|
javaBuildTool: persistedConfig.javaBuildTool,
|
|
@@ -556,6 +589,7 @@ function buildBtsConfigForPersistence(projectConfig, metadata = {}) {
|
|
|
556
589
|
dotnetValidation: persistedConfig.dotnetValidation,
|
|
557
590
|
dotnetCaching: persistedConfig.dotnetCaching,
|
|
558
591
|
dotnetDeploy: persistedConfig.dotnetDeploy,
|
|
592
|
+
dotnetLibraries: persistedConfig.dotnetLibraries,
|
|
559
593
|
elixirWebFramework: persistedConfig.elixirWebFramework,
|
|
560
594
|
elixirOrm: persistedConfig.elixirOrm,
|
|
561
595
|
elixirAuth: persistedConfig.elixirAuth,
|
|
@@ -570,6 +604,11 @@ function buildBtsConfigForPersistence(projectConfig, metadata = {}) {
|
|
|
570
604
|
elixirObservability: persistedConfig.elixirObservability,
|
|
571
605
|
elixirTesting: persistedConfig.elixirTesting,
|
|
572
606
|
elixirQuality: persistedConfig.elixirQuality,
|
|
607
|
+
elixirI18n: persistedConfig.elixirI18n,
|
|
608
|
+
elixirHttpServer: persistedConfig.elixirHttpServer,
|
|
609
|
+
elixirApplicationFramework: persistedConfig.elixirApplicationFramework,
|
|
610
|
+
elixirDocumentation: persistedConfig.elixirDocumentation,
|
|
611
|
+
elixirClustering: persistedConfig.elixirClustering,
|
|
573
612
|
elixirDeploy: persistedConfig.elixirDeploy,
|
|
574
613
|
elixirLibraries: persistedConfig.elixirLibraries,
|
|
575
614
|
aiDocs: persistedConfig.aiDocs,
|
|
@@ -646,6 +685,7 @@ async function writeBtsConfig(projectConfig, metadata = {}) {
|
|
|
646
685
|
mobilePush: btsConfig.mobilePush,
|
|
647
686
|
mobileOTA: btsConfig.mobileOTA,
|
|
648
687
|
mobileDeepLinking: btsConfig.mobileDeepLinking,
|
|
688
|
+
mobileLibraries: btsConfig.mobileLibraries,
|
|
649
689
|
cms: btsConfig.cms,
|
|
650
690
|
caching: btsConfig.caching,
|
|
651
691
|
rateLimit: btsConfig.rateLimit,
|
|
@@ -681,6 +721,13 @@ async function writeBtsConfig(projectConfig, metadata = {}) {
|
|
|
681
721
|
pythonRealtime: btsConfig.pythonRealtime,
|
|
682
722
|
pythonObservability: btsConfig.pythonObservability,
|
|
683
723
|
pythonCli: btsConfig.pythonCli,
|
|
724
|
+
pythonCloudSdk: btsConfig.pythonCloudSdk,
|
|
725
|
+
pythonHttpClient: btsConfig.pythonHttpClient,
|
|
726
|
+
pythonData: btsConfig.pythonData,
|
|
727
|
+
pythonMedia: btsConfig.pythonMedia,
|
|
728
|
+
pythonServer: btsConfig.pythonServer,
|
|
729
|
+
pythonPackageManager: btsConfig.pythonPackageManager,
|
|
730
|
+
pythonMessageQueue: btsConfig.pythonMessageQueue,
|
|
684
731
|
goWebFramework: btsConfig.goWebFramework,
|
|
685
732
|
goOrm: btsConfig.goOrm,
|
|
686
733
|
goApi: btsConfig.goApi,
|
|
@@ -693,6 +740,12 @@ async function writeBtsConfig(projectConfig, metadata = {}) {
|
|
|
693
740
|
goCaching: btsConfig.goCaching,
|
|
694
741
|
goConfig: btsConfig.goConfig,
|
|
695
742
|
goObservability: btsConfig.goObservability,
|
|
743
|
+
goValidation: btsConfig.goValidation,
|
|
744
|
+
goQuality: btsConfig.goQuality,
|
|
745
|
+
goMigrations: btsConfig.goMigrations,
|
|
746
|
+
goTemplating: btsConfig.goTemplating,
|
|
747
|
+
goProtoTooling: btsConfig.goProtoTooling,
|
|
748
|
+
goDI: btsConfig.goDI,
|
|
696
749
|
javaLanguage: btsConfig.javaLanguage,
|
|
697
750
|
javaWebFramework: btsConfig.javaWebFramework,
|
|
698
751
|
javaBuildTool: btsConfig.javaBuildTool,
|
|
@@ -713,6 +766,7 @@ async function writeBtsConfig(projectConfig, metadata = {}) {
|
|
|
713
766
|
dotnetValidation: btsConfig.dotnetValidation,
|
|
714
767
|
dotnetCaching: btsConfig.dotnetCaching,
|
|
715
768
|
dotnetDeploy: btsConfig.dotnetDeploy,
|
|
769
|
+
dotnetLibraries: btsConfig.dotnetLibraries,
|
|
716
770
|
elixirWebFramework: btsConfig.elixirWebFramework,
|
|
717
771
|
elixirOrm: btsConfig.elixirOrm,
|
|
718
772
|
elixirAuth: btsConfig.elixirAuth,
|
|
@@ -727,6 +781,11 @@ async function writeBtsConfig(projectConfig, metadata = {}) {
|
|
|
727
781
|
elixirObservability: btsConfig.elixirObservability,
|
|
728
782
|
elixirTesting: btsConfig.elixirTesting,
|
|
729
783
|
elixirQuality: btsConfig.elixirQuality,
|
|
784
|
+
elixirI18n: btsConfig.elixirI18n,
|
|
785
|
+
elixirHttpServer: btsConfig.elixirHttpServer,
|
|
786
|
+
elixirApplicationFramework: btsConfig.elixirApplicationFramework,
|
|
787
|
+
elixirDocumentation: btsConfig.elixirDocumentation,
|
|
788
|
+
elixirClustering: btsConfig.elixirClustering,
|
|
730
789
|
elixirDeploy: btsConfig.elixirDeploy,
|
|
731
790
|
elixirLibraries: btsConfig.elixirLibraries,
|
|
732
791
|
aiDocs: btsConfig.aiDocs,
|
package/dist/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
//#region src/cli.ts
|
|
3
|
-
if (process.argv[2] === "mcp" && process.argv.length === 3) import("./mcp-
|
|
4
|
-
else import("./run-
|
|
3
|
+
if (process.argv[2] === "mcp" && process.argv.length === 3) import("./mcp-BBammItk.mjs").then((m) => m.startMcpServer());
|
|
4
|
+
else import("./run-CAl4L4uU.mjs").then((m) => m.createBtsCli().run());
|
|
5
5
|
|
|
6
6
|
//#endregion
|
|
7
7
|
export { };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { $ } from "execa";
|
|
3
|
+
|
|
4
|
+
//#region src/utils/command-exists.ts
|
|
5
|
+
async function commandExists(command) {
|
|
6
|
+
try {
|
|
7
|
+
if (process.platform === "win32") return (await $({ reject: false })`where ${command}`).exitCode === 0;
|
|
8
|
+
return (await $({ reject: false })`which ${command}`).exitCode === 0;
|
|
9
|
+
} catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { commandExists as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { b as types_exports } from "./bts-config-
|
|
2
|
+
import { b as types_exports } from "./bts-config-Bwd6GB7B.mjs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { cliInputToProjectConfigPartial } from "@better-fullstack/types/stack-translation";
|
|
5
5
|
|
|
@@ -13,7 +13,7 @@ function getBaseCommand(packageManager) {
|
|
|
13
13
|
default: return "npx create-better-fullstack@latest";
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
function formatArrayFlag(flag, values) {
|
|
16
|
+
function formatArrayFlag(flag, values = []) {
|
|
17
17
|
const normalizedValues = values.filter((value) => value !== "none");
|
|
18
18
|
if (normalizedValues.length === 0) return `--${flag} none`;
|
|
19
19
|
return `--${flag} ${normalizedValues.join(" ")}`;
|
|
@@ -75,7 +75,7 @@ function hasAnyOwnedGraphArrayPart(config, ownerRole, role, ecosystem) {
|
|
|
75
75
|
}
|
|
76
76
|
function appendChangedOwnedGraphArrayFlag(flags, config, ownerRole, role, ecosystem, flag, values, defaultValues) {
|
|
77
77
|
if (hasAnyOwnedGraphArrayPart(config, ownerRole, role, ecosystem)) return;
|
|
78
|
-
appendChangedArrayFlag(flags, flag, values, defaultValues);
|
|
78
|
+
appendChangedArrayFlag(flags, flag, values ?? [], defaultValues);
|
|
79
79
|
}
|
|
80
80
|
function appendChangedArrayFlag(flags, flag, values, defaultValues) {
|
|
81
81
|
if (values.length !== defaultValues.length || values.some((value, index) => value !== defaultValues[index])) flags.push(formatArrayFlag(flag, values));
|
|
@@ -141,6 +141,7 @@ function appendGraphExtraFlags(flags, config) {
|
|
|
141
141
|
appendChangedOwnedGraphStringFlag(flags, config, "mobile", "push", "react-native", "mobile-push", config.mobilePush, "none");
|
|
142
142
|
appendChangedOwnedGraphStringFlag(flags, config, "mobile", "ota", "react-native", "mobile-ota", config.mobileOTA, "none");
|
|
143
143
|
appendChangedOwnedGraphStringFlag(flags, config, "mobile", "deepLinking", "react-native", "mobile-deep-linking", config.mobileDeepLinking, "none");
|
|
144
|
+
appendChangedOwnedGraphArrayFlag(flags, config, "mobile", "libraries", "react-native", "mobile-libraries", config.mobileLibraries, []);
|
|
144
145
|
}
|
|
145
146
|
if (hasGraphPrimaryPart(config, "frontend", "rust")) appendChangedStringFlag(flags, "rust-frontend", config.rustFrontend, "none");
|
|
146
147
|
if (hasGraphPrimaryPart(config, "backend", "rust")) {
|
|
@@ -177,6 +178,11 @@ function appendGraphExtraFlags(flags, config) {
|
|
|
177
178
|
appendChangedGraphStringFlag(flags, config, "observability", "elixir", "elixir-observability", config.elixirObservability, "telemetry");
|
|
178
179
|
appendChangedGraphStringFlag(flags, config, "testing", "elixir", "elixir-testing", config.elixirTesting, "ex_unit");
|
|
179
180
|
appendChangedOwnedGraphStringFlag(flags, config, "backend", "codeQuality", "elixir", "elixir-quality", config.elixirQuality, "credo");
|
|
181
|
+
appendChangedGraphStringFlag(flags, config, "i18n", "elixir", "elixir-i18n", config.elixirI18n, "none");
|
|
182
|
+
appendChangedGraphStringFlag(flags, config, "runtime", "elixir", "elixir-http-server", config.elixirHttpServer, "cowboy");
|
|
183
|
+
appendChangedGraphStringFlag(flags, config, "libraries", "elixir", "elixir-application-framework", config.elixirApplicationFramework, "none");
|
|
184
|
+
appendChangedGraphStringFlag(flags, config, "documentation", "elixir", "elixir-documentation", config.elixirDocumentation, "none");
|
|
185
|
+
appendChangedGraphStringFlag(flags, config, "config", "elixir", "elixir-clustering", config.elixirClustering, "none");
|
|
180
186
|
appendChangedGraphStringFlag(flags, config, "deploy", "elixir", "elixir-deploy", config.elixirDeploy, "none");
|
|
181
187
|
}
|
|
182
188
|
}
|
|
@@ -242,6 +248,7 @@ function getTypeScriptFlags(config) {
|
|
|
242
248
|
flags.push(`--mobile-push ${config.mobilePush}`);
|
|
243
249
|
flags.push(`--mobile-ota ${config.mobileOTA}`);
|
|
244
250
|
flags.push(`--mobile-deep-linking ${config.mobileDeepLinking}`);
|
|
251
|
+
if (config.mobileLibraries) flags.push(formatArrayFlag("mobile-libraries", config.mobileLibraries));
|
|
245
252
|
if (config.addons && config.addons.length > 0) flags.push(`--addons ${config.addons.join(" ")}`);
|
|
246
253
|
else flags.push("--addons none");
|
|
247
254
|
if (config.examples && config.examples.length > 0) flags.push(`--examples ${config.examples.join(" ")}`);
|
|
@@ -264,6 +271,7 @@ function getReactNativeFlags(config) {
|
|
|
264
271
|
flags.push(`--mobile-push ${config.mobilePush}`);
|
|
265
272
|
flags.push(`--mobile-ota ${config.mobileOTA}`);
|
|
266
273
|
flags.push(`--mobile-deep-linking ${config.mobileDeepLinking}`);
|
|
274
|
+
flags.push(formatArrayFlag("mobile-libraries", config.mobileLibraries));
|
|
267
275
|
appendCommonFlags(flags, config);
|
|
268
276
|
return flags;
|
|
269
277
|
}
|
|
@@ -303,6 +311,13 @@ function getPythonFlags(config) {
|
|
|
303
311
|
flags.push(`--python-realtime ${config.pythonRealtime}`);
|
|
304
312
|
flags.push(`--python-observability ${config.pythonObservability}`);
|
|
305
313
|
flags.push(formatArrayFlag("python-cli", config.pythonCli));
|
|
314
|
+
flags.push(`--python-cloud-sdk ${config.pythonCloudSdk}`);
|
|
315
|
+
flags.push(`--python-http-client ${config.pythonHttpClient}`);
|
|
316
|
+
flags.push(formatArrayFlag("python-data", config.pythonData));
|
|
317
|
+
flags.push(`--python-media ${config.pythonMedia}`);
|
|
318
|
+
flags.push(`--python-server ${config.pythonServer}`);
|
|
319
|
+
flags.push(`--python-package-manager ${config.pythonPackageManager}`);
|
|
320
|
+
flags.push(`--python-message-queue ${config.pythonMessageQueue}`);
|
|
306
321
|
appendSharedNonTypeScriptFlags(flags, config);
|
|
307
322
|
appendCommonFlags(flags, config);
|
|
308
323
|
return flags;
|
|
@@ -321,6 +336,12 @@ function getGoFlags(config) {
|
|
|
321
336
|
flags.push(`--go-caching ${config.goCaching}`);
|
|
322
337
|
flags.push(`--go-config ${config.goConfig}`);
|
|
323
338
|
flags.push(`--go-observability ${config.goObservability}`);
|
|
339
|
+
flags.push(`--go-validation ${config.goValidation ?? "none"}`);
|
|
340
|
+
flags.push(`--go-quality ${config.goQuality ?? "none"}`);
|
|
341
|
+
flags.push(`--go-migrations ${config.goMigrations ?? "none"}`);
|
|
342
|
+
flags.push(`--go-templating ${config.goTemplating ?? "none"}`);
|
|
343
|
+
flags.push(`--go-proto-tooling ${config.goProtoTooling ?? "none"}`);
|
|
344
|
+
flags.push(`--go-di ${config.goDI ?? "none"}`);
|
|
324
345
|
flags.push(`--auth ${config.auth}`);
|
|
325
346
|
appendSharedNonTypeScriptFlags(flags, config);
|
|
326
347
|
appendCommonFlags(flags, config);
|
|
@@ -354,6 +375,7 @@ function getDotnetFlags(config) {
|
|
|
354
375
|
flags.push(`--dotnet-validation ${config.dotnetValidation}`);
|
|
355
376
|
flags.push(`--dotnet-caching ${config.dotnetCaching}`);
|
|
356
377
|
flags.push(`--dotnet-deploy ${config.dotnetDeploy}`);
|
|
378
|
+
if (config.dotnetLibraries) flags.push(formatArrayFlag("dotnet-libraries", config.dotnetLibraries));
|
|
357
379
|
appendCommonFlags(flags, config);
|
|
358
380
|
return flags;
|
|
359
381
|
}
|
|
@@ -373,6 +395,11 @@ function getElixirFlags(config) {
|
|
|
373
395
|
flags.push(`--elixir-observability ${config.elixirObservability}`);
|
|
374
396
|
flags.push(`--elixir-testing ${config.elixirTesting}`);
|
|
375
397
|
flags.push(`--elixir-quality ${config.elixirQuality}`);
|
|
398
|
+
flags.push(`--elixir-i18n ${config.elixirI18n}`);
|
|
399
|
+
flags.push(`--elixir-http-server ${config.elixirHttpServer}`);
|
|
400
|
+
flags.push(`--elixir-application-framework ${config.elixirApplicationFramework}`);
|
|
401
|
+
flags.push(`--elixir-documentation ${config.elixirDocumentation}`);
|
|
402
|
+
flags.push(`--elixir-clustering ${config.elixirClustering}`);
|
|
376
403
|
flags.push(`--elixir-deploy ${config.elixirDeploy}`);
|
|
377
404
|
flags.push(formatArrayFlag("elixir-libraries", config.elixirLibraries));
|
|
378
405
|
appendCommonFlags(flags, config);
|
|
@@ -546,6 +573,8 @@ function validateArrayOptions(options) {
|
|
|
546
573
|
validateNoneExclusivity(options.pythonAi, "python ai libraries");
|
|
547
574
|
validateNoneExclusivity(options.javaLibraries, "java libraries");
|
|
548
575
|
validateNoneExclusivity(options.javaTestingLibraries, "java testing libraries");
|
|
576
|
+
validateNoneExclusivity(options.mobileLibraries, "mobile libraries");
|
|
577
|
+
validateNoneExclusivity(options.dotnetLibraries, ".NET libraries");
|
|
549
578
|
}
|
|
550
579
|
|
|
551
580
|
//#endregion
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { r as readBtsConfig } from "./bts-config-
|
|
2
|
+
import { r as readBtsConfig } from "./bts-config-Bwd6GB7B.mjs";
|
|
3
3
|
import { t as renderTitle } from "./render-title-zvyKC1ej.mjs";
|
|
4
4
|
import { a as handleError } from "./errors-ns_o2OKg.mjs";
|
|
5
|
-
import
|
|
5
|
+
import "./command-exists-DtX9ldL8.mjs";
|
|
6
|
+
import { t as runGeneratedChecks } from "./generated-checks-BUcI5VM2.mjs";
|
|
6
7
|
import { intro, log, spinner } from "@clack/prompts";
|
|
7
8
|
import pc from "picocolors";
|
|
8
9
|
import fs from "fs-extra";
|
|
@@ -49,7 +50,7 @@ const NATIVE_LOCKFILES = {
|
|
|
49
50
|
},
|
|
50
51
|
python: {
|
|
51
52
|
file: "uv.lock",
|
|
52
|
-
hint: "uv sync"
|
|
53
|
+
hint: "uv sync --extra dev"
|
|
53
54
|
},
|
|
54
55
|
elixir: {
|
|
55
56
|
file: "mix.lock",
|