@better-fullstack/types 2.6.1 → 2.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{defaults-Bp46Ajyg.mjs → defaults-DTS30ICD.mjs} +2 -2
- package/dist/defaults-DTS30ICD.mjs.map +1 -0
- package/dist/{defaults-vm2Pzryr.d.mts → defaults-c1Q6oSGr.d.mts} +3 -3
- package/dist/defaults-c1Q6oSGr.d.mts.map +1 -0
- package/dist/defaults.d.mts +3 -3
- package/dist/defaults.mjs +1 -1
- package/dist/index.d.mts +1258 -11
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +289 -9
- package/dist/index.mjs.map +1 -1
- package/dist/json-schema.d.mts +9 -9
- package/dist/json-schema.d.mts.map +1 -1
- package/dist/json-schema.mjs +2 -2
- package/dist/json-schema.mjs.map +1 -1
- package/dist/{schemas-ah-Pon-K.d.mts → schemas-byZ-ZfU_.d.mts} +92 -10
- package/dist/schemas-byZ-ZfU_.d.mts.map +1 -0
- package/dist/{schemas-CH1UszP5.mjs → schemas-cgmdgudQ.mjs} +41 -4
- package/dist/schemas-cgmdgudQ.mjs.map +1 -0
- package/dist/schemas.d.mts +2 -2
- package/dist/schemas.mjs +2 -2
- package/dist/{stack-graph-B2L-S2-8.d.mts → stack-graph-BuGqVDuz.d.mts} +26 -4
- package/dist/stack-graph-BuGqVDuz.d.mts.map +1 -0
- package/dist/{stack-graph-AWbdUrN3.mjs → stack-graph-Oj-P0cij.mjs} +91 -14
- package/dist/stack-graph-Oj-P0cij.mjs.map +1 -0
- package/dist/stack-graph.d.mts +4 -4
- package/dist/stack-graph.mjs +3 -3
- package/dist/{stack-translation-Cn6zGJ5q.mjs → stack-translation-49iba9M5.mjs} +161 -30
- package/dist/stack-translation-49iba9M5.mjs.map +1 -0
- package/dist/{stack-translation-BJ9ulTxF.d.mts → stack-translation-PRZPaQP4.d.mts} +59 -9
- package/dist/stack-translation-PRZPaQP4.d.mts.map +1 -0
- package/dist/stack-translation.d.mts +4 -4
- package/dist/stack-translation.mjs +3 -3
- package/dist/telemetry-C9qQ80l9.mjs +2270 -0
- package/dist/telemetry-C9qQ80l9.mjs.map +1 -0
- package/dist/telemetry-CUtrUTe9.d.mts +36 -0
- package/dist/telemetry-CUtrUTe9.d.mts.map +1 -0
- package/dist/telemetry.d.mts +2 -0
- package/dist/telemetry.mjs +6 -0
- package/dist/{types-CxFTot-Q.d.mts → types-DA-r_8X7.d.mts} +3 -3
- package/dist/types-DA-r_8X7.d.mts.map +1 -0
- package/dist/types.d.mts +2 -2
- package/package.json +5 -1
- package/dist/defaults-Bp46Ajyg.mjs.map +0 -1
- package/dist/defaults-vm2Pzryr.d.mts.map +0 -1
- package/dist/schemas-CH1UszP5.mjs.map +0 -1
- package/dist/schemas-ah-Pon-K.d.mts.map +0 -1
- package/dist/stack-graph-AWbdUrN3.mjs.map +0 -1
- package/dist/stack-graph-B2L-S2-8.d.mts.map +0 -1
- package/dist/stack-translation-BJ9ulTxF.d.mts.map +0 -1
- package/dist/stack-translation-Cn6zGJ5q.mjs.map +0 -1
- package/dist/types-CxFTot-Q.d.mts.map +0 -1
package/dist/stack-graph.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./schemas-
|
|
2
|
-
import "./types-
|
|
3
|
-
import {
|
|
4
|
-
export { AddonStackPartBinding, ELIXIR_UNSUPPORTED_GRAPH_TOOLS, ProvidedCapabilityDefinition, STACK_TOOL_DEFINITIONS, StackGraphDiagnostic, StackGraphIssue, StackGraphValidationResult, StackPartOptionContext, StackPrimaryRole, ToolDefinition, createStackPart, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, parseStackPartSpecs, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
|
|
1
|
+
import "./schemas-byZ-ZfU_.mjs";
|
|
2
|
+
import "./types-DA-r_8X7.mjs";
|
|
3
|
+
import { A as stackGraphToLegacyProjectConfigForEcosystem, C as hasJavaScriptWorkspaceRoot, D as mergeProjectConfigSettingsIntoStackParts, E as materializeProvidedStackParts, M as toolingOverlayStackParts, N as validateStackParts, O as parseStackPartSpecs, S as getStackToolDefinitions, T as legacyProjectConfigToStackParts, _ as formatStackPartSpec, a as ProvidedCapabilityDefinition, b as getStackPartCompatibilityIssueForPart, c as StackGraphDiagnostic, d as StackPartOptionContext, f as StackPartProjectSettingKey, g as formatStackGraphIssue, h as createStackPart, i as PROJECT_METADATA_SETTING_KEYS, j as stackPartsToLegacyProjectConfigPartial, k as projectStackPartSettingsToProjectConfig, l as StackGraphIssue, m as ToolDefinition, n as DEFAULT_SHADCN_STACK_PART_SETTINGS, o as STACK_PART_PROJECT_SETTING_KEYS, p as StackPrimaryRole, r as ELIXIR_UNSUPPORTED_GRAPH_TOOLS, s as STACK_TOOL_DEFINITIONS, t as AddonStackPartBinding, u as StackGraphValidationResult, v as getAddonStackPartBinding, w as hasVitePlusWorkspaceRoot, x as getStackPartOptions, y as getRoleTargetPath } from "./stack-graph-BuGqVDuz.mjs";
|
|
4
|
+
export { AddonStackPartBinding, DEFAULT_SHADCN_STACK_PART_SETTINGS, ELIXIR_UNSUPPORTED_GRAPH_TOOLS, PROJECT_METADATA_SETTING_KEYS, ProvidedCapabilityDefinition, STACK_PART_PROJECT_SETTING_KEYS, STACK_TOOL_DEFINITIONS, StackGraphDiagnostic, StackGraphIssue, StackGraphValidationResult, StackPartOptionContext, StackPartProjectSettingKey, StackPrimaryRole, ToolDefinition, createStackPart, formatStackGraphIssue, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, mergeProjectConfigSettingsIntoStackParts, parseStackPartSpecs, projectStackPartSettingsToProjectConfig, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
|
package/dist/stack-graph.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./schemas-
|
|
2
|
-
import {
|
|
1
|
+
import "./schemas-cgmdgudQ.mjs";
|
|
2
|
+
import { C as toolingOverlayStackParts, S as stackPartsToLegacyProjectConfigPartial, _ as materializeProvidedStackParts, a as STACK_TOOL_DEFINITIONS, b as projectStackPartSettingsToProjectConfig, c as formatStackPartSpec, d as getStackPartCompatibilityIssueForPart, f as getStackPartOptions, g as legacyProjectConfigToStackParts, h as hasVitePlusWorkspaceRoot, i as STACK_PART_PROJECT_SETTING_KEYS, l as getAddonStackPartBinding, m as hasJavaScriptWorkspaceRoot, n as ELIXIR_UNSUPPORTED_GRAPH_TOOLS, o as createStackPart, p as getStackToolDefinitions, r as PROJECT_METADATA_SETTING_KEYS, s as formatStackGraphIssue, t as DEFAULT_SHADCN_STACK_PART_SETTINGS, u as getRoleTargetPath, v as mergeProjectConfigSettingsIntoStackParts, w as validateStackParts, x as stackGraphToLegacyProjectConfigForEcosystem, y as parseStackPartSpecs } from "./stack-graph-Oj-P0cij.mjs";
|
|
3
3
|
|
|
4
|
-
export { ELIXIR_UNSUPPORTED_GRAPH_TOOLS, STACK_TOOL_DEFINITIONS, createStackPart, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, parseStackPartSpecs, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
|
|
4
|
+
export { DEFAULT_SHADCN_STACK_PART_SETTINGS, ELIXIR_UNSUPPORTED_GRAPH_TOOLS, PROJECT_METADATA_SETTING_KEYS, STACK_PART_PROJECT_SETTING_KEYS, STACK_TOOL_DEFINITIONS, createStackPart, formatStackGraphIssue, formatStackPartSpec, getAddonStackPartBinding, getRoleTargetPath, getStackPartCompatibilityIssueForPart, getStackPartOptions, getStackToolDefinitions, hasJavaScriptWorkspaceRoot, hasVitePlusWorkspaceRoot, legacyProjectConfigToStackParts, materializeProvidedStackParts, mergeProjectConfigSettingsIntoStackParts, parseStackPartSpecs, projectStackPartSettingsToProjectConfig, stackGraphToLegacyProjectConfigForEcosystem, stackPartsToLegacyProjectConfigPartial, toolingOverlayStackParts, validateStackParts };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $i as REALTIME_VALUES, A as CMS_VALUES, An as GO_MESSAGE_QUEUE_VALUES, Ar as KOTLIN_MOBILE_LIBRARIES_VALUES, At as ELIXIR_JSON_VALUES, B as DOTNET_AUTH_VALUES,
|
|
2
|
-
import {
|
|
3
|
-
import { t as createCliDefaultProjectConfigBase } from "./defaults-
|
|
1
|
+
import { $i as REALTIME_VALUES, A as CMS_VALUES, An as GO_MESSAGE_QUEUE_VALUES, Ar as KOTLIN_MOBILE_LIBRARIES_VALUES, At as ELIXIR_JSON_VALUES, B as DOTNET_AUTH_VALUES, Bn as GO_WEB_FRAMEWORK_VALUES, Br as MOBILE_PUSH_VALUES, Ci as PYTHON_TESTING_VALUES, Cn as GO_API_VALUES, Ct as ELIXIR_DEPLOY_VALUES, D as CACHING_VALUES, Dn as GO_CONFIG_VALUES, Dt as ELIXIR_HTTP_VALUES, En as GO_CLI_VALUES, Et as ELIXIR_HTTP_SERVER_VALUES, F as DART_MOBILE_VALUES, Fa as SHADCN_BASE_VALUES, Fn as GO_QUALITY_VALUES, Ft as ELIXIR_REALTIME_VALUES, G as DOTNET_LIBRARIES_VALUES, H as DOTNET_DEPLOY_VALUES, Ha as STATE_MANAGEMENT_VALUES, Hr as MOBILE_TESTING_VALUES, I as DATABASE_SETUP_VALUES, Ia as SHADCN_COLOR_THEME_VALUES, In as GO_REALTIME_VALUES, Ir as MOBILE_DEEP_LINKING_VALUES, It as ELIXIR_TESTING_VALUES, J as DOTNET_REALTIME_VALUES, K as DOTNET_OBSERVABILITY_VALUES, L as DATABASE_VALUES, La as SHADCN_FONT_VALUES, Ln as GO_TEMPLATING_VALUES, Lr as MOBILE_LIBRARIES_VALUES, Lt as ELIXIR_VALIDATION_VALUES, M as CSS_FRAMEWORK_VALUES, Ma as SEARCH_VALUES, Mn as GO_OBSERVABILITY_VALUES, Mt as ELIXIR_OBSERVABILITY_VALUES, Na as SERVER_DEPLOY_VALUES, Nn as GO_ORM_VALUES, Nt as ELIXIR_ORM_VALUES, On as GO_DI_VALUES, Ot as ELIXIR_I18N_VALUES, Pa as SHADCN_BASE_COLOR_VALUES, Pn as GO_PROTO_TOOLING_VALUES, Pr as LOGGING_VALUES, Pt as ELIXIR_QUALITY_VALUES, Qi as RATE_LIMIT_VALUES, Qr as OBSERVABILITY_VALUES, Ra as SHADCN_ICON_LIBRARY_VALUES, Rn as GO_TESTING_VALUES, Rr as MOBILE_NAVIGATION_VALUES, Rt as ELIXIR_WEB_FRAMEWORK_VALUES, Si as PYTHON_TASK_QUEUE_VALUES, St as ELIXIR_CLUSTERING_VALUES, Ti as PYTHON_WEB_FRAMEWORK_VALUES, Tn as GO_CACHING_VALUES, Tt as ELIXIR_EMAIL_VALUES, U as DOTNET_FRONTEND_VALUES, Ua as SWIFT_MOBILE_VALUES, Ur as MOBILE_UI_VALUES, V as DOTNET_CACHING_VALUES, Va as SHADCN_STYLE_VALUES, Vr as MOBILE_STORAGE_VALUES, W as DOTNET_JOB_QUEUE_VALUES, X as DOTNET_VALIDATION_VALUES, Y as DOTNET_TESTING_VALUES, Z as DOTNET_WEB_FRAMEWORK_VALUES, _i as PYTHON_ORM_VALUES, _r as JAVA_TESTING_LIBRARIES_VALUES, _t as EFFECT_VALUES, a as ANALYTICS_VALUES, aa as RUST_ERROR_HANDLING_VALUES, ai as PYTHON_AI_VALUES, ar as I18N_VALUES, b as BOT_PROTECTION_VALUES, bi as PYTHON_REALTIME_VALUES, bt as ELIXIR_AUTH_VALUES, c as API_VALUES, ca as RUST_LOGGING_VALUES, ci as PYTHON_CACHING_VALUES, d as AUTH_VALUES, da as RUST_ORM_VALUES, di as PYTHON_DATA_VALUES, do as UI_LIBRARY_VALUES, dr as JAVA_AUTH_VALUES, ea as RUNTIME_VALUES, ei as ORM_VALUES, fa as RUST_REALTIME_VALUES, fi as PYTHON_GRAPHQL_VALUES, fo as VALIDATION_VALUES, fr as JAVA_BUILD_TOOL_VALUES, gi as PYTHON_OBSERVABILITY_VALUES, gn as FORMS_VALUES, gr as JAVA_ORM_VALUES, hi as PYTHON_MESSAGE_QUEUE_VALUES, hn as FILE_UPLOAD_VALUES, hr as JAVA_LOGGING_VALUES, ht as ECOMMERCE_VALUES, i as AI_VALUES, ia as RUST_CLI_VALUES, jn as GO_MIGRATIONS_VALUES, jr as KOTLIN_MOBILE_VALUES, jt as ELIXIR_LIBRARIES_VALUES, kn as GO_LOGGING_VALUES, kt as ELIXIR_JOBS_VALUES, l as APP_PLATFORM_ADDON_VALUES, la as RUST_MESSAGE_QUEUE_VALUES, li as PYTHON_CLI_VALUES, ma as RUST_WEB_FRAMEWORK_VALUES, mi as PYTHON_MEDIA_VALUES, mn as FILE_STORAGE_VALUES, mo as VERSION_CHANNEL_VALUES, mr as JAVA_LIBRARIES_VALUES, na as RUST_AUTH_VALUES, ni as PACKAGE_MANAGER_VALUES, o as ANIMATION_VALUES, oa as RUST_FRONTEND_VALUES, oi as PYTHON_API_VALUES, pa as RUST_TEMPLATING_VALUES, pi as PYTHON_HTTP_CLIENT_VALUES, pn as FEATURE_FLAGS_VALUES, po as VECTOR_DB_VALUES, pr as JAVA_LANGUAGE_VALUES, q as DOTNET_ORM_VALUES, r as AI_DOCS_VALUES, ra as RUST_CACHING_VALUES, ri as PAYMENTS_VALUES, sa as RUST_LIBRARIES_VALUES, si as PYTHON_AUTH_VALUES, so as TESTING_VALUES, sr as INTEGRATIONS_VALUES, ta as RUST_API_VALUES, u as ASTRO_INTEGRATION_VALUES, ua as RUST_OBSERVABILITY_VALUES, ui as PYTHON_CLOUD_SDK_VALUES, ur as JAVA_API_VALUES, vi as PYTHON_PACKAGE_MANAGER_VALUES, vo as WEB_DEPLOY_VALUES, vr as JAVA_WEB_FRAMEWORK_VALUES, vt as ELIXIR_API_VALUES, wi as PYTHON_VALIDATION_VALUES, wn as GO_AUTH_VALUES, wt as ELIXIR_DOCUMENTATION_VALUES, xi as PYTHON_SERVER_VALUES, xt as ELIXIR_CACHING_VALUES, yi as PYTHON_QUALITY_VALUES, yo as WORKSPACE_SHAPE_VALUES, yr as JOB_QUEUE_VALUES, yt as ELIXIR_APPLICATION_FRAMEWORK_VALUES, z as DOTNET_API_VALUES, za as SHADCN_RADIUS_VALUES, zn as GO_VALIDATION_VALUES, zr as MOBILE_OTA_VALUES, zt as EMAIL_VALUES } from "./schemas-cgmdgudQ.mjs";
|
|
2
|
+
import { A as hasTanStackAICompatibleFrontend, D as getUnsupportedWebDeployFrontend, E as UI_LIBRARY_COMPATIBILITY, F as requiresChatSdkVercelAIForExamples, G as getToolingSelectionOptions, K as isToolingOverlayOnly, S as stackPartsToLegacyProjectConfigPartial, U as getToolingCapability, b as projectStackPartSettingsToProjectConfig, c as formatStackPartSpec, d as getStackPartCompatibilityIssueForPart, g as legacyProjectConfigToStackParts, j as hasTauriCompatibleFrontend, k as hasPWACompatibleFrontend, l as getAddonStackPartBinding, v as mergeProjectConfigSettingsIntoStackParts, w as validateStackParts, y as parseStackPartSpecs } from "./stack-graph-Oj-P0cij.mjs";
|
|
3
|
+
import { t as createCliDefaultProjectConfigBase } from "./defaults-DTS30ICD.mjs";
|
|
4
4
|
|
|
5
|
-
//#region src/capabilities.ts
|
|
5
|
+
//#region src/capabilities/capabilities.ts
|
|
6
6
|
const CAPABILITY_DEFINITIONS = { auth: [
|
|
7
7
|
{
|
|
8
8
|
id: "better-auth",
|
|
@@ -245,7 +245,7 @@ function normalizeCapabilitySelection(capability, context, optionId) {
|
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
//#endregion
|
|
248
|
-
//#region src/option-metadata.ts
|
|
248
|
+
//#region src/catalog/option-metadata.ts
|
|
249
249
|
const TYPESCRIPT_CATEGORY_ORDER = [
|
|
250
250
|
"webFrontend",
|
|
251
251
|
"astroIntegration",
|
|
@@ -319,6 +319,22 @@ const TYPESCRIPT_CATEGORY_ORDER = [
|
|
|
319
319
|
"git",
|
|
320
320
|
"install"
|
|
321
321
|
];
|
|
322
|
+
/**
|
|
323
|
+
* Kotlin, Swift and Flutter apps exist only as stack graph parts: they are
|
|
324
|
+
* composed in multi-ecosystem mode or through `--shape mobile`, and the
|
|
325
|
+
* `react-native` ecosystem rejects them outright. They ride along in the mobile
|
|
326
|
+
* category order so their metadata stays reachable, so every surface that
|
|
327
|
+
* presents the react-native ecosystem to a user must filter them out.
|
|
328
|
+
*/
|
|
329
|
+
const MULTI_ECOSYSTEM_MOBILE_CATEGORIES = new Set([
|
|
330
|
+
"kotlinMobile",
|
|
331
|
+
"kotlinMobileLibraries",
|
|
332
|
+
"swiftMobile",
|
|
333
|
+
"dartMobile"
|
|
334
|
+
]);
|
|
335
|
+
function isMultiEcosystemMobileCategory(category) {
|
|
336
|
+
return MULTI_ECOSYSTEM_MOBILE_CATEGORIES.has(category);
|
|
337
|
+
}
|
|
322
338
|
const REACT_NATIVE_CATEGORY_ORDER = [
|
|
323
339
|
"nativeFrontend",
|
|
324
340
|
"kotlinMobile",
|
|
@@ -2118,7 +2134,7 @@ function normalizeOptionId(category, value) {
|
|
|
2118
2134
|
}
|
|
2119
2135
|
|
|
2120
2136
|
//#endregion
|
|
2121
|
-
//#region src/compatibility.ts
|
|
2137
|
+
//#region src/stack/compatibility.ts
|
|
2122
2138
|
const SIGNOZ_SUPPORTED_GO_WEB_FRAMEWORKS = new Set([
|
|
2123
2139
|
"gin",
|
|
2124
2140
|
"echo",
|
|
@@ -2213,6 +2229,25 @@ function getKotlinJavaIncompatibilityReason(stack) {
|
|
|
2213
2229
|
if (unsupportedTestingLibrary) return `The '${unsupportedTestingLibrary}' testing library is not wired for the Kotlin scaffold`;
|
|
2214
2230
|
return null;
|
|
2215
2231
|
}
|
|
2232
|
+
const REACT_NATIVE_ONLY_CATEGORIES = new Set([
|
|
2233
|
+
"mobileNavigation",
|
|
2234
|
+
"mobileUI",
|
|
2235
|
+
"mobileStorage",
|
|
2236
|
+
"mobileTesting",
|
|
2237
|
+
"mobilePush",
|
|
2238
|
+
"mobileOTA",
|
|
2239
|
+
"mobileDeepLinking",
|
|
2240
|
+
"mobileLibraries"
|
|
2241
|
+
]);
|
|
2242
|
+
function isReactNativeOnlyCategory(category) {
|
|
2243
|
+
return REACT_NATIVE_ONLY_CATEGORIES.has(category);
|
|
2244
|
+
}
|
|
2245
|
+
function hasReactNativeApp(stack) {
|
|
2246
|
+
return (stack.nativeFrontend ?? []).some((frontend) => frontend !== "none");
|
|
2247
|
+
}
|
|
2248
|
+
function hasKotlinMobileApp(stack) {
|
|
2249
|
+
return (stack.kotlinMobile ?? "none") !== "none";
|
|
2250
|
+
}
|
|
2216
2251
|
const TURNSTILE_WEB_FRONTENDS = new Set([
|
|
2217
2252
|
"next",
|
|
2218
2253
|
"react-router",
|
|
@@ -2322,7 +2357,7 @@ const SINGLE_APP_WEB_FRONTEND_BY_BACKEND = {
|
|
|
2322
2357
|
* sibling workspace package (database/orm, better-auth server, trpc/orpc
|
|
2323
2358
|
* packages/api, payments, email, etc.) and no separate native/server app. For
|
|
2324
2359
|
* anything else, `single-app` is normalized back to `monorepo` so we never emit
|
|
2325
|
-
* a broken flat layout. appPlatforms (turborepo/nx) are ignored here
|
|
2360
|
+
* a broken flat layout. appPlatforms (turborepo/nx) are ignored here - the
|
|
2326
2361
|
* generator drops the workspace tooling when it flattens.
|
|
2327
2362
|
*/
|
|
2328
2363
|
function stackQualifiesForSingleApp(stack) {
|
|
@@ -2673,7 +2708,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
2673
2708
|
message: "Integrations set to 'none' (Nango's Node SDK is not available on Cloudflare Workers)"
|
|
2674
2709
|
});
|
|
2675
2710
|
}
|
|
2676
|
-
if (nextStack.runtime === "none" && nextStack.backend !== "convex" && nextStack.backend !== "none" && nextStack.backend !== "self-next" && nextStack.backend !== "self-vinext" && nextStack.backend !== "self-tanstack-start" && nextStack.backend !== "self-astro" && nextStack.backend !== "self-nuxt" && nextStack.backend !== "self-svelte" && nextStack.backend !== "self-solid-start") {
|
|
2711
|
+
if (nextStack.runtime === "none" && nextStack.backend !== "convex" && nextStack.backend !== "encore" && nextStack.backend !== "none" && nextStack.backend !== "self-next" && nextStack.backend !== "self-vinext" && nextStack.backend !== "self-tanstack-start" && nextStack.backend !== "self-astro" && nextStack.backend !== "self-nuxt" && nextStack.backend !== "self-svelte" && nextStack.backend !== "self-solid-start") {
|
|
2677
2712
|
nextStack.runtime = DEFAULT_RUNTIME;
|
|
2678
2713
|
changed = true;
|
|
2679
2714
|
changes.push({
|
|
@@ -3977,6 +4012,7 @@ const analyzeStackCompatibility = (stack) => {
|
|
|
3977
4012
|
* - Follow CLI behavior: filter options based on UPSTREAM selections only
|
|
3978
4013
|
*/
|
|
3979
4014
|
const getDisabledReason = (currentStack, category, optionId) => {
|
|
4015
|
+
if (optionId !== "none" && category === "kotlinMobileLibraries" && !hasKotlinMobileApp(currentStack)) return "Kotlin mobile libraries require a Jetpack Compose or Compose Multiplatform app";
|
|
3980
4016
|
if (currentStack.ecosystem === "react-native" && category === "codeQuality" && optionId !== "knip" && optionId !== "gitleaks") return "React Native code quality currently supports Knip and Gitleaks only";
|
|
3981
4017
|
if (category === "codeQuality" && optionId === "knip" && currentStack.ecosystem !== "typescript" && currentStack.ecosystem !== "react-native") return "Knip requires a TypeScript or React Native workspace";
|
|
3982
4018
|
if (category === "appPlatforms" && optionId === "vite-plus" && (currentStack.ecosystem !== "typescript" || !currentStack.webFrontend.some((frontend) => frontend !== "none"))) return "Vite+ requires a generated TypeScript web frontend";
|
|
@@ -4041,7 +4077,7 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
4041
4077
|
"codeQuality"
|
|
4042
4078
|
]);
|
|
4043
4079
|
if (category === "payments" && optionId !== "none" && optionId !== "revenuecat") return "React Native payments currently support RevenueCat only";
|
|
4044
|
-
if (!reactNativeCategories.has(category) && optionId !== "none" && optionId !== "false") return "React Native ecosystem only supports native mobile options";
|
|
4080
|
+
if (!reactNativeCategories.has(category) && !isMultiEcosystemMobileCategory(category) && optionId !== "none" && optionId !== "false") return "React Native ecosystem only supports native mobile options";
|
|
4045
4081
|
}
|
|
4046
4082
|
if (currentStack.backend === "none") {
|
|
4047
4083
|
if (category === "runtime" && optionId !== "none") return "No backend selected";
|
|
@@ -4416,17 +4452,8 @@ const getDisabledReason = (currentStack, category, optionId) => {
|
|
|
4416
4452
|
"nextui"
|
|
4417
4453
|
].includes(currentStack.uiLibrary) && optionId !== "tailwind") return `${currentStack.uiLibrary === "shadcn-ui" ? "shadcn/ui" : currentStack.uiLibrary === "shadcn-svelte" ? "shadcn-svelte" : currentStack.uiLibrary === "daisyui" ? "daisyUI" : "NextUI"} requires Tailwind CSS`;
|
|
4418
4454
|
}
|
|
4419
|
-
if (
|
|
4420
|
-
"
|
|
4421
|
-
"mobileUI",
|
|
4422
|
-
"mobileStorage",
|
|
4423
|
-
"mobileTesting",
|
|
4424
|
-
"mobilePush",
|
|
4425
|
-
"mobileOTA",
|
|
4426
|
-
"mobileDeepLinking",
|
|
4427
|
-
"mobileLibraries"
|
|
4428
|
-
]).has(category)) {
|
|
4429
|
-
if (!currentStack.nativeFrontend.some((f) => f !== "none") && optionId !== "none") return `${getCategoryDisplayName(category)} requires a native Expo frontend`;
|
|
4455
|
+
if (isReactNativeOnlyCategory(category)) {
|
|
4456
|
+
if (!hasReactNativeApp(currentStack) && optionId !== "none") return `${getCategoryDisplayName(category)} requires a native Expo frontend`;
|
|
4430
4457
|
if (category === "mobileNavigation" && optionId === "react-navigation") return null;
|
|
4431
4458
|
if (category === "mobileUI") {
|
|
4432
4459
|
if (optionId === "uniwind" && !currentStack.nativeFrontend.includes("native-uniwind")) return "Uniwind mobile UI requires Expo + Uniwind frontend";
|
|
@@ -4634,6 +4661,57 @@ const isOptionCompatible = (currentStack, category, optionId) => {
|
|
|
4634
4661
|
if (currentStack.yolo === "true") return true;
|
|
4635
4662
|
return getDisabledReason(currentStack, category, optionId) === null;
|
|
4636
4663
|
};
|
|
4664
|
+
function capabilityReference(category, optionId) {
|
|
4665
|
+
return {
|
|
4666
|
+
id: `${category}:${optionId}`,
|
|
4667
|
+
category,
|
|
4668
|
+
optionId
|
|
4669
|
+
};
|
|
4670
|
+
}
|
|
4671
|
+
function getCompatibilityExplanation(currentStack, category, optionId, reasonOverride) {
|
|
4672
|
+
const reason = reasonOverride ?? getDisabledReason(currentStack, category, optionId);
|
|
4673
|
+
if (!reason) return null;
|
|
4674
|
+
const graphDecision = getGraphDisabledReason(currentStack, category, optionId);
|
|
4675
|
+
const replacementIds = graphDecision.reason === reason ? graphDecision.alternatives ?? [] : [];
|
|
4676
|
+
const capability = capabilityReference(category, optionId);
|
|
4677
|
+
const alternatives = replacementIds.map((replacementId) => capabilityReference(category, replacementId));
|
|
4678
|
+
const punctuatedReason = /[.!?]$/.test(reason) ? reason : `${reason}.`;
|
|
4679
|
+
const message = alternatives.length === 0 ? reason : `${punctuatedReason} Compatible alternatives: ${alternatives.map((alternative) => alternative.optionId).join(", ")}.`;
|
|
4680
|
+
return {
|
|
4681
|
+
schemaVersion: 1,
|
|
4682
|
+
ruleId: `compatibility:${category}:${optionId}`,
|
|
4683
|
+
reason,
|
|
4684
|
+
message,
|
|
4685
|
+
capability,
|
|
4686
|
+
owner: {
|
|
4687
|
+
kind: graphDecision.ownerPart ? "stack-part" : "capability",
|
|
4688
|
+
capability,
|
|
4689
|
+
stackPart: graphDecision.ownerPart ?? null
|
|
4690
|
+
},
|
|
4691
|
+
candidateStackPart: graphDecision.candidateStackPart ?? null,
|
|
4692
|
+
alternatives
|
|
4693
|
+
};
|
|
4694
|
+
}
|
|
4695
|
+
function getCompatibilityDecision(currentStack, category, optionId) {
|
|
4696
|
+
const reason = getDisabledReason(currentStack, category, optionId);
|
|
4697
|
+
if (!reason) return {
|
|
4698
|
+
reason: null,
|
|
4699
|
+
suggestedReplacements: [],
|
|
4700
|
+
explanation: null
|
|
4701
|
+
};
|
|
4702
|
+
const explanation = getCompatibilityExplanation(currentStack, category, optionId, reason);
|
|
4703
|
+
return {
|
|
4704
|
+
reason,
|
|
4705
|
+
suggestedReplacements: explanation?.alternatives.map((alternative) => alternative.optionId) ?? [],
|
|
4706
|
+
explanation
|
|
4707
|
+
};
|
|
4708
|
+
}
|
|
4709
|
+
function formatCompatibilityDecision(decision) {
|
|
4710
|
+
if (!decision.reason) return null;
|
|
4711
|
+
if (decision.explanation) return decision.explanation.message;
|
|
4712
|
+
if (decision.suggestedReplacements.length === 0) return decision.reason;
|
|
4713
|
+
return `${decision.reason} Compatible alternatives: ${decision.suggestedReplacements.join(", ")}.`;
|
|
4714
|
+
}
|
|
4637
4715
|
const SHARED_BACKEND_SERVICE_CATEGORIES = new Set([
|
|
4638
4716
|
"email",
|
|
4639
4717
|
"observability",
|
|
@@ -5297,7 +5375,11 @@ function getGraphDisabledReason(currentStack, category, optionId) {
|
|
|
5297
5375
|
if (!owner && !binding.allowOwnerlessCandidate) return {
|
|
5298
5376
|
handled: true,
|
|
5299
5377
|
authoritative: binding.authoritative === true,
|
|
5300
|
-
reason: binding.missingOwnerReason ?? null
|
|
5378
|
+
reason: binding.missingOwnerReason ?? null,
|
|
5379
|
+
candidateStackPart: {
|
|
5380
|
+
role: binding.role,
|
|
5381
|
+
ecosystem: binding.ecosystem
|
|
5382
|
+
}
|
|
5301
5383
|
};
|
|
5302
5384
|
const issue = getStackPartCompatibilityIssueForPart({
|
|
5303
5385
|
id: `${binding.candidateIdPrefix ?? "candidate"}:${binding.ownerRole}.${binding.role}:${binding.ecosystem}:${optionId}`,
|
|
@@ -5313,7 +5395,18 @@ function getGraphDisabledReason(currentStack, category, optionId) {
|
|
|
5313
5395
|
return {
|
|
5314
5396
|
handled: true,
|
|
5315
5397
|
authoritative: binding.authoritative === true,
|
|
5316
|
-
reason: issue?.message ?? (!owner ? binding.missingOwnerReason ?? null : null)
|
|
5398
|
+
reason: issue?.message ?? (!owner ? binding.missingOwnerReason ?? null : null),
|
|
5399
|
+
alternatives: issue?.alternatives,
|
|
5400
|
+
ownerPart: owner ? {
|
|
5401
|
+
id: owner.id,
|
|
5402
|
+
role: owner.role,
|
|
5403
|
+
ecosystem: owner.ecosystem,
|
|
5404
|
+
toolId: owner.toolId
|
|
5405
|
+
} : void 0,
|
|
5406
|
+
candidateStackPart: {
|
|
5407
|
+
role: binding.role,
|
|
5408
|
+
ecosystem: binding.ecosystem
|
|
5409
|
+
}
|
|
5317
5410
|
};
|
|
5318
5411
|
}
|
|
5319
5412
|
const WEB_FRAMEWORKS = [
|
|
@@ -5885,6 +5978,21 @@ function evaluateCompatibility(input) {
|
|
|
5885
5978
|
["auth", input.auth],
|
|
5886
5979
|
["payments", input.payments],
|
|
5887
5980
|
["email", input.email],
|
|
5981
|
+
["fileUpload", input.fileUpload],
|
|
5982
|
+
["logging", input.logging],
|
|
5983
|
+
["observability", input.observability],
|
|
5984
|
+
["realtime", input.realtime],
|
|
5985
|
+
["jobQueue", input.jobQueue],
|
|
5986
|
+
["validation", input.validation],
|
|
5987
|
+
["testing", input.testing],
|
|
5988
|
+
["ai", input.aiSdk],
|
|
5989
|
+
["caching", input.caching],
|
|
5990
|
+
["rateLimit", input.rateLimit],
|
|
5991
|
+
["i18n", input.i18n],
|
|
5992
|
+
["search", input.search],
|
|
5993
|
+
["vectorDb", input.vectorDb],
|
|
5994
|
+
["fileStorage", input.fileStorage],
|
|
5995
|
+
["analytics", input.analytics],
|
|
5888
5996
|
["cssFramework", input.cssFramework],
|
|
5889
5997
|
["uiLibrary", input.uiLibrary],
|
|
5890
5998
|
["webDeploy", input.webDeploy],
|
|
@@ -5993,6 +6101,15 @@ function evaluateCompatibility(input) {
|
|
|
5993
6101
|
optionId: mobileLibrary
|
|
5994
6102
|
});
|
|
5995
6103
|
}
|
|
6104
|
+
for (const kotlinLibrary of input.kotlinMobileLibraries ?? []) {
|
|
6105
|
+
const reason = getDisabledReason(input, "kotlinMobileLibraries", kotlinLibrary);
|
|
6106
|
+
if (reason) issues.push({
|
|
6107
|
+
code: "INCOMPATIBLE_KOTLIN_MOBILE_LIBRARY",
|
|
6108
|
+
message: reason,
|
|
6109
|
+
category: "kotlinMobileLibraries",
|
|
6110
|
+
optionId: kotlinLibrary
|
|
6111
|
+
});
|
|
6112
|
+
}
|
|
5996
6113
|
for (const testingLibrary of input.javaTestingLibraries) {
|
|
5997
6114
|
const reason = getDisabledReason(input, "javaTestingLibraries", testingLibrary);
|
|
5998
6115
|
if (reason) issues.push({
|
|
@@ -6029,11 +6146,20 @@ function evaluateCompatibility(input) {
|
|
|
6029
6146
|
optionId: dotnetLibrary
|
|
6030
6147
|
});
|
|
6031
6148
|
}
|
|
6032
|
-
return { issues
|
|
6149
|
+
return { issues: issues.map((issue) => {
|
|
6150
|
+
if (!issue.category || !issue.optionId) return issue;
|
|
6151
|
+
const explanation = getCompatibilityExplanation(input, issue.category, issue.optionId, issue.message);
|
|
6152
|
+
const suggestions = issue.suggestions ?? explanation?.alternatives.map((alternative) => `Use '${alternative.optionId}'`);
|
|
6153
|
+
return {
|
|
6154
|
+
...issue,
|
|
6155
|
+
...suggestions && suggestions.length > 0 ? { suggestions } : {},
|
|
6156
|
+
...explanation ? { explanation } : {}
|
|
6157
|
+
};
|
|
6158
|
+
}) };
|
|
6033
6159
|
}
|
|
6034
6160
|
|
|
6035
6161
|
//#endregion
|
|
6036
|
-
//#region src/stack-translation.ts
|
|
6162
|
+
//#region src/stack/stack-translation.ts
|
|
6037
6163
|
const DEFAULT_STACK_SELECTION = {
|
|
6038
6164
|
stackMode: "solo",
|
|
6039
6165
|
stackPartSpecs: [],
|
|
@@ -7645,7 +7771,7 @@ function getGraphStackParts(selection) {
|
|
|
7645
7771
|
const stackParts = parseStackPartSpecs(stackPartSpecs, "selected");
|
|
7646
7772
|
const validation = validateStackParts(parseStackPartSpecs(getSelectableStackPartSpecs(stackPartSpecs), "selected"));
|
|
7647
7773
|
if (validation.issues.length > 0) throw new Error(validation.issues.map((issue) => issue.message).join("\n"));
|
|
7648
|
-
return stackParts;
|
|
7774
|
+
return mergeProjectConfigSettingsIntoStackParts(stackParts, selection);
|
|
7649
7775
|
}
|
|
7650
7776
|
function getAdjustedSelection(selection) {
|
|
7651
7777
|
const compatibility = analyzeStackCompatibility(selection);
|
|
@@ -7747,7 +7873,7 @@ function getCliGraphStackParts(input) {
|
|
|
7747
7873
|
addScopedBackendPart("elixir", "orm", input.elixirOrm);
|
|
7748
7874
|
addScopedBackendPart("elixir", "api", input.elixirApi);
|
|
7749
7875
|
addScopedBackendPart("elixir", "auth", input.elixirAuth);
|
|
7750
|
-
return parseStackPartSpecs(expandScopedStackPartSpecs(stackPartSpecs, getCliScopedPartFields(input)), "selected");
|
|
7876
|
+
return mergeProjectConfigSettingsIntoStackParts(parseStackPartSpecs(expandScopedStackPartSpecs(stackPartSpecs, getCliScopedPartFields(input)), "selected"), input);
|
|
7751
7877
|
}
|
|
7752
7878
|
function buildProjectConfigBase(selection, projectName, relativePath, install) {
|
|
7753
7879
|
const stack = getAdjustedSelection(selection);
|
|
@@ -7992,8 +8118,10 @@ function getBaseCommand(selection) {
|
|
|
7992
8118
|
}
|
|
7993
8119
|
function generateGraphCommand(selection, projectName) {
|
|
7994
8120
|
const stackParts = getGraphStackParts(selection);
|
|
8121
|
+
const graphSettings = projectStackPartSettingsToProjectConfig(stackParts, { includeDefaults: true });
|
|
7995
8122
|
const hasTypeScriptFrontend = hasGraphPrimaryPart(stackParts, "frontend", "typescript");
|
|
7996
8123
|
const hasAstroFrontend = hasGraphPrimaryPart(stackParts, "frontend", "typescript", "astro");
|
|
8124
|
+
const hasShadcnUi = stackParts.some((part) => part.source !== "provided" && part.role === "ui" && part.ecosystem === "typescript" && part.toolId === "shadcn-ui");
|
|
7997
8125
|
const hasRustBackend = hasGraphPrimaryPart(stackParts, "backend", "rust");
|
|
7998
8126
|
const hasPythonBackend = hasGraphPrimaryPart(stackParts, "backend", "python");
|
|
7999
8127
|
const hasGoBackend = hasGraphPrimaryPart(stackParts, "backend", "go");
|
|
@@ -8004,8 +8132,11 @@ function generateGraphCommand(selection, projectName) {
|
|
|
8004
8132
|
const hasMobile = hasGraphPrimaryPart(stackParts, "mobile");
|
|
8005
8133
|
const flags = [
|
|
8006
8134
|
...stackParts.filter((part) => part.source !== "provided" && part.toolId !== "none").map((part) => `--part ${formatStackPartSpec(part, stackParts)}`),
|
|
8007
|
-
...hasAstroFrontend &&
|
|
8008
|
-
...hasTypeScriptFrontend &&
|
|
8135
|
+
...hasAstroFrontend && graphSettings.astroIntegration !== "none" ? [`--astro-integration ${graphSettings.astroIntegration}`] : [],
|
|
8136
|
+
...hasTypeScriptFrontend && hasShadcnUi ? formatChangedStringFlags({
|
|
8137
|
+
...selection,
|
|
8138
|
+
...graphSettings
|
|
8139
|
+
}, GRAPH_SHADCN_FLAG_KEYS) : [],
|
|
8009
8140
|
...hasNonTypeScriptBackend ? formatChangedStringFlags(selection, GRAPH_SHARED_BACKEND_FLAG_KEYS) : [],
|
|
8010
8141
|
...hasElixirBackend ? formatChangedStringFlags(selection, GRAPH_ELIXIR_BACKEND_FLAG_KEYS) : [],
|
|
8011
8142
|
...hasMobile ? formatChangedStringFlags(selection, GRAPH_MOBILE_FLAG_KEYS) : [],
|
|
@@ -8297,5 +8428,5 @@ function generateStackSelectionCommand(selection) {
|
|
|
8297
8428
|
}
|
|
8298
8429
|
|
|
8299
8430
|
//#endregion
|
|
8300
|
-
export {
|
|
8301
|
-
//# sourceMappingURL=stack-translation-
|
|
8431
|
+
export { isWebFrontend as $, formatCompatibilityDecision as A, getKotlinJavaIncompatibilityReason as B, usesVirtualNoneStackSelection as C, isMultiEcosystemMobileCategory as Ct, allowedApisForFrontends as D, getCapabilityDisabledReason as Dt, KOTLIN_UNSUPPORTED_JAVA_TESTING_LIBRARIES as E, getCapabilityDefinitions as Et, getCompatibleAddons as F, isBotIdWebFrontend as G, hasSignozSupportedGoServerTarget as H, getCompatibleCSSFrameworks as I, isReactNativeOnlyCategory as J, isFrontendAllowedWithBackend as K, getCompatibleFormLibraries as L, getApiFrontendCompatibilityIssue as M, getCompatibilityDecision as N, analyzeStackCompatibility as O, getSupportedCapabilityOptions as Ot, getCompatibilityExplanation as P, isVercelAnalyticsFrontend as Q, getCompatibleUILibraries as R, stackSelectionToProjectConfig as S, getOptionMetadata as St, KOTLIN_DROPPED_JAVA_LIBRARIES as T, normalizeOptionId as Tt, hasWebStyling as U, hasReactNativeApp as V, isAnalyticsFrontendSupported as W, isSignozSupportedPythonWebFramework as X, isSignozSupportedGoWebFramework as Y, isTurnstileWebFrontend as Z, normalizeStackSelectionValue as _, TYPESCRIPT_CATEGORY_ORDER as _t, STACK_SELECTION_OPTION_CATEGORY_BY_KEY as a, validateAddonCompatibility as at, processCliArrayOption as b, getCategoryOptionIds as bt, cliInputToProjectConfigPartial as c, DOTNET_CATEGORY_ORDER as ct, generateStackSelectionCommand as d, JAVA_CATEGORY_ORDER as dt, requiresChatSdkVercelAI as et, isArrayStackSelectionKey as f, MULTI_ECOSYSTEM_MOBILE_CATEGORIES as ft, normalizeStackSelection as g, RUST_CATEGORY_ORDER as gt, isStackSelectionDefault as h, REACT_NATIVE_CATEGORY_ORDER as ht, STACK_SELECTION_KEYS as i, supportsAnalyticsFrontends as it, getAIFrontendCompatibilityIssue as j, evaluateCompatibility as k, normalizeCapabilitySelection as kt, cloneDefaultStackSelection as l, ELIXIR_CATEGORY_ORDER as lt, isGraphStackSelection as m, PYTHON_CATEGORY_ORDER as mt, NON_OPTION_STACK_SELECTION_KEYS as n, splitFrontends as nt, STACK_SELECTION_URL_KEYS as o, validateProjectName as ot, isCliDefaultStackSelection as p, OPTION_CATEGORY_METADATA as pt, isOptionCompatible as q, PACKAGE_MANAGER_COMMANDS as r, stackQualifiesForSingleApp as rt, VIRTUAL_NONE_MULTI_SELECT_STACK_SELECTION_KEYS as s, CATEGORY_ORDER as st, DEFAULT_STACK_SELECTION as t, requiresChatSdkVercelAIForSelection as tt, createStackSelectionSearchParams as u, GO_CATEGORY_ORDER as ut, parseStackSelectionFromSearch as v, getCategoryCliValues as vt, ANALYTICS_FRONTEND_SUPPORT as w, isMultiSelectCategory as wt, stackSelectionToCliComparableConfig as x, getCategoryOrderForEcosystem as xt, parseStackSelectionFromUrlRecord as y, getCategoryDisplayName as yt, getDisabledReason as z };
|
|
8432
|
+
//# sourceMappingURL=stack-translation-49iba9M5.mjs.map
|