@@ -3,6 +3,7 @@ package config
33import (
44 "os"
55 "path/filepath"
6+ "strconv"
67 "strings"
78 "sync"
89
@@ -94,10 +95,6 @@ func LoadEnv(config *koanf.Koanf) (koanf.Provider, error) {
9495 return e , err
9596}
9697
97- func mergeConfig (path string , mergeInto * koanf.Koanf , mergeFrom * koanf.Koanf ) {
98- mergeInto .MergeAt (mergeFrom , path )
99- }
100-
10198func templateConfig (config * koanf.Koanf ) {
10299 data := config .All ()
103100
@@ -138,9 +135,10 @@ func normalizeKeys(config *koanf.Koanf) {
138135 config .Load (confmap .Provider (data , "." ), nil )
139136}
140137
141- func transformChildren (config * koanf.Koanf , prefix string , transform func (key string , value any ) (string , any )) error {
138+ // Transforms Children of path
139+ func transformChildren (config * koanf.Koanf , path string , transform func (key string , value any ) (string , any )) error {
142140 var sub map [string ]any
143- if err := config .Unmarshal (prefix , & sub ); err != nil {
141+ if err := config .Unmarshal (path , & sub ); err != nil {
144142 return err
145143 }
146144
@@ -152,16 +150,38 @@ func transformChildren(config *koanf.Koanf, prefix string, transform func(key st
152150 }
153151
154152 config .Load (confmap .Provider (map [string ]any {
155- prefix : map [string ]any {},
153+ path : map [string ]any {},
156154 }, "." ), nil )
157155
158156 config .Load (confmap .Provider (map [string ]any {
159- prefix : transformed ,
157+ path : transformed ,
160158 }, "." ), nil )
161159
162160 return nil
163161}
164162
163+ // Does the same thing as transformChildren() but does it for each Array Item inside of root and transforms subPath
164+ func transformChildrenUnderArray (config * koanf.Koanf , root string , subPath string , transform func (key string , value any ) (string , any )) error {
165+ var tokens []map [string ]any
166+
167+ err := config .Unmarshal (root , & tokens )
168+
169+ if err != nil {
170+ return err
171+ }
172+
173+ for i := range tokens {
174+ p := root + "." + strconv .Itoa (i ) + "." + subPath
175+
176+ if err := transformChildren (config , p , transform ); err != nil {
177+ return err
178+ }
179+ }
180+
181+ return nil
182+ }
183+
184+
165185func normalizeEnv (key string , value string ) (string , any ) {
166186 key = strings .ToLower (key )
167187 key = strings .ReplaceAll (key , "__" , "." )
0 commit comments