UNPKG

node-cond

Version:

lisp "cond" special form realization for js

42 lines (36 loc) 1.13 kB
var isFn = (some) => typeof some === "function", cond = function (...args) { return loopByArgs(args, false); }; cond.all = function (...args) { return loopByArgs(args, true); }; cond.doif = function (Then, Else) { return function (condition) { return cond( condition, returnValue(Then, condition), returnValue(Else, condition) ) } }; module.exports = cond; function loopByArgs(args, all) { var i = 0, argsLen = args.length, defaultValue = argsLen % 2 ? args.pop() : undefined, lastValue; for(; i < argsLen; i += 2) { let condition = args[i]; if(condition) { let returnedValue = args[i+1]; if(all) { lastValue = returnValue(returnedValue, condition) } else { return returnValue(returnedValue, condition); } } } return defaultValue ? returnValue(defaultValue) : lastValue; }; function returnValue(value, condition) { return isFn(value) ? value(condition) : value; };