diff --git a/src/lib/unit/caller.js b/src/lib/unit/caller.js new file mode 100644 index 0000000..a11d8cc --- /dev/null +++ b/src/lib/unit/caller.js @@ -0,0 +1,28 @@ +const { isPromise } = require('../../util'); + +const caller = (test, state) => { + + let value, error; + try { + value = test(state); + } catch (e) { + error = e; + } + + const promise = isPromise(value); + + if (promise) { + return value + .then(res => ({ resolve: res, promise: true })) + .catch(rej => ({ rejection: rej, promise: true })); + } else { + return Promise.resolve({ + ...(!error && {value}), + ...(error && {error}), + promise: false, + }); + } + +}; + +module.exports = caller;