Skip to content

Commit 538d717

Browse files
authored
feat(node-config-provider): add utility booleanSelector (#2941)
1 parent 1602368 commit 538d717

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { booleanSelector, SelectorType } from "./booleanSelector";
2+
3+
describe(booleanSelector.name, () => {
4+
const key = "key";
5+
const obj: { [key]: any } = {} as any;
6+
7+
describe.each(Object.entries(SelectorType))(`Selector %s`, (selectorKey, selectorValue) => {
8+
beforeEach(() => {
9+
delete obj[key];
10+
});
11+
12+
it(`should return undefined if ${key} is not defined`, () => {
13+
expect(booleanSelector(obj, key, SelectorType[selectorKey])).toBeUndefined();
14+
});
15+
16+
it.each([
17+
[true, "true"],
18+
[false, "false"],
19+
])(`should return boolean %s if ${key}="%s"`, (output, input) => {
20+
obj[key] = input;
21+
expect(booleanSelector(obj, key, SelectorType[selectorKey])).toBe(output);
22+
});
23+
24+
it.each(["0", "1", "yes", "no", undefined, null, void 0, ""])(`should throw if ${key}=%s`, (input) => {
25+
obj[key] = input;
26+
expect(() => booleanSelector(obj, key, SelectorType[selectorKey])).toThrow(
27+
`Cannot load ${selectorValue} "${key}". Expected "true" or "false", got ${obj[key]}.`
28+
);
29+
});
30+
});
31+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export enum SelectorType {
2+
ENV = "env",
3+
CONFIG = "shared config entry",
4+
}
5+
6+
/**
7+
* Returns boolean value true/false for string value "true"/"false",
8+
* if the string is defined in obj[key]
9+
* Returns undefined, if obj[key] is not defined.
10+
* Throws error for all other cases.
11+
*
12+
* @internal
13+
*/
14+
export const booleanSelector = (obj: { [key: string]: string }, key: string, type: SelectorType) => {
15+
if (!(key in obj)) return undefined;
16+
if (obj[key] === "true") return true;
17+
if (obj[key] === "false") return false;
18+
throw new Error(`Cannot load ${type} "${key}". Expected "true" or "false", got ${obj[key]}.`);
19+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
export * from "./booleanSelector";
12
export * from "./configLoader";

0 commit comments

Comments
 (0)