@better-fullstack/types 2.0.3 → 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-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-D4iCezUq.mjs} +59 -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-9PxvYAJB.mjs → stack-translation-CAU_sdNI.mjs} +123 -25
- package/dist/stack-translation-CAU_sdNI.mjs.map +1 -0
- 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.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-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",
|
|
@@ -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",
|
|
@@ -2821,6 +2860,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2821
2860
|
if (category === "dbSetup" && optionId !== "none") return "Convex handles database setup";
|
|
2822
2861
|
if (category === "serverDeploy" && optionId !== "none") return "Convex has its own deployment";
|
|
2823
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)";
|
|
2824
2864
|
if (category === "rateLimit" && optionId !== "none") return "Rate limiting requires a standalone backend";
|
|
2825
2865
|
if (category === "fileStorage" && optionId !== "none") return "File storage requires a standalone backend";
|
|
2826
2866
|
if (category === "webFrontend" && optionId === "solid") return "In Better-Fullstack, the Convex backend is currently not available with Solid";
|
|
@@ -2863,6 +2903,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2863
2903
|
if (category === "serverDeploy" && optionId !== "none") return "No backend selected";
|
|
2864
2904
|
if (category === "payments" && optionId !== "none") return "No backend selected";
|
|
2865
2905
|
if (category === "search" && optionId !== "none") return "No backend selected";
|
|
2906
|
+
if (category === "vectorDb" && optionId !== "none") return "No backend selected";
|
|
2866
2907
|
if (category === "rateLimit" && optionId !== "none") return "No backend selected";
|
|
2867
2908
|
if (category === "fileStorage" && optionId !== "none") return "No backend selected";
|
|
2868
2909
|
if (category === "examples" && optionId !== "none") return "No backend selected";
|
|
@@ -2919,6 +2960,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2919
2960
|
}
|
|
2920
2961
|
if (category === "runtime") {
|
|
2921
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.";
|
|
2922
2964
|
if (optionId === "none") {
|
|
2923
2965
|
if (![
|
|
2924
2966
|
"convex",
|
|
@@ -2985,11 +3027,34 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
2985
3027
|
"elysia"
|
|
2986
3028
|
].includes(currentStack.backend)) return "OpenAPI currently supports Hono, Express, Fastify, and Elysia backends";
|
|
2987
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
|
+
}
|
|
2988
3052
|
if (category === "appPlatforms" && optionId === "nx" && currentStack.appPlatforms.includes("turborepo")) return "Choose either Nx or Turborepo, not both";
|
|
2989
3053
|
if (category === "appPlatforms" && optionId === "turborepo" && currentStack.appPlatforms.includes("nx")) return "Choose either Turborepo or Nx, not both";
|
|
2990
3054
|
if (category === "astroIntegration") {
|
|
2991
3055
|
if (!currentStack.webFrontend.includes("astro") && optionId !== "none") return "Astro integration requires Astro frontend";
|
|
2992
|
-
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";
|
|
2993
3058
|
}
|
|
2994
3059
|
if (category === "auth") {
|
|
2995
3060
|
const isBetterAuthOption = optionId === "better-auth" || optionId === "better-auth-organizations";
|
|
@@ -3014,6 +3079,9 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3014
3079
|
if (category === "cms" && optionId === "payload") {
|
|
3015
3080
|
if (!currentStack.webFrontend.includes("next")) return "Payload CMS v3 requires Next.js";
|
|
3016
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
|
+
}
|
|
3017
3085
|
if (category === "email" && optionId !== "none") {
|
|
3018
3086
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
3019
3087
|
if (currentStack.backend === "convex") return "Email integration is not available with Convex backend";
|
|
@@ -3033,6 +3101,9 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3033
3101
|
if (category === "search" && optionId !== "none") {
|
|
3034
3102
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
3035
3103
|
}
|
|
3104
|
+
if (category === "vectorDb" && optionId !== "none") {
|
|
3105
|
+
if (currentStack.ecosystem !== "typescript") return "Vector database is only available for the TypeScript ecosystem";
|
|
3106
|
+
}
|
|
3036
3107
|
if (category === "ai" && requiresChatSdkVercelAI(currentStack) && optionId !== "vercel-ai") return "Chat SDK example (Nuxt/Hono profile) requires Vercel AI SDK in v1";
|
|
3037
3108
|
if (category === "ai" && optionId === "tanstack-ai") {
|
|
3038
3109
|
const compatibleFrontends = [
|
|
@@ -3050,14 +3121,22 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3050
3121
|
if (category === "appPlatforms") {
|
|
3051
3122
|
if (optionId === "pwa" && !hasPWACompatibleFrontend(currentStack.webFrontend)) return "PWA requires TanStack Router, React Router, Solid, Next.js, Vinext, or Astro";
|
|
3052
3123
|
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
|
-
|
|
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`;
|
|
3061
3140
|
}
|
|
3062
3141
|
if (optionId === "backend-utils") {
|
|
3063
3142
|
if (currentStack.ecosystem !== "typescript") return "Backend Utils requires a TypeScript server stack";
|
|
@@ -3225,6 +3304,11 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3225
3304
|
if (optionId === "none" && currentStack.runtime === "workers") return "Workers requires server deployment";
|
|
3226
3305
|
}
|
|
3227
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
|
+
}
|
|
3228
3312
|
if (optionId === "next-intl") {
|
|
3229
3313
|
if (!currentStack.webFrontend.includes("next")) return "next-intl requires Next.js";
|
|
3230
3314
|
}
|
|
@@ -3843,6 +3927,8 @@ const ADDON_COMPATIBILITY = {
|
|
|
3843
3927
|
],
|
|
3844
3928
|
"backend-utils": [],
|
|
3845
3929
|
"docker-compose": [],
|
|
3930
|
+
devcontainer: [],
|
|
3931
|
+
"github-actions": [],
|
|
3846
3932
|
none: []
|
|
3847
3933
|
};
|
|
3848
3934
|
function isWebFrontend(value) {
|
|
@@ -3874,6 +3960,7 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
|
|
|
3874
3960
|
"ts-rest",
|
|
3875
3961
|
"garph",
|
|
3876
3962
|
"graphql-yoga",
|
|
3963
|
+
"apollo-server",
|
|
3877
3964
|
"openapi",
|
|
3878
3965
|
"none"
|
|
3879
3966
|
];
|
|
@@ -3892,7 +3979,7 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
|
|
|
3892
3979
|
"openapi",
|
|
3893
3980
|
"none"
|
|
3894
3981
|
];
|
|
3895
|
-
if (includesAstro && astroIntegration
|
|
3982
|
+
if (includesAstro && astroIntegration !== "react") return [
|
|
3896
3983
|
"orpc",
|
|
3897
3984
|
"graphql-yoga",
|
|
3898
3985
|
"openapi",
|
|
@@ -3904,6 +3991,7 @@ function getReactOnlyApiDisplayName(api) {
|
|
|
3904
3991
|
if (api === "trpc") return "tRPC";
|
|
3905
3992
|
if (api === "ts-rest") return "ts-rest";
|
|
3906
3993
|
if (api === "openapi") return "OpenAPI";
|
|
3994
|
+
if (api === "apollo-server") return "Apollo Server";
|
|
3907
3995
|
return "garph";
|
|
3908
3996
|
}
|
|
3909
3997
|
function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration) {
|
|
@@ -3917,7 +4005,7 @@ function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration)
|
|
|
3917
4005
|
const includesRedwood = frontends.includes("redwood");
|
|
3918
4006
|
const includesFresh = frontends.includes("fresh");
|
|
3919
4007
|
const includesSolidStart = frontends.includes("solid-start");
|
|
3920
|
-
const isReactOnlyApi = api === "trpc" || api === "ts-rest" || api === "garph";
|
|
4008
|
+
const isReactOnlyApi = api === "trpc" || api === "ts-rest" || api === "garph" || api === "apollo-server";
|
|
3921
4009
|
if ((includesNuxt || includesSvelte || includesSolid || includesSolidStart) && isReactOnlyApi) {
|
|
3922
4010
|
const incompatibleFrontend = includesNuxt ? "nuxt" : includesSvelte ? "svelte" : includesSolid ? "solid" : "solid-start";
|
|
3923
4011
|
return {
|
|
@@ -3980,14 +4068,14 @@ function getApiFrontendCompatibilityIssue(api, frontends = [], astroIntegration)
|
|
|
3980
4068
|
},
|
|
3981
4069
|
suggestions: ["Use --api none with Fresh"]
|
|
3982
4070
|
};
|
|
3983
|
-
if (includesAstro && astroIntegration
|
|
4071
|
+
if (includesAstro && astroIntegration !== "react" && isReactOnlyApi) return {
|
|
3984
4072
|
code: "ASTRO_API_REQUIRES_REACT_INTEGRATION",
|
|
3985
4073
|
message: `${getReactOnlyApiDisplayName(api)} API requires React integration with Astro.`,
|
|
3986
4074
|
category: "api",
|
|
3987
4075
|
optionId: api,
|
|
3988
4076
|
provided: {
|
|
3989
4077
|
api,
|
|
3990
|
-
"astro-integration": astroIntegration
|
|
4078
|
+
"astro-integration": astroIntegration ?? "none"
|
|
3991
4079
|
},
|
|
3992
4080
|
suggestions: [
|
|
3993
4081
|
"Use --api orpc (works with all Astro integrations)",
|
|
@@ -4299,6 +4387,7 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
4299
4387
|
shadcnRadius: "default",
|
|
4300
4388
|
cms: "none",
|
|
4301
4389
|
search: "none",
|
|
4390
|
+
vectorDb: "none",
|
|
4302
4391
|
fileStorage: "none",
|
|
4303
4392
|
codeQuality: [],
|
|
4304
4393
|
documentation: [],
|
|
@@ -4307,7 +4396,7 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
4307
4396
|
versionChannel: "stable",
|
|
4308
4397
|
examples: [],
|
|
4309
4398
|
aiSdk: "none",
|
|
4310
|
-
aiDocs: ["claude-md"],
|
|
4399
|
+
aiDocs: ["claude-md", "agents-md"],
|
|
4311
4400
|
git: "true",
|
|
4312
4401
|
install: "true",
|
|
4313
4402
|
api: "trpc",
|
|
@@ -4443,6 +4532,7 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
|
|
|
4443
4532
|
shadcnRadius: "shadcnRadius",
|
|
4444
4533
|
cms: "cms",
|
|
4445
4534
|
search: "search",
|
|
4535
|
+
vectorDb: "vectorDb",
|
|
4446
4536
|
fileStorage: "fileStorage",
|
|
4447
4537
|
codeQuality: "codeQuality",
|
|
4448
4538
|
documentation: "documentation",
|
|
@@ -4599,6 +4689,7 @@ const STACK_SELECTION_URL_KEYS = {
|
|
|
4599
4689
|
shadcnRadius: "scr",
|
|
4600
4690
|
cms: "cms",
|
|
4601
4691
|
search: "srch",
|
|
4692
|
+
vectorDb: "vdb",
|
|
4602
4693
|
fileStorage: "fs",
|
|
4603
4694
|
codeQuality: "cq",
|
|
4604
4695
|
documentation: "doc",
|
|
@@ -4813,6 +4904,7 @@ const CLI_SCALAR_CONFIG_FIELDS = [
|
|
|
4813
4904
|
["rateLimit", "rateLimit"],
|
|
4814
4905
|
["i18n", "i18n"],
|
|
4815
4906
|
["search", "search"],
|
|
4907
|
+
["vectorDb", "vectorDb"],
|
|
4816
4908
|
["fileStorage", "fileStorage"],
|
|
4817
4909
|
["analytics", "analytics"],
|
|
4818
4910
|
["mobileNavigation", "mobileNavigation"],
|
|
@@ -5047,6 +5139,8 @@ const COMMAND_ADDONS = new Set([
|
|
|
5047
5139
|
"turborepo",
|
|
5048
5140
|
"nx",
|
|
5049
5141
|
"docker-compose",
|
|
5142
|
+
"devcontainer",
|
|
5143
|
+
"github-actions",
|
|
5050
5144
|
"ultracite",
|
|
5051
5145
|
"fumadocs",
|
|
5052
5146
|
"oxlint",
|
|
@@ -5149,6 +5243,7 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_SELECTION_KEYS = [
|
|
|
5149
5243
|
["rateLimit", "rateLimit"],
|
|
5150
5244
|
["cms", "cms"],
|
|
5151
5245
|
["search", "search"],
|
|
5246
|
+
["vectorDb", "vectorDb"],
|
|
5152
5247
|
["fileStorage", "fileStorage"]
|
|
5153
5248
|
];
|
|
5154
5249
|
const GRAPH_ELIXIR_BACKEND_PART_SELECTION_KEYS = [
|
|
@@ -5223,6 +5318,7 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_CLI_KEYS = [
|
|
|
5223
5318
|
["rateLimit", "rateLimit"],
|
|
5224
5319
|
["cms", "cms"],
|
|
5225
5320
|
["search", "search"],
|
|
5321
|
+
["vectorDb", "vectorDb"],
|
|
5226
5322
|
["fileStorage", "fileStorage"]
|
|
5227
5323
|
];
|
|
5228
5324
|
const GRAPH_ELIXIR_BACKEND_PART_CLI_KEYS = [
|
|
@@ -5696,6 +5792,7 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
|
|
|
5696
5792
|
rateLimit: stack.rateLimit,
|
|
5697
5793
|
i18n: stack.i18n,
|
|
5698
5794
|
search: stack.search,
|
|
5795
|
+
vectorDb: stack.vectorDb,
|
|
5699
5796
|
fileStorage: stack.fileStorage,
|
|
5700
5797
|
rustWebFramework: stack.rustWebFramework,
|
|
5701
5798
|
rustFrontend: stack.rustFrontend,
|
|
@@ -5900,6 +5997,7 @@ function generateTypeScriptCommand(selection, projectName) {
|
|
|
5900
5997
|
`--rate-limit ${selection.rateLimit}`,
|
|
5901
5998
|
`--i18n ${selection.i18n}`,
|
|
5902
5999
|
`--search ${selection.search}`,
|
|
6000
|
+
`--vector-db ${selection.vectorDb}`,
|
|
5903
6001
|
`--file-storage ${selection.fileStorage}`,
|
|
5904
6002
|
`--cms ${selection.cms}`,
|
|
5905
6003
|
`--effect ${selection.backendLibraries}`,
|
|
@@ -6109,4 +6207,4 @@ function generateStackSelectionCommand(selection) {
|
|
|
6109
6207
|
|
|
6110
6208
|
//#endregion
|
|
6111
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 };
|
|
6112
|
-
//# sourceMappingURL=stack-translation-
|
|
6210
|
+
//# sourceMappingURL=stack-translation-CAU_sdNI.mjs.map
|