@better-fullstack/types 2.6.4 → 2.6.6

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 (38) hide show
  1. package/dist/{defaults-B8xnKlp6.d.mts → defaults-CXCA_IXN.d.mts} +2 -2
  2. package/dist/defaults.d.mts +3 -3
  3. package/dist/index.d.mts +29 -16
  4. package/dist/index.mjs +5 -5
  5. package/dist/json-schema.d.mts +12 -0
  6. package/dist/json-schema.mjs +1 -1
  7. package/dist/{schemas-CgldOz7b.d.mts → schemas-DMxQS38P.d.mts} +12 -2
  8. package/dist/{schemas-CywxHrK2.mjs → schemas-DWWJaBQD.mjs} +2 -1
  9. package/dist/schemas.d.mts +1 -1
  10. package/dist/schemas.mjs +1 -1
  11. package/dist/{stack-graph-B1N4281Q.mjs → stack-graph-BLqsCkqk.mjs} +130 -12
  12. package/dist/{stack-graph-C5tnlzLw.d.mts → stack-graph-ocCFxrnc.d.mts} +3 -2
  13. package/dist/stack-graph.d.mts +3 -3
  14. package/dist/stack-graph.mjs +2 -2
  15. package/dist/{stack-translation-vg1Nwe1o.d.mts → stack-translation-DDecTM8V.d.mts} +23 -6
  16. package/dist/{stack-translation-DYhRy_yT.mjs → stack-translation-HKhp-rYK.mjs} +173 -14
  17. package/dist/stack-translation.d.mts +5 -5
  18. package/dist/stack-translation.mjs +4 -4
  19. package/dist/{telemetry-C3RfYkCK.mjs → telemetry-BjMbLJUQ.mjs} +4 -4
  20. package/dist/telemetry.mjs +4 -4
  21. package/dist/{types-BvyHjJEI.d.mts → types-DAJKUOQ_.d.mts} +2 -2
  22. package/dist/types.d.mts +2 -2
  23. package/package.json +2 -1
  24. package/dist/defaults-B8xnKlp6.d.mts.map +0 -1
  25. package/dist/defaults-nq08Mnf5.mjs.map +0 -1
  26. package/dist/index.d.mts.map +0 -1
  27. package/dist/index.mjs.map +0 -1
  28. package/dist/json-schema.d.mts.map +0 -1
  29. package/dist/json-schema.mjs.map +0 -1
  30. package/dist/schemas-CgldOz7b.d.mts.map +0 -1
  31. package/dist/schemas-CywxHrK2.mjs.map +0 -1
  32. package/dist/stack-graph-B1N4281Q.mjs.map +0 -1
  33. package/dist/stack-graph-C5tnlzLw.d.mts.map +0 -1
  34. package/dist/stack-translation-DYhRy_yT.mjs.map +0 -1
  35. package/dist/stack-translation-vg1Nwe1o.d.mts.map +0 -1
  36. package/dist/telemetry-C3RfYkCK.mjs.map +0 -1
  37. package/dist/telemetry-D4mP-fTC.d.mts.map +0 -1
  38. package/dist/types-BvyHjJEI.d.mts.map +0 -1
@@ -1,5 +1,5 @@
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-BvyHjJEI.mjs";
2
- import { t as CliDefaultProjectConfigBase } from "./defaults-B8xnKlp6.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-DAJKUOQ_.mjs";
2
+ import { t as CliDefaultProjectConfigBase } from "./defaults-CXCA_IXN.mjs";
3
3
 
