UNPKG

something-something

Version:

a little asynchronous functional programming library.

181 lines (168 loc) 4.32 kB
// Generated by CoffeeScript 1.7.1 (function() { var accumulator, all, any, collect, each, filter, handle, id, isArray, map; isArray = Array.isArray || function(arr) { return Object.prototype.toString.call(arr) === '[object Array]'; }; id = function(k, v, c) { return v; }; collect = function(k, v, c) { if (v) { return c[k]; } }; accumulator = function(collection) { if (isArray(collection)) { return []; } else { return {}; } }; each = function(collection, iterator, complete, convert) { var cb, count, fail, failed, iterate, key, keys, length, _i, _j, _len, _ref, _results, _results1; keys = isArray(collection) ? (function() { _results = []; for (var _i = 0, _ref = collection.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); } return _results; }).apply(this) : Object.keys(collection); failed = false; fail = function(error) { failed = true; return complete(error); }; length = keys.length; count = 0; cb = function(key) { return function(error, value) { if (failed) { return; } if (error) { return fail(error); } convert(key, value); count += 1; if (count === length) { return complete(); } }; }; iterate = (function() { switch (iterator.length) { case 2: return function(key, value) { return iterator(value, cb(key)); }; case 3: return function(key, value) { return iterator(key, value, cb(key)); }; case 4: return function(key, value) { return iterator(key, value, collection, cb(key)); }; default: throw new Error('Ambiguous iterator signature'); } })(); _results1 = []; for (_j = 0, _len = keys.length; _j < _len; _j++) { key = keys[_j]; _results1.push(iterate(key, collection[key])); } return _results1; }; handle = function(complete, result) { if (complete == null) { return (function() {}); } return function(error) { if (error) { return complete(error); } else { return complete(null, result); } }; }; map = function(collection, iterator, complete) { var cb, convert, result; result = accumulator(collection); cb = handle(complete, result); convert = function(key, value) { return result[key] = value; }; return each(collection, iterator, cb, convert); }; filter = function(collection, iterator, complete) { var cb, convert, result; result = accumulator(collection); cb = handle(complete, result); convert = function(key, value) { if (isArray(collection)) { if (value) { return result.push(collection[key]); } } else { if (value) { return result[key] = collection[key]; } } }; return each(collection, iterator, cb, convert); }; any = function(collection, iterator, complete) { var cb, convert, finish, finished; finished = false; finish = handle(complete, false); cb = function(error) { if (!finished) { return finish(error); } }; convert = function(key, value) { if (finished) { return; } if (value) { finished = true; if (complete) { return complete(null, true); } } }; return each(collection, iterator, cb, convert); }; all = function(collection, iterator, complete) { var cb, convert, finish, finished; finished = false; finish = handle(complete, true); cb = function(error) { if (!finished) { return finish(error); } }; convert = function(key, value) { if (finished) { return; } if (!value) { finished = true; if (complete) { return complete(null, false); } } }; return each(collection, iterator, cb, convert); }; module.exports = { map: map, collect: map, filter: filter, select: filter, any: any, some: any, all: all, every: all }; }).call(this);