@better-fullstack/types 2.6.3 → 2.6.5

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 (51) hide show
  1. package/dist/{defaults-c1Q6oSGr.d.mts → defaults-2siC1CqU.d.mts} +2 -2
  2. package/dist/defaults-2siC1CqU.d.mts.map +1 -0
  3. package/dist/{defaults-DTS30ICD.mjs → defaults-nq08Mnf5.mjs} +2 -1
  4. package/dist/defaults-nq08Mnf5.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 +22 -21
  8. package/dist/index.d.mts.map +1 -1
  9. package/dist/index.mjs +15 -6
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/json-schema.d.mts +410 -362
  12. package/dist/json-schema.d.mts.map +1 -1
  13. package/dist/json-schema.mjs +1 -1
  14. package/dist/{schemas-byZ-ZfU_.d.mts → schemas-CBplkYwu.d.mts} +684 -635
  15. package/dist/schemas-CBplkYwu.d.mts.map +1 -0
  16. package/dist/{schemas-cgmdgudQ.mjs → schemas-CywxHrK2.mjs} +8 -2
  17. package/dist/schemas-CywxHrK2.mjs.map +1 -0
  18. package/dist/schemas.d.mts +2 -2
  19. package/dist/schemas.mjs +2 -2
  20. package/dist/{stack-graph-Oj-P0cij.mjs → stack-graph-6mobDYUo.mjs} +52 -10
  21. package/dist/stack-graph-6mobDYUo.mjs.map +1 -0
  22. package/dist/{stack-graph-BuGqVDuz.d.mts → stack-graph-CmMyv1fu.d.mts} +2 -2
  23. package/dist/{stack-graph-BuGqVDuz.d.mts.map → stack-graph-CmMyv1fu.d.mts.map} +1 -1
  24. package/dist/stack-graph.d.mts +3 -3
  25. package/dist/stack-graph.mjs +2 -2
  26. package/dist/{stack-translation-49iba9M5.mjs → stack-translation-CavXg_BJ.mjs} +152 -15
  27. package/dist/stack-translation-CavXg_BJ.mjs.map +1 -0
  28. package/dist/{stack-translation-PRZPaQP4.d.mts → stack-translation-DwF-iWnN.d.mts} +12 -6
  29. package/dist/stack-translation-DwF-iWnN.d.mts.map +1 -0
  30. package/dist/stack-translation.d.mts +5 -5
  31. package/dist/stack-translation.mjs +4 -4
  32. package/dist/{telemetry-C9qQ80l9.mjs → telemetry--r3iKqHM.mjs} +6 -4
  33. package/dist/telemetry--r3iKqHM.mjs.map +1 -0
  34. package/dist/{telemetry-CUtrUTe9.d.mts → telemetry-D4mP-fTC.d.mts} +3 -3
  35. package/dist/telemetry-D4mP-fTC.d.mts.map +1 -0
  36. package/dist/telemetry.d.mts +1 -1
  37. package/dist/telemetry.mjs +4 -4
  38. package/dist/{types-DA-r_8X7.d.mts → types-DgPd7BLf.d.mts} +4 -3
  39. package/dist/types-DgPd7BLf.d.mts.map +1 -0
  40. package/dist/types.d.mts +3 -3
  41. package/package.json +2 -2
  42. package/dist/defaults-DTS30ICD.mjs.map +0 -1
  43. package/dist/defaults-c1Q6oSGr.d.mts.map +0 -1
  44. package/dist/schemas-byZ-ZfU_.d.mts.map +0 -1
  45. package/dist/schemas-cgmdgudQ.mjs.map +0 -1
  46. package/dist/stack-graph-Oj-P0cij.mjs.map +0 -1
  47. package/dist/stack-translation-49iba9M5.mjs.map +0 -1
  48. package/dist/stack-translation-PRZPaQP4.d.mts.map +0 -1
  49. package/dist/telemetry-C9qQ80l9.mjs.map +0 -1
  50. package/dist/telemetry-CUtrUTe9.d.mts.map +0 -1
  51. package/dist/types-DA-r_8X7.d.mts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { $i as REALTIME_VALUES, A as CMS_VALUES, An as GO_MESSAGE_QUEUE_VALUES, Ar as KOTLIN_MOBILE_LIBRARIES_VALUES, B as DOTNET_AUTH_VALUES, Bn as GO_WEB_FRAMEWORK_VALUES, Br as MOBILE_PUSH_VALUES, Bt as EXAMPLES_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 STATE_MANAGEMENT_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, Ua as SWIFT_MOBILE_VALUES, Ur as MOBILE_UI_VALUES, V as DOTNET_CACHING_VALUES, Va as SHADCN_STYLE_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, _n as FRONTEND_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, 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 UI_LIBRARY_VALUES, dr as JAVA_AUTH_VALUES, ea as RUNTIME_VALUES, ei as ORM_VALUES, eo as StackPartRoleSchema, fa as RUST_REALTIME_VALUES, fi as PYTHON_GRAPHQL_VALUES, fo as VALIDATION_VALUES, fr as JAVA_BUILD_TOOL_VALUES, gi as PYTHON_OBSERVABILITY_VALUES, gn as FORMS_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, la as RUST_MESSAGE_QUEUE_VALUES, li as PYTHON_CLI_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, 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, po as VECTOR_DB_VALUES, pr as JAVA_LANGUAGE_VALUES, q as DOTNET_ORM_VALUES, ra as RUST_CACHING_VALUES, ri as PAYMENTS_VALUES, sa as RUST_LIBRARIES_VALUES, si as PYTHON_AUTH_VALUES, so as TESTING_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, ur as JAVA_API_VALUES, vi as PYTHON_PACKAGE_MANAGER_VALUES, vo as WEB_DEPLOY_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, y as BACKEND_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-cgmdgudQ.mjs";
1
+ import { $i as REALTIME_VALUES, A as CMS_VALUES, An as GO_MESSAGE_QUEUE_VALUES, Ar as KOTLIN_MOBILE_LIBRARIES_VALUES, B as DOTNET_AUTH_VALUES, Bn as GO_WEB_FRAMEWORK_VALUES, Br as MOBILE_PUSH_VALUES, Bt as EXAMPLES_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 STATE_MANAGEMENT_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, Ua as SWIFT_MOBILE_VALUES, Ur as MOBILE_UI_VALUES, V as DOTNET_CACHING_VALUES, Va as SHADCN_STYLE_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, _n as FRONTEND_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, 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 UI_LIBRARY_VALUES, dr as JAVA_AUTH_VALUES, ea as RUNTIME_VALUES, ei as ORM_VALUES, eo as StackPartRoleSchema, fa as RUST_REALTIME_VALUES, fi as PYTHON_GRAPHQL_VALUES, fo as VALIDATION_VALUES, fr as JAVA_BUILD_TOOL_VALUES, gi as PYTHON_OBSERVABILITY_VALUES, gn as FORMS_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, la as RUST_MESSAGE_QUEUE_VALUES, li as PYTHON_CLI_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, 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, po as VECTOR_DB_VALUES, pr as JAVA_LANGUAGE_VALUES, q as DOTNET_ORM_VALUES, ra as RUST_CACHING_VALUES, ri as PAYMENTS_VALUES, sa as RUST_LIBRARIES_VALUES, si as PYTHON_AUTH_VALUES, so as TESTING_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, ur as JAVA_API_VALUES, vi as PYTHON_PACKAGE_MANAGER_VALUES, vo as WEB_DEPLOY_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, y as BACKEND_VALUES, yi as PYTHON_QUALITY_VALUES, yo as WEB_MCP_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-CywxHrK2.mjs";
2
2
 
3
3
  //#region src/capabilities/tooling-capabilities.ts
4
4
  const TOOLING_CATEGORY_IDS = [
@@ -423,6 +423,24 @@ function isToolingOverlayOnly(parts) {
423
423
  function getSelectedToolingOption(category, selectedToolIds) {
424
424
  return getToolingSelectionOptions(category).find((selection) => selection.toolIds.length === 0 ? getToolingCapabilities(category).every((capability) => !selectedToolIds.includes(capability.toolId)) : selection.toolIds.every((toolId) => selectedToolIds.includes(toolId)));
425
425
  }
426
+ function toolingRequiresJavaScriptWorkspace(toolId) {
427
+ const capability = getToolingCapability(toolId);
428
+ if (!capability) return false;
429
+ return [
430
+ "toolchain",
431
+ "workspaceRunner",
432
+ "codeQuality",
433
+ "documentation",
434
+ "codeGeneration",
435
+ "appPlatforms",
436
+ "testingTools"
437
+ ].includes(capability.category) || [
438
+ "husky",
439
+ "lefthook",
440
+ "knip",
441
+ "ruler"
442
+ ].includes(toolId);
443
+ }
426
444
 
427
445
  //#endregion
428
446
  //#region src/stack/stack-compatibility-rules.ts
@@ -983,6 +1001,7 @@ const LEGACY_TYPESCRIPT_FRONTEND_SINGLE_CATEGORIES = {
983
1001
  fileUpload: "fileUpload",
984
1002
  i18n: "i18n",
985
1003
  analytics: "analytics",
1004
+ webMcp: "webMcp",
986
1005
  botProtection: "botProtection"
987
1006
  };
988
1007
  const LEGACY_DATABASE_SINGLE_CATEGORIES = { dbSetup: "dbSetup" };
@@ -1425,6 +1444,7 @@ const STACK_TOOL_DEFINITIONS = [
1425
1444
  ...defineTools(FILE_UPLOAD_VALUES, "fileUpload", "typescript", "fileUpload"),
1426
1445
  ...defineTools(I18N_VALUES, "i18n", "typescript", "i18n"),
1427
1446
  ...defineTools(ANALYTICS_VALUES, "analytics", "typescript", "analytics"),
1447
+ ...defineTools(WEB_MCP_VALUES, "webMcp", "typescript", "webMcp"),
1428
1448
  ...defineTools(BOT_PROTECTION_VALUES, "botProtection", "typescript", "botProtection"),
1429
1449
  ...TOOLING_CAPABILITIES.map((capability) => {
1430
1450
  const category = getToolingCategory(capability.category);
@@ -2790,14 +2810,32 @@ function parseStackPartSpecs(specs, source = "selected") {
2790
2810
  mobile: "apps",
2791
2811
  database: "data"
2792
2812
  };
2793
- const primaryParts = unresolvedPrimaryParts.map((part) => createStackPart({
2794
- role: part.role,
2795
- ecosystem: part.ecosystem,
2796
- toolId: part.toolId,
2797
- source,
2798
- id: part.customId,
2799
- targetPath: (primaryRoleCounts.get(part.role) ?? 0) > 1 && PRIMARY_ROLES.has(part.role) ? `${repeatedTargetRoot[part.role]}/${sanitizePartId(part.customId ?? `${part.ecosystem}-${part.toolId}`).replaceAll(":", "-")}` : void 0
2813
+ const usesFixedJavaScriptPath = (part) => (part.ecosystem === "typescript" || part.ecosystem === "react-native") && [
2814
+ "frontend",
2815
+ "backend",
2816
+ "mobile"
2817
+ ].includes(part.role);
2818
+ const usedTargetPaths = new Set(unresolvedPrimaryParts.filter((part) => usesFixedJavaScriptPath(part) || (primaryRoleCounts.get(part.role) ?? 0) <= 1).flatMap((part) => {
2819
+ const targetPath = getRoleTargetPath(part.role);
2820
+ return targetPath ? [targetPath] : [];
2800
2821
  }));
2822
+ const primaryParts = unresolvedPrimaryParts.map((part) => {
2823
+ let targetPath;
2824
+ if ((primaryRoleCounts.get(part.role) ?? 0) > 1 && PRIMARY_ROLES.has(part.role) && !usesFixedJavaScriptPath(part)) {
2825
+ const basePath = `${repeatedTargetRoot[part.role]}/${sanitizePartId(part.customId ?? `${part.ecosystem}-${part.toolId}`).replaceAll(":", "-")}`;
2826
+ targetPath = basePath;
2827
+ for (let suffix = 2; usedTargetPaths.has(targetPath); suffix += 1) targetPath = `${basePath}-${suffix}`;
2828
+ usedTargetPaths.add(targetPath);
2829
+ }
2830
+ return createStackPart({
2831
+ role: part.role,
2832
+ ecosystem: part.ecosystem,
2833
+ toolId: part.toolId,
2834
+ source,
2835
+ id: part.customId,
2836
+ targetPath
2837
+ });
2838
+ });
2801
2839
  const primaryByRole = new Map(primaryParts.map((part) => [part.role, part]));
2802
2840
  const primaryByRoleAndEcosystem = new Map(primaryParts.map((part) => [`${part.role}:${part.ecosystem}`, part]));
2803
2841
  const scopedParts = unresolved.filter((part) => part.ownerRole !== void 0 || part.ownerPartId !== void 0).map((part) => createStackPart({
@@ -3193,6 +3231,10 @@ function validateStackParts(parts) {
3193
3231
  label: "TypeScript web frontend",
3194
3232
  parts: selectedPrimaryParts.filter((part) => part.role === "frontend" && part.ecosystem === "typescript")
3195
3233
  },
3234
+ {
3235
+ label: "Rust web frontend",
3236
+ parts: selectedPrimaryParts.filter((part) => part.role === "frontend" && part.ecosystem === "rust")
3237
+ },
3196
3238
  {
3197
3239
  label: "TypeScript backend",
3198
3240
  parts: selectedPrimaryParts.filter((part) => part.role === "backend" && part.ecosystem === "typescript")
@@ -3312,5 +3354,5 @@ function validateStackParts(parts) {
3312
3354
  }
3313
3355
 
3314
3356
  //#endregion
3315
- export { hasTanStackAICompatibleFrontend as A, TOOLING_TOOL_IDS as B, toolingOverlayStackParts as C, getUnsupportedWebDeployFrontend as D, UI_LIBRARY_COMPATIBILITY as E, requiresChatSdkVercelAIForExamples as F, getToolingSelectionOptions as G, getToolingCapabilities as H, TOOLING_CAPABILITIES as I, isToolingOverlayOnly as K, TOOLING_CATEGORIES as L, isBackendUtilsCompatibleBackend as M, isExampleAIAllowed as N, hasDockerComposeCompatibleFrontend as O, isExampleChatSdkAllowed as P, TOOLING_CATEGORY_IDS as R, stackPartsToLegacyProjectConfigPartial as S, BACKEND_UTILS_COMPATIBLE_BACKENDS as T, getToolingCapability as U, getSelectedToolingOption as V, getToolingCategory as W, materializeProvidedStackParts as _, STACK_TOOL_DEFINITIONS as a, projectStackPartSettingsToProjectConfig as b, formatStackPartSpec as c, getStackPartCompatibilityIssueForPart as d, getStackPartOptions as f, legacyProjectConfigToStackParts as g, hasVitePlusWorkspaceRoot as h, STACK_PART_PROJECT_SETTING_KEYS as i, hasTauriCompatibleFrontend as j, hasPWACompatibleFrontend as k, getAddonStackPartBinding as l, hasJavaScriptWorkspaceRoot as m, ELIXIR_UNSUPPORTED_GRAPH_TOOLS as n, createStackPart as o, getStackToolDefinitions as p, isToolingOverlayPart as q, PROJECT_METADATA_SETTING_KEYS as r, formatStackGraphIssue as s, DEFAULT_SHADCN_STACK_PART_SETTINGS as t, getRoleTargetPath as u, mergeProjectConfigSettingsIntoStackParts as v, validateStackParts as w, stackGraphToLegacyProjectConfigForEcosystem as x, parseStackPartSpecs as y, TOOLING_SELECTION_OPTIONS as z };
3316
- //# sourceMappingURL=stack-graph-Oj-P0cij.mjs.map
3357
+ export { hasTanStackAICompatibleFrontend as A, TOOLING_TOOL_IDS as B, toolingOverlayStackParts as C, getUnsupportedWebDeployFrontend as D, UI_LIBRARY_COMPATIBILITY as E, requiresChatSdkVercelAIForExamples as F, getToolingSelectionOptions as G, getToolingCapabilities as H, TOOLING_CAPABILITIES as I, toolingRequiresJavaScriptWorkspace as J, isToolingOverlayOnly as K, TOOLING_CATEGORIES as L, isBackendUtilsCompatibleBackend as M, isExampleAIAllowed as N, hasDockerComposeCompatibleFrontend as O, isExampleChatSdkAllowed as P, TOOLING_CATEGORY_IDS as R, stackPartsToLegacyProjectConfigPartial as S, BACKEND_UTILS_COMPATIBLE_BACKENDS as T, getToolingCapability as U, getSelectedToolingOption as V, getToolingCategory as W, materializeProvidedStackParts as _, STACK_TOOL_DEFINITIONS as a, projectStackPartSettingsToProjectConfig as b, formatStackPartSpec as c, getStackPartCompatibilityIssueForPart as d, getStackPartOptions as f, legacyProjectConfigToStackParts as g, hasVitePlusWorkspaceRoot as h, STACK_PART_PROJECT_SETTING_KEYS as i, hasTauriCompatibleFrontend as j, hasPWACompatibleFrontend as k, getAddonStackPartBinding as l, hasJavaScriptWorkspaceRoot as m, ELIXIR_UNSUPPORTED_GRAPH_TOOLS as n, createStackPart as o, getStackToolDefinitions as p, isToolingOverlayPart as q, PROJECT_METADATA_SETTING_KEYS as r, formatStackGraphIssue as s, DEFAULT_SHADCN_STACK_PART_SETTINGS as t, getRoleTargetPath as u, mergeProjectConfigSettingsIntoStackParts as v, validateStackParts as w, stackGraphToLegacyProjectConfigForEcosystem as x, parseStackPartSpecs as y, TOOLING_SELECTION_OPTIONS as z };
3358
+ //# sourceMappingURL=stack-graph-6mobDYUo.mjs.map