@better-fullstack/types 2.0.2 → 2.1.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-zyxI-U_5.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 +438 -270
- package/dist/json-schema.d.mts.map +1 -1
- package/dist/json-schema.mjs +1 -1
- package/dist/{schemas-D444b8s8.mjs → schemas-Cg75ZlzB.mjs} +24 -4
- package/dist/schemas-Cg75ZlzB.mjs.map +1 -0
- package/dist/{schemas-BTO7jwoE.d.mts → schemas-jMCVu0xX.d.mts} +422 -275
- 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-DH1m1ONQ.d.mts → stack-graph-CjobAqsm.d.mts} +2 -2
- package/dist/{stack-graph-DH1m1ONQ.d.mts.map → stack-graph-CjobAqsm.d.mts.map} +1 -1
- package/dist/{stack-graph-DXh8F1TL.mjs → stack-graph-D4iCezUq.mjs} +60 -7
- package/dist/stack-graph-D4iCezUq.mjs.map +1 -0
- package/dist/stack-graph.d.mts +3 -3
- package/dist/stack-graph.mjs +2 -2
- package/dist/{stack-translation-Bb3LIDTp.mjs → stack-translation-CAU_sdNI.mjs} +156 -26
- package/dist/stack-translation-CAU_sdNI.mjs.map +1 -0
- package/dist/{stack-translation-LwAKaXg1.d.mts → stack-translation-CjsJzLCX.d.mts} +9 -7
- package/dist/stack-translation-CjsJzLCX.d.mts.map +1 -0
- package/dist/stack-translation.d.mts +4 -4
- package/dist/stack-translation.mjs +3 -3
- package/dist/{types-C4r4ucMM.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-Cy0_ttEE.mjs.map +0 -1
- package/dist/defaults-zyxI-U_5.d.mts.map +0 -1
- package/dist/schemas-BTO7jwoE.d.mts.map +0 -1
- package/dist/schemas-D444b8s8.mjs.map +0 -1
- package/dist/stack-graph-DXh8F1TL.mjs.map +0 -1
- package/dist/stack-translation-Bb3LIDTp.mjs.map +0 -1
- package/dist/stack-translation-LwAKaXg1.d.mts.map +0 -1
- package/dist/types-C4r4ucMM.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-D4iCezUq.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",
|
|
@@ -581,6 +582,7 @@ const CODE_QUALITY_VALUES = [
|
|
|
581
582
|
const DOCUMENTATION_VALUES = ["starlight", "fumadocs"];
|
|
582
583
|
const APP_PLATFORM_VALUES = [
|
|
583
584
|
"turborepo",
|
|
585
|
+
"nx",
|
|
584
586
|
"pwa",
|
|
585
587
|
"tauri",
|
|
586
588
|
"wxt",
|
|
@@ -596,7 +598,9 @@ const APP_PLATFORM_VALUES = [
|
|
|
596
598
|
"tanstack-db",
|
|
597
599
|
"tanstack-pacer",
|
|
598
600
|
"backend-utils",
|
|
599
|
-
"
|
|
601
|
+
"devcontainer",
|
|
602
|
+
"docker-compose",
|
|
603
|
+
"github-actions"
|
|
600
604
|
];
|
|
601
605
|
const EXAMPLE_VALUES = ["ai", "chat-sdk"];
|
|
602
606
|
const BOOLEAN_OPTION_VALUES = ["true", "false"];
|
|
@@ -648,6 +652,7 @@ const CATEGORY_VALUE_IDS = {
|
|
|
648
652
|
rateLimit: RATE_LIMIT_VALUES,
|
|
649
653
|
i18n: I18N_VALUES,
|
|
650
654
|
search: SEARCH_VALUES,
|
|
655
|
+
vectorDb: VECTOR_DB_VALUES,
|
|
651
656
|
fileStorage: FILE_STORAGE_VALUES,
|
|
652
657
|
animation: ANIMATION_VALUES,
|
|
653
658
|
cssFramework: CSS_FRAMEWORK_VALUES,
|
|
@@ -760,7 +765,9 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
760
765
|
api: {
|
|
761
766
|
trpc: "tRPC",
|
|
762
767
|
orpc: "oRPC",
|
|
763
|
-
"graphql-yoga": "GraphQL Yoga"
|
|
768
|
+
"graphql-yoga": "GraphQL Yoga",
|
|
769
|
+
"apollo-server": "Apollo Server",
|
|
770
|
+
openapi: "OpenAPI"
|
|
764
771
|
},
|
|
765
772
|
webFrontend: {
|
|
766
773
|
next: "Next.js",
|
|
@@ -829,7 +836,8 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
829
836
|
},
|
|
830
837
|
cms: {
|
|
831
838
|
tinacms: "TinaCMS",
|
|
832
|
-
directus: "Directus"
|
|
839
|
+
directus: "Directus",
|
|
840
|
+
keystatic: "Keystatic"
|
|
833
841
|
},
|
|
834
842
|
auth: {
|
|
835
843
|
"better-auth-organizations": "Better Auth + Organizations",
|
|
@@ -891,6 +899,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
891
899
|
"trigger-dev": "Trigger.dev"
|
|
892
900
|
},
|
|
893
901
|
i18n: {
|
|
902
|
+
paraglide: "Paraglide",
|
|
894
903
|
i18next: "i18next",
|
|
895
904
|
"next-intl": "next-intl"
|
|
896
905
|
},
|
|
@@ -898,8 +907,15 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
898
907
|
meilisearch: "Meilisearch",
|
|
899
908
|
typesense: "Typesense",
|
|
900
909
|
elasticsearch: "Elasticsearch",
|
|
910
|
+
opensearch: "OpenSearch",
|
|
901
911
|
algolia: "Algolia"
|
|
902
912
|
},
|
|
913
|
+
vectorDb: {
|
|
914
|
+
pgvector: "pgvector",
|
|
915
|
+
qdrant: "Qdrant",
|
|
916
|
+
chroma: "Chroma",
|
|
917
|
+
pinecone: "Pinecone"
|
|
918
|
+
},
|
|
903
919
|
fileStorage: {
|
|
904
920
|
s3: "AWS S3",
|
|
905
921
|
r2: "Cloudflare R2",
|
|
@@ -980,7 +996,9 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
980
996
|
"tanstack-virtual": "TanStack Virtual",
|
|
981
997
|
"tanstack-db": "TanStack DB",
|
|
982
998
|
"tanstack-pacer": "TanStack Pacer",
|
|
983
|
-
|
|
999
|
+
devcontainer: "DevContainer",
|
|
1000
|
+
"docker-compose": "Docker Compose",
|
|
1001
|
+
"github-actions": "GitHub Actions"
|
|
984
1002
|
},
|
|
985
1003
|
versionChannel: {
|
|
986
1004
|
stable: "Stable",
|
|
@@ -1005,7 +1023,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1005
1023
|
},
|
|
1006
1024
|
aiDocs: {
|
|
1007
1025
|
"claude-md": "CLAUDE.md",
|
|
1008
|
-
"agents-md": "
|
|
1026
|
+
"agents-md": "AGENTS.md",
|
|
1009
1027
|
cursorrules: ".cursorrules"
|
|
1010
1028
|
},
|
|
1011
1029
|
git: {
|
|
@@ -1498,6 +1516,7 @@ const OPTION_CATEGORY_METADATA = {
|
|
|
1498
1516
|
rateLimit: buildCategoryMetadata("rateLimit"),
|
|
1499
1517
|
i18n: buildCategoryMetadata("i18n"),
|
|
1500
1518
|
search: buildCategoryMetadata("search"),
|
|
1519
|
+
vectorDb: buildCategoryMetadata("vectorDb"),
|
|
1501
1520
|
fileStorage: buildCategoryMetadata("fileStorage"),
|
|
1502
1521
|
animation: buildCategoryMetadata("animation"),
|
|
1503
1522
|
cssFramework: buildCategoryMetadata("cssFramework"),
|
|
@@ -1626,6 +1645,19 @@ function normalizeOptionId(category, value) {
|
|
|
1626
1645
|
//#endregion
|
|
1627
1646
|
//#region src/compatibility.ts
|
|
1628
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
|
+
]);
|
|
1629
1661
|
function validateProjectName(name) {
|
|
1630
1662
|
const INVALID_CHARS = [
|
|
1631
1663
|
"<",
|
|
@@ -1668,6 +1700,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
1668
1700
|
changes: []
|
|
1669
1701
|
};
|
|
1670
1702
|
const nextStack = { ...stack };
|
|
1703
|
+
if (nextStack.vectorDb === void 0) nextStack.vectorDb = "none";
|
|
1671
1704
|
let changed = false;
|
|
1672
1705
|
const notes = {};
|
|
1673
1706
|
const changes = [];
|
|
@@ -1684,6 +1717,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
1684
1717
|
dbSetup: "none",
|
|
1685
1718
|
serverDeploy: "none",
|
|
1686
1719
|
search: "none",
|
|
1720
|
+
vectorDb: "none",
|
|
1687
1721
|
rateLimit: "none",
|
|
1688
1722
|
fileStorage: "none"
|
|
1689
1723
|
})) {
|
|
@@ -1751,6 +1785,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
1751
1785
|
serverDeploy: "none",
|
|
1752
1786
|
payments: "none",
|
|
1753
1787
|
search: "none",
|
|
1788
|
+
vectorDb: "none",
|
|
1754
1789
|
rateLimit: "none",
|
|
1755
1790
|
fileStorage: "none"
|
|
1756
1791
|
};
|
|
@@ -2051,7 +2086,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2051
2086
|
"svelte",
|
|
2052
2087
|
"solid",
|
|
2053
2088
|
"solid-start"
|
|
2054
|
-
].includes(f)) && nextStack.api === "trpc") {
|
|
2089
|
+
].includes(f)) && (nextStack.api === "trpc" || nextStack.api === "apollo-server")) {
|
|
2055
2090
|
nextStack.api = "orpc";
|
|
2056
2091
|
changed = true;
|
|
2057
2092
|
changes.push({
|
|
@@ -2059,12 +2094,13 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2059
2094
|
message: "API set to 'oRPC' (required for this frontend)"
|
|
2060
2095
|
});
|
|
2061
2096
|
}
|
|
2062
|
-
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";
|
|
2063
2099
|
nextStack.api = "orpc";
|
|
2064
2100
|
changed = true;
|
|
2065
2101
|
changes.push({
|
|
2066
2102
|
category: "api",
|
|
2067
|
-
message:
|
|
2103
|
+
message: `API set to 'oRPC' (${apiName} requires React integration with Astro)`
|
|
2068
2104
|
});
|
|
2069
2105
|
}
|
|
2070
2106
|
}
|
|
@@ -2291,6 +2327,11 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2291
2327
|
"none",
|
|
2292
2328
|
"Search set to 'None' (React Native ecosystem)"
|
|
2293
2329
|
],
|
|
2330
|
+
[
|
|
2331
|
+
"vectorDb",
|
|
2332
|
+
"none",
|
|
2333
|
+
"Vector database set to 'None' (React Native ecosystem)"
|
|
2334
|
+
],
|
|
2294
2335
|
[
|
|
2295
2336
|
"rateLimit",
|
|
2296
2337
|
"none",
|
|
@@ -2819,6 +2860,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2819
2860
|
if (category === "dbSetup" && optionId !== "none") return "Convex handles database setup";
|
|
2820
2861
|
if (category === "serverDeploy" && optionId !== "none") return "Convex has its own deployment";
|
|
2821
2862
|
if (category === "search" && optionId !== "none") return "Search requires a standalone backend";
|
|
2863
|
+
if (category === "vectorDb" && optionId !== "none") return "Vector database requires a standalone backend (Convex has built-in vector search)";
|
|
2822
2864
|
if (category === "rateLimit" && optionId !== "none") return "Rate limiting requires a standalone backend";
|
|
2823
2865
|
if (category === "fileStorage" && optionId !== "none") return "File storage requires a standalone backend";
|
|
2824
2866
|
if (category === "webFrontend" && optionId === "solid") return "In Better-Fullstack, the Convex backend is currently not available with Solid";
|
|
@@ -2861,6 +2903,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2861
2903
|
if (category === "serverDeploy" && optionId !== "none") return "No backend selected";
|
|
2862
2904
|
if (category === "payments" && optionId !== "none") return "No backend selected";
|
|
2863
2905
|
if (category === "search" && optionId !== "none") return "No backend selected";
|
|
2906
|
+
if (category === "vectorDb" && optionId !== "none") return "No backend selected";
|
|
2864
2907
|
if (category === "rateLimit" && optionId !== "none") return "No backend selected";
|
|
2865
2908
|
if (category === "fileStorage" && optionId !== "none") return "No backend selected";
|
|
2866
2909
|
if (category === "examples" && optionId !== "none") return "No backend selected";
|
|
@@ -2917,6 +2960,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2917
2960
|
}
|
|
2918
2961
|
if (category === "runtime") {
|
|
2919
2962
|
if (optionId === "workers" && currentStack.backend !== "hono") return "In Better-Fullstack, Workers runtime currently requires the Hono backend";
|
|
2963
|
+
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.";
|
|
2920
2964
|
if (optionId === "none") {
|
|
2921
2965
|
if (![
|
|
2922
2966
|
"convex",
|
|
@@ -2973,9 +3017,44 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2973
3017
|
].includes(f))} requires oRPC, not tRPC`;
|
|
2974
3018
|
if (currentStack.webFrontend.includes("astro") && currentStack.astroIntegration !== "react" && currentStack.astroIntegration !== "none") return `Astro with ${currentStack.astroIntegration} integration requires oRPC, not tRPC`;
|
|
2975
3019
|
}
|
|
3020
|
+
if (category === "api" && optionId === "openapi") {
|
|
3021
|
+
if (currentStack.backend === "self") return "OpenAPI server scaffolding currently requires a standalone TypeScript backend";
|
|
3022
|
+
if (currentStack.nativeFrontend.length > 0) return "OpenAPI is currently available for web frontends, not React Native";
|
|
3023
|
+
if (![
|
|
3024
|
+
"hono",
|
|
3025
|
+
"express",
|
|
3026
|
+
"fastify",
|
|
3027
|
+
"elysia"
|
|
3028
|
+
].includes(currentStack.backend)) return "OpenAPI currently supports Hono, Express, Fastify, and Elysia backends";
|
|
3029
|
+
}
|
|
3030
|
+
if (category === "api" && optionId === "apollo-server") {
|
|
3031
|
+
if (currentStack.webFrontend.some((f) => [
|
|
3032
|
+
"nuxt",
|
|
3033
|
+
"svelte",
|
|
3034
|
+
"solid",
|
|
3035
|
+
"solid-start"
|
|
3036
|
+
].includes(f))) return `${currentStack.webFrontend.find((f) => [
|
|
3037
|
+
"nuxt",
|
|
3038
|
+
"svelte",
|
|
3039
|
+
"solid",
|
|
3040
|
+
"solid-start"
|
|
3041
|
+
].includes(f))} requires oRPC, not Apollo Server`;
|
|
3042
|
+
if (currentStack.webFrontend.includes("astro") && currentStack.astroIntegration !== "react") return "Apollo Server requires React integration with Astro";
|
|
3043
|
+
if (currentStack.backend === "self") return "Apollo Server scaffolding currently requires a standalone TypeScript backend";
|
|
3044
|
+
if (currentStack.nativeFrontend.length > 0) return "Apollo Server is currently available for web frontends, not React Native";
|
|
3045
|
+
if (![
|
|
3046
|
+
"hono",
|
|
3047
|
+
"express",
|
|
3048
|
+
"fastify",
|
|
3049
|
+
"elysia"
|
|
3050
|
+
].includes(currentStack.backend)) return "Apollo Server currently supports Hono, Express, Fastify, and Elysia backends";
|
|
3051
|
+
}
|
|
3052
|
+
if (category === "appPlatforms" && optionId === "nx" && currentStack.appPlatforms.includes("turborepo")) return "Choose either Nx or Turborepo, not both";
|
|
3053
|
+
if (category === "appPlatforms" && optionId === "turborepo" && currentStack.appPlatforms.includes("nx")) return "Choose either Turborepo or Nx, not both";
|
|
2976
3054
|
if (category === "astroIntegration") {
|
|
2977
3055
|
if (!currentStack.webFrontend.includes("astro") && optionId !== "none") return "Astro integration requires Astro frontend";
|
|
2978
|
-
if (currentStack.
|
|
3056
|
+
if (currentStack.webFrontend.includes("astro") && currentStack.api === "apollo-server" && optionId !== "react") return "Apollo Server requires React integration with Astro";
|
|
3057
|
+
if (currentStack.webFrontend.includes("astro") && currentStack.api === "trpc" && optionId !== "react" && optionId !== "none") return "tRPC requires React integration with Astro";
|
|
2979
3058
|
}
|
|
2980
3059
|
if (category === "auth") {
|
|
2981
3060
|
const isBetterAuthOption = optionId === "better-auth" || optionId === "better-auth-organizations";
|
|
@@ -3000,6 +3079,9 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3000
3079
|
if (category === "cms" && optionId === "payload") {
|
|
3001
3080
|
if (!currentStack.webFrontend.includes("next")) return "Payload CMS v3 requires Next.js";
|
|
3002
3081
|
}
|
|
3082
|
+
if (category === "cms" && optionId === "keystatic") {
|
|
3083
|
+
if (!currentStack.webFrontend.includes("next")) return "Keystatic is currently scaffolded for Next.js only because @keystatic/astro is not Astro 7-compatible yet.";
|
|
3084
|
+
}
|
|
3003
3085
|
if (category === "email" && optionId !== "none") {
|
|
3004
3086
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
3005
3087
|
if (currentStack.backend === "convex") return "Email integration is not available with Convex backend";
|
|
@@ -3019,6 +3101,9 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3019
3101
|
if (category === "search" && optionId !== "none") {
|
|
3020
3102
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
3021
3103
|
}
|
|
3104
|
+
if (category === "vectorDb" && optionId !== "none") {
|
|
3105
|
+
if (currentStack.ecosystem !== "typescript") return "Vector database is only available for the TypeScript ecosystem";
|
|
3106
|
+
}
|
|
3022
3107
|
if (category === "ai" && requiresChatSdkVercelAI(currentStack) && optionId !== "vercel-ai") return "Chat SDK example (Nuxt/Hono profile) requires Vercel AI SDK in v1";
|
|
3023
3108
|
if (category === "ai" && optionId === "tanstack-ai") {
|
|
3024
3109
|
const compatibleFrontends = [
|
|
@@ -3036,14 +3121,22 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3036
3121
|
if (category === "appPlatforms") {
|
|
3037
3122
|
if (optionId === "pwa" && !hasPWACompatibleFrontend(currentStack.webFrontend)) return "PWA requires TanStack Router, React Router, Solid, Next.js, Vinext, or Astro";
|
|
3038
3123
|
if (optionId === "tauri" && !hasTauriCompatibleFrontend(currentStack.webFrontend)) return "Tauri requires TanStack Router, React Router, Nuxt, Svelte, Solid, Next.js, or Astro";
|
|
3039
|
-
if (optionId === "docker-compose") {
|
|
3040
|
-
|
|
3041
|
-
if (currentStack.
|
|
3042
|
-
if (currentStack.
|
|
3043
|
-
if (
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3124
|
+
if (optionId === "docker-compose" || optionId === "devcontainer") {
|
|
3125
|
+
const title = optionId === "devcontainer" ? "DevContainer" : "Docker Compose";
|
|
3126
|
+
if (currentStack.backend === "convex") return `${title} is not compatible with Convex backend (managed service)`;
|
|
3127
|
+
if (currentStack.runtime === "workers") return `${title} is not compatible with Cloudflare Workers runtime`;
|
|
3128
|
+
if (![
|
|
3129
|
+
"typescript",
|
|
3130
|
+
"python",
|
|
3131
|
+
"go",
|
|
3132
|
+
"rust",
|
|
3133
|
+
"java"
|
|
3134
|
+
].includes(currentStack.ecosystem)) return `${title} currently supports TypeScript, Python, Go, Rust, or Java projects`;
|
|
3135
|
+
if (currentStack.ecosystem === "typescript" && !hasDockerComposeCompatibleFrontend(currentStack.webFrontend)) return `${title} currently supports Next.js, TanStack Router, React Router, React Vite, Solid, or Astro`;
|
|
3136
|
+
if (currentStack.ecosystem === "typescript" && currentStack.backend === "self" && !currentStack.webFrontend.includes("next")) return `${title} self-backend support currently requires Next.js`;
|
|
3137
|
+
if (currentStack.ecosystem === "rust" && currentStack.rustFrontend !== "none") return `${title} for Rust currently supports server-only projects`;
|
|
3138
|
+
if (currentStack.ecosystem === "java" && currentStack.javaWebFramework !== "spring-boot") return `${title} for Java currently requires Spring Boot`;
|
|
3139
|
+
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`;
|
|
3047
3140
|
}
|
|
3048
3141
|
if (optionId === "backend-utils") {
|
|
3049
3142
|
if (currentStack.ecosystem !== "typescript") return "Backend Utils requires a TypeScript server stack";
|
|
@@ -3211,6 +3304,11 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3211
3304
|
if (optionId === "none" && currentStack.runtime === "workers") return "Workers requires server deployment";
|
|
3212
3305
|
}
|
|
3213
3306
|
if (category === "i18n") {
|
|
3307
|
+
if (optionId !== "none" && !currentStack.webFrontend.some((f) => f !== "none")) return "i18n requires a web frontend";
|
|
3308
|
+
if (optionId === "paraglide") {
|
|
3309
|
+
const unsupportedFrontend = currentStack.webFrontend.find((frontend) => frontend !== "none" && !PARAGLIDE_COMPATIBLE_FRONTENDS.has(frontend));
|
|
3310
|
+
if (unsupportedFrontend) return `Paraglide is not yet wired for the '${unsupportedFrontend}' frontend`;
|
|
3311
|
+
}
|
|
3214
3312
|
if (optionId === "next-intl") {
|
|
3215
3313
|
if (!currentStack.webFrontend.includes("next")) return "next-intl requires Next.js";
|
|
3216
3314
|
}
|
|
@@ -3728,6 +3826,7 @@ const ADDON_COMPATIBILITY = {
|
|
|
3728
3826
|
husky: [],
|
|
3729
3827
|
lefthook: [],
|
|
3730
3828
|
turborepo: [],
|
|
3829
|
+
nx: [],
|
|
3731
3830
|
starlight: [],
|
|
3732
3831
|
ultracite: [],
|
|
3733
3832
|
ruler: [],
|
|
@@ -3828,6 +3927,8 @@ const ADDON_COMPATIBILITY = {
|
|
|
3828
3927
|
],
|
|
3829
3928
|
"backend-utils": [],
|
|
3830
3929
|
"docker-compose": [],
|
|
3930
|
+
devcontainer: [],
|
|
3931
|
+
"github-actions": [],
|
|
3831
3932
|
none: []
|
|
3832
3933
|
};
|
|
3833
3934
|
function isWebFrontend(value) {
|
|
@@ -3848,12 +3949,26 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
|
|
|
3848
3949
|
const includesAngular = frontends.includes("angular");
|
|
3849
3950
|
const includesRedwood = frontends.includes("redwood");
|
|
3850
3951
|
const includesFresh = frontends.includes("fresh");
|
|
3952
|
+
const includesNative = frontends.some((frontend) => [
|
|
3953
|
+
"native-bare",
|
|
3954
|
+
"native-uniwind",
|
|
3955
|
+
"native-unistyles"
|
|
3956
|
+
].includes(frontend));
|
|
3851
3957
|
const base = [
|
|
3852
3958
|
"trpc",
|
|
3853
3959
|
"orpc",
|
|
3854
3960
|
"ts-rest",
|
|
3855
3961
|
"garph",
|
|
3856
3962
|
"graphql-yoga",
|
|
3963
|
+
"apollo-server",
|
|
3964
|
+
"openapi",
|
|
3965
|
+
"none"
|
|
3966
|
+
];
|
|
3967
|
+
if (includesNative) return [
|
|
3968
|
+
"trpc",
|
|
3969
|
+
"orpc",
|
|
3970
|
+
"ts-rest",
|
|
3971
|
+
"garph",
|
|
3857
3972
|
"none"
|
|
3858
3973
|
];
|
|
3859
3974
|
if (includesQwik || includesAngular || includesRedwood || includesFresh) return ["graphql-yoga", "none"];
|
|
@@ -3861,11 +3976,13 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
|
|
|
3861
3976
|
if (includesNuxt || includesSvelte || includesSolid || includesSolidStartApi) return [
|
|
3862
3977
|
"orpc",
|
|
3863
3978
|
"graphql-yoga",
|
|
3979
|
+
"openapi",
|
|
3864
3980
|
"none"
|
|
3865
3981
|
];
|
|
3866
|
-
if (includesAstro && astroIntegration
|
|
3982
|
+
if (includesAstro && astroIntegration !== "react") return [
|
|
3867
3983
|
"orpc",
|
|
3868
3984
|
"graphql-yoga",
|
|
3985
|
+
"openapi",
|
|
3869
3986
|
"none"
|
|
3870
3987
|
];
|
|
3871
3988
|
return base;
|
|
@@ -3873,6 +3990,8 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
|
|
|
3873
3990
|
function getReactOnlyApiDisplayName(api) {
|
|
3874
3991
|
if (api === "trpc") return "tRPC";
|
|
3875
3992
|
if (api === "ts-rest") return "ts-rest";
|
|
3993
|
+
if (api === "openapi") return "OpenAPI";
|
|
3994
|
+
if (api === "apollo-server") return "Apollo Server";
|
|
3876
3995
|
return "garph";
|
|
3877
3996
|
}
|
|
3878
3997
|
function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration) {
|
|
@@ -3886,7 +4005,7 @@ function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration)
|
|
|
3886
4005
|
const includesRedwood = frontends.includes("redwood");
|
|
3887
4006
|
const includesFresh = frontends.includes("fresh");
|
|
3888
4007
|
const includesSolidStart = frontends.includes("solid-start");
|
|
3889
|
-
const isReactOnlyApi = api === "trpc" || api === "ts-rest" || api === "garph";
|
|
4008
|
+
const isReactOnlyApi = api === "trpc" || api === "ts-rest" || api === "garph" || api === "apollo-server";
|
|
3890
4009
|
if ((includesNuxt || includesSvelte || includesSolid || includesSolidStart) && isReactOnlyApi) {
|
|
3891
4010
|
const incompatibleFrontend = includesNuxt ? "nuxt" : includesSvelte ? "svelte" : includesSolid ? "solid" : "solid-start";
|
|
3892
4011
|
return {
|
|
@@ -3949,14 +4068,14 @@ function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration)
|
|
|
3949
4068
|
},
|
|
3950
4069
|
suggestions: ["Use --api none with Fresh"]
|
|
3951
4070
|
};
|
|
3952
|
-
if (includesAstro && astroIntegration
|
|
4071
|
+
if (includesAstro && astroIntegration !== "react" && isReactOnlyApi) return {
|
|
3953
4072
|
code: "ASTRO_API_REQUIRES_REACT_INTEGRATION",
|
|
3954
4073
|
message: `${getReactOnlyApiDisplayName(api)} API requires React integration with Astro.`,
|
|
3955
4074
|
category: "api",
|
|
3956
4075
|
optionId: api,
|
|
3957
4076
|
provided: {
|
|
3958
4077
|
api,
|
|
3959
|
-
"astro-integration": astroIntegration
|
|
4078
|
+
"astro-integration": astroIntegration ?? "none"
|
|
3960
4079
|
},
|
|
3961
4080
|
suggestions: [
|
|
3962
4081
|
"Use --api orpc (works with all Astro integrations)",
|
|
@@ -4268,6 +4387,7 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
4268
4387
|
shadcnRadius: "default",
|
|
4269
4388
|
cms: "none",
|
|
4270
4389
|
search: "none",
|
|
4390
|
+
vectorDb: "none",
|
|
4271
4391
|
fileStorage: "none",
|
|
4272
4392
|
codeQuality: [],
|
|
4273
4393
|
documentation: [],
|
|
@@ -4276,7 +4396,7 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
4276
4396
|
versionChannel: "stable",
|
|
4277
4397
|
examples: [],
|
|
4278
4398
|
aiSdk: "none",
|
|
4279
|
-
aiDocs: ["claude-md"],
|
|
4399
|
+
aiDocs: ["claude-md", "agents-md"],
|
|
4280
4400
|
git: "true",
|
|
4281
4401
|
install: "true",
|
|
4282
4402
|
api: "trpc",
|
|
@@ -4412,6 +4532,7 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
|
|
|
4412
4532
|
shadcnRadius: "shadcnRadius",
|
|
4413
4533
|
cms: "cms",
|
|
4414
4534
|
search: "search",
|
|
4535
|
+
vectorDb: "vectorDb",
|
|
4415
4536
|
fileStorage: "fileStorage",
|
|
4416
4537
|
codeQuality: "codeQuality",
|
|
4417
4538
|
documentation: "documentation",
|
|
@@ -4568,6 +4689,7 @@ const STACK_SELECTION_URL_KEYS = {
|
|
|
4568
4689
|
shadcnRadius: "scr",
|
|
4569
4690
|
cms: "cms",
|
|
4570
4691
|
search: "srch",
|
|
4692
|
+
vectorDb: "vdb",
|
|
4571
4693
|
fileStorage: "fs",
|
|
4572
4694
|
codeQuality: "cq",
|
|
4573
4695
|
documentation: "doc",
|
|
@@ -4782,6 +4904,7 @@ const CLI_SCALAR_CONFIG_FIELDS = [
|
|
|
4782
4904
|
["rateLimit", "rateLimit"],
|
|
4783
4905
|
["i18n", "i18n"],
|
|
4784
4906
|
["search", "search"],
|
|
4907
|
+
["vectorDb", "vectorDb"],
|
|
4785
4908
|
["fileStorage", "fileStorage"],
|
|
4786
4909
|
["analytics", "analytics"],
|
|
4787
4910
|
["mobileNavigation", "mobileNavigation"],
|
|
@@ -5014,7 +5137,10 @@ const COMMAND_ADDONS = new Set([
|
|
|
5014
5137
|
"lefthook",
|
|
5015
5138
|
"husky",
|
|
5016
5139
|
"turborepo",
|
|
5140
|
+
"nx",
|
|
5017
5141
|
"docker-compose",
|
|
5142
|
+
"devcontainer",
|
|
5143
|
+
"github-actions",
|
|
5018
5144
|
"ultracite",
|
|
5019
5145
|
"fumadocs",
|
|
5020
5146
|
"oxlint",
|
|
@@ -5117,6 +5243,7 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_SELECTION_KEYS = [
|
|
|
5117
5243
|
["rateLimit", "rateLimit"],
|
|
5118
5244
|
["cms", "cms"],
|
|
5119
5245
|
["search", "search"],
|
|
5246
|
+
["vectorDb", "vectorDb"],
|
|
5120
5247
|
["fileStorage", "fileStorage"]
|
|
5121
5248
|
];
|
|
5122
5249
|
const GRAPH_ELIXIR_BACKEND_PART_SELECTION_KEYS = [
|
|
@@ -5191,6 +5318,7 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_CLI_KEYS = [
|
|
|
5191
5318
|
["rateLimit", "rateLimit"],
|
|
5192
5319
|
["cms", "cms"],
|
|
5193
5320
|
["search", "search"],
|
|
5321
|
+
["vectorDb", "vectorDb"],
|
|
5194
5322
|
["fileStorage", "fileStorage"]
|
|
5195
5323
|
];
|
|
5196
5324
|
const GRAPH_ELIXIR_BACKEND_PART_CLI_KEYS = [
|
|
@@ -5664,6 +5792,7 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
|
|
|
5664
5792
|
rateLimit: stack.rateLimit,
|
|
5665
5793
|
i18n: stack.i18n,
|
|
5666
5794
|
search: stack.search,
|
|
5795
|
+
vectorDb: stack.vectorDb,
|
|
5667
5796
|
fileStorage: stack.fileStorage,
|
|
5668
5797
|
rustWebFramework: stack.rustWebFramework,
|
|
5669
5798
|
rustFrontend: stack.rustFrontend,
|
|
@@ -5868,6 +5997,7 @@ function generateTypeScriptCommand(selection, projectName) {
|
|
|
5868
5997
|
`--rate-limit ${selection.rateLimit}`,
|
|
5869
5998
|
`--i18n ${selection.i18n}`,
|
|
5870
5999
|
`--search ${selection.search}`,
|
|
6000
|
+
`--vector-db ${selection.vectorDb}`,
|
|
5871
6001
|
`--file-storage ${selection.fileStorage}`,
|
|
5872
6002
|
`--cms ${selection.cms}`,
|
|
5873
6003
|
`--effect ${selection.backendLibraries}`,
|
|
@@ -6077,4 +6207,4 @@ function generateStackSelectionCommand(selection) {
|
|
|
6077
6207
|
|
|
6078
6208
|
//#endregion
|
|
6079
6209
|
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 };
|
|
6080
|
-
//# sourceMappingURL=stack-translation-
|
|
6210
|
+
//# sourceMappingURL=stack-translation-CAU_sdNI.mjs.map
|