@@ -31,7 +31,7 @@ export function markAllValuesAsSecret(): ParsingExtension {
3131
3232/** When a key $$foo is seen, change it to be $foo and mark with meta property fromEscapedDirective */
3333export function unescape$Directives ( ) : ParsingExtension {
34- return ( value , [ _ , key ] ) => {
34+ return ( value , [ [ _ , key ] ] ) => {
3535 if ( typeof key === 'string' && key . startsWith ( '$$' ) ) {
3636 return async ( parse ) => {
3737 return parse ( value , { rewriteKey : key . slice ( 1 ) , fromEscapedDirective : true } ) ;
@@ -141,9 +141,9 @@ export function extendsSelfDirective(): ParsingExtension {
141141 stringSchema ( ) ,
142142 ) ;
143143
144- return forKey ( '$extendsSelf' , ( input , key , ctx ) => async ( parse , _ , __ , ___ , root ) => {
144+ return forKey ( '$extendsSelf' , ( input , parentKeys ) => async ( parse , _ , __ , ___ , root ) => {
145145 const value = ( await parse ( input ) ) . toJSON ( ) ;
146- validate ( value , [ ... ctx , key ] ) ;
146+ validate ( value , parentKeys ) ;
147147
148148 // we temporarily use a ParsedValue literal so that we get the same property lookup semantics
149149 const selected = ParsedValue . literal ( root ) . property ( value . split ( '.' ) ) ;
@@ -255,7 +255,7 @@ export function envVarDirective(
255255) : ParsingExtension {
256256 const envType = environmentOverride ?? currentEnvironment ( aliases , environmentSourceNames ) ;
257257
258- return forKey ( '$envVar' , ( value , key , ctx ) => async ( parse ) => {
258+ return forKey ( '$envVar' , ( value , parentKeys ) => async ( parse ) => {
259259 let name : string ;
260260 let parseInt = false ;
261261 let parseFloat = false ;
@@ -264,11 +264,11 @@ export function envVarDirective(
264264 if ( typeof value === 'string' ) {
265265 name = value ;
266266 } else {
267- validateObject ( value , [ ... ctx , key ] ) ;
267+ validateObject ( value , parentKeys ) ;
268268 if ( Array . isArray ( value ) ) throw new AppConfigError ( '$envVar was given an array' ) ;
269269
270270 const resolved = ( await parse ( value . name ) ) . toJSON ( ) ;
271- validateString ( resolved , [ ... ctx , key , [ InObject , 'name' ] ] ) ;
271+ validateString ( resolved , [ [ InObject , 'name' ] , ... parentKeys ] ) ;
272272
273273 parseInt = ! ! ( await parse ( value . parseInt ) ) . toJSON ( ) ;
274274 parseFloat = ! ! ( await parse ( value . parseFloat ) ) . toJSON ( ) ;
@@ -317,9 +317,9 @@ export function envVarDirective(
317317 const allowNull = ( await parse ( value . allowNull ) ) . toJSON ( ) ;
318318
319319 if ( allowNull ) {
320- validateStringOrNull ( fallback , [ ... ctx , key , [ InObject , 'fallback' ] ] ) ;
320+ validateStringOrNull ( fallback , [ [ InObject , 'fallback' ] , ... parentKeys ] ) ;
321321 } else {
322- validateString ( fallback , [ ... ctx , key , [ InObject , 'fallback' ] ] ) ;
322+ validateString ( fallback , [ [ InObject , 'fallback' ] , ... parentKeys ] ) ;
323323 }
324324
325325 return parse ( fallback , { shouldFlatten : true } ) ;
@@ -337,17 +337,17 @@ export function substituteDirective(
337337) : ParsingExtension {
338338 const envType = environmentOverride ?? currentEnvironment ( aliases , environmentSourceNames ) ;
339339
340- return forKey ( [ '$substitute' , '$subs' ] , ( value , key , ctx ) => async ( parse ) => {
340+ return forKey ( [ '$substitute' , '$subs' ] , ( value , parentKeys ) => async ( parse ) => {
341341 if ( typeof value === 'string' ) {
342342 return parse ( performAllSubstitutions ( value , envType ) , { shouldFlatten : true } ) ;
343343 }
344344
345- validateObject ( value , [ ... ctx , key ] ) ;
345+ validateObject ( value , parentKeys ) ;
346346 if ( Array . isArray ( value ) ) throw new AppConfigError ( '$substitute was given an array' ) ;
347347
348348 const name = ( await parse ( value . name ) ) . toJSON ( ) ;
349349
350- validateString ( name , [ ... ctx , key , [ InObject , 'name' ] ] ) ;
350+ validateString ( name , [ [ InObject , 'name' ] , ... parentKeys ] ) ;
351351
352352 let resolvedValue = process . env [ name ] ;
353353
@@ -396,9 +396,9 @@ export function substituteDirective(
396396 const allowNull = ( await parse ( value . allowNull ) ) . toJSON ( ) ;
397397
398398 if ( allowNull ) {
399- validateStringOrNull ( fallback , [ ... ctx , key , [ InObject , 'fallback' ] ] ) ;
399+ validateStringOrNull ( fallback , [ [ InObject , 'fallback' ] , ... parentKeys ] ) ;
400400 } else {
401- validateString ( fallback , [ ... ctx , key , [ InObject , 'fallback' ] ] ) ;
401+ validateString ( fallback , [ [ InObject , 'fallback' ] , ... parentKeys ] ) ;
402402 }
403403
404404 return parse ( fallback , { shouldFlatten : true } ) ;
0 commit comments