UNPKG

entrust

Version:

delegatee-last structure for curried functions

184 lines (166 loc) 5.42 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.entrust = {}))); }(this, (function (exports) { 'use strict'; var PLACEHOLDER = "🍛"; var bindInternal3 = function bindInternal3 (func, thisContext) { return function (a, b, c) { return func.call(thisContext, a, b, c); }; }; var some$1 = function fastSome (subject, fn, thisContext) { var length = subject.length, iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, i; for (i = 0; i < length; i++) { if (iterator(subject[i], i, subject)) { return true; } } return false; }; var curry = function (fn) { var test = function (x) { return x === PLACEHOLDER; }; return function curried() { var arguments$1 = arguments; var argLength = arguments.length; var args = new Array(argLength); for (var i = 0; i < argLength; ++i) { args[i] = arguments$1[i]; } var countNonPlaceholders = function (toCount) { var count = toCount.length; while (!test(toCount[count])) { count--; } return count }; var length = ( some$1(args, test) ? countNonPlaceholders(args) : args.length ); function saucy() { var arguments$1 = arguments; var arg2Length = arguments.length; var args2 = new Array(arg2Length); for (var j = 0; j < arg2Length; ++j) { args2[j] = arguments$1[j]; } return curried.apply(this, args.map( function (y) { return ( test(y) && args2[0] ? args2.shift() : y ); } ).concat(args2)) } return ( length >= fn.length ? fn.apply(this, args) : saucy ) } }; var innerpipe = function (args) { return function (x) { var first = args[0]; var rest = args.slice(1); var current = first(x); for (var a = 0; a < rest.length; a++) { current = rest[a](current); } return current }; }; function pipe() { var arguments$1 = arguments; var argLength = arguments.length; var args = new Array(argLength); for (var i = 0; i < argLength; ++i) { args[i] = arguments$1[i]; } return innerpipe(args) } var prop = curry(function (property, o) { return o && property && o[property]; }); var _keys = Object.keys; var keys = _keys; var propLength = prop("length"); var objectLength = pipe(keys, propLength); var delegatee = curry(function (method, arg, x) { return (x[method](arg)); }); var filter = delegatee("filter"); var entrust0 = function (fn, x) { return x[fn](); }; var e0 = curry(entrust0); var entrust1 = function (fn, a, x) { return x[fn](a); }; var e1 = curry(entrust1); var entrust2 = function (fn, a, b, x) { return x[fn](a, b); }; var e2 = curry(entrust2); var entrust3 = function (fn, a, b, c, x) { return x[fn](a, b, c); }; var e3 = curry(entrust3); var entrust4 = function (fn, a, b, c, d, x) { return x[fn](a, b, c, d); }; var e4 = curry(entrust4); var entrust5 = function (fn, a, b, c, d, e, x) { return x[fn](a, b, c, d, e); }; var e5 = curry(entrust5); var entrust6 = function (fn, a, b, c, d, e, f, x) { return x[fn](a, b, c, d, e, f); }; var e6 = curry(entrust6); var entrust7 = function (fn, a, b, c, d, e, f, g, x) { return x[fn](a, b, c, d, e, f, g); }; var e7 = curry(entrust7); var entrust8 = function (fn, a, b, c, d, e, f, g, h, x) { return x[fn](a, b, c, d, e, f, g, h); }; var e8 = curry(entrust8); var entrust9 = function (fn, a, b, c, d, e, f, g, h, i, x) { return x[fn](a, b, c, d, e, f, g, h, i); }; var e9 = curry(entrust9); var entrust10 = function (fn, a, b, c, d, e, f, g, h, i, j, x) { return x[fn]( a, b, c, d, e, f, g, h, i, j ); }; var e10 = curry(entrust10); var entrustN = function (n, method, args, delegatee) { var entrustees = [e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10]; var params = [method ].concat( args, [delegatee]); return entrustees[n].apply(null, params) }; var eN = curry(entrustN); function entrustD(n, m, a, d) { if (n !== a.length) { throw new Error((m + " expects total args (" + (a.length) + ") to equal the given arity (" + n + ")")) } return entrustN(n, m, a, d) } var eD = curry( entrustD ); var custom = function (curry) { var raw = { e0: entrust0, e1: entrust1, e2: entrust2, e3: entrust3, e4: entrust4, e5: entrust5, e6: entrust6, e7: entrust7, e8: entrust8, e9: entrust9, e10: entrust10, eD: entrustD, eN: entrustN }; return Object.keys(raw).map(function (k) { var obj; return (( obj = {}, obj[k] = curry(raw[k]), obj )); }).reduce(function (x, y) { return Object.assign({}, x, y); }, {}) }; exports.e0 = e0; exports.e1 = e1; exports.e2 = e2; exports.e3 = e3; exports.e4 = e4; exports.e5 = e5; exports.e6 = e6; exports.e7 = e7; exports.e8 = e8; exports.e9 = e9; exports.e10 = e10; exports.eN = eN; exports.eD = eD; exports.custom = custom; Object.defineProperty(exports, '__esModule', { value: true }); })));