@@ -28,7 +28,7 @@ export class SystemVariableProvider implements HttpVariableProvider {
28
28
private readonly randomIntegerRegex : RegExp = new RegExp ( `\\${ Constants . RandomIntVariableName } \\s(\\-?\\d+)\\s(\\-?\\d+)` ) ;
29
29
private readonly processEnvRegex : RegExp = new RegExp ( `\\${ Constants . ProcessEnvVariableName } \\s(\\%)?(\\w+)` ) ;
30
30
31
- private readonly dotenvRegex : RegExp = new RegExp ( `\\${ Constants . DotenvVariableName } \\s([\\w-.]+)` ) ;
31
+ private readonly dotenvRegex : RegExp = new RegExp ( `\\${ Constants . DotenvVariableName } \\s(\\%)?( [\\w-.]+)` ) ;
32
32
33
33
private readonly requestUrlRegex : RegExp = / ^ (?: [ ^ \s ] + \s + ) ( [ ^ : ] * : \/ \/ \/ ? [ ^ / \s ] * \/ ? ) / ;
34
34
@@ -160,20 +160,6 @@ export class SystemVariableProvider implements HttpVariableProvider {
160
160
return { warning : ResolveWarningMessage . IncorrectRandomIntegerVariableFormat } ;
161
161
} ) ;
162
162
}
163
-
164
- private async resolveSettingsEnvironmentVariable ( name : string ) {
165
- if ( await this . innerSettingsEnvironmentVariableProvider . has ( name ) ) {
166
- const { value, error, warning } = await this . innerSettingsEnvironmentVariableProvider . get ( name ) ;
167
- if ( ! error && ! warning ) {
168
- return value ! . toString ( ) ;
169
- } else {
170
- return name ;
171
- }
172
- } else {
173
- return name ;
174
- }
175
- }
176
-
177
163
private registerProcessEnvVariable ( ) {
178
164
this . resolveFuncs . set ( Constants . ProcessEnvVariableName , async name => {
179
165
const groups = this . processEnvRegex . exec ( name ) ;
@@ -200,15 +186,19 @@ export class SystemVariableProvider implements HttpVariableProvider {
200
186
if ( ! await fs . pathExists ( absolutePath ) ) {
201
187
return { warning : ResolveWarningMessage . DotenvFileNotFound } ;
202
188
}
203
- const parsed = dotenv . parse ( fs . readFileSync ( absolutePath ) ) ;
204
189
const groups = this . dotenvRegex . exec ( name ) ;
205
- if ( groups !== null && groups . length === 2 ) {
206
- const [ , key ] = groups ;
207
- if ( ! ( key in parsed ) ) {
190
+ if ( groups !== null && groups . length === 3 ) {
191
+ const parsed = dotenv . parse ( await fs . readFile ( absolutePath ) ) ;
192
+ const [ , refToggle , key ] = groups ;
193
+ let dotEnvVarName = key ;
194
+ if ( refToggle !== undefined ) {
195
+ dotEnvVarName = await this . resolveSettingsEnvironmentVariable ( key ) ;
196
+ }
197
+ if ( ! ( dotEnvVarName in parsed ) ) {
208
198
return { warning : ResolveWarningMessage . DotenvVariableNotFound } ;
209
199
}
210
200
211
- return { value : parsed [ key ] } ;
201
+ return { value : parsed [ dotEnvVarName ] } ;
212
202
}
213
203
214
204
return { warning : ResolveWarningMessage . IncorrectDotenvVariableFormat } ;
@@ -285,6 +275,19 @@ export class SystemVariableProvider implements HttpVariableProvider {
285
275
} ) ;
286
276
}
287
277
278
+ private async resolveSettingsEnvironmentVariable ( name : string ) {
279
+ if ( await this . innerSettingsEnvironmentVariableProvider . has ( name ) ) {
280
+ const { value, error, warning } = await this . innerSettingsEnvironmentVariableProvider . get ( name ) ;
281
+ if ( ! error && ! warning ) {
282
+ return value ! . toString ( ) ;
283
+ } else {
284
+ return name ;
285
+ }
286
+ } else {
287
+ return name ;
288
+ }
289
+ }
290
+
288
291
// #region AAD
289
292
290
293
private getCloudProvider ( endpoint : string ) : { cloud : string , targetApp : string } {
0 commit comments