@better-fullstack/types 2.6.0 → 2.6.2

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-7VECSARb.d.mts → defaults-CZeSVSu8.d.mts} +3 -3
  2. package/dist/defaults-CZeSVSu8.d.mts.map +1 -0
  3. package/dist/{defaults-Bp46Ajyg.mjs → defaults-DTS30ICD.mjs} +2 -2
  4. package/dist/defaults-DTS30ICD.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 +1258 -11
  8. package/dist/index.d.mts.map +1 -1
  9. package/dist/index.mjs +289 -9
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/json-schema.d.mts +324 -324
  12. package/dist/json-schema.d.mts.map +1 -1
  13. package/dist/json-schema.mjs +2 -2
  14. package/dist/json-schema.mjs.map +1 -1
  15. package/dist/{schemas-CY0MaZmU.d.mts → schemas-82xJXQrZ.d.mts} +680 -598
  16. package/dist/schemas-82xJXQrZ.d.mts.map +1 -0
  17. package/dist/{schemas-CH1UszP5.mjs → schemas-cgmdgudQ.mjs} +41 -4
  18. package/dist/schemas-cgmdgudQ.mjs.map +1 -0
  19. package/dist/schemas.d.mts +2 -2
  20. package/dist/schemas.mjs +2 -2
  21. package/dist/{stack-graph-DkJ944IX.d.mts → stack-graph-DG53F1Q2.d.mts} +26 -4
  22. package/dist/stack-graph-DG53F1Q2.d.mts.map +1 -0
  23. package/dist/{stack-graph-AWbdUrN3.mjs → stack-graph-Oj-P0cij.mjs} +91 -14
  24. package/dist/stack-graph-Oj-P0cij.mjs.map +1 -0
  25. package/dist/stack-graph.d.mts +4 -4
  26. package/dist/stack-graph.mjs +3 -3
  27. package/dist/{stack-translation-C9yYLNwM.d.mts → stack-translation-0OwfhcBf.d.mts} +59 -9
  28. package/dist/stack-translation-0OwfhcBf.d.mts.map +1 -0
  29. package/dist/{stack-translation-Cn6zGJ5q.mjs → stack-translation-49iba9M5.mjs} +161 -30
  30. package/dist/stack-translation-49iba9M5.mjs.map +1 -0
  31. package/dist/stack-translation.d.mts +4 -4
  32. package/dist/stack-translation.mjs +3 -3
  33. package/dist/telemetry-C9qQ80l9.mjs +2270 -0
  34. package/dist/telemetry-C9qQ80l9.mjs.map +1 -0
  35. package/dist/telemetry-CUtrUTe9.d.mts +36 -0
  36. package/dist/telemetry-CUtrUTe9.d.mts.map +1 -0
  37. package/dist/telemetry.d.mts +2 -0
  38. package/dist/telemetry.mjs +6 -0
  39. package/dist/{types-fGT5qf7O.d.mts → types-CfEIdtDo.d.mts} +3 -3
  40. package/dist/types-CfEIdtDo.d.mts.map +1 -0
  41. package/dist/types.d.mts +2 -2
  42. package/package.json +5 -1
  43. package/dist/defaults-7VECSARb.d.mts.map +0 -1
  44. package/dist/defaults-Bp46Ajyg.mjs.map +0 -1
  45. package/dist/schemas-CH1UszP5.mjs.map +0 -1
  46. package/dist/schemas-CY0MaZmU.d.mts.map +0 -1
  47. package/dist/stack-graph-AWbdUrN3.mjs.map +0 -1
  48. package/dist/stack-graph-DkJ944IX.d.mts.map +0 -1
  49. package/dist/stack-translation-C9yYLNwM.d.mts.map +0 -1
  50. package/dist/stack-translation-Cn6zGJ5q.mjs.map +0 -1
  51. package/dist/types-fGT5qf7O.d.mts.map +0 -1
