@better-fullstack/types 2.2.0 → 2.3.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.
Files changed (44) hide show
  1. package/dist/{defaults-DyNR1d-V.d.mts → defaults-BT-WhLPX.d.mts} +2 -2
  2. package/dist/defaults-BT-WhLPX.d.mts.map +1 -0
  3. package/dist/{defaults-DgL5YPQY.mjs → defaults-Cl16mM84.mjs} +10 -1
  4. package/dist/defaults-Cl16mM84.mjs.map +1 -0
  5. package/dist/defaults.d.mts +3 -3
  6. package/dist/defaults.mjs +1 -1
  7. package/dist/index.d.mts +6 -6
  8. package/dist/index.d.mts.map +1 -1
  9. package/dist/index.mjs +89 -5
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/json-schema.d.mts +1261 -1
  12. package/dist/json-schema.d.mts.map +1 -1
  13. package/dist/json-schema.mjs +10 -2
  14. package/dist/json-schema.mjs.map +1 -1
  15. package/dist/{schemas-l7hOhH8U.mjs → schemas-CprYz5Sh.mjs} +142 -4
  16. package/dist/schemas-CprYz5Sh.mjs.map +1 -0
  17. package/dist/{schemas-D9kkuJz7.d.mts → schemas-q5-QVYJy.d.mts} +1146 -9
  18. package/dist/schemas-q5-QVYJy.d.mts.map +1 -0
  19. package/dist/schemas.d.mts +2 -2
  20. package/dist/schemas.mjs +2 -2
  21. package/dist/{stack-graph-F6UKYYR0.d.mts → stack-graph-CgFYIeir.d.mts} +2 -2
  22. package/dist/{stack-graph-F6UKYYR0.d.mts.map → stack-graph-CgFYIeir.d.mts.map} +1 -1
  23. package/dist/{stack-graph-C8r3fTh4.mjs → stack-graph-DiLi3WuL.mjs} +51 -9
  24. package/dist/stack-graph-DiLi3WuL.mjs.map +1 -0
  25. package/dist/stack-graph.d.mts +3 -3
  26. package/dist/stack-graph.mjs +2 -2
  27. package/dist/{stack-translation-Kr0TyRAm.mjs → stack-translation-Ay-_1mNB.mjs} +418 -21
  28. package/dist/stack-translation-Ay-_1mNB.mjs.map +1 -0
  29. package/dist/{stack-translation-BNHNx5_b.d.mts → stack-translation-CU1kpqq3.d.mts} +26 -8
  30. package/dist/stack-translation-CU1kpqq3.d.mts.map +1 -0
  31. package/dist/stack-translation.d.mts +4 -4
  32. package/dist/stack-translation.mjs +3 -3
  33. package/dist/{types-C7RpHf2e.d.mts → types-Cp7krSdb.d.mts} +12 -3
  34. package/dist/types-Cp7krSdb.d.mts.map +1 -0
  35. package/dist/types.d.mts +3 -3
  36. package/package.json +1 -1
  37. package/dist/defaults-DgL5YPQY.mjs.map +0 -1
  38. package/dist/defaults-DyNR1d-V.d.mts.map +0 -1
  39. package/dist/schemas-D9kkuJz7.d.mts.map +0 -1
  40. package/dist/schemas-l7hOhH8U.mjs.map +0 -1
  41. package/dist/stack-graph-C8r3fTh4.mjs.map +0 -1
  42. package/dist/stack-translation-BNHNx5_b.d.mts.map +0 -1
  43. package/dist/stack-translation-Kr0TyRAm.mjs.map +0 -1
  44. package/dist/types-C7RpHf2e.d.mts.map +0 -1
