polyfill-service
Version:
A polyfill combinator
1 lines • 13 kB
JSON
{"aliases":["modernizr:promises","caniuse:promises","blissfuljs","default","es6"],"browsers":{"android":"* - 4.4","bb":"* - 10","chrome":"* - 31","firefox":"6 - 28","ie":"8 - *","ie_mob":"*","ios_saf":"* - 7.1","op_mini":"*","opera":"* - 19","safari":"* - 7","firefox_mob":"6 - 28"},"dependencies":["setImmediate","Array.isArray"],"notes":["In IE8, the `catch` method cannot be invoked directly since it is a reserved word. Instead, use `[\"catch\"]` if intend to run your code in IE8"],"license":"MIT","docs":"https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise","repo":"https://github.com/Octane/Promise","baseDir":"Promise","hasTests":true,"rawSource":"\n// Promise\n/**\n * Promise polyfill v1.0.10\n * requires setImmediate\n *\n * © 2014–2015 Dmitry Korobkin\n * Released under the MIT license\n * github.com/Octane/Promise\n */\n(function (global) {'use strict';\n\n var STATUS = '[[PromiseStatus]]';\n var VALUE = '[[PromiseValue]]';\n var ON_FUlFILLED = '[[OnFulfilled]]';\n var ON_REJECTED = '[[OnRejected]]';\n var ORIGINAL_ERROR = '[[OriginalError]]';\n var PENDING = 'pending';\n var INTERNAL_PENDING = 'internal pending';\n var FULFILLED = 'fulfilled';\n var REJECTED = 'rejected';\n var NOT_ARRAY = 'not an array.';\n var REQUIRES_NEW = 'constructor Promise requires \"new\".';\n var CHAINING_CYCLE = 'then() cannot return same Promise that it resolves.';\n\n // Modifed by polyfill service - remove undefined require statement\n var setImmediate = global.setImmediate;\n\n var isArray = Array.isArray || function (anything) {\n return Object.prototype.toString.call(anything) == '[object Array]';\n };\n\n function InternalError(originalError) {\n this[ORIGINAL_ERROR] = originalError;\n }\n\n function isInternalError(anything) {\n return anything instanceof InternalError;\n }\n\n function isObject(anything) {\n //Object.create(null) instanceof Object → false\n return Object(anything) === anything;\n }\n\n function isCallable(anything) {\n return typeof anything == 'function';\n }\n\n function isPromise(anything) {\n return anything instanceof Promise;\n }\n\n function identity(value) {\n return value;\n }\n\n function thrower(reason) {\n throw reason;\n }\n\n function enqueue(promise, onFulfilled, onRejected) {\n if (!promise[ON_FUlFILLED]) {\n promise[ON_FUlFILLED] = [];\n promise[ON_REJECTED] = [];\n }\n promise[ON_FUlFILLED].push(onFulfilled);\n promise[ON_REJECTED].push(onRejected);\n }\n\n function clearAllQueues(promise) {\n delete promise[ON_FUlFILLED];\n delete promise[ON_REJECTED];\n }\n\n function callEach(queue) {\n var i;\n var length = queue.length;\n for (i = 0; i < length; i++) {\n queue[i]();\n }\n }\n\n function call(resolve, reject, value) {\n var anything = toPromise(value);\n if (isPromise(anything)) {\n anything.then(resolve, reject);\n } else if (isInternalError(anything)) {\n reject(anything[ORIGINAL_ERROR]);\n } else {\n resolve(value);\n }\n }\n\n function toPromise(anything) {\n var then;\n if (isPromise(anything)) {\n return anything;\n }\n if(isObject(anything)) {\n try {\n then = anything.then;\n } catch (error) {\n return new InternalError(error);\n }\n if (isCallable(then)) {\n return new Promise(function (resolve, reject) {\n setImmediate(function () {\n try {\n then.call(anything, resolve, reject);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n }\n return null;\n }\n\n function resolvePromise(promise, resolver) {\n function resolve(value) {\n if (promise[STATUS] == PENDING) {\n fulfillPromise(promise, value);\n }\n }\n function reject(reason) {\n if (promise[STATUS] == PENDING) {\n rejectPromise(promise, reason);\n }\n }\n try {\n resolver(resolve, reject);\n } catch(error) {\n reject(error);\n }\n }\n\n function fulfillPromise(promise, value) {\n var queue;\n var anything = toPromise(value);\n if (isPromise(anything)) {\n promise[STATUS] = INTERNAL_PENDING;\n anything.then(\n function (value) {\n fulfillPromise(promise, value);\n },\n function (reason) {\n rejectPromise(promise, reason);\n }\n );\n } else if (isInternalError(anything)) {\n rejectPromise(promise, anything[ORIGINAL_ERROR]);\n } else {\n promise[STATUS] = FULFILLED;\n promise[VALUE] = value;\n queue = promise[ON_FUlFILLED];\n if (queue && queue.length) {\n clearAllQueues(promise);\n callEach(queue);\n }\n }\n }\n\n function rejectPromise(promise, reason) {\n var queue = promise[ON_REJECTED];\n promise[STATUS] = REJECTED;\n promise[VALUE] = reason;\n if (queue && queue.length) {\n clearAllQueues(promise);\n callEach(queue);\n }\n }\n\n function Promise(resolver) {\n var promise = this;\n if (!isPromise(promise)) {\n throw new TypeError(REQUIRES_NEW);\n }\n promise[STATUS] = PENDING;\n promise[VALUE] = undefined;\n resolvePromise(promise, resolver);\n }\n\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var promise = this;\n var nextPromise;\n onFulfilled = isCallable(onFulfilled) ? onFulfilled : identity;\n onRejected = isCallable(onRejected) ? onRejected : thrower;\n nextPromise = new Promise(function (resolve, reject) {\n function tryCall(func) {\n var value;\n try {\n value = func(promise[VALUE]);\n } catch (error) {\n reject(error);\n return;\n }\n if (value === nextPromise) {\n reject(new TypeError(CHAINING_CYCLE));\n } else {\n call(resolve, reject, value);\n }\n }\n function asyncOnFulfilled() {\n setImmediate(tryCall, onFulfilled);\n }\n function asyncOnRejected() {\n setImmediate(tryCall, onRejected);\n }\n switch (promise[STATUS]) {\n case FULFILLED:\n asyncOnFulfilled();\n break;\n case REJECTED:\n asyncOnRejected();\n break;\n default:\n enqueue(promise, asyncOnFulfilled, asyncOnRejected);\n }\n });\n return nextPromise;\n };\n\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(identity, onRejected);\n };\n\n Promise.resolve = function (value) {\n var anything = toPromise(value);\n if (isPromise(anything)) {\n return anything;\n }\n return new Promise(function (resolve, reject) {\n if (isInternalError(anything)) {\n reject(anything[ORIGINAL_ERROR]);\n } else {\n resolve(value);\n }\n });\n };\n\n Promise.reject = function (reason) {\n return new Promise(function (resolve, reject) {\n reject(reason);\n });\n };\n\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n var i;\n var length;\n if (isArray(values)) {\n length = values.length;\n for (i = 0; i < length; i++) {\n call(resolve, reject, values[i]);\n }\n } else {\n reject(new TypeError(NOT_ARRAY));\n }\n });\n };\n\n Promise.all = function (values) {\n return new Promise(function (resolve, reject) {\n var fulfilledCount = 0;\n var promiseCount = 0;\n var anything;\n var length;\n var value;\n var i;\n if (isArray(values)) {\n values = values.slice(0);\n length = values.length;\n for (i = 0; i < length; i++) {\n value = values[i];\n anything = toPromise(value);\n if (isPromise(anything)) {\n promiseCount++;\n anything.then(\n function (index) {\n return function (value) {\n values[index] = value;\n fulfilledCount++;\n if (fulfilledCount == promiseCount) {\n resolve(values);\n }\n };\n }(i),\n reject\n );\n } else if (isInternalError(anything)) {\n reject(anything[ORIGINAL_ERROR]);\n } else {\n //[1, , 3] → [1, undefined, 3]\n values[i] = value;\n }\n }\n if (!promiseCount) {\n resolve(values);\n }\n } else {\n reject(new TypeError(NOT_ARRAY));\n }\n });\n };\n\n if (typeof module != 'undefined' && module.exports) {\n module.exports = global.Promise || Promise;\n } else if (!global.Promise) {\n global.Promise = Promise;\n }\n\n}(this));\n","minSource":"!function(n){\"use strict\";function t(n){this[j]=n}function e(n){return n instanceof t}function r(n){return Object(n)===n}function o(n){return\"function\"==typeof n}function i(n){return n instanceof v}function u(n){return n}function c(n){throw n}function f(n,t,e){n[g]||(n[g]=[],n[P]=[]),n[g].push(t),n[P].push(e)}function a(n){delete n[g],delete n[P]}function s(n){var t,e=n.length;for(t=0;e>t;t++)n[t]()}function l(n,t,r){var o=h(r);i(o)?o.then(n,t):e(o)?t(o[j]):n(r)}function h(n){var e;if(i(n))return n;if(r(n)){try{e=n.then}catch(u){return new t(u)}if(o(e))return new v(function(t,r){S(function(){try{e.call(n,t,r)}catch(o){r(o)}})})}return null}function p(n,t){function e(t){n[w]==b&&d(n,t)}function r(t){n[w]==b&&y(n,t)}try{t(e,r)}catch(o){r(o)}}function d(n,t){var r,o=h(t);i(o)?(n[w]=E,o.then(function(t){d(n,t)},function(t){y(n,t)})):e(o)?y(n,o[j]):(n[w]=O,n[m]=t,r=n[g],r&&r.length&&(a(n),s(r)))}function y(n,t){var e=n[P];n[w]=T,n[m]=t,e&&e.length&&(a(n),s(e))}function v(n){var t=this;if(!i(t))throw new TypeError(k);t[w]=b,t[m]=void 0,p(t,n)}var w=\"[[PromiseStatus]]\",m=\"[[PromiseValue]]\",g=\"[[OnFulfilled]]\",P=\"[[OnRejected]]\",j=\"[[OriginalError]]\",b=\"pending\",E=\"internal pending\",O=\"fulfilled\",T=\"rejected\",A=\"not an array.\",k='constructor Promise requires \"new\".',x=\"then() cannot return same Promise that it resolves.\",S=n.setImmediate,q=Array.isArray||function(n){return\"[object Array]\"==Object.prototype.toString.call(n)};v.prototype.then=function(n,t){var e,r=this;return n=o(n)?n:u,t=o(t)?t:c,e=new v(function(o,i){function u(n){var t;try{t=n(r[m])}catch(u){return void i(u)}t===e?i(new TypeError(x)):l(o,i,t)}function c(){S(u,n)}function a(){S(u,t)}switch(r[w]){case O:c();break;case T:a();break;default:f(r,c,a)}})},v.prototype[\"catch\"]=function(n){return this.then(u,n)},v.resolve=function(n){var t=h(n);return i(t)?t:new v(function(r,o){e(t)?o(t[j]):r(n)})},v.reject=function(n){return new v(function(t,e){e(n)})},v.race=function(n){return new v(function(t,e){var r,o;if(q(n))for(o=n.length,r=0;o>r;r++)l(t,e,n[r]);else e(new TypeError(A))})},v.all=function(n){return new v(function(t,r){var o,u,c,f,a=0,s=0;if(q(n)){for(n=n.slice(0),u=n.length,f=0;u>f;f++)c=n[f],o=h(c),i(o)?(s++,o.then(function(e){return function(r){n[e]=r,a++,a==s&&t(n)}}(f),r)):e(o)?r(o[j]):n[f]=c;s||t(n)}else r(new TypeError(A))})},\"undefined\"!=typeof module&&module.exports?module.exports=n.Promise||v:n.Promise||(n.Promise=v)}(this);","detectSource":"'Promise' in this"}