Add oneOf env helper for union values

This commit is contained in:
Andrew Luca 2023-03-02 11:57:59 +02:00
parent 78a155b972
commit 73f6631a92
2 changed files with 43 additions and 0 deletions

View File

@ -144,4 +144,27 @@ describe('Env helper', () => {
expect(envHelper.date('DATE_VAR')).toEqual(new Date(2010, 1, 21, 12, 34, 12));
});
});
describe('env with union cast', () => {
test('Throws if expectedValues is not provided', () => {
expect(() => envHelper.oneOf('NO_VAR')).toThrow();
});
test('Throws if defaultValue not included in expectedValues', () => {
expect(() => envHelper.oneOf('NO_VAR', ['lorem', 'ipsum'], 'test')).toThrow();
});
test('Return undefined if value is missing in expectedValues and no defaultValue', () => {
expect(envHelper.oneOf('NO_VAR', ['lorem', 'ipsum'])).toBeUndefined();
});
test('Return defaultValue if value does not exist in expectedValues', () => {
expect(envHelper.oneOf('NO_VAR', ['lorem', 'ipsum'], 'ipsum')).toBe('ipsum');
});
test('Return defaultValue if value exists and is missing in expectedValues', () => {
process.env.WITH_VAR = 'test';
expect(envHelper.oneOf('WITH_VAR', ['lorem', 'ipsum'], 'ipsum')).toBe('ipsum');
});
});
});

View File

@ -71,6 +71,26 @@ const utils = {
const value = process.env[key];
return new Date(value);
},
/**
* Gets a value from env that matches oneOf provided values
* @param {string} key
* @param {string[]} expectedValues
* @param {string|undefined} defaultValue
* @returns {string|undefined}
*/
oneOf(key, expectedValues, defaultValue) {
if (!expectedValues) {
throw new Error(`env.oneOf requires expectedValues`);
}
if (defaultValue && !expectedValues.includes(defaultValue)) {
throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);
}
const rawValue = env(key, defaultValue);
return expectedValues.includes(rawValue) ? rawValue : defaultValue;
},
};
Object.assign(env, utils);