Skip to content

Commit 7206794

Browse files
committed
fix: parses 'fallback' in $envVar
1 parent 978571a commit 7206794

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

app-config-extensions/src/index.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,6 +1495,14 @@ describe('$envVar directive', () => {
14951495

14961496
expect(parsed.toJSON()).toEqual({ foo: 'qa' });
14971497
});
1498+
1499+
it('parses boolean from fallback', async () => {
1500+
const source = new LiteralSource({
1501+
$envVar: { name: 'FOO', parseBool: true, fallback: 'true' },
1502+
});
1503+
1504+
expect(await source.readToJSON([envVarDirective()])).toEqual(true);
1505+
});
14981506
});
14991507

15001508
describe('$timestamp directive', () => {

app-config-extensions/src/index.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -281,40 +281,44 @@ export function envVarDirective(
281281
name = resolved;
282282
}
283283

284-
let resolvedValue = process.env[name];
285-
286-
if (!resolvedValue && name === 'APP_CONFIG_ENV') {
287-
resolvedValue = envType;
288-
}
289-
290-
if (resolvedValue) {
284+
const parseValue = (value: string) => {
291285
if (parseInt) {
292-
const parsed = Number.parseInt(resolvedValue, 10);
286+
const parsed = Number.parseInt(value, 10);
293287

294288
if (Number.isNaN(parsed)) {
295-
throw new AppConfigError(`Failed to parseInt(${resolvedValue})`);
289+
throw new AppConfigError(`Failed to parseInt(${value})`);
296290
}
297291

298292
return parse(parsed, { shouldFlatten: true });
299293
}
300294

301295
if (parseFloat) {
302-
const parsed = Number.parseFloat(resolvedValue);
296+
const parsed = Number.parseFloat(value);
303297

304298
if (Number.isNaN(parsed)) {
305-
throw new AppConfigError(`Failed to parseFloat(${resolvedValue})`);
299+
throw new AppConfigError(`Failed to parseFloat(${value})`);
306300
}
307301

308302
return parse(parsed, { shouldFlatten: true });
309303
}
310304

311305
if (parseBool) {
312-
const parsed = resolvedValue.toLowerCase() !== 'false' && resolvedValue !== '0';
306+
const parsed = value.toLowerCase() !== 'false' && value !== '0';
313307

314308
return parse(parsed, { shouldFlatten: true });
315309
}
316310

317-
return parse(resolvedValue, { shouldFlatten: true });
311+
return parse(value, { shouldFlatten: true });
312+
};
313+
314+
let resolvedValue = process.env[name];
315+
316+
if (!resolvedValue && name === 'APP_CONFIG_ENV') {
317+
resolvedValue = envType;
318+
}
319+
320+
if (resolvedValue) {
321+
return parseValue(resolvedValue);
318322
}
319323

320324
if (typeof value === 'object' && value.fallback !== undefined) {
@@ -327,7 +331,7 @@ export function envVarDirective(
327331
validateString(fallback, [...ctx, key, [InObject, 'fallback']]);
328332
}
329333

330-
return parse(fallback, { shouldFlatten: true });
334+
return parseValue(fallback);
331335
}
332336

333337
throw new AppConfigError(`$envVar could not find ${name} environment variable`);

0 commit comments

Comments
 (0)