@better-fullstack/types 2.0.3 → 2.1.1
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-CGUDVwYW.d.mts → defaults-14rSFqF6.d.mts} +2 -2
- package/dist/defaults-14rSFqF6.d.mts.map +1 -0
- package/dist/{defaults-Cy0_ttEE.mjs → defaults-u9UAambo.mjs} +3 -2
- package/dist/defaults-u9UAambo.mjs.map +1 -0
- package/dist/defaults.d.mts +3 -3
- package/dist/defaults.mjs +1 -1
- package/dist/index.d.mts +6 -6
- package/dist/index.mjs +5 -5
- package/dist/json-schema.d.mts +144 -0
- package/dist/json-schema.d.mts.map +1 -1
- package/dist/json-schema.mjs +1 -1
- package/dist/{schemas-D1fG1cXJ.mjs → schemas-Cg75ZlzB.mjs} +22 -4
- package/dist/schemas-Cg75ZlzB.mjs.map +1 -0
- package/dist/{schemas-DVyeJ5g_.d.mts → schemas-jMCVu0xX.d.mts} +135 -7
- package/dist/schemas-jMCVu0xX.d.mts.map +1 -0
- package/dist/schemas.d.mts +2 -2
- package/dist/schemas.mjs +2 -2
- package/dist/{stack-graph-DxbVgmAd.d.mts → stack-graph-CjobAqsm.d.mts} +2 -2
- package/dist/{stack-graph-DxbVgmAd.d.mts.map → stack-graph-CjobAqsm.d.mts.map} +1 -1
- package/dist/{stack-graph-DIXiAwrZ.mjs → stack-graph-Q0PrewPk.mjs} +116 -49
- package/dist/stack-graph-Q0PrewPk.mjs.map +1 -0
- package/dist/stack-graph.d.mts +3 -3
- package/dist/stack-graph.mjs +2 -2
- package/dist/{stack-translation-DQfT1jwM.d.mts → stack-translation-CjsJzLCX.d.mts} +9 -7
- package/dist/stack-translation-CjsJzLCX.d.mts.map +1 -0
- package/dist/{stack-translation-9PxvYAJB.mjs → stack-translation-gNYPvlYt.mjs} +132 -25
- package/dist/stack-translation-gNYPvlYt.mjs.map +1 -0
- package/dist/stack-translation.d.mts +4 -4
- package/dist/stack-translation.mjs +3 -3
- package/dist/{types-j0tqBnAt.d.mts → types-DwY2BNyU.d.mts} +4 -3
- package/dist/types-DwY2BNyU.d.mts.map +1 -0
- package/dist/types.d.mts +3 -3
- package/package.json +2 -1
- package/dist/defaults-CGUDVwYW.d.mts.map +0 -1
- package/dist/defaults-Cy0_ttEE.mjs.map +0 -1
- package/dist/schemas-D1fG1cXJ.mjs.map +0 -1
- package/dist/schemas-DVyeJ5g_.d.mts.map +0 -1
- package/dist/stack-graph-DIXiAwrZ.mjs.map +0 -1
- package/dist/stack-translation-9PxvYAJB.mjs.map +0 -1
- package/dist/stack-translation-DQfT1jwM.d.mts.map +0 -1
- package/dist/types-j0tqBnAt.d.mts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $n as MOBILE_STORAGE_VALUES, $r as RUST_CLI_VALUES, Ai as SHADCN_BASE_VALUES, An as JAVA_AUTH_VALUES, B as DOTNET_OBSERVABILITY_VALUES, Cr as PYTHON_QUALITY_VALUES, Ct as ELIXIR_WEB_FRAMEWORK_VALUES, D as CMS_VALUES, Di as SEARCH_VALUES, Dr as PYTHON_VALIDATION_VALUES, En as I18N_VALUES, Er as PYTHON_TESTING_VALUES, F as DOTNET_API_VALUES, Fi as SHADCN_STYLE_VALUES, Fn as JAVA_TESTING_LIBRARIES_VALUES, G as DOTNET_WEB_FRAMEWORK_VALUES, H as DOTNET_REALTIME_VALUES, I as DOTNET_AUTH_VALUES, Ii as STATE_MANAGEMENT_VALUES, In as JAVA_WEB_FRAMEWORK_VALUES, Jr as REALTIME_VALUES, Jt as FILE_UPLOAD_VALUES, Kt as FEATURE_FLAGS_VALUES, L as DOTNET_CACHING_VALUES, Ln as JOB_QUEUE_VALUES, M as DATABASE_SETUP_VALUES, Mi as SHADCN_FONT_VALUES, Mn as JAVA_LIBRARIES_VALUES, N as DATABASE_VALUES, Ni as SHADCN_ICON_LIBRARY_VALUES, Nn as JAVA_LOGGING_VALUES, Oi as SERVER_DEPLOY_VALUES, Or as PYTHON_WEB_FRAMEWORK_VALUES, Pi as SHADCN_RADIUS_VALUES, Pn as JAVA_ORM_VALUES, Qi as TESTING_VALUES, Qn as MOBILE_PUSH_VALUES, Qr as RUST_CACHING_VALUES, R as DOTNET_DEPLOY_VALUES, Sr as PYTHON_ORM_VALUES, St as ELIXIR_VALIDATION_VALUES, Tr as PYTHON_TASK_QUEUE_VALUES, U as DOTNET_TESTING_VALUES, V as DOTNET_ORM_VALUES, W as DOTNET_VALIDATION_VALUES, Xn as MOBILE_NAVIGATION_VALUES, Xr as RUST_API_VALUES, Yn as MOBILE_DEEP_LINKING_VALUES, Yr as RUNTIME_VALUES, Yt as FORMS_VALUES, Zn as MOBILE_OTA_VALUES, Zr as RUST_AUTH_VALUES, _r as PYTHON_AUTH_VALUES, _t as ELIXIR_OBSERVABILITY_VALUES, a as ANALYTICS_VALUES, ai as RUST_OBSERVABILITY_VALUES, an as GO_CLI_VALUES, br as PYTHON_GRAPHQL_VALUES, bt as ELIXIR_REALTIME_VALUES, c as API_VALUES, ci as RUST_TEMPLATING_VALUES, cn as GO_MESSAGE_QUEUE_VALUES, ct as ELIXIR_API_VALUES, dn as GO_REALTIME_VALUES, dr as ORM_VALUES, dt as ELIXIR_DEPLOY_VALUES, ei as RUST_ERROR_HANDLING_VALUES, er as MOBILE_TESTING_VALUES, fn as GO_TESTING_VALUES, ft as ELIXIR_EMAIL_VALUES, gr as PYTHON_API_VALUES, gt as ELIXIR_LIBRARIES_VALUES, hr as PYTHON_AI_VALUES, ht as ELIXIR_JSON_VALUES, i as AI_VALUES, ia as
|
|
2
|
-
import { C as isBackendUtilsCompatibleBackend, E as requiresChatSdkVercelAIForExamples, S as hasTauriCompatibleFrontend, _ as UI_LIBRARY_COMPATIBILITY, a as getAddonStackPartBinding, b as hasPWACompatibleFrontend, f as parseStackPartSpecs, h as validateStackParts, i as formatStackPartSpec, m as stackPartsToLegacyProjectConfigPartial, s as getStackPartCompatibilityIssueForPart, u as legacyProjectConfigToStackParts, v as getUnsupportedWebDeployFrontend, x as hasTanStackAICompatibleFrontend, y as hasDockerComposeCompatibleFrontend } from "./stack-graph-
|
|
3
|
-
import { t as createCliDefaultProjectConfigBase } from "./defaults-
|
|
1
|
+
import { $n as MOBILE_STORAGE_VALUES, $r as RUST_CLI_VALUES, Ai as SHADCN_BASE_VALUES, An as JAVA_AUTH_VALUES, B as DOTNET_OBSERVABILITY_VALUES, Cr as PYTHON_QUALITY_VALUES, Ct as ELIXIR_WEB_FRAMEWORK_VALUES, D as CMS_VALUES, Di as SEARCH_VALUES, Dr as PYTHON_VALIDATION_VALUES, En as I18N_VALUES, Er as PYTHON_TESTING_VALUES, F as DOTNET_API_VALUES, Fi as SHADCN_STYLE_VALUES, Fn as JAVA_TESTING_LIBRARIES_VALUES, G as DOTNET_WEB_FRAMEWORK_VALUES, H as DOTNET_REALTIME_VALUES, I as DOTNET_AUTH_VALUES, Ii as STATE_MANAGEMENT_VALUES, In as JAVA_WEB_FRAMEWORK_VALUES, Jr as REALTIME_VALUES, Jt as FILE_UPLOAD_VALUES, Kt as FEATURE_FLAGS_VALUES, L as DOTNET_CACHING_VALUES, Ln as JOB_QUEUE_VALUES, M as DATABASE_SETUP_VALUES, Mi as SHADCN_FONT_VALUES, Mn as JAVA_LIBRARIES_VALUES, N as DATABASE_VALUES, Ni as SHADCN_ICON_LIBRARY_VALUES, Nn as JAVA_LOGGING_VALUES, Oi as SERVER_DEPLOY_VALUES, Or as PYTHON_WEB_FRAMEWORK_VALUES, Pi as SHADCN_RADIUS_VALUES, Pn as JAVA_ORM_VALUES, Qi as TESTING_VALUES, Qn as MOBILE_PUSH_VALUES, Qr as RUST_CACHING_VALUES, R as DOTNET_DEPLOY_VALUES, Sr as PYTHON_ORM_VALUES, St as ELIXIR_VALIDATION_VALUES, Tr as PYTHON_TASK_QUEUE_VALUES, U as DOTNET_TESTING_VALUES, V as DOTNET_ORM_VALUES, W as DOTNET_VALIDATION_VALUES, Xn as MOBILE_NAVIGATION_VALUES, Xr as RUST_API_VALUES, Yn as MOBILE_DEEP_LINKING_VALUES, Yr as RUNTIME_VALUES, Yt as FORMS_VALUES, Zn as MOBILE_OTA_VALUES, Zr as RUST_AUTH_VALUES, _r as PYTHON_AUTH_VALUES, _t as ELIXIR_OBSERVABILITY_VALUES, a as ANALYTICS_VALUES, aa as VERSION_CHANNEL_VALUES, ai as RUST_OBSERVABILITY_VALUES, an as GO_CLI_VALUES, br as PYTHON_GRAPHQL_VALUES, bt as ELIXIR_REALTIME_VALUES, c as API_VALUES, ci as RUST_TEMPLATING_VALUES, cn as GO_MESSAGE_QUEUE_VALUES, ct as ELIXIR_API_VALUES, dn as GO_REALTIME_VALUES, dr as ORM_VALUES, dt as ELIXIR_DEPLOY_VALUES, ei as RUST_ERROR_HANDLING_VALUES, er as MOBILE_TESTING_VALUES, fn as GO_TESTING_VALUES, ft as ELIXIR_EMAIL_VALUES, gr as PYTHON_API_VALUES, gt as ELIXIR_LIBRARIES_VALUES, hr as PYTHON_AI_VALUES, ht as ELIXIR_JSON_VALUES, i as AI_VALUES, ia as VECTOR_DB_VALUES, ii as RUST_MESSAGE_QUEUE_VALUES, in as GO_CACHING_VALUES, ji as SHADCN_COLOR_THEME_VALUES, jn as JAVA_BUILD_TOOL_VALUES, k as CSS_FRAMEWORK_VALUES, ki as SHADCN_BASE_COLOR_VALUES, kn as JAVA_API_VALUES, l as ASTRO_INTEGRATION_VALUES, la as WEB_DEPLOY_VALUES, li as RUST_WEB_FRAMEWORK_VALUES, ln as GO_OBSERVABILITY_VALUES, lr as OBSERVABILITY_VALUES, lt as ELIXIR_AUTH_VALUES, mr as PAYMENTS_VALUES, mt as ELIXIR_JOBS_VALUES, na as UI_LIBRARY_VALUES, ni as RUST_LIBRARIES_VALUES, nn as GO_API_VALUES, o as ANIMATION_VALUES, oi as RUST_ORM_VALUES, on as GO_CONFIG_VALUES, pn as GO_WEB_FRAMEWORK_VALUES, pr as PACKAGE_MANAGER_VALUES, pt as ELIXIR_HTTP_VALUES, qn as LOGGING_VALUES, qr as RATE_LIMIT_VALUES, qt as FILE_STORAGE_VALUES, r as AI_DOCS_VALUES, ra as VALIDATION_VALUES, ri as RUST_LOGGING_VALUES, rn as GO_AUTH_VALUES, si as RUST_REALTIME_VALUES, sn as GO_LOGGING_VALUES, st as EFFECT_VALUES, ti as RUST_FRONTEND_VALUES, tr as MOBILE_UI_VALUES, u as AUTH_VALUES, un as GO_ORM_VALUES, ut as ELIXIR_CACHING_VALUES, vr as PYTHON_CACHING_VALUES, vt as ELIXIR_ORM_VALUES, w as CACHING_VALUES, wr as PYTHON_REALTIME_VALUES, wt as EMAIL_VALUES, xr as PYTHON_OBSERVABILITY_VALUES, xt as ELIXIR_TESTING_VALUES, yr as PYTHON_CLI_VALUES, yt as ELIXIR_QUALITY_VALUES, z as DOTNET_JOB_QUEUE_VALUES } from "./schemas-Cg75ZlzB.mjs";
|
|
2
|
+
import { C as isBackendUtilsCompatibleBackend, E as requiresChatSdkVercelAIForExamples, S as hasTauriCompatibleFrontend, _ as UI_LIBRARY_COMPATIBILITY, a as getAddonStackPartBinding, b as hasPWACompatibleFrontend, f as parseStackPartSpecs, h as validateStackParts, i as formatStackPartSpec, m as stackPartsToLegacyProjectConfigPartial, s as getStackPartCompatibilityIssueForPart, u as legacyProjectConfigToStackParts, v as getUnsupportedWebDeployFrontend, x as hasTanStackAICompatibleFrontend, y as hasDockerComposeCompatibleFrontend } from "./stack-graph-Q0PrewPk.mjs";
|
|
3
|
+
import { t as createCliDefaultProjectConfigBase } from "./defaults-u9UAambo.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/capabilities.ts
|
|
6
6
|
const CAPABILITY_DEFINITIONS = { auth: [
|
|
@@ -264,6 +264,7 @@ const TYPESCRIPT_CATEGORY_ORDER = [
|
|
|
264
264
|
"rateLimit",
|
|
265
265
|
"i18n",
|
|
266
266
|
"search",
|
|
267
|
+
"vectorDb",
|
|
267
268
|
"fileStorage",
|
|
268
269
|
"animation",
|
|
269
270
|
"cms",
|
|
@@ -597,7 +598,9 @@ const APP_PLATFORM_VALUES = [
|
|
|
597
598
|
"tanstack-db",
|
|
598
599
|
"tanstack-pacer",
|
|
599
600
|
"backend-utils",
|
|
600
|
-
"
|
|
601
|
+
"devcontainer",
|
|
602
|
+
"docker-compose",
|
|
603
|
+
"github-actions"
|
|
601
604
|
];
|
|
602
605
|
const EXAMPLE_VALUES = ["ai", "chat-sdk"];
|
|
603
606
|
const BOOLEAN_OPTION_VALUES = ["true", "false"];
|
|
@@ -649,6 +652,7 @@ const CATEGORY_VALUE_IDS = {
|
|
|
649
652
|
rateLimit: RATE_LIMIT_VALUES,
|
|
650
653
|
i18n: I18N_VALUES,
|
|
651
654
|
search: SEARCH_VALUES,
|
|
655
|
+
vectorDb: VECTOR_DB_VALUES,
|
|
652
656
|
fileStorage: FILE_STORAGE_VALUES,
|
|
653
657
|
animation: ANIMATION_VALUES,
|
|
654
658
|
cssFramework: CSS_FRAMEWORK_VALUES,
|
|
@@ -762,6 +766,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
762
766
|
trpc: "tRPC",
|
|
763
767
|
orpc: "oRPC",
|
|
764
768
|
"graphql-yoga": "GraphQL Yoga",
|
|
769
|
+
"apollo-server": "Apollo Server",
|
|
765
770
|
openapi: "OpenAPI"
|
|
766
771
|
},
|
|
767
772
|
webFrontend: {
|
|
@@ -831,7 +836,8 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
831
836
|
},
|
|
832
837
|
cms: {
|
|
833
838
|
tinacms: "TinaCMS",
|
|
834
|
-
directus: "Directus"
|
|
839
|
+
directus: "Directus",
|
|
840
|
+
keystatic: "Keystatic"
|
|
835
841
|
},
|
|
836
842
|
auth: {
|
|
837
843
|
"better-auth-organizations": "Better Auth + Organizations",
|
|
@@ -893,6 +899,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
893
899
|
"trigger-dev": "Trigger.dev"
|
|
894
900
|
},
|
|
895
901
|
i18n: {
|
|
902
|
+
paraglide: "Paraglide",
|
|
896
903
|
i18next: "i18next",
|
|
897
904
|
"next-intl": "next-intl"
|
|
898
905
|
},
|
|
@@ -900,8 +907,15 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
900
907
|
meilisearch: "Meilisearch",
|
|
901
908
|
typesense: "Typesense",
|
|
902
909
|
elasticsearch: "Elasticsearch",
|
|
910
|
+
opensearch: "OpenSearch",
|
|
903
911
|
algolia: "Algolia"
|
|
904
912
|
},
|
|
913
|
+
vectorDb: {
|
|
914
|
+
pgvector: "pgvector",
|
|
915
|
+
qdrant: "Qdrant",
|
|
916
|
+
chroma: "Chroma",
|
|
917
|
+
pinecone: "Pinecone"
|
|
918
|
+
},
|
|
905
919
|
fileStorage: {
|
|
906
920
|
s3: "AWS S3",
|
|
907
921
|
r2: "Cloudflare R2",
|
|
@@ -982,7 +996,9 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
982
996
|
"tanstack-virtual": "TanStack Virtual",
|
|
983
997
|
"tanstack-db": "TanStack DB",
|
|
984
998
|
"tanstack-pacer": "TanStack Pacer",
|
|
985
|
-
|
|
999
|
+
devcontainer: "DevContainer",
|
|
1000
|
+
"docker-compose": "Docker Compose",
|
|
1001
|
+
"github-actions": "GitHub Actions"
|
|
986
1002
|
},
|
|
987
1003
|
versionChannel: {
|
|
988
1004
|
stable: "Stable",
|
|
@@ -1007,7 +1023,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1007
1023
|
},
|
|
1008
1024
|
aiDocs: {
|
|
1009
1025
|
"claude-md": "CLAUDE.md",
|
|
1010
|
-
"agents-md": "
|
|
1026
|
+
"agents-md": "AGENTS.md",
|
|
1011
1027
|
cursorrules: ".cursorrules"
|
|
1012
1028
|
},
|
|
1013
1029
|
git: {
|
|
@@ -1500,6 +1516,7 @@ const OPTION_CATEGORY_METADATA = {
|
|
|
1500
1516
|
rateLimit: buildCategoryMetadata("rateLimit"),
|
|
1501
1517
|
i18n: buildCategoryMetadata("i18n"),
|
|
1502
1518
|
search: buildCategoryMetadata("search"),
|
|
1519
|
+
vectorDb: buildCategoryMetadata("vectorDb"),
|
|
1503
1520
|
fileStorage: buildCategoryMetadata("fileStorage"),
|
|
1504
1521
|
animation: buildCategoryMetadata("animation"),
|
|
1505
1522
|
cssFramework: buildCategoryMetadata("cssFramework"),
|
|
@@ -1628,6 +1645,19 @@ function normalizeOptionId(category, value) {
|
|
|
1628
1645
|
//#endregion
|
|
1629
1646
|
//#region src/compatibility.ts
|
|
1630
1647
|
const DEFAULT_RUNTIME = "bun";
|
|
1648
|
+
const PARAGLIDE_COMPATIBLE_FRONTENDS = new Set([
|
|
1649
|
+
"next",
|
|
1650
|
+
"nuxt",
|
|
1651
|
+
"vinext",
|
|
1652
|
+
"tanstack-router",
|
|
1653
|
+
"tanstack-start",
|
|
1654
|
+
"react-router",
|
|
1655
|
+
"react-vite",
|
|
1656
|
+
"svelte",
|
|
1657
|
+
"solid",
|
|
1658
|
+
"solid-start",
|
|
1659
|
+
"astro"
|
|
1660
|
+
]);
|
|
1631
1661
|
function validateProjectName(name) {
|
|
1632
1662
|
const INVALID_CHARS = [
|
|
1633
1663
|
"<",
|
|
@@ -1670,6 +1700,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
1670
1700
|
changes: []
|
|
1671
1701
|
};
|
|
1672
1702
|
const nextStack = { ...stack };
|
|
1703
|
+
if (nextStack.vectorDb === void 0) nextStack.vectorDb = "none";
|
|
1673
1704
|
let changed = false;
|
|
1674
1705
|
const notes = {};
|
|
1675
1706
|
const changes = [];
|
|
@@ -1686,6 +1717,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
1686
1717
|
dbSetup: "none",
|
|
1687
1718
|
serverDeploy: "none",
|
|
1688
1719
|
search: "none",
|
|
1720
|
+
vectorDb: "none",
|
|
1689
1721
|
rateLimit: "none",
|
|
1690
1722
|
fileStorage: "none"
|
|
1691
1723
|
})) {
|
|
@@ -1753,6 +1785,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
1753
1785
|
serverDeploy: "none",
|
|
1754
1786
|
payments: "none",
|
|
1755
1787
|
search: "none",
|
|
1788
|
+
vectorDb: "none",
|
|
1756
1789
|
rateLimit: "none",
|
|
1757
1790
|
fileStorage: "none"
|
|
1758
1791
|
};
|
|
@@ -2053,7 +2086,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2053
2086
|
"svelte",
|
|
2054
2087
|
"solid",
|
|
2055
2088
|
"solid-start"
|
|
2056
|
-
].includes(f)) && nextStack.api === "trpc") {
|
|
2089
|
+
].includes(f)) && (nextStack.api === "trpc" || nextStack.api === "apollo-server")) {
|
|
2057
2090
|
nextStack.api = "orpc";
|
|
2058
2091
|
changed = true;
|
|
2059
2092
|
changes.push({
|
|
@@ -2061,12 +2094,13 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2061
2094
|
message: "API set to 'oRPC' (required for this frontend)"
|
|
2062
2095
|
});
|
|
2063
2096
|
}
|
|
2064
|
-
if (nextStack.webFrontend.includes("astro") && nextStack.astroIntegration !== "react" && nextStack.api === "trpc") {
|
|
2097
|
+
if (nextStack.webFrontend.includes("astro") && nextStack.astroIntegration !== "react" && (nextStack.api === "trpc" || nextStack.api === "apollo-server")) {
|
|
2098
|
+
const apiName = nextStack.api === "apollo-server" ? "Apollo Server" : "tRPC";
|
|
2065
2099
|
nextStack.api = "orpc";
|
|
2066
2100
|
changed = true;
|
|
2067
2101
|
changes.push({
|
|
2068
2102
|
category: "api",
|
|
2069
|
-
message:
|
|
2103
|
+
message: `API set to 'oRPC' (${apiName} requires React integration with Astro)`
|
|
2070
2104
|
});
|
|
2071
2105
|
}
|
|
2072
2106
|
}
|
|
@@ -2293,6 +2327,11 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2293
2327
|
"none",
|
|
2294
2328
|
"Search set to 'None' (React Native ecosystem)"
|
|
2295
2329
|
],
|
|
2330
|
+
[
|
|
2331
|
+
"vectorDb",
|
|
2332
|
+
"none",
|
|
2333
|
+
"Vector database set to 'None' (React Native ecosystem)"
|
|
2334
|
+
],
|
|
2296
2335
|
[
|
|
2297
2336
|
"rateLimit",
|
|
2298
2337
|
"none",
|
|
@@ -2761,6 +2800,14 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2761
2800
|
message: "Elixir jobs set to 'None' (Oban requires Ecto SQL with PostgreSQL)"
|
|
2762
2801
|
});
|
|
2763
2802
|
}
|
|
2803
|
+
if (nextStack.elixirAuth === "phx-gen-auth" && nextStack.elixirOrm !== "ecto-sql") {
|
|
2804
|
+
nextStack.elixirAuth = "none";
|
|
2805
|
+
changed = true;
|
|
2806
|
+
changes.push({
|
|
2807
|
+
category: "elixirAuth",
|
|
2808
|
+
message: "Elixir auth set to 'None' (phx.gen.auth requires Ecto SQL with PostgreSQL)"
|
|
2809
|
+
});
|
|
2810
|
+
}
|
|
2764
2811
|
}
|
|
2765
2812
|
if (nextStack.webDeploy !== "none" && !nextStack.webFrontend.some((f) => f !== "none")) {
|
|
2766
2813
|
nextStack.webDeploy = "none";
|
|
@@ -2821,6 +2868,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2821
2868
|
if (category === "dbSetup" && optionId !== "none") return "Convex handles database setup";
|
|
2822
2869
|
if (category === "serverDeploy" && optionId !== "none") return "Convex has its own deployment";
|
|
2823
2870
|
if (category === "search" && optionId !== "none") return "Search requires a standalone backend";
|
|
2871
|
+
if (category === "vectorDb" && optionId !== "none") return "Vector database requires a standalone backend (Convex has built-in vector search)";
|
|
2824
2872
|
if (category === "rateLimit" && optionId !== "none") return "Rate limiting requires a standalone backend";
|
|
2825
2873
|
if (category === "fileStorage" && optionId !== "none") return "File storage requires a standalone backend";
|
|
2826
2874
|
if (category === "webFrontend" && optionId === "solid") return "In Better-Fullstack, the Convex backend is currently not available with Solid";
|
|
@@ -2863,6 +2911,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2863
2911
|
if (category === "serverDeploy" && optionId !== "none") return "No backend selected";
|
|
2864
2912
|
if (category === "payments" && optionId !== "none") return "No backend selected";
|
|
2865
2913
|
if (category === "search" && optionId !== "none") return "No backend selected";
|
|
2914
|
+
if (category === "vectorDb" && optionId !== "none") return "No backend selected";
|
|
2866
2915
|
if (category === "rateLimit" && optionId !== "none") return "No backend selected";
|
|
2867
2916
|
if (category === "fileStorage" && optionId !== "none") return "No backend selected";
|
|
2868
2917
|
if (category === "examples" && optionId !== "none") return "No backend selected";
|
|
@@ -2919,6 +2968,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2919
2968
|
}
|
|
2920
2969
|
if (category === "runtime") {
|
|
2921
2970
|
if (optionId === "workers" && currentStack.backend !== "hono") return "In Better-Fullstack, Workers runtime currently requires the Hono backend";
|
|
2971
|
+
if (optionId === "workers" && currentStack.cms === "keystatic" && currentStack.webFrontend.includes("astro") && !currentStack.webFrontend.includes("next")) return "Keystatic's Astro integration is not Astro 7-compatible yet.";
|
|
2922
2972
|
if (optionId === "none") {
|
|
2923
2973
|
if (![
|
|
2924
2974
|
"convex",
|
|
@@ -2985,11 +3035,34 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2985
3035
|
"elysia"
|
|
2986
3036
|
].includes(currentStack.backend)) return "OpenAPI currently supports Hono, Express, Fastify, and Elysia backends";
|
|
2987
3037
|
}
|
|
3038
|
+
if (category === "api" && optionId === "apollo-server") {
|
|
3039
|
+
if (currentStack.webFrontend.some((f) => [
|
|
3040
|
+
"nuxt",
|
|
3041
|
+
"svelte",
|
|
3042
|
+
"solid",
|
|
3043
|
+
"solid-start"
|
|
3044
|
+
].includes(f))) return `${currentStack.webFrontend.find((f) => [
|
|
3045
|
+
"nuxt",
|
|
3046
|
+
"svelte",
|
|
3047
|
+
"solid",
|
|
3048
|
+
"solid-start"
|
|
3049
|
+
].includes(f))} requires oRPC, not Apollo Server`;
|
|
3050
|
+
if (currentStack.webFrontend.includes("astro") && currentStack.astroIntegration !== "react") return "Apollo Server requires React integration with Astro";
|
|
3051
|
+
if (currentStack.backend === "self") return "Apollo Server scaffolding currently requires a standalone TypeScript backend";
|
|
3052
|
+
if (currentStack.nativeFrontend.length > 0) return "Apollo Server is currently available for web frontends, not React Native";
|
|
3053
|
+
if (![
|
|
3054
|
+
"hono",
|
|
3055
|
+
"express",
|
|
3056
|
+
"fastify",
|
|
3057
|
+
"elysia"
|
|
3058
|
+
].includes(currentStack.backend)) return "Apollo Server currently supports Hono, Express, Fastify, and Elysia backends";
|
|
3059
|
+
}
|
|
2988
3060
|
if (category === "appPlatforms" && optionId === "nx" && currentStack.appPlatforms.includes("turborepo")) return "Choose either Nx or Turborepo, not both";
|
|
2989
3061
|
if (category === "appPlatforms" && optionId === "turborepo" && currentStack.appPlatforms.includes("nx")) return "Choose either Turborepo or Nx, not both";
|
|
2990
3062
|
if (category === "astroIntegration") {
|
|
2991
3063
|
if (!currentStack.webFrontend.includes("astro") && optionId !== "none") return "Astro integration requires Astro frontend";
|
|
2992
|
-
if (currentStack.
|
|
3064
|
+
if (currentStack.webFrontend.includes("astro") && currentStack.api === "apollo-server" && optionId !== "react") return "Apollo Server requires React integration with Astro";
|
|
3065
|
+
if (currentStack.webFrontend.includes("astro") && currentStack.api === "trpc" && optionId !== "react" && optionId !== "none") return "tRPC requires React integration with Astro";
|
|
2993
3066
|
}
|
|
2994
3067
|
if (category === "auth") {
|
|
2995
3068
|
const isBetterAuthOption = optionId === "better-auth" || optionId === "better-auth-organizations";
|
|
@@ -3014,6 +3087,9 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3014
3087
|
if (category === "cms" && optionId === "payload") {
|
|
3015
3088
|
if (!currentStack.webFrontend.includes("next")) return "Payload CMS v3 requires Next.js";
|
|
3016
3089
|
}
|
|
3090
|
+
if (category === "cms" && optionId === "keystatic") {
|
|
3091
|
+
if (!currentStack.webFrontend.includes("next")) return "Keystatic is currently scaffolded for Next.js only because @keystatic/astro is not Astro 7-compatible yet.";
|
|
3092
|
+
}
|
|
3017
3093
|
if (category === "email" && optionId !== "none") {
|
|
3018
3094
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
3019
3095
|
if (currentStack.backend === "convex") return "Email integration is not available with Convex backend";
|
|
@@ -3033,6 +3109,9 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3033
3109
|
if (category === "search" && optionId !== "none") {
|
|
3034
3110
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
3035
3111
|
}
|
|
3112
|
+
if (category === "vectorDb" && optionId !== "none") {
|
|
3113
|
+
if (currentStack.ecosystem !== "typescript") return "Vector database is only available for the TypeScript ecosystem";
|
|
3114
|
+
}
|
|
3036
3115
|
if (category === "ai" && requiresChatSdkVercelAI(currentStack) && optionId !== "vercel-ai") return "Chat SDK example (Nuxt/Hono profile) requires Vercel AI SDK in v1";
|
|
3037
3116
|
if (category === "ai" && optionId === "tanstack-ai") {
|
|
3038
3117
|
const compatibleFrontends = [
|
|
@@ -3050,14 +3129,22 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3050
3129
|
if (category === "appPlatforms") {
|
|
3051
3130
|
if (optionId === "pwa" && !hasPWACompatibleFrontend(currentStack.webFrontend)) return "PWA requires TanStack Router, React Router, Solid, Next.js, Vinext, or Astro";
|
|
3052
3131
|
if (optionId === "tauri" && !hasTauriCompatibleFrontend(currentStack.webFrontend)) return "Tauri requires TanStack Router, React Router, Nuxt, Svelte, Solid, Next.js, or Astro";
|
|
3053
|
-
if (optionId === "docker-compose") {
|
|
3054
|
-
|
|
3055
|
-
if (currentStack.
|
|
3056
|
-
if (currentStack.
|
|
3057
|
-
if (
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3132
|
+
if (optionId === "docker-compose" || optionId === "devcontainer") {
|
|
3133
|
+
const title = optionId === "devcontainer" ? "DevContainer" : "Docker Compose";
|
|
3134
|
+
if (currentStack.backend === "convex") return `${title} is not compatible with Convex backend (managed service)`;
|
|
3135
|
+
if (currentStack.runtime === "workers") return `${title} is not compatible with Cloudflare Workers runtime`;
|
|
3136
|
+
if (![
|
|
3137
|
+
"typescript",
|
|
3138
|
+
"python",
|
|
3139
|
+
"go",
|
|
3140
|
+
"rust",
|
|
3141
|
+
"java"
|
|
3142
|
+
].includes(currentStack.ecosystem)) return `${title} currently supports TypeScript, Python, Go, Rust, or Java projects`;
|
|
3143
|
+
if (currentStack.ecosystem === "typescript" && !hasDockerComposeCompatibleFrontend(currentStack.webFrontend)) return `${title} currently supports Next.js, TanStack Router, React Router, React Vite, Solid, or Astro`;
|
|
3144
|
+
if (currentStack.ecosystem === "typescript" && currentStack.backend === "self" && !currentStack.webFrontend.includes("next")) return `${title} self-backend support currently requires Next.js`;
|
|
3145
|
+
if (currentStack.ecosystem === "rust" && currentStack.rustFrontend !== "none") return `${title} for Rust currently supports server-only projects`;
|
|
3146
|
+
if (currentStack.ecosystem === "java" && currentStack.javaWebFramework !== "spring-boot") return `${title} for Java currently requires Spring Boot`;
|
|
3147
|
+
if (currentStack.ecosystem === "python" && currentStack.database !== "none" && currentStack.database !== "sqlite" && currentStack.database !== "postgres") return `${title} for Python ORM projects currently supports SQLite defaults or Postgres`;
|
|
3061
3148
|
}
|
|
3062
3149
|
if (optionId === "backend-utils") {
|
|
3063
3150
|
if (currentStack.ecosystem !== "typescript") return "Backend Utils requires a TypeScript server stack";
|
|
@@ -3225,6 +3312,11 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3225
3312
|
if (optionId === "none" && currentStack.runtime === "workers") return "Workers requires server deployment";
|
|
3226
3313
|
}
|
|
3227
3314
|
if (category === "i18n") {
|
|
3315
|
+
if (optionId !== "none" && !currentStack.webFrontend.some((f) => f !== "none")) return "i18n requires a web frontend";
|
|
3316
|
+
if (optionId === "paraglide") {
|
|
3317
|
+
const unsupportedFrontend = currentStack.webFrontend.find((frontend) => frontend !== "none" && !PARAGLIDE_COMPATIBLE_FRONTENDS.has(frontend));
|
|
3318
|
+
if (unsupportedFrontend) return `Paraglide is not yet wired for the '${unsupportedFrontend}' frontend`;
|
|
3319
|
+
}
|
|
3228
3320
|
if (optionId === "next-intl") {
|
|
3229
3321
|
if (!currentStack.webFrontend.includes("next")) return "next-intl requires Next.js";
|
|
3230
3322
|
}
|
|
@@ -3281,6 +3373,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3281
3373
|
]).has(category) && optionId !== "none") {
|
|
3282
3374
|
if (currentStack.ecosystem !== "elixir") return "Elixir options only apply when the Elixir ecosystem is selected";
|
|
3283
3375
|
}
|
|
3376
|
+
if (category === "elixirTesting" && optionId === "wallaby" && currentStack.ecosystem === "elixir" && currentStack.elixirWebFramework === "none") return "Wallaby browser tests require Phoenix";
|
|
3284
3377
|
if (category === "elixirWebFramework" && optionId !== "none" && currentStack.ecosystem !== "elixir") return "Elixir web frameworks are available only in the Elixir ecosystem";
|
|
3285
3378
|
if (category === "elixirJson" && optionId === "none" && currentStack.ecosystem === "elixir" && currentStack.elixirWebFramework !== "none") return "Phoenix JSON scaffolds require Jason";
|
|
3286
3379
|
return null;
|
|
@@ -3843,6 +3936,8 @@ const ADDON_COMPATIBILITY = {
|
|
|
3843
3936
|
],
|
|
3844
3937
|
"backend-utils": [],
|
|
3845
3938
|
"docker-compose": [],
|
|
3939
|
+
devcontainer: [],
|
|
3940
|
+
"github-actions": [],
|
|
3846
3941
|
none: []
|
|
3847
3942
|
};
|
|
3848
3943
|
function isWebFrontend(value) {
|
|
@@ -3874,6 +3969,7 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
|
|
|
3874
3969
|
"ts-rest",
|
|
3875
3970
|
"garph",
|
|
3876
3971
|
"graphql-yoga",
|
|
3972
|
+
"apollo-server",
|
|
3877
3973
|
"openapi",
|
|
3878
3974
|
"none"
|
|
3879
3975
|
];
|
|
@@ -3892,7 +3988,7 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
|
|
|
3892
3988
|
"openapi",
|
|
3893
3989
|
"none"
|
|
3894
3990
|
];
|
|
3895
|
-
if (includesAstro && astroIntegration
|
|
3991
|
+
if (includesAstro && astroIntegration !== "react") return [
|
|
3896
3992
|
"orpc",
|
|
3897
3993
|
"graphql-yoga",
|
|
3898
3994
|
"openapi",
|
|
@@ -3904,6 +4000,7 @@ function getReactOnlyApiDisplayName(api) {
|
|
|
3904
4000
|
if (api === "trpc") return "tRPC";
|
|
3905
4001
|
if (api === "ts-rest") return "ts-rest";
|
|
3906
4002
|
if (api === "openapi") return "OpenAPI";
|
|
4003
|
+
if (api === "apollo-server") return "Apollo Server";
|
|
3907
4004
|
return "garph";
|
|
3908
4005
|
}
|
|
3909
4006
|
function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration) {
|
|
@@ -3917,7 +4014,7 @@ function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration)
|
|
|
3917
4014
|
const includesRedwood = frontends.includes("redwood");
|
|
3918
4015
|
const includesFresh = frontends.includes("fresh");
|
|
3919
4016
|
const includesSolidStart = frontends.includes("solid-start");
|
|
3920
|
-
const isReactOnlyApi = api === "trpc" || api === "ts-rest" || api === "garph";
|
|
4017
|
+
const isReactOnlyApi = api === "trpc" || api === "ts-rest" || api === "garph" || api === "apollo-server";
|
|
3921
4018
|
if ((includesNuxt || includesSvelte || includesSolid || includesSolidStart) && isReactOnlyApi) {
|
|
3922
4019
|
const incompatibleFrontend = includesNuxt ? "nuxt" : includesSvelte ? "svelte" : includesSolid ? "solid" : "solid-start";
|
|
3923
4020
|
return {
|
|
@@ -3980,14 +4077,14 @@ function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration)
|
|
|
3980
4077
|
},
|
|
3981
4078
|
suggestions: ["Use --api none with Fresh"]
|
|
3982
4079
|
};
|
|
3983
|
-
if (includesAstro && astroIntegration
|
|
4080
|
+
if (includesAstro && astroIntegration !== "react" && isReactOnlyApi) return {
|
|
3984
4081
|
code: "ASTRO_API_REQUIRES_REACT_INTEGRATION",
|
|
3985
4082
|
message: `${getReactOnlyApiDisplayName(api)} API requires React integration with Astro.`,
|
|
3986
4083
|
category: "api",
|
|
3987
4084
|
optionId: api,
|
|
3988
4085
|
provided: {
|
|
3989
4086
|
api,
|
|
3990
|
-
"astro-integration": astroIntegration
|
|
4087
|
+
"astro-integration": astroIntegration ?? "none"
|
|
3991
4088
|
},
|
|
3992
4089
|
suggestions: [
|
|
3993
4090
|
"Use --api orpc (works with all Astro integrations)",
|
|
@@ -4299,6 +4396,7 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
4299
4396
|
shadcnRadius: "default",
|
|
4300
4397
|
cms: "none",
|
|
4301
4398
|
search: "none",
|
|
4399
|
+
vectorDb: "none",
|
|
4302
4400
|
fileStorage: "none",
|
|
4303
4401
|
codeQuality: [],
|
|
4304
4402
|
documentation: [],
|
|
@@ -4307,7 +4405,7 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
4307
4405
|
versionChannel: "stable",
|
|
4308
4406
|
examples: [],
|
|
4309
4407
|
aiSdk: "none",
|
|
4310
|
-
aiDocs: ["claude-md"],
|
|
4408
|
+
aiDocs: ["claude-md", "agents-md"],
|
|
4311
4409
|
git: "true",
|
|
4312
4410
|
install: "true",
|
|
4313
4411
|
api: "trpc",
|
|
@@ -4443,6 +4541,7 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
|
|
|
4443
4541
|
shadcnRadius: "shadcnRadius",
|
|
4444
4542
|
cms: "cms",
|
|
4445
4543
|
search: "search",
|
|
4544
|
+
vectorDb: "vectorDb",
|
|
4446
4545
|
fileStorage: "fileStorage",
|
|
4447
4546
|
codeQuality: "codeQuality",
|
|
4448
4547
|
documentation: "documentation",
|
|
@@ -4599,6 +4698,7 @@ const STACK_SELECTION_URL_KEYS = {
|
|
|
4599
4698
|
shadcnRadius: "scr",
|
|
4600
4699
|
cms: "cms",
|
|
4601
4700
|
search: "srch",
|
|
4701
|
+
vectorDb: "vdb",
|
|
4602
4702
|
fileStorage: "fs",
|
|
4603
4703
|
codeQuality: "cq",
|
|
4604
4704
|
documentation: "doc",
|
|
@@ -4813,6 +4913,7 @@ const CLI_SCALAR_CONFIG_FIELDS = [
|
|
|
4813
4913
|
["rateLimit", "rateLimit"],
|
|
4814
4914
|
["i18n", "i18n"],
|
|
4815
4915
|
["search", "search"],
|
|
4916
|
+
["vectorDb", "vectorDb"],
|
|
4816
4917
|
["fileStorage", "fileStorage"],
|
|
4817
4918
|
["analytics", "analytics"],
|
|
4818
4919
|
["mobileNavigation", "mobileNavigation"],
|
|
@@ -5047,6 +5148,8 @@ const COMMAND_ADDONS = new Set([
|
|
|
5047
5148
|
"turborepo",
|
|
5048
5149
|
"nx",
|
|
5049
5150
|
"docker-compose",
|
|
5151
|
+
"devcontainer",
|
|
5152
|
+
"github-actions",
|
|
5050
5153
|
"ultracite",
|
|
5051
5154
|
"fumadocs",
|
|
5052
5155
|
"oxlint",
|
|
@@ -5149,6 +5252,7 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_SELECTION_KEYS = [
|
|
|
5149
5252
|
["rateLimit", "rateLimit"],
|
|
5150
5253
|
["cms", "cms"],
|
|
5151
5254
|
["search", "search"],
|
|
5255
|
+
["vectorDb", "vectorDb"],
|
|
5152
5256
|
["fileStorage", "fileStorage"]
|
|
5153
5257
|
];
|
|
5154
5258
|
const GRAPH_ELIXIR_BACKEND_PART_SELECTION_KEYS = [
|
|
@@ -5223,6 +5327,7 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_CLI_KEYS = [
|
|
|
5223
5327
|
["rateLimit", "rateLimit"],
|
|
5224
5328
|
["cms", "cms"],
|
|
5225
5329
|
["search", "search"],
|
|
5330
|
+
["vectorDb", "vectorDb"],
|
|
5226
5331
|
["fileStorage", "fileStorage"]
|
|
5227
5332
|
];
|
|
5228
5333
|
const GRAPH_ELIXIR_BACKEND_PART_CLI_KEYS = [
|
|
@@ -5696,6 +5801,7 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
|
|
|
5696
5801
|
rateLimit: stack.rateLimit,
|
|
5697
5802
|
i18n: stack.i18n,
|
|
5698
5803
|
search: stack.search,
|
|
5804
|
+
vectorDb: stack.vectorDb,
|
|
5699
5805
|
fileStorage: stack.fileStorage,
|
|
5700
5806
|
rustWebFramework: stack.rustWebFramework,
|
|
5701
5807
|
rustFrontend: stack.rustFrontend,
|
|
@@ -5900,6 +6006,7 @@ function generateTypeScriptCommand(selection, projectName) {
|
|
|
5900
6006
|
`--rate-limit ${selection.rateLimit}`,
|
|
5901
6007
|
`--i18n ${selection.i18n}`,
|
|
5902
6008
|
`--search ${selection.search}`,
|
|
6009
|
+
`--vector-db ${selection.vectorDb}`,
|
|
5903
6010
|
`--file-storage ${selection.fileStorage}`,
|
|
5904
6011
|
`--cms ${selection.cms}`,
|
|
5905
6012
|
`--effect ${selection.backendLibraries}`,
|
|
@@ -6109,4 +6216,4 @@ function generateStackSelectionCommand(selection) {
|
|
|
6109
6216
|
|
|
6110
6217
|
//#endregion
|
|
6111
6218
|
export { getCategoryDisplayName as $, getCompatibleFormLibraries as A, validateAddonCompatibility as B, allowedApisForFrontends as C, getApiFrontendCompatibilityIssue as D, getAIFrontendCompatibilityIssue as E, isOptionCompatible as F, GO_CATEGORY_ORDER as G, CATEGORY_ORDER as H, isWebFrontend as I, PYTHON_CATEGORY_ORDER as J, JAVA_CATEGORY_ORDER as K, requiresChatSdkVercelAI as L, getDisabledReason as M, hasWebStyling as N, getCompatibleAddons as O, isFrontendAllowedWithBackend as P, getCategoryCliValues as Q, requiresChatSdkVercelAIForSelection as R, usesVirtualNoneStackSelection as S, evaluateCompatibility as T, DOTNET_CATEGORY_ORDER as U, validateProjectName as V, ELIXIR_CATEGORY_ORDER as W, RUST_CATEGORY_ORDER as X, REACT_NATIVE_CATEGORY_ORDER as Y, TYPESCRIPT_CATEGORY_ORDER as Z, parseStackSelectionFromSearch as _, STACK_SELECTION_URL_KEYS as a, getCapabilityDefinitions as at, stackSelectionToCliComparableConfig as b, cloneDefaultStackSelection as c, normalizeCapabilitySelection as ct, isArrayStackSelectionKey as d, getCategoryOptionIds as et, isCliDefaultStackSelection as f, normalizeStackSelectionValue as g, normalizeStackSelection as h, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as i, normalizeOptionId as it, getCompatibleUILibraries as j, getCompatibleCSSFrameworks as k, createStackSelectionSearchParams as l, isStackSelectionDefault as m, NON_OPTION_STACK_SELECTION_KEYS as n, getOptionMetadata as nt, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as o, getCapabilityDisabledReason as ot, isGraphStackSelection as p, OPTION_CATEGORY_METADATA as q, STACK_SELECTION_KEYS as r, isMultiSelectCategory as rt, cliInputToProjectConfigPartial as s, getSupportedCapabilityOptions as st, DEFAULT_STACK_SELECTION as t, getCategoryOrderForEcosystem as tt, generateStackSelectionCommand as u, parseStackSelectionFromUrlRecord as v, analyzeStackCompatibility as w, stackSelectionToProjectConfig as x, processCliArrayOption as y, splitFrontends as z };
|
|
6112
|
-
//# sourceMappingURL=stack-translation-
|
|
6219
|
+
//# sourceMappingURL=stack-translation-gNYPvlYt.mjs.map
|