resource-generator: SubParams nested fix (Соннет) — AlignParamTypes recursive, HasNestedParams/NeedsStrings skip array-map-fixed, bump 5.0.74

This commit is contained in:
“Naeel”
2026-07-16 15:43:01 +04:00
parent e097d0dae9
commit ae64ee5931
214 changed files with 89122 additions and 35 deletions
@@ -66,6 +66,21 @@ func AlignParamTypes(params []types.Param, schema []types.Param) []types.Param {
}
}
// Рекурсивно выравниваем SubParams (например cpu может быть string в modify, но int64 в create).
schemaByCode := make(map[string]types.Param, len(schema))
for _, p := range schema {
schemaByCode[strings.ToLower(strings.TrimSpace(p.Code))] = p
}
for i, p := range params {
if !p.HasSubParams {
continue
}
key := strings.ToLower(strings.TrimSpace(p.Code))
if sp, ok := schemaByCode[key]; ok && len(sp.SubParams) > 0 {
params[i].SubParams = AlignParamTypes(p.SubParams, sp.SubParams)
}
}
return params
}
@@ -231,6 +246,42 @@ func AnalyzeJsonPlanMod(params []types.Param) bool {
return false
}
// HasNestedParams возвращает true, если есть nested (только map-fixed, не array-map-fixed) параметры.
func HasNestedParams(params []types.Param) bool {
for _, p := range params {
if p.HasSubParams && !strings.Contains(strings.ToLower(p.Type), "array") {
return true
}
}
return false
}
// AnalyzeNestedDefaults проверяет sub-params nested-параметров на наличие default'ов.
// Возвращает true если найдены nested параметры.
func AnalyzeNestedDefaults(needsBoolDefault *bool, needsInt64Default *bool, needsStringDefault *bool, params []types.Param) bool {
found := false
for _, p := range params {
if len(p.SubParams) == 0 {
continue
}
found = true
for _, sp := range p.SubParams {
if sp.Default == "" {
continue
}
switch strings.ToLower(sp.Type) {
case "bool":
*needsBoolDefault = true
case "int64", "int", "number":
*needsInt64Default = true
default:
*needsStringDefault = true
}
}
}
return found
}
// HasRestoreCasingParams возвращает true, если есть ref_svc-параметры (кроме S3).
func HasRestoreCasingParams(params []types.Param) bool {
for _, p := range params {
@@ -244,6 +295,10 @@ func HasRestoreCasingParams(params []types.Param) bool {
// AnalyzeNeedsStrings возвращает true, если есть строковые параметры.
func AnalyzeNeedsStrings(params []types.Param) bool {
for _, p := range params {
// Пропускаем IsNested (map-fixed без array): они не участвуют в strings.EqualFold
if p.HasSubParams && !strings.Contains(strings.ToLower(p.Type), "array") {
continue
}
t := strings.ToLower(strings.TrimSpace(p.Type))
if t != "bool" && t != "int" && t != "int64" && t != "number" {
return true