UNPKG

@effectful/transducers-loose

Version:

@effectful/transducers built with faster generators

90 lines (88 loc) 2.36 kB
"use strict"; /** converts closure object to a function */ function func(clos) { return function () { return clos.apply(this, arguments); }; } /** converts first algument from closure object to a function */ function lift1(fun) { return function (cb) { if (!cb) return fun.apply(this, arguments); return fun.apply(this, [func(cb)].concat(Array.prototype.splice.call(arguments, 1))); }; } Array.prototype.forEach = function (fn, thisArgs) { var len = this.length, i; for (i = 0; i < len; ++i) fn.call(thisArgs, this[i], i, this); }; Array.prototype.filter = function filter(fn, thisArg) { var res = [], i, len = this.length, v; for (i = 0; i < len; ++i) { v = this[i]; if (fn.call(thisArg, v, i, this)) res.push(v); } return res; }; Array.prototype.findIndex = function findIndex(fn, thisArg) { var i, len = this.length; for (i = 0; i < len; ++i) { if (fn.call(thisArg, this[i], i, this)) return i; } return -1; }; Array.prototype.find = function find(fn, thisArg) { var i, len = this.length, v; for (i = 0; i < len; ++i) { v = this[i]; if (fn.call(thisArg, v, i, this)) return v; } }; Array.prototype.sort = lift1(Array.prototype.sort); Array.prototype.reduce = lift1(Array.prototype.reduce); Array.prototype.reduceRight = lift1(Array.prototype.reduceRight); Array.prototype.some = lift1(Array.prototype.some); Array.prototype.every = lift1(Array.prototype.every); Set.prototype.forEach = lift1(Set.prototype.forEach); Map.prototype.forEach = lift1(Set.prototype.forEach); function Bind(inner, args) { this.inner = inner; this.args = args; } closure(Bind, function bind() { var arr = []; arr.push.apply(arr, this.args); arr.push.apply(arr, arguments); return this.inner.apply(this.inner, arr); }); function bind() { return new Bind(this, arguments); } function apply(self, args) { var arr = [self]; arr.push.apply(arr, args); return this.call.apply(this, arr); } function constrImpl(func, args) { var arr = [this]; arr.push.apply(arr, args); func.call.apply(func, arr); } function constr() { return new constrImpl(this, arguments); } function closure(constructor, call) { var proto = constructor.prototype; proto.call = call; proto.length = call.length - 1; proto.bind = bind; proto.apply = apply; proto.constr = constr; }