ResolvePathValue resolves either a top-level input key ("count") or a one-level dotted object sub-key ("config.apiKey") from import inputs.
(inputs map[string]any, inputPath string)
| 15 | // ResolvePathValue resolves either a top-level input key ("count") or a one-level |
| 16 | // dotted object sub-key ("config.apiKey") from import inputs. |
| 17 | func ResolvePathValue(inputs map[string]any, inputPath string) (any, bool) { |
| 18 | top, sub, hasDot := strings.Cut(inputPath, ".") |
| 19 | if !hasDot { |
| 20 | value, ok := inputs[top] |
| 21 | importInputLog.Printf("ResolvePathValue: top-level key %q found=%t", top, ok) |
| 22 | return value, ok |
| 23 | } |
| 24 | topVal, topOK := inputs[top] |
| 25 | if !topOK { |
| 26 | importInputLog.Printf("ResolvePathValue: parent key %q not found for path %q", top, inputPath) |
| 27 | return nil, false |
| 28 | } |
| 29 | obj, isMap := topVal.(map[string]any) |
| 30 | if !isMap { |
| 31 | importInputLog.Printf("ResolvePathValue: parent key %q is not an object for path %q", top, inputPath) |
| 32 | return nil, false |
| 33 | } |
| 34 | value, ok := obj[sub] |
| 35 | importInputLog.Printf("ResolvePathValue: sub-key %q under %q found=%t", sub, top, ok) |
| 36 | return value, ok |
| 37 | } |
| 38 | |
| 39 | // FormatResolvedValue formats a resolved import input value for textual |
| 40 | // substitution. []any/map[string]any and typed slices/maps are normalized and |