hu
Version:
Functional utility helper library
172 lines • 6.01 kB
JavaScript
{
var _ns_ = {
id: 'hu.lib.macros',
doc: void 0
};
var hu_lib_function = require('./function');
var curry = hu_lib_function.curry;
var compose = hu_lib_function.compose;
var hu_lib_type = require('./type');
var isString = hu_lib_type.isString;
var isArray = hu_lib_type.isArray;
var isNumber = hu_lib_type.isNumber;
var isUndef = hu_lib_type.isUndef;
var isObject = hu_lib_type.isObject;
}
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
{
var _ns_ = {
id: 'hu.lib.function',
doc: void 0
};
}
var bindFn = Function.prototype.bind;
var constant = exports.constant = function constant(x) {
return function () {
return x;
};
};
var identify = exports.identify = constant;
var lazy = exports.lazy = function lazy(lambda, defaultResult) {
return function (task) {
var args = Array.prototype.slice.call(arguments, 1);
return function () {
var resultø1 = task.apply(void 0, args);
return resultø1 ? lambda.apply(void 0, args.concat([resultø1])) : lambda.apply(void 0, args.concat([defaultResult]));
}.call(this);
};
};
var apply = exports.apply = function apply(lambda, args) {
return lambda.apply(lambda, args);
};
var bind = exports.bind = function bind(lambda, ctx) {
return bindFn.call(lambda, ctx);
};
var partial = exports.partial = function partial(lambda) {
var args = Array.prototype.slice.call(arguments, 1);
return function () {
var pargs = Array.prototype.slice.call(arguments, 0);
return lambda.apply(void 0, args.concat(pargs));
};
};
var currier = function currier(lambda, arity, params) {
return function curried() {
var args = Array.prototype.slice.call(arguments, 0);
return function () {
var runø1 = Infinity === arity && args.length === 0;
params ? args.unshift.apply(args, params) : void 0;
return args.length >= arity || runø1 ? lambda.apply(void 0, args) : currier(lambda, arity, args);
}.call(this);
};
};
var curry = exports.curry = function curry(lambda) {
var args = Array.prototype.slice.call(arguments, 1);
return function () {
var iargsø1 = lambda.length;
var cargsø1 = args.length;
var arityø1 = cargsø1 ? iargsø1 - cargsø1 : void 0;
return currier(lambda, arityø1 || iargsø1, args);
}.call(this);
};
var compose = exports.compose = function compose(lambda) {
var funcs = Array.prototype.slice.call(arguments, 1);
return function () {
var args = Array.prototype.slice.call(arguments, 0);
return function () {
var valø1 = lambda.apply(void 0, args);
funcs.reduce(function (acc, lambda) {
return acc && lambda ? valø1 = lambda(acc) : void 0;
}, valø1);
return valø1;
}.call(this);
};
};
var memoize = exports.memoize = function memoize(lambda, resolver) {
return function () {
var memoø1 = {};
return function () {
var args = Array.prototype.slice.call(arguments, 0);
return function () {
var keyø1 = '@' + (resolver ? resolver.apply(void 0, args) : args[0]);
return memoø1.hasOwnProperty(keyø1) ? memoø1[keyø1] : memoø1[keyø1] = lambda.apply(void 0, args);
}.call(this);
};
}.call(this);
};
var wrap = exports.wrap = function wrap(lambda, to) {
var args = Array.prototype.slice.call(arguments, 2);
return function () {
var cargs = Array.prototype.slice.call(arguments, 0);
return to.apply(void 0, [lambda].concat(args, cargs));
};
};
var once = exports.once = function once(lambda) {
return function () {
var callø1 = true;
var memoizedø1 = void 0;
return function () {
var args = Array.prototype.slice.call(arguments, 0);
return callø1 ? (function () {
callø1 = false;
return memoizedø1 = lambda.apply(void 0, args);
})() : memoizedø1;
};
}.call(this);
};
var times = exports.times = function times() {
var args = Array.prototype.slice.call(arguments, 0);
return curry(function (lambda, n) {
return function () {
var cø1 = 0;
var nø2 = n || 1;
var memoizedø1 = void 0;
return function () {
var args = Array.prototype.slice.call(arguments, 0);
return cø1 < nø2 ? (function () {
cø1 = cø1 + 1;
return (cø1 === nø2 ? false : true) ? lambda.apply(void 0, args) : memoizedø1 = lambda.apply(void 0, args);
})() : memoizedø1;
};
}.call(this);
}).apply(void 0, args);
};
var throttle = exports.throttle = function throttle() {
var args = Array.prototype.slice.call(arguments, 0);
return curry(function (fn, ms) {
return function () {
var tø1 = 0;
var msø2 = ms || 100;
return function () {
var args = Array.prototype.slice.call(arguments, 0);
return tø1 === 0 || Date.now() - tø1 > msø2 ? function () {
tø1 = Date.now();
fn.apply(void 0, args);
return void 0;
}.call(this) : void 0;
};
}.call(this);
}).apply(void 0, args);
};
var defer = exports.defer = function defer(lambda, ms) {
var args = Array.prototype.slice.call(arguments, 2);
return setTimeout(function () {
return lambda.apply(void 0, args);
}, ms || 1000);
};
var debounce = exports.debounce = function debounce() {
var args = Array.prototype.slice.call(arguments, 0);
return function () {
var cargs = Array.prototype.slice.call(arguments, 0);
return defer.apply(void 0, args.concat(cargs));
};
};