package/package.json000644 0000001165 13342164536011577 0ustar00000000 000000 { "name": "a-sync-waterfall", "version": "1.0.1", "description": "Runs a list of async tasks, passing the results of each into the next one", "author": { "name": "Gleb Khudyakov", "url": "https://github.com/hydiak/a-sync-waterfall" }, "license": "MIT", "homepage": "https://github.com/hydiak/a-sync-waterfall", "repository": { "type": "git", "url": "git@github.com:hydiak/a-sync-waterfall.git" }, "bugs": { "url": "https://github.com/hydiak/a-sync-waterfall/issues" }, "main": "./index", "keywords": ["async", "sync", "waterfall", "tasks", "control", "flow"], "dependencies": {} } package/index.js000644 0000004400 12735217572010755 0ustar00000000 000000 // MIT license (by Elan Shanker). (function(globals) { 'use strict'; var executeSync = function(){ var args = Array.prototype.slice.call(arguments); if (typeof args[0] === 'function'){ args[0].apply(null, args.splice(1)); } }; var executeAsync = function(fn){ if (typeof setImmediate === 'function') { setImmediate(fn); } else if (typeof process !== 'undefined' && process.nextTick) { process.nextTick(fn); } else { setTimeout(fn, 0); } }; var makeIterator = function (tasks) { var makeCallback = function (index) { var fn = function () { if (tasks.length) { tasks[index].apply(null, arguments); } return fn.next(); }; fn.next = function () { return (index < tasks.length - 1) ? makeCallback(index + 1): null; }; return fn; }; return makeCallback(0); }; var _isArray = Array.isArray || function(maybeArray){ return Object.prototype.toString.call(maybeArray) === '[object Array]'; }; var waterfall = function (tasks, callback, forceAsync) { var nextTick = forceAsync ? executeAsync : executeSync; callback = callback || function () {}; if (!_isArray(tasks)) { var err = new Error('First argument to waterfall must be an array of functions'); return callback(err); } if (!tasks.length) { return callback(); } var wrapIterator = function (iterator) { return function (err) { if (err) { callback.apply(null, arguments); callback = function () {}; } else { var args = Array.prototype.slice.call(arguments, 1); var next = iterator.next(); if (next) { args.push(wrapIterator(next)); } else { args.push(callback); } nextTick(function () { iterator.apply(null, args); }); } }; }; wrapIterator(makeIterator(tasks))(); }; if (typeof define !== 'undefined' && define.amd) { define([], function () { return waterfall; }); // RequireJS } else if (typeof module !== 'undefined' && module.exports) { module.exports = waterfall; // CommonJS } else { globals.waterfall = waterfall; //