UNPKG

entrust

Version:

delegatee-last structure for curried functions

651 lines (629 loc) 18.5 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.entrustDebug = {}))); }(this, (function (exports) { 'use strict'; function unwrapExports (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x.default : x; } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var debug = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, '__esModule', { value: true }); var PLACEHOLDER = "🍛"; 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 delegatee = curry(function (method, arg, x) { return (x[method](arg)); }); var filter = delegatee("filter"); 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$1() { 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 composedToString = function (args, name) { if ( args === void 0 ) { args = []; } if ( name === void 0 ) { name = "pipe"; } var stringifyFunctions = function (x) { return ( x && x.toString && typeof x.toString === "function" ? x.toString() : "fn" ); }; var names = args.map(stringifyFunctions); return function () { return ( (name + "(" + (names.join(", ")) + ")") ); } }; var slice = Array.prototype.slice; var aintFunction = function (x) { return typeof x !== "function"; }; var prepipe = function (a, name) { if ( name === void 0 ) { name = "pipe"; } var args = slice.call(a); if (args.filter(aintFunction).length > 0) { throw new Error( (name + " expected all arguments to be functions.") ) } return args }; function pipe() { var args = prepipe(arguments); var piped = innerpipe(args); piped.toString = composedToString(args); return piped } function compose() { var args = prepipe(arguments, "compose").reverse(); var composed = innerpipe(args); composed.toString = composedToString(args, "compose"); return composed } 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$1(keys, propLength); var length = function (x) { return (typeof x === "object" ? objectLength(x) : propLength(x)); }; var flipIncludes = curry(function (list, x) { return list.includes(x); }); var matchingKeys = curry( function (list, o) { return filter( flipIncludes(list), keys(o) ); } ); var matchingKeyCount = curry( function (list, o) { return pipe$1( matchingKeys(list), length )(o); } ); var expectKArgs = function (expected, args) { return ( matchingKeyCount(expected, args) >= Object.keys(expected).length ); }; var join = curry(function (y, x) { return x.join(y); }); var repeat = curry(function (y, x) { return x.repeat(y); }); var split = curry(function (y, x) { return x.split(y); }); var map = curry(function (y, x) { return x.map(y); }); var add = curry(function (y, x) { return x + y; }); var subtract = curry(function (y, x) { return x - y; }); var safeJoin = curry( function (joiner, x) { return ( x.length > 0 ? joiner(x) : "" ); } ); var wrap = curry( function (x, str) { return ( ("" + (x[0]) + str + (x[1])) ); } ); var parenthesize = wrap("()"); var curlies = wrap("{}"); var commas = join(","); var toStringJoiner = safeJoin( pipe$1( commas, parenthesize ) ); var toObjectStringJoiner = pipe$1( safeJoin(pipe$1( commas, curlies, parenthesize )) ); var makeRemainder = curry(function (str, length) { return ( length > 0 ? pipe$1( repeat(length), split(""), commas, parenthesize )(str) : "" ); }); var fillArray = function (x) { var list = []; while (x > 0) { list.push(--x); } return list.reverse() }; var question = function (x) { return ( pipe$1( join(":?,"), add(x.length > 0 ? ":?" : "") )(x) ); }; var without = curry( function (x, y) { return y.filter(function (z) { return !(x.indexOf(z) > -1); }) } ); var keysWhenKeyNumOrRaw = function (x) { return (x && x.k && x.n ? x.k : x); }; var makeObjectRemainder = function (objectKeys, argKeys) { if ( objectKeys === void 0 ) { objectKeys = []; } if ( argKeys === void 0 ) { argKeys = []; } return pipe$1( keysWhenKeyNumOrRaw, without(argKeys), question, curlies, parenthesize )(objectKeys); }; var LAMDA_REMAINDER = "?"; var toString = function (fn, args) { if ( args === void 0 ) { args = []; } return function () { var argString = toStringJoiner(args); var remainder = makeRemainder( LAMDA_REMAINDER, fn.length - args.length ); var name = fn && fn.name || "fn"; return ("curry(" + name + ")" + argString + remainder) }; }; var counter = function (x) { return function () { return x++; }; }; var makeNumberObjectRemainder = function (number, keys) { var keyLength = keys.length; return pipe$1( subtract(keyLength), fillArray, map(add(keyLength)), question, curlies, parenthesize )(number) }; var makeObjectStringSignature = function (name, obj, keys) { var argString = toObjectStringJoiner(keys); var remainder = makeObjectRemainder(obj, keys); return ("" + name + argString + remainder) }; var makeNumberStringSignature = function (name, number, keys) { var remainder = makeNumberObjectRemainder(number, keys); return pipe$1( map(counter(0)), toObjectStringJoiner, wrap([name, remainder]) )(keys) }; var toObjectString = function (fn, curryCondition, args) { if ( curryCondition === void 0 ) { curryCondition = []; } if ( args === void 0 ) { args = {}; } return function () { var argKeys = Object.keys(args); var conditionType = typeof curryCondition; var name = "curry(" + (fn && fn.name || "fn") + ")"; if (conditionType === "number") { return makeNumberStringSignature(name, curryCondition, argKeys) } return makeObjectStringSignature(name, curryCondition, argKeys) }; }; var merge = curry(function (x, y) { return Object.assign({}, x, y); }); var barfWhen = function (dis) { var o = Object.freeze({ keysAreNotAnArray: function (k) { if (!Array.isArray(k)) { throw new TypeError((dis + " expected an array of wanted keys.")) } return o }, arityIsNotANumber: function (n) { if (typeof n !== "number" || isNaN(n)) { throw new TypeError((dis + " expected to be given a number for arity.")) } return o }, noFunctionIsGiven: function (fn) { if (typeof fn !== "function") { throw new TypeError((dis + " expected to be given a function to curry.")) } return o } }); return o }; function curryObjectKN(ref, fn) { var k = ref.k; var n = ref.n; barfWhen("curryObjectKN") .keysAreNotAnArray(k) .arityIsNotANumber(n) .noFunctionIsGiven(fn); function λcurryObjectKN(args) { var joined = function (z) { return λcurryObjectKN(merge(args, z)); }; joined.toString = toObjectString(fn, k, args); return ( expectKArgs(k, args) || length(args) >= n ? fn(args) : joined ) } λcurryObjectKN.toString = toObjectString(fn, k); return λcurryObjectKN } var curryObjectK = curry( function (keys, fn) { barfWhen("curryObjectK") .keysAreNotAnArray(keys) .noFunctionIsGiven(fn); function λcurryObjectK(args) { var joined = function (z) { return λcurryObjectK(merge(args, z)); }; joined.toString = toObjectString(fn, keys, args); return ( expectKArgs(keys, args) ? fn(args) : joined ) } λcurryObjectK.toString = toObjectString(fn, keys); return λcurryObjectK } ); function curryObjectN(arity, fn) { barfWhen("curryObjectN") .arityIsNotANumber(arity) .noFunctionIsGiven(fn); function λcurryObjectN(args) { var joined = function (z) { return λcurryObjectN(merge(args, z)); }; joined.toString = toObjectString(fn, arity, args); return ( Object.keys(args).length >= arity ? fn(args) : joined ) } λcurryObjectN.toString = toObjectString(fn, arity); return λcurryObjectN } var remapParameters = function (indices, arr) { var copy = Array.from(arr); if (!copy.length) { return copy } return copy.map( function (x, index) { if (indices.includes(index)) { return copy[indices[index]] } return x } ) }; var curryify = function (test) { return function (fn) { if (typeof fn !== "function") { throw new TypeError("Expected to be given a function to curry!") } function curried() { var args = Array.from(arguments); 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 args2 = Array.from(arguments); return curried.apply(this, args.map( function (y) { return ( test(y) && args2[0] ? args2.shift() : y ); } ).concat(args2)) } saucy.toString = toString(fn, args); return ( length >= fn.length ? fn.apply(this, args) : saucy ) } curried.toString = toString(fn); return curried }; }; var curry$1 = curryify(function (x) { return x === PLACEHOLDER; }); var remapArray = curry$1(remapParameters); var remap = curry$1(function (indices, fn) { var remapArgs = remapArray(indices); var curried = curry$1(fn); return function remappedFn() { var args = remapArgs(Array.from(arguments)); return curried.apply(null, args) } }); var K = function (x) { return function () { return x; }; }; var I = function (x) { return x; }; var version = "debug"; exports.version = version; exports.pipe = pipe; exports.compose = compose; exports.curryObjectK = curryObjectK; exports.curryObjectN = curryObjectN; exports.curryObjectKN = curryObjectKN; exports.curry = curry$1; exports.curryify = curryify; exports.remap = remap; exports.remapArray = remapArray; exports.$ = $; exports.PLACEHOLDER = PLACEHOLDER; exports.K = K; exports.I = I; }); unwrapExports(debug); var debug_1 = debug.version; var debug_2 = debug.pipe; var debug_3 = debug.compose; var debug_4 = debug.curryObjectK; var debug_5 = debug.curryObjectN; var debug_6 = debug.curryObjectKN; var debug_7 = debug.curry; var debug_8 = debug.curryify; var debug_9 = debug.remap; var debug_10 = debug.remapArray; var debug_11 = debug.$; var debug_12 = debug.PLACEHOLDER; var debug_13 = debug.K; var debug_14 = debug.I; 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) }; 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 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); }, {}) }; var debug$2 = custom(debug_7); var _e0 = debug$2.e0; var _e1 = debug$2.e1; var _e2 = debug$2.e2; var _e3 = debug$2.e3; var _e4 = debug$2.e4; var _e5 = debug$2.e5; var _e6 = debug$2.e6; var _e7 = debug$2.e7; var _e8 = debug$2.e8; var _e9 = debug$2.e9; var _e10 = debug$2.e10; var _eD = debug$2.eD; var _eN = debug$2.eN; var e0$1 = _e0; var e1$1 = _e1; var e2$1 = _e2; var e3$1 = _e3; var e4$1 = _e4; var e5$1 = _e5; var e6$1 = _e6; var e7$1 = _e7; var e8$1 = _e8; var e9$1 = _e9; var e10$1 = _e10; var eN$1 = _eN; var eD$1 = _eD; exports.e0 = e0$1; exports.e1 = e1$1; exports.e2 = e2$1; exports.e3 = e3$1; exports.e4 = e4$1; exports.e5 = e5$1; exports.e6 = e6$1; exports.e7 = e7$1; exports.e8 = e8$1; exports.e9 = e9$1; exports.e10 = e10$1; exports.eN = eN$1; exports.eD = eD$1; Object.defineProperty(exports, '__esModule', { value: true }); })));