UNPKG

f-utility

Version:

functional utilities

644 lines (591 loc) 19.4 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var katsuCurry = require('katsu-curry'); var entrust = require('entrust'); var _flatMap = _interopDefault(require('flatmap-fast')); var version = "3.6.0"; var random = function (x) { if ( x === void 0 ) x = 1; return Math.round(Math.random() * x); }; var floor = function (x) { return Math.floor(Math.random() * x); }; var floorMin = katsuCurry.curry(function (min, x) { return floor(x) + min; }); var f = /*#__PURE__*/Object.freeze({ floor: floor, floorMin: floorMin }); var __iterate = function (total, fn) { var count = total; var agg = []; if (typeof fn !== "function" || typeof count !== "number") { return agg } while (count > 0) { count--; agg.push(fn()); } return agg }; var iterate = katsuCurry.curry(__iterate); var keys = Object.keys; var take = katsuCurry.curry(function (encase, o) { var obj; if (o && o[0] && o.length) { var found = floor(o.length); var selection = o[found]; return !encase ? selection : [selection] } var ks = keys(o); var index = floor(ks.length); var key = ks[index]; var value = o[key]; if (encase) { return ( obj = {}, obj[key] = value, obj ) } return value }); var pick = take(false); var grab = take(true); var allot = katsuCurry.curry(function (howMany, ofThing) { return iterate(howMany, function () { return pick(ofThing); }); } ); var t = /*#__PURE__*/Object.freeze({ take: take, pick: pick, grab: grab, allot: allot }); var bindInternal3 = function bindInternal3 (func, thisContext) { return function (a, b, c) { return func.call(thisContext, a, b, c); }; }; var filter = function fastFilter (subject, fn, thisContext) { var length = subject.length, result = [], iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, i; for (i = 0; i < length; i++) { if (iterator(subject[i], i, subject)) { result.push(subject[i]); } } return result; }; var filter$1 = function fastFilterObject (subject, fn, thisContext) { var keys = Object.keys(subject), length = keys.length, result = {}, iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, i, key; for (i = 0; i < length; i++) { key = keys[i]; if (iterator(subject[key], key, subject)) { result[key] = subject[key]; } } return result; }; var filter$2 = function fastFilter (subject, fn, thisContext) { if (subject instanceof Array) { return filter(subject, fn, thisContext); } else { return filter$1(subject, fn, thisContext); } }; var has = function (x, y) { return !!y[x]; }; var isArray = Array.isArray; var __willDelegate = function (method, functor) { return has(method, functor) && !isArray(functor); }; function __delegateFastBinary(method, fast, fn, functor) { return __willDelegate(method, functor) ? functor[method](fn) : fast(functor, fn) } var delegateFastBinary = katsuCurry.curry(__delegateFastBinary); function __delegateFastTertiary(method, fast, fn, initial, functor) { return __willDelegate(method, functor) ? functor[method](fn, initial) : fast(functor, fn, initial) } var delegateFastTertiary = katsuCurry.curry(__delegateFastTertiary); var filter$3 = delegateFastBinary("filter", filter$2); var join = entrust.e1("join"); var concat = katsuCurry.curry(function (a, b) { return a.concat(b); }); var __sort = function (fn, functor) { var copy = Array.from(functor); copy.sort(fn); return copy }; var sort = katsuCurry.curry(__sort); var __difference = function (bList, aList) { return filter$3(function (x) { return !aList.includes(x); }, bList); }; var difference = katsuCurry.curry(__difference); var __symmetricDifference = function (a, b) { var ab = difference(a, b); var ba = difference(b, a); return ab.concat(ba) }; var symmetricDifference = katsuCurry.curry(__symmetricDifference); var __relativeIndex = function (length, index) { return index > -1 ? index : length - Math.abs(index); }; var relativeIndex = katsuCurry.curry(__relativeIndex); var __alterIndex = function (index, fn, input) { var i = relativeIndex(input.length, index); var copy = [].concat(input); copy[i] = fn(copy[i]); return copy }; var alterIndex = katsuCurry.curry(__alterIndex); var alterFirstIndex = alterIndex(0); var alterLastIndex = alterIndex(-1); var alphabet = "abcdefghijklmnopqrstuvwxyz".split(""); var wordSource = katsuCurry.curry(function (source, howLong) { return katsuCurry.pipe( allot(howLong), join("") )(source); } ); var word = function (x) { if ( x === void 0 ) x = 5; return wordSource(alphabet, x); }; var w = /*#__PURE__*/Object.freeze({ wordSource: wordSource, word: word }); var shuffle = function (list) { var newList = [].concat( list ); var start = newList.length; while (start-- > 0) { var index = Math.floor(Math.random() * start + 1); var current = newList[index]; var newer = newList[start]; newList[index] = newer; newList[start] = current; } return newList }; var s = /*#__PURE__*/Object.freeze({ shuffle: shuffle }); var __choice = function (cnFn, b, a) { return (cnFn(a, b) ? a : b); }; var choice = katsuCurry.curry(__choice); var flip = function (fn) { return katsuCurry.curry(function (a, b) { return fn(b, a); }); }; var fork = entrust.e2("fork"); var map = function fastMap (subject, fn, thisContext) { var length = subject.length, result = new Array(length), iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, i; for (i = 0; i < length; i++) { result[i] = iterator(subject[i], i, subject); } return result; }; var map$1 = function fastMapObject (subject, fn, thisContext) { var keys = Object.keys(subject), length = keys.length, result = {}, iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, i, key; for (i = 0; i < length; i++) { key = keys[i]; result[key] = iterator(subject[key], key, subject); } return result; }; var map$2 = function fastMap (subject, fn, thisContext) { if (subject instanceof Array) { return map(subject, fn, thisContext); } else { return map$1(subject, fn, thisContext); } }; var __map = function (fn, functor) { if (functor && !Array.isArray(functor) && functor.map) { return functor.map(fn) } return map$2(functor, fn) }; var map$3 = katsuCurry.curry(__map); var __isTypeof = function (type, x) { return type === typeof x; }; var isTypeof = katsuCurry.curry(__isTypeof); var isBoolean = isTypeof("boolean"); var isNumber = isTypeof("number"); var isFunction = isTypeof("function"); var isString = isTypeof("string"); var isNil = function (x) { return x == null; }; var isObject = isTypeof("object"); var isArray$1 = Array.isArray; var isDistinctObject = function (x) { return !isNil(x) && isObject(x) && !isArray$1(x); }; var isPOJO = isDistinctObject; var bindInternal4 = function bindInternal4 (func, thisContext) { return function (a, b, c, d) { return func.call(thisContext, a, b, c, d); }; }; var reduce = function fastReduce (subject, fn, initialValue, thisContext) { var length = subject.length, iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn, i, result; if (initialValue === undefined) { i = 1; result = subject[0]; } else { i = 0; result = initialValue; } for (; i < length; i++) { result = iterator(result, subject[i], i, subject); } return result; }; var reduce$1 = function fastReduceObject (subject, fn, initialValue, thisContext) { var keys = Object.keys(subject), length = keys.length, iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn, i, key, result; if (initialValue === undefined) { i = 1; result = subject[keys[0]]; } else { i = 0; result = initialValue; } for (; i < length; i++) { key = keys[i]; result = iterator(result, subject[key], key, subject); } return result; }; var reduce$2 = function fastReduce (subject, fn, initialValue, thisContext) { if (subject instanceof Array) { return reduce(subject, fn, initialValue, thisContext); } else { return reduce$1(subject, fn, initialValue, thisContext); } }; var reduce$3 = delegateFastTertiary("reduce", reduce$2); var __ap = function (applicative, functor) { if (functor && functor.ap && isFunction(functor.ap)) { return functor.ap(applicative) } if (isFunction(functor)) { return function (x) { return applicative(x)(functor(x)); } } return reduce$3(function (agg, f) { return agg.concat(map$3(f, functor)); }, [], applicative) }; var ap = katsuCurry.curry(__ap); var fold = entrust.e2("fold"); var chain = delegateFastBinary("chain", _flatMap); var flatMap = chain; var __equals = function (a, b) { return a === b; }; var equals = katsuCurry.curry(__equals); var equal = equals; var __greaterThan = function (b, a) { return a > b; }; var greaterThan = katsuCurry.curry(__greaterThan); var __greaterThanOrEqualTo = function (b, a) { return a >= b; }; var greaterThanOrEqualTo = katsuCurry.curry(__greaterThanOrEqualTo); var __lessThan = function (b, a) { return a < b; }; var lessThan = katsuCurry.curry(__lessThan); var __lessThanOrEqualTo = function (b, a) { return a <= b; }; var lessThanOrEqualTo = katsuCurry.curry(__lessThanOrEqualTo); var round = Math.round; var __add = function (a, b) { return b + a; }; var add = katsuCurry.curry(__add); var __subtract = function (a, b) { return a - b; }; var subtract = katsuCurry.curry(__subtract); var __multiply = function (a, b) { return b * a; }; var multiply = katsuCurry.curry(__multiply); var __divide = function (a, b) { return a / b; }; var divide = katsuCurry.curry(__divide); var __pow = function (a, b) { return Math.pow(b, a); }; var pow = katsuCurry.curry(__pow); var not = function (x) { return !x; }; var invert = function (x) { return Object.keys(x).reduce(function (o, key) { var value = x[key]; o[value] = o[value] ? o[value].concat(key) : [key]; return o }, {}); }; var __reject = function (fn, o) { return filter$3(function (x) { return !fn(x); }, o); }; var reject = katsuCurry.curry(__reject); var trim = entrust.e0("trim"); var charAt = entrust.e1("charAt"); var codePointAt = entrust.e1("codePointAt"); var match = katsuCurry.curry(function (a, b) { var z = b.match(a); return z === null ? [] : z }); var repeat = katsuCurry.curry(function (x, n) { var output = new Array(n); for (var i = 0; i < n; i++) { output[i] = x; } return output }); var search = entrust.e1("search"); var split = entrust.e1("split"); var endsWithLength = entrust.e2("endsWith"); var __endsWith = function (x, i) { var last = i[i.length - 1]; return Array.isArray(x) ? last === x[0] : last === x }; var endsWith = katsuCurry.curry(__endsWith); var indexOfFromIndex = entrust.e2("indexOf"); var __indexOf = function (toSearch, x) { return indexOfFromIndex(toSearch, 0, x); }; var indexOf = katsuCurry.curry(__indexOf); var lastIndexOfFromIndex = entrust.e2("lastIndexOf"); var __lastIndexOf = function (toSearch, x) { return lastIndexOfFromIndex(toSearch, Infinity, x); }; var lastIndexOf = katsuCurry.curry(__lastIndexOf); var padEnd = entrust.e2("padEnd"); var padStart = entrust.e2("padStart"); var replace = entrust.e2("replace"); var startsWithFromPosition = entrust.e2("startsWith"); var __startsWith = function (x, i) { var first = i[0]; return Array.isArray(x) ? first === x[0] : first === x }; var startsWith = katsuCurry.curry(__startsWith); var substr = entrust.e2("substr"); var __ternary = function (cn, b, a) { return (cn ? a : b); }; var ternary = katsuCurry.curry(__ternary); var __triplet = function (cnFn, bFn, aFn, o) { return (cnFn(o) ? aFn(o) : bFn(o)); }; var triplet = katsuCurry.curry(__triplet); var __range = function (start, end) { var agg = []; var swap = start < end; var ref = swap ? [start, end] : [end + 1, start + 1]; var a = ref[0]; var b = ref[1]; for (var x = a; x < b; x++) { agg.push(x); } return swap ? agg : agg.reverse() }; var range = katsuCurry.curry(__range); var _keys = Object.keys; var _freeze = Object.freeze; var _assign = Object.assign; var keys$1 = _keys; var freeze = _freeze; var assign = _assign; var entries = function (o) { return katsuCurry.pipe( keys$1, map$3(function (k) { return [k, o[k]]; }) )(o); }; var toPairs = entries; var fromPairs = reduce$3(function (agg, ref) { var obj; var k = ref[0]; var v = ref[1]; return merge(agg, ( obj = {}, obj[k] = v, obj )); }, {}); var __pairwise = function (hoc, fn, o) { return katsuCurry.pipe( toPairs, hoc(fn) )(o); }; var pairwise = katsuCurry.curry(__pairwise); var __pairwiseObject = function (hoc, fn, o) { return katsuCurry.pipe( pairwise(hoc, fn), fromPairs )(o); }; var pairwiseObject = katsuCurry.curry(__pairwiseObject); var mapTuples = pairwiseObject(map$3); var mapTuple = mapTuples; var __mapKeys = function (fn, o) { return mapTuples(function (ref) { var k = ref[0]; var v = ref[1]; return [fn(k), v]; }, o); }; var mapKeys = katsuCurry.curry(__mapKeys); var __merge = function (a, b) { return assign({}, a, b); }; var merge = katsuCurry.curry(__merge); var __pathOr = function (def, lenses, input) { return reduce$3(function (focus, lens) { return focus[lens] || def; }, input, lenses); }; var pathOr = katsuCurry.curry(__pathOr); var __pathSatisfies = function (equiv, pathTo, input) { return katsuCurry.pipe( path(pathTo), equiv, Boolean )(input); }; var pathSatisfies = katsuCurry.curry(__pathSatisfies); var __propSatisfies = function (equiv, propTo, input) { return katsuCurry.pipe( prop(propTo), equiv, Boolean )(input); }; var propSatisfies = katsuCurry.curry(__propSatisfies); var path = pathOr(null); var __propOr = function (def, property, input) { return pathOr(def, [property], input); }; var propOr = katsuCurry.curry(__propOr); var prop = propOr(null); var __pathEq = function (lenses, equiv, input) { return pathSatisfies(equals(equiv), lenses, input); }; var pathEq = katsuCurry.curry(__pathEq); var __propIs = function (type, property, input) { return katsuCurry.pipe( prop(property), function (val) { return (val != null && val.constructor === type) || val instanceof type; }, Boolean )(input); }; var propIs = katsuCurry.curry(__propIs); var __propEq = function (property, equiv, input) { return pathSatisfies(equals(equiv), [property], input); }; var propEq = katsuCurry.curry(__propEq); var propLength = prop("length"); var objectLength = katsuCurry.pipe( keys$1, propLength ); var length = propLength; var anyLength = function (x) { return typeof x === "object" ? objectLength(x) : propLength(x); }; var some = 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 every = function fastEvery (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 false; } } return true; }; var keys$2 = Object.keys; var __which = function (compare, fn, o) { var arecomp = flip(compare); return triplet( Array.isArray, arecomp(fn), katsuCurry.pipe( keys$2, arecomp(function (key) { return fn(o[key], key); }) ), o ) }; var which = katsuCurry.curry(__which); var some$1 = which(some); var every$1 = which(every); 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 compose() { var arguments$1 = arguments; var length = arguments.length; var args = new Array(length); for (var i = length - 1; i > -1; --i) { args[i] = arguments$1[i]; } return innerpipe(args.reverse()) } var version$1 = version; var random$1 = Object.assign(random, f, t, w, s); exports.pipe = katsuCurry.pipe; exports.$ = katsuCurry.$; exports.PLACEHOLDER = katsuCurry.PLACEHOLDER; exports.curryify = katsuCurry.curryify; exports.curry = katsuCurry.curry; exports.curryObjectK = katsuCurry.curryObjectK; exports.curryObjectN = katsuCurry.curryObjectN; exports.curryObjectKN = katsuCurry.curryObjectKN; exports.remap = katsuCurry.remap; exports.remapArray = katsuCurry.remapArray; exports.K = katsuCurry.K; exports.I = katsuCurry.I; exports.compose = compose; exports.version = version$1; exports.random = random$1; exports.concat = concat; exports.join = join; exports.sort = sort; exports.symmetricDifference = symmetricDifference; exports.difference = difference; exports.alterIndex = alterIndex; exports.alterFirstIndex = alterFirstIndex; exports.alterLastIndex = alterLastIndex; exports.relativeIndex = relativeIndex; exports.choice = choice; exports.filter = filter$3; exports.flip = flip; exports.fork = fork; exports.iterate = iterate; exports.map = map$3; exports.ap = ap; exports.fold = fold; exports.chain = chain; exports.flatMap = flatMap; exports.equals = equals; exports.equal = equal; exports.round = round; exports.add = add; exports.subtract = subtract; exports.divide = divide; exports.multiply = multiply; exports.pow = pow; exports.invert = invert; exports.not = not; exports.reduce = reduce$3; exports.reject = reject; exports.charAt = charAt; exports.codePointAt = codePointAt; exports.endsWith = endsWith; exports.indexOf = indexOf; exports.lastIndexOf = lastIndexOf; exports.match = match; exports.padEnd = padEnd; exports.padStart = padStart; exports.repeat = repeat; exports.replace = replace; exports.search = search; exports.split = split; exports.startsWith = startsWith; exports.substr = substr; exports.trim = trim; exports.ternary = ternary; exports.triplet = triplet; exports.range = range; exports.keys = keys$1; exports.assign = assign; exports.freeze = freeze; exports.merge = merge; exports.entries = entries; exports.fromPairs = fromPairs; exports.toPairs = toPairs; exports.mapTuple = mapTuple; exports.mapTuples = mapTuples; exports.mapKeys = mapKeys; exports.pairwise = pairwise; exports.pairwiseObject = pairwiseObject; exports.path = path; exports.pathOr = pathOr; exports.pathEq = pathEq; exports.pathSatisfies = pathSatisfies; exports.prop = prop; exports.propOr = propOr; exports.propIs = propIs; exports.propEq = propEq; exports.propSatisfies = propSatisfies; exports.isTypeof = isTypeof; exports.isBoolean = isBoolean; exports.isNumber = isNumber; exports.isFunction = isFunction; exports.isString = isString; exports.isObject = isObject; exports.isNil = isNil; exports.isArray = isArray$1; exports.isDistinctObject = isDistinctObject; exports.isPOJO = isPOJO; exports.length = length; exports.objectLength = objectLength; exports.anyLength = anyLength; exports.which = which; exports.some = some$1; exports.every = every$1;