@better-fullstack/types 2.1.8 → 2.2.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/dist/{defaults-DNnZX9er.mjs → defaults-DgL5YPQY.mjs} +12 -1
- package/dist/defaults-DgL5YPQY.mjs.map +1 -0
- package/dist/{defaults-Cpkx-Eu7.d.mts → defaults-DyNR1d-V.d.mts} +2 -2
- package/dist/defaults-DyNR1d-V.d.mts.map +1 -0
- package/dist/defaults.d.mts +3 -3
- package/dist/defaults.mjs +1 -1
- package/dist/index.d.mts +7 -7
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +110 -5
- package/dist/index.mjs.map +1 -1
- package/dist/json-schema.d.mts +1814 -362
- package/dist/json-schema.d.mts.map +1 -1
- package/dist/json-schema.mjs +94 -2
- package/dist/json-schema.mjs.map +1 -1
- package/dist/{schemas-DOb4t_el.d.mts → schemas-D9kkuJz7.d.mts} +1811 -645
- package/dist/schemas-D9kkuJz7.d.mts.map +1 -0
- package/dist/{schemas-BXDvWDRp.mjs → schemas-l7hOhH8U.mjs} +161 -6
- package/dist/schemas-l7hOhH8U.mjs.map +1 -0
- package/dist/schemas.d.mts +2 -2
- package/dist/schemas.mjs +2 -2
- package/dist/{stack-graph-BAad0vv4.mjs → stack-graph-C8r3fTh4.mjs} +180 -27
- package/dist/stack-graph-C8r3fTh4.mjs.map +1 -0
- package/dist/{stack-graph-0MDSuSPQ.d.mts → stack-graph-F6UKYYR0.d.mts} +2 -2
- package/dist/{stack-graph-0MDSuSPQ.d.mts.map → stack-graph-F6UKYYR0.d.mts.map} +1 -1
- package/dist/stack-graph.d.mts +3 -3
- package/dist/stack-graph.mjs +2 -2
- package/dist/{stack-translation-CnNmU8Z5.d.mts → stack-translation-BNHNx5_b.d.mts} +31 -9
- package/dist/stack-translation-BNHNx5_b.d.mts.map +1 -0
- package/dist/{stack-translation-DwSS9Vc2.mjs → stack-translation-Kr0TyRAm.mjs} +703 -81
- package/dist/stack-translation-Kr0TyRAm.mjs.map +1 -0
- package/dist/stack-translation.d.mts +4 -4
- package/dist/stack-translation.mjs +3 -3
- package/dist/{types-CcWal512.d.mts → types-C7RpHf2e.d.mts} +14 -3
- package/dist/types-C7RpHf2e.d.mts.map +1 -0
- package/dist/types.d.mts +3 -3
- package/package.json +2 -2
- package/dist/defaults-Cpkx-Eu7.d.mts.map +0 -1
- package/dist/defaults-DNnZX9er.mjs.map +0 -1
- package/dist/schemas-BXDvWDRp.mjs.map +0 -1
- package/dist/schemas-DOb4t_el.d.mts.map +0 -1
- package/dist/stack-graph-BAad0vv4.mjs.map +0 -1
- package/dist/stack-translation-CnNmU8Z5.d.mts.map +0 -1
- package/dist/stack-translation-DwSS9Vc2.mjs.map +0 -1
- package/dist/types-CcWal512.d.mts.map +0 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { $n as
|
|
1
|
+
import { $i as SERVER_DEPLOY_VALUES, $n as JAVA_AUTH_VALUES, $r as PYTHON_WEB_FRAMEWORK_VALUES, A as CSS_FRAMEWORK_VALUES, Ai as RUST_OBSERVABILITY_VALUES, An as GO_WEB_FRAMEWORK_VALUES, At as EMAIL_VALUES, B as DOTNET_JOB_QUEUE_VALUES, Br as PYTHON_AI_VALUES, Ca as TESTING_VALUES, Ci as RUST_CACHING_VALUES, Cn as GO_ORM_VALUES, Cr as MOBILE_PUSH_VALUES, Ct as ELIXIR_OBSERVABILITY_VALUES, Da as UI_LIBRARY_VALUES, Di as RUST_LIBRARIES_VALUES, Dn as GO_TEMPLATING_VALUES, Dt as ELIXIR_TESTING_VALUES, Ei as RUST_FRONTEND_VALUES, En as GO_REALTIME_VALUES, Er as MOBILE_UI_VALUES, Et as ELIXIR_REALTIME_VALUES, G as DOTNET_VALIDATION_VALUES, Gr as PYTHON_GRAPHQL_VALUES, H as DOTNET_ORM_VALUES, Hr as PYTHON_AUTH_VALUES, I as DOTNET_API_VALUES, Ir as ORM_VALUES, Jr as PYTHON_QUALITY_VALUES, K as DOTNET_WEB_FRAMEWORK_VALUES, Kr as PYTHON_OBSERVABILITY_VALUES, L as DOTNET_AUTH_VALUES, Mi as RUST_REALTIME_VALUES, N as DATABASE_SETUP_VALUES, Ni as RUST_TEMPLATING_VALUES, O as CMS_VALUES, Oa as VALIDATION_VALUES, Oi as RUST_LOGGING_VALUES, On as GO_TESTING_VALUES, Ot as ELIXIR_VALIDATION_VALUES, P as DATABASE_VALUES, Pa as WEB_DEPLOY_VALUES, Pi as RUST_WEB_FRAMEWORK_VALUES, Pr as OBSERVABILITY_VALUES, Qi as SEARCH_VALUES, Qn as JAVA_API_VALUES, Qr as PYTHON_VALIDATION_VALUES, R as DOTNET_CACHING_VALUES, Si as RUST_AUTH_VALUES, Sn as GO_OBSERVABILITY_VALUES, Sr as MOBILE_OTA_VALUES, St as ELIXIR_LIBRARIES_VALUES, T as CACHING_VALUES, Ti as RUST_ERROR_HANDLING_VALUES, Tn as GO_QUALITY_VALUES, Tr as MOBILE_TESTING_VALUES, Tt as ELIXIR_QUALITY_VALUES, U as DOTNET_REALTIME_VALUES, Ur as PYTHON_CACHING_VALUES, V as DOTNET_OBSERVABILITY_VALUES, Vr as PYTHON_API_VALUES, W as DOTNET_TESTING_VALUES, Wr as PYTHON_CLI_VALUES, Xr as PYTHON_TASK_QUEUE_VALUES, Yn as I18N_VALUES, Yr as PYTHON_REALTIME_VALUES, Zr as PYTHON_TESTING_VALUES, _n as GO_CONFIG_VALUES, _t as ELIXIR_HTTP_SERVER_VALUES, a as ANALYTICS_VALUES, an as FILE_UPLOAD_VALUES, ar as JAVA_TESTING_LIBRARIES_VALUES, bi as RUNTIME_VALUES, bn as GO_MESSAGE_QUEUE_VALUES, br as MOBILE_DEEP_LINKING_VALUES, bt as ELIXIR_JOBS_VALUES, c as API_VALUES, ct as EFFECT_VALUES, d as AUTH_VALUES, dt as ELIXIR_AUTH_VALUES, er as JAVA_BUILD_TOOL_VALUES, ft as ELIXIR_CACHING_VALUES, gn as GO_CLI_VALUES, gt as ELIXIR_EMAIL_VALUES, hn as GO_CACHING_VALUES, ht as ELIXIR_DOCUMENTATION_VALUES, i as AI_VALUES, in as FILE_STORAGE_VALUES, ir as JAVA_ORM_VALUES, ji as RUST_ORM_VALUES, jt as EXAMPLES_VALUES, ka as VECTOR_DB_VALUES, ki as RUST_MESSAGE_QUEUE_VALUES, kn as GO_VALIDATION_VALUES, kt as ELIXIR_WEB_FRAMEWORK_VALUES, l as APP_PLATFORM_ADDON_VALUES, lt as ELIXIR_API_VALUES, mn as GO_AUTH_VALUES, mt as ELIXIR_DEPLOY_VALUES, nr as JAVA_LIBRARIES_VALUES, o as ANIMATION_VALUES, on as FORMS_VALUES, or as JAVA_WEB_FRAMEWORK_VALUES, pn as GO_API_VALUES, pt as ELIXIR_CLUSTERING_VALUES, qr as PYTHON_ORM_VALUES, rn as FEATURE_FLAGS_VALUES, rr as JAVA_LOGGING_VALUES, sa as STATE_MANAGEMENT_VALUES, sn as FRONTEND_VALUES, sr as JOB_QUEUE_VALUES, t as ADDONS_VALUES, tr as JAVA_LANGUAGE_VALUES, ut as ELIXIR_APPLICATION_FRAMEWORK_VALUES, va as StackPartRoleSchema, vi as RATE_LIMIT_VALUES, vn as GO_DI_VALUES, vr as LOGGING_VALUES, vt as ELIXIR_HTTP_VALUES, wi as RUST_CLI_VALUES, wn as GO_PROTO_TOOLING_VALUES, wr as MOBILE_STORAGE_VALUES, wt as ELIXIR_ORM_VALUES, xi as RUST_API_VALUES, xn as GO_MIGRATIONS_VALUES, xr as MOBILE_NAVIGATION_VALUES, y as BACKEND_VALUES, yi as REALTIME_VALUES, yn as GO_LOGGING_VALUES, yt as ELIXIR_I18N_VALUES, z as DOTNET_DEPLOY_VALUES, zr as PAYMENTS_VALUES } from "./schemas-l7hOhH8U.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/stack-compatibility-rules.ts
|
|
4
4
|
const WEB_FRAMEWORKS = [
|
|
5
5
|
"tanstack-router",
|
|
6
6
|
"react-router",
|
|
7
7
|
"react-vite",
|
|
8
|
+
"vanilla-vite",
|
|
9
|
+
"vue",
|
|
8
10
|
"tanstack-start",
|
|
9
11
|
"next",
|
|
10
12
|
"vinext",
|
|
@@ -20,6 +22,16 @@ const WEB_FRAMEWORKS = [
|
|
|
20
22
|
"none"
|
|
21
23
|
];
|
|
22
24
|
const WEB_DEPLOY_COMPATIBLE_FRONTENDS = {
|
|
25
|
+
cloudflare: [
|
|
26
|
+
"tanstack-router",
|
|
27
|
+
"react-router",
|
|
28
|
+
"tanstack-start",
|
|
29
|
+
"next",
|
|
30
|
+
"nuxt",
|
|
31
|
+
"svelte",
|
|
32
|
+
"solid",
|
|
33
|
+
"astro"
|
|
34
|
+
],
|
|
23
35
|
render: [
|
|
24
36
|
"tanstack-router",
|
|
25
37
|
"react-router",
|
|
@@ -46,6 +58,8 @@ const hasPWACompatibleFrontend = (webFrontend) => webFrontend.some((frontend) =>
|
|
|
46
58
|
"tanstack-router",
|
|
47
59
|
"react-router",
|
|
48
60
|
"react-vite",
|
|
61
|
+
"vanilla-vite",
|
|
62
|
+
"vue",
|
|
49
63
|
"solid",
|
|
50
64
|
"next",
|
|
51
65
|
"vinext",
|
|
@@ -55,6 +69,8 @@ const hasTauriCompatibleFrontend = (webFrontend) => webFrontend.some((frontend)
|
|
|
55
69
|
"tanstack-router",
|
|
56
70
|
"react-router",
|
|
57
71
|
"react-vite",
|
|
72
|
+
"vanilla-vite",
|
|
73
|
+
"vue",
|
|
58
74
|
"nuxt",
|
|
59
75
|
"svelte",
|
|
60
76
|
"solid",
|
|
@@ -66,6 +82,8 @@ const hasDockerComposeCompatibleFrontend = (webFrontend) => webFrontend.some((fr
|
|
|
66
82
|
"tanstack-router",
|
|
67
83
|
"react-router",
|
|
68
84
|
"react-vite",
|
|
85
|
+
"vanilla-vite",
|
|
86
|
+
"vue",
|
|
69
87
|
"solid",
|
|
70
88
|
"next",
|
|
71
89
|
"vinext",
|
|
@@ -101,6 +119,8 @@ const UI_LIBRARY_COMPATIBILITY = {
|
|
|
101
119
|
"tanstack-router",
|
|
102
120
|
"react-router",
|
|
103
121
|
"react-vite",
|
|
122
|
+
"vanilla-vite",
|
|
123
|
+
"vue",
|
|
104
124
|
"tanstack-start",
|
|
105
125
|
"next",
|
|
106
126
|
"vinext",
|
|
@@ -131,6 +151,7 @@ const UI_LIBRARY_COMPATIBILITY = {
|
|
|
131
151
|
"scss",
|
|
132
152
|
"less",
|
|
133
153
|
"postcss-only",
|
|
154
|
+
"styled-components",
|
|
134
155
|
"none"
|
|
135
156
|
]
|
|
136
157
|
},
|
|
@@ -319,6 +340,7 @@ const UI_LIBRARY_COMPATIBILITY = {
|
|
|
319
340
|
"scss",
|
|
320
341
|
"less",
|
|
321
342
|
"postcss-only",
|
|
343
|
+
"styled-components",
|
|
322
344
|
"none"
|
|
323
345
|
]
|
|
324
346
|
}
|
|
@@ -401,6 +423,8 @@ const PARAGLIDE_COMPATIBLE_FRONTENDS = new Set([
|
|
|
401
423
|
"tanstack-start",
|
|
402
424
|
"react-router",
|
|
403
425
|
"react-vite",
|
|
426
|
+
"vanilla-vite",
|
|
427
|
+
"vue",
|
|
404
428
|
"svelte",
|
|
405
429
|
"solid",
|
|
406
430
|
"solid-start",
|
|
@@ -410,12 +434,16 @@ const TYPESCRIPT_TRPC_INCOMPATIBLE_FRONTENDS = new Set([
|
|
|
410
434
|
"nuxt",
|
|
411
435
|
"svelte",
|
|
412
436
|
"solid",
|
|
413
|
-
"solid-start"
|
|
437
|
+
"solid-start",
|
|
438
|
+
"vanilla-vite",
|
|
439
|
+
"vue"
|
|
414
440
|
]);
|
|
415
441
|
const TYPESCRIPT_APOLLO_SERVER_COMPATIBLE_FRONTENDS = new Set([
|
|
416
442
|
"tanstack-router",
|
|
417
443
|
"react-router",
|
|
418
444
|
"react-vite",
|
|
445
|
+
"vanilla-vite",
|
|
446
|
+
"vue",
|
|
419
447
|
"tanstack-start",
|
|
420
448
|
"next",
|
|
421
449
|
"vinext"
|
|
@@ -426,11 +454,18 @@ const BETTER_AUTH_UNSUPPORTED_ORM_TOOLS = new Set([
|
|
|
426
454
|
"sequelize"
|
|
427
455
|
]);
|
|
428
456
|
const ELIXIR_ECTO_REQUIRED_TOOLS = new Set(["absinthe"]);
|
|
429
|
-
const ELIXIR_ECTO_SQL_REQUIRED_TOOLS = new Set(["oban"
|
|
457
|
+
const ELIXIR_ECTO_SQL_REQUIRED_TOOLS = new Set(["oban"]);
|
|
458
|
+
const ELIXIR_SQL_REPO_REQUIRED_TOOLS = new Set([
|
|
459
|
+
"pow",
|
|
460
|
+
"ex_machina",
|
|
461
|
+
"phx-gen-auth"
|
|
462
|
+
]);
|
|
430
463
|
const ELIXIR_PHOENIX_REQUIRED_ROLE_MESSAGES = {
|
|
431
464
|
auth: "Elixir auth scaffolds require Phoenix",
|
|
432
465
|
api: "Elixir API scaffolds require Phoenix",
|
|
433
|
-
realtime: "Elixir realtime scaffolds require Phoenix"
|
|
466
|
+
realtime: "Elixir realtime scaffolds require Phoenix",
|
|
467
|
+
i18n: "Elixir Internationalization requires Phoenix",
|
|
468
|
+
runtime: "HTTP server adapters require Phoenix"
|
|
434
469
|
};
|
|
435
470
|
const ELIXIR_UNSUPPORTED_GRAPH_TOOL_MESSAGES = {};
|
|
436
471
|
const ELIXIR_UNSUPPORTED_GRAPH_TOOLS = new Set(Object.keys(ELIXIR_UNSUPPORTED_GRAPH_TOOL_MESSAGES));
|
|
@@ -552,26 +587,26 @@ const LEGACY_BACKEND_ARRAY_CATEGORIES_BY_ECOSYSTEM = {
|
|
|
552
587
|
};
|
|
553
588
|
const CODE_QUALITY_ADDONS = new Set([
|
|
554
589
|
"biome",
|
|
590
|
+
"eslint",
|
|
591
|
+
"prettier",
|
|
555
592
|
"oxlint",
|
|
556
593
|
"ultracite",
|
|
557
594
|
"lefthook",
|
|
558
595
|
"husky"
|
|
559
596
|
]);
|
|
560
597
|
const DOCUMENTATION_ADDONS = new Set(["starlight", "fumadocs"]);
|
|
561
|
-
const FRONTEND_APP_PLATFORM_ADDONS = new Set(
|
|
562
|
-
"pwa",
|
|
563
|
-
"tauri",
|
|
564
|
-
"wxt",
|
|
565
|
-
"opentui"
|
|
566
|
-
]);
|
|
598
|
+
const FRONTEND_APP_PLATFORM_ADDONS = new Set(APP_PLATFORM_ADDON_VALUES);
|
|
567
599
|
const FRONTEND_DATA_FETCHING_ADDONS = new Set([
|
|
568
600
|
"swr",
|
|
601
|
+
"apollo-client",
|
|
569
602
|
"tanstack-query",
|
|
570
603
|
"tanstack-table",
|
|
571
604
|
"tanstack-virtual",
|
|
572
605
|
"tanstack-db",
|
|
573
606
|
"tanstack-pacer"
|
|
574
607
|
]);
|
|
608
|
+
const FRONTEND_HTTP_CLIENT_ADDONS = new Set(["axios"]);
|
|
609
|
+
const FRONTEND_LIBRARY_ADDONS = new Set(["firebase"]);
|
|
575
610
|
const FRONTEND_TESTING_ADDONS = new Set(["msw", "storybook"]);
|
|
576
611
|
const WORKSPACE_TOOLING_ADDONS = new Set([
|
|
577
612
|
"turborepo",
|
|
@@ -582,7 +617,9 @@ const WORKSPACE_TOOLING_ADDONS = new Set([
|
|
|
582
617
|
"ruler",
|
|
583
618
|
"mcp",
|
|
584
619
|
"skills",
|
|
585
|
-
"backend-utils"
|
|
620
|
+
"backend-utils",
|
|
621
|
+
"graphql-codegen",
|
|
622
|
+
"openapi-typescript"
|
|
586
623
|
]);
|
|
587
624
|
const DOCKER_COMPOSE_COMPATIBLE_ECOSYSTEMS = new Set([
|
|
588
625
|
"typescript",
|
|
@@ -597,7 +634,9 @@ const LEGACY_ADDON_GRAPH_ROLES = new Set([
|
|
|
597
634
|
"dataFetching",
|
|
598
635
|
"documentation",
|
|
599
636
|
"testing",
|
|
600
|
-
"workspaceTooling"
|
|
637
|
+
"workspaceTooling",
|
|
638
|
+
"httpClient",
|
|
639
|
+
"libraries"
|
|
601
640
|
]);
|
|
602
641
|
const LEGACY_ARRAY_CATEGORIES = new Set([
|
|
603
642
|
"addons",
|
|
@@ -632,6 +671,16 @@ function getAddonStackPartBinding(toolId) {
|
|
|
632
671
|
ecosystem: "typescript",
|
|
633
672
|
ownerRole: "frontend"
|
|
634
673
|
};
|
|
674
|
+
if (FRONTEND_HTTP_CLIENT_ADDONS.has(toolId)) return {
|
|
675
|
+
role: "httpClient",
|
|
676
|
+
ecosystem: "typescript",
|
|
677
|
+
ownerRole: "frontend"
|
|
678
|
+
};
|
|
679
|
+
if (FRONTEND_LIBRARY_ADDONS.has(toolId)) return {
|
|
680
|
+
role: "libraries",
|
|
681
|
+
ecosystem: "typescript",
|
|
682
|
+
ownerRole: "frontend"
|
|
683
|
+
};
|
|
635
684
|
if (FRONTEND_TESTING_ADDONS.has(toolId)) return {
|
|
636
685
|
role: "testing",
|
|
637
686
|
ecosystem: "typescript",
|
|
@@ -648,6 +697,7 @@ const OWNER_ROLES_BY_SCOPED_ROLE = {
|
|
|
648
697
|
...Object.fromEntries(Object.keys(LEGACY_MOBILE_SINGLE_CATEGORIES).map((role) => [role, ["mobile"]])),
|
|
649
698
|
deploy: ["frontend", "backend"],
|
|
650
699
|
dbSetup: ["database"],
|
|
700
|
+
migrations: ["backend"],
|
|
651
701
|
ui: ["frontend", "mobile"],
|
|
652
702
|
graphql: ["backend"],
|
|
653
703
|
appPlatform: ["frontend"],
|
|
@@ -661,8 +711,8 @@ const OWNER_ROLES_BY_SCOPED_ROLE = {
|
|
|
661
711
|
buildTool: ["backend"],
|
|
662
712
|
cli: ["backend"],
|
|
663
713
|
errorHandling: ["backend"],
|
|
664
|
-
httpClient: ["backend"],
|
|
665
|
-
libraries: ["backend"]
|
|
714
|
+
httpClient: ["frontend", "backend"],
|
|
715
|
+
libraries: ["frontend", "backend"]
|
|
666
716
|
};
|
|
667
717
|
const FRESH_UNSUPPORTED_STATE_MANAGEMENT_TOOLS = new Set([
|
|
668
718
|
"nanostores",
|
|
@@ -760,7 +810,13 @@ const LEGACY_EXTRA_CATEGORIES_BY_ECOSYSTEM = {
|
|
|
760
810
|
jobQueue: "goMessageQueue",
|
|
761
811
|
caching: "goCaching",
|
|
762
812
|
config: "goConfig",
|
|
763
|
-
observability: "goObservability"
|
|
813
|
+
observability: "goObservability",
|
|
814
|
+
validation: "goValidation",
|
|
815
|
+
codeQuality: "goQuality",
|
|
816
|
+
migrations: "goMigrations",
|
|
817
|
+
templating: "goTemplating",
|
|
818
|
+
buildTool: "goProtoTooling",
|
|
819
|
+
libraries: "goDI"
|
|
764
820
|
},
|
|
765
821
|
java: {
|
|
766
822
|
buildTool: "javaBuildTool",
|
|
@@ -783,6 +839,11 @@ const LEGACY_EXTRA_CATEGORIES_BY_ECOSYSTEM = {
|
|
|
783
839
|
observability: "elixirObservability",
|
|
784
840
|
testing: "elixirTesting",
|
|
785
841
|
codeQuality: "elixirQuality",
|
|
842
|
+
i18n: "elixirI18n",
|
|
843
|
+
runtime: "elixirHttpServer",
|
|
844
|
+
libraries: "elixirApplicationFramework",
|
|
845
|
+
documentation: "elixirDocumentation",
|
|
846
|
+
config: "elixirClustering",
|
|
786
847
|
deploy: "elixirDeploy"
|
|
787
848
|
}
|
|
788
849
|
};
|
|
@@ -868,6 +929,8 @@ const STACK_TOOL_DEFINITIONS = [
|
|
|
868
929
|
}),
|
|
869
930
|
...defineTools(ADDONS_VALUES.filter((value) => FRONTEND_APP_PLATFORM_ADDONS.has(value)), "appPlatform", "typescript", void 0, { allowMultiple: true }),
|
|
870
931
|
...defineTools(ADDONS_VALUES.filter((value) => FRONTEND_DATA_FETCHING_ADDONS.has(value)), "dataFetching", "typescript", void 0, { allowMultiple: true }),
|
|
932
|
+
...defineTools(ADDONS_VALUES.filter((value) => FRONTEND_HTTP_CLIENT_ADDONS.has(value)), "httpClient", "typescript", void 0, { allowMultiple: true }),
|
|
933
|
+
...defineTools(ADDONS_VALUES.filter((value) => FRONTEND_LIBRARY_ADDONS.has(value)), "libraries", "typescript", void 0, { allowMultiple: true }),
|
|
871
934
|
...defineTools(ADDONS_VALUES.filter((value) => FRONTEND_TESTING_ADDONS.has(value)), "testing", "typescript", void 0, { allowMultiple: true }),
|
|
872
935
|
...defineTools(ADDONS_VALUES.filter((value) => WORKSPACE_TOOLING_ADDONS.has(value)), "workspaceTooling", "universal", void 0, {
|
|
873
936
|
allowMultiple: true,
|
|
@@ -954,6 +1017,12 @@ const STACK_TOOL_DEFINITIONS = [
|
|
|
954
1017
|
...defineTools(["meilisearch", "bleve"], "search", "go", "search"),
|
|
955
1018
|
...defineTools(GO_CONFIG_VALUES, "config", "go", "goConfig"),
|
|
956
1019
|
...defineTools(GO_OBSERVABILITY_VALUES, "observability", "go", "goObservability"),
|
|
1020
|
+
...defineTools(GO_VALIDATION_VALUES, "validation", "go", "goValidation"),
|
|
1021
|
+
...defineTools(GO_QUALITY_VALUES, "codeQuality", "go", "goQuality"),
|
|
1022
|
+
...defineTools(GO_MIGRATIONS_VALUES, "migrations", "go", "goMigrations"),
|
|
1023
|
+
...defineTools(GO_TEMPLATING_VALUES, "templating", "go", "goTemplating"),
|
|
1024
|
+
...defineTools(GO_PROTO_TOOLING_VALUES, "buildTool", "go", "goProtoTooling"),
|
|
1025
|
+
...defineTools(GO_DI_VALUES, "libraries", "go", "goDI"),
|
|
957
1026
|
...defineTools(JAVA_WEB_FRAMEWORK_VALUES, "backend", "java", "javaWebFramework"),
|
|
958
1027
|
...defineTools(JAVA_LANGUAGE_VALUES, "language", "java", "javaLanguage"),
|
|
959
1028
|
...defineTools(JAVA_BUILD_TOOL_VALUES, "buildTool", "java", "javaBuildTool"),
|
|
@@ -992,6 +1061,14 @@ const STACK_TOOL_DEFINITIONS = [
|
|
|
992
1061
|
...defineTools(ELIXIR_OBSERVABILITY_VALUES, "observability", "elixir", "elixirObservability"),
|
|
993
1062
|
...defineTools(ELIXIR_TESTING_VALUES, "testing", "elixir", "elixirTesting"),
|
|
994
1063
|
...defineTools(ELIXIR_QUALITY_VALUES, "codeQuality", "elixir", "elixirQuality"),
|
|
1064
|
+
...defineTools(ELIXIR_I18N_VALUES, "i18n", "elixir", "elixirI18n"),
|
|
1065
|
+
...defineTools(ELIXIR_HTTP_SERVER_VALUES, "runtime", "elixir", "elixirHttpServer"),
|
|
1066
|
+
...defineTools(ELIXIR_APPLICATION_FRAMEWORK_VALUES, "libraries", "elixir", "elixirApplicationFramework", {
|
|
1067
|
+
allowMultiple: true,
|
|
1068
|
+
ownerless: true
|
|
1069
|
+
}),
|
|
1070
|
+
...defineTools(ELIXIR_DOCUMENTATION_VALUES, "documentation", "elixir", "elixirDocumentation", { ownerless: true }),
|
|
1071
|
+
...defineTools(ELIXIR_CLUSTERING_VALUES, "config", "elixir", "elixirClustering"),
|
|
995
1072
|
...defineTools(ELIXIR_DEPLOY_VALUES, "deploy", "elixir", "elixirDeploy"),
|
|
996
1073
|
{
|
|
997
1074
|
toolId: "convex",
|
|
@@ -1488,6 +1565,27 @@ function createAddonCompatibilityIssue(part, context) {
|
|
|
1488
1565
|
const backendEcosystem = context.primaryEcosystemsByRole?.backend;
|
|
1489
1566
|
const runtimeTool = context.selectedToolIdsByRole?.runtime ?? "bun";
|
|
1490
1567
|
const apiTool = context.selectedToolIdsByRole?.api;
|
|
1568
|
+
if (part.toolId === "graphql-codegen" && !apiTool?.match(/^(garph|graphql-yoga|apollo-server)$/) && frontendTool !== "redwood") return createStackGraphIssue({
|
|
1569
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
1570
|
+
partId: part.id,
|
|
1571
|
+
role: part.role,
|
|
1572
|
+
toolId: part.toolId,
|
|
1573
|
+
message: "GraphQL Code Generator requires a GraphQL API selection."
|
|
1574
|
+
});
|
|
1575
|
+
if (part.toolId === "openapi-typescript" && apiTool !== "openapi") return createStackGraphIssue({
|
|
1576
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
1577
|
+
partId: part.id,
|
|
1578
|
+
role: part.role,
|
|
1579
|
+
toolId: part.toolId,
|
|
1580
|
+
message: "openapi-typescript requires the OpenAPI API selection."
|
|
1581
|
+
});
|
|
1582
|
+
if (part.toolId === "openapi-typescript" && backendTool === "self") return createStackGraphIssue({
|
|
1583
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
1584
|
+
partId: part.id,
|
|
1585
|
+
role: part.role,
|
|
1586
|
+
toolId: part.toolId,
|
|
1587
|
+
message: "openapi-typescript requires a standalone backend that exposes an OpenAPI schema."
|
|
1588
|
+
});
|
|
1491
1589
|
if (part.role === "appPlatform") {
|
|
1492
1590
|
if (part.toolId === "pwa" && !hasPWACompatibleFrontend(frontendTools)) return createStackGraphIssue({
|
|
1493
1591
|
code: "INCOMPATIBLE_OWNER_TOOL",
|
|
@@ -1503,8 +1601,28 @@ function createAddonCompatibilityIssue(part, context) {
|
|
|
1503
1601
|
toolId: part.toolId,
|
|
1504
1602
|
message: "Tauri requires a compatible web frontend."
|
|
1505
1603
|
});
|
|
1604
|
+
if (["electron", "capacitor"].includes(part.toolId) && ![
|
|
1605
|
+
"tanstack-router",
|
|
1606
|
+
"react-vite",
|
|
1607
|
+
"vanilla-vite",
|
|
1608
|
+
"vue",
|
|
1609
|
+
"solid"
|
|
1610
|
+
].includes(frontendTool ?? "")) return createStackGraphIssue({
|
|
1611
|
+
code: "INCOMPATIBLE_OWNER_TOOL",
|
|
1612
|
+
partId: part.id,
|
|
1613
|
+
role: part.role,
|
|
1614
|
+
toolId: part.toolId,
|
|
1615
|
+
message: `${part.toolId} requires a compatible Vite SPA frontend.`
|
|
1616
|
+
});
|
|
1506
1617
|
}
|
|
1507
1618
|
if (part.role === "dataFetching") {
|
|
1619
|
+
if (part.toolId === "apollo-client" && !apiTool?.match(/^(garph|graphql-yoga|apollo-server)$/)) return createStackGraphIssue({
|
|
1620
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
1621
|
+
partId: part.id,
|
|
1622
|
+
role: part.role,
|
|
1623
|
+
toolId: part.toolId,
|
|
1624
|
+
message: "Apollo Client requires a GraphQL API selection."
|
|
1625
|
+
});
|
|
1508
1626
|
if (part.toolId === "tanstack-query" && apiTool && apiTool !== "none") return createStackGraphIssue({
|
|
1509
1627
|
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
1510
1628
|
partId: part.id,
|
|
@@ -1777,6 +1895,20 @@ function getStackPartCompatibilityIssue(part, context) {
|
|
|
1777
1895
|
if (addonCompatibilityIssue) return addonCompatibilityIssue;
|
|
1778
1896
|
const javaCompatibilityIssue = createJavaCompatibilityIssue(part, context);
|
|
1779
1897
|
if (javaCompatibilityIssue) return javaCompatibilityIssue;
|
|
1898
|
+
if (part.ecosystem === "go" && part.role === "migrations" && part.toolId === "golang-migrate") {
|
|
1899
|
+
const databaseTool = context.primaryToolIdsByRole?.database ?? "none";
|
|
1900
|
+
if (![
|
|
1901
|
+
"sqlite",
|
|
1902
|
+
"postgres",
|
|
1903
|
+
"mysql"
|
|
1904
|
+
].includes(databaseTool)) return createStackGraphIssue({
|
|
1905
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
1906
|
+
partId: part.id,
|
|
1907
|
+
role: part.role,
|
|
1908
|
+
toolId: part.toolId,
|
|
1909
|
+
message: "Go migrations require SQLite, PostgreSQL, or MySQL"
|
|
1910
|
+
});
|
|
1911
|
+
}
|
|
1780
1912
|
if (part.ecosystem === "python" && part.role === "api" && DJANGO_API_TOOLS.has(part.toolId)) {
|
|
1781
1913
|
if (context.ownerToolId !== "django") return createStackGraphIssue({
|
|
1782
1914
|
code: "INCOMPATIBLE_OWNER_TOOL",
|
|
@@ -1860,17 +1992,35 @@ function getStackPartCompatibilityIssue(part, context) {
|
|
|
1860
1992
|
});
|
|
1861
1993
|
}
|
|
1862
1994
|
if (part.ecosystem === "elixir" && ELIXIR_ECTO_SQL_REQUIRED_TOOLS.has(part.toolId) && (!context.ownerRole || context.ownerRole === "backend")) {
|
|
1863
|
-
if ((context.siblingToolIdsByRole?.orm ?? context.selectedToolIdsByRole?.orm) !== "ecto-sql") {
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
message
|
|
1871
|
-
});
|
|
1872
|
-
}
|
|
1995
|
+
if ((context.siblingToolIdsByRole?.orm ?? context.selectedToolIdsByRole?.orm) !== "ecto-sql") return createStackGraphIssue({
|
|
1996
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
1997
|
+
partId: part.id,
|
|
1998
|
+
role: part.role,
|
|
1999
|
+
toolId: part.toolId,
|
|
2000
|
+
message: "Oban requires Ecto SQL with PostgreSQL in the current Phoenix scaffold"
|
|
2001
|
+
});
|
|
1873
2002
|
}
|
|
2003
|
+
if (part.ecosystem === "elixir" && ELIXIR_SQL_REPO_REQUIRED_TOOLS.has(part.toolId) && context.ownerRole === "backend") {
|
|
2004
|
+
const ormTool = context.siblingToolIdsByRole?.orm ?? context.selectedToolIdsByRole?.orm;
|
|
2005
|
+
if (!ormTool || ![
|
|
2006
|
+
"ecto-sql",
|
|
2007
|
+
"myxql",
|
|
2008
|
+
"ecto_sqlite3"
|
|
2009
|
+
].includes(ormTool)) return createStackGraphIssue({
|
|
2010
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
2011
|
+
partId: part.id,
|
|
2012
|
+
role: part.role,
|
|
2013
|
+
toolId: part.toolId,
|
|
2014
|
+
message: part.toolId === "pow" ? "Pow requires Phoenix and an Ecto SQL repository" : part.toolId === "phx-gen-auth" ? "phx.gen.auth requires an Ecto SQL repository" : "ExMachina requires an Ecto SQL repository"
|
|
2015
|
+
});
|
|
2016
|
+
}
|
|
2017
|
+
if (part.ecosystem === "elixir" && part.role === "runtime" && part.toolId === "none" && context.ownerRole === "backend" && context.ownerToolId !== "none") return createStackGraphIssue({
|
|
2018
|
+
code: "INCOMPATIBLE_GRAPH_SELECTION",
|
|
2019
|
+
partId: part.id,
|
|
2020
|
+
role: part.role,
|
|
2021
|
+
toolId: part.toolId,
|
|
2022
|
+
message: "Phoenix requires Bandit or Cowboy"
|
|
2023
|
+
});
|
|
1874
2024
|
if (part.ecosystem === "elixir" && part.toolId === "live-view-streams" && context.ownerRole === "backend") {
|
|
1875
2025
|
if (context.ownerToolId !== "phoenix-live-view") return createStackGraphIssue({
|
|
1876
2026
|
code: "INCOMPATIBLE_OWNER_TOOL",
|
|
@@ -2086,7 +2236,10 @@ function appendUniqueLegacyArrayValue(config, category, value) {
|
|
|
2086
2236
|
}
|
|
2087
2237
|
function getLegacyArrayCategoryForPart(part) {
|
|
2088
2238
|
if (part.role === "examples") return "examples";
|
|
2089
|
-
if (LEGACY_ADDON_GRAPH_ROLES.has(part.role)
|
|
2239
|
+
if (LEGACY_ADDON_GRAPH_ROLES.has(part.role)) {
|
|
2240
|
+
const binding = getAddonStackPartBinding(part.toolId);
|
|
2241
|
+
if (binding && binding.role === part.role && binding.ecosystem === part.ecosystem) return "addons";
|
|
2242
|
+
}
|
|
2090
2243
|
const legacyCategory = findDefinition(part)?.legacyCategory;
|
|
2091
2244
|
if (legacyCategory && LEGACY_ARRAY_CATEGORIES.has(legacyCategory)) return legacyCategory;
|
|
2092
2245
|
}
|
|
@@ -2379,4 +2532,4 @@ function validateStackParts(parts) {
|
|
|
2379
2532
|
|
|
2380
2533
|
//#endregion
|
|
2381
2534
|
export { isBackendUtilsCompatibleBackend as C, requiresChatSdkVercelAIForExamples as E, hasTauriCompatibleFrontend as S, isExampleChatSdkAllowed as T, UI_LIBRARY_COMPATIBILITY as _, getAddonStackPartBinding as a, hasPWACompatibleFrontend as b, getStackPartOptions as c, materializeProvidedStackParts as d, parseStackPartSpecs as f, BACKEND_UTILS_COMPATIBLE_BACKENDS as g, validateStackParts as h, formatStackPartSpec as i, getStackToolDefinitions as l, stackPartsToLegacyProjectConfigPartial as m, STACK_TOOL_DEFINITIONS as n, getRoleTargetPath as o, stackGraphToLegacyProjectConfigForEcosystem as p, createStackPart as r, getStackPartCompatibilityIssueForPart as s, ELIXIR_UNSUPPORTED_GRAPH_TOOLS as t, legacyProjectConfigToStackParts as u, getUnsupportedWebDeployFrontend as v, isExampleAIAllowed as w, hasTanStackAICompatibleFrontend as x, hasDockerComposeCompatibleFrontend as y };
|
|
2382
|
-
//# sourceMappingURL=stack-graph-
|
|
2535
|
+
//# sourceMappingURL=stack-graph-C8r3fTh4.mjs.map
|