@better-fullstack/types 2.5.0 → 2.6.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-CbLlpynl.d.mts → defaults-7VECSARb.d.mts} +2 -2
- package/dist/defaults-7VECSARb.d.mts.map +1 -0
- package/dist/{defaults-BzWJP6p0.mjs → defaults-Bp46Ajyg.mjs} +2 -1
- package/dist/defaults-Bp46Ajyg.mjs.map +1 -0
- package/dist/defaults.d.mts +3 -3
- package/dist/defaults.mjs +1 -1
- package/dist/index.d.mts +52 -6
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +22 -20
- package/dist/index.mjs.map +1 -1
- package/dist/json-schema.d.mts +180 -0
- package/dist/json-schema.d.mts.map +1 -1
- package/dist/json-schema.mjs +1 -1
- package/dist/{schemas-CtieNRfz.mjs → schemas-CH1UszP5.mjs} +36 -9
- package/dist/schemas-CH1UszP5.mjs.map +1 -0
- package/dist/{schemas-BRAokgPa.d.mts → schemas-CY0MaZmU.d.mts} +191 -10
- package/dist/schemas-CY0MaZmU.d.mts.map +1 -0
- package/dist/schemas.d.mts +2 -2
- package/dist/schemas.mjs +2 -2
- package/dist/{stack-graph-CXTiPofQ.mjs → stack-graph-AWbdUrN3.mjs} +615 -131
- package/dist/stack-graph-AWbdUrN3.mjs.map +1 -0
- package/dist/{stack-graph-BPw9KsNm.d.mts → stack-graph-DkJ944IX.d.mts} +7 -3
- package/dist/stack-graph-DkJ944IX.d.mts.map +1 -0
- package/dist/stack-graph.d.mts +4 -4
- package/dist/stack-graph.mjs +3 -3
- package/dist/{stack-translation-D7KkQm8W.d.mts → stack-translation-C9yYLNwM.d.mts} +27 -7
- package/dist/stack-translation-C9yYLNwM.d.mts.map +1 -0
- package/dist/{stack-translation-B-zArJLM.mjs → stack-translation-Cn6zGJ5q.mjs} +253 -26
- package/dist/stack-translation-Cn6zGJ5q.mjs.map +1 -0
- package/dist/stack-translation.d.mts +5 -5
- package/dist/stack-translation.mjs +4 -4
- package/dist/{types-Br0NsnBr.d.mts → types-fGT5qf7O.d.mts} +5 -3
- package/dist/types-fGT5qf7O.d.mts.map +1 -0
- package/dist/types.d.mts +3 -3
- package/package.json +1 -1
- package/dist/defaults-BzWJP6p0.mjs.map +0 -1
- package/dist/defaults-CbLlpynl.d.mts.map +0 -1
- package/dist/schemas-BRAokgPa.d.mts.map +0 -1
- package/dist/schemas-CtieNRfz.mjs.map +0 -1
- package/dist/stack-graph-BPw9KsNm.d.mts.map +0 -1
- package/dist/stack-graph-CXTiPofQ.mjs.map +0 -1
- package/dist/stack-translation-B-zArJLM.mjs.map +0 -1
- package/dist/stack-translation-D7KkQm8W.d.mts.map +0 -1
- package/dist/types-Br0NsnBr.d.mts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $i as
|
|
2
|
-
import {
|
|
3
|
-
import { t as createCliDefaultProjectConfigBase } from "./defaults-
|
|
1
|
+
import { $i as REALTIME_VALUES, A as CMS_VALUES, An as GO_MESSAGE_QUEUE_VALUES, Ar as KOTLIN_MOBILE_LIBRARIES_VALUES, At as ELIXIR_JSON_VALUES, B as DOTNET_AUTH_VALUES, Ba as SHADCN_STYLE_VALUES, Bn as GO_WEB_FRAMEWORK_VALUES, Br as MOBILE_PUSH_VALUES, Ci as PYTHON_TESTING_VALUES, Cn as GO_API_VALUES, Ct as ELIXIR_DEPLOY_VALUES, D as CACHING_VALUES, Dn as GO_CONFIG_VALUES, Dt as ELIXIR_HTTP_VALUES, En as GO_CLI_VALUES, Et as ELIXIR_HTTP_SERVER_VALUES, F as DART_MOBILE_VALUES, Fa as SHADCN_BASE_VALUES, Fn as GO_QUALITY_VALUES, Ft as ELIXIR_REALTIME_VALUES, G as DOTNET_LIBRARIES_VALUES, H as DOTNET_DEPLOY_VALUES, Ha as SWIFT_MOBILE_VALUES, Hr as MOBILE_TESTING_VALUES, I as DATABASE_SETUP_VALUES, Ia as SHADCN_COLOR_THEME_VALUES, In as GO_REALTIME_VALUES, Ir as MOBILE_DEEP_LINKING_VALUES, It as ELIXIR_TESTING_VALUES, J as DOTNET_REALTIME_VALUES, K as DOTNET_OBSERVABILITY_VALUES, L as DATABASE_VALUES, La as SHADCN_FONT_VALUES, Ln as GO_TEMPLATING_VALUES, Lr as MOBILE_LIBRARIES_VALUES, Lt as ELIXIR_VALIDATION_VALUES, M as CSS_FRAMEWORK_VALUES, Ma as SEARCH_VALUES, Mn as GO_OBSERVABILITY_VALUES, Mt as ELIXIR_OBSERVABILITY_VALUES, Na as SERVER_DEPLOY_VALUES, Nn as GO_ORM_VALUES, Nt as ELIXIR_ORM_VALUES, On as GO_DI_VALUES, Ot as ELIXIR_I18N_VALUES, Pa as SHADCN_BASE_COLOR_VALUES, Pn as GO_PROTO_TOOLING_VALUES, Pr as LOGGING_VALUES, Pt as ELIXIR_QUALITY_VALUES, Qi as RATE_LIMIT_VALUES, Qr as OBSERVABILITY_VALUES, Ra as SHADCN_ICON_LIBRARY_VALUES, Rn as GO_TESTING_VALUES, Rr as MOBILE_NAVIGATION_VALUES, Rt as ELIXIR_WEB_FRAMEWORK_VALUES, Si as PYTHON_TASK_QUEUE_VALUES, St as ELIXIR_CLUSTERING_VALUES, Ti as PYTHON_WEB_FRAMEWORK_VALUES, Tn as GO_CACHING_VALUES, Tt as ELIXIR_EMAIL_VALUES, U as DOTNET_FRONTEND_VALUES, Ur as MOBILE_UI_VALUES, V as DOTNET_CACHING_VALUES, Va as STATE_MANAGEMENT_VALUES, Vr as MOBILE_STORAGE_VALUES, W as DOTNET_JOB_QUEUE_VALUES, X as DOTNET_VALIDATION_VALUES, Y as DOTNET_TESTING_VALUES, Z as DOTNET_WEB_FRAMEWORK_VALUES, _i as PYTHON_ORM_VALUES, _o as WORKSPACE_SHAPE_VALUES, _r as JAVA_TESTING_LIBRARIES_VALUES, _t as EFFECT_VALUES, a as ANALYTICS_VALUES, aa as RUST_ERROR_HANDLING_VALUES, ai as PYTHON_AI_VALUES, ao as TESTING_VALUES, ar as I18N_VALUES, b as BOT_PROTECTION_VALUES, bi as PYTHON_REALTIME_VALUES, bt as ELIXIR_AUTH_VALUES, c as API_VALUES, ca as RUST_LOGGING_VALUES, ci as PYTHON_CACHING_VALUES, d as AUTH_VALUES, da as RUST_ORM_VALUES, di as PYTHON_DATA_VALUES, do as VECTOR_DB_VALUES, dr as JAVA_AUTH_VALUES, ea as RUNTIME_VALUES, ei as ORM_VALUES, fa as RUST_REALTIME_VALUES, fi as PYTHON_GRAPHQL_VALUES, fo as VERSION_CHANNEL_VALUES, fr as JAVA_BUILD_TOOL_VALUES, gi as PYTHON_OBSERVABILITY_VALUES, gn as FORMS_VALUES, go as WEB_DEPLOY_VALUES, gr as JAVA_ORM_VALUES, hi as PYTHON_MESSAGE_QUEUE_VALUES, hn as FILE_UPLOAD_VALUES, hr as JAVA_LOGGING_VALUES, ht as ECOMMERCE_VALUES, i as AI_VALUES, ia as RUST_CLI_VALUES, jn as GO_MIGRATIONS_VALUES, jr as KOTLIN_MOBILE_VALUES, jt as ELIXIR_LIBRARIES_VALUES, kn as GO_LOGGING_VALUES, kt as ELIXIR_JOBS_VALUES, l as APP_PLATFORM_ADDON_VALUES, la as RUST_MESSAGE_QUEUE_VALUES, li as PYTHON_CLI_VALUES, lo as UI_LIBRARY_VALUES, ma as RUST_WEB_FRAMEWORK_VALUES, mi as PYTHON_MEDIA_VALUES, mn as FILE_STORAGE_VALUES, mr as JAVA_LIBRARIES_VALUES, na as RUST_AUTH_VALUES, ni as PACKAGE_MANAGER_VALUES, o as ANIMATION_VALUES, oa as RUST_FRONTEND_VALUES, oi as PYTHON_API_VALUES, pa as RUST_TEMPLATING_VALUES, pi as PYTHON_HTTP_CLIENT_VALUES, pn as FEATURE_FLAGS_VALUES, pr as JAVA_LANGUAGE_VALUES, q as DOTNET_ORM_VALUES, r as AI_DOCS_VALUES, ra as RUST_CACHING_VALUES, ri as PAYMENTS_VALUES, sa as RUST_LIBRARIES_VALUES, si as PYTHON_AUTH_VALUES, sr as INTEGRATIONS_VALUES, ta as RUST_API_VALUES, u as ASTRO_INTEGRATION_VALUES, ua as RUST_OBSERVABILITY_VALUES, ui as PYTHON_CLOUD_SDK_VALUES, uo as VALIDATION_VALUES, ur as JAVA_API_VALUES, vi as PYTHON_PACKAGE_MANAGER_VALUES, vr as JAVA_WEB_FRAMEWORK_VALUES, vt as ELIXIR_API_VALUES, wi as PYTHON_VALIDATION_VALUES, wn as GO_AUTH_VALUES, wt as ELIXIR_DOCUMENTATION_VALUES, xi as PYTHON_SERVER_VALUES, xt as ELIXIR_CACHING_VALUES, yi as PYTHON_QUALITY_VALUES, yr as JOB_QUEUE_VALUES, yt as ELIXIR_APPLICATION_FRAMEWORK_VALUES, z as DOTNET_API_VALUES, za as SHADCN_RADIUS_VALUES, zn as GO_VALIDATION_VALUES, zr as MOBILE_OTA_VALUES, zt as EMAIL_VALUES } from "./schemas-CH1UszP5.mjs";
|
|
2
|
+
import { B as isToolingOverlayOnly, C as hasPWACompatibleFrontend, L as getToolingCapability, T as hasTauriCompatibleFrontend, a as getAddonStackPartBinding, b as UI_LIBRARY_COMPATIBILITY, f as legacyProjectConfigToStackParts, g as stackPartsToLegacyProjectConfigPartial, i as formatStackPartSpec, k as requiresChatSdkVercelAIForExamples, m as parseStackPartSpecs, s as getStackPartCompatibilityIssueForPart, v as validateStackParts, w as hasTanStackAICompatibleFrontend, x as getUnsupportedWebDeployFrontend, z as getToolingSelectionOptions } from "./stack-graph-AWbdUrN3.mjs";
|
|
3
|
+
import { t as createCliDefaultProjectConfigBase } from "./defaults-Bp46Ajyg.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/capabilities.ts
|
|
6
6
|
const CAPABILITY_DEFINITIONS = { auth: [
|
|
@@ -287,15 +287,30 @@ const TYPESCRIPT_CATEGORY_ORDER = [
|
|
|
287
287
|
"jobQueue",
|
|
288
288
|
"caching",
|
|
289
289
|
"rateLimit",
|
|
290
|
+
"botProtection",
|
|
290
291
|
"i18n",
|
|
291
292
|
"search",
|
|
292
293
|
"vectorDb",
|
|
293
294
|
"fileStorage",
|
|
294
295
|
"animation",
|
|
295
296
|
"cms",
|
|
296
|
-
"
|
|
297
|
+
"toolchainProfile",
|
|
298
|
+
"workspaceRunner",
|
|
299
|
+
"codeQualityProfile",
|
|
300
|
+
"gitHooks",
|
|
301
|
+
"staticAnalysis",
|
|
302
|
+
"aiTooling",
|
|
297
303
|
"documentation",
|
|
298
|
-
"
|
|
304
|
+
"testingTools",
|
|
305
|
+
"dataClient",
|
|
306
|
+
"frontendUtilities",
|
|
307
|
+
"httpClientTool",
|
|
308
|
+
"codeGeneration",
|
|
309
|
+
"developerEnvironment",
|
|
310
|
+
"containerOrchestration",
|
|
311
|
+
"apiGateway",
|
|
312
|
+
"continuousIntegration",
|
|
313
|
+
"backendUtilitiesTool",
|
|
299
314
|
"workspaceShape",
|
|
300
315
|
"packageManager",
|
|
301
316
|
"examples",
|
|
@@ -494,7 +509,23 @@ function getCategoryDisplayName(categoryKey) {
|
|
|
494
509
|
const customName = {
|
|
495
510
|
i18n: "Internationalization (i18n)",
|
|
496
511
|
appShells: "App Platforms",
|
|
497
|
-
appPlatforms: "
|
|
512
|
+
appPlatforms: "Legacy Capabilities",
|
|
513
|
+
toolchainProfile: "JavaScript Toolchain",
|
|
514
|
+
workspaceRunner: "Workspace Runner",
|
|
515
|
+
codeQualityProfile: "Code Quality",
|
|
516
|
+
gitHooks: "Git Hooks",
|
|
517
|
+
staticAnalysis: "Static Analysis",
|
|
518
|
+
aiTooling: "AI Tooling",
|
|
519
|
+
testingTools: "Testing Support",
|
|
520
|
+
dataClient: "Data Client",
|
|
521
|
+
frontendUtilities: "Frontend Utilities",
|
|
522
|
+
httpClientTool: "HTTP Client",
|
|
523
|
+
codeGeneration: "API Code Generation",
|
|
524
|
+
developerEnvironment: "Developer Environment",
|
|
525
|
+
containerOrchestration: "Local Containers",
|
|
526
|
+
apiGateway: "API Gateway",
|
|
527
|
+
continuousIntegration: "Continuous Integration",
|
|
528
|
+
backendUtilitiesTool: "Backend Utilities",
|
|
498
529
|
mobileNavigation: "Mobile Navigation",
|
|
499
530
|
mobileUI: "Mobile UI",
|
|
500
531
|
mobileStorage: "Mobile Storage",
|
|
@@ -673,6 +704,7 @@ const APP_SHELL_VALUES = APP_PLATFORM_ADDON_VALUES;
|
|
|
673
704
|
const APP_PLATFORM_VALUES = [
|
|
674
705
|
"turborepo",
|
|
675
706
|
"nx",
|
|
707
|
+
"vite-plus",
|
|
676
708
|
"mcp",
|
|
677
709
|
"skills",
|
|
678
710
|
"msw",
|
|
@@ -694,15 +726,22 @@ const APP_PLATFORM_VALUES = [
|
|
|
694
726
|
"openapi-typescript",
|
|
695
727
|
"apollo-client"
|
|
696
728
|
];
|
|
729
|
+
const toolingSelectionIds = (category) => getToolingSelectionOptions(category).map((selection) => selection.id);
|
|
697
730
|
const EXAMPLE_VALUES = ["ai", "chat-sdk"];
|
|
698
731
|
const BOOLEAN_OPTION_VALUES = ["true", "false"];
|
|
699
732
|
const MULTI_SELECT_CATEGORIES = new Set([
|
|
700
733
|
"webFrontend",
|
|
701
734
|
"nativeFrontend",
|
|
702
735
|
"codeQuality",
|
|
703
|
-
"documentation",
|
|
704
736
|
"appShells",
|
|
705
737
|
"appPlatforms",
|
|
738
|
+
"staticAnalysis",
|
|
739
|
+
"aiTooling",
|
|
740
|
+
"testingTools",
|
|
741
|
+
"frontendUtilities",
|
|
742
|
+
"codeGeneration",
|
|
743
|
+
"developerEnvironment",
|
|
744
|
+
"backendUtilitiesTool",
|
|
706
745
|
"examples",
|
|
707
746
|
"aiDocs",
|
|
708
747
|
"rustLibraries",
|
|
@@ -747,6 +786,7 @@ const CATEGORY_VALUE_IDS = {
|
|
|
747
786
|
jobQueue: JOB_QUEUE_VALUES,
|
|
748
787
|
caching: CACHING_VALUES,
|
|
749
788
|
rateLimit: RATE_LIMIT_VALUES,
|
|
789
|
+
botProtection: BOT_PROTECTION_VALUES,
|
|
750
790
|
i18n: I18N_VALUES,
|
|
751
791
|
search: SEARCH_VALUES,
|
|
752
792
|
vectorDb: VECTOR_DB_VALUES,
|
|
@@ -771,6 +811,22 @@ const CATEGORY_VALUE_IDS = {
|
|
|
771
811
|
documentation: DOCUMENTATION_VALUES,
|
|
772
812
|
appShells: APP_SHELL_VALUES,
|
|
773
813
|
appPlatforms: APP_PLATFORM_VALUES,
|
|
814
|
+
toolchainProfile: toolingSelectionIds("toolchain"),
|
|
815
|
+
workspaceRunner: toolingSelectionIds("workspaceRunner"),
|
|
816
|
+
codeQualityProfile: toolingSelectionIds("codeQuality"),
|
|
817
|
+
gitHooks: toolingSelectionIds("gitHooks"),
|
|
818
|
+
staticAnalysis: toolingSelectionIds("staticAnalysis"),
|
|
819
|
+
aiTooling: toolingSelectionIds("aiTooling"),
|
|
820
|
+
testingTools: toolingSelectionIds("testingTools"),
|
|
821
|
+
dataClient: toolingSelectionIds("dataClient"),
|
|
822
|
+
frontendUtilities: toolingSelectionIds("frontendUtilities"),
|
|
823
|
+
httpClientTool: toolingSelectionIds("httpClient"),
|
|
824
|
+
codeGeneration: toolingSelectionIds("codeGeneration"),
|
|
825
|
+
developerEnvironment: toolingSelectionIds("developerEnvironment"),
|
|
826
|
+
containerOrchestration: toolingSelectionIds("containerOrchestration"),
|
|
827
|
+
apiGateway: toolingSelectionIds("apiGateway"),
|
|
828
|
+
continuousIntegration: toolingSelectionIds("continuousIntegration"),
|
|
829
|
+
backendUtilitiesTool: toolingSelectionIds("backendUtilities"),
|
|
774
830
|
packageManager: PACKAGE_MANAGER_VALUES,
|
|
775
831
|
workspaceShape: WORKSPACE_SHAPE_VALUES,
|
|
776
832
|
versionChannel: VERSION_CHANNEL_VALUES,
|
|
@@ -1004,6 +1060,10 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1004
1060
|
arcjet: "Arcjet",
|
|
1005
1061
|
"upstash-ratelimit": "Upstash Ratelimit"
|
|
1006
1062
|
},
|
|
1063
|
+
botProtection: {
|
|
1064
|
+
botid: "Vercel BotID",
|
|
1065
|
+
turnstile: "Cloudflare Turnstile"
|
|
1066
|
+
},
|
|
1007
1067
|
backendLibraries: {
|
|
1008
1068
|
effect: "Effect Core",
|
|
1009
1069
|
"effect-full": "Effect Platform + SQL"
|
|
@@ -1095,7 +1155,8 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1095
1155
|
analytics: {
|
|
1096
1156
|
plausible: "Plausible",
|
|
1097
1157
|
umami: "Umami",
|
|
1098
|
-
ga4: "Google Analytics 4"
|
|
1158
|
+
ga4: "Google Analytics 4",
|
|
1159
|
+
"vercel-analytics": "Vercel Analytics"
|
|
1099
1160
|
},
|
|
1100
1161
|
mobileNavigation: {
|
|
1101
1162
|
"expo-router": "Expo Router",
|
|
@@ -1163,6 +1224,9 @@ const EXACT_LABEL_OVERRIDES = {
|
|
|
1163
1224
|
opentui: "OpenTUI"
|
|
1164
1225
|
},
|
|
1165
1226
|
appPlatforms: {
|
|
1227
|
+
turborepo: "Turborepo",
|
|
1228
|
+
nx: "Nx",
|
|
1229
|
+
"vite-plus": "Vite+",
|
|
1166
1230
|
mcp: "MCP",
|
|
1167
1231
|
msw: "MSW",
|
|
1168
1232
|
swr: "SWR",
|
|
@@ -1878,6 +1942,7 @@ const OPTION_CATEGORY_METADATA = {
|
|
|
1878
1942
|
jobQueue: buildCategoryMetadata("jobQueue"),
|
|
1879
1943
|
caching: buildCategoryMetadata("caching"),
|
|
1880
1944
|
rateLimit: buildCategoryMetadata("rateLimit"),
|
|
1945
|
+
botProtection: buildCategoryMetadata("botProtection"),
|
|
1881
1946
|
i18n: buildCategoryMetadata("i18n"),
|
|
1882
1947
|
search: buildCategoryMetadata("search"),
|
|
1883
1948
|
vectorDb: buildCategoryMetadata("vectorDb"),
|
|
@@ -1902,6 +1967,22 @@ const OPTION_CATEGORY_METADATA = {
|
|
|
1902
1967
|
documentation: buildCategoryMetadata("documentation"),
|
|
1903
1968
|
appShells: buildCategoryMetadata("appShells"),
|
|
1904
1969
|
appPlatforms: buildCategoryMetadata("appPlatforms"),
|
|
1970
|
+
toolchainProfile: buildCategoryMetadata("toolchainProfile"),
|
|
1971
|
+
workspaceRunner: buildCategoryMetadata("workspaceRunner"),
|
|
1972
|
+
codeQualityProfile: buildCategoryMetadata("codeQualityProfile"),
|
|
1973
|
+
gitHooks: buildCategoryMetadata("gitHooks"),
|
|
1974
|
+
staticAnalysis: buildCategoryMetadata("staticAnalysis"),
|
|
1975
|
+
aiTooling: buildCategoryMetadata("aiTooling"),
|
|
1976
|
+
testingTools: buildCategoryMetadata("testingTools"),
|
|
1977
|
+
dataClient: buildCategoryMetadata("dataClient"),
|
|
1978
|
+
frontendUtilities: buildCategoryMetadata("frontendUtilities"),
|
|
1979
|
+
httpClientTool: buildCategoryMetadata("httpClientTool"),
|
|
1980
|
+
codeGeneration: buildCategoryMetadata("codeGeneration"),
|
|
1981
|
+
developerEnvironment: buildCategoryMetadata("developerEnvironment"),
|
|
1982
|
+
containerOrchestration: buildCategoryMetadata("containerOrchestration"),
|
|
1983
|
+
apiGateway: buildCategoryMetadata("apiGateway"),
|
|
1984
|
+
continuousIntegration: buildCategoryMetadata("continuousIntegration"),
|
|
1985
|
+
backendUtilitiesTool: buildCategoryMetadata("backendUtilitiesTool"),
|
|
1905
1986
|
packageManager: buildCategoryMetadata("packageManager"),
|
|
1906
1987
|
workspaceShape: buildCategoryMetadata("workspaceShape"),
|
|
1907
1988
|
versionChannel: buildCategoryMetadata("versionChannel"),
|
|
@@ -2046,6 +2127,61 @@ const SIGNOZ_SUPPORTED_GO_WEB_FRAMEWORKS = new Set([
|
|
|
2046
2127
|
"stdlib"
|
|
2047
2128
|
]);
|
|
2048
2129
|
const SIGNOZ_SUPPORTED_PYTHON_WEB_FRAMEWORKS = new Set(["fastapi"]);
|
|
2130
|
+
const VERCEL_ANALYTICS_FRONTENDS = new Set([
|
|
2131
|
+
"next",
|
|
2132
|
+
"vinext",
|
|
2133
|
+
"tanstack-router",
|
|
2134
|
+
"tanstack-start",
|
|
2135
|
+
"react-router",
|
|
2136
|
+
"react-vite",
|
|
2137
|
+
"svelte",
|
|
2138
|
+
"nuxt",
|
|
2139
|
+
"vue",
|
|
2140
|
+
"solid",
|
|
2141
|
+
"solid-start",
|
|
2142
|
+
"astro"
|
|
2143
|
+
]);
|
|
2144
|
+
const REACT_ANALYTICS_FRONTENDS = new Set([
|
|
2145
|
+
"tanstack-router",
|
|
2146
|
+
"react-router",
|
|
2147
|
+
"react-vite",
|
|
2148
|
+
"tanstack-start",
|
|
2149
|
+
"next",
|
|
2150
|
+
"vinext"
|
|
2151
|
+
]);
|
|
2152
|
+
const GA4_FRONTENDS = new Set([
|
|
2153
|
+
...VERCEL_ANALYTICS_FRONTENDS,
|
|
2154
|
+
"vanilla-vite",
|
|
2155
|
+
"qwik",
|
|
2156
|
+
"angular",
|
|
2157
|
+
"redwood",
|
|
2158
|
+
"fresh"
|
|
2159
|
+
]);
|
|
2160
|
+
const STANDARD_ANALYTICS_FRONTENDS = new Set([
|
|
2161
|
+
...REACT_ANALYTICS_FRONTENDS,
|
|
2162
|
+
"svelte",
|
|
2163
|
+
"nuxt",
|
|
2164
|
+
"vue",
|
|
2165
|
+
"solid",
|
|
2166
|
+
"solid-start"
|
|
2167
|
+
]);
|
|
2168
|
+
const ANALYTICS_FRONTEND_SUPPORT = {
|
|
2169
|
+
ga4: GA4_FRONTENDS,
|
|
2170
|
+
plausible: REACT_ANALYTICS_FRONTENDS,
|
|
2171
|
+
posthog: STANDARD_ANALYTICS_FRONTENDS,
|
|
2172
|
+
umami: STANDARD_ANALYTICS_FRONTENDS,
|
|
2173
|
+
"vercel-analytics": VERCEL_ANALYTICS_FRONTENDS
|
|
2174
|
+
};
|
|
2175
|
+
function isAnalyticsFrontendSupported(analytics, frontend) {
|
|
2176
|
+
return analytics !== "none" && ANALYTICS_FRONTEND_SUPPORT[analytics].has(frontend);
|
|
2177
|
+
}
|
|
2178
|
+
function supportsAnalyticsFrontends(analytics, frontends) {
|
|
2179
|
+
const webFrontends = frontends.filter((frontend) => frontend !== "none" && !frontend.startsWith("native-"));
|
|
2180
|
+
return webFrontends.length > 0 && webFrontends.every((frontend) => isAnalyticsFrontendSupported(analytics, frontend));
|
|
2181
|
+
}
|
|
2182
|
+
function isVercelAnalyticsFrontend(frontend) {
|
|
2183
|
+
return isAnalyticsFrontendSupported("vercel-analytics", frontend);
|
|
2184
|
+
}
|
|
2049
2185
|
function isSignozSupportedGoWebFramework(framework) {
|
|
2050
2186
|
return SIGNOZ_SUPPORTED_GO_WEB_FRAMEWORKS.has(framework);
|
|
2051
2187
|
}
|
|
@@ -2077,6 +2213,19 @@ function getKotlinJavaIncompatibilityReason(stack) {
|
|
|
2077
2213
|
if (unsupportedTestingLibrary) return `The '${unsupportedTestingLibrary}' testing library is not wired for the Kotlin scaffold`;
|
|
2078
2214
|
return null;
|
|
2079
2215
|
}
|
|
2216
|
+
const TURNSTILE_WEB_FRONTENDS = new Set([
|
|
2217
|
+
"next",
|
|
2218
|
+
"react-router",
|
|
2219
|
+
"react-vite",
|
|
2220
|
+
"tanstack-router",
|
|
2221
|
+
"tanstack-start"
|
|
2222
|
+
]);
|
|
2223
|
+
function isTurnstileWebFrontend(frontend) {
|
|
2224
|
+
return TURNSTILE_WEB_FRONTENDS.has(frontend);
|
|
2225
|
+
}
|
|
2226
|
+
function isBotIdWebFrontend(frontend) {
|
|
2227
|
+
return frontend === "next";
|
|
2228
|
+
}
|
|
2080
2229
|
const DEFAULT_RUNTIME = "bun";
|
|
2081
2230
|
const REVENUECAT_NATIVE_FRONTENDS = new Set([
|
|
2082
2231
|
"native-bare",
|
|
@@ -2183,6 +2332,7 @@ function stackQualifiesForSingleApp(stack) {
|
|
|
2183
2332
|
const webFrontends = (stack.webFrontend ?? []).filter((f) => f && f !== "none");
|
|
2184
2333
|
if (webFrontends.length !== 1) return false;
|
|
2185
2334
|
if (webFrontends[0] !== SINGLE_APP_WEB_FRONTEND_BY_BACKEND[stack.backend]) return false;
|
|
2335
|
+
if (stack.analytics !== "none" && stack.analytics !== "vercel-analytics") return false;
|
|
2186
2336
|
if ([
|
|
2187
2337
|
stack.api,
|
|
2188
2338
|
stack.database,
|
|
@@ -2201,7 +2351,6 @@ function stackQualifiesForSingleApp(stack) {
|
|
|
2201
2351
|
stack.fileStorage,
|
|
2202
2352
|
stack.cms,
|
|
2203
2353
|
stack.aiSdk,
|
|
2204
|
-
stack.analytics,
|
|
2205
2354
|
stack.featureFlags,
|
|
2206
2355
|
stack.integrations,
|
|
2207
2356
|
stack.ecommerce,
|
|
@@ -3329,14 +3478,15 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3329
3478
|
for (const platform of [
|
|
3330
3479
|
"docker-compose",
|
|
3331
3480
|
"devcontainer",
|
|
3332
|
-
"kong"
|
|
3481
|
+
"kong",
|
|
3482
|
+
"vite-plus"
|
|
3333
3483
|
]) {
|
|
3334
3484
|
if (!nextStack.appPlatforms.includes(platform)) continue;
|
|
3335
3485
|
const reason = getDisabledReason(nextStack, "appPlatforms", platform);
|
|
3336
3486
|
if (!reason) continue;
|
|
3337
3487
|
nextStack.appPlatforms = nextStack.appPlatforms.filter((addon) => addon !== platform);
|
|
3338
3488
|
changed = true;
|
|
3339
|
-
const label = platform === "docker-compose" ? "Docker Compose" : platform === "devcontainer" ? "DevContainer" : "Kong Gateway";
|
|
3489
|
+
const label = platform === "docker-compose" ? "Docker Compose" : platform === "devcontainer" ? "DevContainer" : platform === "kong" ? "Kong Gateway" : "Vite+";
|
|
3340
3490
|
changes.push({
|
|
3341
3491
|
category: "appPlatforms",
|
|
3342
3492
|
message: `${label} removed (${reason})`
|
|
@@ -3750,6 +3900,22 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3750
3900
|
message: `Web deploy set to 'None' ('${webDeploy}' is not wired for the '${unsupportedWebDeployFrontend}' frontend)`
|
|
3751
3901
|
});
|
|
3752
3902
|
}
|
|
3903
|
+
if (nextStack.botProtection && nextStack.botProtection !== "none") {
|
|
3904
|
+
const webFrontends = nextStack.webFrontend.filter((frontend) => frontend !== "none");
|
|
3905
|
+
const hasNativeFrontend$1 = nextStack.nativeFrontend.some((frontend) => frontend !== "none");
|
|
3906
|
+
const hasBetterAuth = nextStack.auth === "better-auth" || nextStack.auth === "better-auth-organizations";
|
|
3907
|
+
const invalidBotId = nextStack.botProtection === "botid" && (hasNativeFrontend$1 || webFrontends.length === 0 || webFrontends.some((frontend) => !isBotIdWebFrontend(frontend)) || nextStack.backend !== "self-next" || nextStack.webDeploy !== "none" && nextStack.webDeploy !== "vercel");
|
|
3908
|
+
const invalidTurnstile = nextStack.botProtection === "turnstile" && (hasNativeFrontend$1 || webFrontends.length === 0 || webFrontends.some((frontend) => !isTurnstileWebFrontend(frontend)) || nextStack.backend === "none" || nextStack.backend === "convex");
|
|
3909
|
+
if (!hasBetterAuth || invalidBotId || invalidTurnstile) {
|
|
3910
|
+
const provider = nextStack.botProtection;
|
|
3911
|
+
nextStack.botProtection = "none";
|
|
3912
|
+
changed = true;
|
|
3913
|
+
changes.push({
|
|
3914
|
+
category: "botProtection",
|
|
3915
|
+
message: `Bot protection set to 'None' ('${provider}' is not wired for the selected frontend, auth, backend, or deployment)`
|
|
3916
|
+
});
|
|
3917
|
+
}
|
|
3918
|
+
}
|
|
3753
3919
|
if (nextStack.serverDeploy === "cloudflare") {
|
|
3754
3920
|
if (nextStack.runtime !== "workers" || nextStack.backend !== "hono") {
|
|
3755
3921
|
nextStack.serverDeploy = "none";
|
|
@@ -3778,6 +3944,16 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3778
3944
|
message: "Server deploy set to 'None' (not needed for this backend)"
|
|
3779
3945
|
});
|
|
3780
3946
|
}
|
|
3947
|
+
const selectedAnalytics = ANALYTICS_VALUES.find((value) => value === nextStack.analytics);
|
|
3948
|
+
if (selectedAnalytics && selectedAnalytics !== "none" && !supportsAnalyticsFrontends(selectedAnalytics, nextStack.webFrontend)) {
|
|
3949
|
+
const wasVercel = selectedAnalytics === "vercel-analytics";
|
|
3950
|
+
nextStack.analytics = "none";
|
|
3951
|
+
changed = true;
|
|
3952
|
+
changes.push({
|
|
3953
|
+
category: "analytics",
|
|
3954
|
+
message: wasVercel ? "Analytics set to 'None' (Vercel Analytics is not mounted for this frontend)" : "Analytics set to 'None' (no analytics template for this frontend)"
|
|
3955
|
+
});
|
|
3956
|
+
}
|
|
3781
3957
|
if (nextStack.workspaceShape === "single-app" && !stackQualifiesForSingleApp(nextStack)) {
|
|
3782
3958
|
nextStack.workspaceShape = "monorepo";
|
|
3783
3959
|
changed = true;
|
|
@@ -3803,6 +3979,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3803
3979
|
const getDisabledReason = (currentStack, category, optionId) => {
|
|
3804
3980
|
if (currentStack.ecosystem === "react-native" && category === "codeQuality" && optionId !== "knip" && optionId !== "gitleaks") return "React Native code quality currently supports Knip and Gitleaks only";
|
|
3805
3981
|
if (category === "codeQuality" && optionId === "knip" && currentStack.ecosystem !== "typescript" && currentStack.ecosystem !== "react-native") return "Knip requires a TypeScript or React Native workspace";
|
|
3982
|
+
if (category === "appPlatforms" && optionId === "vite-plus" && (currentStack.ecosystem !== "typescript" || !currentStack.webFrontend.some((frontend) => frontend !== "none"))) return "Vite+ requires a generated TypeScript web frontend";
|
|
3806
3983
|
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";
|
|
3807
3984
|
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";
|
|
3808
3985
|
const signozBackend = category === "backend" ? optionId : currentStack.backend;
|
|
@@ -3927,6 +4104,13 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
3927
4104
|
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";
|
|
3928
4105
|
if (category === "integrations" && optionId === "nango" && usesCloudflareFullstackRuntime(currentStack)) return "Nango's Node SDK is not available on Cloudflare Workers";
|
|
3929
4106
|
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";
|
|
4107
|
+
if (category === "webFrontend" && currentStack.botProtection === "botid" && optionId !== "none" && !isBotIdWebFrontend(optionId)) return "Vercel BotID is only available for Next.js frontends";
|
|
4108
|
+
if (category === "webDeploy" && currentStack.botProtection === "botid" && optionId !== "none" && optionId !== "vercel") return "Vercel BotID requires Vercel deployment";
|
|
4109
|
+
if (category === "analytics" && optionId === "vercel-analytics") {
|
|
4110
|
+
if (!currentStack.webFrontend.some((frontend) => frontend !== "none")) return "Vercel Analytics requires a web frontend";
|
|
4111
|
+
if (!supportsAnalyticsFrontends("vercel-analytics", currentStack.webFrontend)) return "Vercel Analytics is not yet mounted for the selected frontend";
|
|
4112
|
+
}
|
|
4113
|
+
if (category === "webFrontend" && currentStack.analytics === "vercel-analytics" && optionId !== "none" && !isVercelAnalyticsFrontend(optionId)) return "The selected frontend does not yet mount Vercel Analytics";
|
|
3930
4114
|
const graphDisabledReason = category === "payments" && optionId === "revenuecat" || category === "i18n" && optionId === "intlayer" ? {
|
|
3931
4115
|
handled: false,
|
|
3932
4116
|
authoritative: false,
|
|
@@ -4077,8 +4261,17 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
4077
4261
|
"elysia"
|
|
4078
4262
|
].includes(currentStack.backend)) return "Apollo Server currently supports Hono, Effect, Express, Fastify, and Elysia backends";
|
|
4079
4263
|
}
|
|
4080
|
-
if (category === "appPlatforms" &&
|
|
4081
|
-
|
|
4264
|
+
if (category === "appPlatforms" && [
|
|
4265
|
+
"turborepo",
|
|
4266
|
+
"nx",
|
|
4267
|
+
"vite-plus"
|
|
4268
|
+
].includes(optionId)) {
|
|
4269
|
+
if (currentStack.appPlatforms.find((selected) => selected !== optionId && [
|
|
4270
|
+
"turborepo",
|
|
4271
|
+
"nx",
|
|
4272
|
+
"vite-plus"
|
|
4273
|
+
].includes(selected))) return "Choose one workspace runner: Turborepo, Nx, or Vite+";
|
|
4274
|
+
}
|
|
4082
4275
|
if (category === "astroIntegration") {
|
|
4083
4276
|
if (!currentStack.webFrontend.includes("astro") && optionId !== "none") return "Astro integration requires Astro frontend";
|
|
4084
4277
|
if (currentStack.webFrontend.includes("astro") && currentStack.api === "apollo-server" && optionId !== "react") return "Apollo Server requires React integration with Astro";
|
|
@@ -4147,6 +4340,19 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
4147
4340
|
if (currentStack.backend === "convex") return "Rate limiting helpers are not generated with Convex backend";
|
|
4148
4341
|
if (currentStack.backend === "none") return "Rate limiting requires a backend";
|
|
4149
4342
|
}
|
|
4343
|
+
if (category === "botProtection" && optionId !== "none") {
|
|
4344
|
+
if (currentStack.ecosystem !== "typescript") return "Bot protection is currently available for TypeScript web applications";
|
|
4345
|
+
const webFrontends = currentStack.webFrontend.filter((frontend) => frontend !== "none");
|
|
4346
|
+
if (webFrontends.length === 0) return "Bot protection requires a web frontend";
|
|
4347
|
+
if (currentStack.nativeFrontend.some((frontend) => frontend !== "none")) return "Bot protection is not supported when a native frontend is selected";
|
|
4348
|
+
if (currentStack.auth !== "better-auth" && currentStack.auth !== "better-auth-organizations") return "Bot protection requires Better Auth";
|
|
4349
|
+
if (optionId === "botid" && webFrontends.some((frontend) => !isBotIdWebFrontend(frontend))) return "Vercel BotID is only available for Next.js frontends";
|
|
4350
|
+
if (optionId === "botid" && currentStack.backend !== "self-next") return "Vercel BotID requires the self-hosted Next.js backend";
|
|
4351
|
+
if (optionId === "botid" && currentStack.webDeploy !== "none" && currentStack.webDeploy !== "vercel") return "Vercel BotID requires Vercel deployment when a web deployment is selected";
|
|
4352
|
+
if (optionId === "turnstile" && webFrontends.some((frontend) => !isTurnstileWebFrontend(frontend))) return "Cloudflare Turnstile is currently wired for React web frontends only";
|
|
4353
|
+
if (optionId === "turnstile" && currentStack.backend === "convex") return "Cloudflare Turnstile is not wired for Convex auth forms";
|
|
4354
|
+
if (optionId === "turnstile" && currentStack.backend === "none") return "Cloudflare Turnstile requires a backend for server-side verification";
|
|
4355
|
+
}
|
|
4150
4356
|
if (category === "search" && optionId === "bleve" && currentStack.ecosystem !== "go") return "Bleve is an embedded Go search engine, only available for the Go ecosystem";
|
|
4151
4357
|
if (category === "search" && optionId !== "none") {
|
|
4152
4358
|
if (currentStack.ecosystem !== "typescript") return null;
|
|
@@ -4500,7 +4706,7 @@ function getAddonOrExampleGraphBinding(category, optionId) {
|
|
|
4500
4706
|
ecosystem: binding.ecosystem,
|
|
4501
4707
|
ownerRole: binding.ownerRole,
|
|
4502
4708
|
ownerEcosystem: binding.ownerRole ? binding.ecosystem : void 0,
|
|
4503
|
-
allowOwnerlessCandidate: binding.ownerRole
|
|
4709
|
+
allowOwnerlessCandidate: binding.ownerRole !== "frontend",
|
|
4504
4710
|
authoritative: true,
|
|
4505
4711
|
missingOwnerReason: binding.ownerRole === "frontend" ? `${optionId} requires a web frontend` : void 0
|
|
4506
4712
|
};
|
|
@@ -5204,6 +5410,7 @@ const ADDON_COMPATIBILITY = {
|
|
|
5204
5410
|
gitleaks: [],
|
|
5205
5411
|
turborepo: [],
|
|
5206
5412
|
nx: [],
|
|
5413
|
+
"vite-plus": [],
|
|
5207
5414
|
starlight: [],
|
|
5208
5415
|
ultracite: [],
|
|
5209
5416
|
ruler: [],
|
|
@@ -5583,7 +5790,7 @@ function validateAddonCompatibility(addon, frontend, _auth) {
|
|
|
5583
5790
|
if (compatibleFrontends.length > 0) {
|
|
5584
5791
|
if (!frontend.some((f) => compatibleFrontends.includes(f))) return {
|
|
5585
5792
|
isCompatible: false,
|
|
5586
|
-
reason: `${addon}
|
|
5793
|
+
reason: `${addon} requires one of these frontends: ${compatibleFrontends.join(", ")}`
|
|
5587
5794
|
};
|
|
5588
5795
|
}
|
|
5589
5796
|
return { isCompatible: true };
|
|
@@ -5689,6 +5896,7 @@ function evaluateCompatibility(input) {
|
|
|
5689
5896
|
["featureFlags", input.featureFlags],
|
|
5690
5897
|
["integrations", input.integrations],
|
|
5691
5898
|
["ecommerce", input.ecommerce],
|
|
5899
|
+
["botProtection", input.botProtection],
|
|
5692
5900
|
["pythonApi", input.pythonApi],
|
|
5693
5901
|
["javaWebFramework", input.javaWebFramework],
|
|
5694
5902
|
["javaBuildTool", input.javaBuildTool],
|
|
@@ -5866,6 +6074,7 @@ const DEFAULT_STACK_SELECTION = {
|
|
|
5866
6074
|
jobQueue: "none",
|
|
5867
6075
|
caching: "none",
|
|
5868
6076
|
rateLimit: "none",
|
|
6077
|
+
botProtection: "none",
|
|
5869
6078
|
i18n: "none",
|
|
5870
6079
|
animation: "none",
|
|
5871
6080
|
cssFramework: "tailwind",
|
|
@@ -6040,6 +6249,7 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
|
|
|
6040
6249
|
jobQueue: "jobQueue",
|
|
6041
6250
|
caching: "caching",
|
|
6042
6251
|
rateLimit: "rateLimit",
|
|
6252
|
+
botProtection: "botProtection",
|
|
6043
6253
|
i18n: "i18n",
|
|
6044
6254
|
animation: "animation",
|
|
6045
6255
|
cssFramework: "cssFramework",
|
|
@@ -6227,6 +6437,7 @@ const STACK_SELECTION_URL_KEYS = {
|
|
|
6227
6437
|
jobQueue: "jq",
|
|
6228
6438
|
caching: "cache",
|
|
6229
6439
|
rateLimit: "rl",
|
|
6440
|
+
botProtection: "bp",
|
|
6230
6441
|
i18n: "i18n",
|
|
6231
6442
|
animation: "anim",
|
|
6232
6443
|
cssFramework: "css",
|
|
@@ -6484,6 +6695,7 @@ const CLI_SCALAR_CONFIG_FIELDS = [
|
|
|
6484
6695
|
["vectorDb", "vectorDb"],
|
|
6485
6696
|
["fileStorage", "fileStorage"],
|
|
6486
6697
|
["analytics", "analytics"],
|
|
6698
|
+
["botProtection", "botProtection"],
|
|
6487
6699
|
["mobileNavigation", "mobileNavigation"],
|
|
6488
6700
|
["mobileUI", "mobileUI"],
|
|
6489
6701
|
["mobileStorage", "mobileStorage"],
|
|
@@ -6770,14 +6982,21 @@ function toUniqueNonNoneArray(values) {
|
|
|
6770
6982
|
function formatArrayFlag(flag, values) {
|
|
6771
6983
|
return `--${flag} ${toUniqueNonNoneArray(values).join(" ") || "none"}`;
|
|
6772
6984
|
}
|
|
6773
|
-
function
|
|
6774
|
-
const
|
|
6985
|
+
function formatTypeScriptCapabilityParts(selection) {
|
|
6986
|
+
const selectedAddons = toUniqueNonNoneArray([
|
|
6775
6987
|
...selection.codeQuality,
|
|
6776
6988
|
...selection.documentation,
|
|
6777
6989
|
...selection.appPlatforms
|
|
6778
|
-
];
|
|
6779
|
-
|
|
6780
|
-
|
|
6990
|
+
]);
|
|
6991
|
+
const specs = selectedAddons.flatMap((toolId) => {
|
|
6992
|
+
const binding = getAddonStackPartBinding(toolId);
|
|
6993
|
+
if (!binding) return [];
|
|
6994
|
+
return [`--part ${binding.ownerRole ? `${binding.ownerRole}.` : ""}${binding.role}:${binding.ecosystem}:${toolId}`];
|
|
6995
|
+
});
|
|
6996
|
+
return [...selectedAddons.some((toolId) => {
|
|
6997
|
+
const category = getToolingCapability(toolId)?.category;
|
|
6998
|
+
return category === "workspaceRunner" || category === "toolchain";
|
|
6999
|
+
}) ? [] : ["--addons none"], ...specs].join(" ");
|
|
6781
7000
|
}
|
|
6782
7001
|
const GRAPH_SHADCN_FLAG_KEYS = [
|
|
6783
7002
|
["shadcnBase", "shadcn-base"],
|
|
@@ -6812,7 +7031,8 @@ const GRAPH_TYPESCRIPT_FRONTEND_PART_SELECTION_KEYS = [
|
|
|
6812
7031
|
["animation", "animation"],
|
|
6813
7032
|
["fileUpload", "fileUpload"],
|
|
6814
7033
|
["i18n", "i18n"],
|
|
6815
|
-
["analytics", "analytics"]
|
|
7034
|
+
["analytics", "analytics"],
|
|
7035
|
+
["botProtection", "botProtection"]
|
|
6816
7036
|
];
|
|
6817
7037
|
const GRAPH_TYPESCRIPT_BACKEND_PART_SELECTION_KEYS = [
|
|
6818
7038
|
["runtime", "runtime"],
|
|
@@ -6964,6 +7184,7 @@ const GRAPH_TYPESCRIPT_FRONTEND_PART_CLI_KEYS = [
|
|
|
6964
7184
|
["fileUpload", "fileUpload"],
|
|
6965
7185
|
["i18n", "i18n"],
|
|
6966
7186
|
["analytics", "analytics"],
|
|
7187
|
+
["botProtection", "botProtection"],
|
|
6967
7188
|
["validation", "validation"],
|
|
6968
7189
|
["testing", "testing"]
|
|
6969
7190
|
];
|
|
@@ -7475,8 +7696,12 @@ function cliInputToProjectConfigPartial(input, projectName) {
|
|
|
7475
7696
|
if (Array.isArray(value)) assignableConfig[configKey] = processCliArrayOption(value);
|
|
7476
7697
|
}
|
|
7477
7698
|
if (Array.isArray(input.part) && input.part.length > 0) {
|
|
7478
|
-
const
|
|
7479
|
-
|
|
7699
|
+
const providedStackParts = parseStackPartSpecs(input.part, "selected");
|
|
7700
|
+
if (isToolingOverlayOnly(providedStackParts)) config.stackParts = providedStackParts;
|
|
7701
|
+
else {
|
|
7702
|
+
const stackParts = getCliGraphStackParts(input);
|
|
7703
|
+
Object.assign(config, stackPartsToLegacyProjectConfigPartial(stackParts), { stackParts });
|
|
7704
|
+
}
|
|
7480
7705
|
}
|
|
7481
7706
|
return config;
|
|
7482
7707
|
}
|
|
@@ -7593,6 +7818,7 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
|
|
|
7593
7818
|
cms: stack.cms,
|
|
7594
7819
|
caching: stack.caching,
|
|
7595
7820
|
rateLimit: stack.rateLimit,
|
|
7821
|
+
botProtection: stack.botProtection,
|
|
7596
7822
|
i18n: stack.i18n,
|
|
7597
7823
|
search: stack.search,
|
|
7598
7824
|
vectorDb: stack.vectorDb,
|
|
@@ -7829,6 +8055,7 @@ function generateTypeScriptCommand(selection, projectName) {
|
|
|
7829
8055
|
`--job-queue ${selection.jobQueue}`,
|
|
7830
8056
|
`--caching ${selection.caching}`,
|
|
7831
8057
|
`--rate-limit ${selection.rateLimit}`,
|
|
8058
|
+
`--bot-protection ${selection.botProtection}`,
|
|
7832
8059
|
`--i18n ${selection.i18n}`,
|
|
7833
8060
|
`--search ${selection.search}`,
|
|
7834
8061
|
`--vector-db ${selection.vectorDb}`,
|
|
@@ -7851,7 +8078,7 @@ function generateTypeScriptCommand(selection, projectName) {
|
|
|
7851
8078
|
`--web-deploy ${selection.webDeploy}`,
|
|
7852
8079
|
`--server-deploy ${selection.serverDeploy}`,
|
|
7853
8080
|
selection.install === "false" ? "--no-install" : "--install",
|
|
7854
|
-
|
|
8081
|
+
formatTypeScriptCapabilityParts(selection),
|
|
7855
8082
|
formatArrayFlag("examples", selection.examples),
|
|
7856
8083
|
formatArrayFlag("ai-docs", selection.aiDocs)
|
|
7857
8084
|
];
|
|
@@ -8070,5 +8297,5 @@ function generateStackSelectionCommand(selection) {
|
|
|
8070
8297
|
}
|
|
8071
8298
|
|
|
8072
8299
|
//#endregion
|
|
8073
|
-
export {
|
|
8074
|
-
//# sourceMappingURL=stack-translation-
|
|
8300
|
+
export { supportsAnalyticsFrontends as $, getAIFrontendCompatibilityIssue as A, isAnalyticsFrontendSupported as B, usesVirtualNoneStackSelection as C, allowedApisForFrontends as D, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as E, getCompatibleUILibraries as F, isSignozSupportedPythonWebFramework as G, isFrontendAllowedWithBackend as H, getDisabledReason as I, isWebFrontend as J, isTurnstileWebFrontend as K, getKotlinJavaIncompatibilityReason as L, getCompatibleAddons as M, getCompatibleCSSFrameworks as N, analyzeStackCompatibility as O, getCompatibleFormLibraries as P, stackQualifiesForSingleApp as Q, hasSignozSupportedGoServerTarget as R, stackSelectionToProjectConfig as S, normalizeCapabilitySelection as St, KOTLIN_DROPPED_JAVA_LIBRARIES as T, isOptionCompatible as U, isBotIdWebFrontend as V, isSignozSupportedGoWebFramework as W, requiresChatSdkVercelAIForSelection as X, requiresChatSdkVercelAI as Y, splitFrontends as Z, normalizeStackSelectionValue as _, isMultiSelectCategory as _t, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as a, GO_CATEGORY_ORDER as at, processCliArrayOption as b, getCapabilityDisabledReason as bt, cliInputToProjectConfigPartial as c, PYTHON_CATEGORY_ORDER as ct, generateStackSelectionCommand as d, TYPESCRIPT_CATEGORY_ORDER as dt, validateAddonCompatibility as et, isArrayStackSelectionKey as f, getCategoryCliValues as ft, normalizeStackSelection as g, getOptionMetadata as gt, isStackSelectionDefault as h, getCategoryOrderForEcosystem as ht, STACK_SELECTION_KEYS as i, ELIXIR_CATEGORY_ORDER as it, getApiFrontendCompatibilityIssue as j, evaluateCompatibility as k, cloneDefaultStackSelection as l, REACT_NATIVE_CATEGORY_ORDER as lt, isGraphStackSelection as m, getCategoryOptionIds as mt, NON_OPTION_STACK_SELECTION_KEYS as n, CATEGORY_ORDER as nt, STACK_SELECTION_URL_KEYS as o, JAVA_CATEGORY_ORDER as ot, isCliDefaultStackSelection as p, getCategoryDisplayName as pt, isVercelAnalyticsFrontend as q, PACKAGE_MANAGER_COMMANDS as r, DOTNET_CATEGORY_ORDER as rt, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as s, OPTION_CATEGORY_METADATA as st, DEFAULT_STACK_SELECTION as t, validateProjectName as tt, createStackSelectionSearchParams as u, RUST_CATEGORY_ORDER as ut, parseStackSelectionFromSearch as v, normalizeOptionId as vt, ANALYTICS_FRONTEND_SUPPORT as w, stackSelectionToCliComparableConfig as x, getSupportedCapabilityOptions as xt, parseStackSelectionFromUrlRecord as y, getCapabilityDefinitions as yt, hasWebStyling as z };
|
|
8301
|
+
//# sourceMappingURL=stack-translation-Cn6zGJ5q.mjs.map
|