-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
22 lines (21 loc) · 836 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module.exports = function(value, cases, options) {
options = options || {};
if (![true, false].includes(options.autoCall) ) { options.autoCall = true; }
if (![true, false].includes(options.autoThrow) ) { options.autoThrow = true; }
if (![true, false].includes(options.parseObjectTree) ) { options.parseObjectTree = false; }
let result;
if (cases[value]) {
result = cases[value];
} else if (cases.default_case && cases[cases.default_case] !== undefined) {
result = cases[cases.default_case];
} else if (cases.default !== undefined) {
result = cases.default;
}
if (options.autoCall && typeof result === 'function') {
return result()
} else if (options.autoThrow && result instanceof Error) {
throw result
} else {
return result
}
};