@better-fullstack/types 2.3.1 → 2.4.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/LICENSE +22 -0
- package/dist/{defaults-Cl16mM84.mjs → defaults-BzWJP6p0.mjs} +3 -1
- package/dist/defaults-BzWJP6p0.mjs.map +1 -0
- package/dist/{defaults-BCprHCB6.d.mts → defaults-DdEGPWbd.d.mts} +2 -2
- package/dist/defaults-DdEGPWbd.d.mts.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.d.mts.map +1 -1
- package/dist/index.mjs +23 -5
- package/dist/index.mjs.map +1 -1
- package/dist/json-schema.d.mts +496 -320
- package/dist/json-schema.d.mts.map +1 -1
- package/dist/json-schema.mjs +1 -1
- package/dist/{schemas-B79HRN5e.d.mts → schemas-BMTIauzB.d.mts} +777 -609
- package/dist/schemas-BMTIauzB.d.mts.map +1 -0
- package/dist/{schemas-CprYz5Sh.mjs → schemas-CNrFm0ld.mjs} +21 -2
- package/dist/schemas-CNrFm0ld.mjs.map +1 -0
- package/dist/schemas.d.mts +2 -2
- package/dist/schemas.mjs +2 -2
- package/dist/{stack-graph-DiLi3WuL.mjs → stack-graph-BqmxkJKS.mjs} +110 -9
- package/dist/stack-graph-BqmxkJKS.mjs.map +1 -0
- package/dist/{stack-graph-BkHZlyKH.d.mts → stack-graph-DWpdF4s0.d.mts} +2 -2
- package/dist/{stack-graph-BkHZlyKH.d.mts.map → stack-graph-DWpdF4s0.d.mts.map} +1 -1
- package/dist/stack-graph.d.mts +3 -3
- package/dist/stack-graph.mjs +2 -2
- package/dist/{stack-translation-Ay-_1mNB.mjs → stack-translation-CIt0ziI4.mjs} +234 -9
- package/dist/stack-translation-CIt0ziI4.mjs.map +1 -0
- package/dist/{stack-translation-BmsX82IA.d.mts → stack-translation-DyfJJgeD.d.mts} +18 -7
- package/dist/stack-translation-DyfJJgeD.d.mts.map +1 -0
- package/dist/stack-translation.d.mts +4 -4
- package/dist/stack-translation.mjs +3 -3
- package/dist/{types-BuRzqsRV.d.mts → types-BUQyhJDc.d.mts} +5 -3
- package/dist/types-BUQyhJDc.d.mts.map +1 -0
- package/dist/types.d.mts +3 -3
- package/package.json +3 -2
- package/dist/defaults-BCprHCB6.d.mts.map +0 -1
- package/dist/defaults-Cl16mM84.mjs.map +0 -1
- package/dist/schemas-B79HRN5e.d.mts.map +0 -1
- package/dist/schemas-CprYz5Sh.mjs.map +0 -1
- package/dist/stack-graph-DiLi3WuL.mjs.map +0 -1
- package/dist/stack-translation-Ay-_1mNB.mjs.map +0 -1
- package/dist/stack-translation-BmsX82IA.d.mts.map +0 -1
- package/dist/types-BuRzqsRV.d.mts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $
|
|
2
|
-
import { 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 } from "./stack-graph-
|
|
3
|
-
import { t as createCliDefaultProjectConfigBase } from "./defaults-
|
|
1
|
+
import { $i as RUST_ORM_VALUES, $n as I18N_VALUES, $r as PYTHON_CLOUD_SDK_VALUES, A as CSS_FRAMEWORK_VALUES, An as GO_REALTIME_VALUES, Ar as MOBILE_PUSH_VALUES, At as ELIXIR_TESTING_VALUES, B as DOTNET_JOB_QUEUE_VALUES, Bi as RATE_LIMIT_VALUES, Ca as SHADCN_BASE_VALUES, Cn as GO_LOGGING_VALUES, Ct as ELIXIR_JOBS_VALUES, Da as SHADCN_RADIUS_VALUES, Dn as GO_ORM_VALUES, Dr as MOBILE_LIBRARIES_VALUES, Dt as ELIXIR_ORM_VALUES, Ea as SHADCN_ICON_LIBRARY_VALUES, En as GO_OBSERVABILITY_VALUES, Er as MOBILE_DEEP_LINKING_VALUES, Et as ELIXIR_OBSERVABILITY_VALUES, G as DOTNET_TESTING_VALUES, Ga as TESTING_VALUES, Gi as RUST_CACHING_VALUES, H as DOTNET_OBSERVABILITY_VALUES, Hi as RUNTIME_VALUES, Hr as OBSERVABILITY_VALUES, I as DOTNET_API_VALUES, Ji as RUST_FRONTEND_VALUES, Jr as PYTHON_AI_VALUES, K as DOTNET_VALIDATION_VALUES, Ki as RUST_CLI_VALUES, Kr as PACKAGE_MANAGER_VALUES, L as DOTNET_AUTH_VALUES, Mn as GO_TESTING_VALUES, Mr as MOBILE_TESTING_VALUES, Mt as ELIXIR_WEB_FRAMEWORK_VALUES, N as DATABASE_SETUP_VALUES, Nn as GO_VALIDATION_VALUES, Nr as MOBILE_UI_VALUES, Nt as EMAIL_VALUES, O as CMS_VALUES, Oa as SHADCN_STYLE_VALUES, On as GO_PROTO_TOOLING_VALUES, Or as MOBILE_NAVIGATION_VALUES, Ot as ELIXIR_QUALITY_VALUES, P as DATABASE_VALUES, Pn as GO_WEB_FRAMEWORK_VALUES, Qa as VERSION_CHANNEL_VALUES, Qi as RUST_OBSERVABILITY_VALUES, Qr as PYTHON_CLI_VALUES, R as DOTNET_CACHING_VALUES, Sa as SHADCN_BASE_COLOR_VALUES, Sn as GO_DI_VALUES, St as ELIXIR_I18N_VALUES, T as CACHING_VALUES, Ta as SHADCN_FONT_VALUES, Tn as GO_MIGRATIONS_VALUES, Tt as ELIXIR_LIBRARIES_VALUES, U as DOTNET_ORM_VALUES, Ui as RUST_API_VALUES, V as DOTNET_LIBRARIES_VALUES, Vi as REALTIME_VALUES, W as DOTNET_REALTIME_VALUES, Wi as RUST_AUTH_VALUES, Wr as ORM_VALUES, Xa as VALIDATION_VALUES, Xi as RUST_LOGGING_VALUES, Xr as PYTHON_AUTH_VALUES, Ya as UI_LIBRARY_VALUES, Yi as RUST_LIBRARIES_VALUES, Yr as PYTHON_API_VALUES, Za as VECTOR_DB_VALUES, Zi as RUST_MESSAGE_QUEUE_VALUES, Zr as PYTHON_CACHING_VALUES, _n as GO_API_VALUES, _t as ELIXIR_DEPLOY_VALUES, a as ANALYTICS_VALUES, ai as PYTHON_OBSERVABILITY_VALUES, ar as JAVA_AUTH_VALUES, ba as SEARCH_VALUES, bn as GO_CLI_VALUES, bt as ELIXIR_HTTP_SERVER_VALUES, c as API_VALUES, ci as PYTHON_QUALITY_VALUES, cn as FILE_STORAGE_VALUES, cr as JAVA_LIBRARIES_VALUES, d as AUTH_VALUES, di as PYTHON_TASK_QUEUE_VALUES, dr as JAVA_TESTING_LIBRARIES_VALUES, dt as EFFECT_VALUES, ea as RUST_REALTIME_VALUES, ei as PYTHON_DATA_VALUES, fi as PYTHON_TESTING_VALUES, fr as JAVA_WEB_FRAMEWORK_VALUES, ft as ELIXIR_API_VALUES, gt as ELIXIR_CLUSTERING_VALUES, ht as ELIXIR_CACHING_VALUES, i as AI_VALUES, ii as PYTHON_MESSAGE_QUEUE_VALUES, ir as JAVA_API_VALUES, jn as GO_TEMPLATING_VALUES, jr as MOBILE_STORAGE_VALUES, jt as ELIXIR_VALIDATION_VALUES, ka as STATE_MANAGEMENT_VALUES, kn as GO_QUALITY_VALUES, kr as MOBILE_OTA_VALUES, kt as ELIXIR_REALTIME_VALUES, l as APP_PLATFORM_ADDON_VALUES, li as PYTHON_REALTIME_VALUES, ln as FILE_UPLOAD_VALUES, lr as JAVA_LOGGING_VALUES, lt as ECOMMERCE_VALUES, mi as PYTHON_WEB_FRAMEWORK_VALUES, mt as ELIXIR_AUTH_VALUES, na as RUST_WEB_FRAMEWORK_VALUES, ni as PYTHON_HTTP_CLIENT_VALUES, no as WEB_DEPLOY_VALUES, o as ANIMATION_VALUES, oi as PYTHON_ORM_VALUES, or as JAVA_BUILD_TOOL_VALUES, pi as PYTHON_VALIDATION_VALUES, pr as JOB_QUEUE_VALUES, pt as ELIXIR_APPLICATION_FRAMEWORK_VALUES, q as DOTNET_WEB_FRAMEWORK_VALUES, qi as RUST_ERROR_HANDLING_VALUES, qr as PAYMENTS_VALUES, r as AI_DOCS_VALUES, ri as PYTHON_MEDIA_VALUES, ro as WORKSPACE_SHAPE_VALUES, si as PYTHON_PACKAGE_MANAGER_VALUES, sn as FEATURE_FLAGS_VALUES, sr as JAVA_LANGUAGE_VALUES, ta as RUST_TEMPLATING_VALUES, ti as PYTHON_GRAPHQL_VALUES, tr as INTEGRATIONS_VALUES, u as ASTRO_INTEGRATION_VALUES, ui as PYTHON_SERVER_VALUES, un as FORMS_VALUES, ur as JAVA_ORM_VALUES, vn as GO_AUTH_VALUES, vt as ELIXIR_DOCUMENTATION_VALUES, wa as SHADCN_COLOR_THEME_VALUES, wn as GO_MESSAGE_QUEUE_VALUES, wr as LOGGING_VALUES, wt as ELIXIR_JSON_VALUES, xa as SERVER_DEPLOY_VALUES, xn as GO_CONFIG_VALUES, xt as ELIXIR_HTTP_VALUES, yn as GO_CACHING_VALUES, yt as ELIXIR_EMAIL_VALUES, z as DOTNET_DEPLOY_VALUES } from "./schemas-CNrFm0ld.mjs";
|
|
2
|
+
import { 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 } from "./stack-graph-BqmxkJKS.mjs";
|
|
3
|
+
import { t as createCliDefaultProjectConfigBase } from "./defaults-BzWJP6p0.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/capabilities.ts
|
|
6
6
|
const CAPABILITY_DEFINITIONS = { auth: [
|
|
@@ -274,6 +274,8 @@ const TYPESCRIPT_CATEGORY_ORDER = [
|
|
|
274
274
|
"logging",
|
|
275
275
|
"observability",
|
|
276
276
|
"featureFlags",
|
|
277
|
+
"integrations",
|
|
278
|
+
"ecommerce",
|
|
277
279
|
"analytics",
|
|
278
280
|
"ai",
|
|
279
281
|
"stateManagement",
|
|
@@ -652,6 +654,8 @@ const CODE_QUALITY_VALUES = [
|
|
|
652
654
|
"ultracite",
|
|
653
655
|
"lefthook",
|
|
654
656
|
"husky",
|
|
657
|
+
"knip",
|
|
658
|
+
"gitleaks",
|
|
655
659
|
"ruler"
|
|
656
660
|
];
|
|
657
661
|
const DOCUMENTATION_VALUES = ["starlight", "fumadocs"];
|
|
@@ -672,6 +676,7 @@ const APP_PLATFORM_VALUES = [
|
|
|
672
676
|
"backend-utils",
|
|
673
677
|
"devcontainer",
|
|
674
678
|
"docker-compose",
|
|
679
|
+
"kong",
|
|
675
680
|
"github-actions",
|
|
676
681
|
"axios",
|
|
677
682
|
"firebase",
|
|
@@ -740,6 +745,8 @@ const CATEGORY_VALUE_IDS = {
|
|
|
740
745
|
uiLibrary: UI_LIBRARY_VALUES,
|
|
741
746
|
cms: CMS_VALUES,
|
|
742
747
|
featureFlags: FEATURE_FLAGS_VALUES,
|
|
748
|
+
integrations: INTEGRATIONS_VALUES,
|
|
749
|
+
ecommerce: ECOMMERCE_VALUES,
|
|
743
750
|
analytics: ANALYTICS_VALUES,
|
|
744
751
|
mobileNavigation: MOBILE_NAVIGATION_VALUES,
|
|
745
752
|
mobileUI: MOBILE_UI_VALUES,
|
|
@@ -957,7 +964,8 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
957
964
|
payments: {
|
|
958
965
|
"lemon-squeezy": "Lemon Squeezy",
|
|
959
966
|
dodo: "Dodo Payments",
|
|
960
|
-
paypal: "PayPal"
|
|
967
|
+
paypal: "PayPal",
|
|
968
|
+
xendit: "Xendit"
|
|
961
969
|
},
|
|
962
970
|
email: {
|
|
963
971
|
"react-email": "React Email",
|
|
@@ -971,6 +979,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
971
979
|
},
|
|
972
980
|
observability: {
|
|
973
981
|
opentelemetry: "OpenTelemetry",
|
|
982
|
+
signoz: "SigNoz",
|
|
974
983
|
datadog: "Datadog",
|
|
975
984
|
axiom: "Axiom",
|
|
976
985
|
betterstack: "Better Stack"
|
|
@@ -1065,6 +1074,8 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1065
1074
|
flagsmith: "Flagsmith",
|
|
1066
1075
|
unleash: "Unleash"
|
|
1067
1076
|
},
|
|
1077
|
+
integrations: { nango: "Nango" },
|
|
1078
|
+
ecommerce: { medusa: "MedusaJS" },
|
|
1068
1079
|
analytics: {
|
|
1069
1080
|
plausible: "Plausible",
|
|
1070
1081
|
umami: "Umami",
|
|
@@ -1119,6 +1130,8 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1119
1130
|
ultracite: "Ultracite",
|
|
1120
1131
|
lefthook: "Lefthook",
|
|
1121
1132
|
husky: "Husky",
|
|
1133
|
+
knip: "Knip",
|
|
1134
|
+
gitleaks: "Gitleaks",
|
|
1122
1135
|
ruler: "Ruler"
|
|
1123
1136
|
},
|
|
1124
1137
|
documentation: {
|
|
@@ -1144,6 +1157,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1144
1157
|
"tanstack-pacer": "TanStack Pacer",
|
|
1145
1158
|
devcontainer: "DevContainer",
|
|
1146
1159
|
"docker-compose": "Docker Compose",
|
|
1160
|
+
kong: "Kong Gateway",
|
|
1147
1161
|
"github-actions": "GitHub Actions",
|
|
1148
1162
|
axios: "Axios",
|
|
1149
1163
|
firebase: "Firebase JS SDK",
|
|
@@ -1395,6 +1409,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1395
1409
|
},
|
|
1396
1410
|
pythonObservability: {
|
|
1397
1411
|
opentelemetry: "OpenTelemetry",
|
|
1412
|
+
signoz: "SigNoz",
|
|
1398
1413
|
"prometheus-client": "Prometheus Client"
|
|
1399
1414
|
},
|
|
1400
1415
|
pythonCli: {
|
|
@@ -1484,6 +1499,7 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1484
1499
|
},
|
|
1485
1500
|
goObservability: {
|
|
1486
1501
|
opentelemetry: "OpenTelemetry",
|
|
1502
|
+
signoz: "SigNoz",
|
|
1487
1503
|
prometheus: "Prometheus"
|
|
1488
1504
|
},
|
|
1489
1505
|
goValidation: { validator: "go-playground/validator" },
|
|
@@ -1832,6 +1848,8 @@ const OPTION_CATEGORY_METADATA = {
|
|
|
1832
1848
|
uiLibrary: buildCategoryMetadata("uiLibrary"),
|
|
1833
1849
|
cms: buildCategoryMetadata("cms"),
|
|
1834
1850
|
featureFlags: buildCategoryMetadata("featureFlags"),
|
|
1851
|
+
integrations: buildCategoryMetadata("integrations"),
|
|
1852
|
+
ecommerce: buildCategoryMetadata("ecommerce"),
|
|
1835
1853
|
analytics: buildCategoryMetadata("analytics"),
|
|
1836
1854
|
mobileNavigation: buildCategoryMetadata("mobileNavigation"),
|
|
1837
1855
|
mobileUI: buildCategoryMetadata("mobileUI"),
|
|
@@ -1976,6 +1994,23 @@ function normalizeOptionId(category, value) {
|
|
|
1976
1994
|
|
|
1977
1995
|
//#endregion
|
|
1978
1996
|
//#region src/compatibility.ts
|
|
1997
|
+
const SIGNOZ_SUPPORTED_GO_WEB_FRAMEWORKS = new Set([
|
|
1998
|
+
"gin",
|
|
1999
|
+
"echo",
|
|
2000
|
+
"fiber",
|
|
2001
|
+
"chi",
|
|
2002
|
+
"stdlib"
|
|
2003
|
+
]);
|
|
2004
|
+
const SIGNOZ_SUPPORTED_PYTHON_WEB_FRAMEWORKS = new Set(["fastapi"]);
|
|
2005
|
+
function isSignozSupportedGoWebFramework(framework) {
|
|
2006
|
+
return SIGNOZ_SUPPORTED_GO_WEB_FRAMEWORKS.has(framework);
|
|
2007
|
+
}
|
|
2008
|
+
function hasSignozSupportedGoServerTarget(stack) {
|
|
2009
|
+
return isSignozSupportedGoWebFramework(stack.goWebFramework ?? "none") || (stack.goWebFramework ?? "none") === "none" && (stack.goApi === "grpc-go" || stack.auth === "go-better-auth");
|
|
2010
|
+
}
|
|
2011
|
+
function isSignozSupportedPythonWebFramework(framework) {
|
|
2012
|
+
return SIGNOZ_SUPPORTED_PYTHON_WEB_FRAMEWORKS.has(framework);
|
|
2013
|
+
}
|
|
1979
2014
|
const KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES = new Set([
|
|
1980
2015
|
"testcontainers",
|
|
1981
2016
|
"rest-assured",
|
|
@@ -2071,6 +2106,20 @@ const requiresChatSdkVercelAI = (stack) => {
|
|
|
2071
2106
|
* Nuxt is intentionally excluded from the MVP (different alias convention).
|
|
2072
2107
|
*/
|
|
2073
2108
|
const SINGLE_APP_SELF_BACKENDS = new Set(["self-next", "self-tanstack-start"]);
|
|
2109
|
+
const SINGLE_APP_CONTAINER_ADDONS = new Set([
|
|
2110
|
+
"docker-compose",
|
|
2111
|
+
"devcontainer",
|
|
2112
|
+
"kong"
|
|
2113
|
+
]);
|
|
2114
|
+
const FULLSTACK_SELF_BACKENDS = new Set([
|
|
2115
|
+
"self-next",
|
|
2116
|
+
"self-vinext",
|
|
2117
|
+
"self-tanstack-start",
|
|
2118
|
+
"self-astro",
|
|
2119
|
+
"self-nuxt",
|
|
2120
|
+
"self-svelte",
|
|
2121
|
+
"self-solid-start"
|
|
2122
|
+
]);
|
|
2074
2123
|
const SINGLE_APP_WEB_FRONTEND_BY_BACKEND = {
|
|
2075
2124
|
"self-next": "next",
|
|
2076
2125
|
"self-tanstack-start": "tanstack-start"
|
|
@@ -2085,6 +2134,7 @@ const SINGLE_APP_WEB_FRONTEND_BY_BACKEND = {
|
|
|
2085
2134
|
*/
|
|
2086
2135
|
function stackQualifiesForSingleApp(stack) {
|
|
2087
2136
|
if (!SINGLE_APP_SELF_BACKENDS.has(stack.backend)) return false;
|
|
2137
|
+
if ((stack.appPlatforms ?? []).some((addon) => SINGLE_APP_CONTAINER_ADDONS.has(addon))) return false;
|
|
2088
2138
|
if ((stack.nativeFrontend ?? []).filter((f) => f && f !== "none").length > 0) return false;
|
|
2089
2139
|
const webFrontends = (stack.webFrontend ?? []).filter((f) => f && f !== "none");
|
|
2090
2140
|
if (webFrontends.length !== 1) return false;
|
|
@@ -2109,6 +2159,8 @@ function stackQualifiesForSingleApp(stack) {
|
|
|
2109
2159
|
stack.aiSdk,
|
|
2110
2160
|
stack.analytics,
|
|
2111
2161
|
stack.featureFlags,
|
|
2162
|
+
stack.integrations,
|
|
2163
|
+
stack.ecommerce,
|
|
2112
2164
|
stack.observability,
|
|
2113
2165
|
stack.logging,
|
|
2114
2166
|
stack.webDeploy,
|
|
@@ -2117,6 +2169,7 @@ function stackQualifiesForSingleApp(stack) {
|
|
|
2117
2169
|
if ((stack.examples ?? []).filter((e) => e && e !== "none").length > 0) return false;
|
|
2118
2170
|
return true;
|
|
2119
2171
|
}
|
|
2172
|
+
const usesCloudflareFullstackRuntime = (stack) => stack.webDeploy === "cloudflare" && FULLSTACK_SELF_BACKENDS.has(stack.backend);
|
|
2120
2173
|
const analyzeStackCompatibility = (stack) => {
|
|
2121
2174
|
if (stack.yolo === "true") return {
|
|
2122
2175
|
adjustedStack: null,
|
|
@@ -2125,9 +2178,55 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2125
2178
|
};
|
|
2126
2179
|
const nextStack = { ...stack };
|
|
2127
2180
|
if (nextStack.vectorDb === void 0) nextStack.vectorDb = "none";
|
|
2181
|
+
if (nextStack.integrations === void 0) nextStack.integrations = "none";
|
|
2182
|
+
if (nextStack.ecommerce === void 0) nextStack.ecommerce = "none";
|
|
2128
2183
|
let changed = false;
|
|
2129
2184
|
const notes = {};
|
|
2130
2185
|
const changes = [];
|
|
2186
|
+
if (nextStack.observability === "signoz" && (nextStack.backend === "none" || nextStack.backend === "convex")) {
|
|
2187
|
+
nextStack.observability = "none";
|
|
2188
|
+
changed = true;
|
|
2189
|
+
changes.push({
|
|
2190
|
+
category: "observability",
|
|
2191
|
+
message: "Observability set to 'None' (SigNoz tracing requires a generated server target)"
|
|
2192
|
+
});
|
|
2193
|
+
}
|
|
2194
|
+
if (nextStack.observability === "signoz" && (nextStack.backend === "self-tanstack-start" || nextStack.backend === "self-astro")) {
|
|
2195
|
+
nextStack.observability = "none";
|
|
2196
|
+
changed = true;
|
|
2197
|
+
changes.push({
|
|
2198
|
+
category: "observability",
|
|
2199
|
+
message: "Observability set to 'None' (SigNoz tracing is not yet bootstrapped for this fullstack frontend)"
|
|
2200
|
+
});
|
|
2201
|
+
}
|
|
2202
|
+
if (nextStack.observability === "signoz" && nextStack.webDeploy === "cloudflare" && (nextStack.backend === "self" || nextStack.backend.startsWith("self-"))) {
|
|
2203
|
+
nextStack.observability = "none";
|
|
2204
|
+
changed = true;
|
|
2205
|
+
changes.push({
|
|
2206
|
+
category: "observability",
|
|
2207
|
+
message: "Observability set to 'None' (SigNoz's Node SDK is incompatible with Cloudflare-hosted fullstack apps)"
|
|
2208
|
+
});
|
|
2209
|
+
}
|
|
2210
|
+
if (nextStack.ecosystem !== "typescript" && nextStack.ecosystem !== "react-native" && nextStack.codeQuality.includes("knip")) {
|
|
2211
|
+
nextStack.codeQuality = nextStack.codeQuality.filter((addon) => addon !== "knip");
|
|
2212
|
+
changed = true;
|
|
2213
|
+
changes.push({
|
|
2214
|
+
category: "codeQuality",
|
|
2215
|
+
message: "Removed Knip (Knip requires a TypeScript or React Native workspace)"
|
|
2216
|
+
});
|
|
2217
|
+
}
|
|
2218
|
+
if (nextStack.ecosystem === "react-native") {
|
|
2219
|
+
const supportedCodeQuality = new Set(["knip", "gitleaks"]);
|
|
2220
|
+
const filteredCodeQuality = nextStack.codeQuality.filter((addon) => supportedCodeQuality.has(addon));
|
|
2221
|
+
if (filteredCodeQuality.length !== nextStack.codeQuality.length) {
|
|
2222
|
+
nextStack.codeQuality = filteredCodeQuality;
|
|
2223
|
+
changed = true;
|
|
2224
|
+
changes.push({
|
|
2225
|
+
category: "codeQuality",
|
|
2226
|
+
message: "Removed code-quality tools that are not supported by React Native projects"
|
|
2227
|
+
});
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2131
2230
|
for (const cat of CATEGORY_ORDER) notes[cat] = {
|
|
2132
2231
|
notes: [],
|
|
2133
2232
|
hasIssue: false
|
|
@@ -2143,7 +2242,9 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2143
2242
|
search: "none",
|
|
2144
2243
|
vectorDb: "none",
|
|
2145
2244
|
rateLimit: "none",
|
|
2146
|
-
fileStorage: "none"
|
|
2245
|
+
fileStorage: "none",
|
|
2246
|
+
integrations: "none",
|
|
2247
|
+
ecommerce: "none"
|
|
2147
2248
|
})) {
|
|
2148
2249
|
const catKey = key;
|
|
2149
2250
|
if (nextStack[catKey] !== value) {
|
|
@@ -2211,7 +2312,9 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2211
2312
|
search: "none",
|
|
2212
2313
|
vectorDb: "none",
|
|
2213
2314
|
rateLimit: "none",
|
|
2214
|
-
fileStorage: "none"
|
|
2315
|
+
fileStorage: "none",
|
|
2316
|
+
integrations: "none",
|
|
2317
|
+
ecommerce: "none"
|
|
2215
2318
|
};
|
|
2216
2319
|
if (nextStack.ecosystem !== "go") noneOverrides.auth = "none";
|
|
2217
2320
|
for (const [key, value] of Object.entries(noneOverrides)) {
|
|
@@ -2343,6 +2446,14 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2343
2446
|
message: "Backend set to 'Hono' (required for Workers)"
|
|
2344
2447
|
});
|
|
2345
2448
|
}
|
|
2449
|
+
if (nextStack.runtime === "workers" && nextStack.observability === "signoz") {
|
|
2450
|
+
nextStack.observability = "none";
|
|
2451
|
+
changed = true;
|
|
2452
|
+
changes.push({
|
|
2453
|
+
category: "observability",
|
|
2454
|
+
message: "Observability set to 'None' (SigNoz requires the Node.js or Bun runtime)"
|
|
2455
|
+
});
|
|
2456
|
+
}
|
|
2346
2457
|
if (nextStack.runtime === "workers" && nextStack.serverDeploy === "none") {
|
|
2347
2458
|
nextStack.serverDeploy = "cloudflare";
|
|
2348
2459
|
changed = true;
|
|
@@ -2361,6 +2472,14 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2361
2472
|
message: "Database changed to SQLite with D1 (Better-Fullstack doesn't support MongoDB with Workers)"
|
|
2362
2473
|
});
|
|
2363
2474
|
}
|
|
2475
|
+
if ((nextStack.runtime === "workers" || usesCloudflareFullstackRuntime(nextStack)) && nextStack.integrations !== "none") {
|
|
2476
|
+
nextStack.integrations = "none";
|
|
2477
|
+
changed = true;
|
|
2478
|
+
changes.push({
|
|
2479
|
+
category: "integrations",
|
|
2480
|
+
message: "Integrations set to 'none' (Nango's Node SDK is not available on Cloudflare Workers)"
|
|
2481
|
+
});
|
|
2482
|
+
}
|
|
2364
2483
|
if (nextStack.runtime === "none" && nextStack.backend !== "convex" && nextStack.backend !== "none" && nextStack.backend !== "self-next" && nextStack.backend !== "self-vinext" && nextStack.backend !== "self-tanstack-start" && nextStack.backend !== "self-astro" && nextStack.backend !== "self-nuxt" && nextStack.backend !== "self-svelte" && nextStack.backend !== "self-solid-start") {
|
|
2365
2484
|
nextStack.runtime = DEFAULT_RUNTIME;
|
|
2366
2485
|
changed = true;
|
|
@@ -2683,6 +2802,14 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2683
2802
|
});
|
|
2684
2803
|
}
|
|
2685
2804
|
}
|
|
2805
|
+
if (nextStack.payments === "xendit" && ["none", "convex"].includes(nextStack.backend)) {
|
|
2806
|
+
nextStack.payments = "none";
|
|
2807
|
+
changed = true;
|
|
2808
|
+
changes.push({
|
|
2809
|
+
category: "payments",
|
|
2810
|
+
message: "Payments set to 'None' (Xendit Payment Sessions require a server backend)"
|
|
2811
|
+
});
|
|
2812
|
+
}
|
|
2686
2813
|
if (["openai-sdk", "anthropic-sdk"].includes(nextStack.aiSdk) && ["none", "convex"].includes(nextStack.backend)) {
|
|
2687
2814
|
nextStack.aiSdk = "none";
|
|
2688
2815
|
changed = true;
|
|
@@ -2873,6 +3000,16 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2873
3000
|
"none",
|
|
2874
3001
|
"Feature flags set to 'None' (React Native ecosystem)"
|
|
2875
3002
|
],
|
|
3003
|
+
[
|
|
3004
|
+
"ecommerce",
|
|
3005
|
+
"none",
|
|
3006
|
+
"E-commerce set to 'None' (React Native ecosystem)"
|
|
3007
|
+
],
|
|
3008
|
+
[
|
|
3009
|
+
"integrations",
|
|
3010
|
+
"none",
|
|
3011
|
+
"Integrations set to 'None' (React Native ecosystem)"
|
|
3012
|
+
],
|
|
2876
3013
|
[
|
|
2877
3014
|
"analytics",
|
|
2878
3015
|
"none",
|
|
@@ -3137,6 +3274,22 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3137
3274
|
message: `${platform === "electron" ? "Electron" : "Capacitor"} removed (requires compatible frontend)`
|
|
3138
3275
|
});
|
|
3139
3276
|
}
|
|
3277
|
+
for (const platform of [
|
|
3278
|
+
"docker-compose",
|
|
3279
|
+
"devcontainer",
|
|
3280
|
+
"kong"
|
|
3281
|
+
]) {
|
|
3282
|
+
if (!nextStack.appPlatforms.includes(platform)) continue;
|
|
3283
|
+
const reason = getDisabledReason(nextStack, "appPlatforms", platform);
|
|
3284
|
+
if (!reason) continue;
|
|
3285
|
+
nextStack.appPlatforms = nextStack.appPlatforms.filter((addon) => addon !== platform);
|
|
3286
|
+
changed = true;
|
|
3287
|
+
const label = platform === "docker-compose" ? "Docker Compose" : platform === "devcontainer" ? "DevContainer" : "Kong Gateway";
|
|
3288
|
+
changes.push({
|
|
3289
|
+
category: "appPlatforms",
|
|
3290
|
+
message: `${label} removed (${reason})`
|
|
3291
|
+
});
|
|
3292
|
+
}
|
|
3140
3293
|
if (nextStack.appPlatforms.includes("graphql-codegen") && ![
|
|
3141
3294
|
"garph",
|
|
3142
3295
|
"graphql-yoga",
|
|
@@ -3255,6 +3408,14 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3255
3408
|
}
|
|
3256
3409
|
}
|
|
3257
3410
|
if (nextStack.ecosystem === "python") {
|
|
3411
|
+
if (nextStack.pythonObservability === "signoz" && !isSignozSupportedPythonWebFramework(nextStack.pythonWebFramework)) {
|
|
3412
|
+
nextStack.pythonObservability = "none";
|
|
3413
|
+
changed = true;
|
|
3414
|
+
changes.push({
|
|
3415
|
+
category: "pythonObservability",
|
|
3416
|
+
message: "Python observability set to 'None' (SigNoz request tracing is wired for FastAPI)"
|
|
3417
|
+
});
|
|
3418
|
+
}
|
|
3258
3419
|
if (nextStack.pythonWebFramework !== "django" && nextStack.pythonApi !== "none") {
|
|
3259
3420
|
nextStack.pythonApi = "none";
|
|
3260
3421
|
changed = true;
|
|
@@ -3320,6 +3481,14 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3320
3481
|
});
|
|
3321
3482
|
}
|
|
3322
3483
|
}
|
|
3484
|
+
if (nextStack.ecosystem === "go" && nextStack.goObservability === "signoz" && !hasSignozSupportedGoServerTarget(nextStack)) {
|
|
3485
|
+
nextStack.goObservability = "none";
|
|
3486
|
+
changed = true;
|
|
3487
|
+
changes.push({
|
|
3488
|
+
category: "goObservability",
|
|
3489
|
+
message: "Go observability set to 'None' (SigNoz requires an instrumented HTTP, gRPC, or Go Better Auth server target)"
|
|
3490
|
+
});
|
|
3491
|
+
}
|
|
3323
3492
|
if (nextStack.ecosystem === "java") {
|
|
3324
3493
|
if (nextStack.javaBuildTool === "none") {
|
|
3325
3494
|
if (nextStack.javaWebFramework !== "none") {
|
|
@@ -3580,6 +3749,14 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3580
3749
|
* - Follow CLI behavior: filter options based on UPSTREAM selections only
|
|
3581
3750
|
*/
|
|
3582
3751
|
const getDisabledReason = (currentStack, category, optionId) => {
|
|
3752
|
+
if (currentStack.ecosystem === "react-native" && category === "codeQuality" && optionId !== "knip" && optionId !== "gitleaks") return "React Native code quality currently supports Knip and Gitleaks only";
|
|
3753
|
+
if (category === "codeQuality" && optionId === "knip" && currentStack.ecosystem !== "typescript" && currentStack.ecosystem !== "react-native") return "Knip requires a TypeScript or React Native workspace";
|
|
3754
|
+
if ((category === "observability" && optionId === "signoz" || category === "backend" && currentStack.observability === "signoz") && (category === "backend" ? optionId === "none" || optionId === "convex" : currentStack.backend === "none" || currentStack.backend === "convex")) return "SigNoz tracing requires a generated server target";
|
|
3755
|
+
if ((category === "observability" && optionId === "signoz" || category === "backend" && currentStack.observability === "signoz") && (category === "backend" ? optionId === "self-tanstack-start" || optionId === "self-astro" : currentStack.backend === "self-tanstack-start" || currentStack.backend === "self-astro")) return "SigNoz tracing is not yet bootstrapped for TanStack Start or Astro fullstack apps";
|
|
3756
|
+
const signozBackend = category === "backend" ? optionId : currentStack.backend;
|
|
3757
|
+
const signozWebDeploy = category === "webDeploy" ? optionId : currentStack.webDeploy;
|
|
3758
|
+
if ((category === "observability" && optionId === "signoz" || currentStack.observability === "signoz") && signozWebDeploy === "cloudflare" && (signozBackend === "self" || signozBackend.startsWith("self-"))) return "SigNoz's Node SDK is incompatible with Cloudflare-hosted fullstack apps";
|
|
3759
|
+
if (category === "appPlatforms" && optionId === "kong" && currentStack.ecosystem === "typescript" && currentStack.backend === "encore") return "Kong Gateway does not yet support Encore's container workflow";
|
|
3583
3760
|
const hasStandaloneViteFrontend = currentStack.webFrontend.some((frontend) => ["vanilla-vite", "vue"].includes(frontend));
|
|
3584
3761
|
if (category === "api" && hasStandaloneViteFrontend && [
|
|
3585
3762
|
"trpc",
|
|
@@ -3631,7 +3808,8 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3631
3808
|
"packageManager",
|
|
3632
3809
|
"aiDocs",
|
|
3633
3810
|
"git",
|
|
3634
|
-
"install"
|
|
3811
|
+
"install",
|
|
3812
|
+
"codeQuality"
|
|
3635
3813
|
]);
|
|
3636
3814
|
if (category === "payments" && optionId !== "none" && optionId !== "revenuecat") return "React Native payments currently support RevenueCat only";
|
|
3637
3815
|
if (!reactNativeCategories.has(category) && optionId !== "none" && optionId !== "false") return "React Native ecosystem only supports native mobile options";
|
|
@@ -3648,6 +3826,8 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3648
3826
|
if (category === "vectorDb" && optionId !== "none") return "No backend selected";
|
|
3649
3827
|
if (category === "rateLimit" && optionId !== "none") return "No backend selected";
|
|
3650
3828
|
if (category === "fileStorage" && optionId !== "none") return "No backend selected";
|
|
3829
|
+
if (category === "integrations" && optionId !== "none") return "No backend selected";
|
|
3830
|
+
if (category === "ecommerce" && optionId !== "none") return "No backend selected";
|
|
3651
3831
|
if (category === "examples" && optionId !== "none") return "No backend selected";
|
|
3652
3832
|
}
|
|
3653
3833
|
if (currentStack.backend === "effect") {
|
|
@@ -3685,6 +3865,16 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3685
3865
|
if (optionId !== "none" && currentStack.pythonWebFramework !== "django") return "Python API frameworks currently require Django";
|
|
3686
3866
|
}
|
|
3687
3867
|
if (category === "pythonServer" && optionId === "gunicorn" && (currentStack.pythonWebFramework === "streamlit" || currentStack.pythonWebFramework === "none")) return "Gunicorn requires a WSGI, ASGI, or aiohttp application";
|
|
3868
|
+
if (category === "observability" && optionId === "signoz" && currentStack.runtime === "workers" || category === "runtime" && optionId === "workers" && currentStack.observability === "signoz") return "SigNoz tracing currently requires the Node.js or Bun runtime";
|
|
3869
|
+
if ((category === "goObservability" && optionId === "signoz" || category === "goWebFramework" && currentStack.goObservability === "signoz" || category === "goApi" && currentStack.goObservability === "signoz" || category === "auth" && currentStack.goObservability === "signoz") && !hasSignozSupportedGoServerTarget({
|
|
3870
|
+
...currentStack,
|
|
3871
|
+
...category === "goWebFramework" ? { goWebFramework: optionId } : {},
|
|
3872
|
+
...category === "goApi" ? { goApi: optionId } : {},
|
|
3873
|
+
...category === "auth" ? { auth: optionId } : {}
|
|
3874
|
+
})) return "SigNoz requires Gin, Echo, Fiber, Chi, net/http, gRPC, or Go Better Auth to provide a server target";
|
|
3875
|
+
if ((category === "pythonObservability" && optionId === "signoz" || category === "pythonWebFramework" && currentStack.pythonObservability === "signoz") && !isSignozSupportedPythonWebFramework(category === "pythonWebFramework" ? optionId : currentStack.pythonWebFramework)) return "SigNoz request tracing is currently wired for FastAPI";
|
|
3876
|
+
if (category === "integrations" && optionId === "nango" && usesCloudflareFullstackRuntime(currentStack)) return "Nango's Node SDK is not available on Cloudflare Workers";
|
|
3877
|
+
if (category === "webDeploy" && optionId === "cloudflare" && currentStack.integrations === "nango" && FULLSTACK_SELF_BACKENDS.has(currentStack.backend)) return "Nango's Node SDK is not available on Cloudflare Workers";
|
|
3688
3878
|
const graphDisabledReason = category === "payments" && optionId === "revenuecat" || category === "i18n" && optionId === "intlayer" ? {
|
|
3689
3879
|
handled: false,
|
|
3690
3880
|
authoritative: false,
|
|
@@ -3741,6 +3931,8 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3741
3931
|
if (currentStack.runtime === "workers" && optionId !== "hono" && optionId !== "none") return "In Better-Fullstack, Workers runtime is currently supported only with Hono";
|
|
3742
3932
|
}
|
|
3743
3933
|
if (category === "runtime") {
|
|
3934
|
+
if (optionId === "workers" && currentStack.observability === "signoz") return "SigNoz tracing currently requires the Node.js or Bun runtime";
|
|
3935
|
+
if (optionId === "workers" && currentStack.integrations === "nango") return "Nango's Node SDK is not available on Workers runtime";
|
|
3744
3936
|
if (optionId === "workers" && currentStack.backend !== "hono") return "In Better-Fullstack, Workers runtime currently requires the Hono backend";
|
|
3745
3937
|
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.";
|
|
3746
3938
|
if (optionId === "none") {
|
|
@@ -3867,6 +4059,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3867
4059
|
if (!currentStack.webFrontend.some((f) => f !== "none")) return "PayPal requires a web frontend";
|
|
3868
4060
|
if (["none", "convex"].includes(currentStack.backend)) return "PayPal checkout requires a standalone or fullstack backend";
|
|
3869
4061
|
}
|
|
4062
|
+
if (category === "payments" && optionId === "xendit" && ["none", "convex"].includes(currentStack.backend)) return "Xendit Payment Sessions require a standalone or fullstack backend";
|
|
3870
4063
|
if (category === "cms" && optionId === "payload") {
|
|
3871
4064
|
if (!currentStack.webFrontend.includes("next")) return "Payload CMS v3 requires Next.js";
|
|
3872
4065
|
}
|
|
@@ -3879,9 +4072,20 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3879
4072
|
if (currentStack.backend === "convex") return "Email integration is not available with Convex backend";
|
|
3880
4073
|
if (currentStack.backend === "none") return "Email integration requires a backend";
|
|
3881
4074
|
}
|
|
4075
|
+
if (category === "ecommerce" && optionId !== "none") {
|
|
4076
|
+
if (currentStack.ecosystem !== "typescript") return "MedusaJS SDK generation is only available for the TypeScript ecosystem";
|
|
4077
|
+
if (currentStack.backend === "convex") return "MedusaJS SDK generation is not available with Convex backend";
|
|
4078
|
+
if (currentStack.backend === "none") return "MedusaJS SDK generation requires a backend";
|
|
4079
|
+
}
|
|
3882
4080
|
if (category === "observability" && optionId !== "none") {
|
|
3883
4081
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
3884
4082
|
}
|
|
4083
|
+
if (category === "integrations" && optionId !== "none") {
|
|
4084
|
+
if (currentStack.ecosystem !== "typescript") return "Nango SDK generation is only available for the TypeScript ecosystem";
|
|
4085
|
+
if (currentStack.backend === "convex") return "Nango SDK generation is not available with Convex backend";
|
|
4086
|
+
if (currentStack.backend === "none") return "Nango SDK generation requires a backend";
|
|
4087
|
+
if (currentStack.runtime === "workers" || usesCloudflareFullstackRuntime(currentStack)) return "Nango's Node SDK is not available on Cloudflare Workers";
|
|
4088
|
+
}
|
|
3885
4089
|
if (category === "caching" && optionId === "redis" && currentStack.ecosystem !== "typescript") return "Self-hosted Redis caching (ioredis) is only available for the TypeScript ecosystem";
|
|
3886
4090
|
if (category === "caching" && optionId !== "none") {
|
|
3887
4091
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
@@ -4944,6 +5148,8 @@ const ADDON_COMPATIBILITY = {
|
|
|
4944
5148
|
prettier: [],
|
|
4945
5149
|
husky: [],
|
|
4946
5150
|
lefthook: [],
|
|
5151
|
+
knip: [],
|
|
5152
|
+
gitleaks: [],
|
|
4947
5153
|
turborepo: [],
|
|
4948
5154
|
nx: [],
|
|
4949
5155
|
starlight: [],
|
|
@@ -5095,6 +5301,7 @@ const ADDON_COMPATIBILITY = {
|
|
|
5095
5301
|
],
|
|
5096
5302
|
"backend-utils": [],
|
|
5097
5303
|
"docker-compose": [],
|
|
5304
|
+
kong: [],
|
|
5098
5305
|
devcontainer: [],
|
|
5099
5306
|
"github-actions": [],
|
|
5100
5307
|
none: []
|
|
@@ -5428,6 +5635,8 @@ function evaluateCompatibility(input) {
|
|
|
5428
5635
|
["animation", input.animation],
|
|
5429
5636
|
["cms", input.cms],
|
|
5430
5637
|
["featureFlags", input.featureFlags],
|
|
5638
|
+
["integrations", input.integrations],
|
|
5639
|
+
["ecommerce", input.ecommerce],
|
|
5431
5640
|
["pythonApi", input.pythonApi],
|
|
5432
5641
|
["javaWebFramework", input.javaWebFramework],
|
|
5433
5642
|
["javaBuildTool", input.javaBuildTool],
|
|
@@ -5585,6 +5794,8 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
5585
5794
|
logging: "none",
|
|
5586
5795
|
observability: "none",
|
|
5587
5796
|
featureFlags: "none",
|
|
5797
|
+
integrations: "none",
|
|
5798
|
+
ecommerce: "none",
|
|
5588
5799
|
analytics: "none",
|
|
5589
5800
|
mobileNavigation: "none",
|
|
5590
5801
|
mobileUI: "none",
|
|
@@ -5752,6 +5963,8 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
|
|
|
5752
5963
|
logging: "logging",
|
|
5753
5964
|
observability: "observability",
|
|
5754
5965
|
featureFlags: "featureFlags",
|
|
5966
|
+
integrations: "integrations",
|
|
5967
|
+
ecommerce: "ecommerce",
|
|
5755
5968
|
analytics: "analytics",
|
|
5756
5969
|
mobileNavigation: "mobileNavigation",
|
|
5757
5970
|
mobileUI: "mobileUI",
|
|
@@ -5932,6 +6145,8 @@ const STACK_SELECTION_URL_KEYS = {
|
|
|
5932
6145
|
logging: "log",
|
|
5933
6146
|
observability: "obs",
|
|
5934
6147
|
featureFlags: "ff",
|
|
6148
|
+
integrations: "int",
|
|
6149
|
+
ecommerce: "ecm",
|
|
5935
6150
|
analytics: "an",
|
|
5936
6151
|
mobileNavigation: "mn",
|
|
5937
6152
|
mobileUI: "mui",
|
|
@@ -6210,6 +6425,8 @@ const CLI_SCALAR_CONFIG_FIELDS = [
|
|
|
6210
6425
|
["mobileOTA", "mobileOTA"],
|
|
6211
6426
|
["mobileDeepLinking", "mobileDeepLinking"],
|
|
6212
6427
|
["featureFlags", "featureFlags"],
|
|
6428
|
+
["integrations", "integrations"],
|
|
6429
|
+
["ecommerce", "ecommerce"],
|
|
6213
6430
|
["fileUpload", "fileUpload"],
|
|
6214
6431
|
["git", "git"],
|
|
6215
6432
|
["install", "install"],
|
|
@@ -6544,6 +6761,8 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_SELECTION_KEYS = [
|
|
|
6544
6761
|
["logging", "logging"],
|
|
6545
6762
|
["observability", "observability"],
|
|
6546
6763
|
["featureFlags", "featureFlags"],
|
|
6764
|
+
["integrations", "integrations"],
|
|
6765
|
+
["ecommerce", "ecommerce"],
|
|
6547
6766
|
["caching", "caching"],
|
|
6548
6767
|
["rateLimit", "rateLimit"],
|
|
6549
6768
|
["cms", "cms"],
|
|
@@ -6658,6 +6877,8 @@ const GRAPH_TYPESCRIPT_BACKEND_PART_CLI_KEYS = [
|
|
|
6658
6877
|
["logging", "logging"],
|
|
6659
6878
|
["observability", "observability"],
|
|
6660
6879
|
["featureFlags", "featureFlags"],
|
|
6880
|
+
["integrations", "integrations"],
|
|
6881
|
+
["ecommerce", "ecommerce"],
|
|
6661
6882
|
["caching", "caching"],
|
|
6662
6883
|
["rateLimit", "rateLimit"],
|
|
6663
6884
|
["cms", "cms"],
|
|
@@ -7182,6 +7403,8 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
|
|
|
7182
7403
|
logging: stack.logging,
|
|
7183
7404
|
observability: stack.observability,
|
|
7184
7405
|
featureFlags: stack.featureFlags,
|
|
7406
|
+
integrations: stack.integrations,
|
|
7407
|
+
ecommerce: stack.ecommerce,
|
|
7185
7408
|
analytics: stack.analytics,
|
|
7186
7409
|
mobileNavigation: stack.mobileNavigation,
|
|
7187
7410
|
mobileUI: stack.mobileUI,
|
|
@@ -7422,6 +7645,8 @@ function generateTypeScriptCommand(selection, projectName) {
|
|
|
7422
7645
|
`--logging ${selection.logging}`,
|
|
7423
7646
|
`--observability ${selection.observability}`,
|
|
7424
7647
|
`--feature-flags ${selection.featureFlags}`,
|
|
7648
|
+
`--integrations ${selection.integrations}`,
|
|
7649
|
+
`--ecommerce ${selection.ecommerce}`,
|
|
7425
7650
|
`--realtime ${selection.realtime}`,
|
|
7426
7651
|
`--job-queue ${selection.jobQueue}`,
|
|
7427
7652
|
`--caching ${selection.caching}`,
|
|
@@ -7666,5 +7891,5 @@ function generateStackSelectionCommand(selection) {
|
|
|
7666
7891
|
}
|
|
7667
7892
|
|
|
7668
7893
|
//#endregion
|
|
7669
|
-
export {
|
|
7670
|
-
//# sourceMappingURL=stack-translation-
|
|
7894
|
+
export { JAVA_CATEGORY_ORDER as $, getCompatibleAddons as A, isSignozSupportedGoWebFramework as B, KOTLIN_DROPPED_JAVA_LIBRARIES as C, evaluateCompatibility as D, analyzeStackCompatibility as E, getKotlinJavaIncompatibilityReason as F, splitFrontends as G, isWebFrontend as H, hasSignozSupportedGoServerTarget as I, validateProjectName as J, stackQualifiesForSingleApp as K, hasWebStyling as L, getCompatibleFormLibraries as M, getCompatibleUILibraries as N, getAIFrontendCompatibilityIssue as O, getDisabledReason as P, GO_CATEGORY_ORDER as Q, isFrontendAllowedWithBackend as R, usesVirtualNoneStackSelection as S, allowedApisForFrontends as T, requiresChatSdkVercelAI as U, isSignozSupportedPythonWebFramework as V, requiresChatSdkVercelAIForSelection as W, DOTNET_CATEGORY_ORDER as X, CATEGORY_ORDER as Y, ELIXIR_CATEGORY_ORDER as Z, parseStackSelectionFromSearch as _, STACK_SELECTION_URL_KEYS as a, getCategoryCliValues as at, stackSelectionToCliComparableConfig as b, cloneDefaultStackSelection as c, getCategoryOrderForEcosystem as ct, isArrayStackSelectionKey as d, normalizeOptionId as dt, OPTION_CATEGORY_METADATA as et, isCliDefaultStackSelection as f, getCapabilityDefinitions as ft, normalizeStackSelectionValue as g, normalizeStackSelection as h, normalizeCapabilitySelection as ht, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as i, TYPESCRIPT_CATEGORY_ORDER as it, getCompatibleCSSFrameworks as j, getApiFrontendCompatibilityIssue as k, createStackSelectionSearchParams as l, getOptionMetadata as lt, isStackSelectionDefault as m, getSupportedCapabilityOptions as mt, NON_OPTION_STACK_SELECTION_KEYS as n, REACT_NATIVE_CATEGORY_ORDER as nt, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as o, getCategoryDisplayName as ot, isGraphStackSelection as p, getCapabilityDisabledReason as pt, validateAddonCompatibility as q, STACK_SELECTION_KEYS as r, RUST_CATEGORY_ORDER as rt, cliInputToProjectConfigPartial as s, getCategoryOptionIds as st, DEFAULT_STACK_SELECTION as t, PYTHON_CATEGORY_ORDER as tt, generateStackSelectionCommand as u, isMultiSelectCategory as ut, parseStackSelectionFromUrlRecord as v, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as w, stackSelectionToProjectConfig as x, processCliArrayOption as y, isOptionCompatible as z };
|
|
7895
|
+
//# sourceMappingURL=stack-translation-CIt0ziI4.mjs.map
|