{"version":3,"file":"promise.min.js","sources":["promise.js"],"sourcesContent":["(function(global){\n\n//\n// Check for native Promise and it has correct interface\n//\n\nvar NativePromise = global['Promise'];\nvar nativePromiseSupported =\n NativePromise &&\n // Some of these methods are missing from\n // Firefox/Chrome experimental implementations\n 'resolve' in NativePromise &&\n 'reject' in NativePromise &&\n 'all' in NativePromise &&\n 'race' in NativePromise &&\n // Older version of the spec had a resolver object\n // as the arg rather than a function\n (function(){\n var resolve;\n new NativePromise(function(r){ resolve = r; });\n return typeof resolve === 'function';\n })();\n\n\n//\n// export if necessary\n//\n\nif (typeof exports !== 'undefined' && exports)\n{\n // node.js\n exports.Promise = nativePromiseSupported ? NativePromise : Promise;\n exports.Polyfill = Promise;\n}\nelse\n{\n // AMD\n if (typeof define == 'function' && define.amd)\n {\n define(function(){\n return nativePromiseSupported ? NativePromise : Promise;\n });\n }\n else\n {\n // in browser add to global\n if (!nativePromiseSupported)\n global['Promise'] = Promise;\n }\n}\n\n\n//\n// Polyfill\n//\n\nvar PENDING = 'pending';\nvar SEALED = 'sealed';\nvar FULFILLED = 'fulfilled';\nvar REJECTED = 'rejected';\nvar NOOP = function(){};\n\nfunction isArray(value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n}\n\n// async calls\nvar asyncSetTimer = typeof setImmediate !== 'undefined' ? setImmediate : setTimeout;\nvar asyncQueue = [];\nvar asyncTimer;\n\nfunction asyncFlush(){\n // run promise callbacks\n for (var i = 0; i < asyncQueue.length; i++)\n asyncQueue[i][0](asyncQueue[i][1]);\n\n // reset async asyncQueue\n asyncQueue = [];\n asyncTimer = false;\n}\n\nfunction asyncCall(callback, arg){\n asyncQueue.push([callback, arg]);\n\n if (!asyncTimer)\n {\n asyncTimer = true;\n asyncSetTimer(asyncFlush, 0);\n }\n}\n\n\nfunction invokeResolver(resolver, promise) {\n function resolvePromise(value) {\n resolve(promise, value);\n }\n\n function rejectPromise(reason) {\n reject(promise, reason);\n }\n\n try {\n resolver(resolvePromise, rejectPromise);\n } catch(e) {\n rejectPromise(e);\n }\n}\n\nfunction invokeCallback(subscriber){\n var owner = subscriber.owner;\n var settled = owner.state_;\n var value = owner.data_; \n var callback = subscriber[settled];\n var promise = subscriber.then;\n\n if (typeof callback === 'function')\n {\n settled = FULFILLED;\n try {\n value = callback(value);\n } catch(e) {\n reject(promise, e);\n }\n }\n\n if (!handleThenable(promise, value))\n {\n if (settled === FULFILLED)\n resolve(promise, value);\n\n if (settled === REJECTED)\n reject(promise, value);\n }\n}\n\nfunction handleThenable(promise, value) {\n var resolved;\n\n try {\n if (promise === value)\n throw new TypeError('A promises callback cannot return that same promise.');\n\n if (value && (typeof value === 'function' || typeof value === 'object'))\n {\n var then = value.then; // then should be retrived only once\n\n if (typeof then === 'function')\n {\n then.call(value, function(val){\n if (!resolved)\n {\n resolved = true;\n\n if (value !== val)\n resolve(promise, val);\n else\n fulfill(promise, val);\n }\n }, function(reason){\n if (!resolved)\n {\n resolved = true;\n\n reject(promise, reason);\n }\n });\n\n return true;\n }\n }\n } catch (e) {\n if (!resolved)\n reject(promise, e);\n\n return true;\n }\n\n return false;\n}\n\nfunction resolve(promise, value){\n if (promise === value || !handleThenable(promise, value))\n fulfill(promise, value);\n}\n\nfunction fulfill(promise, value){\n if (promise.state_ === PENDING)\n {\n promise.state_ = SEALED;\n promise.data_ = value;\n\n asyncCall(publishFulfillment, promise);\n }\n}\n\nfunction reject(promise, reason){\n if (promise.state_ === PENDING)\n {\n promise.state_ = SEALED;\n promise.data_ = reason;\n\n asyncCall(publishRejection, promise);\n }\n}\n\nfunction publish(promise) {\n var callbacks = promise.then_;\n promise.then_ = undefined;\n\n for (var i = 0; i < callbacks.length; i++) {\n invokeCallback(callbacks[i]);\n }\n}\n\nfunction publishFulfillment(promise){\n promise.state_ = FULFILLED;\n publish(promise);\n}\n\nfunction publishRejection(promise){\n promise.state_ = REJECTED;\n publish(promise);\n}\n\n/**\n* @class\n*/\nfunction Promise(resolver){\n if (typeof resolver !== 'function')\n throw new TypeError('Promise constructor takes a function argument');\n\n if (this instanceof Promise === false)\n throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n\n this.then_ = [];\n\n invokeResolver(resolver, this);\n}\n\nPromise.prototype = {\n constructor: Promise,\n\n state_: PENDING,\n then_: null,\n data_: undefined,\n\n then: function(onFulfillment, onRejection){\n var subscriber = {\n owner: this,\n then: new this.constructor(NOOP),\n fulfilled: onFulfillment,\n rejected: onRejection\n };\n\n if (this.state_ === FULFILLED || this.state_ === REJECTED)\n {\n // already resolved, call callback async\n asyncCall(invokeCallback, subscriber);\n }\n else\n {\n // subscribe\n this.then_.push(subscriber);\n }\n\n return subscriber.then;\n },\n\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\nPromise.all = function(promises){\n var Class = this;\n\n if (!isArray(promises))\n throw new TypeError('You must pass an array to Promise.all().');\n\n return new Class(function(resolve, reject){\n var results = [];\n var remaining = 0;\n\n function resolver(index){\n remaining++;\n return function(value){\n results[index] = value;\n if (!--remaining)\n resolve(results);\n };\n }\n\n for (var i = 0, promise; i < promises.length; i++)\n {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function')\n promise.then(resolver(i), reject);\n else\n results[i] = promise;\n }\n\n if (!remaining)\n resolve(results);\n });\n};\n\nPromise.race = function(promises){\n var Class = this;\n\n if (!isArray(promises))\n throw new TypeError('You must pass an array to Promise.race().');\n\n return new Class(function(resolve, reject) {\n for (var i = 0, promise; i < promises.length; i++)\n {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function')\n promise.then(resolve, reject);\n else\n resolve(promise);\n }\n });\n};\n\nPromise.resolve = function(value){\n var Class = this;\n\n if (value && typeof value === 'object' && value.constructor === Class)\n return value;\n\n return new Class(function(resolve){\n resolve(value);\n });\n};\n\nPromise.reject = function(reason){\n var Class = this;\n\n return new Class(function(resolve, reject){\n reject(reason);\n });\n};\n\n})(typeof window != 'undefined' ? window : typeof global != 'undefined' ? global : typeof self != 'undefined' ? self : this);\n"],"names":["global","resolve","NativePromise","nativePromiseSupported","r","NOOP","exports","Promise","Polyfill","define","amd","PENDING","SEALED","FULFILLED","REJECTED","isArray","value","Object","prototype","toString","call","asyncTimer","asyncSetTimer","setImmediate","setTimeout","asyncQueue","asyncFlush","i","length","asyncCall","callback","arg","push","invokeResolver","resolver","promise","rejectPromise","reason","reject","e","invokeCallback","subscriber","owner","settled","state_","data_","then","handleThenable","resolved","TypeError","val","fulfill","publishFulfillment","publishRejection","publish","callbacks","then_","undefined","this","constructor","onFulfillment","onRejection","fulfilled","rejected","catch","all","promises","results","remaining","index","race","window","self"],"mappings":"CAAA,SAAUA,GAMV,IAYQC,EAZJC,EAAgBF,EAAgB,QAChCG,EACFD,GAGA,YAAaA,GACb,WAAYA,GACZ,QAASA,GACT,SAAUA,IAKR,IAAIA,EAAc,SAASE,GAAIH,EAAUG,IACf,mBAAZH,GAwCP,SAAPI,KAhCmB,oBAAZC,SAA2BA,SAGpCA,QAAQC,QAAUJ,EAAyBD,EAAgBK,EAC3DD,QAAQE,SAAWD,GAKE,mBAAVE,QAAwBA,OAAOC,IAExCD,OAAO,WACL,OAAON,EAAyBD,EAAgBK,IAM7CJ,IACHH,EAAgB,QAAIO,GAS1B,IAAII,EAAU,UACVC,EAAS,SACTC,EAAY,YACZC,EAAW,WAGf,SAASC,EAAQC,GACf,MAAiD,mBAA1CC,OAAOC,UAAUC,SAASC,KAAKJ,GAIxC,IAEIK,EAFAC,EAAwC,oBAAjBC,aAA+BA,aAAeC,WACrEC,EAAa,GAGjB,SAASC,IAEP,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAWG,OAAQD,IACrCF,EAAWE,GAAG,GAAGF,EAAWE,GAAG,IAIjCN,IADAI,EAAa,IAIf,SAASI,EAAUC,EAAUC,GAC3BN,EAAWO,KAAK,CAACF,EAAUC,IAEtBV,IAEHA,GAAa,EACbC,EAAcI,EAAY,IAK9B,SAASO,EAAeC,EAAUC,GAKhC,SAASC,EAAcC,GACrBC,EAAOH,EAASE,GAGlB,IACEH,EATF,SAAwBlB,GACtBf,EAAQkC,EAASnB,IAQQoB,GACzB,MAAMG,GACNH,EAAcG,IAIlB,SAASC,EAAeC,GACtB,IAAIC,EAAQD,EAAWC,MACnBC,EAAUD,EAAME,OAChB5B,EAAQ0B,EAAMG,MACdf,EAAWW,EAAWE,GACtBR,EAAUM,EAAWK,KAEzB,GAAwB,mBAAbhB,EACX,CACEa,EAAU9B,EACV,IACEG,EAAQc,EAASd,GACjB,MAAMuB,GACND,EAAOH,EAASI,IAIfQ,EAAeZ,EAASnB,KAEvB2B,IAAY9B,GACdZ,EAAQkC,EAASnB,GAEf2B,IAAY7B,GACdwB,EAAOH,EAASnB,IAItB,SAAS+B,EAAeZ,EAASnB,GAC/B,IAAIgC,EAEJ,IACE,GAAIb,IAAYnB,EACd,MAAM,IAAIiC,UAAU,wDAEtB,GAAIjC,IAA2B,mBAAVA,GAAyC,iBAAVA,GACpD,CACE,IAAI8B,EAAO9B,EAAM8B,KAEjB,GAAoB,mBAATA,EAqBT,OAnBAA,EAAK1B,KAAKJ,EAAO,SAASkC,GACnBF,IAEHA,GAAW,GAEPhC,IAAUkC,EACZjD,EAEAkD,GAFQhB,EAASe,KAIpB,SAASb,GACLW,IAEHA,GAAW,EAEXV,EAAOH,EAASE,MAIb,GAGX,MAAOE,GAIP,OAHKS,GACHV,EAAOH,EAASI,GAEX,GAMX,SAAStC,EAAQkC,EAASnB,GACpBmB,IAAYnB,GAAU+B,EAAeZ,EAASnB,IAChDmC,EAAQhB,EAASnB,GAGrB,SAASmC,EAAQhB,EAASnB,GACpBmB,EAAQS,SAAWjC,IAErBwB,EAAQS,OAAShC,EACjBuB,EAAQU,MAAQ7B,EAEhBa,EAAUuB,EAAoBjB,IAIlC,SAASG,EAAOH,EAASE,GACnBF,EAAQS,SAAWjC,IAErBwB,EAAQS,OAAShC,EACjBuB,EAAQU,MAAQR,EAEhBR,EAAUwB,EAAkBlB,IAIhC,SAASmB,EAAQnB,GACf,IAAIoB,EAAYpB,EAAQqB,MACxBrB,EAAQqB,WAAQC,EAEhB,IAAK,IAAI9B,EAAI,EAAGA,EAAI4B,EAAU3B,OAAQD,IACpCa,EAAee,EAAU5B,IAI7B,SAASyB,EAAmBjB,GAC1BA,EAAQS,OAAS/B,EACjByC,EAAQnB,GAGV,SAASkB,EAAiBlB,GACxBA,EAAQS,OAAS9B,EACjBwC,EAAQnB,GAMV,SAAS5B,EAAQ2B,GACf,GAAwB,mBAAbA,EACT,MAAM,IAAIe,UAAU,iDAEtB,GAAIS,gBAAgBnD,IAAY,EAC9B,MAAM,IAAI0C,UAAU,yHAEtBS,KAAKF,MAAQ,GAEbvB,EAAeC,EAAUwB,MAG3BnD,EAAQW,UAAY,CAClByC,YAAapD,EAEbqC,OAAQjC,EACR6C,MAAO,KACPX,WAAOY,EAEPX,KAAM,SAASc,EAAeC,GACxBpB,EAAa,CACfC,MAAOgB,KACPZ,KAAM,IAAIY,KAAKC,YAAYtD,GAC3ByD,UAAWF,EACXG,SAAUF,GAcZ,OAXIH,KAAKd,SAAW/B,GAAa6C,KAAKd,SAAW9B,EAG/Ce,EAAUW,EAAgBC,GAK1BiB,KAAKF,MAAMxB,KAAKS,GAGXA,EAAWK,MAGpBkB,MAAS,SAASH,GAChB,OAAOH,KAAKZ,KAAK,KAAMe,KAI3BtD,EAAQ0D,IAAM,SAASC,GAGrB,IAAKnD,EAAQmD,GACX,MAAM,IAAIjB,UAAU,4CAEtB,OAAO,IALKS,KAKK,SAASzD,EAASqC,GACjC,IAAI6B,EAAU,GACVC,EAAY,EAWhB,IAAK,IAAWjC,EAAPR,EAAI,EAAYA,EAAIuC,EAAStC,OAAQD,KAE5CQ,EAAU+B,EAASvC,KAEoB,mBAAjBQ,EAAQW,KAC5BX,EAAQW,KAdZ,SAAkBuB,GAEhB,OADAD,IACO,SAASpD,GACdmD,EAAQE,GAASrD,IACVoD,GACLnE,EAAQkE,IASGjC,CAASP,GAAIW,GAE1B6B,EAAQxC,GAAKQ,EAGZiC,GACHnE,EAAQkE,MAId5D,EAAQ+D,KAAO,SAASJ,GAGtB,IAAKnD,EAAQmD,GACX,MAAM,IAAIjB,UAAU,6CAEtB,OAAO,IALKS,KAKK,SAASzD,EAASqC,GACjC,IAAK,IAAWH,EAAPR,EAAI,EAAYA,EAAIuC,EAAStC,OAAQD,KAE5CQ,EAAU+B,EAASvC,KAEoB,mBAAjBQ,EAAQW,KAC5BX,EAAQW,KAAK7C,EAASqC,GAEtBrC,EAAQkC,MAKhB5B,EAAQN,QAAU,SAASe,GAGzB,OAAIA,GAA0B,iBAAVA,GAAsBA,EAAM2C,cAFpCD,KAGH1C,EAEF,IALK0C,KAKK,SAASzD,GACxBA,EAAQe,MAIZT,EAAQ+B,OAAS,SAASD,GAGxB,OAAO,IAFKqB,KAEK,SAASzD,EAASqC,GACjCA,EAAOD,MArVX,CAyVoB,oBAAVkC,OAAwBA,OAA0B,oBAAVvE,OAAwBA,OAAwB,oBAARwE,KAAsBA,KAAOd"}