panda-garden
Version:
Functional programming helpers for JavaScript.
345 lines (292 loc) • 20.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.memoize = exports.given = exports.rtee = exports.tee = exports.once = exports.negate = exports.apply = exports.flow = exports.wait = exports.spread = exports.pipe = exports.compose = exports.flip = exports.partial = exports.substitute = exports._ = exports.curry = exports.ternary = exports.binary = exports.unary = exports.arity = exports.wrap = exports.identity = exports.noOp = void 0;
var _,
apply,
arity,
binary,
compose,
curry,
flip,
flow,
given,
identity,
memoize,
negate,
noOp,
once,
partial,
pipe,
rtee,
spread,
substitute,
tee,
ternary,
unary,
wait,
wrap,
splice = [].splice;
exports.wrap = wrap;
exports.wait = wait;
exports.unary = unary;
exports.ternary = ternary;
exports.tee = tee;
exports.substitute = substitute;
exports.spread = spread;
exports.rtee = rtee;
exports.pipe = pipe;
exports.partial = partial;
exports.once = once;
exports.noOp = noOp;
exports.negate = negate;
exports.memoize = memoize;
exports.identity = identity;
exports.given = given;
exports.flow = flow;
exports.flip = flip;
exports.curry = curry;
exports.compose = compose;
exports.binary = binary;
exports.arity = arity;
exports.apply = apply;
exports._ = _;
exports.noOp = noOp = function () {};
exports.identity = identity = function (x) {
return x;
};
exports.wrap = wrap = function (x) {
return function () {
return x;
};
}; // Based on _arity from Rambda: https://github.com/ramda/ramda/blob/v0.26.1/source/internal/_arity.js
exports.arity = arity = function (N, f) {
switch (N) {
case 0:
return function () {
return f.apply(this, arguments);
};
case 1:
return function (a0) {
return f.apply(this, arguments);
};
case 2:
return function (a0, a1) {
return f.apply(this, arguments);
};
case 3:
return function (a0, a1, a2) {
return f.apply(this, arguments);
};
case 4:
return function (a0, a1, a2, a3) {
return f.apply(this, arguments);
};
case 5:
return function (a0, a1, a2, a3, a4) {
return f.apply(this, arguments);
};
case 6:
return function (a0, a1, a2, a3, a4, a5) {
return f.apply(this, arguments);
};
case 7:
return function (a0, a1, a2, a3, a4, a5, a6) {
return f.apply(this, arguments);
};
case 8:
return function (a0, a1, a2, a3, a4, a5, a6, a7) {
return f.apply(this, arguments);
};
case 9:
return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {
return f.apply(this, arguments);
};
case 10:
return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {
return f.apply(this, arguments);
};
default:
throw new Error("First argument to arity must be a non-negative integer no greater than ten");
}
};
exports.unary = unary = function (f) {
return arity(1, f);
};
exports.binary = binary = function (f) {
return arity(2, f);
};
exports.ternary = ternary = function (f) {
return arity(3, f);
};
exports.curry = curry = function (f) {
return arity(f.length, function (...ax) {
var length;
if (ax.length >= f.length) {
return f(...ax);
} else {
length = f.length - ax.length;
if (length === 1) {
return function (x) {
return f(...ax, x);
};
} else {
return curry(arity(length, function (...bx) {
return f(...ax, ...bx);
}));
}
}
});
};
exports._ = _ = {};
exports.substitute = substitute = curry(function (ax, bx) {
var a, i, j, len, results;
i = 0;
results = [];
for (j = 0, len = ax.length; j < len; j++) {
a = ax[j];
if (a === _) {
results.push(bx[i++]);
} else {
results.push(a);
}
}
return results;
});
exports.partial = partial = function (f, ...ax) {
return function (...bx) {
return f(...substitute(ax, bx));
};
};
exports.flip = flip = function (f) {
switch (f.length) {
case 1:
return f;
case 2:
return function (y, x) {
return f(x, y);
};
case 3:
return function (z, y, x) {
return f(x, y, z);
};
default:
return function (...ax) {
return f(...ax.reverse());
};
}
};
exports.compose = compose = function (...fx) {
var f, g, ref;
ref = fx, [...fx] = ref, [f] = splice.call(fx, -1);
if (fx.length === 0) {
return f;
} else {
g = compose(...fx);
return function (...ax) {
var fax, ref1;
if (((ref1 = fax = f(...ax)) != null ? ref1.then : void 0) != null) {
return fax.then(g);
} else {
return g(fax);
}
};
}
};
exports.pipe = pipe = flip(compose);
exports.spread = spread = function (f) {
return function (ax) {
return f(...ax);
};
};
exports.wait = wait = function (f) {
return function (x) {
if ((x != null ? x.then : void 0) != null) {
return x.then(function (a) {
return f(a);
});
} else {
return f(x);
}
};
};
exports.flow = flow = function (...fx) {
var ref;
if (fx.length === 0) {
return void 0;
} else if (fx.length === 1 && fx[0] == null) {
return void 0;
} else if (fx.length === 1 && ((ref = fx[0]) != null ? ref[Symbol.iterator] : void 0) != null) {
return flow(...fx[0]);
} else {
return function (...ax) {
var g, gx, j, len, result, start;
[start, ...gx] = fx;
result = start(...ax);
for (j = 0, len = gx.length; j < len; j++) {
g = gx[j];
result = wait(g)(result);
}
return result;
};
}
};
exports.apply = apply = function (f, ...args) {
return f(...args);
};
exports.negate = negate = function (f) {
return function () {
return !f(...arguments);
};
};
exports.given = given = function (...args) {
var f, ref;
ref = args, [...args] = ref, [f] = splice.call(args, -1);
return f(...args);
};
exports.tee = tee = function (f) {
return arity(Math.max(f.length, 1), function (a, ...bx) {
var k, ref;
if (((ref = k = f(a, ...bx)) != null ? ref.then : void 0) != null) {
return k.then(function () {
return a;
});
} else {
return a;
}
});
};
exports.rtee = rtee = function (f) {
return arity(Math.max(f.length, 1), function (...ax) {
var b, k, ref, ref1;
ref = ax, [...ax] = ref, [b] = splice.call(ax, -1);
if (((ref1 = k = f(...ax, b)) != null ? ref1.then : void 0) != null) {
return k.then(function () {
return b;
});
} else {
return b;
}
});
};
exports.once = once = function (f) {
return function (k) {
return function () {
if (k != null) {
return k;
} else {
return k = f();
}
};
}(void 0);
};
exports.memoize = memoize = function (f) {
return function (cache) {
return function (...args) {
return cache[args] != null ? cache[args] : cache[args] = f(...args);
};
}({});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZC9yZXBvcy9wYW5kYS1nYXJkZW4vc3JjL2luZGV4LmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQSxDQUFBO0FBQUEsSUFBQSxLQUFBO0FBQUEsSUFBQSxLQUFBO0FBQUEsSUFBQSxNQUFBO0FBQUEsSUFBQSxPQUFBO0FBQUEsSUFBQSxLQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxLQUFBO0FBQUEsSUFBQSxRQUFBO0FBQUEsSUFBQSxPQUFBO0FBQUEsSUFBQSxNQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxPQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxNQUFBO0FBQUEsSUFBQSxVQUFBO0FBQUEsSUFBQSxHQUFBO0FBQUEsSUFBQSxPQUFBO0FBQUEsSUFBQSxLQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQSxNQUFBLEdBQUEsR0FBQSxNQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxlQUFBLElBQUEsR0FBTyxZQUFBLENBQUEsQ0FBUDs7QUFFQSxtQkFBQSxRQUFBLEdBQVcsVUFBQSxDQUFBLEVBQUE7U0FBTyxDO0FBQVAsQ0FBWDs7QUFFQSxlQUFBLElBQUEsR0FBTyxVQUFBLENBQUEsRUFBQTtTQUFPLFlBQUE7V0FBRyxDO0FBQUgsRztBQUpkLENBSUEsQzs7O0FBR0EsZ0JBQUEsS0FBQSxHQUFTLFVBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQTtBQUNQLFVBQUEsQ0FBQTtBQUFBLFNBQUEsQ0FBQTthQUNlLFlBQUE7ZUFBRyxDQUFDLENBQUQsS0FBQSxDQUFBLElBQUEsRUFBQSxTQUFBLEM7QUFBSCxPOztBQURmLFNBQUEsQ0FBQTthQUVlLFVBQUEsRUFBQSxFQUFBO2VBQVEsQ0FBQyxDQUFELEtBQUEsQ0FBQSxJQUFBLEVBQUEsU0FBQSxDO0FB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ID0gKHgpIC0+IHhcblxud3JhcCA9ICh4KSAtPiAtPiB4XG5cbiMgQmFzZWQgb24gX2FyaXR5IGZyb20gUmFtYmRhOiBodHRwczovL2dpdGh1Yi5jb20vcmFtZGEvcmFtZGEvYmxvYi92MC4yNi4xL3NvdXJjZS9pbnRlcm5hbC9fYXJpdHkuanMgXG5hcml0eSAgPSAoTiwgZikgLT5cbiAgc3dpdGNoIE5cbiAgICB3aGVuIDAgdGhlbiAgLT4gZi5hcHBseSBALCBhcmd1bWVudHNcbiAgICB3aGVuIDEgdGhlbiAgKGEwKSAtPiBmLmFwcGx5IEAsIGFyZ3VtZW50c1xuICAgIHdoZW4gMiB0aGVuICAoYTAsIGExKSAgLT4gZi5hcHBseSBALCBhcmd1bWVudHNcbiAgICB3aGVuIDMgdGhlbiAgKGEwLCBhMSwgYTIpIC0+IGYuYXBwbHkgQCwgYXJndW1lbnRzXG4gICAgd2hlbiA0IHRoZW4gIChhMCwgYTEsIGEyLCBhMykgLT4gZi5hcHBseSBALCBhcmd1bWVudHNcbiAgICB3aGVuIDUgdGhlbiAgKGEwLCBhMSwgYTIsIGEzLCBhNCkgLT4gZi5hcHBseSBALCBhcmd1bWVudHNcbiAgICB3aGVuIDYgdGhlbiAgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpIC0+IGYuYXBwbHkgQCwgYXJndW1lbnRzXG4gICAgd2hlbiA3IHRoZW4gIChhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgLT4gZi5hcHBseSBALCBhcmd1bWVudHNcbiAgICB3aGVuIDggdGhlbiAgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgLT4gZi5hcHBseSBALCBhcmd1bWVudHNcbiAgICB3aGVuIDkgdGhlbiAgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpIC0+IGYuYXBwbHkgQCwgYXJndW1lbnRzXG4gICAgd2hlbiAxMFxuICAgICAgKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KSAtPiBmLmFwcGx5IEAsIGFyZ3VtZW50c1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvciBcIkZpcnN0IGFyZ3VtZW50IHRvIGFyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmVcbiAgICAgICAgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuXCJcblxuXG51bmFyeSA9IChmKSAtPiBhcml0eSAxLCBmXG5cbmJpbmFyeSA9IChmKSAtPiBhcml0eSAyLCBmXG5cbnRlcm5hcnkgPSAoZikgLT4gYXJpdHkgMywgZlxuXG5jdXJyeSA9IChmKSAtPlxuICBhcml0eSBmLmxlbmd0aCwgKGF4Li4uKSAtPlxuICAgIGlmIGF4Lmxlbmd0aCA+PSBmLmxlbmd0aFxuICAgICAgZiBheC4uLlxuICAgIGVsc2VcbiAgICAgIGxlbmd0aCA9IGYubGVuZ3RoIC0gYXgubGVuZ3RoXG4gICAgICBpZiBsZW5ndGggPT0gMVxuICAgICAgICAoeCkgLT4gZiBheC4uLiwgeFxuICAgICAgZWxzZVxuICAgICAgICBjdXJyeSBhcml0eSBsZW5ndGgsIChieC4uLikgLT4gZiBheC4uLiwgYnguLi5cblxuXyA9IHt9XG5cbnN1YnN0aXR1dGUgPSBjdXJyeSAoYXgsIGJ4KSAtPlxuICBpID0gMFxuICBmb3IgYSBpbiBheFxuICAgIGlmIGEgPT0gX1xuICAgICAgYnhbaSsrXVxuICAgIGVsc2VcbiAgICAgIGFcblxucGFydGlhbCA9IChmLCBheC4uLikgLT5cbiAgKGJ4Li4uKSAtPiBmIChzdWJzdGl0dXRlIGF4LCBieCkuLi5cblxuZmxpcCA9IChmKSAtPlxuICBzd2l0Y2ggZi5sZW5ndGhcbiAgICB3aGVuIDEgdGhlbiBmXG4gICAgd2hlbiAyIHRoZW4gKHksIHgpIC0+IGYoeCwgeSlcbiAgICB3aGVuIDMgdGhlbiAoeiwgeSwgeCkgLT4gZih4LCB5LCB6KVxuICAgIGVsc2UgKGF4Li4uKSAtPiBmKGF4LnJldmVyc2UoKS4uLilcblxuY29tcG9zZSA9IChmeC4uLiwgZikgLT5cbiAgaWYgZngubGVuZ3RoID09IDBcbiAgICBmXG4gIGVsc2VcbiAgICBnID0gY29tcG9zZSBmeC4uLlxuICAgIChheC4uLikgLT5cbiAgICAgIGlmIChmYXggPSBmIGF4Li4uKT8udGhlbj8gdGhlbiAoZmF4LnRoZW4gZykgZWxzZSAoZyBmYXgpXG5cbnBpcGUgPSBmbGlwIGNvbXBvc2Vcblxuc3ByZWFkID0gKGYpIC0+IChheCkgLT4gZiBheC4uLlxuXG53YWl0ID0gKGYpIC0+ICh4KSAtPiBpZiB4Py50aGVuPyB0aGVuICh4LnRoZW4gKGEpIC0+IGYgYSkgZWxzZSAoZiB4KVxuXG5mbG93ID0gKGZ4Li4uKSAtPlxuICBpZiBmeC5sZW5ndGggPT0gMFxuICAgIHVuZGVmaW5lZFxuICBlbHNlIGlmIGZ4Lmxlbmd0aCA9PSAxICYmICFmeFswXT9cbiAgICB1bmRlZmluZWRcbiAgZWxzZSBpZiBmeC5sZW5ndGggPT0gMSAmJiBmeFswXT9bU3ltYm9sLml0ZXJhdG9yXT9cbiAgICBmbG93IGZ4WzBdLi4uXG4gIGVsc2VcbiAgICAoYXguLi4pIC0+XG4gICAgICBbc3RhcnQsIGd4Li4uXSA9IGZ4XG4gICAgICByZXN1bHQgPSBzdGFydCBheC4uLlxuICAgICAgcmVzdWx0ID0gKHdhaXQgZykgcmVzdWx0IGZvciBnIGluIGd4XG4gICAgICByZXN1bHRcblxuYXBwbHkgPSAoZiwgYXJncy4uLikgLT4gKGYgYXJncy4uLilcblxubmVnYXRlID0gKGYpIC0+IC0+ICEoZiBhcmd1bWVudHMuLi4pXG5cbmdpdmVuID0gKGFyZ3MuLi4sIGYpIC0+IGYgYXJncy4uLlxuXG50ZWUgPSAoZikgLT5cbiAgYXJpdHkgKE1hdGgubWF4IGYubGVuZ3RoLCAxKSwgKGEsIGJ4Li4uKSAtPlxuICAgIGlmIChrID0gKGYgYSwgYnguLi4pKT8udGhlbj9cbiAgICAgIGsudGhlbiAtPiBhXG4gICAgZWxzZVxuICAgICAgYVxuXG5ydGVlID0gKGYpIC0+XG4gIGFyaXR5IChNYXRoLm1heCBmLmxlbmd0aCwgMSksIChheC4uLiwgYikgLT5cbiAgICBpZiAoayA9IChmIGF4Li4uLCBiKSk/LnRoZW4/XG4gICAgICBrLnRoZW4gLT4gYlxuICAgIGVsc2VcbiAgICAgIGJcblxub25jZSA9IChmKSAtPlxuICBkbyAoaz11bmRlZmluZWQpIC0+XG4gICAgLT4gaWYgaz8gdGhlbiBrIGVsc2UgKGsgPSBmKCkpXG5cbm1lbW9pemUgPSAoZikgLT5cbiAgZG8gKGNhY2hlPXt9KSAtPiAoYXJncy4uLikgLT4gY2FjaGVbYXJnc10gPz0gZiBhcmdzLi4uXG5cbmV4cG9ydCB7bm9PcCwgaWRlbnRpdHksIHdyYXAsXG4gIGFyaXR5LCB1bmFyeSwgYmluYXJ5LCB0ZXJuYXJ5LFxuICBjdXJyeSwgXywgc3Vic3RpdHV0ZSxcbiAgcGFydGlhbCwgZmxpcCwgY29tcG9zZSwgcGlwZSwgc3ByZWFkLCB3YWl0LCBmbG93LFxuICBhcHBseSwgbmVnYXRlLCBvbmNlLCB0ZWUsIHJ0ZWUsIGdpdmVuLCBtZW1vaXplfVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceURL=/Users/david/repos/panda-garden/src/index.coffee