// ⭐ try to eval an `exprStr` (don't include any variables, literals only!)
// returns: result (object)
// • access `result.value` (any) if successful,
// • access `result.error` (Error object) otherwise.
function tryEval(exprStr) {
let result = {};
try { result.value = eval(exprStr); }
catch (err) { result.error = err; }
return result;
}
// ⭐ try to transform a value
// returns:
// • transformed result (object)
// (access result.value if successful, result.error otherwise)
function tryTransform(value, transform) {
let result = {};
try { result.value = transform(value); }
catch (err) { result.error = err; }
return result;
}
// ⭐ get the result of transforming a value
// returns:
// • transformed value (any)
// • error type name (string)
function getResult(x, transform) {
let result = tryTransform(x, transform);
return result.error ? result.error.name : result.value;
}
// export
module.exports = { tryTransform, getResult, tryEval };