-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbucks.min.js
7 lines (7 loc) · 4.59 KB
/
bucks.min.js
1
2
3
4
5
6
7
/**
* @name bucks.min.js
* @version 0.8.4
* copyright (c) Cyberagent Inc.
* @overview Async chain utility for browser and node.js
*/
!function(t){"use strict";var r=function l(){},i=Array.isArray||function a(t){return"[object Array]"===t.toString()},n=function c(t){return 0===t.length},s=function f(t){t.stack?console.error(t.stack):t.message?console.error(t.message):console.error(t)},e=0,o=function _(){return"__bucks__"+e++},h=function d(t){this._tasks=[],this._taskcount=0,this._results=[],this.callback=r,this.failure=r,this._alive=!0,this._interrupt=!1,this.__id=o(),d.living[this.__id]=this,this.initialize(t)};h.VERSION="0.8.4",h.DEBUG=!1,h.running={},h.living={},h._isOnError=!1,h.onError=function v(v){var t=this;!function(t){h._onError=v,h._isOnError=t}(!0)},h.prototype={initialize:r,_normalizeTask:function g(t){var r=t;if(t.length<3)r=function i(r,i,n){var s=t.call(null,r,i);n.call(null,null,s)};else if(3===t.length)r=t;else{if(4!==t.length)throw new Error("args length invalid");r=function n(r,i,n,s){t.call(null,r,i,n,s)}}return r},_normalizeSuccess:function k(t){var r=t;if(t.length<2)r=function(r,i){var n=t(r);i(null,n)};else{if(2!==t.length)throw new Error("args length invalid");r=t}return r},_normalizeError:function w(t){var r=t;if(t.length<2||3<t.length)throw new Error(t.name+": args length invalid. should be: onError(err, next)");return r},add:function E(t){if(!this._alive)throw new Error("this bucks object already destroyed.");var r=this._normalizeTask(t);return this._tasks.push(r),this},then:function y(t){var r=this._normalizeSuccess(t);return this.add(function i(t,i,n){t?n(t):r(i,n)})},empty:function p(){return this.then(function t(){})},error:function b(t){var r=this._normalizeError(t);return this.add(function i(t,i,n){t?r(t,n):n(t,i)})},_iterator:function m(t,r){if(this._interrupt)return this;if(!this._alive)throw new Error("this bucks object already destroyed.");r?this._results.push(r):this._results.push(null);var i=this._tasks.shift();if(!i)return this.destroy(t);try{var n=this;i(t,r,function(t,r){return n._iterator(t,r),this},this._taskcount++)}catch(e){if(!this._results){if(h.DEBUG&&s(e),!h._isOnError)throw e;h._onError(e,this)}this._iterator(e,null)}return this},debug:function O(){return this},parallel:function z(t){if(!i(t))throw new Error("tasks is not array.");if(n(t))return this.add(function o(t,r,i){i(null,new u(0).resultObj)});for(var r=0,s=t.length;s>r;r++){var e=t[r];t[r]=this._normalizeTask(e)}return this.add(function l(r,i,n){var s=new u(t.length);s.onFinish(function e(t){for(var r,i=0,s=t.err.length;s>i;i++){var e=t.err[i];void 0!==e&&null!==e&&(r=e)}n(r,t)}),t.forEach(function o(t,r){setTimeout(function i(){(new h).add(t).end(function(t,i){t?s.successOne(r,t,null):s.successOne(r,null,i[0])})},0)})})},waterfall:function j(t){if(!i(t))throw new Error("tasks is not array.");if(n(t))return this.add(function e(t,r,i){i(null,[])});for(var r=0,s=t.length;s>r;r++)t[r]=this._normalizeTask(t[r]),this.add(t[r]);return this},delay:function T(t){return this.add(function(r,i,n){setTimeout(function(){n(r,i)},t||0)})},dispose:r,interrupt:function x(){return this._interrupt=!0,this.destroy(),this},destroy:function B(t){if(!this._alive)return this;var i=this._results,n=this.callback,e=this.failure,o=this.dispose;this._tasks=null,this._taskcount=0,this._results=null,this.callback=r,this.failure=r,this.dispose=r,i.shift();try{if(n)n(t,i);else if(t)throw t}catch(u){if(e)try{e(u)}catch(l){if(!h._isOnError)throw l;h._onError(l,this)}else{if(h.DEBUG&&s(u),!h._isOnError)throw u;h._onError(u,this)}}finally{try{o.call(this)}catch(l){if(!h._isOnError)throw l;h._onError(l,this)}delete this._alive,delete h.running[this.__id],delete h.living[this.__id],delete this.__id}return this},end:function F(t,r){if(t&&t.length<1)throw new Error("callback args length invalid. should be `callback(err, ress)` or `callback(err)`.");var i=this;if(this.callback=t,this.failure=r,!this._tasks||!this._tasks.length){var n=new Error("task is empty. add(task) first. if theres no task to execute but end is desired, empty() may be useful");return this.destroy(n,null),t(n)}return h.running[this.__id]=this,this._iterator(),void 0}};var u=function G(t){this._results=[],this._errors=[],this._waiting=t};u.prototype={onFinish:function S(t){this._onFinish=t},successOne:function A(t,r,i){this._errors[t]=r,this._results[t]=i,this._waiting--,this._waiting<=0&&this._onFinish.call(null,this.resultObj)}},u.prototype.__defineGetter__("resultObj",function D(){return{err:this._errors,res:this._results}}),"function"==typeof define&&define.amd?define(function(t,r,i){return h}):"undefined"!=typeof module&&module.exports?module.exports=h:t.Bucks=h}(this);