@@ -1,6 +1,6 @@
1
- import { $i as SERVER_DEPLOY_VALUES, $n as JAVA_AUTH_VALUES, $r as PYTHON_WEB_FRAMEWORK_VALUES, A as CSS_FRAMEWORK_VALUES, Aa as VERSION_CHANNEL_VALUES, Ai as RUST_OBSERVABILITY_VALUES, An as GO_WEB_FRAMEWORK_VALUES, At as EMAIL_VALUES, B as DOTNET_JOB_QUEUE_VALUES, Br as PYTHON_AI_VALUES, Ca as TESTING_VALUES, Ci as RUST_CACHING_VALUES, Cn as GO_ORM_VALUES, Cr as MOBILE_PUSH_VALUES, Ct as ELIXIR_OBSERVABILITY_VALUES, Da as UI_LIBRARY_VALUES, Di as RUST_LIBRARIES_VALUES, Dn as GO_TEMPLATING_VALUES, Dt as ELIXIR_TESTING_VALUES, Ei as RUST_FRONTEND_VALUES, En as GO_REALTIME_VALUES, Er as MOBILE_UI_VALUES, Et as ELIXIR_REALTIME_VALUES, Fa as WORKSPACE_SHAPE_VALUES, G as DOTNET_VALIDATION_VALUES, Gr as PYTHON_GRAPHQL_VALUES, H as DOTNET_ORM_VALUES, Hr as PYTHON_AUTH_VALUES, I as DOTNET_API_VALUES, Ir as ORM_VALUES, Jr as PYTHON_QUALITY_VALUES, K as DOTNET_WEB_FRAMEWORK_VALUES, Kr as PYTHON_OBSERVABILITY_VALUES, L as DOTNET_AUTH_VALUES, Mi as RUST_REALTIME_VALUES, N as DATABASE_SETUP_VALUES, Ni as RUST_TEMPLATING_VALUES, O as CMS_VALUES, Oa as VALIDATION_VALUES, Oi as RUST_LOGGING_VALUES, On as GO_TESTING_VALUES, Ot as ELIXIR_VALIDATION_VALUES, P as DATABASE_VALUES, Pa as WEB_DEPLOY_VALUES, Pi as RUST_WEB_FRAMEWORK_VALUES, Pr as OBSERVABILITY_VALUES, Qi as SEARCH_VALUES, Qn as JAVA_API_VALUES, Qr as PYTHON_VALIDATION_VALUES, R as DOTNET_CACHING_VALUES, Rr as PACKAGE_MANAGER_VALUES, Si as RUST_AUTH_VALUES, Sn as GO_OBSERVABILITY_VALUES, Sr as MOBILE_OTA_VALUES, St as ELIXIR_LIBRARIES_VALUES, T as CACHING_VALUES, Ti as RUST_ERROR_HANDLING_VALUES, Tn as GO_QUALITY_VALUES, Tr as MOBILE_TESTING_VALUES, Tt as ELIXIR_QUALITY_VALUES, U as DOTNET_REALTIME_VALUES, Ur as PYTHON_CACHING_VALUES, V as DOTNET_OBSERVABILITY_VALUES, Vr as PYTHON_API_VALUES, W as DOTNET_TESTING_VALUES, Wr as PYTHON_CLI_VALUES, Xr as PYTHON_TASK_QUEUE_VALUES, Yn as I18N_VALUES, Yr as PYTHON_REALTIME_VALUES, Zr as PYTHON_TESTING_VALUES, _n as GO_CONFIG_VALUES, _t as ELIXIR_HTTP_SERVER_VALUES, a as ANALYTICS_VALUES, aa as SHADCN_RADIUS_VALUES, an as FILE_UPLOAD_VALUES, ar as JAVA_TESTING_LIBRARIES_VALUES, bi as RUNTIME_VALUES, bn as GO_MESSAGE_QUEUE_VALUES, br as MOBILE_DEEP_LINKING_VALUES, bt as ELIXIR_JOBS_VALUES, c as API_VALUES, ct as EFFECT_VALUES, d as AUTH_VALUES, dt as ELIXIR_AUTH_VALUES, ea as SHADCN_BASE_COLOR_VALUES, er as JAVA_BUILD_TOOL_VALUES, ft as ELIXIR_CACHING_VALUES, gn as GO_CLI_VALUES, gt as ELIXIR_EMAIL_VALUES, hn as GO_CACHING_VALUES, ht as ELIXIR_DOCUMENTATION_VALUES, i as AI_VALUES, ia as SHADCN_ICON_LIBRARY_VALUES, in as FILE_STORAGE_VALUES, ir as JAVA_ORM_VALUES, ji as RUST_ORM_VALUES, ka as VECTOR_DB_VALUES, ki as RUST_MESSAGE_QUEUE_VALUES, kn as GO_VALIDATION_VALUES, kt as ELIXIR_WEB_FRAMEWORK_VALUES, l as APP_PLATFORM_ADDON_VALUES, lt as ELIXIR_API_VALUES, mn as GO_AUTH_VALUES, mt as ELIXIR_DEPLOY_VALUES, na as SHADCN_COLOR_THEME_VALUES, nr as JAVA_LIBRARIES_VALUES, o as ANIMATION_VALUES, oa as SHADCN_STYLE_VALUES, on as FORMS_VALUES, or as JAVA_WEB_FRAMEWORK_VALUES, pn as GO_API_VALUES, pt as ELIXIR_CLUSTERING_VALUES, qr as PYTHON_ORM_VALUES, r as AI_DOCS_VALUES, ra as SHADCN_FONT_VALUES, rn as FEATURE_FLAGS_VALUES, rr as JAVA_LOGGING_VALUES, sa as STATE_MANAGEMENT_VALUES, sr as JOB_QUEUE_VALUES, ta as SHADCN_BASE_VALUES, tr as JAVA_LANGUAGE_VALUES, u as ASTRO_INTEGRATION_VALUES, ut as ELIXIR_APPLICATION_FRAMEWORK_VALUES, vi as RATE_LIMIT_VALUES, vn as GO_DI_VALUES, vr as LOGGING_VALUES, vt as ELIXIR_HTTP_VALUES, wi as RUST_CLI_VALUES, wn as GO_PROTO_TOOLING_VALUES, wr as MOBILE_STORAGE_VALUES, wt as ELIXIR_ORM_VALUES, xi as RUST_API_VALUES, xn as GO_MIGRATIONS_VALUES, xr as MOBILE_NAVIGATION_VALUES, xt as ELIXIR_JSON_VALUES, yi as REALTIME_VALUES, yn as GO_LOGGING_VALUES, yt as ELIXIR_I18N_VALUES, z as DOTNET_DEPLOY_VALUES, zr as PAYMENTS_VALUES } from "./schemas-l7hOhH8U.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-C8r3fTh4.mjs";
3
- import { t as createCliDefaultProjectConfigBase } from "./defaults-DgL5YPQY.mjs";
1
+ import { $a as WORKSPACE_SHAPE_VALUES, $r as PYTHON_MEDIA_VALUES, A as CSS_FRAMEWORK_VALUES, An as GO_TESTING_VALUES, At as ELIXIR_VALIDATION_VALUES, B as DOTNET_JOB_QUEUE_VALUES, Bi as RUST_AUTH_VALUES, Br as ORM_VALUES, Ca as SHADCN_RADIUS_VALUES, Cn as GO_MIGRATIONS_VALUES, Cr as MOBILE_LIBRARIES_VALUES, Ct as ELIXIR_JSON_VALUES, Dn as GO_QUALITY_VALUES, Dr as MOBILE_STORAGE_VALUES, Dt as ELIXIR_QUALITY_VALUES, En as GO_PROTO_TOOLING_VALUES, Er as MOBILE_PUSH_VALUES, Et as ELIXIR_ORM_VALUES, G as DOTNET_TESTING_VALUES, Ga as UI_LIBRARY_VALUES, Gi as RUST_LIBRARIES_VALUES, Gr as PYTHON_API_VALUES, H as DOTNET_OBSERVABILITY_VALUES, Hi as RUST_CLI_VALUES, Hr as PACKAGE_MANAGER_VALUES, I as DOTNET_API_VALUES, Ii as RATE_LIMIT_VALUES, Ja as VERSION_CHANNEL_VALUES, Ji as RUST_OBSERVABILITY_VALUES, Jr as PYTHON_CLI_VALUES, K as DOTNET_VALIDATION_VALUES, Ka as VALIDATION_VALUES, Ki as RUST_LOGGING_VALUES, Kr as PYTHON_AUTH_VALUES, L as DOTNET_AUTH_VALUES, Li as REALTIME_VALUES, Mn as GO_WEB_FRAMEWORK_VALUES, Mt as EMAIL_VALUES, N as DATABASE_SETUP_VALUES, O as CMS_VALUES, On as GO_REALTIME_VALUES, Or as MOBILE_TESTING_VALUES, Ot as ELIXIR_REALTIME_VALUES, P as DATABASE_VALUES, Qa as WEB_DEPLOY_VALUES, Qi as RUST_WEB_FRAMEWORK_VALUES, Qr as PYTHON_HTTP_CLIENT_VALUES, R as DOTNET_CACHING_VALUES, Ri as RUNTIME_VALUES, Rr as OBSERVABILITY_VALUES, Sa as SHADCN_ICON_LIBRARY_VALUES, Sn as GO_MESSAGE_QUEUE_VALUES, Sr as MOBILE_DEEP_LINKING_VALUES, St as ELIXIR_JOBS_VALUES, T as CACHING_VALUES, Ta as STATE_MANAGEMENT_VALUES, Tn as GO_ORM_VALUES, Tr as MOBILE_OTA_VALUES, Tt as ELIXIR_OBSERVABILITY_VALUES, U as DOTNET_ORM_VALUES, Ui as RUST_ERROR_HANDLING_VALUES, Ur as PAYMENTS_VALUES, V as DOTNET_LIBRARIES_VALUES, Va as TESTING_VALUES, Vi as RUST_CACHING_VALUES, W as DOTNET_REALTIME_VALUES, Wi as RUST_FRONTEND_VALUES, Wr as PYTHON_AI_VALUES, Xi as RUST_REALTIME_VALUES, Xr as PYTHON_DATA_VALUES, Yi as RUST_ORM_VALUES, Yr as PYTHON_CLOUD_SDK_VALUES, Zi as RUST_TEMPLATING_VALUES, Zn as I18N_VALUES, Zr as PYTHON_GRAPHQL_VALUES, _a as SERVER_DEPLOY_VALUES, _n as GO_CACHING_VALUES, _t as ELIXIR_DOCUMENTATION_VALUES, a as ANALYTICS_VALUES, ai as PYTHON_REALTIME_VALUES, an as FEATURE_FLAGS_VALUES, ar as JAVA_LOGGING_VALUES, ba as SHADCN_COLOR_THEME_VALUES, bn as GO_DI_VALUES, br as LOGGING_VALUES, bt as ELIXIR_HTTP_VALUES, c as API_VALUES, ci as PYTHON_TESTING_VALUES, cn as FORMS_VALUES, cr as JAVA_WEB_FRAMEWORK_VALUES, d as AUTH_VALUES, dt as ELIXIR_API_VALUES, ei as PYTHON_MESSAGE_QUEUE_VALUES, er as JAVA_API_VALUES, ft as ELIXIR_APPLICATION_FRAMEWORK_VALUES, ga as SEARCH_VALUES, gn as GO_AUTH_VALUES, gt as ELIXIR_DEPLOY_VALUES, hn as GO_API_VALUES, ht as ELIXIR_CLUSTERING_VALUES, i as AI_VALUES, ii as PYTHON_QUALITY_VALUES, ir as JAVA_LIBRARIES_VALUES, jn as GO_VALIDATION_VALUES, jt as ELIXIR_WEB_FRAMEWORK_VALUES, kn as GO_TEMPLATING_VALUES, kr as MOBILE_UI_VALUES, kt as ELIXIR_TESTING_VALUES, l as APP_PLATFORM_ADDON_VALUES, li as PYTHON_VALIDATION_VALUES, lr as JOB_QUEUE_VALUES, mt as ELIXIR_CACHING_VALUES, ni as PYTHON_ORM_VALUES, nr as JAVA_BUILD_TOOL_VALUES, o as ANIMATION_VALUES, oi as PYTHON_SERVER_VALUES, on as FILE_STORAGE_VALUES, or as JAVA_ORM_VALUES, pt as ELIXIR_AUTH_VALUES, q as DOTNET_WEB_FRAMEWORK_VALUES, qa as VECTOR_DB_VALUES, qi as RUST_MESSAGE_QUEUE_VALUES, qr as PYTHON_CACHING_VALUES, r as AI_DOCS_VALUES, ri as PYTHON_PACKAGE_MANAGER_VALUES, rr as JAVA_LANGUAGE_VALUES, si as PYTHON_TASK_QUEUE_VALUES, sn as FILE_UPLOAD_VALUES, sr as JAVA_TESTING_LIBRARIES_VALUES, ti as PYTHON_OBSERVABILITY_VALUES, tr as JAVA_AUTH_VALUES, u as ASTRO_INTEGRATION_VALUES, ui as PYTHON_WEB_FRAMEWORK_VALUES, ut as EFFECT_VALUES, va as SHADCN_BASE_COLOR_VALUES, vn as GO_CLI_VALUES, vt as ELIXIR_EMAIL_VALUES, wa as SHADCN_STYLE_VALUES, wn as GO_OBSERVABILITY_VALUES, wr as MOBILE_NAVIGATION_VALUES, wt as ELIXIR_LIBRARIES_VALUES, xa as SHADCN_FONT_VALUES, xn as GO_LOGGING_VALUES, xt as ELIXIR_I18N_VALUES, ya as SHADCN_BASE_VALUES, yn as GO_CONFIG_VALUES, yt as ELIXIR_HTTP_SERVER_VALUES, z as DOTNET_DEPLOY_VALUES, zi as RUST_API_VALUES } from "./schemas-CprYz5Sh.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-DiLi3WuL.mjs";
3
+ import { t as createCliDefaultProjectConfigBase } from "./defaults-Cl16mM84.mjs";
4
4
 
5
5
  //#region src/capabilities.ts
