...
1 package dotenv
2
3 import (
4 "strings"
5
6 "github.com/spf13/cast"
7 )
8
9
10
11
12 func flattenAndMergeMap(shadow, m map[string]any, prefix, delimiter string) map[string]any {
13 if shadow != nil && prefix != "" && shadow[prefix] != nil {
14
15 return shadow
16 }
17 if shadow == nil {
18 shadow = make(map[string]any)
19 }
20
21 var m2 map[string]any
22 if prefix != "" {
23 prefix += delimiter
24 }
25 for k, val := range m {
26 fullKey := prefix + k
27 switch val := val.(type) {
28 case map[string]any:
29 m2 = val
30 case map[any]any:
31 m2 = cast.ToStringMap(val)
32 default:
33
34 shadow[strings.ToLower(fullKey)] = val
35 continue
36 }
37
38 shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter)
39 }
40 return shadow
41 }
42
View as plain text