11import  *  as  fs  from  'fs' ; 
2- import  *  as  u  from  'underscore' ; 
2+ import  *  as  _  from  'underscore' ; 
3+ 
4+ export  enum  ActionOnInvalid  { 
5+     THROW  =  'throw' , 
6+     FILTER  =  'filter' , 
7+ } 
8+ 
9+ export  interface  ConfigOptions  { 
10+     onInvalidEntry : ActionOnInvalid ; 
11+ } 
12+ 
13+ function  defaultNewConfigOptions ( ) : ConfigOptions  { 
14+     return  { 
15+         onInvalidEntry : ActionOnInvalid . THROW , 
16+     } ; 
17+ } 
318
419export  interface  Cluster  { 
520    readonly  name : string ; 
@@ -9,8 +24,10 @@ export interface Cluster {
924    readonly  skipTLSVerify : boolean ; 
1025} 
1126
12- export  function  newClusters ( a : any ) : Cluster [ ]  { 
13-     return  u . map ( a ,  clusterIterator ( ) ) ; 
27+ export  function  newClusters ( a : any ,  opts ?: Partial < ConfigOptions > ) : Cluster [ ]  { 
28+     const  options  =  Object . assign ( defaultNewConfigOptions ( ) ,  opts  ||  { } ) ; 
29+ 
30+     return  _ . compact ( _ . map ( a ,  clusterIterator ( options . onInvalidEntry ) ) ) ; 
1431} 
1532
1633export  function  exportCluster ( cluster : Cluster ) : any  { 
@@ -25,24 +42,34 @@ export function exportCluster(cluster: Cluster): any {
2542    } ; 
2643} 
2744
28- function  clusterIterator ( ) : u . ListIterator < any ,  Cluster >  { 
29-     return  ( elt : any ,  i : number ,  list : u . List < any > ) : Cluster  =>  { 
30-         if  ( ! elt . name )  { 
31-             throw  new  Error ( `clusters[${ i }  ) ; 
32-         } 
33-         if  ( ! elt . cluster )  { 
34-             throw  new  Error ( `clusters[${ i }  ) ; 
45+ function  clusterIterator ( onInvalidEntry : ActionOnInvalid ) : _ . ListIterator < any ,  Cluster  |  null >  { 
46+     return  ( elt : any ,  i : number ,  list : _ . List < any > ) : Cluster  |  null  =>  { 
47+         try  { 
48+             if  ( ! elt . name )  { 
49+                 throw  new  Error ( `clusters[${ i }  ) ; 
50+             } 
51+             if  ( ! elt . cluster )  { 
52+                 throw  new  Error ( `clusters[${ i }  ) ; 
53+             } 
54+             if  ( ! elt . cluster . server )  { 
55+                 throw  new  Error ( `clusters[${ i }  ) ; 
56+             } 
57+             return  { 
58+                 caData : elt . cluster [ 'certificate-authority-data' ] , 
59+                 caFile : elt . cluster [ 'certificate-authority' ] , 
60+                 name : elt . name , 
61+                 server : elt . cluster . server , 
62+                 skipTLSVerify : elt . cluster [ 'insecure-skip-tls-verify' ]  ===  true , 
63+             } ; 
64+         }  catch  ( err )  { 
65+             switch  ( onInvalidEntry )  { 
66+                 case  ActionOnInvalid . FILTER :
67+                     return  null ; 
68+                 default :
69+                 case  ActionOnInvalid . THROW :
70+                     throw  err ; 
71+             } 
3572        } 
36-         if  ( ! elt . cluster . server )  { 
37-             throw  new  Error ( `clusters[${ i }  ) ; 
38-         } 
39-         return  { 
40-             caData : elt . cluster [ 'certificate-authority-data' ] , 
41-             caFile : elt . cluster [ 'certificate-authority' ] , 
42-             name : elt . name , 
43-             server : elt . cluster . server , 
44-             skipTLSVerify : elt . cluster [ 'insecure-skip-tls-verify' ]  ===  true , 
45-         } ; 
4673    } ; 
4774} 
4875
@@ -59,8 +86,10 @@ export interface User {
5986    readonly  password ?: string ; 
6087} 
6188
62- export  function  newUsers ( a : any ) : User [ ]  { 
63-     return  u . map ( a ,  userIterator ( ) ) ; 
89+ export  function  newUsers ( a : any ,  opts ?: Partial < ConfigOptions > ) : User [ ]  { 
90+     const  options  =  Object . assign ( defaultNewConfigOptions ( ) ,  opts  ||  { } ) ; 
91+ 
92+     return  _ . compact ( _ . map ( a ,  userIterator ( options . onInvalidEntry ) ) ) ; 
6493} 
6594
6695export  function  exportUser ( user : User ) : any  { 
@@ -80,23 +109,33 @@ export function exportUser(user: User): any {
80109    } ; 
81110} 
82111
83- function  userIterator ( ) : u . ListIterator < any ,  User >  { 
84-     return  ( elt : any ,  i : number ,  list : u . List < any > ) : User  =>  { 
85-         if  ( ! elt . name )  { 
86-             throw  new  Error ( `users[${ i }  ) ; 
112+ function  userIterator ( onInvalidEntry : ActionOnInvalid ) : _ . ListIterator < any ,  User  |  null >  { 
113+     return  ( elt : any ,  i : number ,  list : _ . List < any > ) : User  |  null  =>  { 
114+         try  { 
115+             if  ( ! elt . name )  { 
116+                 throw  new  Error ( `users[${ i }  ) ; 
117+             } 
118+             return  { 
119+                 authProvider : elt . user  ? elt . user [ 'auth-provider' ]  : null , 
120+                 certData : elt . user  ? elt . user [ 'client-certificate-data' ]  : null , 
121+                 certFile : elt . user  ? elt . user [ 'client-certificate' ]  : null , 
122+                 exec : elt . user  ? elt . user . exec  : null , 
123+                 keyData : elt . user  ? elt . user [ 'client-key-data' ]  : null , 
124+                 keyFile : elt . user  ? elt . user [ 'client-key' ]  : null , 
125+                 name : elt . name , 
126+                 token : findToken ( elt . user ) , 
127+                 password : elt . user  ? elt . user . password  : null , 
128+                 username : elt . user  ? elt . user . username  : null , 
129+             } ; 
130+         }  catch  ( err )  { 
131+             switch  ( onInvalidEntry )  { 
132+                 case  ActionOnInvalid . FILTER :
133+                     return  null ; 
134+                 default :
135+                 case  ActionOnInvalid . THROW :
136+                     throw  err ; 
137+             } 
87138        } 
88-         return  { 
89-             authProvider : elt . user  ? elt . user [ 'auth-provider' ]  : null , 
90-             certData : elt . user  ? elt . user [ 'client-certificate-data' ]  : null , 
91-             certFile : elt . user  ? elt . user [ 'client-certificate' ]  : null , 
92-             exec : elt . user  ? elt . user . exec  : null , 
93-             keyData : elt . user  ? elt . user [ 'client-key-data' ]  : null , 
94-             keyFile : elt . user  ? elt . user [ 'client-key' ]  : null , 
95-             name : elt . name , 
96-             token : findToken ( elt . user ) , 
97-             password : elt . user  ? elt . user . password  : null , 
98-             username : elt . user  ? elt . user . username  : null , 
99-         } ; 
100139    } ; 
101140} 
102141
@@ -118,8 +157,10 @@ export interface Context {
118157    readonly  namespace ?: string ; 
119158} 
120159
121- export  function  newContexts ( a : any ) : Context [ ]  { 
122-     return  u . map ( a ,  contextIterator ( ) ) ; 
160+ export  function  newContexts ( a : any ,  opts ?: Partial < ConfigOptions > ) : Context [ ]  { 
161+     const  options  =  Object . assign ( defaultNewConfigOptions ( ) ,  opts  ||  { } ) ; 
162+ 
163+     return  _ . compact ( _ . map ( a ,  contextIterator ( options . onInvalidEntry ) ) ) ; 
123164} 
124165
125166export  function  exportContext ( ctx : Context ) : any  { 
@@ -129,22 +170,32 @@ export function exportContext(ctx: Context): any {
129170    } ; 
130171} 
131172
132- function  contextIterator ( ) : u . ListIterator < any ,  Context >  { 
133-     return  ( elt : any ,  i : number ,  list : u . List < any > ) : Context  =>  { 
134-         if  ( ! elt . name )  { 
135-             throw  new  Error ( `contexts[${ i }  ) ; 
136-         } 
137-         if  ( ! elt . context )  { 
138-             throw  new  Error ( `contexts[${ i }  ) ; 
139-         } 
140-         if  ( ! elt . context . cluster )  { 
141-             throw  new  Error ( `contexts[${ i }  ) ; 
173+ function  contextIterator ( onInvalidEntry : ActionOnInvalid ) : _ . ListIterator < any ,  Context  |  null >  { 
174+     return  ( elt : any ,  i : number ,  list : _ . List < any > ) : Context  |  null  =>  { 
175+         try  { 
176+             if  ( ! elt . name )  { 
177+                 throw  new  Error ( `contexts[${ i }  ) ; 
178+             } 
179+             if  ( ! elt . context )  { 
180+                 throw  new  Error ( `contexts[${ i }  ) ; 
181+             } 
182+             if  ( ! elt . context . cluster )  { 
183+                 throw  new  Error ( `contexts[${ i }  ) ; 
184+             } 
185+             return  { 
186+                 cluster : elt . context . cluster , 
187+                 name : elt . name , 
188+                 user : elt . context . user  ||  undefined , 
189+                 namespace : elt . context . namespace  ||  undefined , 
190+             } ; 
191+         }  catch  ( err )  { 
192+             switch  ( onInvalidEntry )  { 
193+                 case  ActionOnInvalid . FILTER :
194+                     return  null ; 
195+                 default :
196+                 case  ActionOnInvalid . THROW :
197+                     throw  err ; 
198+             } 
142199        } 
143-         return  { 
144-             cluster : elt . context . cluster , 
145-             name : elt . name , 
146-             user : elt . context . user  ||  undefined , 
147-             namespace : elt . context . namespace  ||  undefined , 
148-         } ; 
149200    } ; 
150201} 
0 commit comments