4
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" | "webMcp" | "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";
@@ -107,6 +107,17 @@ declare function hasSignozSupportedGoServerTarget(stack: {
107
107
  declare function isSignozSupportedPythonWebFramework(framework: string): boolean;
108
108
  declare const KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES: ReadonlySet<string>;
109
109
  declare const KOTLIN_DROPPED_JAVA_LIBRARIES: ReadonlySet<string>;
110
+ declare const KOTLIN_SUPPORTED_JAVA_WEB_FRAMEWORKS: ReadonlySet<string>;
111
+ declare const KOTLIN_SUPPORTED_JAVA_ORM: ReadonlySet<string>;
112
+ declare const KOTLIN_SUPPORTED_JAVA_API: ReadonlySet<string>;
113
+ declare const KOTLIN_JAVA_ONLY_SHARED_TOOLS: Readonly<Record<string, ReadonlySet<string>>>;
114
+ declare const KOTLIN_HIDDEN_SHARED_CATEGORIES: ReadonlySet<string>;
115
+ declare function isKotlinJavaStack(stack: {
116
+ ecosystem?: string;
117
+ javaLanguage?: string;
118
+ }): boolean;
119
+ declare function isKotlinBackendSelection(backendEcosystem: string | undefined, backendLanguage: string | undefined): boolean;
120
+ declare function isKotlinIncompatibleOption(category: string, optionId: string): boolean;
110
121
  type KotlinJavaGateInput = {
111
122
  javaWebFramework?: string;
112
123
  javaBuildTool?: string;
@@ -331,7 +342,9 @@ type CompatibilityAnalysisResult = {
331
342
  * generator drops the workspace tooling when it flattens.
332
343
  */
333
344
  declare function stackQualifiesForSingleApp(stack: CompatibilityInput): boolean;
334
- declare const analyzeStackCompatibility: (stack: CompatibilityInput) => CompatibilityAnalysisResult;
345
+ declare const analyzeStackCompatibility: (stack: CompatibilityInput, options?: {
346
+ normalizeCodeQualityProfiles?: boolean;
347
+ }) => CompatibilityAnalysisResult;
335
348
  /**
336
349
  * Returns a reason why an option is disabled, or null if it's enabled.
337
350
  *
@@ -364,7 +377,7 @@ declare function validateAddonCompatibility(addon: Addons, frontend: Frontend[],
364
377
  isCompatible: boolean;
365
378
  reason?: string;
366
379
  };
367
- declare function getCompatibleAddons(allAddons: Addons[], frontend: Frontend[], existingAddons?: Addons[], auth?: Auth): ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "knip" | "gitleaks" | "ruler" | "mcp" | "skills" | "turborepo" | "nx" | "vite-plus" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "devcontainer" | "docker-compose" | "kong" | "github-actions" | "eslint" | "prettier" | "axios" | "firebase" | "graphql-codegen" | "openapi-typescript" | "apollo-client" | "electron" | "capacitor")[];
380
+ declare function getCompatibleAddons(allAddons: Addons[], frontend: Frontend[], existingAddons?: Addons[], auth?: Auth): ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "knip" | "gitleaks" | "ruler" | "mcp" | "skills" | "turborepo" | "nx" | "vite-plus" | "fumadocs" | "ultracite" | "oxlint" | "shadcn-lint" | "opentui" | "wxt" | "msw" | "storybook" | "swr" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "backend-utils" | "devcontainer" | "docker-compose" | "kong" | "github-actions" | "eslint" | "prettier" | "axios" | "firebase" | "graphql-codegen" | "openapi-typescript" | "apollo-client" | "electron" | "capacitor")[];
368
381
  declare function getCompatibleUILibraries(frontends?: Frontend[], astroIntegration?: AstroIntegration): UILibrary[];
369
382
  declare function getCompatibleCSSFrameworks(uiLibrary: UILibrary | undefined, frontends?: Frontend[]): CSSFramework[];
370
383
  declare function hasWebStyling(frontends?: Frontend[]): boolean;
@@ -581,6 +594,10 @@ declare const PACKAGE_MANAGER_COMMANDS: {
581
594
  readonly bun: "bun create better-fullstack@latest";
582
595
  };
583
596
  declare function processCliArrayOption<T>(options: readonly (T | "none")[] | undefined): T[];
597
+ /** Refresh only capability fields from the graph, preserving the primary application editor state. */
598
+ declare function projectGraphScopedSelections(selection: StackSelectionInput): StackSelectionInput;
599
+ /** Update the graph's explicit capabilities when a builder field changes. */
600
+ declare function patchGraphScopedSelections(selection: StackSelectionInput, updates: Partial<StackSelectionInput>): Partial<StackSelectionInput>;
584
601
  declare function isGraphStackSelection(selection: Pick<StackSelectionInput, "stackMode" | "stackPartSpecs">): boolean;
585
602
  declare function isStackSelectionDefault<K extends keyof StackSelectionState>(selection: StackSelectionState, key: K, value: StackSelectionState[K]): boolean;
586
603
  declare function cliInputToProjectConfigPartial(input: CLIInput, projectName?: string): Partial<ProjectConfig>;
@@ -589,5 +606,5 @@ declare function stackSelectionToCliComparableConfig(selection: StackSelectionIn
589
606
  declare function isCliDefaultStackSelection(selection: StackSelectionInput, projectName?: string): boolean;
590
607
  declare function generateStackSelectionCommand(selection: StackSelectionInput): string;
591
608
  //#endregion
592
- 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 };
593
- //# sourceMappingURL=stack-translation-vg1Nwe1o.d.mts.map
609
+ export { formatCompatibilityDecision as $, OptionCategoryMetadata as $t, usesVirtualNoneStackSelection as A, supportsAnalyticsFrontends as At, CompatibilityIssue as B, isBackendUtilsCompatibleBackend as Bt, parseStackSelectionFromSearch as C, isTurnstileWebFrontend as Ct, projectGraphScopedSelections as D, requiresChatSdkVercelAIForSelection as Dt, processCliArrayOption as E, requiresChatSdkVercelAI as Et, CompatibilityCategory as F, getUnsupportedWebDeployFrontend as Ft, KOTLIN_SUPPORTED_JAVA_API as G, DOTNET_CATEGORY_ORDER as Gt, KOTLIN_DROPPED_JAVA_LIBRARIES as H, isExampleChatSdkAllowed as Ht, CompatibilityDecision as I, hasDockerComposeCompatibleFrontend as It, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as J, JAVA_CATEGORY_ORDER as Jt, KOTLIN_SUPPORTED_JAVA_ORM as K, ELIXIR_CATEGORY_ORDER as Kt, CompatibilityEvaluation as L, hasPWACompatibleFrontend as Lt, CompatibilityAdjustment as M, validateProjectName as Mt, CompatibilityAnalysisResult as N, BACKEND_UTILS_COMPATIBLE_BACKENDS as Nt, stackSelectionToCliComparableConfig as O, splitFrontends as Ot, CompatibilityCapabilityReference as P, UI_LIBRARY_COMPATIBILITY as Pt, evaluateCompatibility as Q, OptionCategoryEcosystem as Qt, CompatibilityExplanation as R, hasTanStackAICompatibleFrontend as Rt, normalizeStackSelectionValue as S, isSignozSupportedPythonWebFramework as St, patchGraphScopedSelections as T, isWebFrontend as Tt, KOTLIN_HIDDEN_SHARED_CATEGORIES as U, requiresChatSdkVercelAIForExamples as Ut, CompatibilityStackPartReference as V, isExampleAIAllowed as Vt, KOTLIN_JAVA_ONLY_SHARED_TOOLS as W, CATEGORY_ORDER as Wt, allowedApisForFrontends as X, OPTION_CATEGORY_METADATA as Xt, KotlinJavaGateInput as Y, MULTI_ECOSYSTEM_MOBILE_CATEGORIES as Yt, analyzeStackCompatibility as Z, OptionCategory as Zt, isArrayStackSelectionKey as _, isKotlinIncompatibleOption as _t, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as a, TYPESCRIPT_CATEGORY_ORDER as an, getCompatibleCSSFrameworks as at, isStackSelectionDefault as b, isReactNativeOnlyCategory as bt, StackSelectionInput as c, getCategoryOptionIds as cn, getDisabledReason as ct, StackSelectionState as d, isMultiEcosystemMobileCategory as dn, hasSignozSupportedGoServerTarget as dt, OptionMetadata as en, getAIFrontendCompatibilityIssue as et, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as f, isMultiSelectCategory as fn, hasWebStyling as ft, generateStackSelectionCommand as g, isKotlinBackendSelection as gt, createStackSelectionSearchParams as h, isFrontendAllowedWithBackend as ht, STACK_SELECTION_KEYS as i, RUST_CATEGORY_ORDER as in, getCompatibleAddons as it, ANALYTICS_FRONTEND_SUPPORT as j, validateAddonCompatibility as jt, stackSelectionToProjectConfig as k, stackQualifiesForSingleApp as kt, StackSelectionKey as l, getCategoryOrderForEcosystem as ln, getKotlinJavaIncompatibilityReason as lt, cloneDefaultStackSelection as m, isBotIdWebFrontend as mt, NON_OPTION_STACK_SELECTION_KEYS as n, PYTHON_CATEGORY_ORDER as nn, getCompatibilityDecision as nt, STACK_SELECTION_URL_KEYS as o, getCategoryCliValues as on, getCompatibleFormLibraries as ot, cliInputToProjectConfigPartial as p, normalizeOptionId as pn, isAnalyticsFrontendSupported as pt, KOTLIN_SUPPORTED_JAVA_WEB_FRAMEWORKS as q, GO_CATEGORY_ORDER as qt, PACKAGE_MANAGER_COMMANDS as r, REACT_NATIVE_CATEGORY_ORDER as rn, getCompatibilityExplanation as rt, StackProjectConfigOptions as s, getCategoryDisplayName as sn, getCompatibleUILibraries as st, DEFAULT_STACK_SELECTION as t, OptionSelectionMode as tn, getApiFrontendCompatibilityIssue as tt, StackSelectionMode as u, getOptionMetadata as un, hasReactNativeApp as ut, isCliDefaultStackSelection as v, isKotlinJavaStack as vt, parseStackSelectionFromUrlRecord as w, isVercelAnalyticsFrontend as wt, normalizeStackSelection as x, isSignozSupportedGoWebFramework as xt, isGraphStackSelection as y, isOptionCompatible as yt, CompatibilityInput as z, hasTauriCompatibleFrontend as zt };
610
+ //# sourceMappingURL=stack-translation-DDecTM8V.d.mts.map
@@ -1,5 +1,5 @@
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, bo as WORKSPACE_SHAPE_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 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
- 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-B1N4281Q.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, bo as WORKSPACE_SHAPE_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 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-DWWJaBQD.mjs";
2
+ import { $ as isToolingOverlayOnly, A as hasTanStackAICompatibleFrontend, D as getUnsupportedWebDeployFrontend, E as UI_LIBRARY_COMPATIBILITY, F as requiresChatSdkVercelAIForExamples, I as SHADCN_LINT_FRONTENDS, L as getCodeQualitySelectionIssue, Q as getToolingSelectionOptions, S as stackPartsToLegacyProjectConfigPartial, V as normalizeCodeQualityProfiles, X as getToolingCapability, b as projectStackPartSettingsToProjectConfig, c as formatStackPartSpec, d as getStackPartCompatibilityIssueForPart, g as legacyProjectConfigToStackParts, j as hasTauriCompatibleFrontend, k as hasPWACompatibleFrontend, l as getAddonStackPartBinding, m as hasJavaScriptWorkspaceRoot, tt as toolingRequiresJavaScriptWorkspace, v as mergeProjectConfigSettingsIntoStackParts, w as validateStackParts, y as parseStackPartSpecs, z as getShadcnLintFrontendIssue } from "./stack-graph-BLqsCkqk.mjs";
3
3
  import { t as createCliDefaultProjectConfigBase } from "./defaults-nq08Mnf5.mjs";
4
4
 
5
5
  //#region src/capabilities/capabilities.ts
@@ -706,6 +706,7 @@ const BACKEND_BUILDER_VALUES = [
706
706
  "none"
707
707
  ];
708
708
  const CODE_QUALITY_VALUES = [
709
+ "shadcn-lint",
709
710
  "biome",
710
711
  "eslint",
711
712
  "prettier",
@@ -748,6 +749,7 @@ const toolingSelectionIds = (category) => getToolingSelectionOptions(category).m
748
749
  const EXAMPLE_VALUES = ["ai", "chat-sdk"];
749
750
  const BOOLEAN_OPTION_VALUES = ["true", "false"];
750
751
  const MULTI_SELECT_CATEGORIES = new Set([
752
+ "codeQualityProfile",
751
753
  "webFrontend",
752
754
  "nativeFrontend",
753
755
  "codeQuality",
@@ -1223,6 +1225,7 @@ const EXACT_LABEL_OVERRIDES = {
1223
1225
  eslint: "ESLint",
1224
1226
  prettier: "Prettier",
1225
1227
  oxlint: "Oxlint",
1228
+ "shadcn-lint": "shadcn/lint",
1226
1229
  ultracite: "Ultracite",
1227
1230
  lefthook: "Lefthook",
1228
1231
  husky: "Husky",
@@ -2220,6 +2223,50 @@ const KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES = new Set([
2220
2223
  "jqwik"
2221
2224
  ]);
2222
2225
  const KOTLIN_DROPPED_JAVA_LIBRARIES = new Set(["lombok", "mapstruct"]);
2226
+ const KOTLIN_SUPPORTED_JAVA_WEB_FRAMEWORKS = new Set([
2227
+ "spring-boot",
2228
+ "ktor",
2229
+ "none"
2230
+ ]);
2231
+ const KOTLIN_SUPPORTED_JAVA_ORM = new Set(["spring-data-jpa", "none"]);
2232
+ const KOTLIN_SUPPORTED_JAVA_API = new Set(["spring-graphql", "none"]);
2233
+ const KOTLIN_JAVA_ONLY_SHARED_TOOLS = {
2234
+ email: new Set(["resend"]),
2235
+ search: new Set(["meilisearch"]),
2236
+ caching: new Set(["upstash-redis"]),
2237
+ observability: new Set(["sentry"])
2238
+ };
2239
+ const KOTLIN_HIDDEN_SHARED_CATEGORIES = new Set([
2240
+ "caching",
2241
+ "search",
2242
+ "email",
2243
+ "observability"
2244
+ ]);
2245
+ function isKotlinJavaStack(stack) {
2246
+ return stack.ecosystem === "java" && stack.javaLanguage === "kotlin";
2247
+ }
2248
+ function isKotlinBackendSelection(backendEcosystem, backendLanguage) {
2249
+ return backendEcosystem === "java" && backendLanguage === "kotlin";
2250
+ }
2251
+ function isKotlinIncompatibleOption(category, optionId) {
2252
+ switch (category) {
2253
+ case "javaWebFramework":
2254
+ if (optionId === "none") return false;
2255
+ return !KOTLIN_SUPPORTED_JAVA_WEB_FRAMEWORKS.has(optionId);
2256
+ case "javaBuildTool": return optionId === "none";
2257
+ case "javaOrm":
2258
+ case "javaApi":
2259
+ if (optionId === "none") return false;
2260
+ return category === "javaOrm" ? !KOTLIN_SUPPORTED_JAVA_ORM.has(optionId) : !KOTLIN_SUPPORTED_JAVA_API.has(optionId);
2261
+ case "javaLibraries": return KOTLIN_DROPPED_JAVA_LIBRARIES.has(optionId);
2262
+ case "javaTestingLibraries": return KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES.has(optionId);
2263
+ case "email":
2264
+ case "search":
2265
+ case "caching":
2266
+ case "observability": return KOTLIN_JAVA_ONLY_SHARED_TOOLS[category]?.has(optionId) ?? false;
2267
+ default: return false;
2268
+ }
2269
+ }
2223
2270
  function getKotlinJavaIncompatibilityReason(stack) {
2224
2271
  if (stack.javaWebFramework !== "spring-boot" && stack.javaWebFramework !== "ktor") return "Kotlin sources are only wired for the Spring Boot and Ktor scaffolds";
2225
2272
  if (!stack.javaBuildTool || stack.javaBuildTool === "none") return "Kotlin requires Maven or Gradle";
@@ -2402,7 +2449,7 @@ function stackQualifiesForSingleApp(stack) {
2402
2449
  return true;
2403
2450
  }
2404
2451
  const usesCloudflareFullstackRuntime = (stack) => stack.webDeploy === "cloudflare" && FULLSTACK_SELF_BACKENDS.has(stack.backend);
2405
- const analyzeStackCompatibility = (stack) => {
2452
+ const analyzeStackCompatibility = (stack, options = {}) => {
2406
2453
  if (stack.yolo === "true") return {
2407
2454
  adjustedStack: null,
2408
2455
  notes: {},
@@ -4014,6 +4061,26 @@ const analyzeStackCompatibility = (stack) => {
4014
4061
  message: "Workspace shape set to 'Monorepo' (single-app only supports a thin self app: Next.js or TanStack Start fullstack with no separate database/auth/api/server packages)"
4015
4062
  });
4016
4063
  }
4064
+ const normalizedProfiles = options.normalizeCodeQualityProfiles === false ? nextStack.codeQuality : normalizeCodeQualityProfiles(nextStack.codeQuality);
4065
+ if (normalizedProfiles.length !== nextStack.codeQuality.length || normalizedProfiles.some((toolId, index) => toolId !== nextStack.codeQuality[index])) {
4066
+ nextStack.codeQuality = normalizedProfiles;
4067
+ changed = true;
4068
+ changes.push({
4069
+ category: "codeQuality",
4070
+ message: "Code Quality adjusted to one complete base profile, with shadcn/lint as the optional second selection."
4071
+ });
4072
+ }
4073
+ if (nextStack.codeQuality.includes("shadcn-lint")) {
4074
+ const reason = getCodeQualitySelectionIssue(nextStack.codeQuality) ?? getShadcnLintFrontendIssue(nextStack.webFrontend, nextStack.cssFramework);
4075
+ if (reason) {
4076
+ nextStack.codeQuality = nextStack.codeQuality.filter((toolId) => toolId !== "shadcn-lint");
4077
+ changed = true;
4078
+ changes.push({
4079
+ category: "codeQuality",
4080
+ message: `Removed shadcn/lint: ${reason}`
4081
+ });
4082
+ }
4083
+ }
4017
4084
  return {
4018
4085
  adjustedStack: changed ? nextStack : null,
4019
4086
  notes,
@@ -4793,7 +4860,7 @@ function getAddonOrExampleGraphBinding(category, optionId) {
4793
4860
  allowOwnerlessCandidate: true,
4794
4861
  authoritative: true
4795
4862
  };
4796
- if (category !== "appPlatforms") return void 0;
4863
+ if (category !== "appPlatforms" && category !== "codeQuality") return void 0;
4797
4864
  const binding = getAddonStackPartBinding(optionId);
4798
4865
  if (!binding) return void 0;
4799
4866
  return {
@@ -5535,6 +5602,7 @@ const ADDON_COMPATIBILITY = {
5535
5602
  mcp: [],
5536
5603
  skills: [],
5537
5604
  oxlint: [],
5605
+ "shadcn-lint": SHADCN_LINT_FRONTENDS,
5538
5606
  fumadocs: [],
5539
5607
  opentui: [],
5540
5608
  wxt: [],
@@ -7510,8 +7578,8 @@ function expandScopedStackPartSpecs(specs, fields) {
7510
7578
  const stackPartSpecSet = new Set(stackPartSpecs);
7511
7579
  const getPrimary = (role, ecosystem) => stackParts.find((part) => part.role === role && part.ecosystem === ecosystem && !part.ownerPartId && part.source !== "provided");
7512
7580
  const hasScoped = (ownerId, role, ecosystem, toolId, allowMultiple = false) => stackParts.some((part) => part.role === role && part.ecosystem === ecosystem && part.ownerPartId === ownerId && part.source !== "provided" && (allowMultiple ? part.toolId === toolId : true));
7513
- for (const { ownerRole, ecosystem, role, value, allowMultiple, replaceExisting } of fields) {
7514
- const owner = ownerRole ? getPrimary(ownerRole, ecosystem) : void 0;
7581
+ for (const { ownerPartId, ownerRole, ecosystem, role, value, allowMultiple, replaceExisting } of fields) {
7582
+ const owner = ownerPartId ? stackParts.find((part) => part.id === ownerPartId) : ownerRole ? getPrimary(ownerRole, ecosystem) : void 0;
7515
7583
  if (replaceExisting && value !== void 0 && owner) {
7516
7584
  const matchingParts = stackParts.filter((part) => part.role === role && part.ecosystem === ecosystem && part.ownerPartId === owner.id && part.source !== "provided");
7517
7585
  for (const part of matchingParts) {
@@ -7533,8 +7601,9 @@ function expandScopedStackPartSpecs(specs, fields) {
7533
7601
  }
7534
7602
  continue;
7535
7603
  }
7536
- if (!owner || hasScoped(owner.id, role, ecosystem, toolId, allowMultiple)) continue;
7537
- const spec = `${ownerRole}.${role}:${ecosystem}:${toolId}`;
7604
+ const alreadyOwned = !ownerPartId && stackParts.some((part) => !part.ownerPartId && part.role === ownerRole && part.ecosystem === ecosystem && hasScoped(part.id, role, ecosystem, toolId, allowMultiple));
7605
+ if (!owner || alreadyOwned || hasScoped(owner.id, role, ecosystem, toolId, allowMultiple)) continue;
7606
+ const spec = `${stackParts.filter((part) => !part.ownerPartId && part.source !== "provided" && part.role === ownerRole && part.ecosystem === ecosystem).length > 1 ? owner.id : ownerRole}.${role}:${ecosystem}:${toolId}`;
7538
7607
  if (!stackPartSpecSet.has(spec)) {
7539
7608
  stackPartSpecs.push(spec);
7540
7609
  stackPartSpecSet.add(spec);
@@ -7670,6 +7739,84 @@ function getSelectionScopedPartFields(selection) {
7670
7739
  ...getExampleScopedPartFields(selection.examples)
7671
7740
  ];
7672
7741
  }
7742
+ /** Refresh only capability fields from the graph, preserving the primary application editor state. */
7743
+ function projectGraphScopedSelections(selection) {
7744
+ if (!isGraphStackSelection(selection) || selection.stackPartSpecs.length === 0) return selection;
7745
+ const parts = parseStackPartSpecs(selection.stackPartSpecs, "selected").filter((part) => part.source !== "provided");
7746
+ const rootProjection = stackPartsToLegacyProjectConfigPartial(parts.filter((part) => !part.ownerPartId));
7747
+ const graphProjection = stackPartsToLegacyProjectConfigPartial(parts);
7748
+ const patch = {};
7749
+ for (const [key, category] of Object.entries(STACK_SELECTION_OPTION_CATEGORY_BY_KEY)) {
7750
+ const configKey = category;
7751
+ const value = graphProjection[configKey];
7752
+ if (JSON.stringify(value) === JSON.stringify(rootProjection[configKey])) continue;
7753
+ if (typeof value === "string" || Array.isArray(value) && value.every((entry) => typeof entry === "string")) patch[key] = value;
7754
+ }
7755
+ return {
7756
+ ...selection,
7757
+ ...patch
7758
+ };
7759
+ }
7760
+ /** Update the graph's explicit capabilities when a builder field changes. */
7761
+ function patchGraphScopedSelections(selection, updates) {
7762
+ if (!isGraphStackSelection(selection) || updates.stackPartSpecs) return updates;
7763
+ selection = projectGraphScopedSelections(selection);
7764
+ const next = {
7765
+ ...selection,
7766
+ ...updates
7767
+ };
7768
+ const groupFields = (fields) => {
7769
+ const groups = /* @__PURE__ */ new Map();
7770
+ for (const field of fields) {
7771
+ const key = `${field.ownerRole ?? "root"}:${field.ecosystem}:${field.role}`;
7772
+ const group = groups.get(key) ?? {
7773
+ field,
7774
+ values: /* @__PURE__ */ new Set()
7775
+ };
7776
+ for (const value of Array.isArray(field.value) ? field.value : [field.value]) if (value && value !== "none") group.values.add(value);
7777
+ groups.set(key, group);
7778
+ }
7779
+ return groups;
7780
+ };
7781
+ const before = groupFields(getSelectionScopedPartFields(selection));
7782
+ const after = groupFields(getSelectionScopedPartFields(next));
7783
+ let parts = parseStackPartSpecs(selection.stackPartSpecs, "selected").filter((part) => part.source !== "provided");
7784
+ const changedFields = [];
7785
+ for (const key of new Set([...before.keys(), ...after.keys()])) {
7786
+ const oldGroup = before.get(key);
7787
+ const newGroup = after.get(key);
7788
+ const oldValues = oldGroup?.values ?? /* @__PURE__ */ new Set();
7789
+ const newValues = newGroup?.values ?? /* @__PURE__ */ new Set();
7790
+ if (oldValues.size === newValues.size && [...oldValues].every((value) => newValues.has(value))) continue;
7791
+ const field = newGroup?.field ?? oldGroup?.field;
7792
+ if (!field) continue;
7793
+ const owners = parts.filter((part) => !part.ownerPartId && part.role === field.ownerRole && part.ecosystem === field.ecosystem);
7794
+ const projectedCapability = parts.findLast((part) => part.role === field.role && part.ecosystem === field.ecosystem && oldValues.has(part.toolId) && owners.some((owner$1) => owner$1.id === part.ownerPartId));
7795
+ const owner = owners.find((part) => part.id === projectedCapability?.ownerPartId) ?? (owners.length === 1 ? owners[0] : void 0);
7796
+ if (field.allowMultiple) {
7797
+ parts = parts.filter((part) => !(part.role === field.role && part.ecosystem === field.ecosystem && (field.ownerRole ? owners.some((candidate) => candidate.id === part.ownerPartId) : !part.ownerPartId) && oldValues.has(part.toolId) && !newValues.has(part.toolId)));
7798
+ const added = [...newValues].filter((value) => !oldValues.has(value));
7799
+ if (added.length && (!field.ownerRole || owner)) changedFields.push({
7800
+ ...field,
7801
+ ownerPartId: owner?.id,
7802
+ value: added
7803
+ });
7804
+ continue;
7805
+ }
7806
+ if (field.ownerRole && !owner) continue;
7807
+ parts = parts.filter((part) => !(part.ownerPartId === owner?.id && part.role === field.role && part.ecosystem === field.ecosystem));
7808
+ changedFields.push({
7809
+ ...field,
7810
+ ownerPartId: owner?.id,
7811
+ value: [...newValues]
7812
+ });
7813
+ }
7814
+ const specs = parts.map((part) => formatStackPartSpec(part, parts));
7815
+ return {
7816
+ ...updates,
7817
+ stackPartSpecs: expandScopedStackPartSpecs(specs, changedFields)
7818
+ };
7819
+ }
7673
7820
  function getCliScopedPartFields(input) {
7674
7821
  const getValue = (key) => {
7675
7822
  const value = input[key];
@@ -7808,12 +7955,23 @@ function getSelectableStackPartSpecs(specs) {
7808
7955
  return specs.filter((spec) => spec.split(":")[2] !== "none");
7809
7956
  }
7810
7957
  function isGraphStackSelection(selection) {
7811
- return (selection.stackMode === "multi" || String(selection.stackMode) === "graph") && getSelectableStackPartSpecs(selection.stackPartSpecs).length > 0;
7958
+ return selection.stackMode === "multi" || String(selection.stackMode) === "graph";
7812
7959
  }
7813
7960
  function getGraphStackParts(selection) {
7814
- const stackPartSpecs = expandScopedStackPartSpecs(selection.stackPartSpecs, getSelectionScopedPartFields(selection));
7961
+ const hasJavaScript = hasJavaScriptWorkspaceRoot(parseStackPartSpecs(selection.stackPartSpecs, "selected"));
7962
+ const fields = getSelectionScopedPartFields(selection).map((field) => ({
7963
+ ...field,
7964
+ value: (Array.isArray(field.value) ? field.value : [field.value]).filter((value) => value && (hasJavaScript || !toolingRequiresJavaScriptWorkspace(value)))
7965
+ }));
7966
+ const stackPartSpecs = expandScopedStackPartSpecs(selection.stackPartSpecs.filter((spec) => hasJavaScript || !toolingRequiresJavaScriptWorkspace(spec.split(":")[2] ?? "")), fields);
7815
7967
  const stackParts = parseStackPartSpecs(stackPartSpecs, "selected");
7816
- const validation = validateStackParts(parseStackPartSpecs(getSelectableStackPartSpecs(stackPartSpecs), "selected"));
7968
+ const selectableStackParts = parseStackPartSpecs(getSelectableStackPartSpecs(stackPartSpecs), "selected");
7969
+ if (!selectableStackParts.some((part) => !part.ownerPartId && part.source !== "provided" && [
7970
+ "frontend",
7971
+ "backend",
7972
+ "mobile"
7973
+ ].includes(part.role))) throw new Error("Choose at least one application before generating a project.");
7974
+ const validation = validateStackParts(selectableStackParts);
7817
7975
  if (validation.issues.length > 0) throw new Error(validation.issues.map((issue) => issue.message).join("\n"));
7818
7976
  return mergeProjectConfigSettingsIntoStackParts(stackParts, selection);
7819
7977
  }
@@ -8103,6 +8261,7 @@ function buildProjectConfigBase(selection, projectName, relativePath, install) {
8103
8261
  return {
8104
8262
  ...baseConfig,
8105
8263
  ...loweredGraphConfig,
8264
+ addons: loweredGraphConfig.addons ?? [],
8106
8265
  ...graphBackend ? {
8107
8266
  effect: "effect-full",
8108
8267
  validation: "effect-schema"
@@ -8185,7 +8344,7 @@ function generateGraphCommand(selection, projectName) {
8185
8344
  ...hasNonTypeScriptBackend ? formatChangedStringFlags(selection, GRAPH_SHARED_BACKEND_FLAG_KEYS) : [],
8186
8345
  ...hasElixirBackend ? formatChangedStringFlags(selection, GRAPH_ELIXIR_BACKEND_FLAG_KEYS) : [],
8187
8346
  ...hasMobile ? formatChangedStringFlags(selection, GRAPH_MOBILE_FLAG_KEYS) : [],
8188
- `--package-manager ${selection.packageManager}`,
8347
+ ...hasJavaScriptWorkspaceRoot(stackParts) ? [`--package-manager ${selection.packageManager}`] : [],
8189
8348
  ...selection.versionChannel !== "stable" ? [`--version-channel ${selection.versionChannel}`] : [],
8190
8349
  selection.git === "false" ? "--no-git" : "--git",
8191
8350
  selection.install === "false" ? "--no-install" : "--install",
@@ -8474,5 +8633,5 @@ function generateStackSelectionCommand(selection) {
8474
8633
  }
8475
8634
 
8476
8635
  //#endregion
8477
- 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 };
8478
- //# sourceMappingURL=stack-translation-DYhRy_yT.mjs.map
8636
+ export { isFrontendAllowedWithBackend as $, KOTLIN_SUPPORTED_JAVA_API as A, getCategoryOptionIds as At, getCompatibilityDecision as B, stackSelectionToCliComparableConfig as C, OPTION_CATEGORY_METADATA as Ct, KOTLIN_DROPPED_JAVA_LIBRARIES as D, TYPESCRIPT_CATEGORY_ORDER as Dt, ANALYTICS_FRONTEND_SUPPORT as E, RUST_CATEGORY_ORDER as Et, analyzeStackCompatibility as F, normalizeOptionId as Ft, getCompatibleUILibraries as G, getCompatibleAddons as H, evaluateCompatibility as I, getCapabilityDefinitions as It, hasReactNativeApp as J, getDisabledReason as K, formatCompatibilityDecision as L, getCapabilityDisabledReason as Lt, KOTLIN_SUPPORTED_JAVA_WEB_FRAMEWORKS as M, getOptionMetadata as Mt, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as N, isMultiEcosystemMobileCategory as Nt, KOTLIN_HIDDEN_SHARED_CATEGORIES as O, getCategoryCliValues as Ot, allowedApisForFrontends as P, isMultiSelectCategory as Pt, isBotIdWebFrontend as Q, getAIFrontendCompatibilityIssue as R, getSupportedCapabilityOptions as Rt, projectGraphScopedSelections as S, MULTI_ECOSYSTEM_MOBILE_CATEGORIES as St, usesVirtualNoneStackSelection as T, REACT_NATIVE_CATEGORY_ORDER as Tt, getCompatibleCSSFrameworks as U, getCompatibilityExplanation as V, getCompatibleFormLibraries as W, hasWebStyling as X, hasSignozSupportedGoServerTarget as Y, isAnalyticsFrontendSupported as Z, normalizeStackSelectionValue as _, CATEGORY_ORDER as _t, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as a, isSignozSupportedGoWebFramework as at, patchGraphScopedSelections as b, GO_CATEGORY_ORDER as bt, cliInputToProjectConfigPartial as c, isVercelAnalyticsFrontend as ct, generateStackSelectionCommand as d, requiresChatSdkVercelAIForSelection as dt, isKotlinBackendSelection as et, isArrayStackSelectionKey as f, splitFrontends as ft, normalizeStackSelection as g, validateProjectName as gt, isStackSelectionDefault as h, validateAddonCompatibility as ht, STACK_SELECTION_KEYS as i, isReactNativeOnlyCategory as it, KOTLIN_SUPPORTED_JAVA_ORM as j, getCategoryOrderForEcosystem as jt, KOTLIN_JAVA_ONLY_SHARED_TOOLS as k, getCategoryDisplayName as kt, cloneDefaultStackSelection as l, isWebFrontend as lt, isGraphStackSelection as m, supportsAnalyticsFrontends as mt, NON_OPTION_STACK_SELECTION_KEYS as n, isKotlinJavaStack as nt, STACK_SELECTION_URL_KEYS as o, isSignozSupportedPythonWebFramework as ot, isCliDefaultStackSelection as p, stackQualifiesForSingleApp as pt, getKotlinJavaIncompatibilityReason as q, PACKAGE_MANAGER_COMMANDS as r, isOptionCompatible as rt, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as s, isTurnstileWebFrontend as st, DEFAULT_STACK_SELECTION as t, isKotlinIncompatibleOption as tt, createStackSelectionSearchParams as u, requiresChatSdkVercelAI as ut, parseStackSelectionFromSearch as v, DOTNET_CATEGORY_ORDER as vt, stackSelectionToProjectConfig as w, PYTHON_CATEGORY_ORDER as wt, processCliArrayOption as x, JAVA_CATEGORY_ORDER as xt, parseStackSelectionFromUrlRecord as y, ELIXIR_CATEGORY_ORDER as yt, getApiFrontendCompatibilityIssue as z, normalizeCapabilitySelection as zt };
8637
+ //# sourceMappingURL=stack-translation-HKhp-rYK.mjs.map
@@ -1,5 +1,5 @@
1
- import "./schemas-CgldOz7b.mjs";
2
- import "./types-BvyHjJEI.mjs";
3
- import "./defaults-B8xnKlp6.mjs";
4
- import { C as parseStackSelectionFromSearch, D as stackSelectionToProjectConfig, E as stackSelectionToCliComparableConfig, O as usesVirtualNoneStackSelection, S as normalizeStackSelectionValue, T as processCliArrayOption, _ as isArrayStackSelectionKey, a as STACK_SELECTION_OPTION_CATEGORY_BY_KEY, b as isStackSelectionDefault, c as StackSelectionInput, d as StackSelectionState, f as VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, g as generateStackSelectionCommand, h as createStackSelectionSearchParams, i as STACK_SELECTION_KEYS, l as StackSelectionKey, m as cloneDefaultStackSelection, n as NON_OPTION_STACK_SELECTION_KEYS, o as STACK_SELECTION_URL_KEYS, p as cliInputToProjectConfigPartial, r as PACKAGE_MANAGER_COMMANDS, s as StackProjectConfigOptions, t as DEFAULT_STACK_SELECTION, u as StackSelectionMode, v as isCliDefaultStackSelection, w as parseStackSelectionFromUrlRecord, x as normalizeStackSelection, y as isGraphStackSelection } from "./stack-translation-vg1Nwe1o.mjs";
5
- export { DEFAULT_STACK_SELECTION, NON_OPTION_STACK_SELECTION_KEYS, PACKAGE_MANAGER_COMMANDS, STACK_SELECTION_KEYS, STACK_SELECTION_OPTION_CATEGORY_BY_KEY, STACK_SELECTION_URL_KEYS, StackProjectConfigOptions, StackSelectionInput, StackSelectionKey, StackSelectionMode, StackSelectionState, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, cliInputToProjectConfigPartial, cloneDefaultStackSelection, createStackSelectionSearchParams, generateStackSelectionCommand, isArrayStackSelectionKey, isCliDefaultStackSelection, isGraphStackSelection, isStackSelectionDefault, normalizeStackSelection, normalizeStackSelectionValue, parseStackSelectionFromSearch, parseStackSelectionFromUrlRecord, processCliArrayOption, stackSelectionToCliComparableConfig, stackSelectionToProjectConfig, usesVirtualNoneStackSelection };
1
+ import "./schemas-DMxQS38P.mjs";
2
+ import "./types-DAJKUOQ_.mjs";
3
+ import "./defaults-CXCA_IXN.mjs";
4
+ import { A as usesVirtualNoneStackSelection, C as parseStackSelectionFromSearch, D as projectGraphScopedSelections, E as processCliArrayOption, O as stackSelectionToCliComparableConfig, S as normalizeStackSelectionValue, T as patchGraphScopedSelections, _ as isArrayStackSelectionKey, a as STACK_SELECTION_OPTION_CATEGORY_BY_KEY, b as isStackSelectionDefault, c as StackSelectionInput, d as StackSelectionState, f as VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, g as generateStackSelectionCommand, h as createStackSelectionSearchParams, i as STACK_SELECTION_KEYS, k as stackSelectionToProjectConfig, l as StackSelectionKey, m as cloneDefaultStackSelection, n as NON_OPTION_STACK_SELECTION_KEYS, o as STACK_SELECTION_URL_KEYS, p as cliInputToProjectConfigPartial, r as PACKAGE_MANAGER_COMMANDS, s as StackProjectConfigOptions, t as DEFAULT_STACK_SELECTION, u as StackSelectionMode, v as isCliDefaultStackSelection, w as parseStackSelectionFromUrlRecord, x as normalizeStackSelection, y as isGraphStackSelection } from "./stack-translation-DDecTM8V.mjs";
5
+ export { DEFAULT_STACK_SELECTION, NON_OPTION_STACK_SELECTION_KEYS, PACKAGE_MANAGER_COMMANDS, STACK_SELECTION_KEYS, STACK_SELECTION_OPTION_CATEGORY_BY_KEY, STACK_SELECTION_URL_KEYS, StackProjectConfigOptions, StackSelectionInput, StackSelectionKey, StackSelectionMode, StackSelectionState, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, cliInputToProjectConfigPartial, cloneDefaultStackSelection, createStackSelectionSearchParams, generateStackSelectionCommand, isArrayStackSelectionKey, isCliDefaultStackSelection, isGraphStackSelection, isStackSelectionDefault, normalizeStackSelection, normalizeStackSelectionValue, parseStackSelectionFromSearch, parseStackSelectionFromUrlRecord, patchGraphScopedSelections, processCliArrayOption, projectGraphScopedSelections, stackSelectionToCliComparableConfig, stackSelectionToProjectConfig, usesVirtualNoneStackSelection };
@@ -1,5 +1,5 @@
1
- import "./schemas-CywxHrK2.mjs";
2
- import { C as usesVirtualNoneStackSelection, S as stackSelectionToProjectConfig, _ as normalizeStackSelectionValue, a as STACK_SELECTION_OPTION_CATEGORY_BY_KEY, b as processCliArrayOption, c as cliInputToProjectConfigPartial, d as generateStackSelectionCommand, f as isArrayStackSelectionKey, g as normalizeStackSelection, h as isStackSelectionDefault, i as STACK_SELECTION_KEYS, l as cloneDefaultStackSelection, m as isGraphStackSelection, n as NON_OPTION_STACK_SELECTION_KEYS, o as STACK_SELECTION_URL_KEYS, p as isCliDefaultStackSelection, r as PACKAGE_MANAGER_COMMANDS, s as VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, t as DEFAULT_STACK_SELECTION, u as createStackSelectionSearchParams, v as parseStackSelectionFromSearch, x as stackSelectionToCliComparableConfig, y as parseStackSelectionFromUrlRecord } from "./stack-translation-DYhRy_yT.mjs";
3
- import "./stack-graph-B1N4281Q.mjs";
1
+ import "./schemas-DWWJaBQD.mjs";
2
+ import { C as stackSelectionToCliComparableConfig, S as projectGraphScopedSelections, T as usesVirtualNoneStackSelection, _ as normalizeStackSelectionValue, a as STACK_SELECTION_OPTION_CATEGORY_BY_KEY, b as patchGraphScopedSelections, c as cliInputToProjectConfigPartial, d as generateStackSelectionCommand, f as isArrayStackSelectionKey, g as normalizeStackSelection, h as isStackSelectionDefault, i as STACK_SELECTION_KEYS, l as cloneDefaultStackSelection, m as isGraphStackSelection, n as NON_OPTION_STACK_SELECTION_KEYS, o as STACK_SELECTION_URL_KEYS, p as isCliDefaultStackSelection, r as PACKAGE_MANAGER_COMMANDS, s as VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, t as DEFAULT_STACK_SELECTION, u as createStackSelectionSearchParams, v as parseStackSelectionFromSearch, w as stackSelectionToProjectConfig, x as processCliArrayOption, y as parseStackSelectionFromUrlRecord } from "./stack-translation-HKhp-rYK.mjs";
3
+ import "./stack-graph-BLqsCkqk.mjs";
4
4
 
5
- export { DEFAULT_STACK_SELECTION, NON_OPTION_STACK_SELECTION_KEYS, PACKAGE_MANAGER_COMMANDS, STACK_SELECTION_KEYS, STACK_SELECTION_OPTION_CATEGORY_BY_KEY, STACK_SELECTION_URL_KEYS, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, cliInputToProjectConfigPartial, cloneDefaultStackSelection, createStackSelectionSearchParams, generateStackSelectionCommand, isArrayStackSelectionKey, isCliDefaultStackSelection, isGraphStackSelection, isStackSelectionDefault, normalizeStackSelection, normalizeStackSelectionValue, parseStackSelectionFromSearch, parseStackSelectionFromUrlRecord, processCliArrayOption, stackSelectionToCliComparableConfig, stackSelectionToProjectConfig, usesVirtualNoneStackSelection };
5
+ export { DEFAULT_STACK_SELECTION, NON_OPTION_STACK_SELECTION_KEYS, PACKAGE_MANAGER_COMMANDS, STACK_SELECTION_KEYS, STACK_SELECTION_OPTION_CATEGORY_BY_KEY, STACK_SELECTION_URL_KEYS, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS, cliInputToProjectConfigPartial, cloneDefaultStackSelection, createStackSelectionSearchParams, generateStackSelectionCommand, isArrayStackSelectionKey, isCliDefaultStackSelection, isGraphStackSelection, isStackSelectionDefault, normalizeStackSelection, normalizeStackSelectionValue, parseStackSelectionFromSearch, parseStackSelectionFromUrlRecord, patchGraphScopedSelections, processCliArrayOption, projectGraphScopedSelections, stackSelectionToCliComparableConfig, stackSelectionToProjectConfig, usesVirtualNoneStackSelection };
@@ -1,6 +1,6 @@
1
- import { Ht as EcosystemSchema, Oi as ProjectConfigSchema, eo as StackPartRoleSchema } from "./schemas-CywxHrK2.mjs";
2
- import { S as stackSelectionToProjectConfig, bt as getCategoryOptionIds, g as normalizeStackSelection, l as cloneDefaultStackSelection, pt as OPTION_CATEGORY_METADATA, xt as getCategoryOrderForEcosystem } from "./stack-translation-DYhRy_yT.mjs";
3
- import { a as STACK_TOOL_DEFINITIONS, c as formatStackPartSpec, g as legacyProjectConfigToStackParts, w as validateStackParts } from "./stack-graph-B1N4281Q.mjs";
1
+ import { Ht as EcosystemSchema, Oi as ProjectConfigSchema, eo as StackPartRoleSchema } from "./schemas-DWWJaBQD.mjs";
2
+ import { At as getCategoryOptionIds, Ct as OPTION_CATEGORY_METADATA, g as normalizeStackSelection, jt as getCategoryOrderForEcosystem, l as cloneDefaultStackSelection, w as stackSelectionToProjectConfig } from "./stack-translation-HKhp-rYK.mjs";
3
+ import { a as STACK_TOOL_DEFINITIONS, c as formatStackPartSpec, g as legacyProjectConfigToStackParts, w as validateStackParts } from "./stack-graph-BLqsCkqk.mjs";
4
4
  import { z } from "zod";
5
5
 
6
6
  //#region src/capabilities/evidence.ts
@@ -2269,4 +2269,4 @@ function sanitizeTelemetryStackDimension(key, value) {
2269
2269
 
2270
2270
  //#endregion
2271
2271
  export { CAPABILITY_RECEIPT_SCHEMA_VERSION as $, sanitizeTelemetryStackDimension as A, STARTER_TRACK_WORKSPACE_SHAPE_IDS as B, sanitizeTelemetryFailureStage as C, sanitizeTelemetryPlatform as D, sanitizeTelemetryNodeVersion as E, STARTER_TRACK_FILTER_URL_KEYS as F, getStarterTrackCatalog as G, createStarterTrackFilterSearchParams as H, STARTER_TRACK_IDS as I, CAPABILITY_FRESHNESS_IDS as J, parseStarterTrackFilters as K, STARTER_TRACK_PACKAGE_MANAGER_IDS as L, STARTER_TRACK_DATABASE_IDS as M, STARTER_TRACK_DEFINITIONS as N, sanitizeTelemetrySetupFailure as O, STARTER_TRACK_DEPLOYMENT_TARGET_IDS as P, CAPABILITY_RECEIPT_MAX_AGE_DAYS as Q, STARTER_TRACK_RUNTIME_IDS as R, sanitizeTelemetryFailureReason as S, sanitizeTelemetryMode as T, getProjectConfigEvidence as U, StarterTrackFiltersSchema as V, getStackSelectionEvidence as W, CAPABILITY_MATURITY_IDS as X, CAPABILITY_INVENTORY_SCHEMA_VERSION as Y, CAPABILITY_QUARANTINE as Z, sanitizeTelemetryAction as _, TELEMETRY_EXECUTION_RUNTIMES as a, CAPABILITY_EVIDENCE_LEVELS as at, sanitizeTelemetryErrorName as b, TELEMETRY_MODE_IDS as c, CapabilityEvidenceLevelSchema as ct, TELEMETRY_SELECTION_OUTCOMES as d, capabilityEvidenceLevel as dt, CapabilityEvidenceReceiptSchema as et, TELEMETRY_SELECTION_PROBLEMS as f, isTelemetryStackDimensionKey as g, isRegisteredTelemetryStackPartSelection as h, TELEMETRY_ERROR_NAMES as i, getCapabilityMaintenanceCosts as it, STARTER_TRACK_AUTH_IDS as j, sanitizeTelemetrySetupFailures as k, TELEMETRY_PLATFORMS as l, capCapabilityEvidenceLevel as lt, TELEMETRY_STACK_DIMENSION_KEYS as m, TELEMETRY_CI_PROVIDERS as n, GOLDEN_RUNTIME_RECIPES as nt, TELEMETRY_FAILURE_REASONS as o, CAPABILITY_EVIDENCE_LEVEL_IDS as ot, TELEMETRY_SETUP_FAILURE_IDS as p, recommendStarterTrack as q, TELEMETRY_DECISION_STAGES as r, getCapabilityInventory as rt, TELEMETRY_FAILURE_STAGES as s, CAPABILITY_EVIDENCE_SCHEMA_VERSION as st, TELEMETRY_ACTION_IDS as t, CapabilityRecipeResultSchema as tt, TELEMETRY_PROJECT_CONFIG_KEYS as u, capabilityEvidenceAtLeast as ut, sanitizeTelemetryCiProvider as v, sanitizeTelemetryMachineId as w, sanitizeTelemetryExecutionRuntime as x, sanitizeTelemetryCliVersion as y, STARTER_TRACK_SCHEMA_VERSION as z };
2272
- //# sourceMappingURL=telemetry-C3RfYkCK.mjs.map
2272
+ //# sourceMappingURL=telemetry-BjMbLJUQ.mjs.map
@@ -1,6 +1,6 @@
1
- import "./schemas-CywxHrK2.mjs";
2
- import "./stack-translation-DYhRy_yT.mjs";
3
- import "./stack-graph-B1N4281Q.mjs";
4
- import { A as sanitizeTelemetryStackDimension, C as sanitizeTelemetryFailureStage, D as sanitizeTelemetryPlatform, E as sanitizeTelemetryNodeVersion, O as sanitizeTelemetrySetupFailure, S as sanitizeTelemetryFailureReason, T as sanitizeTelemetryMode, _ as sanitizeTelemetryAction, a as TELEMETRY_EXECUTION_RUNTIMES, b as sanitizeTelemetryErrorName, c as TELEMETRY_MODE_IDS, d as TELEMETRY_SELECTION_OUTCOMES, f as TELEMETRY_SELECTION_PROBLEMS, g as isTelemetryStackDimensionKey, h as isRegisteredTelemetryStackPartSelection, i as TELEMETRY_ERROR_NAMES, k as sanitizeTelemetrySetupFailures, l as TELEMETRY_PLATFORMS, m as TELEMETRY_STACK_DIMENSION_KEYS, n as TELEMETRY_CI_PROVIDERS, o as TELEMETRY_FAILURE_REASONS, p as TELEMETRY_SETUP_FAILURE_IDS, r as TELEMETRY_DECISION_STAGES, s as TELEMETRY_FAILURE_STAGES, t as TELEMETRY_ACTION_IDS, u as TELEMETRY_PROJECT_CONFIG_KEYS, v as sanitizeTelemetryCiProvider, w as sanitizeTelemetryMachineId, x as sanitizeTelemetryExecutionRuntime, y as sanitizeTelemetryCliVersion } from "./telemetry-C3RfYkCK.mjs";
1
+ import "./schemas-DWWJaBQD.mjs";
2
+ import "./stack-translation-HKhp-rYK.mjs";
3
+ import "./stack-graph-BLqsCkqk.mjs";
4
+ import { A as sanitizeTelemetryStackDimension, C as sanitizeTelemetryFailureStage, D as sanitizeTelemetryPlatform, E as sanitizeTelemetryNodeVersion, O as sanitizeTelemetrySetupFailure, S as sanitizeTelemetryFailureReason, T as sanitizeTelemetryMode, _ as sanitizeTelemetryAction, a as TELEMETRY_EXECUTION_RUNTIMES, b as sanitizeTelemetryErrorName, c as TELEMETRY_MODE_IDS, d as TELEMETRY_SELECTION_OUTCOMES, f as TELEMETRY_SELECTION_PROBLEMS, g as isTelemetryStackDimensionKey, h as isRegisteredTelemetryStackPartSelection, i as TELEMETRY_ERROR_NAMES, k as sanitizeTelemetrySetupFailures, l as TELEMETRY_PLATFORMS, m as TELEMETRY_STACK_DIMENSION_KEYS, n as TELEMETRY_CI_PROVIDERS, o as TELEMETRY_FAILURE_REASONS, p as TELEMETRY_SETUP_FAILURE_IDS, r as TELEMETRY_DECISION_STAGES, s as TELEMETRY_FAILURE_STAGES, t as TELEMETRY_ACTION_IDS, u as TELEMETRY_PROJECT_CONFIG_KEYS, v as sanitizeTelemetryCiProvider, w as sanitizeTelemetryMachineId, x as sanitizeTelemetryExecutionRuntime, y as sanitizeTelemetryCliVersion } from "./telemetry-BjMbLJUQ.mjs";
5
5
 
6
6
  export { TELEMETRY_ACTION_IDS, TELEMETRY_CI_PROVIDERS, TELEMETRY_DECISION_STAGES, TELEMETRY_ERROR_NAMES, TELEMETRY_EXECUTION_RUNTIMES, TELEMETRY_FAILURE_REASONS, TELEMETRY_FAILURE_STAGES, TELEMETRY_MODE_IDS, TELEMETRY_PLATFORMS, TELEMETRY_PROJECT_CONFIG_KEYS, TELEMETRY_SELECTION_OUTCOMES, TELEMETRY_SELECTION_PROBLEMS, TELEMETRY_SETUP_FAILURE_IDS, TELEMETRY_STACK_DIMENSION_KEYS, isRegisteredTelemetryStackPartSelection, isTelemetryStackDimensionKey, sanitizeTelemetryAction, sanitizeTelemetryCiProvider, sanitizeTelemetryCliVersion, sanitizeTelemetryErrorName, sanitizeTelemetryExecutionRuntime, sanitizeTelemetryFailureReason, sanitizeTelemetryFailureStage, sanitizeTelemetryMachineId, sanitizeTelemetryMode, sanitizeTelemetryNodeVersion, sanitizeTelemetryPlatform, sanitizeTelemetrySetupFailure, sanitizeTelemetrySetupFailures, sanitizeTelemetryStackDimension };
@@ -1,4 +1,4 @@
1
- import { $ as DatabaseSchema, $a as StackPartEcosystemSchema, $n as GoQualitySchema, $r as ORMSchema, $t as ElixirHttpServerSchema, Aa as RustTemplatingSchema, Ai as ProjectShapeSchema, Bi as PythonMediaSchema, C as BetterFullstackConfigSchema, Ca as RustFrontendSchema, Co as WorkspaceShapeSchema, Cr as JavaLanguageSchema, Da as RustObservabilitySchema, Di as PaymentsSchema, Dr as JavaTestingLibrariesSchema, E as BotProtectionSchema, Ea as RustMessageQueueSchema, Ei as PackageManagerSchema, Er as JavaOrmSchema, Fi as PythonCliSchema, Fr as LoggingSchema, Ga as ServerDeploySchema, Gi as PythonQualitySchema, Gn as GoConfigSchema, Gr as MobileLibrariesSchema, Gt as ElixirApplicationFrameworkSchema, Hi as PythonObservabilitySchema, Hn as GoAuthSchema, Ht as EcosystemSchema, Ii as PythonCloudSdkSchema, Ja as ShadcnColorThemeSchema, Ji as PythonTaskQueueSchema, Jn as GoMessageQueueSchema, Jr as MobilePushSchema, Jt as ElixirClusteringSchema, Ka as ShadcnBaseColorSchema, Ki as PythonRealtimeSchema, Kn as GoDISchema, Kr as MobileNavigationSchema, Kt as ElixirAuthSchema, Li as PythonDataSchema, Mi as PythonApiSchema, Mr as KotlinMobileLibrariesSchema, N as CachingSchema, Ni as PythonAuthSchema, Nr as KotlinMobileSchema, O as CLIInputSchema, Oa as RustOrmSchema, Oi as ProjectConfigSchema, Or as JavaWebFrameworkSchema, P as CreateInputSchema, Pi as PythonCachingSchema, Q as DartMobileSchema, Qa as ShadcnStyleSchema, Qn as GoProtoToolingSchema, Qt as ElixirHttpSchema, Ri as PythonGraphqlSchema, Sa as RustErrorHandlingSchema, Sn as FrontendSchema, So as WebMcpSchema, Sr as JavaBuildToolSchema, T as BetterTStackConfigSchema, Ta as RustLoggingSchema, Tr as JavaLoggingSchema, Ui as PythonOrmSchema, Un as GoCachingSchema, Ut as EffectSchema, Vi as PythonMessageQueueSchema, Vn as GoApiSchema, Vt as EcommerceSchema, Wa as SearchSchema, Wi as PythonPackageManagerSchema, Wn as GoCliSchema, Wr as MobileDeepLinkingSchema, Wt as ElixirApiSchema, Xa as ShadcnIconLibrarySchema, Xi as PythonValidationSchema, Xn as GoObservabilitySchema, Xr as MobileTestingSchema, Xt as ElixirDocumentationSchema, Ya as ShadcnFontSchema, Yi as PythonTestingSchema, Yn as GoMigrationsSchema, Yr as MobileStorageSchema, Yt as ElixirDeploySchema, Za as ShadcnRadiusSchema, Zi as PythonWebFrameworkSchema, Zn as GoOrmSchema, Zr as MobileUISchema, Zt as ElixirEmailSchema, _ as AstroIntegrationSchema, _a as RuntimeSchema, _o as VersionChannelSchema, an as ElixirOrmSchema, ao as SwiftMobileSchema, at as DotnetDeploySchema, ba as RustCachingSchema, bn as FileUploadSchema, br as JavaApiSchema, cn as ElixirTestingSchema, co as TemplateSchema, cr as InitResultSchema, ct as DotnetLibrariesSchema, dn as EmailSchema, dt as DotnetRealtimeSchema, en as ElixirI18nSchema, eo as StackPartRoleSchema, er as GoRealtimeSchema, et as DatabaseSetupSchema, f as AddInputSchema, fn as ExamplesSchema, ft as DotnetTestingSchema, g as AnimationSchema, ga as RealtimeSchema, go as VectorDbSchema, h as AnalyticsSchema, ha as RateLimitSchema, ho as ValidationSchema, in as ElixirObservabilitySchema, io as StateManagementSchema, ir as GoWebFrameworkSchema, it as DotnetCachingSchema, j as CSSFrameworkSchema, ja as RustWebFrameworkSchema, ji as PythonAiSchema, k as CMSSchema, ka as RustRealtimeSchema, ki as ProjectNameSchema, kr as JobQueueSchema, ln as ElixirValidationSchema, lo as TestingSchema, lr as IntegrationsSchema, lt as DotnetObservabilitySchema, m as AiDocsSchema, mt as DotnetWebFrameworkSchema, n as AISchema, nn as ElixirJsonSchema, nr as GoTestingSchema, nt as DotnetApiSchema, on as ElixirQualitySchema, or as I18nSchema, ot as DotnetFrontendSchema, p as AddonsSchema, pt as DotnetValidationSchema, qa as ShadcnBaseSchema, qi as PythonServerSchema, qn as GoLoggingSchema, qr as MobileOTASchema, qt as ElixirCachingSchema, rn as ElixirLibrariesSchema, ro as StackPartSourceSchema, rr as GoValidationSchema, rt as DotnetAuthSchema, s as APISchema, sn as ElixirRealtimeSchema, st as DotnetJobQueueSchema, ti as ObservabilitySchema, tn as ElixirJobsSchema, to as StackPartSchema, tr as GoTemplatingSchema, tt as DirectoryConflictSchema, un as ElixirWebFrameworkSchema, uo as UILibrarySchema, ut as DotnetOrmSchema, v as AuthSchema, va as RustApiSchema, vn as FeatureFlagsSchema, wa as RustLibrariesSchema, wr as JavaLibrariesSchema, x as BackendSchema, xa as RustCliSchema, xn as FormsSchema, xo as WebDeploySchema, xr as JavaAuthSchema, ya as RustAuthSchema, yn as FileStorageSchema, zi as PythonHttpClientSchema } from "./schemas-CgldOz7b.mjs";
1
+ import { $ as DatabaseSchema, $a as StackPartEcosystemSchema, $n as GoQualitySchema, $r as ORMSchema, $t as ElixirHttpServerSchema, Aa as RustTemplatingSchema, Ai as ProjectShapeSchema, Bi as PythonMediaSchema, C as BetterFullstackConfigSchema, Ca as RustFrontendSchema, Co as WorkspaceShapeSchema, Cr as JavaLanguageSchema, Da as RustObservabilitySchema, Di as PaymentsSchema, Dr as JavaTestingLibrariesSchema, E as BotProtectionSchema, Ea as RustMessageQueueSchema, Ei as PackageManagerSchema, Er as JavaOrmSchema, Fi as PythonCliSchema, Fr as LoggingSchema, Ga as ServerDeploySchema, Gi as PythonQualitySchema, Gn as GoConfigSchema, Gr as MobileLibrariesSchema, Gt as ElixirApplicationFrameworkSchema, Hi as PythonObservabilitySchema, Hn as GoAuthSchema, Ht as EcosystemSchema, Ii as PythonCloudSdkSchema, Ja as ShadcnColorThemeSchema, Ji as PythonTaskQueueSchema, Jn as GoMessageQueueSchema, Jr as MobilePushSchema, Jt as ElixirClusteringSchema, Ka as ShadcnBaseColorSchema, Ki as PythonRealtimeSchema, Kn as GoDISchema, Kr as MobileNavigationSchema, Kt as ElixirAuthSchema, Li as PythonDataSchema, Mi as PythonApiSchema, Mr as KotlinMobileLibrariesSchema, N as CachingSchema, Ni as PythonAuthSchema, Nr as KotlinMobileSchema, O as CLIInputSchema, Oa as RustOrmSchema, Oi as ProjectConfigSchema, Or as JavaWebFrameworkSchema, P as CreateInputSchema, Pi as PythonCachingSchema, Q as DartMobileSchema, Qa as ShadcnStyleSchema, Qn as GoProtoToolingSchema, Qt as ElixirHttpSchema, Ri as PythonGraphqlSchema, Sa as RustErrorHandlingSchema, Sn as FrontendSchema, So as WebMcpSchema, Sr as JavaBuildToolSchema, T as BetterTStackConfigSchema, Ta as RustLoggingSchema, Tr as JavaLoggingSchema, Ui as PythonOrmSchema, Un as GoCachingSchema, Ut as EffectSchema, Vi as PythonMessageQueueSchema, Vn as GoApiSchema, Vt as EcommerceSchema, Wa as SearchSchema, Wi as PythonPackageManagerSchema, Wn as GoCliSchema, Wr as MobileDeepLinkingSchema, Wt as ElixirApiSchema, Xa as ShadcnIconLibrarySchema, Xi as PythonValidationSchema, Xn as GoObservabilitySchema, Xr as MobileTestingSchema, Xt as ElixirDocumentationSchema, Ya as ShadcnFontSchema, Yi as PythonTestingSchema, Yn as GoMigrationsSchema, Yr as MobileStorageSchema, Yt as ElixirDeploySchema, Za as ShadcnRadiusSchema, Zi as PythonWebFrameworkSchema, Zn as GoOrmSchema, Zr as MobileUISchema, Zt as ElixirEmailSchema, _ as AstroIntegrationSchema, _a as RuntimeSchema, _o as VersionChannelSchema, an as ElixirOrmSchema, ao as SwiftMobileSchema, at as DotnetDeploySchema, ba as RustCachingSchema, bn as FileUploadSchema, br as JavaApiSchema, cn as ElixirTestingSchema, co as TemplateSchema, cr as InitResultSchema, ct as DotnetLibrariesSchema, dn as EmailSchema, dt as DotnetRealtimeSchema, en as ElixirI18nSchema, eo as StackPartRoleSchema, er as GoRealtimeSchema, et as DatabaseSetupSchema, f as AddInputSchema, fn as ExamplesSchema, ft as DotnetTestingSchema, g as AnimationSchema, ga as RealtimeSchema, go as VectorDbSchema, h as AnalyticsSchema, ha as RateLimitSchema, ho as ValidationSchema, in as ElixirObservabilitySchema, io as StateManagementSchema, ir as GoWebFrameworkSchema, it as DotnetCachingSchema, j as CSSFrameworkSchema, ja as RustWebFrameworkSchema, ji as PythonAiSchema, k as CMSSchema, ka as RustRealtimeSchema, ki as ProjectNameSchema, kr as JobQueueSchema, ln as ElixirValidationSchema, lo as TestingSchema, lr as IntegrationsSchema, lt as DotnetObservabilitySchema, m as AiDocsSchema, mt as DotnetWebFrameworkSchema, n as AISchema, nn as ElixirJsonSchema, nr as GoTestingSchema, nt as DotnetApiSchema, on as ElixirQualitySchema, or as I18nSchema, ot as DotnetFrontendSchema, p as AddonsSchema, pt as DotnetValidationSchema, qa as ShadcnBaseSchema, qi as PythonServerSchema, qn as GoLoggingSchema, qr as MobileOTASchema, qt as ElixirCachingSchema, rn as ElixirLibrariesSchema, ro as StackPartSourceSchema, rr as GoValidationSchema, rt as DotnetAuthSchema, s as APISchema, sn as ElixirRealtimeSchema, st as DotnetJobQueueSchema, ti as ObservabilitySchema, tn as ElixirJobsSchema, to as StackPartSchema, tr as GoTemplatingSchema, tt as DirectoryConflictSchema, un as ElixirWebFrameworkSchema, uo as UILibrarySchema, ut as DotnetOrmSchema, v as AuthSchema, va as RustApiSchema, vn as FeatureFlagsSchema, wa as RustLibrariesSchema, wr as JavaLibrariesSchema, x as BackendSchema, xa as RustCliSchema, xn as FormsSchema, xo as WebDeploySchema, xr as JavaAuthSchema, ya as RustAuthSchema, yn as FileStorageSchema, zi as PythonHttpClientSchema } from "./schemas-DMxQS38P.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/config/types.d.ts
@@ -183,4 +183,4 @@ type WebFrontend = Extract<Frontend, "tanstack-router" | "react-router" | "react
183
183
  type NativeFrontend = Extract<Frontend, "native-bare" | "native-uniwind" | "native-unistyles" | "none">;
184
184
  //#endregion
185
185
  export { ElixirObservability as $, ShadcnIconLibrary as $n, MobileTesting as $t, DotnetObservability as A, RateLimit as An, GoWebFramework as At, ElixirApplicationFramework as B, RustLogging as Bn, JavaOrm as Bt, DotnetApi as C, PythonQuality as Cn, GoOrm as Ct, DotnetFrontend as D, PythonTesting as Dn, GoTemplating as Dt, DotnetDeploy as E, PythonTaskQueue as En, GoRealtime as Et, DotnetWebFramework as F, RustCaching as Fn, JavaAuth as Ft, ElixirDocumentation as G, RustTemplating as Gn, KotlinMobileLibraries as Gt, ElixirCaching as H, RustObservability as Hn, JavaWebFramework as Ht, Ecommerce as I, RustCli as In, JavaBuildTool as It, ElixirHttpServer as J, ServerDeploy as Jn, MobileLibraries as Jt, ElixirEmail as K, RustWebFramework as Kn, Logging as Kt, Ecosystem as L, RustErrorHandling as Ln, JavaLanguage as Lt, DotnetRealtime as M, Runtime as Mn, InitResult as Mt, DotnetTesting as N, RustApi as Nn, Integrations as Nt, DotnetJobQueue as O, PythonValidation as On, GoTesting as Ot, DotnetValidation as P, RustAuth as Pn, JavaApi as Pt, ElixirLibraries as Q, ShadcnFont as Qn, MobileStorage as Qt, Effect as R, RustFrontend as Rn, JavaLibraries as Rt, DirectoryConflict as S, PythonPackageManager as Sn, GoObservability as St, DotnetCaching as T, PythonServer as Tn, GoQuality as Tt, ElixirClustering as U, RustOrm as Un, JobQueue as Ut, ElixirAuth as V, RustMessageQueue as Vn, JavaTestingLibraries as Vt, ElixirDeploy as W, RustRealtime as Wn, KotlinMobile as Wt, ElixirJobs as X, ShadcnBaseColor as Xn, MobileOTA as Xt, ElixirI18n as Y, ShadcnBase as Yn, MobileNavigation as Yt, ElixirJson as Z, ShadcnColorTheme as Zn, MobilePush as Zt, Caching as _, PythonHttpClient as _n, WorkspaceShape as _r, GoConfig as _t, AiDocs as a, Payments as an, StackPartSource as ar, ElixirWebFramework as at, Database as b, PythonObservability as bn, GoMessageQueue as bt, AstroIntegration as c, ProjectShape as cn, Template as cr, FeatureFlags as ct, BetterFullstackConfig as d, PythonAuth as dn, Validation as dr, Forms as dt, MobileUI as en, ShadcnRadius as er, ElixirOrm as et, BetterTStackConfig as f, PythonCaching as fn, VectorDb as fr, Frontend as ft, CSSFramework as g, PythonGraphql as gn, WebMcp as gr, GoCli as gt, CMS as h, PythonData as hn, WebFrontend as hr, GoCaching as ht, Addons as i, PackageManager as in, StackPartRole as ir, ElixirValidation as it, DotnetOrm as j, Realtime as jn, I18n as jt, DotnetLibraries as k, PythonWebFramework as kn, GoValidation as kt, Auth as l, PythonAi as ln, Testing as lr, FileStorage as lt, CLIInput as m, PythonCloudSdk as mn, WebDeploy as mr, GoAuth as mt, API as n, ORM as nn, StackPart as nr, ElixirRealtime as nt, Analytics as o, ProjectConfig as on, StateManagement as or, Email as ot, BotProtection as p, PythonCli as pn, VersionChannel as pr, GoApi as pt, ElixirHttp as q, Search as qn, MobileDeepLinking as qt, AddInput as r, Observability as rn, StackPartEcosystem as rr, ElixirTesting as rt, Animation as s, ProjectName as sn, SwiftMobile as sr, Examples as st, AI as t, NativeFrontend as tn, ShadcnStyle as tr, ElixirQuality as tt, Backend as u, PythonApi as un, UILibrary as ur, FileUpload as ut, CreateInput as v, PythonMedia as vn, GoDI as vt, DotnetAuth as w, PythonRealtime as wn, GoProtoTooling as wt, DatabaseSetup as x, PythonOrm as xn, GoMigrations as xt, DartMobile as y, PythonMessageQueue as yn, GoLogging as yt, ElixirApi as z, RustLibraries as zn, JavaLogging as zt };
186
- //# sourceMappingURL=types-BvyHjJEI.d.mts.map
186
+ //# sourceMappingURL=types-DAJKUOQ_.d.mts.map
package/dist/types.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import "./schemas-CgldOz7b.mjs";
2
- import { $ as ElixirObservability, $n as ShadcnIconLibrary, $t as MobileTesting, A as DotnetObservability, An as RateLimit, At as GoWebFramework, B as ElixirApplicationFramework, Bn as RustLogging, Bt as JavaOrm, C as DotnetApi, Cn as PythonQuality, Ct as GoOrm, D as DotnetFrontend, Dn as PythonTesting, Dt as GoTemplating, E as DotnetDeploy, En as PythonTaskQueue, Et as GoRealtime, F as DotnetWebFramework, Fn as RustCaching, Ft as JavaAuth, G as ElixirDocumentation, Gn as RustTemplating, Gt as KotlinMobileLibraries, H as ElixirCaching, Hn as RustObservability, Ht as JavaWebFramework, I as Ecommerce, In as RustCli, It as JavaBuildTool, J as ElixirHttpServer, Jn as ServerDeploy, Jt as MobileLibraries, K as ElixirEmail, Kn as RustWebFramework, Kt as Logging, L as Ecosystem, Ln as RustErrorHandling, Lt as JavaLanguage, M as DotnetRealtime, Mn as Runtime, Mt as InitResult, N as DotnetTesting, Nn as RustApi, Nt as Integrations, O as DotnetJobQueue, On as PythonValidation, Ot as GoTesting, P as DotnetValidation, Pn as RustAuth, Pt as JavaApi, Q as ElixirLibraries, Qn as ShadcnFont, Qt as MobileStorage, R as Effect, Rn as RustFrontend, Rt as JavaLibraries, S as DirectoryConflict, Sn as PythonPackageManager, St as GoObservability, T as DotnetCaching, Tn as PythonServer, Tt as GoQuality, U as ElixirClustering, Un as RustOrm, Ut as JobQueue, V as ElixirAuth, Vn as RustMessageQueue, Vt as JavaTestingLibraries, W as ElixirDeploy, Wn as RustRealtime, Wt as KotlinMobile, X as ElixirJobs, Xn as ShadcnBaseColor, Xt as MobileOTA, Y as ElixirI18n, Yn as ShadcnBase, Yt as MobileNavigation, Z as ElixirJson, Zn as ShadcnColorTheme, Zt as MobilePush, _ as Caching, _n as PythonHttpClient, _r as WorkspaceShape, _t as GoConfig, a as AiDocs, an as Payments, ar as StackPartSource, at as ElixirWebFramework, b as Database, bn as PythonObservability, bt as GoMessageQueue, c as AstroIntegration, cn as ProjectShape, cr as Template, ct as FeatureFlags, d as BetterFullstackConfig, dn as PythonAuth, dr as Validation, dt as Forms, en as MobileUI, er as ShadcnRadius, et as ElixirOrm, f as BetterTStackConfig, fn as PythonCaching, fr as VectorDb, ft as Frontend, g as CSSFramework, gn as PythonGraphql, gr as WebMcp, gt as GoCli, h as CMS, hn as PythonData, hr as WebFrontend, ht as GoCaching, i as Addons, in as PackageManager, ir as StackPartRole, it as ElixirValidation, j as DotnetOrm, jn as Realtime, jt as I18n, k as DotnetLibraries, kn as PythonWebFramework, kt as GoValidation, l as Auth, ln as PythonAi, lr as Testing, lt as FileStorage, m as CLIInput, mn as PythonCloudSdk, mr as WebDeploy, mt as GoAuth, n as API, nn as ORM, nr as StackPart, nt as ElixirRealtime, o as Analytics, on as ProjectConfig, or as StateManagement, ot as Email, p as BotProtection, pn as PythonCli, pr as VersionChannel, pt as GoApi, q as ElixirHttp, qn as Search, qt as MobileDeepLinking, r as AddInput, rn as Observability, rr as StackPartEcosystem, rt as ElixirTesting, s as Animation, sn as ProjectName, sr as SwiftMobile, st as Examples, t as AI, tn as NativeFrontend, tr as ShadcnStyle, tt as ElixirQuality, u as Backend, un as PythonApi, ur as UILibrary, ut as FileUpload, v as CreateInput, vn as PythonMedia, vt as GoDI, w as DotnetAuth, wn as PythonRealtime, wt as GoProtoTooling, x as DatabaseSetup, xn as PythonOrm, xt as GoMigrations, y as DartMobile, yn as PythonMessageQueue, yt as GoLogging, z as ElixirApi, zn as RustLibraries, zt as JavaLogging } from "./types-BvyHjJEI.mjs";
1
+ import "./schemas-DMxQS38P.mjs";
2
+ import { $ as ElixirObservability, $n as ShadcnIconLibrary, $t as MobileTesting, A as DotnetObservability, An as RateLimit, At as GoWebFramework, B as ElixirApplicationFramework, Bn as RustLogging, Bt as JavaOrm, C as DotnetApi, Cn as PythonQuality, Ct as GoOrm, D as DotnetFrontend, Dn as PythonTesting, Dt as GoTemplating, E as DotnetDeploy, En as PythonTaskQueue, Et as GoRealtime, F as DotnetWebFramework, Fn as RustCaching, Ft as JavaAuth, G as ElixirDocumentation, Gn as RustTemplating, Gt as KotlinMobileLibraries, H as ElixirCaching, Hn as RustObservability, Ht as JavaWebFramework, I as Ecommerce, In as RustCli, It as JavaBuildTool, J as ElixirHttpServer, Jn as ServerDeploy, Jt as MobileLibraries, K as ElixirEmail, Kn as RustWebFramework, Kt as Logging, L as Ecosystem, Ln as RustErrorHandling, Lt as JavaLanguage, M as DotnetRealtime, Mn as Runtime, Mt as InitResult, N as DotnetTesting, Nn as RustApi, Nt as Integrations, O as DotnetJobQueue, On as PythonValidation, Ot as GoTesting, P as DotnetValidation, Pn as RustAuth, Pt as JavaApi, Q as ElixirLibraries, Qn as ShadcnFont, Qt as MobileStorage, R as Effect, Rn as RustFrontend, Rt as JavaLibraries, S as DirectoryConflict, Sn as PythonPackageManager, St as GoObservability, T as DotnetCaching, Tn as PythonServer, Tt as GoQuality, U as ElixirClustering, Un as RustOrm, Ut as JobQueue, V as ElixirAuth, Vn as RustMessageQueue, Vt as JavaTestingLibraries, W as ElixirDeploy, Wn as RustRealtime, Wt as KotlinMobile, X as ElixirJobs, Xn as ShadcnBaseColor, Xt as MobileOTA, Y as ElixirI18n, Yn as ShadcnBase, Yt as MobileNavigation, Z as ElixirJson, Zn as ShadcnColorTheme, Zt as MobilePush, _ as Caching, _n as PythonHttpClient, _r as WorkspaceShape, _t as GoConfig, a as AiDocs, an as Payments, ar as StackPartSource, at as ElixirWebFramework, b as Database, bn as PythonObservability, bt as GoMessageQueue, c as AstroIntegration, cn as ProjectShape, cr as Template, ct as FeatureFlags, d as BetterFullstackConfig, dn as PythonAuth, dr as Validation, dt as Forms, en as MobileUI, er as ShadcnRadius, et as ElixirOrm, f as BetterTStackConfig, fn as PythonCaching, fr as VectorDb, ft as Frontend, g as CSSFramework, gn as PythonGraphql, gr as WebMcp, gt as GoCli, h as CMS, hn as PythonData, hr as WebFrontend, ht as GoCaching, i as Addons, in as PackageManager, ir as StackPartRole, it as ElixirValidation, j as DotnetOrm, jn as Realtime, jt as I18n, k as DotnetLibraries, kn as PythonWebFramework, kt as GoValidation, l as Auth, ln as PythonAi, lr as Testing, lt as FileStorage, m as CLIInput, mn as PythonCloudSdk, mr as WebDeploy, mt as GoAuth, n as API, nn as ORM, nr as StackPart, nt as ElixirRealtime, o as Analytics, on as ProjectConfig, or as StateManagement, ot as Email, p as BotProtection, pn as PythonCli, pr as VersionChannel, pt as GoApi, q as ElixirHttp, qn as Search, qt as MobileDeepLinking, r as AddInput, rn as Observability, rr as StackPartEcosystem, rt as ElixirTesting, s as Animation, sn as ProjectName, sr as SwiftMobile, st as Examples, t as AI, tn as NativeFrontend, tr as ShadcnStyle, tt as ElixirQuality, u as Backend, un as PythonApi, ur as UILibrary, ut as FileUpload, v as CreateInput, vn as PythonMedia, vt as GoDI, w as DotnetAuth, wn as PythonRealtime, wt as GoProtoTooling, x as DatabaseSetup, xn as PythonOrm, xt as GoMigrations, y as DartMobile, yn as PythonMessageQueue, yt as GoLogging, z as ElixirApi, zn as RustLibraries, zt as JavaLogging } from "./types-DAJKUOQ_.mjs";
3
3
  export { AI, API, AddInput, Addons, AiDocs, Analytics, Animation, AstroIntegration, Auth, Backend, BetterFullstackConfig, BetterTStackConfig, BotProtection, CLIInput, CMS, CSSFramework, Caching, CreateInput, DartMobile, Database, DatabaseSetup, DirectoryConflict, DotnetApi, DotnetAuth, DotnetCaching, DotnetDeploy, DotnetFrontend, DotnetJobQueue, DotnetLibraries, DotnetObservability, DotnetOrm, DotnetRealtime, DotnetTesting, DotnetValidation, DotnetWebFramework, Ecommerce, Ecosystem, Effect, ElixirApi, ElixirApplicationFramework, ElixirAuth, ElixirCaching, ElixirClustering, ElixirDeploy, ElixirDocumentation, ElixirEmail, ElixirHttp, ElixirHttpServer, ElixirI18n, ElixirJobs, ElixirJson, ElixirLibraries, ElixirObservability, ElixirOrm, ElixirQuality, ElixirRealtime, ElixirTesting, ElixirValidation, ElixirWebFramework, Email, Examples, FeatureFlags, FileStorage, FileUpload, Forms, Frontend, GoApi, GoAuth, GoCaching, GoCli, GoConfig, GoDI, GoLogging, GoMessageQueue, GoMigrations, GoObservability, GoOrm, GoProtoTooling, GoQuality, GoRealtime, GoTemplating, GoTesting, GoValidation, GoWebFramework, I18n, InitResult, Integrations, JavaApi, JavaAuth, JavaBuildTool, JavaLanguage, JavaLibraries, JavaLogging, JavaOrm, JavaTestingLibraries, JavaWebFramework, JobQueue, KotlinMobile, KotlinMobileLibraries, Logging, MobileDeepLinking, MobileLibraries, MobileNavigation, MobileOTA, MobilePush, MobileStorage, MobileTesting, MobileUI, NativeFrontend, ORM, Observability, PackageManager, Payments, ProjectConfig, ProjectName, ProjectShape, PythonAi, PythonApi, PythonAuth, PythonCaching, PythonCli, PythonCloudSdk, PythonData, PythonGraphql, PythonHttpClient, PythonMedia, PythonMessageQueue, PythonObservability, PythonOrm, PythonPackageManager, PythonQuality, PythonRealtime, PythonServer, PythonTaskQueue, PythonTesting, PythonValidation, PythonWebFramework, RateLimit, Realtime, Runtime, RustApi, RustAuth, RustCaching, RustCli, RustErrorHandling, RustFrontend, RustLibraries, RustLogging, RustMessageQueue, RustObservability, RustOrm, RustRealtime, RustTemplating, RustWebFramework, Search, ServerDeploy, ShadcnBase, ShadcnBaseColor, ShadcnColorTheme, ShadcnFont, ShadcnIconLibrary, ShadcnRadius, ShadcnStyle, StackPart, StackPartEcosystem, StackPartRole, StackPartSource, StateManagement, SwiftMobile, Template, Testing, UILibrary, Validation, VectorDb, VersionChannel, WebDeploy, WebFrontend, WebMcp, WorkspaceShape };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-fullstack/types",
3
- "version": "2.6.4",
3
+ "version": "2.6.6",
4
4
  "description": "TypeScript types and schemas for Better Fullstack CLI",
5
5
  "keywords": [
6
6
  "better-fullstack",
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "files": [
21
21
  "dist",
22
+ "!dist/**/*.map",
22
23
  "LICENSE"
23
24
  ],
24
25
  "type": "module",
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults-B8xnKlp6.d.mts","names":[],"sources":["../src/config/defaults.ts"],"sourcesContent":[],"mappings":";;;KAEY,2BAAA,GAA8B,KAAK;iBAE/B,iCAAA,kBACE,iBACf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults-nq08Mnf5.mjs","names":[],"sources":["../src/config/defaults.ts"],"sourcesContent":["import type { PackageManager, ProjectConfig } from \"@/config/types\";\n\nexport type CliDefaultProjectConfigBase = Omit<ProjectConfig, \"projectDir\">;\n\nexport function createCliDefaultProjectConfigBase(\n packageManager: PackageManager = \"bun\",\n): CliDefaultProjectConfigBase {\n return {\n projectName: \"my-app\",\n relativePath: \"my-app\",\n ecosystem: \"typescript\",\n database: \"sqlite\",\n orm: \"drizzle\",\n backend: \"hono\",\n runtime: \"bun\",\n frontend: [\"tanstack-router\"],\n addons: [\"turborepo\"],\n examples: [],\n auth: \"better-auth\",\n payments: \"none\",\n email: \"none\",\n fileUpload: \"none\",\n effect: \"none\",\n git: true,\n packageManager,\n workspaceShape: \"monorepo\",\n versionChannel: \"stable\",\n install: true,\n dbSetup: \"none\",\n api: \"trpc\",\n webDeploy: \"none\",\n serverDeploy: \"none\",\n astroIntegration: \"none\",\n ai: \"none\",\n stateManagement: \"none\",\n forms: \"react-hook-form\",\n testing: \"vitest\",\n cssFramework: \"tailwind\",\n uiLibrary: \"shadcn-ui\",\n shadcnBase: \"radix\",\n shadcnStyle: \"nova\",\n shadcnIconLibrary: \"lucide\",\n shadcnColorTheme: \"neutral\",\n shadcnBaseColor: \"neutral\",\n shadcnFont: \"inter\",\n shadcnRadius: \"default\",\n validation: \"zod\",\n realtime: \"none\",\n jobQueue: \"none\",\n animation: \"none\",\n logging: \"none\",\n observability: \"none\",\n featureFlags: \"none\",\n integrations: \"none\",\n ecommerce: \"none\",\n analytics: \"none\",\n webMcp: \"none\",\n mobileNavigation: \"none\",\n mobileUI: \"none\",\n mobileStorage: \"none\",\n mobileTesting: \"none\",\n mobilePush: \"none\",\n mobileOTA: \"none\",\n mobileDeepLinking: \"none\",\n mobileLibraries: [],\n cms: \"none\",\n caching: \"none\",\n rateLimit: \"none\",\n botProtection: \"none\",\n i18n: \"none\",\n search: \"none\",\n vectorDb: \"none\",\n fileStorage: \"none\",\n rustWebFramework: \"none\",\n rustFrontend: \"none\",\n rustOrm: \"none\",\n rustApi: \"none\",\n rustCli: \"none\",\n rustLibraries: [],\n rustLogging: \"tracing\",\n rustErrorHandling: \"anyhow-thiserror\",\n rustCaching: \"none\",\n rustAuth: \"none\",\n rustRealtime: \"none\",\n rustMessageQueue: \"none\",\n rustObservability: \"none\",\n rustTemplating: \"none\",\n pythonWebFramework: \"fastapi\",\n pythonOrm: \"sqlalchemy\",\n pythonValidation: \"pydantic\",\n pythonAi: [],\n pythonAuth: \"none\",\n pythonApi: \"none\",\n pythonTaskQueue: \"none\",\n pythonGraphql: \"none\",\n pythonQuality: \"ruff\",\n pythonTesting: [],\n pythonCaching: \"none\",\n pythonRealtime: \"none\",\n pythonObservability: \"none\",\n pythonCli: [],\n pythonCloudSdk: \"none\",\n pythonHttpClient: \"none\",\n pythonData: [],\n pythonMedia: \"none\",\n pythonServer: \"none\",\n pythonPackageManager: \"uv\",\n pythonMessageQueue: \"none\",\n goWebFramework: \"gin\",\n goOrm: \"gorm\",\n goApi: \"none\",\n goCli: \"none\",\n goLogging: \"zap\",\n goAuth: \"none\",\n goTesting: [],\n goRealtime: \"none\",\n goMessageQueue: \"none\",\n goCaching: \"none\",\n goConfig: \"none\",\n goObservability: \"none\",\n goValidation: \"none\",\n goQuality: \"none\",\n goMigrations: \"none\",\n goTemplating: \"none\",\n goProtoTooling: \"none\",\n goDI: \"none\",\n javaWebFramework: \"spring-boot\",\n javaBuildTool: \"maven\",\n javaOrm: \"none\",\n javaAuth: \"none\",\n javaApi: \"none\",\n javaLogging: \"none\",\n javaLibraries: [],\n javaTestingLibraries: [\"junit5\"],\n dotnetWebFramework: \"aspnet-minimal\",\n dotnetOrm: \"ef-core\",\n dotnetAuth: \"aspnet-identity\",\n dotnetApi: \"minimal-api\",\n dotnetTesting: [\"xunit\"],\n dotnetJobQueue: \"none\",\n dotnetRealtime: \"signalr\",\n dotnetObservability: [\"serilog\"],\n dotnetValidation: \"none\",\n dotnetCaching: \"none\",\n dotnetDeploy: \"docker\",\n dotnetLibraries: [],\n elixirWebFramework: \"phoenix\",\n elixirOrm: \"ecto-sql\",\n elixirAuth: \"none\",\n elixirApi: \"rest\",\n elixirRealtime: \"channels\",\n elixirJobs: \"none\",\n elixirValidation: \"ecto-changesets\",\n elixirHttp: \"req\",\n elixirJson: \"jason\",\n elixirEmail: \"none\",\n elixirCaching: \"none\",\n elixirObservability: \"telemetry\",\n elixirTesting: \"ex_unit\",\n elixirQuality: \"credo\",\n elixirI18n: \"none\",\n elixirHttpServer: \"cowboy\",\n elixirApplicationFramework: \"none\",\n elixirDocumentation: \"none\",\n elixirClustering: \"none\",\n elixirDeploy: \"none\",\n elixirLibraries: [],\n // Ship both CLAUDE.md (Claude Code) and AGENTS.md (the cross-tool standard,\n // read by Codex/Cursor/Copilot/etc.) by default, matching create-next-app.\n aiDocs: [\"claude-md\", \"agents-md\"],\n };\n}\n"],"mappings":";AAIA,SAAgB,kCACd,iBAAiC,OACJ;AAC7B,QAAO;EACL,aAAa;EACb,cAAc;EACd,WAAW;EACX,UAAU;EACV,KAAK;EACL,SAAS;EACT,SAAS;EACT,UAAU,CAAC,kBAAkB;EAC7B,QAAQ,CAAC,YAAY;EACrB,UAAU,EAAE;EACZ,MAAM;EACN,UAAU;EACV,OAAO;EACP,YAAY;EACZ,QAAQ;EACR,KAAK;EACL;EACA,gBAAgB;EAChB,gBAAgB;EAChB,SAAS;EACT,SAAS;EACT,KAAK;EACL,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,IAAI;EACJ,iBAAiB;EACjB,OAAO;EACP,SAAS;EACT,cAAc;EACd,WAAW;EACX,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,iBAAiB;EACjB,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,UAAU;EACV,UAAU;EACV,WAAW;EACX,SAAS;EACT,eAAe;EACf,cAAc;EACd,cAAc;EACd,WAAW;EACX,WAAW;EACX,QAAQ;EACR,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,eAAe;EACf,YAAY;EACZ,WAAW;EACX,mBAAmB;EACnB,iBAAiB,EAAE;EACnB,KAAK;EACL,SAAS;EACT,WAAW;EACX,eAAe;EACf,MAAM;EACN,QAAQ;EACR,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,SAAS;EACT,SAAS;EACT,eAAe,EAAE;EACjB,aAAa;EACb,mBAAmB;EACnB,aAAa;EACb,UAAU;EACV,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,gBAAgB;EAChB,oBAAoB;EACpB,WAAW;EACX,kBAAkB;EAClB,UAAU,EAAE;EACZ,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,eAAe,EAAE;EACjB,eAAe;EACf,gBAAgB;EAChB,qBAAqB;EACrB,WAAW,EAAE;EACb,gBAAgB;EAChB,kBAAkB;EAClB,YAAY,EAAE;EACd,aAAa;EACb,cAAc;EACd,sBAAsB;EACtB,oBAAoB;EACpB,gBAAgB;EAChB,OAAO;EACP,OAAO;EACP,OAAO;EACP,WAAW;EACX,QAAQ;EACR,WAAW,EAAE;EACb,YAAY;EACZ,gBAAgB;EAChB,WAAW;EACX,UAAU;EACV,iBAAiB;EACjB,cAAc;EACd,WAAW;EACX,cAAc;EACd,cAAc;EACd,gBAAgB;EAChB,MAAM;EACN,kBAAkB;EAClB,eAAe;EACf,SAAS;EACT,UAAU;EACV,SAAS;EACT,aAAa;EACb,eAAe,EAAE;EACjB,sBAAsB,CAAC,SAAS;EAChC,oBAAoB;EACpB,WAAW;EACX,YAAY;EACZ,WAAW;EACX,eAAe,CAAC,QAAQ;EACxB,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB,CAAC,UAAU;EAChC,kBAAkB;EAClB,eAAe;EACf,cAAc;EACd,iBAAiB,EAAE;EACnB,oBAAoB;EACpB,WAAW;EACX,YAAY;EACZ,WAAW;EACX,gBAAgB;EAChB,YAAY;EACZ,kBAAkB;EAClB,YAAY;EACZ,YAAY;EACZ,aAAa;EACb,eAAe;EACf,qBAAqB;EACrB,eAAe;EACf,eAAe;EACf,YAAY;EACZ,kBAAkB;EAClB,4BAA4B;EAC5B,qBAAqB;EACrB,kBAAkB;EAClB,cAAc;EACd,iBAAiB,EAAE;EAGnB,QAAQ,CAAC,aAAa,YAAY;EACnC"}