Skip to content

Commit 25efb60

Browse files
committed
fix: parses fallback in $substitute
1 parent 7206794 commit 25efb60

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

app-config-extensions/src/index.ts

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

284-
const parseValue = (value: string) => {
284+
const parseValue = (strValue: string) => {
285285
if (parseInt) {
286-
const parsed = Number.parseInt(value, 10);
286+
const parsed = Number.parseInt(strValue, 10);
287287

288288
if (Number.isNaN(parsed)) {
289-
throw new AppConfigError(`Failed to parseInt(${value})`);
289+
throw new AppConfigError(`Failed to parseInt(${strValue})`);
290290
}
291291

292292
return parse(parsed, { shouldFlatten: true });
293293
}
294294

295295
if (parseFloat) {
296-
const parsed = Number.parseFloat(value);
296+
const parsed = Number.parseFloat(strValue);
297297

298298
if (Number.isNaN(parsed)) {
299-
throw new AppConfigError(`Failed to parseFloat(${value})`);
299+
throw new AppConfigError(`Failed to parseFloat(${strValue})`);
300300
}
301301

302302
return parse(parsed, { shouldFlatten: true });
303303
}
304304

305305
if (parseBool) {
306-
const parsed = value.toLowerCase() !== 'false' && value !== '0';
306+
const parsed = strValue.toLowerCase() !== 'false' && strValue !== '0';
307307

308308
return parse(parsed, { shouldFlatten: true });
309309
}
310310

311-
return parse(value, { shouldFlatten: true });
311+
return parse(strValue, { shouldFlatten: true });
312312
};
313313

314314
let resolvedValue = process.env[name];
@@ -358,20 +358,14 @@ export function substituteDirective(
358358

359359
validateString(name, [...ctx, key, [InObject, 'name']]);
360360

361-
let resolvedValue = process.env[name];
362-
363-
if (!resolvedValue && name === 'APP_CONFIG_ENV') {
364-
resolvedValue = envType;
365-
}
366-
367-
if (resolvedValue) {
361+
const parseValue = async (strValue: string) => {
368362
const parseInt = (await parse(selectDefined(value.parseInt, value.$parseInt))).toJSON();
369363

370364
if (parseInt) {
371-
const parsed = Number.parseInt(resolvedValue, 10);
365+
const parsed = Number.parseInt(strValue, 10);
372366

373367
if (Number.isNaN(parsed)) {
374-
throw new AppConfigError(`Failed to parseInt(${resolvedValue})`);
368+
throw new AppConfigError(`Failed to parseInt(${strValue})`);
375369
}
376370

377371
return parse(parsed, { shouldFlatten: true });
@@ -380,10 +374,10 @@ export function substituteDirective(
380374
const parseFloat = (await parse(selectDefined(value.parseFloat, value.$parseFloat))).toJSON();
381375

382376
if (parseFloat) {
383-
const parsed = Number.parseFloat(resolvedValue);
377+
const parsed = Number.parseFloat(strValue);
384378

385379
if (Number.isNaN(parsed)) {
386-
throw new AppConfigError(`Failed to parseFloat(${resolvedValue})`);
380+
throw new AppConfigError(`Failed to parseFloat(${strValue})`);
387381
}
388382

389383
return parse(parsed, { shouldFlatten: true });
@@ -392,12 +386,22 @@ export function substituteDirective(
392386
const parseBool = (await parse(selectDefined(value.parseBool, value.$parseBool))).toJSON();
393387

394388
if (parseBool) {
395-
const parsed = resolvedValue.toLowerCase() !== 'false' && resolvedValue !== '0';
389+
const parsed = strValue.toLowerCase() !== 'false' && strValue !== '0';
396390

397391
return parse(parsed, { shouldFlatten: true });
398392
}
399393

400-
return parse(resolvedValue, { shouldFlatten: true });
394+
return parse(strValue, { shouldFlatten: true });
395+
};
396+
397+
let resolvedValue = process.env[name];
398+
399+
if (!resolvedValue && name === 'APP_CONFIG_ENV') {
400+
resolvedValue = envType;
401+
}
402+
403+
if (resolvedValue) {
404+
return parseValue(resolvedValue);
401405
}
402406

403407
if (value.fallback !== undefined || value.$fallback !== undefined) {
@@ -410,7 +414,7 @@ export function substituteDirective(
410414
validateString(fallback, [...ctx, key, [InObject, 'fallback']]);
411415
}
412416

413-
return parse(fallback, { shouldFlatten: true });
417+
return parseValue(fallback);
414418
}
415419

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

0 commit comments

Comments
 (0)