UNPKG

lodash-contrib

Version:

The brass buckles on lodash's utility belt

155 lines (126 loc) 2.82 kB
module.exports = function (_) { // Setup for variadic operators // ---------------------------- // Turn a binary math operator into a variadic operator function variadicMath(operator) { return function() { return _.reduce(arguments, operator); }; } // Turn a binary comparator into a variadic comparator function variadicComparator(comparator) { return function() { var result; for (var i = 0; i < arguments.length - 1; i++) { result = comparator(arguments[i], arguments[i + 1]); if (result === false) return result; } return result; }; } // Turn a boolean-returning function into one with the opposite meaning function invert(fn) { return function() { return !fn.apply(this, arguments); }; } // Basic math operators function add(x, y) { return x + y; } function sub(x, y) { return x - y; } function mul(x, y) { return x * y; } function div(x, y) { return x / y; } function mod(x, y) { return x % y; } function inc(x) { return ++x; } function dec(x) { return --x; } function neg(x) { return -x; } // Bitwise operators function bitwiseAnd(x, y) { return x & y; } function bitwiseOr(x, y) { return x | y; } function bitwiseXor(x, y) { return x ^ y; } function bitwiseLeft(x, y) { return x << y; } function bitwiseRight(x, y) { return x >> y; } function bitwiseZ(x, y) { return x >>> y; } function bitwiseNot(x) { return ~x; } // Basic comparators function eq(x, y) { return x == y; } function seq(x, y) { return x === y; } // Not function not(x) { return !x; } // Relative comparators function gt(x, y) { return x > y; } function lt(x, y) { return x < y; } function gte(x, y) { return x >= y; } function lte(x, y) { return x <= y; } // Mixing in the operator functions // ----------------------------- _.mixin({ addContrib: variadicMath(add), sub: variadicMath(sub), mul: variadicMath(mul), div: variadicMath(div), mod: mod, inc: inc, dec: dec, neg: neg, eqContrib: variadicComparator(eq), seq: variadicComparator(seq), neq: invert(variadicComparator(eq)), sneq: invert(variadicComparator(seq)), not: not, gtContrib: variadicComparator(gt), ltContrib: variadicComparator(lt), gteContrib: variadicComparator(gte), lteContrib: variadicComparator(lte), bitwiseAnd: variadicMath(bitwiseAnd), bitwiseOr: variadicMath(bitwiseOr), bitwiseXor: variadicMath(bitwiseXor), bitwiseNot: bitwiseNot, bitwiseLeft: variadicMath(bitwiseLeft), bitwiseRight: variadicMath(bitwiseRight), bitwiseZ: variadicMath(bitwiseZ) }); };