6
6
  const CAPABILITY_DEFINITIONS = { auth: [
@@ -311,6 +311,7 @@ const REACT_NATIVE_CATEGORY_ORDER = [
311
311
  "mobilePush",
312
312
  "mobileOTA",
313
313
  "mobileDeepLinking",
314
+ "mobileLibraries",
314
315
  "auth",
315
316
  "payments",
316
317
  "packageManager",
@@ -356,6 +357,13 @@ const PYTHON_CATEGORY_ORDER = [
356
357
  "pythonRealtime",
357
358
  "pythonObservability",
358
359
  "pythonCli",
360
+ "pythonCloudSdk",
361
+ "pythonHttpClient",
362
+ "pythonData",
363
+ "pythonMedia",
364
+ "pythonServer",
365
+ "pythonPackageManager",
366
+ "pythonMessageQueue",
359
367
  "email",
360
368
  "observability",
361
369
  "caching",
@@ -422,6 +430,7 @@ const DOTNET_CATEGORY_ORDER = [
422
430
  "dotnetValidation",
423
431
  "dotnetCaching",
424
432
  "dotnetDeploy",
433
+ "dotnetLibraries",
425
434
  "aiDocs",
426
435
  "git",
427
436
  "install"
@@ -486,6 +495,7 @@ function getCategoryDisplayName(categoryKey) {
486
495
  mobilePush: "Mobile Push",
487
496
  mobileOTA: "Mobile OTA",
488
497
  mobileDeepLinking: "Mobile Deep Linking",
498
+ mobileLibraries: "Mobile Libraries",
489
499
  backendLibraries: "Effect Services",
490
500
  rustWebFramework: "Rust Web Framework",
491
501
  rustFrontend: "Rust Frontend (WASM)",
@@ -515,6 +525,13 @@ function getCategoryDisplayName(categoryKey) {
515
525
  pythonRealtime: "Python Realtime",
516
526
  pythonObservability: "Python Observability",
517
527
  pythonCli: "Python CLI Tooling",
528
+ pythonCloudSdk: "Python Cloud SDK",
529
+ pythonHttpClient: "Python HTTP Client",
530
+ pythonData: "Python Data & Scientific Computing",
531
+ pythonMedia: "Python Media",
532
+ pythonServer: "Python Production Server",
533
+ pythonPackageManager: "Python Package Manager",
534
+ pythonMessageQueue: "Python Message Queue",
518
535
  goWebFramework: "Go Web Framework",
519
536
  goOrm: "Go ORM / Database",
520
537
  goApi: "Go API Layer",
@@ -553,6 +570,7 @@ function getCategoryDisplayName(categoryKey) {
553
570
  dotnetValidation: ".NET Validation",
554
571
  dotnetCaching: ".NET Caching",
555
572
  dotnetDeploy: ".NET Deploy",
573
+ dotnetLibraries: ".NET Libraries",
556
574
  elixirWebFramework: "Elixir Web Framework",
557
575
  elixirOrm: "Elixir ORM / Database",
558
576
  elixirAuth: "Elixir Auth",
@@ -676,11 +694,14 @@ const MULTI_SELECT_CATEGORIES = new Set([
676
694
  "pythonAi",
677
695
  "javaLibraries",
678
696
  "javaTestingLibraries",
697
+ "mobileLibraries",
698
+ "dotnetLibraries",
679
699
  "dotnetTesting",
680
700
  "dotnetObservability",
681
701
  "goTesting",
682
702
  "pythonTesting",
683
703
  "pythonCli",
704
+ "pythonData",
684
705
  "elixirLibraries"
685
706
  ]);
686
707
  const CATEGORY_VALUE_IDS = {
@@ -727,6 +748,7 @@ const CATEGORY_VALUE_IDS = {
727
748
  mobilePush: MOBILE_PUSH_VALUES,
728
749
  mobileOTA: MOBILE_OTA_VALUES,
729
750
  mobileDeepLinking: MOBILE_DEEP_LINKING_VALUES,
751
+ mobileLibraries: MOBILE_LIBRARIES_VALUES,
730
752
  codeQuality: CODE_QUALITY_VALUES,
731
753
  documentation: DOCUMENTATION_VALUES,
732
754
  appShells: APP_SHELL_VALUES,
@@ -775,6 +797,13 @@ const CATEGORY_VALUE_IDS = {
775
797
  pythonRealtime: PYTHON_REALTIME_VALUES,
776
798
  pythonObservability: PYTHON_OBSERVABILITY_VALUES,
777
799
  pythonCli: PYTHON_CLI_VALUES,
800
+ pythonCloudSdk: PYTHON_CLOUD_SDK_VALUES,
801
+ pythonHttpClient: PYTHON_HTTP_CLIENT_VALUES,
802
+ pythonData: PYTHON_DATA_VALUES,
803
+ pythonMedia: PYTHON_MEDIA_VALUES,
804
+ pythonServer: PYTHON_SERVER_VALUES,
805
+ pythonPackageManager: PYTHON_PACKAGE_MANAGER_VALUES,
806
+ pythonMessageQueue: PYTHON_MESSAGE_QUEUE_VALUES,
778
807
  goWebFramework: GO_WEB_FRAMEWORK_VALUES,
779
808
  goOrm: GO_ORM_VALUES,
780
809
  goApi: GO_API_VALUES,
@@ -813,6 +842,7 @@ const CATEGORY_VALUE_IDS = {
813
842
  dotnetValidation: DOTNET_VALIDATION_VALUES,
814
843
  dotnetCaching: DOTNET_CACHING_VALUES,
815
844
  dotnetDeploy: DOTNET_DEPLOY_VALUES,
845
+ dotnetLibraries: DOTNET_LIBRARIES_VALUES,
816
846
  elixirWebFramework: ELIXIR_WEB_FRAMEWORK_VALUES,
817
847
  elixirOrm: ELIXIR_ORM_VALUES,
818
848
  elixirAuth: ELIXIR_AUTH_VALUES,
@@ -1059,6 +1089,28 @@ const EXACT_LABEL_OVERRIDES = {
1059
1089
  mobilePush: { "expo-notifications": "Expo Notifications" },
1060
1090
  mobileOTA: { "expo-updates": "Expo Updates" },
1061
1091
  mobileDeepLinking: { "expo-linking": "Expo Linking" },
1092
+ mobileLibraries: {
1093
+ "expo-sqlite": "Expo SQLite",
1094
+ "expo-camera": "Expo Camera",
1095
+ "expo-image-picker": "Expo Image Picker",
1096
+ "expo-location": "Expo Location",
1097
+ "expo-sensors": "Expo Sensors",
1098
+ "expo-file-system": "Expo File System",
1099
+ "expo-image": "Expo Image",
1100
+ "expo-audio": "Expo Audio",
1101
+ "expo-video": "Expo Video",
1102
+ "expo-contacts": "Expo Contacts",
1103
+ "expo-calendar": "Expo Calendar",
1104
+ "expo-local-authentication": "Expo Local Authentication",
1105
+ "expo-sharing": "Expo Sharing",
1106
+ "expo-clipboard": "Expo Clipboard",
1107
+ "expo-task-manager": "Expo Task Manager",
1108
+ "expo-background-task": "Expo Background Task",
1109
+ "expo-maps": "Expo Maps",
1110
+ "expo-brightness": "Expo Brightness",
1111
+ "expo-battery": "Expo Battery",
1112
+ "expo-screen-capture": "Expo Screen Capture"
1113
+ },
1062
1114
  codeQuality: {
1063
1115
  biome: "Biome",
1064
1116
  eslint: "ESLint",
@@ -1273,13 +1325,16 @@ const EXACT_LABEL_OVERRIDES = {
1273
1325
  django: "Django",
1274
1326
  flask: "Flask",
1275
1327
  litestar: "Litestar",
1276
- starlette: "Starlette"
1328
+ starlette: "Starlette",
1329
+ aiohttp: "aiohttp",
1330
+ streamlit: "Streamlit"
1277
1331
  },
1278
1332
  pythonOrm: {
1279
1333
  sqlalchemy: "SQLAlchemy",
1280
1334
  sqlmodel: "SQLModel",
1281
1335
  "tortoise-orm": "Tortoise ORM",
1282
- peewee: "Peewee"
1336
+ peewee: "Peewee",
1337
+ pymongo: "PyMongo"
1283
1338
  },
1284
1339
  pythonValidation: { pydantic: "Pydantic" },
1285
1340
  pythonAi: {
@@ -1292,11 +1347,17 @@ const EXACT_LABEL_OVERRIDES = {
1292
1347
  haystack: "Haystack",
1293
1348
  "pydantic-ai": "Pydantic AI",
1294
1349
  "google-adk": "Google ADK",
1295
- smolagents: "smolagents"
1350
+ smolagents: "smolagents",
1351
+ pytorch: "PyTorch",
1352
+ transformers: "Transformers",
1353
+ "scikit-learn": "scikit-learn",
1354
+ tensorflow: "TensorFlow",
1355
+ mcp: "MCP Python SDK"
1296
1356
  },
1297
1357
  pythonAuth: {
1298
1358
  authlib: "Authlib",
1299
1359
  jwt: "JWT (python-jose)",
1360
+ pyjwt: "PyJWT",
1300
1361
  "fastapi-users": "FastAPI Users"
1301
1362
  },
1302
1363
  pythonApi: {
@@ -1321,7 +1382,8 @@ const EXACT_LABEL_OVERRIDES = {
1321
1382
  },
1322
1383
  pythonTesting: {
1323
1384
  pytest: "pytest",
1324
- hypothesis: "Hypothesis"
1385
+ hypothesis: "Hypothesis",
1386
+ "pytest-cov": "pytest-cov"
1325
1387
  },
1326
1388
  pythonCaching: {
1327
1389
  redis: "redis-py",
@@ -1331,12 +1393,29 @@ const EXACT_LABEL_OVERRIDES = {
1331
1393
  "python-socketio": "python-socketio",
1332
1394
  websockets: "websockets"
1333
1395
  },
1334
- pythonObservability: { opentelemetry: "OpenTelemetry" },
1396
+ pythonObservability: {
1397
+ opentelemetry: "OpenTelemetry",
1398
+ "prometheus-client": "Prometheus Client"
1399
+ },
1335
1400
  pythonCli: {
1336
1401
  typer: "Typer",
1337
1402
  click: "Click",
1338
1403
  rich: "Rich"
1339
1404
  },
1405
+ pythonCloudSdk: { boto3: "Boto3" },
1406
+ pythonHttpClient: { requests: "Requests" },
1407
+ pythonData: {
1408
+ numpy: "NumPy",
1409
+ pandas: "pandas",
1410
+ scipy: "SciPy"
1411
+ },
1412
+ pythonMedia: { pillow: "Pillow" },
1413
+ pythonServer: { gunicorn: "Gunicorn" },
1414
+ pythonPackageManager: {
1415
+ uv: "uv",
1416
+ poetry: "Poetry"
1417
+ },
1418
+ pythonMessageQueue: { "confluent-kafka": "Confluent Kafka" },
1340
1419
  goWebFramework: {
1341
1420
  gin: "Gin",
1342
1421
  echo: "Echo",
@@ -1459,7 +1538,27 @@ const EXACT_LABEL_OVERRIDES = {
1459
1538
  "micrometer-prometheus": "Micrometer Prometheus",
1460
1539
  thymeleaf: "Thymeleaf",
1461
1540
  "spring-amqp": "Spring AMQP (RabbitMQ)",
1462
- "opentelemetry-java": "OpenTelemetry"
1541
+ "opentelemetry-java": "OpenTelemetry",
1542
+ "spring-data-redis": "Spring Data Redis",
1543
+ "spring-data-mongodb": "Spring Data MongoDB",
1544
+ "spring-data-elasticsearch": "Spring Data Elasticsearch",
1545
+ "spring-data-neo4j": "Spring Data Neo4j",
1546
+ "spring-data-cassandra": "Spring Data Cassandra",
1547
+ "spring-data-couchbase": "Spring Data Couchbase",
1548
+ "spring-data-jdbc": "Spring Data JDBC",
1549
+ "spring-data-rest": "Spring Data REST",
1550
+ "spring-quartz": "Quartz Scheduler",
1551
+ "spring-pulsar": "Spring for Apache Pulsar",
1552
+ "spring-integration": "Spring Integration",
1553
+ "spring-websocket": "Spring WebSocket",
1554
+ "spring-rsocket": "Spring RSocket",
1555
+ "spring-hateoas": "Spring HATEOAS",
1556
+ "spring-session-redis": "Spring Session Redis",
1557
+ "spring-session-jdbc": "Spring Session JDBC",
1558
+ "spring-ldap": "Spring LDAP",
1559
+ "spring-oauth2-client": "Spring Security OAuth2 Client",
1560
+ "spring-saml2": "Spring Security SAML2",
1561
+ "spring-restclient": "Spring REST Client"
1463
1562
  },
1464
1563
  javaTestingLibraries: {
1465
1564
  junit5: "JUnit 5",
@@ -1523,6 +1622,28 @@ const EXACT_LABEL_OVERRIDES = {
1523
1622
  azure: "Azure",
1524
1623
  aws: "AWS"
1525
1624
  },
1625
+ dotnetLibraries: {
1626
+ automapper: "AutoMapper",
1627
+ mediatr: "MediatR",
1628
+ fastendpoints: "FastEndpoints",
1629
+ "api-versioning": "ASP.NET API Versioning",
1630
+ scalar: "Scalar",
1631
+ polly: "Polly",
1632
+ masstransit: "MassTransit",
1633
+ rebus: "Rebus",
1634
+ coravel: "Coravel",
1635
+ "magic-onion": "MagicOnion",
1636
+ "prometheus-net": "prometheus-net",
1637
+ seq: "Seq",
1638
+ "application-insights": "Application Insights",
1639
+ sentry: "Sentry",
1640
+ "mongodb-driver": "MongoDB Driver",
1641
+ nhibernate: "NHibernate",
1642
+ mapster: "Mapster",
1643
+ scrutor: "Scrutor",
1644
+ refit: "Refit",
1645
+ "fluent-email": "FluentEmail"
1646
+ },
1526
1647
  elixirWebFramework: {
1527
1648
  phoenix: "Phoenix",
1528
1649
  "phoenix-live-view": "Phoenix LiveView"
@@ -1719,6 +1840,7 @@ const OPTION_CATEGORY_METADATA = {
1719
1840
  mobilePush: buildCategoryMetadata("mobilePush"),
1720
1841
  mobileOTA: buildCategoryMetadata("mobileOTA"),
1721
1842
  mobileDeepLinking: buildCategoryMetadata("mobileDeepLinking"),
1843
+ mobileLibraries: buildCategoryMetadata("mobileLibraries"),
1722
1844
  codeQuality: buildCategoryMetadata("codeQuality"),
1723
1845
  documentation: buildCategoryMetadata("documentation"),
1724
1846
  appShells: buildCategoryMetadata("appShells"),
@@ -1767,6 +1889,13 @@ const OPTION_CATEGORY_METADATA = {
1767
1889
  pythonRealtime: buildCategoryMetadata("pythonRealtime"),
1768
1890
  pythonObservability: buildCategoryMetadata("pythonObservability"),
1769
1891
  pythonCli: buildCategoryMetadata("pythonCli"),
1892
+ pythonCloudSdk: buildCategoryMetadata("pythonCloudSdk"),
1893
+ pythonHttpClient: buildCategoryMetadata("pythonHttpClient"),
1894
+ pythonData: buildCategoryMetadata("pythonData"),
1895
+ pythonMedia: buildCategoryMetadata("pythonMedia"),
1896
+ pythonServer: buildCategoryMetadata("pythonServer"),
1897
+ pythonPackageManager: buildCategoryMetadata("pythonPackageManager"),
1898
+ pythonMessageQueue: buildCategoryMetadata("pythonMessageQueue"),
1770
1899
  goWebFramework: buildCategoryMetadata("goWebFramework"),
1771
1900
  goOrm: buildCategoryMetadata("goOrm"),
1772
1901
  goApi: buildCategoryMetadata("goApi"),
@@ -1805,6 +1934,7 @@ const OPTION_CATEGORY_METADATA = {
1805
1934
  dotnetValidation: buildCategoryMetadata("dotnetValidation"),
1806
1935
  dotnetCaching: buildCategoryMetadata("dotnetCaching"),
1807
1936
  dotnetDeploy: buildCategoryMetadata("dotnetDeploy"),
1937
+ dotnetLibraries: buildCategoryMetadata("dotnetLibraries"),
1808
1938
  elixirWebFramework: buildCategoryMetadata("elixirWebFramework"),
1809
1939
  elixirOrm: buildCategoryMetadata("elixirOrm"),
1810
1940
  elixirAuth: buildCategoryMetadata("elixirAuth"),
@@ -2838,6 +2968,14 @@ const analyzeStackCompatibility = (stack) => {
2838
2968
  message
2839
2969
  });
2840
2970
  }
2971
+ if ((nextStack.mobileLibraries?.length ?? 0) > 0) {
2972
+ nextStack.mobileLibraries = [];
2973
+ changed = true;
2974
+ changes.push({
2975
+ category: "mobileLibraries",
2976
+ message: "Mobile libraries cleared (no native frontend)"
2977
+ });
2978
+ }
2841
2979
  } else {
2842
2980
  if (nextStack.mobileNavigation === "none") {
2843
2981
  nextStack.mobileNavigation = "expo-router";
@@ -3125,6 +3263,62 @@ const analyzeStackCompatibility = (stack) => {
3125
3263
  message: "Python API framework set to 'None' (DRF and Django Ninja require Django)"
3126
3264
  });
3127
3265
  }
3266
+ if (nextStack.pythonOrm === "pymongo" && nextStack.database !== "mongodb") {
3267
+ nextStack.database = "mongodb";
3268
+ changed = true;
3269
+ changes.push({
3270
+ category: "pythonOrm",
3271
+ message: "Database set to MongoDB (required by PyMongo)"
3272
+ });
3273
+ }
3274
+ if (nextStack.pythonOrm === "pymongo" && nextStack.dbSetup !== "mongodb-atlas" && nextStack.dbSetup !== "none" && nextStack.dbSetup !== "docker") {
3275
+ nextStack.dbSetup = "none";
3276
+ changed = true;
3277
+ changes.push({
3278
+ category: "pythonOrm",
3279
+ message: "DB Setup set to 'None' (incompatible with MongoDB)"
3280
+ });
3281
+ }
3282
+ if (nextStack.database === "mongodb" && nextStack.pythonOrm !== "pymongo" && nextStack.pythonOrm !== "none") {
3283
+ nextStack.database = "sqlite";
3284
+ changed = true;
3285
+ changes.push({
3286
+ category: "database",
3287
+ message: `Database set to SQLite (MongoDB requires PyMongo, not ${nextStack.pythonOrm})`
3288
+ });
3289
+ }
3290
+ if ((nextStack.pythonWebFramework === "none" || nextStack.pythonWebFramework === "aiohttp" || nextStack.pythonWebFramework === "starlette" || nextStack.pythonWebFramework === "streamlit") && nextStack.pythonGraphql !== "none") {
3291
+ nextStack.pythonGraphql = "none";
3292
+ changed = true;
3293
+ changes.push({
3294
+ category: "pythonGraphql",
3295
+ message: "GraphQL set to 'None' (only wired for FastAPI, Django, Flask, and Litestar)"
3296
+ });
3297
+ }
3298
+ if ((nextStack.pythonWebFramework === "none" || nextStack.pythonWebFramework === "aiohttp" || nextStack.pythonWebFramework === "starlette" || nextStack.pythonWebFramework === "streamlit") && nextStack.pythonAuth !== "none") {
3299
+ nextStack.pythonAuth = "none";
3300
+ changed = true;
3301
+ changes.push({
3302
+ category: "pythonAuth",
3303
+ message: `Auth set to 'None' (auth routes are not wired for ${nextStack.pythonWebFramework})`
3304
+ });
3305
+ }
3306
+ if ((nextStack.pythonWebFramework === "streamlit" || nextStack.pythonWebFramework === "none") && nextStack.pythonObservability === "prometheus-client") {
3307
+ nextStack.pythonObservability = "none";
3308
+ changed = true;
3309
+ changes.push({
3310
+ category: "pythonObservability",
3311
+ message: "Observability set to 'None' (prometheus-client needs an HTTP server to expose /metrics)"
3312
+ });
3313
+ }
3314
+ if (nextStack.pythonServer === "gunicorn" && (nextStack.pythonWebFramework === "streamlit" || nextStack.pythonWebFramework === "none")) {
3315
+ nextStack.pythonServer = "none";
3316
+ changed = true;
3317
+ changes.push({
3318
+ category: "pythonServer",
3319
+ message: "Production server set to 'None' (Gunicorn requires a WSGI, ASGI, or aiohttp app)"
3320
+ });
3321
+ }
3128
3322
  }
3129
3323
  if (nextStack.ecosystem === "java") {
3130
3324
  if (nextStack.javaBuildTool === "none") {
@@ -3431,6 +3625,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
3431
3625
  "mobilePush",
3432
3626
  "mobileOTA",
3433
3627
  "mobileDeepLinking",
3628
+ "mobileLibraries",
3434
3629
  "auth",
3435
3630
  "payments",
3436
3631
  "packageManager",
@@ -3483,7 +3678,13 @@ const getDisabledReason = (currentStack, category, optionId) => {
3483
3678
  if (category === "rustWebFramework" && optionId === "loco" && currentStack.rustApi === "jsonrpsee") return "Loco owns the server boot sequence and cannot start the generated jsonrpsee server";
3484
3679
  if (category === "rustAuth" && optionId === "tower-sessions" && currentStack.rustWebFramework !== "axum") return "The generated tower-sessions middleware is wired specifically for Axum";
3485
3680
  if (category === "rustWebFramework" && optionId !== "axum" && currentStack.rustAuth === "tower-sessions") return "tower-sessions requires the generated Axum middleware stack";
3681
+ if (category === "rustAuth" && optionId === "torii" && currentStack.rustOrm === "rusqlite") return "Torii's sqlx-based storage conflicts with rusqlite (both link the native sqlite3 library)";
3682
+ if (category === "rustOrm" && optionId === "rusqlite" && currentStack.rustAuth === "torii") return "rusqlite conflicts with Torii's sqlx-based storage (both link the native sqlite3 library)";
3486
3683
  }
3684
+ if (category === "pythonApi") {
3685
+ if (optionId !== "none" && currentStack.pythonWebFramework !== "django") return "Python API frameworks currently require Django";
3686
+ }
3687
+ if (category === "pythonServer" && optionId === "gunicorn" && (currentStack.pythonWebFramework === "streamlit" || currentStack.pythonWebFramework === "none")) return "Gunicorn requires a WSGI, ASGI, or aiohttp application";
3487
3688
  const graphDisabledReason = category === "payments" && optionId === "revenuecat" || category === "i18n" && optionId === "intlayer" ? {
3488
3689
  handled: false,
3489
3690
  authoritative: false,
@@ -3760,7 +3961,8 @@ const getDisabledReason = (currentStack, category, optionId) => {
3760
3961
  "mobileTesting",
3761
3962
  "mobilePush",
3762
3963
  "mobileOTA",
3763
- "mobileDeepLinking"
3964
+ "mobileDeepLinking",
3965
+ "mobileLibraries"
3764
3966
  ]).has(category)) {
3765
3967
  if (!currentStack.nativeFrontend.some((f) => f !== "none") && optionId !== "none") return `${getCategoryDisplayName(category)} requires a native Expo frontend`;
3766
3968
  if (category === "mobileNavigation" && optionId === "react-navigation") return null;
@@ -3878,9 +4080,6 @@ const getDisabledReason = (currentStack, category, optionId) => {
3878
4080
  if (unsupportedFrontend) return `Intlayer is not yet wired for the '${unsupportedFrontend}' frontend`;
3879
4081
  }
3880
4082
  }
3881
- if (category === "pythonApi") {
3882
- if (optionId !== "none" && currentStack.pythonWebFramework !== "django") return "Python API frameworks currently require Django";
3883
- }
3884
4083
  if (category === "goMigrations" && optionId !== "none" && currentStack.ecosystem === "go" && ![
3885
4084
  "sqlite",
3886
4085
  "postgres",
@@ -4233,6 +4432,15 @@ const GRAPH_DISABLED_REASON_BINDINGS = {
4233
4432
  authoritative: true,
4234
4433
  missingOwnerReason: "Mobile deep linking requires a native Expo frontend"
4235
4434
  },
4435
+ mobileLibraries: {
4436
+ role: "libraries",
4437
+ ecosystem: "react-native",
4438
+ ownerRole: "mobile",
4439
+ ownerEcosystem: "react-native",
4440
+ authoritative: true,
4441
+ missingOwnerReason: "Mobile libraries require a native Expo frontend",
4442
+ candidateIdPrefix: "candidate:native"
4443
+ },
4236
4444
  javaBuildTool: {
4237
4445
  role: "buildTool",
4238
4446
  ecosystem: "java",
@@ -4352,6 +4560,62 @@ const GRAPH_DISABLED_REASON_BINDINGS = {
4352
4560
  currentEcosystem: "python",
4353
4561
  authoritative: true
4354
4562
  },
4563
+ pythonCloudSdk: {
4564
+ role: "cloudSdk",
4565
+ ecosystem: "python",
4566
+ ownerRole: "backend",
4567
+ ownerEcosystem: "python",
4568
+ currentEcosystem: "python",
4569
+ authoritative: true
4570
+ },
4571
+ pythonHttpClient: {
4572
+ role: "httpClient",
4573
+ ecosystem: "python",
4574
+ ownerRole: "backend",
4575
+ ownerEcosystem: "python",
4576
+ currentEcosystem: "python",
4577
+ authoritative: true
4578
+ },
4579
+ pythonData: {
4580
+ role: "data",
4581
+ ecosystem: "python",
4582
+ ownerRole: "backend",
4583
+ ownerEcosystem: "python",
4584
+ currentEcosystem: "python",
4585
+ authoritative: true
4586
+ },
4587
+ pythonMedia: {
4588
+ role: "media",
4589
+ ecosystem: "python",
4590
+ ownerRole: "backend",
4591
+ ownerEcosystem: "python",
4592
+ currentEcosystem: "python",
4593
+ authoritative: true
4594
+ },
4595
+ pythonServer: {
4596
+ role: "server",
4597
+ ecosystem: "python",
4598
+ ownerRole: "backend",
4599
+ ownerEcosystem: "python",
4600
+ currentEcosystem: "python",
4601
+ authoritative: true
4602
+ },
4603
+ pythonPackageManager: {
4604
+ role: "packageManager",
4605
+ ecosystem: "python",
4606
+ ownerRole: "backend",
4607
+ ownerEcosystem: "python",
4608
+ currentEcosystem: "python",
4609
+ authoritative: true
4610
+ },
4611
+ pythonMessageQueue: {
4612
+ role: "messageQueue",
4613
+ ecosystem: "python",
4614
+ ownerRole: "backend",
4615
+ ownerEcosystem: "python",
4616
+ currentEcosystem: "python",
4617
+ authoritative: true
4618
+ },
4355
4619
  goTesting: {
4356
4620
  role: "testing",
4357
4621
  ecosystem: "go",
@@ -4525,6 +4789,15 @@ const GRAPH_DISABLED_REASON_BINDINGS = {
4525
4789
  ownerEcosystem: "dotnet",
4526
4790
  currentEcosystem: "dotnet",
4527
4791
  authoritative: true
4792
+ },
4793
+ dotnetLibraries: {
4794
+ role: "libraries",
4795
+ ecosystem: "dotnet",
4796
+ ownerRole: "backend",
4797
+ ownerEcosystem: "dotnet",
4798
+ currentEcosystem: "dotnet",
4799
+ authoritative: true,
4800
+ candidateIdPrefix: "candidate:native"
4528
4801
  }
4529
4802
  };
4530
4803
  function compatibilityInputToGraphProjectConfig(currentStack) {
@@ -5242,6 +5515,15 @@ function evaluateCompatibility(input) {
5242
5515
  optionId: javaLibrary
5243
5516
  });
5244
5517
  }
5518
+ for (const mobileLibrary of input.mobileLibraries ?? []) {
5519
+ const reason = getDisabledReason(input, "mobileLibraries", mobileLibrary);
5520
+ if (reason) issues.push({
5521
+ code: "INCOMPATIBLE_MOBILE_LIBRARY",
5522
+ message: reason,
5523
+ category: "mobileLibraries",
5524
+ optionId: mobileLibrary
5525
+ });
5526
+ }
5245
5527
  for (const testingLibrary of input.javaTestingLibraries) {
5246
5528
  const reason = getDisabledReason(input, "javaTestingLibraries", testingLibrary);
5247
5529
  if (reason) issues.push({
@@ -5269,6 +5551,15 @@ function evaluateCompatibility(input) {
5269
5551
  optionId: observabilityLibrary
5270
5552
  });
5271
5553
  }
5554
+ for (const dotnetLibrary of input.dotnetLibraries ?? []) {
5555
+ const reason = getDisabledReason(input, "dotnetLibraries", dotnetLibrary);
5556
+ if (reason) issues.push({
5557
+ code: "INCOMPATIBLE_DOTNET_LIBRARY",
5558
+ message: reason,
5559
+ category: "dotnetLibraries",
5560
+ optionId: dotnetLibrary
5561
+ });
5562
+ }
5272
5563
  return { issues };
5273
5564
  }
5274
5565
 
@@ -5302,6 +5593,7 @@ const DEFAULT_STACK_SELECTION = {
5302
5593
  mobilePush: "none",
5303
5594
  mobileOTA: "none",
5304
5595
  mobileDeepLinking: "none",
5596
+ mobileLibraries: [],
5305
5597
  backendLibraries: "none",
5306
5598
  stateManagement: "none",
5307
5599
  forms: "react-hook-form",
@@ -5369,6 +5661,13 @@ const DEFAULT_STACK_SELECTION = {
5369
5661
  pythonRealtime: "none",
5370
5662
  pythonObservability: "none",
5371
5663
  pythonCli: [],
5664
+ pythonCloudSdk: "none",
5665
+ pythonHttpClient: "none",
5666
+ pythonData: [],
5667
+ pythonMedia: "none",
5668
+ pythonServer: "none",
5669
+ pythonPackageManager: "uv",
5670
+ pythonMessageQueue: "none",
5372
5671
  goWebFramework: "gin",
5373
5672
  goOrm: "gorm",
5374
5673
  goApi: "none",
@@ -5407,6 +5706,7 @@ const DEFAULT_STACK_SELECTION = {
5407
5706
  dotnetValidation: "none",
5408
5707
  dotnetCaching: "none",
5409
5708
  dotnetDeploy: "docker",
5709
+ dotnetLibraries: [],
5410
5710
  elixirWebFramework: "phoenix",
5411
5711
  elixirOrm: "ecto-sql",
5412
5712
  elixirAuth: "none",
@@ -5460,6 +5760,7 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
5460
5760
  mobilePush: "mobilePush",
5461
5761
  mobileOTA: "mobileOTA",
5462
5762
  mobileDeepLinking: "mobileDeepLinking",
5763
+ mobileLibraries: "mobileLibraries",
5463
5764
  backendLibraries: "backendLibraries",
5464
5765
  stateManagement: "stateManagement",
5465
5766
  forms: "forms",
@@ -5526,6 +5827,13 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
5526
5827
  pythonRealtime: "pythonRealtime",
5527
5828
  pythonObservability: "pythonObservability",
5528
5829
  pythonCli: "pythonCli",
5830
+ pythonCloudSdk: "pythonCloudSdk",
5831
+ pythonHttpClient: "pythonHttpClient",
5832
+ pythonData: "pythonData",
5833
+ pythonMedia: "pythonMedia",
5834
+ pythonServer: "pythonServer",
5835
+ pythonPackageManager: "pythonPackageManager",
5836
+ pythonMessageQueue: "pythonMessageQueue",
5529
5837
  goWebFramework: "goWebFramework",
5530
5838
  goOrm: "goOrm",
5531
5839
  goApi: "goApi",
@@ -5564,6 +5872,7 @@ const STACK_SELECTION_OPTION_CATEGORY_BY_KEY = {
5564
5872
  dotnetValidation: "dotnetValidation",
5565
5873
  dotnetCaching: "dotnetCaching",
5566
5874
  dotnetDeploy: "dotnetDeploy",
5875
+ dotnetLibraries: "dotnetLibraries",
5567
5876
  elixirWebFramework: "elixirWebFramework",
5568
5877
  elixirOrm: "elixirOrm",
5569
5878
  elixirAuth: "elixirAuth",
@@ -5596,6 +5905,7 @@ const VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS = [
5596
5905
  "goTesting",
5597
5906
  "pythonTesting",
5598
5907
  "pythonCli",
5908
+ "pythonData",
5599
5909
  "elixirLibraries",
5600
5910
  "aiDocs"
5601
5911
  ];
@@ -5630,6 +5940,7 @@ const STACK_SELECTION_URL_KEYS = {
5630
5940
  mobilePush: "mpu",
5631
5941
  mobileOTA: "mota",
5632
5942
  mobileDeepLinking: "mdl",
5943
+ mobileLibraries: "mlib",
5633
5944
  backendLibraries: "bl",
5634
5945
  stateManagement: "sm",
5635
5946
  forms: "frm",
@@ -5697,6 +6008,13 @@ const STACK_SELECTION_URL_KEYS = {
5697
6008
  pythonRealtime: "prt",
5698
6009
  pythonObservability: "pobs",
5699
6010
  pythonCli: "pcli",
6011
+ pythonCloudSdk: "pcloud",
6012
+ pythonHttpClient: "phttp",
6013
+ pythonData: "pdata",
6014
+ pythonMedia: "pmedia",
6015
+ pythonServer: "pserver",
6016
+ pythonPackageManager: "ppm",
6017
+ pythonMessageQueue: "pmq",
5700
6018
  goWebFramework: "gwf",
5701
6019
  goOrm: "gorm",
5702
6020
  goApi: "gapi",
@@ -5735,6 +6053,7 @@ const STACK_SELECTION_URL_KEYS = {
5735
6053
  dotnetValidation: "dnval",
5736
6054
  dotnetCaching: "dncache",
5737
6055
  dotnetDeploy: "dndeploy",
6056
+ dotnetLibraries: "dnlib",
5738
6057
  elixirWebFramework: "ewf",
5739
6058
  elixirOrm: "eorm",
5740
6059
  elixirAuth: "eauth",
@@ -5935,6 +6254,12 @@ const CLI_SCALAR_CONFIG_FIELDS = [
5935
6254
  ["pythonCaching", "pythonCaching"],
5936
6255
  ["pythonRealtime", "pythonRealtime"],
5937
6256
  ["pythonObservability", "pythonObservability"],
6257
+ ["pythonCloudSdk", "pythonCloudSdk"],
6258
+ ["pythonHttpClient", "pythonHttpClient"],
6259
+ ["pythonMedia", "pythonMedia"],
6260
+ ["pythonServer", "pythonServer"],
6261
+ ["pythonPackageManager", "pythonPackageManager"],
6262
+ ["pythonMessageQueue", "pythonMessageQueue"],
5938
6263
  ["goWebFramework", "goWebFramework"],
5939
6264
  ["goOrm", "goOrm"],
5940
6265
  ["goApi", "goApi"],
@@ -5996,15 +6321,18 @@ const CLI_NON_EMPTY_ARRAY_CONFIG_FIELDS = [
5996
6321
  ];
5997
6322
  const CLI_DEFINED_ARRAY_CONFIG_FIELDS = [
5998
6323
  ["aiDocs", "aiDocs"],
6324
+ ["mobileLibraries", "mobileLibraries"],
5999
6325
  ["rustLibraries", "rustLibraries"],
6000
6326
  ["pythonAi", "pythonAi"],
6001
6327
  ["javaLibraries", "javaLibraries"],
6002
6328
  ["javaTestingLibraries", "javaTestingLibraries"],
6003
6329
  ["dotnetTesting", "dotnetTesting"],
6004
6330
  ["dotnetObservability", "dotnetObservability"],
6331
+ ["dotnetLibraries", "dotnetLibraries"],
6005
6332
  ["goTesting", "goTesting"],
6006
6333
  ["pythonTesting", "pythonTesting"],
6007
6334
  ["pythonCli", "pythonCli"],
6335
+ ["pythonData", "pythonData"],
6008
6336
  ["elixirLibraries", "elixirLibraries"]
6009
6337
  ];
6010
6338
  const PACKAGE_MANAGER_COMMANDS = {
@@ -6052,7 +6380,14 @@ const PYTHON_CONFIG_KEYS = [
6052
6380
  "pythonCaching",
6053
6381
  "pythonRealtime",
6054
6382
  "pythonObservability",
6055
- "pythonCli"
6383
+ "pythonCli",
6384
+ "pythonCloudSdk",
6385
+ "pythonHttpClient",
6386
+ "pythonData",
6387
+ "pythonMedia",
6388
+ "pythonServer",
6389
+ "pythonPackageManager",
6390
+ "pythonMessageQueue"
6056
6391
  ];
6057
6392
  const GO_CONFIG_KEYS = [
6058
6393
  "goWebFramework",
@@ -6096,7 +6431,8 @@ const DOTNET_CONFIG_KEYS = [
6096
6431
  "dotnetObservability",
6097
6432
  "dotnetValidation",
6098
6433
  "dotnetCaching",
6099
- "dotnetDeploy"
6434
+ "dotnetDeploy",
6435
+ "dotnetLibraries"
6100
6436
  ];
6101
6437
  const ELIXIR_CONFIG_KEYS = [
6102
6438
  "elixirWebFramework",
@@ -6128,7 +6464,8 @@ const REACT_NATIVE_CONFIG_KEYS = [
6128
6464
  "mobileTesting",
6129
6465
  "mobilePush",
6130
6466
  "mobileOTA",
6131
- "mobileDeepLinking"
6467
+ "mobileDeepLinking",
6468
+ "mobileLibraries"
6132
6469
  ];
6133
6470
  function withoutNone(values) {
6134
6471
  return values.filter((value) => value !== "none");
@@ -6241,6 +6578,7 @@ const GRAPH_MOBILE_PART_SELECTION_KEYS = [
6241
6578
  ["mobileOTA", "ota"],
6242
6579
  ["mobileDeepLinking", "deepLinking"]
6243
6580
  ];
6581
+ const GRAPH_MOBILE_ARRAY_PART_SELECTION_KEYS = [["mobileLibraries", "libraries"]];
6244
6582
  const GRAPH_RUST_BACKEND_PART_SELECTION_KEYS = [
6245
6583
  ["rustCli", "cli"],
6246
6584
  ["rustLogging", "logging"],
@@ -6255,10 +6593,16 @@ const GRAPH_PYTHON_BACKEND_PART_SELECTION_KEYS = [
6255
6593
  ["pythonTaskQueue", "jobQueue"],
6256
6594
  ["pythonGraphql", "graphql"],
6257
6595
  ["pythonQuality", "codeQuality"],
6596
+ ["pythonCloudSdk", "cloudSdk"],
6597
+ ["pythonHttpClient", "httpClient"],
6598
+ ["pythonMedia", "media"],
6599
+ ["pythonServer", "server"],
6600
+ ["pythonPackageManager", "packageManager"],
6601
+ ["pythonMessageQueue", "messageQueue"],
6258
6602
  ["caching", "caching"],
6259
6603
  ["search", "search"]
6260
6604
  ];
6261
- const GRAPH_PYTHON_BACKEND_ARRAY_PART_SELECTION_KEYS = [["pythonAi", "ai"]];
6605
+ const GRAPH_PYTHON_BACKEND_ARRAY_PART_SELECTION_KEYS = [["pythonAi", "ai"], ["pythonData", "data"]];
6262
6606
  const GRAPH_GO_BACKEND_PART_SELECTION_KEYS = [
6263
6607
  ["goCli", "cli"],
6264
6608
  ["goLogging", "logging"],
@@ -6287,7 +6631,11 @@ const GRAPH_DOTNET_BACKEND_PART_SELECTION_KEYS = [
6287
6631
  ["dotnetCaching", "caching"],
6288
6632
  ["dotnetDeploy", "deploy"]
6289
6633
  ];
6290
- const GRAPH_DOTNET_BACKEND_ARRAY_PART_SELECTION_KEYS = [["dotnetTesting", "testing"], ["dotnetObservability", "observability"]];
6634
+ const GRAPH_DOTNET_BACKEND_ARRAY_PART_SELECTION_KEYS = [
6635
+ ["dotnetTesting", "testing"],
6636
+ ["dotnetObservability", "observability"],
6637
+ ["dotnetLibraries", "libraries"]
6638
+ ];
6291
6639
  const GRAPH_TYPESCRIPT_FRONTEND_PART_CLI_KEYS = [
6292
6640
  ["webDeploy", "deploy"],
6293
6641
  ["cssFramework", "css"],
@@ -6344,6 +6692,7 @@ const GRAPH_MOBILE_PART_CLI_KEYS = [
6344
6692
  ["mobileOTA", "ota"],
6345
6693
  ["mobileDeepLinking", "deepLinking"]
6346
6694
  ];
6695
+ const GRAPH_MOBILE_ARRAY_PART_CLI_KEYS = [["mobileLibraries", "libraries"]];
6347
6696
  const GRAPH_RUST_BACKEND_PART_CLI_KEYS = [
6348
6697
  ["rustCli", "cli"],
6349
6698
  ["rustLogging", "logging"],
@@ -6358,10 +6707,16 @@ const GRAPH_PYTHON_BACKEND_PART_CLI_KEYS = [
6358
6707
  ["pythonTaskQueue", "jobQueue"],
6359
6708
  ["pythonGraphql", "graphql"],
6360
6709
  ["pythonQuality", "codeQuality"],
6710
+ ["pythonCloudSdk", "cloudSdk"],
6711
+ ["pythonHttpClient", "httpClient"],
6712
+ ["pythonMedia", "media"],
6713
+ ["pythonServer", "server"],
6714
+ ["pythonPackageManager", "packageManager"],
6715
+ ["pythonMessageQueue", "messageQueue"],
6361
6716
  ["caching", "caching"],
6362
6717
  ["search", "search"]
6363
6718
  ];
6364
- const GRAPH_PYTHON_BACKEND_ARRAY_PART_CLI_KEYS = [["pythonAi", "ai"]];
6719
+ const GRAPH_PYTHON_BACKEND_ARRAY_PART_CLI_KEYS = [["pythonAi", "ai"], ["pythonData", "data"]];
6365
6720
  const GRAPH_GO_BACKEND_PART_CLI_KEYS = [
6366
6721
  ["goCli", "cli"],
6367
6722
  ["goLogging", "logging"],
@@ -6389,7 +6744,11 @@ const GRAPH_DOTNET_BACKEND_PART_CLI_KEYS = [
6389
6744
  ["dotnetCaching", "caching"],
6390
6745
  ["dotnetDeploy", "deploy"]
6391
6746
  ];
6392
- const GRAPH_DOTNET_BACKEND_ARRAY_PART_CLI_KEYS = [["dotnetTesting", "testing"], ["dotnetObservability", "observability"]];
6747
+ const GRAPH_DOTNET_BACKEND_ARRAY_PART_CLI_KEYS = [
6748
+ ["dotnetTesting", "testing"],
6749
+ ["dotnetObservability", "observability"],
6750
+ ["dotnetLibraries", "libraries"]
6751
+ ];
6393
6752
  function getAddonScopedPartFields(addons) {
6394
6753
  return toUniqueNonNoneArray(addons ?? []).flatMap((addon) => {
6395
6754
  const binding = getAddonStackPartBinding(addon);
@@ -6466,6 +6825,13 @@ function getSelectionScopedPartFields(selection) {
6466
6825
  role,
6467
6826
  value: selection[key]
6468
6827
  })),
6828
+ ...GRAPH_MOBILE_ARRAY_PART_SELECTION_KEYS.map(([key, role]) => ({
6829
+ ownerRole: "mobile",
6830
+ ecosystem: "react-native",
6831
+ role,
6832
+ value: selection[key],
6833
+ allowMultiple: true
6834
+ })),
6469
6835
  ...GRAPH_RUST_BACKEND_PART_SELECTION_KEYS.map(([key, role]) => ({
6470
6836
  ownerRole: "backend",
6471
6837
  ecosystem: "rust",
@@ -6572,6 +6938,13 @@ function getCliScopedPartFields(input) {
6572
6938
  role,
6573
6939
  value: getValue(key)
6574
6940
  })),
6941
+ ...GRAPH_MOBILE_ARRAY_PART_CLI_KEYS.map(([key, role]) => ({
6942
+ ownerRole: "mobile",
6943
+ ecosystem: "react-native",
6944
+ role,
6945
+ value: getArrayValue(key),
6946
+ allowMultiple: true
6947
+ })),
6575
6948
  ...GRAPH_RUST_BACKEND_PART_CLI_KEYS.map(([key, role]) => ({
6576
6949
  ownerRole: "backend",
6577
6950
  ecosystem: "rust",
@@ -6817,6 +7190,7 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
6817
7190
  mobilePush: stack.mobilePush,
6818
7191
  mobileOTA: stack.mobileOTA,
6819
7192
  mobileDeepLinking: stack.mobileDeepLinking,
7193
+ mobileLibraries: toUniqueNonNoneArray(stack.mobileLibraries),
6820
7194
  cms: stack.cms,
6821
7195
  caching: stack.caching,
6822
7196
  rateLimit: stack.rateLimit,
@@ -6852,6 +7226,13 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
6852
7226
  pythonRealtime: stack.pythonRealtime,
6853
7227
  pythonObservability: stack.pythonObservability,
6854
7228
  pythonCli: toUniqueNonNoneArray(stack.pythonCli),
7229
+ pythonCloudSdk: stack.pythonCloudSdk,
7230
+ pythonHttpClient: stack.pythonHttpClient,
7231
+ pythonData: toUniqueNonNoneArray(stack.pythonData),
7232
+ pythonMedia: stack.pythonMedia,
7233
+ pythonServer: stack.pythonServer,
7234
+ pythonPackageManager: stack.pythonPackageManager,
7235
+ pythonMessageQueue: stack.pythonMessageQueue,
6855
7236
  goWebFramework: stack.goWebFramework,
6856
7237
  goOrm: stack.goOrm,
6857
7238
  goApi: stack.goApi,
@@ -6890,6 +7271,7 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
6890
7271
  dotnetValidation: stack.dotnetValidation,
6891
7272
  dotnetCaching: stack.dotnetCaching,
6892
7273
  dotnetDeploy: stack.dotnetDeploy,
7274
+ dotnetLibraries: toUniqueNonNoneArray(stack.dotnetLibraries),
6893
7275
  elixirWebFramework: stack.elixirWebFramework,
6894
7276
  elixirOrm: stack.elixirOrm,
6895
7277
  elixirAuth: stack.elixirAuth,
@@ -7086,6 +7468,7 @@ function generateReactNativeCommand(selection, projectName) {
7086
7468
  `--mobile-push ${selection.mobilePush}`,
7087
7469
  `--mobile-ota ${selection.mobileOTA}`,
7088
7470
  `--mobile-deep-linking ${selection.mobileDeepLinking}`,
7471
+ formatArrayFlag("mobile-libraries", selection.mobileLibraries),
7089
7472
  `--package-manager ${selection.packageManager}`,
7090
7473
  selection.git === "false" ? "--no-git" : "--git",
7091
7474
  selection.install === "false" ? "--no-install" : "--install",
@@ -7097,6 +7480,7 @@ function generateReactNativeCommand(selection, projectName) {
7097
7480
  function generateRustCommand(selection, projectName) {
7098
7481
  const flags = [
7099
7482
  "--ecosystem rust",
7483
+ `--database ${selection.database}`,
7100
7484
  `--rust-web-framework ${selection.rustWebFramework}`,
7101
7485
  `--rust-frontend ${selection.rustFrontend}`,
7102
7486
  `--rust-orm ${selection.rustOrm}`,
@@ -7124,6 +7508,7 @@ function generateRustCommand(selection, projectName) {
7124
7508
  function generatePythonCommand(selection, projectName) {
7125
7509
  const flags = [
7126
7510
  "--ecosystem python",
7511
+ `--database ${selection.database}`,
7127
7512
  `--python-web-framework ${selection.pythonWebFramework}`,
7128
7513
  `--python-orm ${selection.pythonOrm}`,
7129
7514
  `--python-validation ${selection.pythonValidation}`,
@@ -7138,6 +7523,13 @@ function generatePythonCommand(selection, projectName) {
7138
7523
  `--python-realtime ${selection.pythonRealtime}`,
7139
7524
  `--python-observability ${selection.pythonObservability}`,
7140
7525
  formatArrayFlag("python-cli", selection.pythonCli),
7526
+ `--python-cloud-sdk ${selection.pythonCloudSdk}`,
7527
+ `--python-http-client ${selection.pythonHttpClient}`,
7528
+ formatArrayFlag("python-data", selection.pythonData),
7529
+ `--python-media ${selection.pythonMedia}`,
7530
+ `--python-server ${selection.pythonServer}`,
7531
+ `--python-package-manager ${selection.pythonPackageManager}`,
7532
+ `--python-message-queue ${selection.pythonMessageQueue}`,
7141
7533
  `--email ${selection.email}`,
7142
7534
  `--observability ${selection.observability}`,
7143
7535
  `--caching ${selection.caching}`,
@@ -7151,6 +7543,7 @@ function generatePythonCommand(selection, projectName) {
7151
7543
  function generateGoCommand(selection, projectName) {
7152
7544
  const flags = [
7153
7545
  "--ecosystem go",
7546
+ `--database ${selection.database}`,
7154
7547
  `--go-web-framework ${selection.goWebFramework}`,
7155
7548
  `--go-orm ${selection.goOrm}`,
7156
7549
  `--go-api ${selection.goApi}`,
@@ -7183,6 +7576,7 @@ function generateGoCommand(selection, projectName) {
7183
7576
  function generateJavaCommand(selection, projectName) {
7184
7577
  const flags = [
7185
7578
  "--ecosystem java",
7579
+ `--database ${selection.database}`,
7186
7580
  `--java-web-framework ${selection.javaWebFramework}`,
7187
7581
  ...selection.javaLanguage === "kotlin" ? [`--java-language ${selection.javaLanguage}`] : [],
7188
7582
  `--java-build-tool ${selection.javaBuildTool}`,
@@ -7205,6 +7599,7 @@ function generateJavaCommand(selection, projectName) {
7205
7599
  function generateDotnetCommand(selection, projectName) {
7206
7600
  const flags = [
7207
7601
  "--ecosystem dotnet",
7602
+ `--database ${selection.database}`,
7208
7603
  `--dotnet-web-framework ${selection.dotnetWebFramework}`,
7209
7604
  `--dotnet-orm ${selection.dotnetOrm}`,
7210
7605
  `--dotnet-auth ${selection.dotnetAuth}`,
@@ -7216,6 +7611,7 @@ function generateDotnetCommand(selection, projectName) {
7216
7611
  `--dotnet-validation ${selection.dotnetValidation}`,
7217
7612
  `--dotnet-caching ${selection.dotnetCaching}`,
7218
7613
  `--dotnet-deploy ${selection.dotnetDeploy}`,
7614
+ formatArrayFlag("dotnet-libraries", selection.dotnetLibraries),
7219
7615
  formatArrayFlag("ai-docs", selection.aiDocs)
7220
7616
  ];
7221
7617
  if (selection.git === "false") flags.push("--no-git");
@@ -7225,6 +7621,7 @@ function generateDotnetCommand(selection, projectName) {
7225
7621
  function generateElixirCommand(selection, projectName) {
7226
7622
  const flags = [
7227
7623
  "--ecosystem elixir",
7624
+ `--database ${selection.database}`,
7228
7625
  `--elixir-web-framework ${selection.elixirWebFramework}`,
7229
7626
  `--elixir-orm ${selection.elixirOrm}`,
7230
7627
  `--elixir-auth ${selection.elixirAuth}`,
@@ -7270,4 +7667,4 @@ function generateStackSelectionCommand(selection) {
7270
7667
 
7271
7668
  //#endregion
7272
7669
  export { REACT_NATIVE_CATEGORY_ORDER as $, getCompatibleAddons as A, requiresChatSdkVercelAI as B, KOTLIN_DROPPED_JAVA_LIBRARIES as C, evaluateCompatibility as D, analyzeStackCompatibility as E, getKotlinJavaIncompatibilityReason as F, validateProjectName as G, splitFrontends as H, hasWebStyling as I, ELIXIR_CATEGORY_ORDER as J, CATEGORY_ORDER as K, isFrontendAllowedWithBackend as L, getCompatibleFormLibraries as M, getCompatibleUILibraries as N, getAIFrontendCompatibilityIssue as O, getDisabledReason as P, PYTHON_CATEGORY_ORDER as Q, isOptionCompatible as R, usesVirtualNoneStackSelection as S, allowedApisForFrontends as T, stackQualifiesForSingleApp as U, requiresChatSdkVercelAIForSelection as V, validateAddonCompatibility as W, JAVA_CATEGORY_ORDER as X, GO_CATEGORY_ORDER as Y, OPTION_CATEGORY_METADATA as Z, parseStackSelectionFromSearch as _, STACK_SELECTION_URL_KEYS as a, getCategoryOrderForEcosystem as at, stackSelectionToCliComparableConfig as b, cloneDefaultStackSelection as c, normalizeOptionId as ct, isArrayStackSelectionKey as d, getSupportedCapabilityOptions as dt, RUST_CATEGORY_ORDER as et, isCliDefaultStackSelection as f, normalizeCapabilitySelection as ft, normalizeStackSelectionValue as g, normalizeStackSelection as h, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as i, getCategoryOptionIds as it, getCompatibleCSSFrameworks as j, getApiFrontendCompatibilityIssue as k, createStackSelectionSearchParams as l, getCapabilityDefinitions as lt, isStackSelectionDefault as m, NON_OPTION_STACK_SELECTION_KEYS as n, getCategoryCliValues as nt, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as o, getOptionMetadata as ot, isGraphStackSelection as p, DOTNET_CATEGORY_ORDER as q, STACK_SELECTION_KEYS as r, getCategoryDisplayName as rt, cliInputToProjectConfigPartial as s, isMultiSelectCategory as st, DEFAULT_STACK_SELECTION as t, TYPESCRIPT_CATEGORY_ORDER as tt, generateStackSelectionCommand as u, getCapabilityDisabledReason as ut, parseStackSelectionFromUrlRecord as v, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as w, stackSelectionToProjectConfig as x, processCliArrayOption as y, isWebFrontend as z };
7273
- //# sourceMappingURL=stack-translation-Kr0TyRAm.mjs.map
7670
+ //# sourceMappingURL=stack-translation-Ay-_1mNB.mjs.map