angular $q vs bluebird (v9)

Revision 9 of this benchmark created on


Description

Simple comparison of promise creation and resolution between Angular's $q, bluebird, and native ES6 Promise (only in Chrome and FF).

Preparation HTML

<script>
window.NativePromise = Promise;
</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script>
<script>
!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.Promise=a():"undefined"!=typeof global?global.Promise=a():"undefined"!=typeof self&&(self.Promise=a())}(function(){var define,module,exports;return(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a){return a(o,!0)}if(i){return i(o,!0)}throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++){s(r[o])}return s})({1:[function(require,module,exports){module.exports=function(Promise,Promise$_CreatePromiseArray,PromiseArray){var SomePromiseArray=require("./some_promise_array.js")(PromiseArray);function Promise$_Any(promises,useBound){var ret=Promise$_CreatePromiseArray(promises,SomePromiseArray,useBound===true&&promises._isBound()?promises._boundTo:void 0);var promise=ret.promise();if(promise.isRejected()){return promise}ret.setHowMany(1);ret.setUnwrap();ret.init();return promise}Promise.any=function Promise$Any(promises){return Promise$_Any(promises,false)};Promise.prototype.any=function Promise$any(){return Promise$_Any(this,true)}}},{"./some_promise_array.js":33}],2:[function(require,module,exports){var schedule=require("./schedule.js");var Queue=require("./queue.js");var errorObj=require("./util.js").errorObj;var tryCatch1=require("./util.js").tryCatch1;var process=require("./global.js").process;function Async(){this._isTickUsed=false;this._length=0;this._lateBuffer=new Queue();this._functionBuffer=new Queue(25000*3);var self=this;this.consumeFunctionBuffer=function Async$consumeFunctionBuffer(){self._consumeFunctionBuffer()}}Async.prototype.haveItemsQueued=function Async$haveItemsQueued(){return this._length>0};Async.prototype.invokeLater=function Async$invokeLater(fn,receiver,arg){if(process!==void 0&&process.domain!=null&&!fn.domain){fn=process.domain.bind(fn)}this._lateBuffer.push(fn,receiver,arg);this._queueTick()};Async.prototype.invoke=function Async$invoke(fn,receiver,arg){if(process!==void 0&&process.domain!=null&&!fn.domain){fn=process.domain.bind(fn)}var functionBuffer=this._functionBuffer;functionBuffer.push(fn,receiver,arg);this._length=functionBuffer.length();this._queueTick()};Async.prototype._consumeFunctionBuffer=function Async$_consumeFunctionBuffer(){var functionBuffer=this._functionBuffer;while(functionBuffer.length()>0){var fn=functionBuffer.shift();var receiver=functionBuffer.shift();var arg=functionBuffer.shift();fn.call(receiver,arg)}this._reset();this._consumeLateBuffer()};Async.prototype._consumeLateBuffer=function Async$_consumeLateBuffer(){var buffer=this._lateBuffer;while(buffer.length()>0){var fn=buffer.shift();var receiver=buffer.shift();var arg=buffer.shift();var res=tryCatch1(fn,receiver,arg);if(res===errorObj){this._queueTick();if(fn.domain!=null){fn.domain.emit("error",res.e)}else{throw res.e}}}};Async.prototype._queueTick=function Async$_queue(){if(!this._isTickUsed){schedule(this.consumeFunctionBuffer);this._isTickUsed=true}};Async.prototype._reset=function Async$_reset(){this._isTickUsed=false;this._length=0};module.exports=new Async()},{"./global.js":15,"./queue.js":26,"./schedule.js":29,"./util.js":37}],3:[function(require,module,exports){var Promise=require("./promise.js")();module.exports=Promise},{"./promise.js":19}],4:[function(require,module,exports){module.exports=function(Promise){Promise.prototype.call=function Promise$call(propertyName){var $_len=arguments.length;var args=new Array($_len-1);for(var $_i=1;$_i<$_len;++$_i){args[$_i-1]=arguments[$_i]}return this._then(function(obj){return obj[propertyName].apply(obj,args)},void 0,void 0,void 0,void 0)};function Promise$getter(obj){var prop=typeof this==="string"?this:(""+this);return obj[prop]}Promise.prototype.get=function Promise$get(propertyName){return this._then(Promise$getter,void 0,void 0,propertyName,void 0)}}},{}],5:[function(require,module,exports){module.exports=function(Promise,INTERNAL){var errors=require("./errors.js");var async=require("./async.js");var CancellationError=errors.CancellationError;Promise.prototype._cancel=function Promise$_cancel(){if(!this.isCancellable()){return this}var parent;var promiseToReject=this;while((parent=promiseToReject._cancellationParent)!==void 0&&parent.isCancellable()){promiseToReject=parent}var err=new CancellationError();promiseToReject._attachExtraTrace(err);promiseToReject._rejectUnchecked(err)};Promise.prototype.cancel=function Promise$cancel(){if(!this.isCancellable()){return this}async.invokeLater(this._cancel,this,void 0);return this};Promise.prototype.cancellable=function Promise$cancellable(){if(this._cancellable()){return this}this._setCancellable();this._cancellationParent=void 0;return this};Promise.prototype.uncancellable=function Promise$uncancellable(){var ret=new Promise(INTERNAL);ret._setTrace(this);ret._follow(this);ret._unsetCancellable();if(this._isBound()){ret._setBoundTo(this._boundTo)}return ret};Promise.prototype.fork=function Promise$fork(didFulfill,didReject,didProgress){var ret=this._then(didFulfill,didReject,didProgress,void 0,void 0);ret._setCancellable();ret._cancellationParent=void 0;return ret}}},{"./async.js":2,"./errors.js":9}],6:[function(require,module,exports){module.exports=function(){var inherits=require("./util.js").inherits;var defineProperty=require("./es5.js").defineProperty;var rignore=new RegExp("\\b(?:[a-zA-Z0-9.]+\\$_\\w+|tryCatch(?:1|2|Apply)|new \\w*PromiseArray|\\w*PromiseArray\\.\\w*PromiseArray|setTimeout|CatchFilter\\$_\\w+|makeNodePromisified|processImmediate|process._tickCallback|nextTick|Async\\$\\w+)\\b");var rtraceline=null;var formatStack=null;function formatNonError(obj){var str;if(typeof obj==="function"){str="[function "+(obj.name||"anonymous")+"]"}else{str=obj.toString();var ruselessToString=/\[object [a-zA-Z0-9$_]+\]/;if(ruselessToString.test(str)){try{var newStr=JSON.stringify(obj);str=newStr}catch(e){}}if(str.length===0){str="(empty array)"}}return("(<"+snip(str)+">, no stack trace)")}function snip(str){var maxChars=41;if(str.length<maxChars){return str}return str.substr(0,maxChars-3)+"..."}function CapturedTrace(ignoreUntil,isTopLevel){this.captureStackTrace(CapturedTrace,isTopLevel)}inherits(CapturedTrace,Error);CapturedTrace.prototype.captureStackTrace=function CapturedTrace$captureStackTrace(ignoreUntil,isTopLevel){captureStackTrace(this,ignoreUntil,isTopLevel)};CapturedTrace.possiblyUnhandledRejection=function CapturedTrace$PossiblyUnhandledRejection(reason){if(typeof console==="object"){var message;if(typeof reason==="object"||typeof reason==="function"){var stack=reason.stack;message="Possibly unhandled "+formatStack(stack,reason)}else{message="Possibly unhandled "+String(reason)}if(typeof console.error==="function"||typeof console.error==="object"){console.error(message)}else{if(typeof console.log==="function"||typeof console.log==="object"){console.log(message)}}}};CapturedTrace.combine=function CapturedTrace$Combine(current,prev){var curLast=current.length-1;for(var i=prev.length-1;i>=0;--i){var line=prev[i];if(current[curLast]===line){current.pop();curLast--}else{break}}current.push("From previous event:");var lines=current.concat(prev);var ret=[];for(var i=0,len=lines.length;i<len;++i){if((rignore.test(lines[i])||(i>0&&!rtraceline.test(lines[i]))&&lines[i]!=="From previous event:")){continue}ret.push(lines[i])}return ret};CapturedTrace.isSupported=function CapturedTrace$IsSupported(){return typeof captureStackTrace==="function"};var captureStackTrace=(function stackDetection(){if(typeof Error.stackTraceLimit==="number"&&typeof Error.captureStackTrace==="function"){rtraceline=/^\s*at\s*/;formatStack=function(stack,error){if(typeof stack==="string"){return stack}if(error.name!==void 0&&error.message!==void 0){return error.name+". "+error.message}return formatNonError(error)};var captureStackTrace=Error.captureStackTrace;return function CapturedTrace$_captureStackTrace(receiver,ignoreUntil){captureStackTrace(receiver,ignoreUntil)}}var err=new Error();if(typeof err.stack==="string"&&typeof"".startsWith==="function"&&(err.stack.startsWith("stackDetection@"))&&stackDetection.name==="stackDetection"){defineProperty(Error,"stackTraceLimit",{writable:true,enumerable:false,configurable:false,value:25});rtraceline=/@/;var rline=/[@\n]/;formatStack=function(stack,error){if(typeof stack==="string"){return(error.name+". "+error.message+"\n"+stack)}if(error.name!==void 0&&error.message!==void 0){return error.name+". "+error.message}return formatNonError(error)};return function captureStackTrace(o){var stack=new Error().stack;var split=stack.split(rline);var len=split.length;var ret="";for(var i=0;i<len;i+=2){ret+=split[i];ret+="@";ret+=split[i+1];ret+="\n"}o.stack=ret}}else{formatStack=function(stack,error){if(typeof stack==="string"){return stack}if((typeof error==="object"||typeof error==="function")&&error.name!==void 0&&error.message!==void 0){return error.name+". "+error.message}return formatNonError(error)};return null}})();return CapturedTrace}},{"./es5.js":11,"./util.js":37}],7:[function(require,module,exports){module.exports=function(NEXT_FILTER){var util=require("./util.js");var errors=require("./errors.js");var tryCatch1=util.tryCatch1;var errorObj=util.errorObj;var keys=require("./es5.js").keys;var TypeError=errors.TypeError;function CatchFilter(instances,callback,promise){this._instances=instances;this._callback=callback;this._promise=promise}function CatchFilter$_safePredicate(predicate,e){var safeObject={};var retfilter=tryCatch1(predicate,safeObject,e);if(retfilter===errorObj){return retfilter}var safeKeys=keys(safeObject);if(safeKeys.length){errorObj.e=new TypeError("Catch filter must inherit from Error or be a simple predicate function");return errorObj}return retfilter}CatchFilter.prototype.doFilter=function CatchFilter$_doFilter(e){var cb=this._callback;var promise=this._promise;var boundTo=promise._isBound()?promise._boundTo:void 0;for(var i=0,len=this._instances.length;i<len;++i){var item=this._instances[i];var itemIsErrorType=item===Error||(item!=null&&item.prototype instanceof Error);if(itemIsErrorType&&e instanceof item){var ret=tryCatch1(cb,boundTo,e);if(ret===errorObj){NEXT_FILTER.e=ret.e;return NEXT_FILTER}return ret}else{if(typeof item==="function"&&!itemIsErrorType){var shouldHandle=CatchFilter$_safePredicate(item,e);if(shouldHandle===errorObj){var trace=errors.canAttach(errorObj.e)?errorObj.e:new Error(errorObj.e+"");this._promise._attachExtraTrace(trace);e=errorObj.e;break}else{if(shouldHandle){var ret=tryCatch1(cb,boundTo,e);if(ret===errorObj){NEXT_FILTER.e=ret.e;return NEXT_FILTER}return ret}}}}}NEXT_FILTER.e=e;return NEXT_FILTER};return CatchFilter}},{"./errors.js":9,"./es5.js":11,"./util.js":37}],8:[function(require,module,exports){var util=require("./util.js");var isPrimitive=util.isPrimitive;var wrapsPrimitiveReceiver=util.wrapsPrimitiveReceiver;module.exports=function(Promise){var returner=function Promise$_returner(){return this};var thrower=function Promise$_thrower(){throw this};var wrapper=function Promise$_wrapper(value,action){if(action===1){return function Promise$_thrower(){throw value}}else{if(action===2){return function Promise$_returner(){return value}}}};Promise.prototype["return"]=Promise.prototype.thenReturn=function Promise$thenReturn(value){if(wrapsPrimitiveReceiver&&isPrimitive(value)){return this._then(wrapper(value,2),void 0,void 0,void 0,void 0)}return this._then(returner,void 0,void 0,value,void 0)};Promise.prototype["throw"]=Promise.prototype.thenThrow=function Promise$thenThrow(reason){if(wrapsPrimitiveReceiver&&isPrimitive(reason)){return this._then(wrapper(reason,1),void 0,void 0,void 0,void 0)}return this._then(thrower,void 0,void 0,reason,void 0)}}},{"./util.js":37}],9:[function(require,module,exports){var global=require("./global.js");var Objectfreeze=require("./es5.js").freeze;var util=require("./util.js");var inherits=util.inherits;var notEnumerableProp=util.notEnumerableProp;var Error=global.Error;function markAsOriginatingFromRejection(e){try{notEnumerableProp(e,"isAsync",true)}catch(ignore){}}function originatesFromRejection(e){if(e==null){return false}return((e instanceof RejectionError)||e.isAsync===true)}function isError(obj){return obj instanceof Error}function canAttach(obj){return isError(obj)}function subError(nameProperty,defaultMessage){function SubError(message){if(!(this instanceof SubError)){return new SubError(message)}this.message=typeof message==="string"?message:defaultMessage;this.name=nameProperty;if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}}inherits(SubError,Error);return SubError}var TypeError=global.TypeError;if(typeof TypeError!=="function"){TypeError=subError("TypeError","type error")}var RangeError=global.RangeError;if(typeof RangeError!=="function"){RangeError=subError("RangeError","range error")}var CancellationError=subError("CancellationError","cancellation error");var TimeoutError=subError("TimeoutError","timeout error");function RejectionError(message){this.name="RejectionError";this.message=message;this.cause=message;this.isAsync=true;if(message instanceof Error){this.message=message.message;this.stack=message.stack}else{if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}}}inherits(RejectionError,Error);var key="__BluebirdErrorTypes__";var errorTypes=global[key];if(!errorTypes){errorTypes=Objectfreeze({CancellationError:CancellationError,TimeoutError:TimeoutError,RejectionError:RejectionError});notEnumerableProp(global,key,errorTypes)}module.exports={Error:Error,TypeError:TypeError,RangeError:RangeError,CancellationError:errorTypes.CancellationError,RejectionError:errorTypes.RejectionError,TimeoutError:errorTypes.TimeoutError,originatesFromRejection:originatesFromRejection,markAsOriginatingFromRejection:markAsOriginatingFromRejection,canAttach:canAttach}},{"./es5.js":11,"./global.js":15,"./util.js":37}],10:[function(require,module,exports){module.exports=function(Promise){var TypeError=require("./errors.js").TypeError;function apiRejection(msg){var error=new TypeError(msg);var ret=Promise.rejected(error);var parent=ret._peekContext();if(parent!=null){parent._attachExtraTrace(error)}return ret}return apiRejection}},{"./errors.js":9}],11:[function(require,module,exports){var isES5=(function(){return this===void 0})();if(isES5){module.exports={freeze:Object.freeze,defineProperty:Object.defineProperty,keys:Object.keys,getPrototypeOf:Object.getPrototypeOf,isArray:Array.isArray,isES5:isES5}}else{var has={}.hasOwnProperty;var str={}.toString;var proto={}.constructor.prototype;function ObjectKeys(o){var ret=[];for(var key in o){if(has.call(o,key)){ret.push(key)}}return ret}function ObjectDefineProperty(o,key,desc){o[key]=desc.value;return o}function ObjectFreeze(obj){return obj}function ObjectGetPrototypeOf(obj){try{return Object(obj).constructor.prototype}catch(e){return proto}}function ArrayIsArray(obj){try{return str.call(obj)==="[object Array]"}catch(e){return false}}module.exports={isArray:ArrayIsArray,keys:ObjectKeys,defineProperty:ObjectDefineProperty,freeze:ObjectFreeze,getPrototypeOf:ObjectGetPrototypeOf,isES5:isES5}}},{}],12:[function(require,module,exports){module.exports=function(Promise){var isArray=require("./util.js").isArray;function Promise$_filter(booleans){var values=this instanceof Promise?this._settledValue:this;var len=values.length;var ret=new Array(len);var j=0;for(var i=0;i<len;++i){if(booleans[i]){ret[j++]=values[i]}}ret.length=j;return ret}var ref={ref:null};Promise.filter=function Promise$Filter(promises,fn){return Promise.map(promises,fn,ref)._then(Promise$_filter,void 0,void 0,ref.ref,void 0)};Promise.prototype.filter=function Promise$filter(fn){return this.map(fn,ref)._then(Promise$_filter,void 0,void 0,ref.ref,void 0)}}},{"./util.js":37}],13:[function(require,module,exports){module.exports=function(Promise,NEXT_FILTER){var util=require("./util.js");var wrapsPrimitiveReceiver=util.wrapsPrimitiveReceiver;var isPrimitive=util.isPrimitive;var thrower=util.thrower;function returnThis(){return this}function throwThis(){throw this}function return$(r){return function Promise$_returner(){return r}}function throw$(r){return function Promise$_thrower(){throw r}}function promisedFinally(ret,reasonOrValue,isFulfilled){var then;if(wrapsPrimitiveReceiver&&isPrimitive(reasonOrValue)){then=isFulfilled?return$(reasonOrValue):throw$(reasonOrValue)}else{then=isFulfilled?returnThis:throwThis}return ret._then(then,thrower,void 0,reasonOrValue,void 0)}function finallyHandler(reasonOrValue){var promise=this.promise;var handler=this.handler;var ret=promise._isBound()?handler.call(promise._boundTo):handler();if(ret!==void 0){var maybePromise=Promise._cast(ret,void 0);if(maybePromise instanceof Promise){return promisedFinally(maybePromise,reasonOrValue,promise.isFulfilled())}}if(promise.isRejected()){NEXT_FILTER.e=reasonOrValue;return NEXT_FILTER}else{return reasonOrValue}}function tapHandler(value){var promise=this.promise;var handler=this.handler;var ret=promise._isBound()?handler.call(promise._boundTo,value):handler(value);if(ret!==void 0){var maybePromise=Promise._cast(ret,void 0);if(maybePromise instanceof Promise){return promisedFinally(maybePromise,value,true)}}return value}Promise.prototype._passThroughHandler=function Promise$_passThroughHandler(handler,isFinally){if(typeof handler!=="function"){return this.then()}var promiseAndHandler={promise:this,handler:handler};return this._then(isFinally?finallyHandler:tapHandler,isFinally?finallyHandler:void 0,void 0,promiseAndHandler,void 0)};Promise.prototype.lastly=Promise.prototype["finally"]=function Promise$finally(handler){return this._passThroughHandler(handler,true)};Promise.prototype.tap=function Promise$tap(handler){return this._passThroughHandler(handler,false)}}},{"./util.js":37}],14:[function(require,module,exports){module.exports=function(Promise,apiRejection,INTERNAL){var PromiseSpawn=require("./promise_spawn.js")(Promise,INTERNAL);var errors=require("./errors.js");var TypeError=errors.TypeError;var deprecated=require("./util.js").deprecated;Promise.coroutine=function Promise$Coroutine(generatorFunction){if(typeof generatorFunction!=="function"){throw new TypeError("generatorFunction must be a function")}var PromiseSpawn$=PromiseSpawn;return function(){var generator=generatorFunction.apply(this,arguments);var spawn=new PromiseSpawn$(void 0,void 0);spawn._generator=generator;spawn._next(void 0);return spawn.promise()}};Promise.coroutine.addYieldHandler=PromiseSpawn.addYieldHandler;Promise.spawn=function Promise$Spawn(generatorFunction){deprecated("Promise.spawn is deprecated. Use Promise.coroutine instead.");if(typeof generatorFunction!=="function"){return apiRejection("generatorFunction must be a function")}var spawn=new PromiseSpawn(generatorFunction,this);var ret=spawn.promise();spawn._run(Promise.spawn);return ret}}},{"./errors.js":9,"./promise_spawn.js":22,"./util.js":37}],15:[function(require,module,exports){module.exports=(function(){if(typeof this!=="undefined"){return this}if(typeof process!=="undefined"&&typeof global!=="undefined"&&typeof process.execPath==="string"){return global}if(typeof window!=="undefined"&&typeof document!=="undefined"&&typeof navigator!=="undefined"&&navigator!==null&&typeof navigator.appName==="string"){if(window.wrappedJSObject!==undefined){return window.wrappedJSObject}return window}})()},{}],16:[function(require,module,exports){module.exports=function(Promise,PromiseArray,INTERNAL,apiRejection){var all=Promise.all;var util=require("./util.js");var canAttach=require("./errors.js").canAttach;var isArray=util.isArray;var _cast=Promise._cast;function unpack(values){return Promise$_Map(values,this[0],this[1],this[2])}function Promise$_Map(promises,fn,useBound,ref){if(typeof fn!=="function"){return apiRejection("fn must be a function")}var receiver=void 0;if(useBound===true){if(promises._isBound()){receiver=promises._boundTo}}else{if(useBound!==false){receiver=useBound}}var shouldUnwrapItems=ref!==void 0;if(shouldUnwrapItems){ref.ref=promises}if(promises instanceof Promise){var pack=[fn,receiver,ref];return promises._then(unpack,void 0,void 0,pack,void 0)}else{if(!isArray(promises)){return apiRejection("expecting an array, a promise or a thenable")}}var promise=new Promise(INTERNAL);if(receiver!==void 0){promise._setBoundTo(receiver)}promise._setTrace(void 0);var mapping=new Mapping(promise,fn,promises,receiver,shouldUnwrapItems);mapping.init();return promise}var pending={};function Mapping(promise,callback,items,receiver,shouldUnwrapItems){this.shouldUnwrapItems=shouldUnwrapItems;this.index=0;this.items=items;this.callback=callback;this.receiver=receiver;this.promise=promise;this.result=new Array(items.length)}util.inherits(Mapping,PromiseArray);Mapping.prototype.init=function Mapping$init(){var items=this.items;var len=items.length;var result=this.result;var isRejected=false;for(var i=0;i<len;++i){var maybePromise=_cast(items[i],void 0);if(maybePromise instanceof Promise){if(maybePromise.isPending()){result[i]=pending;maybePromise._proxyPromiseArray(this,i)}else{if(maybePromise.isFulfilled()){result[i]=maybePromise.value()}else{maybePromise._unsetRejectionIsUnhandled();if(!isRejected){this.reject(maybePromise.reason());isRejected=true}}}}else{result[i]=maybePromise}}if(!isRejected){this.iterate()}};Mapping.prototype.isResolved=function Mapping$isResolved(){return this.promise===null};Mapping.prototype._promiseProgressed=function Mapping$_promiseProgressed(value){if(this.isResolved()){return}this.promise._progress(value)};Mapping.prototype._promiseFulfilled=function Mapping$_promiseFulfilled(value,index){if(this.isResolved()){return}this.result[index]=value;if(this.shouldUnwrapItems){this.items[index]=value}if(this.index===index){this.iterate()}};Mapping.prototype._promiseRejected=function Mapping$_promiseRejected(reason){this.reject(reason)};Mapping.prototype.reject=function Mapping$reject(reason){if(this.isResolved()){return}var trace=canAttach(reason)?reason:new Error(reason+"");this.promise._attachExtraTrace(trace);this.promise._reject(reason,trace)};Mapping.prototype.iterate=function Mapping$iterate(){var i=this.index;var items=this.items;var result=this.result;var len=items.length;var result=this.result;var receiver=this.receiver;var callback=this.callback;for(;i<len;++i){var value=result[i];if(value===pending){this.index=i;return}try{result[i]=callback.call(receiver,value,i,len)}catch(e){return this.reject(e)}}this.promise._follow(all(result));this.items=this.result=this.callback=this.promise=null};Promise.prototype.map=function Promise$map(fn,ref){return Promise$_Map(this,fn,true,ref)};Promise.map=function Promise$Map(promises,fn,ref){return Promise$_Map(promises,fn,false,ref)}}},{"./errors.js":9,"./util.js":37}],17:[function(require,module,exports){module.exports=function(Promise){var util=require("./util.js");var async=require("./async.js");var tryCatch2=util.tryCatch2;var tryCatch1=util.tryCatch1;var errorObj=util.errorObj;function thrower(r){throw r}function Promise$_successAdapter(val,receiver){var nodeback=this;var ret=val===void 0?tryCatch1(nodeback,receiver,null):tryCatch2(nodeback,receiver,null,val);if(ret===errorObj){async.invokeLater(thrower,void 0,ret.e)}}function Promise$_errorAdapter(reason,receiver){var nodeback=this;var ret=tryCatch1(nodeback,receiver,reason);if(ret===errorObj){async.invokeLater(thrower,void 0,ret.e)}}Promise.prototype.nodeify=function Promise$nodeify(nodeback){if(typeof nodeback=="function"){this._then(Promise$_successAdapter,Promise$_errorAdapter,void 0,nodeback,this._isBound()?this._boundTo:null)}return this}}},{"./async.js":2,"./util.js":37}],18:[function(require,module,exports){module.exports=function(Promise,isPromiseArrayProxy){var util=require("./util.js");var async=require("./async.js");var errors=require("./errors.js");var tryCatch1=util.tryCatch1;var errorObj=util.errorObj;Promise.prototype.progressed=function Promise$progressed(handler){return this._then(void 0,void 0,handler,void 0,void 0)};Promise.prototype._progress=function Promise$_progress(progressValue){if(this._isFollowingOrFulfilledOrRejected()){return}this._progressUnchecked(progressValue)};Promise.prototype._progressHandlerAt=function Promise$_progressHandlerAt(index){if(index===0){return this._progressHandler0}return this[index+2-5]};Promise.prototype._doProgressWith=function Promise$_doProgressWith(progression){var progressValue=progression.value;var handler=progression.handler;var promise=progression.promise;var receiver=progression.receiver;this._pushContext();var ret=tryCatch1(handler,receiver,progressValue);this._popContext();if(ret===errorObj){if(ret.e!=null&&ret.e.name!=="StopProgressPropagation"){var trace=errors.canAttach(ret.e)?ret.e:new Error(ret.e+"");promise._attachExtraTrace(trace);promise._progress(ret.e)}}else{if(ret instanceof Promise){ret._then(promise._progress,null,null,promise,void 0)}else{promise._progress(ret)}}};Promise.prototype._progressUnchecked=function Promise$_progressUnchecked(progressValue){if(!this.isPending()){return}var len=this._length();var progress=this._progress;for(var i=0;i<len;i+=5){var handler=this._progressHandlerAt(i);var promise=this._promiseAt(i);if(!(promise instanceof Promise)){var receiver=this._receiverAt(i);if(typeof handler==="function"){handler.call(receiver,progressValue,promise)}else{if(receiver instanceof Promise&&receiver._isProxied()){receiver._progressUnchecked(progressValue)}else{if(isPromiseArrayProxy(receiver,promise)){receiver._promiseProgressed(progressValue,promise)}}}continue}if(typeof handler==="function"){async.invoke(this._doProgressWith,this,{handler:handler,promise:promise,receiver:this._receiverAt(i),value:progressValue})}else{async.invoke(progress,promise,progressValue)}}}}},{"./async.js":2,"./errors.js":9,"./util.js":37}],19:[function(require,module,exports){module.exports=function(){var global=require("./global.js");var util=require("./util.js");var async=require("./async.js");var errors=require("./errors.js");var INTERNAL=function(){};var APPLY={};var NEXT_FILTER={e:null};var PromiseArray=require("./promise_array.js")(Promise,INTERNAL);var CapturedTrace=require("./captured_trace.js")();var CatchFilter=require("./catch_filter.js")(NEXT_FILTER);var PromiseResolver=require("./promise_resolver.js");var isArray=util.isArray;var errorObj=util.errorObj;var tryCatch1=util.tryCatch1;var tryCatch2=util.tryCatch2;var tryCatchApply=util.tryCatchApply;var RangeError=errors.RangeError;var TypeError=errors.TypeError;var CancellationError=errors.CancellationError;var TimeoutError=errors.TimeoutError;var RejectionError=errors.RejectionError;var originatesFromRejection=errors.originatesFromRejection;var markAsOriginatingFromRejection=errors.markAsOriginatingFromRejection;var canAttach=errors.canAttach;var thrower=util.thrower;var apiRejection=require("./errors_api_rejection")(Promise);var makeSelfResolutionError=function Promise$_makeSelfResolutionError(){return new TypeError("circular promise resolution chain")};function isPromise(obj){if(obj===void 0){return false}return obj instanceof Promise}function isPromiseArrayProxy(receiver,promiseSlotValue){if(receiver instanceof PromiseArray){return promiseSlotValue>=0}return false}function Promise(resolver){if(typeof resolver!=="function"){throw new TypeError("the promise constructor requires a resolver function")}if(this.constructor!==Promise){throw new TypeError("the promise constructor cannot be invoked directly")}this._bitField=0;this._fulfillmentHandler0=void 0;this._rejectionHandler0=void 0;this._promise0=void 0;this._receiver0=void 0;this._settledValue=void 0;this._boundTo=void 0;if(resolver!==INTERNAL){this._resolveFromResolver(resolver)}}Promise.prototype.bind=function Promise$bind(thisArg){var ret=new Promise(INTERNAL);ret._setTrace(this);ret._follow(this);ret._setBoundTo(thisArg);if(this._cancellable()){ret._setCancellable();ret._cancellationParent=this}return ret};Promise.prototype.toString=function Promise$toString(){return"[object Promise]"};Promise.prototype.caught=Promise.prototype["catch"]=function Promise$catch(fn){var len=arguments.length;if(len>1){var catchInstances=new Array(len-1),j=0,i;for(i=0;i<len-1;++i){var item=arguments[i];if(typeof item==="function"){catchInstances[j++]=item}else{var catchFilterTypeError=new TypeError("A catch filter must be an error constructor or a filter function");this._attachExtraTrace(catchFilterTypeError);async.invoke(this._reject,this,catchFilterTypeError);return}}catchInstances.length=j;fn=arguments[i];this._resetTrace();var catchFilter=new CatchFilter(catchInstances,fn,this);return this._then(void 0,catchFilter.doFilter,void 0,catchFilter,void 0)}return this._then(void 0,fn,void 0,void 0,void 0)};Promise.prototype.then=function Promise$then(didFulfill,didReject,didProgress){return this._then(didFulfill,didReject,didProgress,void 0,void 0)};Promise.prototype.done=function Promise$done(didFulfill,didReject,didProgress){var promise=this._then(didFulfill,didReject,didProgress,void 0,void 0);promise._setIsFinal()};Promise.prototype.spread=function Promise$spread(didFulfill,didReject){return this._then(didFulfill,didReject,void 0,APPLY,void 0)};Promise.prototype.isCancellable=function Promise$isCancellable(){return !this.isResolved()&&this._cancellable()};Promise.prototype.toJSON=function Promise$toJSON(){var ret={isFulfilled:false,isRejected:false,fulfillmentValue:void 0,rejectionReason:void 0};if(this.isFulfilled()){ret.fulfillmentValue=this._settledValue;ret.isFulfilled=true}else{if(this.isRejected()){ret.rejectionReason=this._settledValue;ret.isRejected=true}}return ret};Promise.prototype.all=function Promise$all(){return Promise$_all(this,true)};Promise.is=isPromise;function Promise$_all(promises,useBound){return Promise$_CreatePromiseArray(promises,PromiseArray,useBound===true&&promises._isBound()?promises._boundTo:void 0).promise()}Promise.all=function Promise$All(promises){return Promise$_all(promises,false)};Promise.join=function Promise$Join(){var $_len=arguments.length;var args=new Array($_len);for(var $_i=0;$_i<$_len;++$_i){args[$_i]=arguments[$_i]}return Promise$_CreatePromiseArray(args,PromiseArray,void 0).promise()};Promise.resolve=Promise.fulfilled=function Promise$Resolve(value){var ret=new Promise(INTERNAL);ret._setTrace(void 0);if(ret._tryFollow(value)){return ret}ret._cleanValues();ret._setFulfilled();ret._settledValue=value;return ret};Promise.reject=Promise.rejected=function Promise$Reject(reason){var ret=new Promise(INTERNAL);ret._setTrace(void 0);markAsOriginatingFromRejection(reason);ret._cleanValues();ret._setRejected();ret._settledValue=reason;if(!canAttach(reason)){var trace=new Error(reason+"");ret._setCarriedStackTrace(trace)}ret._ensurePossibleRejectionHandled();return ret};Promise.prototype.error=function Promise$_error(fn){return this.caught(originatesFromRejection,fn)};Promise.prototype._resolveFromSyncValue=function Promise$_resolveFromSyncValue(value){if(value===errorObj){this._cleanValues();this._setRejected();this._settledValue=value.e;this._ensurePossibleRejectionHandled()}else{var maybePromise=Promise._cast(value,void 0);if(maybePromise instanceof Promise){this._follow(maybePromise)}else{this._cleanValues();this._setFulfilled();this._settledValue=value}}};Promise.method=function Promise$_Method(fn){if(typeof fn!=="function"){throw new TypeError("fn must be a function")}return function Promise$_method(){var value;switch(arguments.length){case 0:value=tryCatch1(fn,this,void 0);break;case 1:value=tryCatch1(fn,this,arguments[0]);break;case 2:value=tryCatch2(fn,this,arguments[0],arguments[1]);break;default:var $_len=arguments.length;var args=new Array($_len);for(var $_i=0;$_i<$_len;++$_i){args[$_i]=arguments[$_i]}value=tryCatchApply(fn,args,this);break}var ret=new Promise(INTERNAL);ret._setTrace(void 0);ret._resolveFromSyncValue(value);return ret}};Promise.attempt=Promise["try"]=function Promise$_Try(fn,args,ctx){if(typeof fn!=="function"){return apiRejection("fn must be a function")}var value=isArray(args)?tryCatchApply(fn,args,ctx):tryCatch1(fn,ctx,args);var ret=new Promise(INTERNAL);ret._setTrace(void 0);ret._resolveFromSyncValue(value);return ret};Promise.defer=Promise.pending=function Promise$Defer(){var promise=new Promise(INTERNAL);promise._setTrace(void 0);return new PromiseResolver(promise)};Promise.bind=function Promise$Bind(thisArg){var ret=new Promise(INTERNAL);ret._setTrace(void 0);ret._setFulfilled();ret._setBoundTo(thisArg);return ret};Promise.cast=function Promise$_Cast(obj){var ret=Promise._cast(obj,void 0);if(!(ret instanceof Promise)){return Promise.resolve(ret)}return ret};Promise.onPossiblyUnhandledRejection=function Promise$OnPossiblyUnhandledRejection(fn){CapturedTrace.possiblyUnhandledRejection=typeof fn==="function"?fn:void 0};var unhandledRejectionHandled;Promise.onUnhandledRejectionHandled=function Promise$onUnhandledRejectionHandled(fn){unhandledRejectionHandled=typeof fn==="function"?fn:void 0};var debugging=false||!!(typeof process!=="undefined"&&typeof process.execPath==="string"&&typeof process.env==="object"&&(process.env.BLUEBIRD_DEBUG||process.env.NODE_ENV==="development"));Promise.longStackTraces=function Promise$LongStackTraces(){if(async.haveItemsQueued()&&debugging===false){throw new Error("cannot enable long stack traces after promises have been created")}debugging=CapturedTrace.isSupported()};Promise.hasLongStackTraces=function Promise$HasLongStackTraces(){return debugging&&CapturedTrace.isSupported()};Promise.prototype._setProxyHandlers=function Promise$_setProxyHandlers(receiver,promiseSlotValue){var index=this._length();if(index>=524287-5){index=0;this._setLength(0)}if(index===0){this._promise0=promiseSlotValue;this._receiver0=receiver}else{var i=index-5;this[i+3]=promiseSlotValue;this[i+4]=receiver;this[i+0]=this[i+1]=this[i+2]=void 0}this._setLength(index+5)};Promise.prototype._proxyPromiseArray=function Promise$_proxyPromiseArray(promiseArray,index){this._setProxyHandlers(promiseArray,index)};Promise.prototype._proxyPromise=function Promise$_proxyPromise(promise){promise._setProxied();this._setProxyHandlers(promise,-1)};Promise.prototype._then=function Promise$_then(didFulfill,didReject,didProgress,receiver,internalData){var haveInternalData=internalData!==void 0;var ret=haveInternalData?internalData:new Promise(INTERNAL);if(debugging&&!haveInternalData){var haveSameContext=this._peekContext()===this._traceParent;ret._traceParent=haveSameContext?this._traceParent:this;ret._setTrace(this)}if(!haveInternalData&&this._isBound()){ret._setBoundTo(this._boundTo)}var callbackIndex=this._addCallbacks(didFulfill,didReject,didProgress,ret,receiver);if(!haveInternalData&&this._cancellable()){ret._setCancellable();ret._cancellationParent=this}if(this.isResolved()){async.invoke(this._queueSettleAt,this,callbackIndex)}return ret};Promise.prototype._length=function Promise$_length(){return this._bitField&524287};Promise.prototype._isFollowingOrFulfilledOrRejected=function Promise$_isFollowingOrFulfilledOrRejected(){return(this._bitField&939524096)>0};Promise.prototype._isFollowing=function Promise$_isFollowing(){return(this._bitField&536870912)===536870912};Promise.prototype._setLength=function Promise$_setLength(len){this._bitField=(this._bitField&-524288)|(len&524287)};Promise.prototype._setFulfilled=function Promise$_setFulfilled(){this._bitField=this._bitField|268435456};Promise.prototype._setRejected=function Promise$_setRejected(){this._bitField=this._bitField|134217728};Promise.prototype._setFollowing=function Promise$_setFollowing(){this._bitField=this._bitField|536870912};Promise.prototype._setIsFinal=function Promise$_setIsFinal(){this._bitField=this._bitField|33554432};Promise.prototype._isFinal=function Promise$_isFinal(){return(this._bitField&33554432)>0};Promise.prototype._cancellable=function Promise$_cancellable(){return(this._bitField&67108864)>0};Promise.prototype._setCancellable=function Promise$_setCancellable(){this._bitField=this._bitField|67108864};Promise.prototype._unsetCancellable=function Promise$_unsetCancellable(){this._bitField=this._bitField&(~67108864)};Promise.prototype._setRejectionIsUnhandled=function Promise$_setRejectionIsUnhandled(){this._bitField=this._bitField|2097152};Promise.prototype._unsetRejectionIsUnhandled=function Promise$_unsetRejectionIsUnhandled(){this._bitField=this._bitField&(~2097152);if(this._isUnhandledRejectionNotified()){this._unsetUnhandledRejectionIsNotified();this._notifyUnhandledRejectionIsHandled()}};Promise.prototype._isRejectionUnhandled=function Promise$_isRejectionUnhandled(){return(this._bitField&2097152)>0};Promise.prototype._setUnhandledRejectionIsNotified=function Promise$_setUnhandledRejectionIsNotified(){this._bitField=this._bitField|524288};Promise.prototype._unsetUnhandledRejectionIsNotified=function Promise$_unsetUnhandledRejectionIsNotified(){this._bitField=this._bitField&(~524288)};Promise.prototype._isUnhandledRejectionNotified=function Promise$_isUnhandledRejectionNotified(){return(this._bitField&524288)>0};Promise.prototype._setCarriedStackTrace=function Promise$_setCarriedStackTrace(capturedTrace){this._bitField=this._bitField|1048576;this._fulfillmentHandler0=capturedTrace};Promise.prototype._unsetCarriedStackTrace=function Promise$_unsetCarriedStackTrace(){this._bitField=this._bitField&(~1048576);this._fulfillmentHandler0=void 0};Promise.prototype._isCarryingStackTrace=function Promise$_isCarryingStackTrace(){return(this._bitField&1048576)>0};Promise.prototype._getCarriedStackTrace=function Promise$_getCarriedStackTrace(){return this._isCarryingStackTrace()?this._fulfillmentHandler0:void 0};Promise.prototype._receiverAt=function Promise$_receiverAt(index){var ret;if(index===0){ret=this._receiver0}else{ret=this[index+4-5]}if(this._isBound()&&ret===void 0){return this._boundTo}return ret};Promise.prototype._promiseAt=function Promise$_promiseAt(index){if(index===0){return this._promise0}return this[index+3-5]};Promise.prototype._fulfillmentHandlerAt=function Promise$_fulfillmentHandlerAt(index){if(index===0){return this._fulfillmentHandler0}return this[index+0-5]};Promise.prototype._rejectionHandlerAt=function Promise$_rejectionHandlerAt(index){if(index===0){return this._rejectionHandler0}return this[index+1-5]};Promise.prototype._unsetAt=function Promise$_unsetAt(index){if(index===0){this._rejectionHandler0=this._progressHandler0=this._promise0=this._receiver0=void 0;if(!this._isCarryingStackTrace()){this._fulfillmentHandler0=void 0}}else{this[index-5+0]=this[index-5+1]=this[index-5+2]=this[index-5+3]=this[index-5+4]=void 0}};Promise.prototype._resolveFromResolver=function Promise$_resolveFromResolver(resolver){var promise=this;this._setTrace(void 0);this._pushContext();function Promise$_resolver(val){if(promise._tryFollow(val)){return}promise._fulfill(val)}function Promise$_rejecter(val){var trace=canAttach(val)?val:new Error(val+"");promise._attachExtraTrace(trace);markAsOriginatingFromRejection(val);promise._reject(val,trace===val?void 0:trace)}var r=tryCatch2(resolver,void 0,Promise$_resolver,Promise$_rejecter);this._popContext();if(r!==void 0&&r===errorObj){var e=r.e;var trace=canAttach(e)?e:new Error(e+"");promise._reject(e,trace)}};Promise.prototype._addCallbacks=function Promise$_addCallbacks(fulfill,reject,progress,promise,receiver){var index=this._length();if(index>=524287-5){index=0;this._setLength(0)}if(index===0){this._promise0=promise;if(receiver!==void 0){this._receiver0=receiver}if(typeof fulfill==="function"&&!this._isCarryingStackTrace()){this._fulfillmentHandler0=fulfill}if(typeof reject==="function"){this._rejectionHandler0=reject}if(typeof progress==="function"){this._progressHandler0=progress}}else{var i=index-5;this[i+3]=promise;this[i+4]=receiver;this[i+0]=typeof fulfill==="function"?fulfill:void 0;this[i+1]=typeof reject==="function"?reject:void 0;this[i+2]=typeof progress==="function"?progress:void 0}this._setLength(index+5);return index};Promise.prototype._setBoundTo=function Promise$_setBoundTo(obj){if(obj!==void 0){this._bitField=this._bitField|8388608;this._boundTo=obj}else{this._bitField=this._bitField&(~8388608)}};Promise.prototype._isBound=function Promise$_isBound(){return(this._bitField&8388608)===8388608};Promise.prototype._spreadSlowCase=function Promise$_spreadSlowCase(targetFn,promise,values,boundTo){var promiseForAll=Promise$_CreatePromiseArray(values,PromiseArray,boundTo).promise()._then(function(){return targetFn.apply(boundTo,arguments)},void 0,void 0,APPLY,void 0);promise._follow(promiseForAll)};Promise.prototype._callSpread=function Promise$_callSpread(handler,promise,value,localDebugging){var boundTo=this._isBound()?this._boundTo:void 0;if(isArray(value)){for(var i=0,len=value.length;i<len;++i){if(isPromise(Promise._cast(value[i],void 0))){this._spreadSlowCase(handler,promise,value,boundTo);return}}}if(localDebugging){promise._pushContext()}return tryCatchApply(handler,value,boundTo)};Promise.prototype._callHandler=function Promise$_callHandler(handler,receiver,promise,value,localDebugging){var x;if(receiver===APPLY&&!this.isRejected()){x=this._callSpread(handler,promise,value,localDebugging)}else{if(localDebugging){promise._pushContext()}x=tryCatch1(handler,receiver,value)}if(localDebugging){promise._popContext()}return x};Promise.prototype._settlePromiseFromHandler=function Promise$_settlePromiseFromHandler(handler,receiver,value,promise){if(!isPromise(promise)){handler.call(receiver,value,promise);return}var localDebugging=debugging;var x=this._callHandler(handler,receiver,promise,value,localDebugging);if(promise._isFollowing()){return}if(x===errorObj||x===promise||x===NEXT_FILTER){var err=x===promise?makeSelfResolutionError():x.e;var trace=canAttach(err)?err:new Error(err+"");if(x!==NEXT_FILTER){promise._attachExtraTrace(trace)}promise._rejectUnchecked(err,trace)}else{var castValue=Promise._cast(x,promise);if(isPromise(castValue)){if(castValue.isRejected()&&!castValue._isCarryingStackTrace()&&!canAttach(castValue._settledValue)){var trace=new Error(castValue._settledValue+"");promise._attachExtraTrace(trace);castValue._setCarriedStackTrace(trace)}promise._follow(castValue);if(castValue._cancellable()){promise._cancellationParent=castValue;promise._setCancellable()}}else{promise._fulfillUnchecked(x)}}};Promise.prototype._follow=function Promise$_follow(promise){this._setFollowing();if(promise.isPending()){if(promise._cancellable()){this._cancellationParent=promise;this._setCancellable()}promise._proxyPromise(this)}else{if(promise.isFulfilled()){this._fulfillUnchecked(promise._settledValue)}else{this._rejectUnchecked(promise._settledValue,promise._getCarriedStackTrace())}}if(promise._isRejectionUnhandled()){promise._unsetRejectionIsUnhandled()}if(debugging&&promise._traceParent==null){promise._traceParent=this}};Promise.prototype._tryFollow=function Promise$_tryFollow(value){if(this._isFollowingOrFulfilledOrRejected()||value===this){return false}var maybePromise=Promise._cast(value,void 0);if(!isPromise(maybePromise)){return false}this._follow(maybePromise);return true};Promise.prototype._resetTrace=function Promise$_resetTrace(){if(debugging){this._trace=new CapturedTrace(this._peekContext()===void 0)}};Promise.prototype._setTrace=function Promise$_setTrace(parent){if(debugging){var context=this._peekContext();this._traceParent=context;var isTopLevel=context===void 0;if(parent!==void 0&&parent._traceParent===context){this._trace=parent._trace}else{this._trace=new CapturedTrace(isTopLevel)}}return this};Promise.prototype._attachExtraTrace=function Promise$_attachExtraTrace(error){if(debugging){var promise=this;var stack=error.stack;stack=typeof stack==="string"?stack.split("\n"):[];var headerLineCount=1;while(promise!=null&&promise._trace!=null){stack=CapturedTrace.combine(stack,promise._trace.stack.split("\n"));promise=promise._traceParent}var max=Error.stackTraceLimit+headerLineCount;var len=stack.length;if(len>max){stack.length=max}if(stack.length<=headerLineCount){error.stack="(No stack trace)"}else{error.stack=stack.join("\n")}}};Promise.prototype._cleanValues=function Promise$_cleanValues(){if(this._cancellable()){this._cancellationParent=void 0}};Promise.prototype._fulfill=function Promise$_fulfill(value){if(this._isFollowingOrFulfilledOrRejected()){return}this._fulfillUnchecked(value)};Promise.prototype._reject=function Promise$_reject(reason,carriedStackTrace){if(this._isFollowingOrFulfilledOrRejected()){return}this._rejectUnchecked(reason,carriedStackTrace)};Promise.prototype._settlePromiseAt=function Promise$_settlePromiseAt(index){var handler=this.isFulfilled()?this._fulfillmentHandlerAt(index):this._rejectionHandlerAt(index);var value=this._settledValue;var receiver=this._receiverAt(index);var promise=this._promiseAt(index);if(typeof handler==="function"){this._settlePromiseFromHandler(handler,receiver,value,promise)}else{var done=false;var isFulfilled=this.isFulfilled();if(receiver!==void 0){if(receiver instanceof Promise&&receiver._isProxied()){receiver._unsetProxied();if(isFulfilled){receiver._fulfillUnchecked(value)}else{receiver._rejectUnchecked(value,this._getCarriedStackTrace())}done=true}else{if(isPromiseArrayProxy(receiver,promise)){if(isFulfilled){receiver._promiseFulfilled(value,promise)}else{receiver._promiseRejected(value,promise)}done=true}}}if(!done){if(isFulfilled){promise._fulfill(value)}else{promise._reject(value,this._getCarriedStackTrace())}}}if(index>=256){this._queueGC()}};Promise.prototype._isProxied=function Promise$_isProxied(){return(this._bitField&4194304)===4194304};Promise.prototype._setProxied=function Promise$_setProxied(){this._bitField=this._bitField|4194304};Promise.prototype._unsetProxied=function Promise$_unsetProxied(){this._bitField=this._bitField&(~4194304)};Promise.prototype._isGcQueued=function Promise$_isGcQueued(){return(this._bitField&-1073741824)===-1073741824};Promise.prototype._setGcQueued=function Promise$_setGcQueued(){this._bitField=this._bitField|-1073741824};Promise.prototype._unsetGcQueued=function Promise$_unsetGcQueued(){this._bitField=this._bitField&(~-1073741824)};Promise.prototype._queueGC=function Promise$_queueGC(){if(this._isGcQueued()){return}this._setGcQueued();async.invokeLater(this._gc,this,void 0)};Promise.prototype._gc=function Promise$gc(){var len=this._length();this._unsetAt(0);for(var i=0;i<len;i++){delete this[i]}this._setLength(0);this._unsetGcQueued()};Promise.prototype._queueSettleAt=function Promise$_queueSettleAt(index){if(this._isRejectionUnhandled()){this._unsetRejectionIsUnhandled()}async.invoke(this._settlePromiseAt,this,index)};Promise.prototype._fulfillUnchecked=function Promise$_fulfillUnchecked(value){if(!this.isPending()){return}if(value===this){var err=makeSelfResolutionError();this._attachExtraTrace(err);return this._rejectUnchecked(err,void 0)}this._cleanValues();this._setFulfilled();this._settledValue=value;var len=this._length();if(len>0){async.invoke(this._settlePromises,this,len)}};Promise.prototype._rejectUncheckedCheckError=function Promise$_rejectUncheckedCheckError(reason){var trace=canAttach(reason)?reason:new Error(reason+"");this._rejectUnchecked(reason,trace===reason?void 0:trace)};Promise.prototype._rejectUnchecked=function Promise$_rejectUnchecked(reason,trace){if(!this.isPending()){return}if(reason===this){var err=makeSelfResolutionError();this._attachExtraTrace(err);return this._rejectUnchecked(err)}this._cleanValues();this._setRejected();this._settledValue=reason;if(this._isFinal()){async.invokeLater(thrower,void 0,trace===void 0?reason:trace);return}var len=this._length();if(trace!==void 0){this._setCarriedStackTrace(trace)}if(len>0){async.invoke(this._rejectPromises,this,null)}else{this._ensurePossibleRejectionHandled()}};Promise.prototype._rejectPromises=function Promise$_rejectPromises(){this._settlePromises();this._unsetCarriedStackTrace()};Promise.prototype._settlePromises=function Promise$_settlePromises(){var len=this._length();for(var i=0;i<len;i+=5){this._settlePromiseAt(i)}};Promise.prototype._ensurePossibleRejectionHandled=function Promise$_ensurePossibleRejectionHandled(){this._setRejectionIsUnhandled();if(CapturedTrace.possiblyUnhandledRejection!==void 0){async.invokeLater(this._notifyUnhandledRejection,this,void 0)}};Promise.prototype._notifyUnhandledRejectionIsHandled=function Promise$_notifyUnhandledRejectionIsHandled(){if(typeof unhandledRejectionHandled==="function"){async.invokeLater(unhandledRejectionHandled,void 0,this)}};Promise.prototype._notifyUnhandledRejection=function Promise$_notifyUnhandledRejection(){if(this._isRejectionUnhandled()){var reason=this._settledValue;var trace=this._getCarriedStackTrace();this._setUnhandledRejectionIsNotified();if(trace!==void 0){this._unsetCarriedStackTrace();reason=trace}if(typeof CapturedTrace.possiblyUnhandledRejection==="function"){CapturedTrace.possiblyUnhandledRejection(reason,this)}}};var contextStack=[];Promise.prototype._peekContext=function Promise$_peekContext(){var lastIndex=contextStack.length-1;if(lastIndex>=0){return contextStack[lastIndex]}return void 0};Promise.prototype._pushContext=function Promise$_pushContext(){if(!debugging){return}contextStack.push(this)};Promise.prototype._popContext=function Promise$_popContext(){if(!debugging){return}contextStack.pop()};function Promise$_CreatePromiseArray(promises,PromiseArrayConstructor,boundTo){var list=null;if(isArray(promises)){list=promises}else{list=Promise._cast(promises,void 0);if(list!==promises){list._setBoundTo(boundTo)}else{if(!isPromise(list)){list=null}}}if(list!==null){return new PromiseArrayConstructor(list,boundTo)}return{promise:function(){return apiRejection("expecting an array, a promise or a thenable")}}}var old=global.Promise;Promise.noConflict=function(){if(global.Promise===Promise){global.Promise=old}return Promise};if(!CapturedTrace.isSupported()){Promise.longStackTraces=function(){};debugging=false}Promise._makeSelfResolutionError=makeSelfResolutionError;require("./finally.js")(Promise,NEXT_FILTER);require("./direct_resolve.js")(Promise);require("./thenables.js")(Promise,INTERNAL);require("./synchronous_inspection.js")(Promise);Promise.RangeError=RangeError;Promise.CancellationError=CancellationError;Promise.TimeoutError=TimeoutError;Promise.TypeError=TypeError;Promise.RejectionError=RejectionError;util.toFastProperties(Promise);util.toFastProperties(Promise.prototype);require("./timers.js")(Promise,INTERNAL);require("./any.js")(Promise,Promise$_CreatePromiseArray,PromiseArray);require("./race.js")(Promise,INTERNAL);require("./call_get.js")(Promise);require("./filter.js")(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection);require("./generators.js")(Promise,apiRejection,INTERNAL);require("./map.js")(Promise,PromiseArray,INTERNAL,apiRejection);require("./nodeify.js")(Promise);require("./promisify.js")(Promise,INTERNAL);require("./props.js")(Promise,PromiseArray);require("./reduce.js")(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection,INTERNAL);require("./settle.js")(Promise,Promise$_CreatePromiseArray,PromiseArray);require("./some.js")(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection);require("./progress.js")(Promise,isPromiseArrayProxy);require("./cancel.js")(Promise,INTERNAL);Promise.prototype=Promise.prototype;return Promise}},{"./any.js":1,"./async.js":2,"./call_get.js":4,"./cancel.js":5,"./captured_trace.js":6,"./catch_filter.js":7,"./direct_resolve.js":8,"./errors.js":9,"./errors_api_rejection":10,"./filter.js":12,"./finally.js":13,"./generators.js":14,"./global.js":15,"./map.js":16,"./nodeify.js":17,"./progress.js":18,"./promise_array.js":20,"./promise_resolver.js":21,"./promisify.js":23,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":32,"./synchronous_inspection.js":34,"./thenables.js":35,"./timers.js":36,"./util.js":37}],20:[function(require,module,exports){module.exports=function(Promise,INTERNAL){var canAttach=require("./errors.js").canAttach;var util=require("./util.js");var async=require("./async.js");var hasOwn={}.hasOwnProperty;var isArray=util.isArray;function toResolutionValue(val){switch(val){case -1:return void 0;case -2:return[];case -3:return{}}}function PromiseArray(values,boundTo){var promise=this._promise=new Promise(INTERNAL);var parent=void 0;if(values instanceof Promise){parent=values;if(values._cancellable()){promise._setCancellable();promise._cancellationParent=values}if(values._isBound()){promise._setBoundTo(boundTo)}}promise._setTrace(parent);this._values=values;this._length=0;this._totalResolved=0;this._init(void 0,-2)}PromiseArray.PropertiesPromiseArray=function(){};PromiseArray.prototype.length=function PromiseArray$length(){return this._length};PromiseArray.prototype.promise=function PromiseArray$promise(){return this._promise};PromiseArray.prototype._init=function PromiseArray$_init(_,resolveValueIfEmpty){var values=this._values;if(values instanceof Promise){if(values.isFulfilled()){values=values._settledValue;if(!isArray(values)){var err=new Promise.TypeError("expecting an array, a promise or a thenable");this.__hardReject__(err);return}this._values=values}else{if(values.isPending()){values._then(this._init,this._reject,void 0,this,resolveValueIfEmpty);return}else{values._unsetRejectionIsUnhandled();this._reject(values._settledValue);return}}}if(values.length===0){this._resolve(toResolutionValue(resolveValueIfEmpty));return}var len=values.length;var newLen=len;var newValues;if(this instanceof PromiseArray.PropertiesPromiseArray){newValues=this._values}else{newValues=new Array(len)}var isDirectScanNeeded=false;for(var i=0;i<len;++i){var promise=values[i];if(promise===void 0&&!hasOwn.call(values,i)){newLen--;continue}var maybePromise=Promise._cast(promise,void 0);if(maybePromise instanceof Promise){if(maybePromise.isPending()){maybePromise._proxyPromiseArray(this,i)}else{maybePromise._unsetRejectionIsUnhandled();isDirectScanNeeded=true}}else{isDirectScanNeeded=true}newValues[i]=maybePromise}if(newLen===0){if(resolveValueIfEmpty===-2){this._resolve(newValues)}else{this._resolve(toResolutionValue(resolveValueIfEmpty))}return}this._values=newValues;this._length=newLen;if(isDirectScanNeeded){var scanMethod=newLen===len?this._scanDirectValues:this._scanDirectValuesHoled;async.invoke(scanMethod,this,len)}};PromiseArray.prototype._settlePromiseAt=function PromiseArray$_settlePromiseAt(index){var value=this._values[index];if(!(value instanceof Promise)){this._promiseFulfilled(value,index)}else{if(value.isFulfilled()){this._promiseFulfilled(value._settledValue,index)}else{if(value.isRejected()){this._promiseRejected(value._settledValue,index)}}}};PromiseArray.prototype._scanDirectValuesHoled=function PromiseArray$_scanDirectValuesHoled(len){for(var i=0;i<len;++i){if(this._isResolved()){break}if(hasOwn.call(this._values,i)){this._settlePromiseAt(i)}}};PromiseArray.prototype._scanDirectValues=function PromiseArray$_scanDirectValues(len){for(var i=0;i<len;++i){if(this._isResolved()){break}this._settlePromiseAt(i)}};PromiseArray.prototype._isResolved=function PromiseArray$_isResolved(){return this._values===null};PromiseArray.prototype._resolve=function PromiseArray$_resolve(value){this._values=null;this._promise._fulfill(value)};PromiseArray.prototype.__hardReject__=PromiseArray.prototype._reject=function PromiseArray$_reject(reason){this._values=null;var trace=canAttach(reason)?reason:new Error(reason+"");this._promise._attachExtraTrace(trace);this._promise._reject(reason,trace)};PromiseArray.prototype._promiseProgressed=function PromiseArray$_promiseProgressed(progressValue,index){if(this._isResolved()){return}this._promise._progress({index:index,value:progressValue})};PromiseArray.prototype._promiseFulfilled=function PromiseArray$_promiseFulfilled(value,index){if(this._isResolved()){return}this._values[index]=value;var totalResolved=++this._totalResolved;if(totalResolved>=this._length){this._resolve(this._values)}};PromiseArray.prototype._promiseRejected=function PromiseArray$_promiseRejected(reason,index){if(this._isResolved()){return}this._totalResolved++;this._reject(reason)};return PromiseArray}},{"./async.js":2,"./errors.js":9,"./util.js":37}],21:[function(require,module,exports){var util=require("./util.js");var maybeWrapAsError=util.maybeWrapAsError;var errors=require("./errors.js");var TimeoutError=errors.TimeoutError;var RejectionError=errors.RejectionError;var async=require("./async.js");var haveGetters=util.haveGetters;var es5=require("./es5.js");function isUntypedError(obj){return obj instanceof Error&&es5.getPrototypeOf(obj)===Error.prototype}function wrapAsRejectionError(obj){var ret;if(isUntypedError(obj)){ret=new RejectionError(obj)}else{ret=obj}errors.markAsOriginatingFromRejection(ret);return ret}function nodebackForPromise(promise){function PromiseResolver$_callback(err,value){if(promise===null){return}if(err){var wrapped=wrapAsRejectionError(maybeWrapAsError(err));promise._attachExtraTrace(wrapped);promise._reject(wrapped)}else{if(arguments.length>2){var $_len=arguments.length;var args=new Array($_len-1);for(var $_i=1;$_i<$_len;++$_i){args[$_i-1]=arguments[$_i]}promise._fulfill(args)}else{promise._fulfill(value)}}promise=null}return PromiseResolver$_callback}var PromiseResolver;if(!haveGetters){PromiseResolver=function PromiseResolver(promise){this.promise=promise;this.asCallback=nodebackForPromise(promise);this.callback=this.asCallback}}else{PromiseResolver=function PromiseResolver(promise){this.promise=promise}}if(haveGetters){var prop={get:function(){return nodebackForPromise(this.promise)}};es5.defineProperty(PromiseResolver.prototype,"asCallback",prop);es5.defineProperty(PromiseResolver.prototype,"callback",prop)}PromiseResolver._nodebackForPromise=nodebackForPromise;PromiseResolver.prototype.toString=function PromiseResolver$toString(){return"[object PromiseResolver]"};PromiseResolver.prototype.resolve=PromiseResolver.prototype.fulfill=function PromiseResolver$resolve(value){var promise=this.promise;if(promise._tryFollow(value)){return}async.invoke(promise._fulfill,promise,value)};PromiseResolver.prototype.reject=function PromiseResolver$reject(reason){var promise=this.promise;errors.markAsOriginatingFromRejection(reason);var trace=errors.canAttach(reason)?reason:new Error(reason+"");promise._attachExtraTrace(trace);async.invoke(promise._reject,promise,reason);if(trace!==reason){async.invoke(this._setCarriedStackTrace,this,trace)}};PromiseResolver.prototype.progress=function PromiseResolver$progress(value){async.invoke(this.promise._progress,this.promise,value)};PromiseResolver.prototype.cancel=function PromiseResolver$cancel(){async.invoke(this.promise.cancel,this.promise,void 0)};PromiseResolver.prototype.timeout=function PromiseResolver$timeout(){this.reject(new TimeoutError("timeout"))};PromiseResolver.prototype.isResolved=function PromiseResolver$isResolved(){return this.promise.isResolved()};PromiseResolver.prototype.toJSON=function PromiseResolver$toJSON(){return this.promise.toJSON()};PromiseResolver.prototype._setCarriedStackTrace=function PromiseResolver$_setCarriedStackTrace(trace){if(this.promise.isRejected()){this.promise._setCarriedStackTrace(trace)}};module.exports=PromiseResolver},{"./async.js":2,"./errors.js":9,"./es5.js":11,"./util.js":37}],22:[function(require,module,exports){module.exports=function(Promise,INTERNAL){var errors=require("./errors.js");var TypeError=errors.TypeError;var util=require("./util.js");var isArray=util.isArray;var errorObj=util.errorObj;var tryCatch1=util.tryCatch1;var yieldHandlers=[];function promiseFromYieldHandler(value){var _yieldHandlers=yieldHandlers;var _errorObj=errorObj;var _Promise=Promise;var len=_yieldHandlers.length;for(var i=0;i<len;++i){var result=tryCatch1(_yieldHandlers[i],void 0,value);if(result===_errorObj){return _Promise.reject(_errorObj.e)}var maybePromise=_Promise._cast(result,promiseFromYieldHandler,void 0);if(maybePromise instanceof _Promise){return maybePromise}}return null}function PromiseSpawn(generatorFunction,receiver){var promise=this._promise=new Promise(INTERNAL);promise._setTrace(void 0);this._generatorFunction=generatorFunction;this._receiver=receiver;this._generator=void 0}PromiseSpawn.prototype.promise=function PromiseSpawn$promise(){return this._promise};PromiseSpawn.prototype._run=function PromiseSpawn$_run(){this._generator=this._generatorFunction.call(this._receiver);this._receiver=this._generatorFunction=void 0;this._next(void 0)};PromiseSpawn.prototype._continue=function PromiseSpawn$_continue(result){if(result===errorObj){this._generator=void 0;var trace=errors.canAttach(result.e)?result.e:new Error(result.e+"");this._promise._attachExtraTrace(trace);this._promise._reject(result.e,trace);return}var value=result.value;if(result.done===true){this._generator=void 0;if(!this._promise._tryFollow(value)){this._promise._fulfill(value)}}else{var maybePromise=Promise._cast(value,PromiseSpawn$_continue,void 0);if(!(maybePromise instanceof Promise)){if(isArray(maybePromise)){maybePromise=Promise.all(maybePromise)}else{maybePromise=promiseFromYieldHandler(maybePromise)}if(maybePromise===null){this._throw(new TypeError("A value was yielded that could not be treated as a promise"));return}}maybePromise._then(this._next,this._throw,void 0,this,null)}};PromiseSpawn.prototype._throw=function PromiseSpawn$_throw(reason){if(errors.canAttach(reason)){this._promise._attachExtraTrace(reason)}this._continue(tryCatch1(this._generator["throw"],this._generator,reason))};PromiseSpawn.prototype._next=function PromiseSpawn$_next(value){this._continue(tryCatch1(this._generator.next,this._generator,value))};PromiseSpawn.addYieldHandler=function PromiseSpawn$AddYieldHandler(fn){if(typeof fn!=="function"){throw new TypeError("fn must be a function")}yieldHandlers.push(fn)};return PromiseSpawn}},{"./errors.js":9,"./util.js":37}],23:[function(require,module,exports){module.exports=function(Promise,INTERNAL){var THIS={};var util=require("./util.js");var es5=require("./es5.js");var nodebackForPromise=require("./promise_resolver.js")._nodebackForPromise;var withAppended=util.withAppended;var maybeWrapAsError=util.maybeWrapAsError;var canEvaluate=util.canEvaluate;var deprecated=util.deprecated;var TypeError=require("./errors").TypeError;var rasyncSuffix=new RegExp("Async$");function isPromisified(fn){return fn.__isPromisified__===true}function hasPromisified(obj,key){var containsKey=((key+"Async") in obj);return containsKey?isPromisified(obj[key+"Async"]):false}function checkValid(ret){for(var i=0;i<ret.length;i+=2){var key=ret[i];if(rasyncSuffix.test(key)){var keyWithoutAsyncSuffix=key.replace(rasyncSuffix,"");for(var j=0;j<ret.length;j+=2){if(ret[j]===keyWithoutAsyncSuffix){throw new TypeError("Cannot promisify an API that has normal methods with Async-suffix")}}}}}var inheritedMethods=(function(){if(es5.isES5){var create=Object.create;var getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;return function(cur){var ret=[];var visitedKeys=create(null);var original=cur;while(cur!==null){var keys=es5.keys(cur);for(var i=0,len=keys.length;i<len;++i){var key=keys[i];if(visitedKeys[key]){continue}visitedKeys[key]=true;var desc=getOwnPropertyDescriptor(cur,key);if(desc!=null&&typeof desc.value==="function"&&!isPromisified(desc.value)&&!hasPromisified(original,key)){ret.push(key,desc.value)}}cur=es5.getPrototypeOf(cur)}checkValid(ret);return ret}}else{return function(obj){var ret=[];for(var key in obj){var fn=obj[key];if(typeof fn==="function"&&!isPromisified(fn)&&!hasPromisified(obj,key)){ret.push(key,fn)}}checkValid(ret);return ret}}})();function switchCaseArgumentOrder(likelyArgumentCount){var ret=[likelyArgumentCount];var min=Math.max(0,likelyArgumentCount-1-5);for(var i=likelyArgumentCount-1;i>=min;--i){if(i===likelyArgumentCount){continue}ret.push(i)}for(var i=likelyArgumentCount+1;i<=5;++i){ret.push(i)}return ret}function parameterDeclaration(parameterCount){var ret=new Array(parameterCount);for(var i=0;i<ret.length;++i){ret[i]="_arg"+i}return ret.join(", ")}function parameterCount(fn){if(typeof fn.length==="number"){return Math.max(Math.min(fn.length,1023+1),0)}return 0}function propertyAccess(id){var rident=/^[a-z$_][a-z$_0-9]*$/i;if(rident.test(id)){return"."+id}else{return"['"+id.replace(/(['\\])/g,"\\$1")+"']"}}function makeNodePromisifiedEval(callback,receiver,originalName,fn){var newParameterCount=Math.max(0,parameterCount(fn)-1);var argumentOrder=switchCaseArgumentOrder(newParameterCount);var callbackName=(typeof originalName==="string"?originalName+"Async":"promisified");function generateCallForArgumentCount(count){var args=new Array(count);for(var i=0,len=args.length;i<len;++i){args[i]="arguments["+i+"]"}var comma=count>0?",":"";if(typeof callback==="string"&&receiver===THIS){return"this"+propertyAccess(callback)+"("+args.join(",")+comma+" fn);break;"}return(receiver===void 0?"callback("+args.join(",")+comma+" fn);":"callback.call("+(receiver===THIS?"this":"receiver")+", "+args.join(",")+comma+" fn);")+"break;"}function generateArgumentSwitchCase(){var ret="";for(var i=0;i<argumentOrder.length;++i){ret+="case "+argumentOrder[i]+":"+generateCallForArgumentCount(argumentOrder[i])}ret+="default: var args = new Array(len + 1);var i = 0;for (var i = 0; i < len; ++i) {    args[i] = arguments[i];}args[i] = fn;"+(typeof callback==="string"?"this"+propertyAccess(callback)+".apply(":"callback.apply(")+(receiver===THIS?"this":"receiver")+", args); break;";return ret}return new Function("Promise","callback","receiver","withAppended","maybeWrapAsError","nodebackForPromise","INTERNAL","var ret = function "+callbackName+"("+parameterDeclaration(newParameterCount)+') {"use strict";var len = arguments.length;var promise = new Promise(INTERNAL);promise._setTrace(void 0);var fn = nodebackForPromise(promise);try {switch(len) {'+generateArgumentSwitchCase()+"}}catch(e){ var wrapped = maybeWrapAsError(e);promise._attachExtraTrace(wrapped);promise._reject(wrapped);}return promise;}; ret.__isPromisified__ = true; return ret;")(Promise,callback,receiver,withAppended,maybeWrapAsError,nodebackForPromise,INTERNAL)}function makeNodePromisifiedClosure(callback,receiver){function promisified(){var _receiver=receiver;if(receiver===THIS){_receiver=this}if(typeof callback==="string"){callback=_receiver[callback]}var promise=new Promise(INTERNAL);promise._setTrace(void 0);var fn=nodebackForPromise(promise);try{callback.apply(_receiver,withAppended(arguments,fn))}catch(e){var wrapped=maybeWrapAsError(e);promise._attachExtraTrace(wrapped);promise._reject(wrapped)}return promise}promisified.__isPromisified__=true;return promisified}var makeNodePromisified=canEvaluate?makeNodePromisifiedEval:makeNodePromisifiedClosure;function _promisify(callback,receiver,isAll){if(isAll){var methods=inheritedMethods(callback);for(var i=0,len=methods.length;i<len;i+=2){var key=methods[i];var fn=methods[i+1];var promisifiedKey=key+"Async";callback[promisifiedKey]=makeNodePromisified(key,THIS,key,fn)}util.toFastProperties(callback);return callback}else{return makeNodePromisified(callback,receiver,void 0,callback)}}Promise.promisify=function Promise$Promisify(fn,receiver){if(typeof fn==="object"&&fn!==null){deprecated("Promise.promisify for promisifying entire objects is deprecated. Use Promise.promisifyAll instead.");return _promisify(fn,receiver,true)}if(typeof fn!=="function"){throw new TypeError("fn must be a function")}if(isPromisified(fn)){return fn}return _promisify(fn,arguments.length<2?THIS:receiver,false)};Promise.promisifyAll=function Promise$PromisifyAll(target){if(typeof target!=="function"&&typeof target!=="object"){throw new TypeError("the target of promisifyAll must be an object or a function")}return _promisify(target,void 0,true)}}},{"./errors":9,"./es5.js":11,"./promise_resolver.js":21,"./util.js":37}],24:[function(require,module,exports){module.exports=function(Promise,PromiseArray){var util=require("./util.js");var inherits=util.inherits;var es5=require("./es5.js");function PropertiesPromiseArray(obj,boundTo){var keys=es5.keys(obj);var values=new Array(keys.length);for(var i=0,len=values.length;i<len;++i){values[i]=obj[keys[i]]}this.constructor$(values,boundTo);if(!this._isResolved()){for(var i=0,len=keys.length;i<len;++i){values.push(keys[i])}}}inherits(PropertiesPromiseArray,PromiseArray);PropertiesPromiseArray.prototype._init=function PropertiesPromiseArray$_init(){this._init$(void 0,-3)};PropertiesPromiseArray.prototype._promiseFulfilled=function PropertiesPromiseArray$_promiseFulfilled(value,index){if(this._isResolved()){return}this._values[index]=value;var totalResolved=++this._totalResolved;if(totalResolved>=this._length){var val={};var keyOffset=this.length();for(var i=0,len=this.length();i<len;++i){val[this._values[i+keyOffset]]=this._values[i]}this._resolve(val)}};PropertiesPromiseArray.prototype._promiseProgressed=function PropertiesPromiseArray$_promiseProgressed(value,index){if(this._isResolved()){return}this._promise._progress({key:this._values[index+this.length()],value:value})};PromiseArray.PropertiesPromiseArray=PropertiesPromiseArray;return PropertiesPromiseArray}},{"./es5.js":11,"./util.js":37}],25:[function(require,module,exports){module.exports=function(Promise,PromiseArray){var PropertiesPromiseArray=require("./properties_promise_array.js")(Promise,PromiseArray);var util=require("./util.js");var apiRejection=require("./errors_api_rejection")(Promise);var isObject=util.isObject;function Promise$_Props(promises,useBound){var ret;var castValue=Promise._cast(promises,void 0);if(!isObject(castValue)){return apiRejection("cannot await properties of a non-object")}else{if(castValue instanceof Promise){ret=castValue._then(Promise.props,void 0,void 0,void 0,void 0)}else{ret=new PropertiesPromiseArray(castValue,useBound===true&&castValue._isBound()?castValue._boundTo:void 0).promise();useBound=false}}if(useBound===true&&castValue._isBound()){ret._setBoundTo(castValue._boundTo)}return ret}Promise.prototype.props=function Promise$props(){return Promise$_Props(this,true)};Promise.props=function Promise$Props(promises){return Promise$_Props(promises,false)}}},{"./errors_api_rejection":10,"./properties_promise_array.js":24,"./util.js":37}],26:[function(require,module,exports){function arrayCopy(src,srcIndex,dst,dstIndex,len){for(var j=0;j<len;++j){dst[j+dstIndex]=src[j+srcIndex]}}function pow2AtLeast(n){n=n>>>0;n=n-1;n=n|(n>>1);n=n|(n>>2);n=n|(n>>4);n=n|(n>>8);n=n|(n>>16);return n+1}function getCapacity(capacity){if(typeof capacity!=="number"){return 16}return pow2AtLeast(Math.min(Math.max(16,capacity),1073741824))}function Queue(capacity){this._capacity=getCapacity(capacity);this._length=0;this._front=0;this._makeCapacity()}Queue.prototype._willBeOverCapacity=function Queue$_willBeOverCapacity(size){return this._capacity<size};Queue.prototype._pushOne=function Queue$_pushOne(arg){var length=this.length();this._checkCapacity(length+1);var i=(this._front+length)&(this._capacity-1);this[i]=arg;this._length=length+1};Queue.prototype.push=function Queue$push(fn,receiver,arg){var length=this.length()+3;if(this._willBeOverCapacity(length)){this._pushOne(fn);this._pushOne(receiver);this._pushOne(arg);return}var j=this._front+length-3;this._checkCapacity(length);var wrapMask=this._capacity-1;this[(j+0)&wrapMask]=fn;this[(j+1)&wrapMask]=receiver;this[(j+2)&wrapMask]=arg;this._length=length};Queue.prototype.shift=function Queue$shift(){var front=this._front,ret=this[front];this[front]=void 0;this._front=(front+1)&(this._capacity-1);this._length--;return ret};Queue.prototype.length=function Queue$length(){return this._length};Queue.prototype._makeCapacity=function Queue$_makeCapacity(){var len=this._capacity;for(var i=0;i<len;++i){this[i]=void 0}};Queue.prototype._checkCapacity=function Queue$_checkCapacity(size){if(this._capacity<size){this._resizeTo(this._capacity<<3)}};Queue.prototype._resizeTo=function Queue$_resizeTo(capacity){var oldFront=this._front;var oldCapacity=this._capacity;var oldQueue=new Array(oldCapacity);var length=this.length();arrayCopy(this,0,oldQueue,0,oldCapacity);this._capacity=capacity;this._makeCapacity();this._front=0;if(oldFront+length<=oldCapacity){arrayCopy(oldQueue,oldFront,this,0,length)}else{var lengthBeforeWrapping=length-((oldFront+length)&(oldCapacity-1));arrayCopy(oldQueue,oldFront,this,0,lengthBeforeWrapping);arrayCopy(oldQueue,0,this,lengthBeforeWrapping,length-lengthBeforeWrapping)}};module.exports=Queue},{}],27:[function(require,module,exports){module.exports=function(Promise,INTERNAL){var apiRejection=require("./errors_api_rejection.js")(Promise);var isArray=require("./util.js").isArray;var raceLater=function Promise$_raceLater(promise){return promise.then(function(array){return Promise$_Race(array,promise)})};var hasOwn={}.hasOwnProperty;function Promise$_Race(promises,parent){var maybePromise=Promise._cast(promises,void 0);if(maybePromise instanceof Promise){return raceLater(maybePromise)}else{if(!isArray(promises)){return apiRejection("expecting an array, a promise or a thenable")}}var ret=new Promise(INTERNAL);ret._setTrace(parent);if(parent!==void 0){if(parent._isBound()){ret._setBoundTo(parent._boundTo)}if(parent._cancellable()){ret._setCancellable();ret._cancellationParent=parent}}var fulfill=ret._fulfill;var reject=ret._reject;for(var i=0,len=promises.length;i<len;++i){var val=promises[i];if(val===void 0&&!(hasOwn.call(promises,i))){continue}Promise.cast(val)._then(fulfill,reject,void 0,ret,null)}return ret}Promise.race=function Promise$Race(promises){return Promise$_Race(promises,void 0)};Promise.prototype.race=function Promise$race(){return Promise$_Race(this,void 0)}}},{"./errors_api_rejection.js":10,"./util.js":37}],28:[function(require,module,exports){module.exports=function(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection,INTERNAL){function Reduction(callback,index,accum,items,receiver){this.promise=new Promise(INTERNAL);this.index=index;this.length=items.length;this.items=items;this.callback=callback;this.receiver=receiver;this.accum=accum}Reduction.prototype.reject=function Reduction$reject(e){this.promise._reject(e)};Reduction.prototype.fulfill=function Reduction$fulfill(value,index){this.accum=value;this.index=index+1;this.iterate()};Reduction.prototype.iterate=function Reduction$iterate(){var i=this.index;var len=this.length;var items=this.items;var result=this.accum;var receiver=this.receiver;var callback=this.callback;for(;i<len;++i){result=callback.call(receiver,result,items[i],i,len);result=Promise._cast(result,void 0);if(result instanceof Promise){result._then(this.fulfill,this.reject,void 0,this,i);return}}this.promise._fulfill(result)};function Promise$_reducer(fulfilleds,initialValue){var fn=this;var receiver=void 0;if(typeof fn!=="function"){receiver=fn.receiver;fn=fn.fn}var len=fulfilleds.length;var accum=void 0;var startIndex=0;if(initialValue!==void 0){accum=initialValue;startIndex=0}else{startIndex=1;if(len>0){accum=fulfilleds[0]}}var i=startIndex;if(i>=len){return accum}var reduction=new Reduction(fn,i,accum,fulfilleds,receiver);reduction.iterate();return reduction.promise}function Promise$_unpackReducer(fulfilleds){var fn=this.fn;var initialValue=this.initialValue;return Promise$_reducer.call(fn,fulfilleds,initialValue)}function Promise$_slowReduce(promises,fn,initialValue,useBound){return initialValue._then(function(initialValue){return Promise$_Reduce(promises,fn,initialValue,useBound)},void 0,void 0,void 0,void 0)}function Promise$_Reduce(promises,fn,initialValue,useBound){if(typeof fn!=="function"){return apiRejection("fn must be a function")}if(useBound===true&&promises._isBound()){fn={fn:fn,receiver:promises._boundTo}}if(initialValue!==void 0){if(initialValue instanceof Promise){if(initialValue.isFulfilled()){initialValue=initialValue._settledValue}else{return Promise$_slowReduce(promises,fn,initialValue,useBound)}}return Promise$_CreatePromiseArray(promises,PromiseArray,useBound===true&&promises._isBound()?promises._boundTo:void 0).promise()._then(Promise$_unpackReducer,void 0,void 0,{fn:fn,initialValue:initialValue},void 0)}return Promise$_CreatePromiseArray(promises,PromiseArray,useBound===true&&promises._isBound()?promises._boundTo:void 0).promise()._then(Promise$_reducer,void 0,void 0,fn,void 0)}Promise.reduce=function Promise$Reduce(promises,fn,initialValue){return Promise$_Reduce(promises,fn,initialValue,false)};Promise.prototype.reduce=function Promise$reduce(fn,initialValue){return Promise$_Reduce(this,fn,initialValue,true)}}},{}],29:[function(require,module,exports){var global=require("./global.js");var schedule;if(typeof process!=="undefined"&&process!==null&&typeof process.cwd==="function"&&typeof process.nextTick==="function"&&typeof process.version==="string"){schedule=function Promise$_Scheduler(fn){process.nextTick(fn)}}else{if((typeof global.MutationObserver==="function"||typeof global.WebkitMutationObserver==="function"||typeof global.WebKitMutationObserver==="function")&&typeof document!=="undefined"&&typeof document.createElement==="function"){schedule=(function(){var MutationObserver=global.MutationObserver||global.WebkitMutationObserver||global.WebKitMutationObserver;var div=document.createElement("div");var queuedFn=void 0;var observer=new MutationObserver(function Promise$_Scheduler(){var fn=queuedFn;queuedFn=void 0;fn()});observer.observe(div,{attributes:true});return function Promise$_Scheduler(fn){queuedFn=fn;div.setAttribute("class","foo")}})()}else{if(typeof global.postMessage==="function"&&typeof global.importScripts!=="function"&&typeof global.addEventListener==="function"&&typeof global.removeEventListener==="function"){var MESSAGE_KEY="bluebird_message_key_"+Math.random();schedule=(function(){var queuedFn=void 0;function Promise$_Scheduler(e){if(e.source===global&&e.data===MESSAGE_KEY){var fn=queuedFn;queuedFn=void 0;fn()}}global.addEventListener("message",Promise$_Scheduler,false);return function Promise$_Scheduler(fn){queuedFn=fn;global.postMessage(MESSAGE_KEY,"*")}})()}else{if(typeof global.MessageChannel==="function"){schedule=(function(){var queuedFn=void 0;var channel=new global.MessageChannel();channel.port1.onmessage=function Promise$_Scheduler(){var fn=queuedFn;queuedFn=void 0;fn()};return function Promise$_Scheduler(fn){queuedFn=fn;channel.port2.postMessage(null)}})()}else{if(global.setTimeout){schedule=function Promise$_Scheduler(fn){setTimeout(fn,4)}}else{schedule=function Promise$_Scheduler(fn){fn()}}}}}}module.exports=schedule},{"./global.js":15}],30:[function(require,module,exports){module.exports=function(Promise,Promise$_CreatePromiseArray,PromiseArray){var SettledPromiseArray=require("./settled_promise_array.js")(Promise,PromiseArray);function Promise$_Settle(promises,useBound){return Promise$_CreatePromiseArray(promises,SettledPromiseArray,useBound===true&&promises._isBound()?promises._boundTo:void 0).promise()}Promise.settle=function Promise$Settle(promises){return Promise$_Settle(promises,false)};Promise.prototype.settle=function Promise$settle(){return Promise$_Settle(this,true)}}},{"./settled_promise_array.js":31}],31:[function(require,module,exports){module.exports=function(Promise,PromiseArray){var PromiseInspection=Promise.PromiseInspection;var util=require("./util.js");var inherits=util.inherits;function SettledPromiseArray(values,boundTo){this.constructor$(values,boundTo)}inherits(SettledPromiseArray,PromiseArray);SettledPromiseArray.prototype._promiseResolved=function SettledPromiseArray$_promiseResolved(index,inspection){this._values[index]=inspection;var totalResolved=++this._totalResolved;if(totalResolved>=this._length){this._resolve(this._values)}};SettledPromiseArray.prototype._promiseFulfilled=function SettledPromiseArray$_promiseFulfilled(value,index){if(this._isResolved()){return}var ret=new PromiseInspection();ret._bitField=268435456;ret._settledValue=value;this._promiseResolved(index,ret)};SettledPromiseArray.prototype._promiseRejected=function SettledPromiseArray$_promiseRejected(reason,index){if(this._isResolved()){return}var ret=new PromiseInspection();ret._bitField=134217728;ret._settledValue=reason;this._promiseResolved(index,ret)};return SettledPromiseArray}},{"./util.js":37}],32:[function(require,module,exports){module.exports=function(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection){var SomePromiseArray=require("./some_promise_array.js")(PromiseArray);function Promise$_Some(promises,howMany,useBound){if((howMany|0)!==howMany||howMany<0){return apiRejection("expecting a positive integer")}var ret=Promise$_CreatePromiseArray(promises,SomePromiseArray,useBound===true&&promises._isBound()?promises._boundTo:void 0);var promise=ret.promise();if(promise.isRejected()){return promise}ret.setHowMany(howMany);ret.init();return promise}Promise.some=function Promise$Some(promises,howMany){return Promise$_Some(promises,howMany,false)};Promise.prototype.some=function Promise$some(count){return Promise$_Some(this,count,true)}}},{"./some_promise_array.js":33}],33:[function(require,module,exports){module.exports=function(PromiseArray){var util=require("./util.js");var RangeError=require("./errors.js").RangeError;var inherits=util.inherits;var isArray=util.isArray;function SomePromiseArray(values,boundTo){this.constructor$(values,boundTo);this._howMany=0;this._unwrap=false;this._initialized=false}inherits(SomePromiseArray,PromiseArray);SomePromiseArray.prototype._init=function SomePromiseArray$_init(){if(!this._initialized){return}if(this._howMany===0){this._resolve([]);return}this._init$(void 0,-2);var isArrayResolved=isArray(this._values);this._holes=isArrayResolved?this._values.length-this.length():0;if(!this._isResolved()&&isArrayResolved&&this._howMany>this._canPossiblyFulfill()){var message="(Promise.some) input array contains less than "+this._howMany+" promises";this._reject(new RangeError(message))}};SomePromiseArray.prototype.init=function SomePromiseArray$init(){this._initialized=true;this._init()};SomePromiseArray.prototype.setUnwrap=function SomePromiseArray$setUnwrap(){this._unwrap=true};SomePromiseArray.prototype.howMany=function SomePromiseArray$howMany(){return this._howMany};SomePromiseArray.prototype.setHowMany=function SomePromiseArray$setHowMany(count){if(this._isResolved()){return}this._howMany=count};SomePromiseArray.prototype._promiseFulfilled=function SomePromiseArray$_promiseFulfilled(value){if(this._isResolved()){return}this._addFulfilled(value);if(this._fulfilled()===this.howMany()){this._values.length=this.howMany();if(this.howMany()===1&&this._unwrap){this._resolve(this._values[0])}else{this._resolve(this._values)}}};SomePromiseArray.prototype._promiseRejected=function SomePromiseArray$_promiseRejected(reason){if(this._isResolved()){return}this._addRejected(reason);if(this.howMany()>this._canPossiblyFulfill()){if(this._values.length===this.length()){this._reject([])}else{this._reject(this._values.slice(this.length()+this._holes))}}};SomePromiseArray.prototype._fulfilled=function SomePromiseArray$_fulfilled(){return this._totalResolved};SomePromiseArray.prototype._rejected=function SomePromiseArray$_rejected(){return this._values.length-this.length()-this._holes};SomePromiseArray.prototype._addRejected=function SomePromiseArray$_addRejected(reason){this._values.push(reason)};SomePromiseArray.prototype._addFulfilled=function SomePromiseArray$_addFulfilled(value){this._values[this._totalResolved++]=value};SomePromiseArray.prototype._canPossiblyFulfill=function SomePromiseArray$_canPossiblyFulfill(){return this.length()-this._rejected()};return SomePromiseArray}},{"./errors.js":9,"./util.js":37}],34:[function(require,module,exports){module.exports=function(Promise){function PromiseInspection(promise){if(promise!==void 0){this._bitField=promise._bitField;this._settledValue=promise.isResolved()?promise._settledValue:void 0}else{this._bitField=0|0;this._settledValue=void 0}}PromiseInspection.prototype.isFulfilled=Promise.prototype.isFulfilled=function Promise$isFulfilled(){return(this._bitField&268435456)>0};PromiseInspection.prototype.isRejected=Promise.prototype.isRejected=function Promise$isRejected(){return(this._bitField&134217728)>0};PromiseInspection.prototype.isPending=Promise.prototype.isPending=function Promise$isPending(){return(this._bitField&402653184)===0};PromiseInspection.prototype.value=Promise.prototype.value=function Promise$value(){if(!this.isFulfilled()){throw new TypeError("cannot get fulfillment value of a non-fulfilled promise")}return this._settledValue};PromiseInspection.prototype.error=Promise.prototype.reason=function Promise$reason(){if(!this.isRejected()){throw new TypeError("cannot get rejection reason of a non-rejected promise")}return this._settledValue};PromiseInspection.prototype.isResolved=Promise.prototype.isResolved=function Promise$isResolved(){return(this._bitField&402653184)>0};Promise.prototype.inspect=function Promise$inspect(){return new PromiseInspection(this)};Promise.PromiseInspection=PromiseInspection}},{}],35:[function(require,module,exports){module.exports=function(Promise,INTERNAL){var util=require("./util.js");var canAttach=require("./errors.js").canAttach;var errorObj=util.errorObj;var isObject=util.isObject;function getThen(obj){try{return obj.then}catch(e){errorObj.e=e;return errorObj}}function Promise$_Cast(obj,originalPromise){if(isObject(obj)){if(obj instanceof Promise){return obj}else{if(isAnyBluebirdPromise(obj)){var ret=new Promise(INTERNAL);ret._setTrace(void 0);obj._then(ret._fulfillUnchecked,ret._rejectUncheckedCheckError,ret._progressUnchecked,ret,null);ret._setFollowing();return ret}}var then=getThen(obj);if(then===errorObj){if(originalPromise!==void 0&&canAttach(then.e)){originalPromise._attachExtraTrace(then.e)}return Promise.reject(then.e)}else{if(typeof then==="function"){return Promise$_doThenable(obj,then,originalPromise)}}}return obj}var hasProp={}.hasOwnProperty;function isAnyBluebirdPromise(obj){return hasProp.call(obj,"_promise0")}function Promise$_doThenable(x,then,originalPromise){var resolver=Promise.defer();var called=false;try{then.call(x,Promise$_resolveFromThenable,Promise$_rejectFromThenable,Promise$_progressFromThenable)}catch(e){if(!called){called=true;var trace=canAttach(e)?e:new Error(e+"");if(originalPromise!==void 0){originalPromise._attachExtraTrace(trace)}resolver.promise._reject(e,trace)}}return resolver.promise;function Promise$_resolveFromThenable(y){if(called){return}called=true;if(x===y){var e=Promise._makeSelfResolutionError();if(originalPromise!==void 0){originalPromise._attachExtraTrace(e)}resolver.promise._reject(e,void 0);return}resolver.resolve(y)}function Promise$_rejectFromThenable(r){if(called){return}called=true;var trace=canAttach(r)?r:new Error(r+"");if(originalPromise!==void 0){originalPromise._attachExtraTrace(trace)}resolver.promise._reject(r,trace)}function Promise$_progressFromThenable(v){if(called){return}var promise=resolver.promise;if(typeof promise._progress==="function"){promise._progress(v)}}}Promise._cast=Promise$_Cast}},{"./errors.js":9,"./util.js":37}],36:[function(require,module,exports){var global=require("./global.js");var setTimeout=function(fn,ms){var $_len=arguments.length;var args=new Array($_len-2);for(var $_i=2;$_i<$_len;++$_i){args[$_i-2]=arguments[$_i]}global.setTimeout(function(){fn.apply(void 0,args)},ms)};module.exports=function(Promise,INTERNAL){var util=require("./util.js");var errors=require("./errors.js");var apiRejection=require("./errors_api_rejection")(Promise);var TimeoutError=Promise.TimeoutError;var afterTimeout=function Promise$_afterTimeout(promise,message,ms){if(!promise.isPending()){return}if(typeof message!=="string"){message="operation timed out after "+ms+" ms"}var err=new TimeoutError(message);errors.markAsOriginatingFromRejection(err);promise._attachExtraTrace(err);promise._rejectUnchecked(err)};var afterDelay=function Promise$_afterDelay(value,promise){promise._fulfill(value)};var delay=Promise.delay=function Promise$Delay(value,ms){if(ms===void 0){ms=value;value=void 0}ms=+ms;var maybePromise=Promise._cast(value,void 0);var promise=new Promise(INTERNAL);if(maybePromise instanceof Promise){if(maybePromise._isBound()){promise._setBoundTo(maybePromise._boundTo)}if(maybePromise._cancellable()){promise._setCancellable();promise._cancellationParent=maybePromise}promise._setTrace(maybePromise);promise._follow(maybePromise);return promise.then(function(value){return Promise.delay(value,ms)})}else{promise._setTrace(void 0);setTimeout(afterDelay,ms,value,promise)}return promise};Promise.prototype.delay=function Promise$delay(ms){return delay(this,ms)};Promise.prototype.timeout=function Promise$timeout(ms,message){ms=+ms;var ret=new Promise(INTERNAL);ret._setTrace(this);if(this._isBound()){ret._setBoundTo(this._boundTo)}if(this._cancellable()){ret._setCancellable();ret._cancellationParent=this}ret._follow(this);setTimeout(afterTimeout,ms,ret,message,ms);return ret}}},{"./errors.js":9,"./errors_api_rejection":10,"./global.js":15,"./util.js":37}],37:[function(require,module,exports){var global=require("./global.js");var es5=require("./es5.js");var haveGetters=(function(){try{var o={};es5.defineProperty(o,"f",{get:function(){return 3}});return o.f===3}catch(e){return false}})();var canEvaluate=(function(){if(typeof window!=="undefined"&&window!==null&&typeof window.document!=="undefined"&&typeof navigator!=="undefined"&&navigator!==null&&typeof navigator.appName==="string"&&window===global){return false}return true})();function deprecated(msg){if(typeof console!=="undefined"&&console!==null&&typeof console.warn==="function"){console.warn("Bluebird: "+msg)}}var errorObj={e:{}};function tryCatch1(fn,receiver,arg){try{return fn.call(receiver,arg)}catch(e){errorObj.e=e;return errorObj}}function tryCatch2(fn,receiver,arg,arg2){try{return fn.call(receiver,arg,arg2)}catch(e){errorObj.e=e;return errorObj}}function tryCatchApply(fn,args,receiver){try{return fn.apply(receiver,args)}catch(e){errorObj.e=e;return errorObj}}var inherits=function(Child,Parent){var hasProp={}.hasOwnProperty;function T(){this.constructor=Child;this.constructor$=Parent;for(var propertyName in Parent.prototype){if(hasProp.call(Parent.prototype,propertyName)&&propertyName.charAt(propertyName.length-1)!=="$"){this[propertyName+"$"]=Parent.prototype[propertyName]}}}T.prototype=Parent.prototype;Child.prototype=new T();return Child.prototype};function asString(val){return typeof val==="string"?val:(""+val)}function isPrimitive(val){return val==null||val===true||val===false||typeof val==="string"||typeof val==="number"}function isObject(value){return !isPrimitive(value)}function maybeWrapAsError(maybeError){if(!isPrimitive(maybeError)){return maybeError}return new Error(asString(maybeError))}function withAppended(target,appendee){var len=target.length;var ret=new Array(len+1);var i;for(i=0;i<len;++i){ret[i]=target[i]}ret[i]=appendee;return ret}function notEnumerableProp(obj,name,value){if(isPrimitive(obj)){return obj}var descriptor={value:value,configurable:true,enumerable:false,writable:true};es5.defineProperty(obj,name,descriptor);return obj}var wrapsPrimitiveReceiver=(function(){return this!=="string"}).call("string");function thrower(r){throw r}function toFastProperties(obj){function f(){}f.prototype=obj;return f;eval(obj)}var ret={thrower:thrower,isArray:es5.isArray,haveGetters:haveGetters,notEnumerableProp:notEnumerableProp,isPrimitive:isPrimitive,isObject:isObject,canEvaluate:canEvaluate,deprecated:deprecated,errorObj:errorObj,tryCatch1:tryCatch1,tryCatch2:tryCatch2,tryCatchApply:tryCatchApply,inherits:inherits,withAppended:withAppended,asString:asString,maybeWrapAsError:maybeWrapAsError,wrapsPrimitiveReceiver:wrapsPrimitiveReceiver,toFastProperties:toFastProperties};module.exports=ret},{"./es5.js":11,"./global.js":15}]},{},[3])(3)});
</script>
<script>
angular.module('app', []).run(['$q', function($q) {
  window.$q = $q;
}]);
</script>
<div ng-app="app"></div>

Test runner

Ready to run.

Testing in
TestOps/sec
Angular Promise instantiate and resolve
// async test
var d = $q.defer();
d.promise.then(function() {
  deferred.resolve.call(deferred);
});
d.resolve('foo');
ready
bluebird instantiate and resolve
// async test
var p = new Promise(function(resolve, reject) {
  resolve('foo');
}).
then(function() {
  deferred.resolve()
});
ready
Native
// async test
var p = new NativePromise(function(resolve, reject) {
  resolve('foo');
}).
then(function() {
  deferred.resolve()
});
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.