Skip to content

Commit 0b9756f

Browse files
committed
feat(node-config-provider): add utility booleanSelector
1 parent 79bbc43 commit 0b9756f

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export enum SelectorType {
2+
ENV = "env",
3+
SHARED_CONFIG = "shared config entry",
4+
}
5+
6+
export const booleanSelector = (obj: Object, key: string, type: SelectorType) => {
7+
if (!Object.prototype.hasOwnProperty.call(obj, key)) return undefined;
8+
if (obj[key] === "true") return true;
9+
if (obj[key] === "false") return false;
10+
throw new Error(`Cannot load ${type} "${key}". Expected "true" or "false", got ${obj[key]}.`);
11+
};
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)