@@ -1,4 +1,4 @@
1
- import "./schemas-CY0MaZmU.mjs";
2
- import "./types-fGT5qf7O.mjs";
3
- import { C as stackGraphToLegacyProjectConfigForEcosystem, E as validateStackParts, S as parseStackPartSpecs, T as toolingOverlayStackParts, _ as getStackToolDefinitions, a as StackGraphDiagnostic, b as legacyProjectConfigToStackParts, c as StackPartOptionContext, d as createStackPart, f as formatStackPartSpec, g as getStackPartOptions, h as getStackPartCompatibilityIssueForPart, i as STACK_TOOL_DEFINITIONS, l as StackPrimaryRole, m as getRoleTargetPath, n as ELIXIR_UNSUPPORTED_GRAPH_TOOLS, o as StackGraphIssue, p as getAddonStackPartBinding, r as ProvidedCapabilityDefinition, s as StackGraphValidationResult, t as AddonStackPartBinding, u as ToolDefinition, v as hasJavaScriptWorkspaceRoot, w as stackPartsToLegacyProjectConfigPartial, x as materializeProvidedStackParts, y as hasVitePlusWorkspaceRoot } from "./stack-graph-DkJ944IX.mjs";
4
- export { AddonStackPartBinding, ELIXIR_UNSUPPORTED_GRAPH_TOOLS, ProvidedCapabilityDefinition, STACK_TOOL_DEFINITIONS, StackGraphDiagnostic, StackGraphIssue, StackGraphValidationResult, StackPartOptionContext, StackPrimaryRole, ToolDefinition, createStackPart, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, parseStackPartSpecs, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
1
+ import "./schemas-82xJXQrZ.mjs";
2
+ import "./types-CfEIdtDo.mjs";
3
+ import { A as stackGraphToLegacyProjectConfigForEcosystem, C as hasJavaScriptWorkspaceRoot, D as mergeProjectConfigSettingsIntoStackParts, E as materializeProvidedStackParts, M as toolingOverlayStackParts, N as validateStackParts, O as parseStackPartSpecs, S as getStackToolDefinitions, T as legacyProjectConfigToStackParts, _ as formatStackPartSpec, a as ProvidedCapabilityDefinition, b as getStackPartCompatibilityIssueForPart, c as StackGraphDiagnostic, d as StackPartOptionContext, f as StackPartProjectSettingKey, g as formatStackGraphIssue, h as createStackPart, i as PROJECT_METADATA_SETTING_KEYS, j as stackPartsToLegacyProjectConfigPartial, k as projectStackPartSettingsToProjectConfig, l as StackGraphIssue, m as ToolDefinition, n as DEFAULT_SHADCN_STACK_PART_SETTINGS, o as STACK_PART_PROJECT_SETTING_KEYS, p as StackPrimaryRole, r as ELIXIR_UNSUPPORTED_GRAPH_TOOLS, s as STACK_TOOL_DEFINITIONS, t as AddonStackPartBinding, u as StackGraphValidationResult, v as getAddonStackPartBinding, w as hasVitePlusWorkspaceRoot, x as getStackPartOptions, y as getRoleTargetPath } from "./stack-graph-DG53F1Q2.mjs";
4
+ export { AddonStackPartBinding, DEFAULT_SHADCN_STACK_PART_SETTINGS, ELIXIR_UNSUPPORTED_GRAPH_TOOLS, PROJECT_METADATA_SETTING_KEYS, ProvidedCapabilityDefinition, STACK_PART_PROJECT_SETTING_KEYS, STACK_TOOL_DEFINITIONS, StackGraphDiagnostic, StackGraphIssue, StackGraphValidationResult, StackPartOptionContext, StackPartProjectSettingKey, StackPrimaryRole, ToolDefinition, createStackPart, formatStackGraphIssue, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, mergeProjectConfigSettingsIntoStackParts, parseStackPartSpecs, projectStackPartSettingsToProjectConfig, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
@@ -1,4 +1,4 @@
1
- import "./schemas-CH1UszP5.mjs";
2
- import { _ as toolingOverlayStackParts, a as getAddonStackPartBinding, c as getStackPartOptions, d as hasVitePlusWorkspaceRoot, f as legacyProjectConfigToStackParts, g as stackPartsToLegacyProjectConfigPartial, h as stackGraphToLegacyProjectConfigForEcosystem, i as formatStackPartSpec, l as getStackToolDefinitions, m as parseStackPartSpecs, n as STACK_TOOL_DEFINITIONS, o as getRoleTargetPath, p as materializeProvidedStackParts, r as createStackPart, s as getStackPartCompatibilityIssueForPart, t as ELIXIR_UNSUPPORTED_GRAPH_TOOLS, u as hasJavaScriptWorkspaceRoot, v as validateStackParts } from "./stack-graph-AWbdUrN3.mjs";
1
+ import "./schemas-cgmdgudQ.mjs";
2
+ import { C as toolingOverlayStackParts, S as stackPartsToLegacyProjectConfigPartial, _ as materializeProvidedStackParts, a as STACK_TOOL_DEFINITIONS, b as projectStackPartSettingsToProjectConfig, c as formatStackPartSpec, d as getStackPartCompatibilityIssueForPart, f as getStackPartOptions, g as legacyProjectConfigToStackParts, h as hasVitePlusWorkspaceRoot, i as STACK_PART_PROJECT_SETTING_KEYS, l as getAddonStackPartBinding, m as hasJavaScriptWorkspaceRoot, n as ELIXIR_UNSUPPORTED_GRAPH_TOOLS, o as createStackPart, p as getStackToolDefinitions, r as PROJECT_METADATA_SETTING_KEYS, s as formatStackGraphIssue, t as DEFAULT_SHADCN_STACK_PART_SETTINGS, u as getRoleTargetPath, v as mergeProjectConfigSettingsIntoStackParts, w as validateStackParts, x as stackGraphToLegacyProjectConfigForEcosystem, y as parseStackPartSpecs } from "./stack-graph-Oj-P0cij.mjs";
3
3
 
4
- export { ELIXIR_UNSUPPORTED_GRAPH_TOOLS, STACK_TOOL_DEFINITIONS, createStackPart, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, parseStackPartSpecs, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
4
+ export { DEFAULT_SHADCN_STACK_PART_SETTINGS, ELIXIR_UNSUPPORTED_GRAPH_TOOLS, PROJECT_METADATA_SETTING_KEYS, STACK_PART_PROJECT_SETTING_KEYS, STACK_TOOL_DEFINITIONS, createStackPart, formatStackGraphIssue, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, mergeProjectConfigSettingsIntoStackParts, parseStackPartSpecs, projectStackPartSettingsToProjectConfig, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
@@ -1,11 +1,20 @@
1
- import { Mn as Runtime, c as AstroIntegration, dt as Forms, ft as Frontend, g as CSSFramework, i as Addons, l as Auth, m as CLIInput, n as API, o as Analytics, on as ProjectConfig, t as AI, u as Backend, ur as UILibrary } from "./types-fGT5qf7O.mjs";
2
- import { t as CliDefaultProjectConfigBase } from "./defaults-7VECSARb.mjs";
1
+ import { Mn as Runtime, c as AstroIntegration, dt as Forms, ft as Frontend, g as CSSFramework, i as Addons, ir as StackPartRole, l as Auth, m as CLIInput, n as API, o as Analytics, on as ProjectConfig, rr as StackPartEcosystem, t as AI, u as Backend, ur as UILibrary } from "./types-CfEIdtDo.mjs";
2
+ import { t as CliDefaultProjectConfigBase } from "./defaults-CZeSVSu8.mjs";
3
3
 
4
- //#region src/option-metadata.d.ts
4
+ //#region src/catalog/option-metadata.d.ts
5
5
  type OptionCategory = "api" | "webFrontend" | "nativeFrontend" | "astroIntegration" | "runtime" | "backend" | "database" | "orm" | "dbSetup" | "webDeploy" | "serverDeploy" | "auth" | "payments" | "email" | "fileUpload" | "logging" | "observability" | "backendLibraries" | "stateManagement" | "forms" | "validation" | "testing" | "realtime" | "jobQueue" | "caching" | "rateLimit" | "botProtection" | "i18n" | "search" | "vectorDb" | "fileStorage" | "animation" | "cssFramework" | "uiLibrary" | "cms" | "featureFlags" | "integrations" | "ecommerce" | "analytics" | "mobileNavigation" | "mobileUI" | "mobileStorage" | "mobileTesting" | "mobilePush" | "mobileOTA" | "mobileDeepLinking" | "mobileLibraries" | "codeQuality" | "documentation" | "appShells" | "appPlatforms" | "toolchainProfile" | "workspaceRunner" | "codeQualityProfile" | "gitHooks" | "staticAnalysis" | "aiTooling" | "testingTools" | "dataClient" | "frontendUtilities" | "httpClientTool" | "codeGeneration" | "developerEnvironment" | "containerOrchestration" | "apiGateway" | "continuousIntegration" | "backendUtilitiesTool" | "packageManager" | "workspaceShape" | "versionChannel" | "examples" | "ai" | "aiDocs" | "git" | "install" | "effect" | "shadcnBase" | "shadcnStyle" | "shadcnIconLibrary" | "shadcnColorTheme" | "shadcnBaseColor" | "shadcnFont" | "shadcnRadius" | "rustWebFramework" | "rustFrontend" | "dotnetFrontend" | "kotlinMobile" | "kotlinMobileLibraries" | "swiftMobile" | "dartMobile" | "rustOrm" | "rustApi" | "rustCli" | "rustLibraries" | "rustLogging" | "rustErrorHandling" | "rustCaching" | "rustAuth" | "rustRealtime" | "rustMessageQueue" | "rustObservability" | "rustTemplating" | "pythonWebFramework" | "pythonOrm" | "pythonValidation" | "pythonAi" | "pythonAuth" | "pythonApi" | "pythonTaskQueue" | "pythonGraphql" | "pythonQuality" | "pythonTesting" | "pythonCaching" | "pythonRealtime" | "pythonObservability" | "pythonCli" | "pythonCloudSdk" | "pythonHttpClient" | "pythonData" | "pythonMedia" | "pythonServer" | "pythonPackageManager" | "pythonMessageQueue" | "goWebFramework" | "goOrm" | "goApi" | "goCli" | "goLogging" | "goAuth" | "goTesting" | "goRealtime" | "goMessageQueue" | "goCaching" | "goConfig" | "goObservability" | "goValidation" | "goQuality" | "goMigrations" | "goTemplating" | "goProtoTooling" | "goDI" | "javaLanguage" | "javaWebFramework" | "javaBuildTool" | "javaOrm" | "javaAuth" | "javaApi" | "javaLogging" | "javaLibraries" | "javaTestingLibraries" | "dotnetWebFramework" | "dotnetOrm" | "dotnetAuth" | "dotnetApi" | "dotnetTesting" | "dotnetJobQueue" | "dotnetRealtime" | "dotnetObservability" | "dotnetValidation" | "dotnetCaching" | "dotnetDeploy" | "dotnetLibraries" | "elixirWebFramework" | "elixirOrm" | "elixirAuth" | "elixirApi" | "elixirRealtime" | "elixirJobs" | "elixirValidation" | "elixirHttp" | "elixirJson" | "elixirEmail" | "elixirCaching" | "elixirObservability" | "elixirTesting" | "elixirQuality" | "elixirI18n" | "elixirHttpServer" | "elixirApplicationFramework" | "elixirDocumentation" | "elixirClustering" | "elixirDeploy" | "elixirLibraries";
6
6
  type OptionSelectionMode = "single" | "multiple";
7
7
  type OptionCategoryEcosystem = "typescript" | "react-native" | "rust" | "python" | "go" | "java" | "dotnet" | "elixir";
8
8
  declare const TYPESCRIPT_CATEGORY_ORDER: readonly ["webFrontend", "astroIntegration", "appShells", "cssFramework", "uiLibrary", "shadcnBase", "shadcnStyle", "shadcnIconLibrary", "shadcnColorTheme", "shadcnBaseColor", "shadcnFont", "shadcnRadius", "backend", "runtime", "api", "database", "orm", "dbSetup", "webDeploy", "serverDeploy", "auth", "payments", "email", "fileUpload", "logging", "observability", "featureFlags", "integrations", "ecommerce", "analytics", "ai", "stateManagement", "forms", "validation", "backendLibraries", "testing", "realtime", "jobQueue", "caching", "rateLimit", "botProtection", "i18n", "search", "vectorDb", "fileStorage", "animation", "cms", "toolchainProfile", "workspaceRunner", "codeQualityProfile", "gitHooks", "staticAnalysis", "aiTooling", "documentation", "testingTools", "dataClient", "frontendUtilities", "httpClientTool", "codeGeneration", "developerEnvironment", "containerOrchestration", "apiGateway", "continuousIntegration", "backendUtilitiesTool", "workspaceShape", "packageManager", "examples", "aiDocs", "versionChannel", "git", "install"];
9
+ /**
10
+ * Kotlin, Swift and Flutter apps exist only as stack graph parts: they are
11
+ * composed in multi-ecosystem mode or through `--shape mobile`, and the
12
+ * `react-native` ecosystem rejects them outright. They ride along in the mobile
13
+ * category order so their metadata stays reachable, so every surface that
14
+ * presents the react-native ecosystem to a user must filter them out.
15
+ */
16
+ declare const MULTI_ECOSYSTEM_MOBILE_CATEGORIES: ReadonlySet<string>;
17
+ declare function isMultiEcosystemMobileCategory(category: string): boolean;
9
18
  declare const REACT_NATIVE_CATEGORY_ORDER: readonly ["nativeFrontend", "kotlinMobile", "kotlinMobileLibraries", "swiftMobile", "dartMobile", "mobileNavigation", "mobileUI", "mobileStorage", "mobileTesting", "mobilePush", "mobileOTA", "mobileDeepLinking", "mobileLibraries", "auth", "payments", "packageManager", "aiDocs", "git", "install"];
10
19
  declare const RUST_CATEGORY_ORDER: readonly ["rustWebFramework", "rustFrontend", "rustOrm", "rustApi", "rustCli", "rustLibraries", "rustLogging", "rustErrorHandling", "rustCaching", "rustAuth", "rustRealtime", "rustMessageQueue", "rustObservability", "rustTemplating", "email", "observability", "caching", "search", "aiDocs", "git", "install"];
11
20
  declare const PYTHON_CATEGORY_ORDER: readonly ["pythonWebFramework", "pythonOrm", "pythonValidation", "pythonAi", "pythonAuth", "pythonApi", "pythonTaskQueue", "pythonGraphql", "pythonQuality", "pythonTesting", "pythonCaching", "pythonRealtime", "pythonObservability", "pythonCli", "pythonCloudSdk", "pythonHttpClient", "pythonData", "pythonMedia", "pythonServer", "pythonPackageManager", "pythonMessageQueue", "email", "observability", "caching", "search", "aiDocs", "git", "install"];
@@ -33,7 +42,7 @@ declare function getCategoryOptionIds(category: OptionCategory): string[];
33
42
  declare function getCategoryCliValues(category: OptionCategory): string[];
34
43
  declare function normalizeOptionId(category: OptionCategory, value: string): string;
35
44
  //#endregion
36
- //#region src/stack-compatibility-rules.d.ts
45
+ //#region src/stack/stack-compatibility-rules.d.ts
37
46
  declare const hasPWACompatibleFrontend: (webFrontend: string[]) => boolean;
38
47
  declare const hasTauriCompatibleFrontend: (webFrontend: string[]) => boolean;
39
48
  declare const hasDockerComposeCompatibleFrontend: (webFrontend: string[]) => boolean;
@@ -49,8 +58,36 @@ declare function isExampleChatSdkAllowed(backend?: Backend | string, frontends?:
49
58
  declare function requiresChatSdkVercelAIForExamples(backend?: Backend | string, runtime?: Runtime | string, examples?: readonly string[]): boolean;
50
59
  declare function hasTanStackAICompatibleFrontend(frontends?: readonly string[]): boolean;
51
60
  //#endregion
52
- //#region src/compatibility.d.ts
61
+ //#region src/stack/compatibility.d.ts
53
62
  type CompatibilityCategory = OptionCategory;
63
+ type CompatibilityCapabilityReference = {
64
+ id: string;
65
+ category: CompatibilityCategory;
66
+ optionId: string;
67
+ };
68
+ type CompatibilityStackPartReference = {
69
+ id: string;
70
+ role: StackPartRole;
71
+ ecosystem: StackPartEcosystem;
72
+ toolId: string;
73
+ };
74
+ type CompatibilityExplanation = {
75
+ schemaVersion: 1;
76
+ ruleId: string;
77
+ reason: string;
78
+ message: string;
79
+ capability: CompatibilityCapabilityReference;
80
+ owner: {
81
+ kind: "stack-part" | "capability";
82
+ capability: CompatibilityCapabilityReference;
83
+ stackPart: CompatibilityStackPartReference | null;
84
+ };
85
+ candidateStackPart: {
86
+ role: StackPartRole;
87
+ ecosystem: StackPartEcosystem;
88
+ } | null;
89
+ alternatives: CompatibilityCapabilityReference[];
90
+ };
54
91
  declare const ANALYTICS_FRONTEND_SUPPORT: {
55
92
  readonly ga4: Set<string>;
56
93
  readonly plausible: Set<string>;
@@ -82,6 +119,10 @@ type KotlinJavaGateInput = {
82
119
  observability?: string;
83
120
  };
84
121
  declare function getKotlinJavaIncompatibilityReason(stack: KotlinJavaGateInput): string | null;
122
+ declare function isReactNativeOnlyCategory(category: string): boolean;
123
+ declare function hasReactNativeApp(stack: {
124
+ nativeFrontend?: string[];
125
+ }): boolean;
85
126
  type CompatibilityIssue = {
86
127
  code: string;
87
128
  message: string;
@@ -89,6 +130,7 @@ type CompatibilityIssue = {
89
130
  optionId?: string;
90
131
  provided?: Record<string, string | string[]>;
91
132
  suggestions?: string[];
133
+ explanation?: CompatibilityExplanation;
92
134
  };
93
135
  type CompatibilityEvaluation = {
94
136
  issues: CompatibilityIssue[];
@@ -284,7 +326,7 @@ type CompatibilityAnalysisResult = {
284
326
  * sibling workspace package (database/orm, better-auth server, trpc/orpc
285
327
  * packages/api, payments, email, etc.) and no separate native/server app. For
286
328
  * anything else, `single-app` is normalized back to `monorepo` so we never emit
287
- * a broken flat layout. appPlatforms (turborepo/nx) are ignored here the
329
+ * a broken flat layout. appPlatforms (turborepo/nx) are ignored here - the
288
330
  * generator drops the workspace tooling when it flattens.
289
331
  */
290
332
  declare function stackQualifiesForSingleApp(stack: CompatibilityInput): boolean;
@@ -299,6 +341,14 @@ declare const analyzeStackCompatibility: (stack: CompatibilityInput) => Compatib
299
341
  */
300
342
  declare const getDisabledReason: (currentStack: CompatibilityInput, category: CompatibilityCategory, optionId: string) => string | null;
301
343
  declare const isOptionCompatible: (currentStack: CompatibilityInput, category: CompatibilityCategory, optionId: string) => boolean;
344
+ type CompatibilityDecision = {
345
+ reason: string | null;
346
+ suggestedReplacements: string[];
347
+ explanation: CompatibilityExplanation | null;
348
+ };
349
+ declare function getCompatibilityExplanation(currentStack: CompatibilityInput, category: CompatibilityCategory, optionId: string, reasonOverride?: string): CompatibilityExplanation | null;
350
+ declare function getCompatibilityDecision(currentStack: CompatibilityInput, category: CompatibilityCategory, optionId: string): CompatibilityDecision;
351
+ declare function formatCompatibilityDecision(decision: CompatibilityDecision): string | null;
302
352
  declare function isWebFrontend(value: Frontend): boolean;
303
353
  declare function splitFrontends(values?: Frontend[]): {
304
354
  web: Frontend[];
@@ -320,7 +370,7 @@ declare function hasWebStyling(frontends?: Frontend[]): boolean;
320
370
  declare function getCompatibleFormLibraries(frontends?: Frontend[]): Forms[];
321
371
  declare function evaluateCompatibility(input: CompatibilityInput): CompatibilityEvaluation;
322
372
  //#endregion
323
- //#region src/stack-translation.d.ts
373
+ //#region src/stack/stack-translation.d.ts
324
374
  type StackSelectionMode = "solo" | "multi";
325
375
  type StackSelectionInput = CompatibilityInput & {
326
376
  stackMode: StackSelectionMode;
@@ -537,5 +587,5 @@ declare function stackSelectionToCliComparableConfig(selection: StackSelectionIn
537
587
  declare function isCliDefaultStackSelection(selection: StackSelectionInput, projectName?: string): boolean;
538
588
  declare function generateStackSelectionCommand(selection: StackSelectionInput): string;
539
589
  //#endregion
540
- export { isBotIdWebFrontend as $, CompatibilityAdjustment as A, OPTION_CATEGORY_METADATA as At, analyzeStackCompatibility as B, getCategoryCliValues as Bt, parseStackSelectionFromSearch as C, isExampleChatSdkAllowed as Ct, stackSelectionToProjectConfig as D, ELIXIR_CATEGORY_ORDER as Dt, stackSelectionToCliComparableConfig as E, DOTNET_CATEGORY_ORDER as Et, CompatibilityIssue as F, OptionSelectionMode as Ft, getCompatibleCSSFrameworks as G, isMultiSelectCategory as Gt, getAIFrontendCompatibilityIssue as H, getCategoryOptionIds as Ht, KOTLIN_DROPPED_JAVA_LIBRARIES as I, PYTHON_CATEGORY_ORDER as It, getDisabledReason as J, getCompatibleFormLibraries as K, normalizeOptionId as Kt, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as L, REACT_NATIVE_CATEGORY_ORDER as Lt, CompatibilityCategory as M, OptionCategoryEcosystem as Mt, CompatibilityEvaluation as N, OptionCategoryMetadata as Nt, usesVirtualNoneStackSelection as O, GO_CATEGORY_ORDER as Ot, CompatibilityInput as P, OptionMetadata as Pt, isAnalyticsFrontendSupported as Q, KotlinJavaGateInput as R, RUST_CATEGORY_ORDER as Rt, normalizeStackSelectionValue as S, isExampleAIAllowed as St, processCliArrayOption as T, CATEGORY_ORDER as Tt, getApiFrontendCompatibilityIssue as U, getCategoryOrderForEcosystem as Ut, evaluateCompatibility as V, getCategoryDisplayName as Vt, getCompatibleAddons as W, getOptionMetadata as Wt, hasSignozSupportedGoServerTarget as X, getKotlinJavaIncompatibilityReason as Y, hasWebStyling as Z, isArrayStackSelectionKey as _, hasDockerComposeCompatibleFrontend as _t, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as a, isVercelAnalyticsFrontend as at, isStackSelectionDefault as b, hasTauriCompatibleFrontend as bt, StackSelectionInput as c, requiresChatSdkVercelAIForSelection as ct, StackSelectionState as d, supportsAnalyticsFrontends as dt, isFrontendAllowedWithBackend as et, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as f, validateAddonCompatibility as ft, generateStackSelectionCommand as g, getUnsupportedWebDeployFrontend as gt, createStackSelectionSearchParams as h, UI_LIBRARY_COMPATIBILITY as ht, STACK_SELECTION_KEYS as i, isTurnstileWebFrontend as it, CompatibilityAnalysisResult as j, OptionCategory as jt, ANALYTICS_FRONTEND_SUPPORT as k, JAVA_CATEGORY_ORDER as kt, StackSelectionKey as l, splitFrontends as lt, cloneDefaultStackSelection as m, BACKEND_UTILS_COMPATIBLE_BACKENDS as mt, NON_OPTION_STACK_SELECTION_KEYS as n, isSignozSupportedGoWebFramework as nt, STACK_SELECTION_URL_KEYS as o, isWebFrontend as ot, cliInputToProjectConfigPartial as p, validateProjectName as pt, getCompatibleUILibraries as q, PACKAGE_MANAGER_COMMANDS as r, isSignozSupportedPythonWebFramework as rt, StackProjectConfigOptions as s, requiresChatSdkVercelAI as st, DEFAULT_STACK_SELECTION as t, isOptionCompatible as tt, StackSelectionMode as u, stackQualifiesForSingleApp as ut, isCliDefaultStackSelection as v, hasPWACompatibleFrontend as vt, parseStackSelectionFromUrlRecord as w, requiresChatSdkVercelAIForExamples as wt, normalizeStackSelection as x, isBackendUtilsCompatibleBackend as xt, isGraphStackSelection as y, hasTanStackAICompatibleFrontend as yt, allowedApisForFrontends as z, TYPESCRIPT_CATEGORY_ORDER as zt };
541
- //# sourceMappingURL=stack-translation-C9yYLNwM.d.mts.map
590
+ export { getCompatibleFormLibraries as $, getCategoryOrderForEcosystem as $t, CompatibilityAdjustment as A, isBackendUtilsCompatibleBackend as At, KOTLIN_DROPPED_JAVA_LIBRARIES as B, OPTION_CATEGORY_METADATA as Bt, parseStackSelectionFromSearch as C, BACKEND_UTILS_COMPATIBLE_BACKENDS as Ct, stackSelectionToProjectConfig as D, hasPWACompatibleFrontend as Dt, stackSelectionToCliComparableConfig as E, hasDockerComposeCompatibleFrontend as Et, CompatibilityEvaluation as F, DOTNET_CATEGORY_ORDER as Ft, evaluateCompatibility as G, OptionSelectionMode as Gt, KotlinJavaGateInput as H, OptionCategoryEcosystem as Ht, CompatibilityExplanation as I, ELIXIR_CATEGORY_ORDER as It, getApiFrontendCompatibilityIssue as J, RUST_CATEGORY_ORDER as Jt, formatCompatibilityDecision as K, PYTHON_CATEGORY_ORDER as Kt, CompatibilityInput as L, GO_CATEGORY_ORDER as Lt, CompatibilityCapabilityReference as M, isExampleChatSdkAllowed as Mt, CompatibilityCategory as N, requiresChatSdkVercelAIForExamples as Nt, usesVirtualNoneStackSelection as O, hasTanStackAICompatibleFrontend as Ot, CompatibilityDecision as P, CATEGORY_ORDER as Pt, getCompatibleCSSFrameworks as Q, getCategoryOptionIds as Qt, CompatibilityIssue as R, JAVA_CATEGORY_ORDER as Rt, normalizeStackSelectionValue as S, validateProjectName as St, processCliArrayOption as T, getUnsupportedWebDeployFrontend as Tt, allowedApisForFrontends as U, OptionCategoryMetadata as Ut, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as V, OptionCategory as Vt, analyzeStackCompatibility as W, OptionMetadata as Wt, getCompatibilityExplanation as X, getCategoryCliValues as Xt, getCompatibilityDecision as Y, TYPESCRIPT_CATEGORY_ORDER as Yt, getCompatibleAddons as Z, getCategoryDisplayName as Zt, isArrayStackSelectionKey as _, requiresChatSdkVercelAIForSelection as _t, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as a, hasWebStyling as at, isStackSelectionDefault as b, supportsAnalyticsFrontends as bt, StackSelectionInput as c, isFrontendAllowedWithBackend as ct, StackSelectionState as d, isSignozSupportedGoWebFramework as dt, getOptionMetadata as en, getCompatibleUILibraries as et, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as f, isSignozSupportedPythonWebFramework as ft, generateStackSelectionCommand as g, requiresChatSdkVercelAI as gt, createStackSelectionSearchParams as h, isWebFrontend as ht, STACK_SELECTION_KEYS as i, hasSignozSupportedGoServerTarget as it, CompatibilityAnalysisResult as j, isExampleAIAllowed as jt, ANALYTICS_FRONTEND_SUPPORT as k, hasTauriCompatibleFrontend as kt, StackSelectionKey as l, isOptionCompatible as lt, cloneDefaultStackSelection as m, isVercelAnalyticsFrontend as mt, NON_OPTION_STACK_SELECTION_KEYS as n, isMultiSelectCategory as nn, getKotlinJavaIncompatibilityReason as nt, STACK_SELECTION_URL_KEYS as o, isAnalyticsFrontendSupported as ot, cliInputToProjectConfigPartial as p, isTurnstileWebFrontend as pt, getAIFrontendCompatibilityIssue as q, REACT_NATIVE_CATEGORY_ORDER as qt, PACKAGE_MANAGER_COMMANDS as r, normalizeOptionId as rn, hasReactNativeApp as rt, StackProjectConfigOptions as s, isBotIdWebFrontend as st, DEFAULT_STACK_SELECTION as t, isMultiEcosystemMobileCategory as tn, getDisabledReason as tt, StackSelectionMode as u, isReactNativeOnlyCategory as ut, isCliDefaultStackSelection as v, splitFrontends as vt, parseStackSelectionFromUrlRecord as w, UI_LIBRARY_COMPATIBILITY as wt, normalizeStackSelection as x, validateAddonCompatibility as xt, isGraphStackSelection as y, stackQualifiesForSingleApp as yt, CompatibilityStackPartReference as z, MULTI_ECOSYSTEM_MOBILE_CATEGORIES as zt };
591
+ //# sourceMappingURL=stack-translation-0OwfhcBf.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-translation-0OwfhcBf.d.mts","names":[],"sources":["../src/catalog/option-metadata.ts","../src/stack/stack-compatibility-rules.ts","../src/stack/compatibility.ts","../src/stack/stack-translation.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,8 +1,8 @@
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";
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, 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 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, _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, 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, l as APP_PLATFORM_ADDON_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, mo as VERSION_CHANNEL_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, po as VECTOR_DB_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, 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, yi as PYTHON_QUALITY_VALUES, yo as WORKSPACE_SHAPE_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";
2
+ import { A as hasTanStackAICompatibleFrontend, D as getUnsupportedWebDeployFrontend, E as UI_LIBRARY_COMPATIBILITY, F as requiresChatSdkVercelAIForExamples, G as getToolingSelectionOptions, K as isToolingOverlayOnly, S as stackPartsToLegacyProjectConfigPartial, U as getToolingCapability, b as projectStackPartSettingsToProjectConfig, c as formatStackPartSpec, d as getStackPartCompatibilityIssueForPart, g as legacyProjectConfigToStackParts, j as hasTauriCompatibleFrontend, k as hasPWACompatibleFrontend, l as getAddonStackPartBinding, v as mergeProjectConfigSettingsIntoStackParts, w as validateStackParts, y as parseStackPartSpecs } from "./stack-graph-Oj-P0cij.mjs";
3
+ import { t as createCliDefaultProjectConfigBase } from "./defaults-DTS30ICD.mjs";
4
4
 
5
- //#region src/capabilities.ts
5
+ //#region src/capabilities/capabilities.ts
6
6
  const CAPABILITY_DEFINITIONS = { auth: [
7
7
  {
8
8
  id: "better-auth",
@@ -245,7 +245,7 @@ function normalizeCapabilitySelection(capability, context, optionId) {
245
245
  }
246
246
 
247
247
  //#endregion
248
- //#region src/option-metadata.ts
248
+ //#region src/catalog/option-metadata.ts
249
249
  const TYPESCRIPT_CATEGORY_ORDER = [
250
250
  "webFrontend",
251
251
  "astroIntegration",
@@ -319,6 +319,22 @@ const TYPESCRIPT_CATEGORY_ORDER = [
319
319
  "git",
320
320
  "install"
321
321
  ];
322
+ /**
323
+ * Kotlin, Swift and Flutter apps exist only as stack graph parts: they are
324
+ * composed in multi-ecosystem mode or through `--shape mobile`, and the
325
+ * `react-native` ecosystem rejects them outright. They ride along in the mobile
326
+ * category order so their metadata stays reachable, so every surface that
327
+ * presents the react-native ecosystem to a user must filter them out.
328
+ */
329
+ const MULTI_ECOSYSTEM_MOBILE_CATEGORIES = new Set([
330
+ "kotlinMobile",
331
+ "kotlinMobileLibraries",
332
+ "swiftMobile",
333
+ "dartMobile"
334
+ ]);
335
+ function isMultiEcosystemMobileCategory(category) {
336
+ return MULTI_ECOSYSTEM_MOBILE_CATEGORIES.has(category);
337
+ }
322
338
  const REACT_NATIVE_CATEGORY_ORDER = [
323
339
  "nativeFrontend",
324
340
  "kotlinMobile",
@@ -2118,7 +2134,7 @@ function normalizeOptionId(category, value) {
2118
2134
  }
2119
2135
 
2120
2136
  //#endregion
2121
- //#region src/compatibility.ts
2137
+ //#region src/stack/compatibility.ts
2122
2138
  const SIGNOZ_SUPPORTED_GO_WEB_FRAMEWORKS = new Set([
2123
2139
  "gin",
2124
2140
  "echo",
@@ -2213,6 +2229,25 @@ function getKotlinJavaIncompatibilityReason(stack) {
2213
2229
  if (unsupportedTestingLibrary) return `The '${unsupportedTestingLibrary}' testing library is not wired for the Kotlin scaffold`;
2214
2230
  return null;
2215
2231
  }
2232
+ const REACT_NATIVE_ONLY_CATEGORIES = new Set([
2233
+ "mobileNavigation",
2234
+ "mobileUI",
2235
+ "mobileStorage",
2236
+ "mobileTesting",
2237
+ "mobilePush",
2238
+ "mobileOTA",
2239
+ "mobileDeepLinking",
2240
+ "mobileLibraries"
2241
+ ]);
2242
+ function isReactNativeOnlyCategory(category) {
2243
+ return REACT_NATIVE_ONLY_CATEGORIES.has(category);
2244
+ }
2245
+ function hasReactNativeApp(stack) {
2246
+ return (stack.nativeFrontend ?? []).some((frontend) => frontend !== "none");
2247
+ }
2248
+ function hasKotlinMobileApp(stack) {
2249
+ return (stack.kotlinMobile ?? "none") !== "none";
2250
+ }
2216
2251
  const TURNSTILE_WEB_FRONTENDS = new Set([
2217
2252
  "next",
2218
2253
  "react-router",
@@ -2322,7 +2357,7 @@ const SINGLE_APP_WEB_FRONTEND_BY_BACKEND = {
2322
2357
  * sibling workspace package (database/orm, better-auth server, trpc/orpc
2323
2358
  * packages/api, payments, email, etc.) and no separate native/server app. For
2324
2359
  * anything else, `single-app` is normalized back to `monorepo` so we never emit
2325
- * a broken flat layout. appPlatforms (turborepo/nx) are ignored here the
2360
+ * a broken flat layout. appPlatforms (turborepo/nx) are ignored here - the
2326
2361
  * generator drops the workspace tooling when it flattens.
2327
2362
  */
2328
2363
  function stackQualifiesForSingleApp(stack) {
@@ -2673,7 +2708,7 @@ const analyzeStackCompatibility = (stack) => {
2673
2708
  message: "Integrations set to 'none' (Nango's Node SDK is not available on Cloudflare Workers)"
2674
2709
  });
2675
2710
  }
2676
- if (nextStack.runtime === "none" && nextStack.backend !== "convex" && nextStack.backend !== "none" && nextStack.backend !== "self-next" && nextStack.backend !== "self-vinext" && nextStack.backend !== "self-tanstack-start" && nextStack.backend !== "self-astro" && nextStack.backend !== "self-nuxt" && nextStack.backend !== "self-svelte" && nextStack.backend !== "self-solid-start") {
2711
+ if (nextStack.runtime === "none" && nextStack.backend !== "convex" && nextStack.backend !== "encore" && nextStack.backend !== "none" && nextStack.backend !== "self-next" && nextStack.backend !== "self-vinext" && nextStack.backend !== "self-tanstack-start" && nextStack.backend !== "self-astro" && nextStack.backend !== "self-nuxt" && nextStack.backend !== "self-svelte" && nextStack.backend !== "self-solid-start") {
2677
2712
  nextStack.runtime = DEFAULT_RUNTIME;
2678
2713
  changed = true;
2679
2714
  changes.push({
@@ -3977,6 +4012,7 @@ const analyzeStackCompatibility = (stack) => {
3977
4012
  * - Follow CLI behavior: filter options based on UPSTREAM selections only
3978
4013
  */
3979
4014
  const getDisabledReason = (currentStack, category, optionId) => {
4015
+ if (optionId !== "none" && category === "kotlinMobileLibraries" && !hasKotlinMobileApp(currentStack)) return "Kotlin mobile libraries require a Jetpack Compose or Compose Multiplatform app";
3980
4016
  if (currentStack.ecosystem === "react-native" && category === "codeQuality" && optionId !== "knip" && optionId !== "gitleaks") return "React Native code quality currently supports Knip and Gitleaks only";
3981
4017
  if (category === "codeQuality" && optionId === "knip" && currentStack.ecosystem !== "typescript" && currentStack.ecosystem !== "react-native") return "Knip requires a TypeScript or React Native workspace";
3982
4018
  if (category === "appPlatforms" && optionId === "vite-plus" && (currentStack.ecosystem !== "typescript" || !currentStack.webFrontend.some((frontend) => frontend !== "none"))) return "Vite+ requires a generated TypeScript web frontend";
@@ -4041,7 +4077,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
4041
4077
  "codeQuality"
4042
4078
  ]);
4043
4079
  if (category === "payments" && optionId !== "none" && optionId !== "revenuecat") return "React Native payments currently support RevenueCat only";
4044
- if (!reactNativeCategories.has(category) && optionId !== "none" && optionId !== "false") return "React Native ecosystem only supports native mobile options";
4080
+ if (!reactNativeCategories.has(category) && !isMultiEcosystemMobileCategory(category) && optionId !== "none" && optionId !== "false") return "React Native ecosystem only supports native mobile options";
4045
4081
  }
4046
4082
  if (currentStack.backend === "none") {
4047
4083
  if (category === "runtime" && optionId !== "none") return "No backend selected";
@@ -4416,17 +4452,8 @@ const getDisabledReason = (currentStack, category, optionId) => {
4416
4452
  "nextui"
4417
4453
  ].includes(currentStack.uiLibrary) && optionId !== "tailwind") return `${currentStack.uiLibrary === "shadcn-ui" ? "shadcn/ui" : currentStack.uiLibrary === "shadcn-svelte" ? "shadcn-svelte" : currentStack.uiLibrary === "daisyui" ? "daisyUI" : "NextUI"} requires Tailwind CSS`;
4418
4454
  }
4419
- if (new Set([
4420
- "mobileNavigation",
4421
- "mobileUI",
4422
- "mobileStorage",
4423
- "mobileTesting",
4424
- "mobilePush",
4425
- "mobileOTA",
4426
- "mobileDeepLinking",
4427
- "mobileLibraries"
4428
- ]).has(category)) {
4429
- if (!currentStack.nativeFrontend.some((f) => f !== "none") && optionId !== "none") return `${getCategoryDisplayName(category)} requires a native Expo frontend`;
4455
+ if (isReactNativeOnlyCategory(category)) {
4456
+ if (!hasReactNativeApp(currentStack) && optionId !== "none") return `${getCategoryDisplayName(category)} requires a native Expo frontend`;
4430
4457
  if (category === "mobileNavigation" && optionId === "react-navigation") return null;
4431
4458
  if (category === "mobileUI") {
4432
4459
  if (optionId === "uniwind" && !currentStack.nativeFrontend.includes("native-uniwind")) return "Uniwind mobile UI requires Expo + Uniwind frontend";
@@ -4634,6 +4661,57 @@ const isOptionCompatible = (currentStack, category, optionId) => {
4634
4661
  if (currentStack.yolo === "true") return true;
4635
4662
  return getDisabledReason(currentStack, category, optionId) === null;
4636
4663
  };
4664
+ function capabilityReference(category, optionId) {
4665
+ return {
4666
+ id: `${category}:${optionId}`,
4667
+ category,
4668
+ optionId
4669
+ };
4670
+ }
4671
+ function getCompatibilityExplanation(currentStack, category, optionId, reasonOverride) {
4672
+ const reason = reasonOverride ?? getDisabledReason(currentStack, category, optionId);
4673
+ if (!reason) return null;
4674
+ const graphDecision = getGraphDisabledReason(currentStack, category, optionId);
4675
+ const replacementIds = graphDecision.reason === reason ? graphDecision.alternatives ?? [] : [];
4676
+ const capability = capabilityReference(category, optionId);
4677
+ const alternatives = replacementIds.map((replacementId) => capabilityReference(category, replacementId));
4678
+ const punctuatedReason = /[.!?]$/.test(reason) ? reason : `${reason}.`;
4679
+ const message = alternatives.length === 0 ? reason : `${punctuatedReason} Compatible alternatives: ${alternatives.map((alternative) => alternative.optionId).join(", ")}.`;
4680
+ return {
4681
+ schemaVersion: 1,
4682
+ ruleId: `compatibility:${category}:${optionId}`,
4683
+ reason,
4684
+ message,
4685
+ capability,
4686
+ owner: {
4687
+ kind: graphDecision.ownerPart ? "stack-part" : "capability",
4688
+ capability,
4689
+ stackPart: graphDecision.ownerPart ?? null
4690
+ },
4691
+ candidateStackPart: graphDecision.candidateStackPart ?? null,
4692
+ alternatives
4693
+ };
4694
+ }
4695
+ function getCompatibilityDecision(currentStack, category, optionId) {
4696
+ const reason = getDisabledReason(currentStack, category, optionId);
4697
+ if (!reason) return {
4698
+ reason: null,
4699
+ suggestedReplacements: [],
4700
+ explanation: null
4701
+ };
4702
+ const explanation = getCompatibilityExplanation(currentStack, category, optionId, reason);
4703
+ return {
4704
+ reason,
4705
+ suggestedReplacements: explanation?.alternatives.map((alternative) => alternative.optionId) ?? [],
4706
+ explanation
4707
+ };
4708
+ }
4709
+ function formatCompatibilityDecision(decision) {
4710
+ if (!decision.reason) return null;
4711
+ if (decision.explanation) return decision.explanation.message;
4712
+ if (decision.suggestedReplacements.length === 0) return decision.reason;
4713
+ return `${decision.reason} Compatible alternatives: ${decision.suggestedReplacements.join(", ")}.`;
4714
+ }
4637
4715
  const SHARED_BACKEND_SERVICE_CATEGORIES = new Set([
4638
4716
  "email",
4639
4717
  "observability",
@@ -5297,7 +5375,11 @@ function getGraphDisabledReason(currentStack, category, optionId) {
5297
5375
  if (!owner && !binding.allowOwnerlessCandidate) return {
5298
5376
  handled: true,
5299
5377
  authoritative: binding.authoritative === true,
5300
- reason: binding.missingOwnerReason ?? null
5378
+ reason: binding.missingOwnerReason ?? null,
5379
+ candidateStackPart: {
5380
+ role: binding.role,
5381
+ ecosystem: binding.ecosystem
5382
+ }
5301
5383
  };
5302
5384
  const issue = getStackPartCompatibilityIssueForPart({
5303
5385
  id: `${binding.candidateIdPrefix ?? "candidate"}:${binding.ownerRole}.${binding.role}:${binding.ecosystem}:${optionId}`,
@@ -5313,7 +5395,18 @@ function getGraphDisabledReason(currentStack, category, optionId) {
5313
5395
  return {
5314
5396
  handled: true,
5315
5397
  authoritative: binding.authoritative === true,
5316
- reason: issue?.message ?? (!owner ? binding.missingOwnerReason ?? null : null)
5398
+ reason: issue?.message ?? (!owner ? binding.missingOwnerReason ?? null : null),
5399
+ alternatives: issue?.alternatives,
5400
+ ownerPart: owner ? {
5401
+ id: owner.id,
5402
+ role: owner.role,
5403
+ ecosystem: owner.ecosystem,
5404
+ toolId: owner.toolId
5405
+ } : void 0,
5406
+ candidateStackPart: {
5407
+ role: binding.role,
5408
+ ecosystem: binding.ecosystem
5409
+ }
5317
5410
  };
5318
5411
  }
5319
5412
  const WEB_FRAMEWORKS = [
@@ -5885,6 +5978,21 @@ function evaluateCompatibility(input) {
5885
5978
  ["auth", input.auth],
5886
5979
  ["payments", input.payments],
5887
5980
  ["email", input.email],
5981
+ ["fileUpload", input.fileUpload],
5982
+ ["logging", input.logging],
5983
+ ["observability", input.observability],
5984
+ ["realtime", input.realtime],
5985
+ ["jobQueue", input.jobQueue],
5986
+ ["validation", input.validation],
5987
+ ["testing", input.testing],
5988
+ ["ai", input.aiSdk],
5989
+ ["caching", input.caching],
5990
+ ["rateLimit", input.rateLimit],
5991
+ ["i18n", input.i18n],
5992
+ ["search", input.search],
5993
+ ["vectorDb", input.vectorDb],
5994
+ ["fileStorage", input.fileStorage],
5995
+ ["analytics", input.analytics],
5888
5996
  ["cssFramework", input.cssFramework],
5889
5997
  ["uiLibrary", input.uiLibrary],
5890
5998
  ["webDeploy", input.webDeploy],
@@ -5993,6 +6101,15 @@ function evaluateCompatibility(input) {
5993
6101
  optionId: mobileLibrary
5994
6102
  });
5995
6103
  }
6104
+ for (const kotlinLibrary of input.kotlinMobileLibraries ?? []) {
6105
+ const reason = getDisabledReason(input, "kotlinMobileLibraries", kotlinLibrary);
6106
+ if (reason) issues.push({
6107
+ code: "INCOMPATIBLE_KOTLIN_MOBILE_LIBRARY",
6108
+ message: reason,
6109
+ category: "kotlinMobileLibraries",
6110
+ optionId: kotlinLibrary
6111
+ });
6112
+ }
5996
6113
  for (const testingLibrary of input.javaTestingLibraries) {
5997
6114
  const reason = getDisabledReason(input, "javaTestingLibraries", testingLibrary);
5998
6115
  if (reason) issues.push({
@@ -6029,11 +6146,20 @@ function evaluateCompatibility(input) {
6029
6146
  optionId: dotnetLibrary
6030
6147
  });
6031
6148
  }
6032
- return { issues };
6149
+ return { issues: issues.map((issue) => {
6150
+ if (!issue.category || !issue.optionId) return issue;
6151
+ const explanation = getCompatibilityExplanation(input, issue.category, issue.optionId, issue.message);
6152
+ const suggestions = issue.suggestions ?? explanation?.alternatives.map((alternative) => `Use '${alternative.optionId}'`);
6153
+ return {
6154
+ ...issue,
6155
+ ...suggestions && suggestions.length > 0 ? { suggestions } : {},
6156
+ ...explanation ? { explanation } : {}
6157
+ };
6158
+ }) };
6033
6159
  }
6034
6160
 
6035
6161
  //#endregion
6036
- //#region src/stack-translation.ts
6162
+ //#region src/stack/stack-translation.ts
6037
6163
  const DEFAULT_STACK_SELECTION = {
6038
6164
  stackMode: "solo",
6039
6165
  stackPartSpecs: [],
@@ -7645,7 +7771,7 @@ function getGraphStackParts(selection) {
7645
7771
  const stackParts = parseStackPartSpecs(stackPartSpecs, "selected");
7646
7772
  const validation = validateStackParts(parseStackPartSpecs(getSelectableStackPartSpecs(stackPartSpecs), "selected"));
7647
7773
  if (validation.issues.length > 0) throw new Error(validation.issues.map((issue) => issue.message).join("\n"));
7648
- return stackParts;
7774
+ return mergeProjectConfigSettingsIntoStackParts(stackParts, selection);
7649
7775
  }
7650
7776
  function getAdjustedSelection(selection) {
7651
7777
  const compatibility = analyzeStackCompatibility(selection);
@@ -7747,7 +7873,7 @@ function getCliGraphStackParts(input) {
7747
7873
  addScopedBackendPart("elixir", "orm", input.elixirOrm);
7748
7874
  addScopedBackendPart("elixir", "api", input.elixirApi);
7749
7875
  addScopedBackendPart("elixir", "auth", input.elixirAuth);
7750
- return parseStackPartSpecs(expandScopedStackPartSpecs(stackPartSpecs, getCliScopedPartFields(input)), "selected");
7876
+ return mergeProjectConfigSettingsIntoStackParts(parseStackPartSpecs(expandScopedStackPartSpecs(stackPartSpecs, getCliScopedPartFields(input)), "selected"), input);
7751
7877
  }
7752
7878
  function buildProjectConfigBase(selection, projectName, relativePath, install) {
7753
7879
  const stack = getAdjustedSelection(selection);
@@ -7992,8 +8118,10 @@ function getBaseCommand(selection) {
7992
8118
  }
7993
8119
  function generateGraphCommand(selection, projectName) {
7994
8120
  const stackParts = getGraphStackParts(selection);
8121
+ const graphSettings = projectStackPartSettingsToProjectConfig(stackParts, { includeDefaults: true });
7995
8122
  const hasTypeScriptFrontend = hasGraphPrimaryPart(stackParts, "frontend", "typescript");
7996
8123
  const hasAstroFrontend = hasGraphPrimaryPart(stackParts, "frontend", "typescript", "astro");
8124
+ const hasShadcnUi = stackParts.some((part) => part.source !== "provided" && part.role === "ui" && part.ecosystem === "typescript" && part.toolId === "shadcn-ui");
7997
8125
  const hasRustBackend = hasGraphPrimaryPart(stackParts, "backend", "rust");
7998
8126
  const hasPythonBackend = hasGraphPrimaryPart(stackParts, "backend", "python");
7999
8127
  const hasGoBackend = hasGraphPrimaryPart(stackParts, "backend", "go");
@@ -8004,8 +8132,11 @@ function generateGraphCommand(selection, projectName) {
8004
8132
  const hasMobile = hasGraphPrimaryPart(stackParts, "mobile");
8005
8133
  const flags = [
8006
8134
  ...stackParts.filter((part) => part.source !== "provided" && part.toolId !== "none").map((part) => `--part ${formatStackPartSpec(part, stackParts)}`),
8007
- ...hasAstroFrontend && selection.astroIntegration !== "none" ? [`--astro-integration ${selection.astroIntegration}`] : [],
8008
- ...hasTypeScriptFrontend && selection.uiLibrary === "shadcn-ui" ? formatChangedStringFlags(selection, GRAPH_SHADCN_FLAG_KEYS) : [],
8135
+ ...hasAstroFrontend && graphSettings.astroIntegration !== "none" ? [`--astro-integration ${graphSettings.astroIntegration}`] : [],
8136
+ ...hasTypeScriptFrontend && hasShadcnUi ? formatChangedStringFlags({
8137
+ ...selection,
8138
+ ...graphSettings
8139
+ }, GRAPH_SHADCN_FLAG_KEYS) : [],
8009
8140
  ...hasNonTypeScriptBackend ? formatChangedStringFlags(selection, GRAPH_SHARED_BACKEND_FLAG_KEYS) : [],
8010
8141
  ...hasElixirBackend ? formatChangedStringFlags(selection, GRAPH_ELIXIR_BACKEND_FLAG_KEYS) : [],
8011
8142
  ...hasMobile ? formatChangedStringFlags(selection, GRAPH_MOBILE_FLAG_KEYS) : [],
@@ -8297,5 +8428,5 @@ function generateStackSelectionCommand(selection) {
8297
8428
  }
8298
8429
 
8299
8430
  //#endregion
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
8431
+ export { isWebFrontend as $, formatCompatibilityDecision as A, getKotlinJavaIncompatibilityReason as B, usesVirtualNoneStackSelection as C, isMultiEcosystemMobileCategory as Ct, allowedApisForFrontends as D, getCapabilityDisabledReason as Dt, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as E, getCapabilityDefinitions as Et, getCompatibleAddons as F, isBotIdWebFrontend as G, hasSignozSupportedGoServerTarget as H, getCompatibleCSSFrameworks as I, isReactNativeOnlyCategory as J, isFrontendAllowedWithBackend as K, getCompatibleFormLibraries as L, getApiFrontendCompatibilityIssue as M, getCompatibilityDecision as N, analyzeStackCompatibility as O, getSupportedCapabilityOptions as Ot, getCompatibilityExplanation as P, isVercelAnalyticsFrontend as Q, getCompatibleUILibraries as R, stackSelectionToProjectConfig as S, getOptionMetadata as St, KOTLIN_DROPPED_JAVA_LIBRARIES as T, normalizeOptionId as Tt, hasWebStyling as U, hasReactNativeApp as V, isAnalyticsFrontendSupported as W, isSignozSupportedPythonWebFramework as X, isSignozSupportedGoWebFramework as Y, isTurnstileWebFrontend as Z, normalizeStackSelectionValue as _, TYPESCRIPT_CATEGORY_ORDER as _t, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as a, validateAddonCompatibility as at, processCliArrayOption as b, getCategoryOptionIds as bt, cliInputToProjectConfigPartial as c, DOTNET_CATEGORY_ORDER as ct, generateStackSelectionCommand as d, JAVA_CATEGORY_ORDER as dt, requiresChatSdkVercelAI as et, isArrayStackSelectionKey as f, MULTI_ECOSYSTEM_MOBILE_CATEGORIES as ft, normalizeStackSelection as g, RUST_CATEGORY_ORDER as gt, isStackSelectionDefault as h, REACT_NATIVE_CATEGORY_ORDER as ht, STACK_SELECTION_KEYS as i, supportsAnalyticsFrontends as it, getAIFrontendCompatibilityIssue as j, evaluateCompatibility as k, normalizeCapabilitySelection as kt, cloneDefaultStackSelection as l, ELIXIR_CATEGORY_ORDER as lt, isGraphStackSelection as m, PYTHON_CATEGORY_ORDER as mt, NON_OPTION_STACK_SELECTION_KEYS as n, splitFrontends as nt, STACK_SELECTION_URL_KEYS as o, validateProjectName as ot, isCliDefaultStackSelection as p, OPTION_CATEGORY_METADATA as pt, isOptionCompatible as q, PACKAGE_MANAGER_COMMANDS as r, stackQualifiesForSingleApp as rt, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as s, CATEGORY_ORDER as st, DEFAULT_STACK_SELECTION as t, requiresChatSdkVercelAIForSelection as tt, createStackSelectionSearchParams as u, GO_CATEGORY_ORDER as ut, parseStackSelectionFromSearch as v, getCategoryCliValues as vt, ANALYTICS_FRONTEND_SUPPORT as w, isMultiSelectCategory as wt, stackSelectionToCliComparableConfig as x, getCategoryOrderForEcosystem as xt, parseStackSelectionFromUrlRecord as y, getCategoryDisplayName as yt, getDisabledReason as z };
8432
+ //# sourceMappingURL=stack-translation-49iba9M5.mjs.map