react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / umd / node_modules / uglify-js / node_modules / async / lib / async.js
80759 views/*global setImmediate: false, setTimeout: false, console: false */1(function () {23var async = {};45// global on the server, window in the browser6var root, previous_async;78root = this;9if (root != null) {10previous_async = root.async;11}1213async.noConflict = function () {14root.async = previous_async;15return async;16};1718function only_once(fn) {19var called = false;20return function() {21if (called) throw new Error("Callback was already called.");22called = true;23fn.apply(root, arguments);24}25}2627//// cross-browser compatiblity functions ////2829var _each = function (arr, iterator) {30if (arr.forEach) {31return arr.forEach(iterator);32}33for (var i = 0; i < arr.length; i += 1) {34iterator(arr[i], i, arr);35}36};3738var _map = function (arr, iterator) {39if (arr.map) {40return arr.map(iterator);41}42var results = [];43_each(arr, function (x, i, a) {44results.push(iterator(x, i, a));45});46return results;47};4849var _reduce = function (arr, iterator, memo) {50if (arr.reduce) {51return arr.reduce(iterator, memo);52}53_each(arr, function (x, i, a) {54memo = iterator(memo, x, i, a);55});56return memo;57};5859var _keys = function (obj) {60if (Object.keys) {61return Object.keys(obj);62}63var keys = [];64for (var k in obj) {65if (obj.hasOwnProperty(k)) {66keys.push(k);67}68}69return keys;70};7172//// exported async module functions ////7374//// nextTick implementation with browser-compatible fallback ////75if (typeof process === 'undefined' || !(process.nextTick)) {76if (typeof setImmediate === 'function') {77async.nextTick = function (fn) {78// not a direct alias for IE10 compatibility79setImmediate(fn);80};81async.setImmediate = async.nextTick;82}83else {84async.nextTick = function (fn) {85setTimeout(fn, 0);86};87async.setImmediate = async.nextTick;88}89}90else {91async.nextTick = process.nextTick;92if (typeof setImmediate !== 'undefined') {93async.setImmediate = function (fn) {94// not a direct alias for IE10 compatibility95setImmediate(fn);96};97}98else {99async.setImmediate = async.nextTick;100}101}102103async.each = function (arr, iterator, callback) {104callback = callback || function () {};105if (!arr.length) {106return callback();107}108var completed = 0;109_each(arr, function (x) {110iterator(x, only_once(function (err) {111if (err) {112callback(err);113callback = function () {};114}115else {116completed += 1;117if (completed >= arr.length) {118callback(null);119}120}121}));122});123};124async.forEach = async.each;125126async.eachSeries = function (arr, iterator, callback) {127callback = callback || function () {};128if (!arr.length) {129return callback();130}131var completed = 0;132var iterate = function () {133iterator(arr[completed], function (err) {134if (err) {135callback(err);136callback = function () {};137}138else {139completed += 1;140if (completed >= arr.length) {141callback(null);142}143else {144iterate();145}146}147});148};149iterate();150};151async.forEachSeries = async.eachSeries;152153async.eachLimit = function (arr, limit, iterator, callback) {154var fn = _eachLimit(limit);155fn.apply(null, [arr, iterator, callback]);156};157async.forEachLimit = async.eachLimit;158159var _eachLimit = function (limit) {160161return function (arr, iterator, callback) {162callback = callback || function () {};163if (!arr.length || limit <= 0) {164return callback();165}166var completed = 0;167var started = 0;168var running = 0;169170(function replenish () {171if (completed >= arr.length) {172return callback();173}174175while (running < limit && started < arr.length) {176started += 1;177running += 1;178iterator(arr[started - 1], function (err) {179if (err) {180callback(err);181callback = function () {};182}183else {184completed += 1;185running -= 1;186if (completed >= arr.length) {187callback();188}189else {190replenish();191}192}193});194}195})();196};197};198199200var doParallel = function (fn) {201return function () {202var args = Array.prototype.slice.call(arguments);203return fn.apply(null, [async.each].concat(args));204};205};206var doParallelLimit = function(limit, fn) {207return function () {208var args = Array.prototype.slice.call(arguments);209return fn.apply(null, [_eachLimit(limit)].concat(args));210};211};212var doSeries = function (fn) {213return function () {214var args = Array.prototype.slice.call(arguments);215return fn.apply(null, [async.eachSeries].concat(args));216};217};218219220var _asyncMap = function (eachfn, arr, iterator, callback) {221var results = [];222arr = _map(arr, function (x, i) {223return {index: i, value: x};224});225eachfn(arr, function (x, callback) {226iterator(x.value, function (err, v) {227results[x.index] = v;228callback(err);229});230}, function (err) {231callback(err, results);232});233};234async.map = doParallel(_asyncMap);235async.mapSeries = doSeries(_asyncMap);236async.mapLimit = function (arr, limit, iterator, callback) {237return _mapLimit(limit)(arr, iterator, callback);238};239240var _mapLimit = function(limit) {241return doParallelLimit(limit, _asyncMap);242};243244// reduce only has a series version, as doing reduce in parallel won't245// work in many situations.246async.reduce = function (arr, memo, iterator, callback) {247async.eachSeries(arr, function (x, callback) {248iterator(memo, x, function (err, v) {249memo = v;250callback(err);251});252}, function (err) {253callback(err, memo);254});255};256// inject alias257async.inject = async.reduce;258// foldl alias259async.foldl = async.reduce;260261async.reduceRight = function (arr, memo, iterator, callback) {262var reversed = _map(arr, function (x) {263return x;264}).reverse();265async.reduce(reversed, memo, iterator, callback);266};267// foldr alias268async.foldr = async.reduceRight;269270var _filter = function (eachfn, arr, iterator, callback) {271var results = [];272arr = _map(arr, function (x, i) {273return {index: i, value: x};274});275eachfn(arr, function (x, callback) {276iterator(x.value, function (v) {277if (v) {278results.push(x);279}280callback();281});282}, function (err) {283callback(_map(results.sort(function (a, b) {284return a.index - b.index;285}), function (x) {286return x.value;287}));288});289};290async.filter = doParallel(_filter);291async.filterSeries = doSeries(_filter);292// select alias293async.select = async.filter;294async.selectSeries = async.filterSeries;295296var _reject = function (eachfn, arr, iterator, callback) {297var results = [];298arr = _map(arr, function (x, i) {299return {index: i, value: x};300});301eachfn(arr, function (x, callback) {302iterator(x.value, function (v) {303if (!v) {304results.push(x);305}306callback();307});308}, function (err) {309callback(_map(results.sort(function (a, b) {310return a.index - b.index;311}), function (x) {312return x.value;313}));314});315};316async.reject = doParallel(_reject);317async.rejectSeries = doSeries(_reject);318319var _detect = function (eachfn, arr, iterator, main_callback) {320eachfn(arr, function (x, callback) {321iterator(x, function (result) {322if (result) {323main_callback(x);324main_callback = function () {};325}326else {327callback();328}329});330}, function (err) {331main_callback();332});333};334async.detect = doParallel(_detect);335async.detectSeries = doSeries(_detect);336337async.some = function (arr, iterator, main_callback) {338async.each(arr, function (x, callback) {339iterator(x, function (v) {340if (v) {341main_callback(true);342main_callback = function () {};343}344callback();345});346}, function (err) {347main_callback(false);348});349};350// any alias351async.any = async.some;352353async.every = function (arr, iterator, main_callback) {354async.each(arr, function (x, callback) {355iterator(x, function (v) {356if (!v) {357main_callback(false);358main_callback = function () {};359}360callback();361});362}, function (err) {363main_callback(true);364});365};366// all alias367async.all = async.every;368369async.sortBy = function (arr, iterator, callback) {370async.map(arr, function (x, callback) {371iterator(x, function (err, criteria) {372if (err) {373callback(err);374}375else {376callback(null, {value: x, criteria: criteria});377}378});379}, function (err, results) {380if (err) {381return callback(err);382}383else {384var fn = function (left, right) {385var a = left.criteria, b = right.criteria;386return a < b ? -1 : a > b ? 1 : 0;387};388callback(null, _map(results.sort(fn), function (x) {389return x.value;390}));391}392});393};394395async.auto = function (tasks, callback) {396callback = callback || function () {};397var keys = _keys(tasks);398if (!keys.length) {399return callback(null);400}401402var results = {};403404var listeners = [];405var addListener = function (fn) {406listeners.unshift(fn);407};408var removeListener = function (fn) {409for (var i = 0; i < listeners.length; i += 1) {410if (listeners[i] === fn) {411listeners.splice(i, 1);412return;413}414}415};416var taskComplete = function () {417_each(listeners.slice(0), function (fn) {418fn();419});420};421422addListener(function () {423if (_keys(results).length === keys.length) {424callback(null, results);425callback = function () {};426}427});428429_each(keys, function (k) {430var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k];431var taskCallback = function (err) {432var args = Array.prototype.slice.call(arguments, 1);433if (args.length <= 1) {434args = args[0];435}436if (err) {437var safeResults = {};438_each(_keys(results), function(rkey) {439safeResults[rkey] = results[rkey];440});441safeResults[k] = args;442callback(err, safeResults);443// stop subsequent errors hitting callback multiple times444callback = function () {};445}446else {447results[k] = args;448async.setImmediate(taskComplete);449}450};451var requires = task.slice(0, Math.abs(task.length - 1)) || [];452var ready = function () {453return _reduce(requires, function (a, x) {454return (a && results.hasOwnProperty(x));455}, true) && !results.hasOwnProperty(k);456};457if (ready()) {458task[task.length - 1](taskCallback, results);459}460else {461var listener = function () {462if (ready()) {463removeListener(listener);464task[task.length - 1](taskCallback, results);465}466};467addListener(listener);468}469});470};471472async.waterfall = function (tasks, callback) {473callback = callback || function () {};474if (tasks.constructor !== Array) {475var err = new Error('First argument to waterfall must be an array of functions');476return callback(err);477}478if (!tasks.length) {479return callback();480}481var wrapIterator = function (iterator) {482return function (err) {483if (err) {484callback.apply(null, arguments);485callback = function () {};486}487else {488var args = Array.prototype.slice.call(arguments, 1);489var next = iterator.next();490if (next) {491args.push(wrapIterator(next));492}493else {494args.push(callback);495}496async.setImmediate(function () {497iterator.apply(null, args);498});499}500};501};502wrapIterator(async.iterator(tasks))();503};504505var _parallel = function(eachfn, tasks, callback) {506callback = callback || function () {};507if (tasks.constructor === Array) {508eachfn.map(tasks, function (fn, callback) {509if (fn) {510fn(function (err) {511var args = Array.prototype.slice.call(arguments, 1);512if (args.length <= 1) {513args = args[0];514}515callback.call(null, err, args);516});517}518}, callback);519}520else {521var results = {};522eachfn.each(_keys(tasks), function (k, callback) {523tasks[k](function (err) {524var args = Array.prototype.slice.call(arguments, 1);525if (args.length <= 1) {526args = args[0];527}528results[k] = args;529callback(err);530});531}, function (err) {532callback(err, results);533});534}535};536537async.parallel = function (tasks, callback) {538_parallel({ map: async.map, each: async.each }, tasks, callback);539};540541async.parallelLimit = function(tasks, limit, callback) {542_parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback);543};544545async.series = function (tasks, callback) {546callback = callback || function () {};547if (tasks.constructor === Array) {548async.mapSeries(tasks, function (fn, callback) {549if (fn) {550fn(function (err) {551var args = Array.prototype.slice.call(arguments, 1);552if (args.length <= 1) {553args = args[0];554}555callback.call(null, err, args);556});557}558}, callback);559}560else {561var results = {};562async.eachSeries(_keys(tasks), function (k, callback) {563tasks[k](function (err) {564var args = Array.prototype.slice.call(arguments, 1);565if (args.length <= 1) {566args = args[0];567}568results[k] = args;569callback(err);570});571}, function (err) {572callback(err, results);573});574}575};576577async.iterator = function (tasks) {578var makeCallback = function (index) {579var fn = function () {580if (tasks.length) {581tasks[index].apply(null, arguments);582}583return fn.next();584};585fn.next = function () {586return (index < tasks.length - 1) ? makeCallback(index + 1): null;587};588return fn;589};590return makeCallback(0);591};592593async.apply = function (fn) {594var args = Array.prototype.slice.call(arguments, 1);595return function () {596return fn.apply(597null, args.concat(Array.prototype.slice.call(arguments))598);599};600};601602var _concat = function (eachfn, arr, fn, callback) {603var r = [];604eachfn(arr, function (x, cb) {605fn(x, function (err, y) {606r = r.concat(y || []);607cb(err);608});609}, function (err) {610callback(err, r);611});612};613async.concat = doParallel(_concat);614async.concatSeries = doSeries(_concat);615616async.whilst = function (test, iterator, callback) {617if (test()) {618iterator(function (err) {619if (err) {620return callback(err);621}622async.whilst(test, iterator, callback);623});624}625else {626callback();627}628};629630async.doWhilst = function (iterator, test, callback) {631iterator(function (err) {632if (err) {633return callback(err);634}635if (test()) {636async.doWhilst(iterator, test, callback);637}638else {639callback();640}641});642};643644async.until = function (test, iterator, callback) {645if (!test()) {646iterator(function (err) {647if (err) {648return callback(err);649}650async.until(test, iterator, callback);651});652}653else {654callback();655}656};657658async.doUntil = function (iterator, test, callback) {659iterator(function (err) {660if (err) {661return callback(err);662}663if (!test()) {664async.doUntil(iterator, test, callback);665}666else {667callback();668}669});670};671672async.queue = function (worker, concurrency) {673if (concurrency === undefined) {674concurrency = 1;675}676function _insert(q, data, pos, callback) {677if(data.constructor !== Array) {678data = [data];679}680_each(data, function(task) {681var item = {682data: task,683callback: typeof callback === 'function' ? callback : null684};685686if (pos) {687q.tasks.unshift(item);688} else {689q.tasks.push(item);690}691692if (q.saturated && q.tasks.length === concurrency) {693q.saturated();694}695async.setImmediate(q.process);696});697}698699var workers = 0;700var q = {701tasks: [],702concurrency: concurrency,703saturated: null,704empty: null,705drain: null,706push: function (data, callback) {707_insert(q, data, false, callback);708},709unshift: function (data, callback) {710_insert(q, data, true, callback);711},712process: function () {713if (workers < q.concurrency && q.tasks.length) {714var task = q.tasks.shift();715if (q.empty && q.tasks.length === 0) {716q.empty();717}718workers += 1;719var next = function () {720workers -= 1;721if (task.callback) {722task.callback.apply(task, arguments);723}724if (q.drain && q.tasks.length + workers === 0) {725q.drain();726}727q.process();728};729var cb = only_once(next);730worker(task.data, cb);731}732},733length: function () {734return q.tasks.length;735},736running: function () {737return workers;738}739};740return q;741};742743async.cargo = function (worker, payload) {744var working = false,745tasks = [];746747var cargo = {748tasks: tasks,749payload: payload,750saturated: null,751empty: null,752drain: null,753push: function (data, callback) {754if(data.constructor !== Array) {755data = [data];756}757_each(data, function(task) {758tasks.push({759data: task,760callback: typeof callback === 'function' ? callback : null761});762if (cargo.saturated && tasks.length === payload) {763cargo.saturated();764}765});766async.setImmediate(cargo.process);767},768process: function process() {769if (working) return;770if (tasks.length === 0) {771if(cargo.drain) cargo.drain();772return;773}774775var ts = typeof payload === 'number'776? tasks.splice(0, payload)777: tasks.splice(0);778779var ds = _map(ts, function (task) {780return task.data;781});782783if(cargo.empty) cargo.empty();784working = true;785worker(ds, function () {786working = false;787788var args = arguments;789_each(ts, function (data) {790if (data.callback) {791data.callback.apply(null, args);792}793});794795process();796});797},798length: function () {799return tasks.length;800},801running: function () {802return working;803}804};805return cargo;806};807808var _console_fn = function (name) {809return function (fn) {810var args = Array.prototype.slice.call(arguments, 1);811fn.apply(null, args.concat([function (err) {812var args = Array.prototype.slice.call(arguments, 1);813if (typeof console !== 'undefined') {814if (err) {815if (console.error) {816console.error(err);817}818}819else if (console[name]) {820_each(args, function (x) {821console[name](x);822});823}824}825}]));826};827};828async.log = _console_fn('log');829async.dir = _console_fn('dir');830/*async.info = _console_fn('info');831async.warn = _console_fn('warn');832async.error = _console_fn('error');*/833834async.memoize = function (fn, hasher) {835var memo = {};836var queues = {};837hasher = hasher || function (x) {838return x;839};840var memoized = function () {841var args = Array.prototype.slice.call(arguments);842var callback = args.pop();843var key = hasher.apply(null, args);844if (key in memo) {845callback.apply(null, memo[key]);846}847else if (key in queues) {848queues[key].push(callback);849}850else {851queues[key] = [callback];852fn.apply(null, args.concat([function () {853memo[key] = arguments;854var q = queues[key];855delete queues[key];856for (var i = 0, l = q.length; i < l; i++) {857q[i].apply(null, arguments);858}859}]));860}861};862memoized.memo = memo;863memoized.unmemoized = fn;864return memoized;865};866867async.unmemoize = function (fn) {868return function () {869return (fn.unmemoized || fn).apply(null, arguments);870};871};872873async.times = function (count, iterator, callback) {874var counter = [];875for (var i = 0; i < count; i++) {876counter.push(i);877}878return async.map(counter, iterator, callback);879};880881async.timesSeries = function (count, iterator, callback) {882var counter = [];883for (var i = 0; i < count; i++) {884counter.push(i);885}886return async.mapSeries(counter, iterator, callback);887};888889async.compose = function (/* functions... */) {890var fns = Array.prototype.reverse.call(arguments);891return function () {892var that = this;893var args = Array.prototype.slice.call(arguments);894var callback = args.pop();895async.reduce(fns, args, function (newargs, fn, cb) {896fn.apply(that, newargs.concat([function () {897var err = arguments[0];898var nextargs = Array.prototype.slice.call(arguments, 1);899cb(err, nextargs);900}]))901},902function (err, results) {903callback.apply(that, [err].concat(results));904});905};906};907908var _applyEach = function (eachfn, fns /*args...*/) {909var go = function () {910var that = this;911var args = Array.prototype.slice.call(arguments);912var callback = args.pop();913return eachfn(fns, function (fn, cb) {914fn.apply(that, args.concat([cb]));915},916callback);917};918if (arguments.length > 2) {919var args = Array.prototype.slice.call(arguments, 2);920return go.apply(this, args);921}922else {923return go;924}925};926async.applyEach = doParallel(_applyEach);927async.applyEachSeries = doSeries(_applyEach);928929async.forever = function (fn, callback) {930function next(err) {931if (err) {932if (callback) {933return callback(err);934}935throw err;936}937fn(next);938}939next();940};941942// AMD / RequireJS943if (typeof define !== 'undefined' && define.amd) {944define([], function () {945return async;946});947}948// Node.js949else if (typeof module !== 'undefined' && module.exports) {950module.exports = async;951}952// included directly via <script> tag953else {954root.async = async;955}956957}());958959960