Comparing version 2.9.1 to 3.0.0
{ | ||
"name": "lie", | ||
"version": "2.9.1" | ||
"version": "3.0.0" | ||
} |
{ | ||
"name": "lie", | ||
"version": "2.9.1", | ||
"version": "3.0.0", | ||
"description": "A minimal and fast promise implementation", | ||
@@ -11,16 +11,4 @@ "repo": "calvinmetcalf/lie", | ||
"scripts": [ | ||
"lib/all.js", | ||
"lib/handlers.js", | ||
"lib/index.js", | ||
"lib/INTERNAL.js", | ||
"lib/polyfill.js", | ||
"lib/promise.js", | ||
"lib/queueItem.js", | ||
"lib/race.js", | ||
"lib/reject.js", | ||
"lib/resolve.js", | ||
"lib/resolveThenable.js", | ||
"lib/states.js", | ||
"lib/tryCatch.js", | ||
"lib/unwrap.js", | ||
"polyfill.js", | ||
], | ||
@@ -27,0 +15,0 @@ "dependencies": { |
401
dist/lie.js
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Promise = f()}})(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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.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(_dereq_,module,exports){ | ||
module.exports = exports = _dereq_('./promise'); | ||
exports.resolve = _dereq_('./resolve'); | ||
exports.reject = _dereq_('./reject'); | ||
exports.all = _dereq_('./all'); | ||
exports.race = _dereq_('./race'); | ||
},{"./all":3,"./promise":5,"./race":7,"./reject":8,"./resolve":9}],2:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var immediate = _dereq_('immediate'); | ||
module.exports = INTERNAL; | ||
/* istanbul ignore next */ | ||
function INTERNAL() {} | ||
},{}],3:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var reject = _dereq_('./reject'); | ||
var resolve = _dereq_('./resolve'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = all; | ||
function all(iterable) { | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return resolve([]); | ||
} | ||
var handlers = {}; | ||
var values = new Array(len); | ||
var resolved = 0; | ||
var i = -1; | ||
var promise = new Promise(INTERNAL); | ||
while (++i < len) { | ||
allResolver(iterable[i], i); | ||
} | ||
return promise; | ||
function allResolver(value, i) { | ||
resolve(value).then(resolveFromAll, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
function resolveFromAll(outValue) { | ||
values[i] = outValue; | ||
if (++resolved === len & !called) { | ||
called = true; | ||
handlers.resolve(promise, values); | ||
} | ||
} | ||
} | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":5,"./reject":8,"./resolve":9}],4:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var tryCatch = _dereq_('./tryCatch'); | ||
var resolveThenable = _dereq_('./resolveThenable'); | ||
var states = _dereq_('./states'); | ||
var REJECTED = ['REJECTED']; | ||
var FULFILLED = ['FULFILLED']; | ||
var PENDING = ['PENDING']; | ||
var UNHANDLED; | ||
exports.resolve = function (self, value) { | ||
var result = tryCatch(getThen, value); | ||
if (result.status === 'error') { | ||
return exports.reject(self, result.value); | ||
} | ||
var thenable = result.value; | ||
module.exports = exports = Promise; | ||
if (thenable) { | ||
resolveThenable.safely(self, thenable); | ||
} else { | ||
self.state = states.FULFILLED; | ||
self.outcome = value; | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callFulfilled(value); | ||
} | ||
} | ||
return self; | ||
}; | ||
exports.reject = function (self, error) { | ||
self.state = states.REJECTED; | ||
self.outcome = error; | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callRejected(error); | ||
} | ||
return self; | ||
}; | ||
function getThen(obj) { | ||
// Make sure we only access the accessor once as required by the spec | ||
var then = obj && obj.then; | ||
if (obj && typeof obj === 'object' && typeof then === 'function') { | ||
return function appyThen() { | ||
then.apply(obj, arguments); | ||
}; | ||
} | ||
} | ||
},{"./resolveThenable":10,"./states":11,"./tryCatch":12}],5:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var unwrap = _dereq_('./unwrap'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var resolveThenable = _dereq_('./resolveThenable'); | ||
var states = _dereq_('./states'); | ||
var QueueItem = _dereq_('./queueItem'); | ||
module.exports = Promise; | ||
function Promise(resolver) { | ||
if (!(this instanceof Promise)) { | ||
return new Promise(resolver); | ||
} | ||
if (typeof resolver !== 'function') { | ||
throw new TypeError('resolver must be a function'); | ||
} | ||
this.state = states.PENDING; | ||
this.state = PENDING; | ||
this.queue = []; | ||
this.outcome = void 0; | ||
if (resolver !== INTERNAL) { | ||
resolveThenable.safely(this, resolver); | ||
safelyResolveThenable(this, resolver); | ||
} | ||
} | ||
Promise.prototype['catch'] = function (onRejected) { | ||
Promise.prototype["catch"] = function (onRejected) { | ||
return this.then(null, onRejected); | ||
}; | ||
Promise.prototype.then = function (onFulfilled, onRejected) { | ||
if (typeof onFulfilled !== 'function' && this.state === states.FULFILLED || | ||
typeof onRejected !== 'function' && this.state === states.REJECTED) { | ||
if (typeof onFulfilled !== 'function' && this.state === FULFILLED || | ||
typeof onRejected !== 'function' && this.state === REJECTED) { | ||
return this; | ||
} | ||
var promise = new Promise(INTERNAL); | ||
if (this.state !== states.PENDING) { | ||
var resolver = this.state === states.FULFILLED ? onFulfilled : onRejected; | ||
var promise = new this.constructor(INTERNAL); | ||
if (this.state !== PENDING) { | ||
var resolver = this.state === FULFILLED ? onFulfilled : onRejected; | ||
unwrap(promise, resolver, this.outcome); | ||
@@ -149,9 +47,2 @@ } else { | ||
}; | ||
},{"./INTERNAL":2,"./queueItem":6,"./resolveThenable":10,"./states":11,"./unwrap":13}],6:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var handlers = _dereq_('./handlers'); | ||
var unwrap = _dereq_('./unwrap'); | ||
module.exports = QueueItem; | ||
function QueueItem(promise, onFulfilled, onRejected) { | ||
@@ -181,94 +72,59 @@ this.promise = promise; | ||
},{"./handlers":4,"./unwrap":13}],7:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var reject = _dereq_('./reject'); | ||
var resolve = _dereq_('./resolve'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = race; | ||
function race(iterable) { | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return reject(new TypeError('must be an array')); | ||
function unwrap(promise, func, value) { | ||
immediate(function () { | ||
var returnValue; | ||
try { | ||
returnValue = func(value); | ||
} catch (e) { | ||
return handlers.reject(promise, e); | ||
} | ||
if (returnValue === promise) { | ||
handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); | ||
} else { | ||
handlers.resolve(promise, returnValue); | ||
} | ||
}); | ||
} | ||
handlers.resolve = function (self, value) { | ||
var result = tryCatch(getThen, value); | ||
if (result.status === 'error') { | ||
return handlers.reject(self, result.value); | ||
} | ||
var thenable = result.value; | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return resolve([]); | ||
if (thenable) { | ||
safelyResolveThenable(self, thenable); | ||
} else { | ||
self.state = FULFILLED; | ||
self.outcome = value; | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callFulfilled(value); | ||
} | ||
} | ||
return self; | ||
}; | ||
handlers.reject = function (self, error) { | ||
self.state = REJECTED; | ||
self.outcome = error; | ||
var i = -1; | ||
var promise = new Promise(INTERNAL); | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
resolver(iterable[i]); | ||
self.queue[i].callRejected(error); | ||
} | ||
return promise; | ||
function resolver(value) { | ||
resolve(value).then(function (response) { | ||
if (!called) { | ||
called = true; | ||
handlers.resolve(promise, response); | ||
} | ||
}, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
return self; | ||
}; | ||
function getThen(obj) { | ||
// Make sure we only access the accessor once as required by the spec | ||
var then = obj && obj.then; | ||
if (obj && typeof obj === 'object' && typeof then === 'function') { | ||
return function appyThen() { | ||
then.apply(obj, arguments); | ||
}; | ||
} | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":5,"./reject":8,"./resolve":9}],8:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = reject; | ||
function reject(reason) { | ||
var promise = new Promise(INTERNAL); | ||
return handlers.reject(promise, reason); | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":5}],9:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = resolve; | ||
var FALSE = handlers.resolve(new Promise(INTERNAL), false); | ||
var NULL = handlers.resolve(new Promise(INTERNAL), null); | ||
var UNDEFINED = handlers.resolve(new Promise(INTERNAL), void 0); | ||
var ZERO = handlers.resolve(new Promise(INTERNAL), 0); | ||
var EMPTYSTRING = handlers.resolve(new Promise(INTERNAL), ''); | ||
function resolve(value) { | ||
if (value) { | ||
if (value instanceof Promise) { | ||
return value; | ||
} | ||
return handlers.resolve(new Promise(INTERNAL), value); | ||
} | ||
var valueType = typeof value; | ||
switch (valueType) { | ||
case 'boolean': | ||
return FALSE; | ||
case 'undefined': | ||
return UNDEFINED; | ||
case 'object': | ||
return NULL; | ||
case 'number': | ||
return ZERO; | ||
case 'string': | ||
return EMPTYSTRING; | ||
} | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":5}],10:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var handlers = _dereq_('./handlers'); | ||
var tryCatch = _dereq_('./tryCatch'); | ||
function safelyResolveThenable(self, thenable) { | ||
@@ -296,3 +152,3 @@ // Either fulfill, reject or reject with error | ||
} | ||
var result = tryCatch(tryToUnwrap); | ||
@@ -303,15 +159,3 @@ if (result.status === 'error') { | ||
} | ||
exports.safely = safelyResolveThenable; | ||
},{"./handlers":4,"./tryCatch":12}],11:[function(_dereq_,module,exports){ | ||
// Lazy man's symbols for states | ||
exports.REJECTED = ['REJECTED']; | ||
exports.FULFILLED = ['FULFILLED']; | ||
exports.PENDING = ['PENDING']; | ||
},{}],12:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
module.exports = tryCatch; | ||
function tryCatch(func, value) { | ||
@@ -328,27 +172,94 @@ var out = {}; | ||
} | ||
},{}],13:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var immediate = _dereq_('immediate'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = unwrap; | ||
exports.resolve = resolve; | ||
function resolve(value) { | ||
if (value instanceof this) { | ||
return value; | ||
} | ||
return handlers.resolve(new this(INTERNAL), value); | ||
} | ||
function unwrap(promise, func, value) { | ||
immediate(function () { | ||
var returnValue; | ||
try { | ||
returnValue = func(value); | ||
} catch (e) { | ||
return handlers.reject(promise, e); | ||
exports.reject = reject; | ||
function reject(reason) { | ||
var promise = new this(INTERNAL); | ||
return handlers.reject(promise, reason); | ||
} | ||
exports.all = all; | ||
function all(iterable) { | ||
var self = this; | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return this.reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return this.resolve([]); | ||
} | ||
var values = new Array(len); | ||
var resolved = 0; | ||
var i = -1; | ||
var promise = new this(INTERNAL); | ||
while (++i < len) { | ||
allResolver(iterable[i], i); | ||
} | ||
return promise; | ||
function allResolver(value, i) { | ||
self.resolve(value).then(resolveFromAll, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
function resolveFromAll(outValue) { | ||
values[i] = outValue; | ||
if (++resolved === len && !called) { | ||
called = true; | ||
handlers.resolve(promise, values); | ||
} | ||
} | ||
if (returnValue === promise) { | ||
handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); | ||
} else { | ||
handlers.resolve(promise, returnValue); | ||
} | ||
}); | ||
} | ||
} | ||
},{"./handlers":4,"immediate":15}],14:[function(_dereq_,module,exports){ | ||
},{}],15:[function(_dereq_,module,exports){ | ||
exports.race = race; | ||
function race(iterable) { | ||
var self = this; | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return this.reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return this.resolve([]); | ||
} | ||
var i = -1; | ||
var promise = new this(INTERNAL); | ||
while (++i < len) { | ||
resolver(iterable[i]); | ||
} | ||
return promise; | ||
function resolver(value) { | ||
self.resolve(value).then(function (response) { | ||
if (!called) { | ||
called = true; | ||
handlers.resolve(promise, response); | ||
} | ||
}, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
} | ||
} | ||
},{"immediate":3}],2:[function(_dereq_,module,exports){ | ||
},{}],3:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
@@ -395,3 +306,3 @@ var types = [ | ||
} | ||
},{"./messageChannel":16,"./mutation.js":17,"./nextTick":14,"./stateChange":18,"./timeout":19}],16:[function(_dereq_,module,exports){ | ||
},{"./messageChannel":4,"./mutation.js":5,"./nextTick":2,"./stateChange":6,"./timeout":7}],4:[function(_dereq_,module,exports){ | ||
(function (global){ | ||
@@ -417,3 +328,3 @@ 'use strict'; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{}],17:[function(_dereq_,module,exports){ | ||
},{}],5:[function(_dereq_,module,exports){ | ||
(function (global){ | ||
@@ -443,3 +354,3 @@ 'use strict'; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{}],18:[function(_dereq_,module,exports){ | ||
},{}],6:[function(_dereq_,module,exports){ | ||
(function (global){ | ||
@@ -471,3 +382,3 @@ 'use strict'; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{}],19:[function(_dereq_,module,exports){ | ||
},{}],7:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
@@ -474,0 +385,0 @@ exports.test = function () { |
@@ -1,1 +0,1 @@ | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Promise=e()}}(function(){return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[s]={exports:{}};t[s][0].call(l.exports,function(e){var n=t[s][1][e];return o(n?n:e)},l,l.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(e,t,n){t.exports=n=e("./promise"),n.resolve=e("./resolve"),n.reject=e("./reject"),n.all=e("./all"),n.race=e("./race")},{"./all":3,"./promise":5,"./race":7,"./reject":8,"./resolve":9}],2:[function(e,t,n){"use strict";function r(){}t.exports=r},{}],3:[function(e,t,n){"use strict";function r(e){function t(e,t){function o(e){c[t]=e,++l===n&!r&&(r=!0,a.resolve(d,c))}s(e).then(o,function(e){r||(r=!0,a.reject(d,e))})}if("[object Array]"!==Object.prototype.toString.call(e))return i(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return s([]);for(var c=new Array(n),l=0,f=-1,d=new o(u);++f<n;)t(e[f],f);return d}var o=e("./promise"),i=e("./reject"),s=e("./resolve"),u=e("./INTERNAL"),a=e("./handlers");t.exports=r},{"./INTERNAL":2,"./handlers":4,"./promise":5,"./reject":8,"./resolve":9}],4:[function(e,t,n){"use strict";function r(e){var t=e&&e.then;return e&&"object"==typeof e&&"function"==typeof t?function(){t.apply(e,arguments)}:void 0}var o=e("./tryCatch"),i=e("./resolveThenable"),s=e("./states");n.resolve=function(e,t){var u=o(r,t);if("error"===u.status)return n.reject(e,u.value);var a=u.value;if(a)i.safely(e,a);else{e.state=s.FULFILLED,e.outcome=t;for(var c=-1,l=e.queue.length;++c<l;)e.queue[c].callFulfilled(t)}return e},n.reject=function(e,t){e.state=s.REJECTED,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e}},{"./resolveThenable":10,"./states":11,"./tryCatch":12}],5:[function(e,t,n){"use strict";function r(e){if(!(this instanceof r))return new r(e);if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=u.PENDING,this.queue=[],this.outcome=void 0,e!==i&&s.safely(this,e)}var o=e("./unwrap"),i=e("./INTERNAL"),s=e("./resolveThenable"),u=e("./states"),a=e("./queueItem");t.exports=r,r.prototype["catch"]=function(e){return this.then(null,e)},r.prototype.then=function(e,t){if("function"!=typeof e&&this.state===u.FULFILLED||"function"!=typeof t&&this.state===u.REJECTED)return this;var n=new r(i);if(this.state!==u.PENDING){var s=this.state===u.FULFILLED?e:t;o(n,s,this.outcome)}else this.queue.push(new a(n,e,t));return n}},{"./INTERNAL":2,"./queueItem":6,"./resolveThenable":10,"./states":11,"./unwrap":13}],6:[function(e,t,n){"use strict";function r(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}var o=e("./handlers"),i=e("./unwrap");t.exports=r,r.prototype.callFulfilled=function(e){o.resolve(this.promise,e)},r.prototype.otherCallFulfilled=function(e){i(this.promise,this.onFulfilled,e)},r.prototype.callRejected=function(e){o.reject(this.promise,e)},r.prototype.otherCallRejected=function(e){i(this.promise,this.onRejected,e)}},{"./handlers":4,"./unwrap":13}],7:[function(e,t,n){"use strict";function r(e){function t(e){s(e).then(function(e){r||(r=!0,a.resolve(l,e))},function(e){r||(r=!0,a.reject(l,e))})}if("[object Array]"!==Object.prototype.toString.call(e))return i(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return s([]);for(var c=-1,l=new o(u);++c<n;)t(e[c]);return l}var o=e("./promise"),i=e("./reject"),s=e("./resolve"),u=e("./INTERNAL"),a=e("./handlers");t.exports=r},{"./INTERNAL":2,"./handlers":4,"./promise":5,"./reject":8,"./resolve":9}],8:[function(e,t,n){"use strict";function r(e){var t=new o(i);return s.reject(t,e)}var o=e("./promise"),i=e("./INTERNAL"),s=e("./handlers");t.exports=r},{"./INTERNAL":2,"./handlers":4,"./promise":5}],9:[function(e,t,n){"use strict";function r(e){if(e)return e instanceof o?e:s.resolve(new o(i),e);var t=typeof e;switch(t){case"boolean":return u;case"undefined":return c;case"object":return a;case"number":return l;case"string":return f}}var o=e("./promise"),i=e("./INTERNAL"),s=e("./handlers");t.exports=r;var u=s.resolve(new o(i),!1),a=s.resolve(new o(i),null),c=s.resolve(new o(i),void 0),l=s.resolve(new o(i),0),f=s.resolve(new o(i),"")},{"./INTERNAL":2,"./handlers":4,"./promise":5}],10:[function(e,t,n){"use strict";function r(e,t){function n(t){u||(u=!0,o.reject(e,t))}function r(t){u||(u=!0,o.resolve(e,t))}function s(){t(r,n)}var u=!1,a=i(s);"error"===a.status&&n(a.value)}var o=e("./handlers"),i=e("./tryCatch");n.safely=r},{"./handlers":4,"./tryCatch":12}],11:[function(e,t,n){n.REJECTED=["REJECTED"],n.FULFILLED=["FULFILLED"],n.PENDING=["PENDING"]},{}],12:[function(e,t,n){"use strict";function r(e,t){var n={};try{n.value=e(t),n.status="success"}catch(r){n.status="error",n.value=r}return n}t.exports=r},{}],13:[function(e,t,n){"use strict";function r(e,t,n){o(function(){var r;try{r=t(n)}catch(o){return i.reject(e,o)}r===e?i.reject(e,new TypeError("Cannot resolve promise with itself")):i.resolve(e,r)})}var o=e("immediate"),i=e("./handlers");t.exports=r},{"./handlers":4,immediate:15}],14:[function(e,t,n){},{}],15:[function(e,t,n){"use strict";function r(){i=!0;for(var e,t,n=a.length;n;){for(t=a,a=[],e=-1;++e<n;)t[e]();n=a.length}i=!1}function o(e){1!==a.push(e)||i||s()}for(var i,s,u=[e("./nextTick"),e("./mutation.js"),e("./messageChannel"),e("./stateChange"),e("./timeout")],a=[],c=-1,l=u.length;++c<l;)if(u[c]&&u[c].test&&u[c].test()){s=u[c].install(r);break}t.exports=o},{"./messageChannel":16,"./mutation.js":17,"./nextTick":14,"./stateChange":18,"./timeout":19}],16:[function(e,t,n){(function(e){"use strict";n.test=function(){return e.setImmediate?!1:"undefined"!=typeof e.MessageChannel},n.install=function(t){var n=new e.MessageChannel;return n.port1.onmessage=t,function(){n.port2.postMessage(0)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],17:[function(e,t,n){(function(e){"use strict";var t=e.MutationObserver||e.WebKitMutationObserver;n.test=function(){return t},n.install=function(n){var r=0,o=new t(n),i=e.document.createTextNode("");return o.observe(i,{characterData:!0}),function(){i.data=r=++r%2}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(e,t,n){(function(e){"use strict";n.test=function(){return"document"in e&&"onreadystatechange"in e.document.createElement("script")},n.install=function(t){return function(){var n=e.document.createElement("script");return n.onreadystatechange=function(){t(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},e.document.documentElement.appendChild(n),t}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,t,n){"use strict";n.test=function(){return!0},n.install=function(e){return function(){setTimeout(e,0)}}},{}]},{},[1])(1)}); | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Promise=e()}}(function(){return function e(t,n,r){function o(u,s){if(!n[u]){if(!t[u]){var f="function"==typeof require&&require;if(!s&&f)return f(u,!0);if(i)return i(u,!0);var c=new Error("Cannot find module '"+u+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return o(n?n:e)},l,l.exports,e,t,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u<r.length;u++)o(r[u]);return o}({1:[function(e,t,n){"use strict";function r(){}function o(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=w,this.queue=[],this.outcome=void 0,e!==r&&f(this,e)}function i(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function u(e,t,n){p(function(){var r;try{r=t(n)}catch(o){return v.reject(e,o)}r===e?v.reject(e,new TypeError("Cannot resolve promise with itself")):v.resolve(e,r)})}function s(e){var t=e&&e.then;return e&&"object"==typeof e&&"function"==typeof t?function(){t.apply(e,arguments)}:void 0}function f(e,t){function n(t){i||(i=!0,v.reject(e,t))}function r(t){i||(i=!0,v.resolve(e,t))}function o(){t(r,n)}var i=!1,u=c(o);"error"===u.status&&n(u.value)}function c(e,t){var n={};try{n.value=e(t),n.status="success"}catch(r){n.status="error",n.value=r}return n}function l(e){return e instanceof this?e:v.resolve(new this(r),e)}function a(e){var t=new this(r);return v.reject(t,e)}function d(e){function t(e,t){function r(e){u[t]=e,++s!==o||i||(i=!0,v.resolve(c,u))}n.resolve(e).then(r,function(e){i||(i=!0,v.reject(c,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=new Array(o),s=0,f=-1,c=new this(r);++f<o;)t(e[f],f);return c}function h(e){function t(e){n.resolve(e).then(function(e){i||(i=!0,v.resolve(s,e))},function(e){i||(i=!0,v.reject(s,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=-1,s=new this(r);++u<o;)t(e[u]);return s}var p=e("immediate"),v={},y=["REJECTED"],m=["FULFILLED"],w=["PENDING"];t.exports=n=o,o.prototype["catch"]=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if("function"!=typeof e&&this.state===m||"function"!=typeof t&&this.state===y)return this;var n=new this.constructor(r);if(this.state!==w){var o=this.state===m?e:t;u(n,o,this.outcome)}else this.queue.push(new i(n,e,t));return n},i.prototype.callFulfilled=function(e){v.resolve(this.promise,e)},i.prototype.otherCallFulfilled=function(e){u(this.promise,this.onFulfilled,e)},i.prototype.callRejected=function(e){v.reject(this.promise,e)},i.prototype.otherCallRejected=function(e){u(this.promise,this.onRejected,e)},v.resolve=function(e,t){var n=c(s,t);if("error"===n.status)return v.reject(e,n.value);var r=n.value;if(r)f(e,r);else{e.state=m,e.outcome=t;for(var o=-1,i=e.queue.length;++o<i;)e.queue[o].callFulfilled(t)}return e},v.reject=function(e,t){e.state=y,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},n.resolve=l,n.reject=a,n.all=d,n.race=h},{immediate:3}],2:[function(e,t,n){},{}],3:[function(e,t,n){"use strict";function r(){i=!0;for(var e,t,n=f.length;n;){for(t=f,f=[],e=-1;++e<n;)t[e]();n=f.length}i=!1}function o(e){1!==f.push(e)||i||u()}for(var i,u,s=[e("./nextTick"),e("./mutation.js"),e("./messageChannel"),e("./stateChange"),e("./timeout")],f=[],c=-1,l=s.length;++c<l;)if(s[c]&&s[c].test&&s[c].test()){u=s[c].install(r);break}t.exports=o},{"./messageChannel":4,"./mutation.js":5,"./nextTick":2,"./stateChange":6,"./timeout":7}],4:[function(e,t,n){(function(e){"use strict";n.test=function(){return e.setImmediate?!1:"undefined"!=typeof e.MessageChannel},n.install=function(t){var n=new e.MessageChannel;return n.port1.onmessage=t,function(){n.port2.postMessage(0)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,n){(function(e){"use strict";var t=e.MutationObserver||e.WebKitMutationObserver;n.test=function(){return t},n.install=function(n){var r=0,o=new t(n),i=e.document.createTextNode("");return o.observe(i,{characterData:!0}),function(){i.data=r=++r%2}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],6:[function(e,t,n){(function(e){"use strict";n.test=function(){return"document"in e&&"onreadystatechange"in e.document.createElement("script")},n.install=function(t){return function(){var n=e.document.createElement("script");return n.onreadystatechange=function(){t(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},e.document.documentElement.appendChild(n),t}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(e,t,n){"use strict";n.test=function(){return!0},n.install=function(e){return function(){setTimeout(e,0)}}},{}]},{},[1])(1)}); |
(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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.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(_dereq_,module,exports){ | ||
(function (global){ | ||
'use strict'; | ||
if (typeof global.Promise !== 'function') { | ||
global.Promise = _dereq_('./index'); | ||
} | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{"./index":5}],2:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var immediate = _dereq_('immediate'); | ||
module.exports = INTERNAL; | ||
/* istanbul ignore next */ | ||
function INTERNAL() {} | ||
},{}],3:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var reject = _dereq_('./reject'); | ||
var resolve = _dereq_('./resolve'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = all; | ||
function all(iterable) { | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return resolve([]); | ||
} | ||
var handlers = {}; | ||
var values = new Array(len); | ||
var resolved = 0; | ||
var i = -1; | ||
var promise = new Promise(INTERNAL); | ||
while (++i < len) { | ||
allResolver(iterable[i], i); | ||
} | ||
return promise; | ||
function allResolver(value, i) { | ||
resolve(value).then(resolveFromAll, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
function resolveFromAll(outValue) { | ||
values[i] = outValue; | ||
if (++resolved === len & !called) { | ||
called = true; | ||
handlers.resolve(promise, values); | ||
} | ||
} | ||
} | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":6,"./reject":9,"./resolve":10}],4:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var tryCatch = _dereq_('./tryCatch'); | ||
var resolveThenable = _dereq_('./resolveThenable'); | ||
var states = _dereq_('./states'); | ||
var REJECTED = ['REJECTED']; | ||
var FULFILLED = ['FULFILLED']; | ||
var PENDING = ['PENDING']; | ||
var UNHANDLED; | ||
exports.resolve = function (self, value) { | ||
var result = tryCatch(getThen, value); | ||
if (result.status === 'error') { | ||
return exports.reject(self, result.value); | ||
} | ||
var thenable = result.value; | ||
module.exports = exports = Promise; | ||
if (thenable) { | ||
resolveThenable.safely(self, thenable); | ||
} else { | ||
self.state = states.FULFILLED; | ||
self.outcome = value; | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callFulfilled(value); | ||
} | ||
} | ||
return self; | ||
}; | ||
exports.reject = function (self, error) { | ||
self.state = states.REJECTED; | ||
self.outcome = error; | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callRejected(error); | ||
} | ||
return self; | ||
}; | ||
function getThen(obj) { | ||
// Make sure we only access the accessor once as required by the spec | ||
var then = obj && obj.then; | ||
if (obj && typeof obj === 'object' && typeof then === 'function') { | ||
return function appyThen() { | ||
then.apply(obj, arguments); | ||
}; | ||
} | ||
} | ||
},{"./resolveThenable":11,"./states":12,"./tryCatch":13}],5:[function(_dereq_,module,exports){ | ||
module.exports = exports = _dereq_('./promise'); | ||
exports.resolve = _dereq_('./resolve'); | ||
exports.reject = _dereq_('./reject'); | ||
exports.all = _dereq_('./all'); | ||
exports.race = _dereq_('./race'); | ||
},{"./all":3,"./promise":6,"./race":8,"./reject":9,"./resolve":10}],6:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var unwrap = _dereq_('./unwrap'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var resolveThenable = _dereq_('./resolveThenable'); | ||
var states = _dereq_('./states'); | ||
var QueueItem = _dereq_('./queueItem'); | ||
module.exports = Promise; | ||
function Promise(resolver) { | ||
if (!(this instanceof Promise)) { | ||
return new Promise(resolver); | ||
} | ||
if (typeof resolver !== 'function') { | ||
throw new TypeError('resolver must be a function'); | ||
} | ||
this.state = states.PENDING; | ||
this.state = PENDING; | ||
this.queue = []; | ||
this.outcome = void 0; | ||
if (resolver !== INTERNAL) { | ||
resolveThenable.safely(this, resolver); | ||
safelyResolveThenable(this, resolver); | ||
} | ||
} | ||
Promise.prototype['catch'] = function (onRejected) { | ||
Promise.prototype["catch"] = function (onRejected) { | ||
return this.then(null, onRejected); | ||
}; | ||
Promise.prototype.then = function (onFulfilled, onRejected) { | ||
if (typeof onFulfilled !== 'function' && this.state === states.FULFILLED || | ||
typeof onRejected !== 'function' && this.state === states.REJECTED) { | ||
if (typeof onFulfilled !== 'function' && this.state === FULFILLED || | ||
typeof onRejected !== 'function' && this.state === REJECTED) { | ||
return this; | ||
} | ||
var promise = new Promise(INTERNAL); | ||
if (this.state !== states.PENDING) { | ||
var resolver = this.state === states.FULFILLED ? onFulfilled : onRejected; | ||
var promise = new this.constructor(INTERNAL); | ||
if (this.state !== PENDING) { | ||
var resolver = this.state === FULFILLED ? onFulfilled : onRejected; | ||
unwrap(promise, resolver, this.outcome); | ||
@@ -156,9 +47,2 @@ } else { | ||
}; | ||
},{"./INTERNAL":2,"./queueItem":7,"./resolveThenable":11,"./states":12,"./unwrap":14}],7:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var handlers = _dereq_('./handlers'); | ||
var unwrap = _dereq_('./unwrap'); | ||
module.exports = QueueItem; | ||
function QueueItem(promise, onFulfilled, onRejected) { | ||
@@ -188,94 +72,59 @@ this.promise = promise; | ||
},{"./handlers":4,"./unwrap":14}],8:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var reject = _dereq_('./reject'); | ||
var resolve = _dereq_('./resolve'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = race; | ||
function race(iterable) { | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return reject(new TypeError('must be an array')); | ||
function unwrap(promise, func, value) { | ||
immediate(function () { | ||
var returnValue; | ||
try { | ||
returnValue = func(value); | ||
} catch (e) { | ||
return handlers.reject(promise, e); | ||
} | ||
if (returnValue === promise) { | ||
handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); | ||
} else { | ||
handlers.resolve(promise, returnValue); | ||
} | ||
}); | ||
} | ||
handlers.resolve = function (self, value) { | ||
var result = tryCatch(getThen, value); | ||
if (result.status === 'error') { | ||
return handlers.reject(self, result.value); | ||
} | ||
var thenable = result.value; | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return resolve([]); | ||
if (thenable) { | ||
safelyResolveThenable(self, thenable); | ||
} else { | ||
self.state = FULFILLED; | ||
self.outcome = value; | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callFulfilled(value); | ||
} | ||
} | ||
return self; | ||
}; | ||
handlers.reject = function (self, error) { | ||
self.state = REJECTED; | ||
self.outcome = error; | ||
var i = -1; | ||
var promise = new Promise(INTERNAL); | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
resolver(iterable[i]); | ||
self.queue[i].callRejected(error); | ||
} | ||
return promise; | ||
function resolver(value) { | ||
resolve(value).then(function (response) { | ||
if (!called) { | ||
called = true; | ||
handlers.resolve(promise, response); | ||
} | ||
}, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
return self; | ||
}; | ||
function getThen(obj) { | ||
// Make sure we only access the accessor once as required by the spec | ||
var then = obj && obj.then; | ||
if (obj && typeof obj === 'object' && typeof then === 'function') { | ||
return function appyThen() { | ||
then.apply(obj, arguments); | ||
}; | ||
} | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":6,"./reject":9,"./resolve":10}],9:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = reject; | ||
function reject(reason) { | ||
var promise = new Promise(INTERNAL); | ||
return handlers.reject(promise, reason); | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":6}],10:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var Promise = _dereq_('./promise'); | ||
var INTERNAL = _dereq_('./INTERNAL'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = resolve; | ||
var FALSE = handlers.resolve(new Promise(INTERNAL), false); | ||
var NULL = handlers.resolve(new Promise(INTERNAL), null); | ||
var UNDEFINED = handlers.resolve(new Promise(INTERNAL), void 0); | ||
var ZERO = handlers.resolve(new Promise(INTERNAL), 0); | ||
var EMPTYSTRING = handlers.resolve(new Promise(INTERNAL), ''); | ||
function resolve(value) { | ||
if (value) { | ||
if (value instanceof Promise) { | ||
return value; | ||
} | ||
return handlers.resolve(new Promise(INTERNAL), value); | ||
} | ||
var valueType = typeof value; | ||
switch (valueType) { | ||
case 'boolean': | ||
return FALSE; | ||
case 'undefined': | ||
return UNDEFINED; | ||
case 'object': | ||
return NULL; | ||
case 'number': | ||
return ZERO; | ||
case 'string': | ||
return EMPTYSTRING; | ||
} | ||
} | ||
},{"./INTERNAL":2,"./handlers":4,"./promise":6}],11:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var handlers = _dereq_('./handlers'); | ||
var tryCatch = _dereq_('./tryCatch'); | ||
function safelyResolveThenable(self, thenable) { | ||
@@ -303,3 +152,3 @@ // Either fulfill, reject or reject with error | ||
} | ||
var result = tryCatch(tryToUnwrap); | ||
@@ -310,15 +159,3 @@ if (result.status === 'error') { | ||
} | ||
exports.safely = safelyResolveThenable; | ||
},{"./handlers":4,"./tryCatch":13}],12:[function(_dereq_,module,exports){ | ||
// Lazy man's symbols for states | ||
exports.REJECTED = ['REJECTED']; | ||
exports.FULFILLED = ['FULFILLED']; | ||
exports.PENDING = ['PENDING']; | ||
},{}],13:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
module.exports = tryCatch; | ||
function tryCatch(func, value) { | ||
@@ -335,27 +172,94 @@ var out = {}; | ||
} | ||
},{}],14:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
var immediate = _dereq_('immediate'); | ||
var handlers = _dereq_('./handlers'); | ||
module.exports = unwrap; | ||
exports.resolve = resolve; | ||
function resolve(value) { | ||
if (value instanceof this) { | ||
return value; | ||
} | ||
return handlers.resolve(new this(INTERNAL), value); | ||
} | ||
function unwrap(promise, func, value) { | ||
immediate(function () { | ||
var returnValue; | ||
try { | ||
returnValue = func(value); | ||
} catch (e) { | ||
return handlers.reject(promise, e); | ||
exports.reject = reject; | ||
function reject(reason) { | ||
var promise = new this(INTERNAL); | ||
return handlers.reject(promise, reason); | ||
} | ||
exports.all = all; | ||
function all(iterable) { | ||
var self = this; | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return this.reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return this.resolve([]); | ||
} | ||
var values = new Array(len); | ||
var resolved = 0; | ||
var i = -1; | ||
var promise = new this(INTERNAL); | ||
while (++i < len) { | ||
allResolver(iterable[i], i); | ||
} | ||
return promise; | ||
function allResolver(value, i) { | ||
self.resolve(value).then(resolveFromAll, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
function resolveFromAll(outValue) { | ||
values[i] = outValue; | ||
if (++resolved === len && !called) { | ||
called = true; | ||
handlers.resolve(promise, values); | ||
} | ||
} | ||
if (returnValue === promise) { | ||
handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); | ||
} else { | ||
handlers.resolve(promise, returnValue); | ||
} | ||
}); | ||
} | ||
} | ||
},{"./handlers":4,"immediate":16}],15:[function(_dereq_,module,exports){ | ||
},{}],16:[function(_dereq_,module,exports){ | ||
exports.race = race; | ||
function race(iterable) { | ||
var self = this; | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return this.reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return this.resolve([]); | ||
} | ||
var i = -1; | ||
var promise = new this(INTERNAL); | ||
while (++i < len) { | ||
resolver(iterable[i]); | ||
} | ||
return promise; | ||
function resolver(value) { | ||
self.resolve(value).then(function (response) { | ||
if (!called) { | ||
called = true; | ||
handlers.resolve(promise, response); | ||
} | ||
}, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
} | ||
} | ||
},{"immediate":3}],2:[function(_dereq_,module,exports){ | ||
},{}],3:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
@@ -402,3 +306,3 @@ var types = [ | ||
} | ||
},{"./messageChannel":17,"./mutation.js":18,"./nextTick":15,"./stateChange":19,"./timeout":20}],17:[function(_dereq_,module,exports){ | ||
},{"./messageChannel":4,"./mutation.js":5,"./nextTick":2,"./stateChange":6,"./timeout":7}],4:[function(_dereq_,module,exports){ | ||
(function (global){ | ||
@@ -424,3 +328,3 @@ 'use strict'; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{}],18:[function(_dereq_,module,exports){ | ||
},{}],5:[function(_dereq_,module,exports){ | ||
(function (global){ | ||
@@ -450,3 +354,3 @@ 'use strict'; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{}],19:[function(_dereq_,module,exports){ | ||
},{}],6:[function(_dereq_,module,exports){ | ||
(function (global){ | ||
@@ -478,3 +382,3 @@ 'use strict'; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{}],20:[function(_dereq_,module,exports){ | ||
},{}],7:[function(_dereq_,module,exports){ | ||
'use strict'; | ||
@@ -490,3 +394,11 @@ exports.test = function () { | ||
}; | ||
},{}]},{},[1]); | ||
},{}],8:[function(_dereq_,module,exports){ | ||
(function (global){ | ||
'use strict'; | ||
if (typeof global.Promise !== 'function') { | ||
global.Promise = _dereq_('./lib'); | ||
} | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{"./lib":1}]},{},[8]); | ||
@@ -1,1 +0,1 @@ | ||
!function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[s]={exports:{}};t[s][0].call(l.exports,function(e){var n=t[s][1][e];return o(n?n:e)},l,l.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(e,t,n){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e("./index"))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./index":5}],2:[function(e,t,n){"use strict";function r(){}t.exports=r},{}],3:[function(e,t,n){"use strict";function r(e){function t(e,t){function o(e){c[t]=e,++l===n&!r&&(r=!0,a.resolve(p,c))}s(e).then(o,function(e){r||(r=!0,a.reject(p,e))})}if("[object Array]"!==Object.prototype.toString.call(e))return i(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return s([]);for(var c=new Array(n),l=0,f=-1,p=new o(u);++f<n;)t(e[f],f);return p}var o=e("./promise"),i=e("./reject"),s=e("./resolve"),u=e("./INTERNAL"),a=e("./handlers");t.exports=r},{"./INTERNAL":2,"./handlers":4,"./promise":6,"./reject":9,"./resolve":10}],4:[function(e,t,n){"use strict";function r(e){var t=e&&e.then;return e&&"object"==typeof e&&"function"==typeof t?function(){t.apply(e,arguments)}:void 0}var o=e("./tryCatch"),i=e("./resolveThenable"),s=e("./states");n.resolve=function(e,t){var u=o(r,t);if("error"===u.status)return n.reject(e,u.value);var a=u.value;if(a)i.safely(e,a);else{e.state=s.FULFILLED,e.outcome=t;for(var c=-1,l=e.queue.length;++c<l;)e.queue[c].callFulfilled(t)}return e},n.reject=function(e,t){e.state=s.REJECTED,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e}},{"./resolveThenable":11,"./states":12,"./tryCatch":13}],5:[function(e,t,n){t.exports=n=e("./promise"),n.resolve=e("./resolve"),n.reject=e("./reject"),n.all=e("./all"),n.race=e("./race")},{"./all":3,"./promise":6,"./race":8,"./reject":9,"./resolve":10}],6:[function(e,t,n){"use strict";function r(e){if(!(this instanceof r))return new r(e);if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=u.PENDING,this.queue=[],this.outcome=void 0,e!==i&&s.safely(this,e)}var o=e("./unwrap"),i=e("./INTERNAL"),s=e("./resolveThenable"),u=e("./states"),a=e("./queueItem");t.exports=r,r.prototype["catch"]=function(e){return this.then(null,e)},r.prototype.then=function(e,t){if("function"!=typeof e&&this.state===u.FULFILLED||"function"!=typeof t&&this.state===u.REJECTED)return this;var n=new r(i);if(this.state!==u.PENDING){var s=this.state===u.FULFILLED?e:t;o(n,s,this.outcome)}else this.queue.push(new a(n,e,t));return n}},{"./INTERNAL":2,"./queueItem":7,"./resolveThenable":11,"./states":12,"./unwrap":14}],7:[function(e,t,n){"use strict";function r(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}var o=e("./handlers"),i=e("./unwrap");t.exports=r,r.prototype.callFulfilled=function(e){o.resolve(this.promise,e)},r.prototype.otherCallFulfilled=function(e){i(this.promise,this.onFulfilled,e)},r.prototype.callRejected=function(e){o.reject(this.promise,e)},r.prototype.otherCallRejected=function(e){i(this.promise,this.onRejected,e)}},{"./handlers":4,"./unwrap":14}],8:[function(e,t,n){"use strict";function r(e){function t(e){s(e).then(function(e){r||(r=!0,a.resolve(l,e))},function(e){r||(r=!0,a.reject(l,e))})}if("[object Array]"!==Object.prototype.toString.call(e))return i(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return s([]);for(var c=-1,l=new o(u);++c<n;)t(e[c]);return l}var o=e("./promise"),i=e("./reject"),s=e("./resolve"),u=e("./INTERNAL"),a=e("./handlers");t.exports=r},{"./INTERNAL":2,"./handlers":4,"./promise":6,"./reject":9,"./resolve":10}],9:[function(e,t,n){"use strict";function r(e){var t=new o(i);return s.reject(t,e)}var o=e("./promise"),i=e("./INTERNAL"),s=e("./handlers");t.exports=r},{"./INTERNAL":2,"./handlers":4,"./promise":6}],10:[function(e,t,n){"use strict";function r(e){if(e)return e instanceof o?e:s.resolve(new o(i),e);var t=typeof e;switch(t){case"boolean":return u;case"undefined":return c;case"object":return a;case"number":return l;case"string":return f}}var o=e("./promise"),i=e("./INTERNAL"),s=e("./handlers");t.exports=r;var u=s.resolve(new o(i),!1),a=s.resolve(new o(i),null),c=s.resolve(new o(i),void 0),l=s.resolve(new o(i),0),f=s.resolve(new o(i),"")},{"./INTERNAL":2,"./handlers":4,"./promise":6}],11:[function(e,t,n){"use strict";function r(e,t){function n(t){u||(u=!0,o.reject(e,t))}function r(t){u||(u=!0,o.resolve(e,t))}function s(){t(r,n)}var u=!1,a=i(s);"error"===a.status&&n(a.value)}var o=e("./handlers"),i=e("./tryCatch");n.safely=r},{"./handlers":4,"./tryCatch":13}],12:[function(e,t,n){n.REJECTED=["REJECTED"],n.FULFILLED=["FULFILLED"],n.PENDING=["PENDING"]},{}],13:[function(e,t,n){"use strict";function r(e,t){var n={};try{n.value=e(t),n.status="success"}catch(r){n.status="error",n.value=r}return n}t.exports=r},{}],14:[function(e,t,n){"use strict";function r(e,t,n){o(function(){var r;try{r=t(n)}catch(o){return i.reject(e,o)}r===e?i.reject(e,new TypeError("Cannot resolve promise with itself")):i.resolve(e,r)})}var o=e("immediate"),i=e("./handlers");t.exports=r},{"./handlers":4,immediate:16}],15:[function(e,t,n){},{}],16:[function(e,t,n){"use strict";function r(){i=!0;for(var e,t,n=a.length;n;){for(t=a,a=[],e=-1;++e<n;)t[e]();n=a.length}i=!1}function o(e){1!==a.push(e)||i||s()}for(var i,s,u=[e("./nextTick"),e("./mutation.js"),e("./messageChannel"),e("./stateChange"),e("./timeout")],a=[],c=-1,l=u.length;++c<l;)if(u[c]&&u[c].test&&u[c].test()){s=u[c].install(r);break}t.exports=o},{"./messageChannel":17,"./mutation.js":18,"./nextTick":15,"./stateChange":19,"./timeout":20}],17:[function(e,t,n){(function(e){"use strict";n.test=function(){return e.setImmediate?!1:"undefined"!=typeof e.MessageChannel},n.install=function(t){var n=new e.MessageChannel;return n.port1.onmessage=t,function(){n.port2.postMessage(0)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(e,t,n){(function(e){"use strict";var t=e.MutationObserver||e.WebKitMutationObserver;n.test=function(){return t},n.install=function(n){var r=0,o=new t(n),i=e.document.createTextNode("");return o.observe(i,{characterData:!0}),function(){i.data=r=++r%2}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,t,n){(function(e){"use strict";n.test=function(){return"document"in e&&"onreadystatechange"in e.document.createElement("script")},n.install=function(t){return function(){var n=e.document.createElement("script");return n.onreadystatechange=function(){t(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},e.document.documentElement.appendChild(n),t}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(e,t,n){"use strict";n.test=function(){return!0},n.install=function(e){return function(){setTimeout(e,0)}}},{}]},{},[1]); | ||
!function e(t,n,r){function o(u,s){if(!n[u]){if(!t[u]){var c="function"==typeof require&&require;if(!s&&c)return c(u,!0);if(i)return i(u,!0);var f=new Error("Cannot find module '"+u+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return o(n?n:e)},l,l.exports,e,t,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u<r.length;u++)o(r[u]);return o}({1:[function(e,t,n){"use strict";function r(){}function o(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=w,this.queue=[],this.outcome=void 0,e!==r&&c(this,e)}function i(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function u(e,t,n){p(function(){var r;try{r=t(n)}catch(o){return v.reject(e,o)}r===e?v.reject(e,new TypeError("Cannot resolve promise with itself")):v.resolve(e,r)})}function s(e){var t=e&&e.then;return e&&"object"==typeof e&&"function"==typeof t?function(){t.apply(e,arguments)}:void 0}function c(e,t){function n(t){i||(i=!0,v.reject(e,t))}function r(t){i||(i=!0,v.resolve(e,t))}function o(){t(r,n)}var i=!1,u=f(o);"error"===u.status&&n(u.value)}function f(e,t){var n={};try{n.value=e(t),n.status="success"}catch(r){n.status="error",n.value=r}return n}function l(e){return e instanceof this?e:v.resolve(new this(r),e)}function a(e){var t=new this(r);return v.reject(t,e)}function h(e){function t(e,t){function r(e){u[t]=e,++s!==o||i||(i=!0,v.resolve(f,u))}n.resolve(e).then(r,function(e){i||(i=!0,v.reject(f,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=new Array(o),s=0,c=-1,f=new this(r);++c<o;)t(e[c],c);return f}function d(e){function t(e){n.resolve(e).then(function(e){i||(i=!0,v.resolve(s,e))},function(e){i||(i=!0,v.reject(s,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=-1,s=new this(r);++u<o;)t(e[u]);return s}var p=e("immediate"),v={},y=["REJECTED"],m=["FULFILLED"],w=["PENDING"];t.exports=n=o,o.prototype["catch"]=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if("function"!=typeof e&&this.state===m||"function"!=typeof t&&this.state===y)return this;var n=new this.constructor(r);if(this.state!==w){var o=this.state===m?e:t;u(n,o,this.outcome)}else this.queue.push(new i(n,e,t));return n},i.prototype.callFulfilled=function(e){v.resolve(this.promise,e)},i.prototype.otherCallFulfilled=function(e){u(this.promise,this.onFulfilled,e)},i.prototype.callRejected=function(e){v.reject(this.promise,e)},i.prototype.otherCallRejected=function(e){u(this.promise,this.onRejected,e)},v.resolve=function(e,t){var n=f(s,t);if("error"===n.status)return v.reject(e,n.value);var r=n.value;if(r)c(e,r);else{e.state=m,e.outcome=t;for(var o=-1,i=e.queue.length;++o<i;)e.queue[o].callFulfilled(t)}return e},v.reject=function(e,t){e.state=y,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},n.resolve=l,n.reject=a,n.all=h,n.race=d},{immediate:3}],2:[function(e,t,n){},{}],3:[function(e,t,n){"use strict";function r(){i=!0;for(var e,t,n=c.length;n;){for(t=c,c=[],e=-1;++e<n;)t[e]();n=c.length}i=!1}function o(e){1!==c.push(e)||i||u()}for(var i,u,s=[e("./nextTick"),e("./mutation.js"),e("./messageChannel"),e("./stateChange"),e("./timeout")],c=[],f=-1,l=s.length;++f<l;)if(s[f]&&s[f].test&&s[f].test()){u=s[f].install(r);break}t.exports=o},{"./messageChannel":4,"./mutation.js":5,"./nextTick":2,"./stateChange":6,"./timeout":7}],4:[function(e,t,n){(function(e){"use strict";n.test=function(){return e.setImmediate?!1:"undefined"!=typeof e.MessageChannel},n.install=function(t){var n=new e.MessageChannel;return n.port1.onmessage=t,function(){n.port2.postMessage(0)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,n){(function(e){"use strict";var t=e.MutationObserver||e.WebKitMutationObserver;n.test=function(){return t},n.install=function(n){var r=0,o=new t(n),i=e.document.createTextNode("");return o.observe(i,{characterData:!0}),function(){i.data=r=++r%2}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],6:[function(e,t,n){(function(e){"use strict";n.test=function(){return"document"in e&&"onreadystatechange"in e.document.createElement("script")},n.install=function(t){return function(){var n=e.document.createElement("script");return n.onreadystatechange=function(){t(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},e.document.documentElement.appendChild(n),t}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(e,t,n){"use strict";n.test=function(){return!0},n.install=function(e){return function(){setTimeout(e,0)}}},{}],8:[function(e,t,n){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e("./lib"))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./lib":1}]},{},[8]); |
282
lib/index.js
@@ -1,6 +0,278 @@ | ||
module.exports = exports = require('./promise'); | ||
'use strict'; | ||
var immediate = require('immediate'); | ||
exports.resolve = require('./resolve'); | ||
exports.reject = require('./reject'); | ||
exports.all = require('./all'); | ||
exports.race = require('./race'); | ||
/* istanbul ignore next */ | ||
function INTERNAL() {} | ||
var handlers = {}; | ||
var REJECTED = ['REJECTED']; | ||
var FULFILLED = ['FULFILLED']; | ||
var PENDING = ['PENDING']; | ||
var UNHANDLED; | ||
/* istanbul ignore else */ | ||
if (!process.browser) { | ||
UNHANDLED = ['UNHANDLED']; | ||
} | ||
module.exports = exports = Promise; | ||
function Promise(resolver) { | ||
if (typeof resolver !== 'function') { | ||
throw new TypeError('resolver must be a function'); | ||
} | ||
this.state = PENDING; | ||
this.queue = []; | ||
this.outcome = void 0; | ||
/* istanbul ignore else */ | ||
if (!process.browser) { | ||
this.handled = UNHANDLED; | ||
} | ||
if (resolver !== INTERNAL) { | ||
safelyResolveThenable(this, resolver); | ||
} | ||
} | ||
Promise.prototype.catch = function (onRejected) { | ||
return this.then(null, onRejected); | ||
}; | ||
Promise.prototype.then = function (onFulfilled, onRejected) { | ||
if (typeof onFulfilled !== 'function' && this.state === FULFILLED || | ||
typeof onRejected !== 'function' && this.state === REJECTED) { | ||
return this; | ||
} | ||
var promise = new this.constructor(INTERNAL); | ||
/* istanbul ignore else */ | ||
if (!process.browser) { | ||
if (typeof onRejected === 'function' && this.handled === UNHANDLED) { | ||
this.handled = null; | ||
} | ||
} | ||
if (this.state !== PENDING) { | ||
var resolver = this.state === FULFILLED ? onFulfilled : onRejected; | ||
unwrap(promise, resolver, this.outcome); | ||
} else { | ||
this.queue.push(new QueueItem(promise, onFulfilled, onRejected)); | ||
} | ||
return promise; | ||
}; | ||
function QueueItem(promise, onFulfilled, onRejected) { | ||
this.promise = promise; | ||
if (typeof onFulfilled === 'function') { | ||
this.onFulfilled = onFulfilled; | ||
this.callFulfilled = this.otherCallFulfilled; | ||
} | ||
if (typeof onRejected === 'function') { | ||
this.onRejected = onRejected; | ||
this.callRejected = this.otherCallRejected; | ||
} | ||
} | ||
QueueItem.prototype.callFulfilled = function (value) { | ||
handlers.resolve(this.promise, value); | ||
}; | ||
QueueItem.prototype.otherCallFulfilled = function (value) { | ||
unwrap(this.promise, this.onFulfilled, value); | ||
}; | ||
QueueItem.prototype.callRejected = function (value) { | ||
handlers.reject(this.promise, value); | ||
}; | ||
QueueItem.prototype.otherCallRejected = function (value) { | ||
unwrap(this.promise, this.onRejected, value); | ||
}; | ||
function unwrap(promise, func, value) { | ||
immediate(function () { | ||
var returnValue; | ||
try { | ||
returnValue = func(value); | ||
} catch (e) { | ||
return handlers.reject(promise, e); | ||
} | ||
if (returnValue === promise) { | ||
handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); | ||
} else { | ||
handlers.resolve(promise, returnValue); | ||
} | ||
}); | ||
} | ||
handlers.resolve = function (self, value) { | ||
var result = tryCatch(getThen, value); | ||
if (result.status === 'error') { | ||
return handlers.reject(self, result.value); | ||
} | ||
var thenable = result.value; | ||
if (thenable) { | ||
safelyResolveThenable(self, thenable); | ||
} else { | ||
self.state = FULFILLED; | ||
self.outcome = value; | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callFulfilled(value); | ||
} | ||
} | ||
return self; | ||
}; | ||
handlers.reject = function (self, error) { | ||
self.state = REJECTED; | ||
self.outcome = error; | ||
/* istanbul ignore else */ | ||
if (!process.browser) { | ||
if (self.handled === UNHANDLED) { | ||
require('immediate')(function () { | ||
if (self.handled === UNHANDLED) { | ||
process.emit('unhandledRejection', error, self); | ||
} | ||
}); | ||
} | ||
} | ||
var i = -1; | ||
var len = self.queue.length; | ||
while (++i < len) { | ||
self.queue[i].callRejected(error); | ||
} | ||
return self; | ||
}; | ||
function getThen(obj) { | ||
// Make sure we only access the accessor once as required by the spec | ||
var then = obj && obj.then; | ||
if (obj && typeof obj === 'object' && typeof then === 'function') { | ||
return function appyThen() { | ||
then.apply(obj, arguments); | ||
}; | ||
} | ||
} | ||
function safelyResolveThenable(self, thenable) { | ||
// Either fulfill, reject or reject with error | ||
var called = false; | ||
function onError(value) { | ||
if (called) { | ||
return; | ||
} | ||
called = true; | ||
handlers.reject(self, value); | ||
} | ||
function onSuccess(value) { | ||
if (called) { | ||
return; | ||
} | ||
called = true; | ||
handlers.resolve(self, value); | ||
} | ||
function tryToUnwrap() { | ||
thenable(onSuccess, onError); | ||
} | ||
var result = tryCatch(tryToUnwrap); | ||
if (result.status === 'error') { | ||
onError(result.value); | ||
} | ||
} | ||
function tryCatch(func, value) { | ||
var out = {}; | ||
try { | ||
out.value = func(value); | ||
out.status = 'success'; | ||
} catch (e) { | ||
out.status = 'error'; | ||
out.value = e; | ||
} | ||
return out; | ||
} | ||
exports.resolve = resolve; | ||
function resolve(value) { | ||
if (value instanceof this) { | ||
return value; | ||
} | ||
return handlers.resolve(new this(INTERNAL), value); | ||
} | ||
exports.reject = reject; | ||
function reject(reason) { | ||
var promise = new this(INTERNAL); | ||
return handlers.reject(promise, reason); | ||
} | ||
exports.all = all; | ||
function all(iterable) { | ||
var self = this; | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return this.reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return this.resolve([]); | ||
} | ||
var values = new Array(len); | ||
var resolved = 0; | ||
var i = -1; | ||
var promise = new this(INTERNAL); | ||
while (++i < len) { | ||
allResolver(iterable[i], i); | ||
} | ||
return promise; | ||
function allResolver(value, i) { | ||
self.resolve(value).then(resolveFromAll, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
function resolveFromAll(outValue) { | ||
values[i] = outValue; | ||
if (++resolved === len && !called) { | ||
called = true; | ||
handlers.resolve(promise, values); | ||
} | ||
} | ||
} | ||
} | ||
exports.race = race; | ||
function race(iterable) { | ||
var self = this; | ||
if (Object.prototype.toString.call(iterable) !== '[object Array]') { | ||
return this.reject(new TypeError('must be an array')); | ||
} | ||
var len = iterable.length; | ||
var called = false; | ||
if (!len) { | ||
return this.resolve([]); | ||
} | ||
var i = -1; | ||
var promise = new this(INTERNAL); | ||
while (++i < len) { | ||
resolver(iterable[i]); | ||
} | ||
return promise; | ||
function resolver(value) { | ||
self.resolve(value).then(function (response) { | ||
if (!called) { | ||
called = true; | ||
handlers.resolve(promise, response); | ||
} | ||
}, function (error) { | ||
if (!called) { | ||
called = true; | ||
handlers.reject(promise, error); | ||
} | ||
}); | ||
} | ||
} |
{ | ||
"name": "lie", | ||
"version": "2.9.1", | ||
"version": "3.0.0", | ||
"description": "A basic but performant promise implementation", | ||
@@ -24,9 +24,6 @@ "license": "MIT", | ||
"build-min": "uglifyjs ./dist/lie.js -mc > ./dist/lie.min.js", | ||
"build-nc-js": "browserify -s Lie ./lib/index.js | derequire > ./dist/lie.noConflict.js", | ||
"build-nc-min": "uglifyjs ./dist/lie.noConflict.js -mc > ./dist/lie.noConflict.min.js", | ||
"build-nc": "npm run build-nc-js && npm run build-nc-min", | ||
"build-poly-js": "browserify ./lib/polyfill.js | derequire > ./dist/lie.polyfill.js", | ||
"build-poly-js": "browserify ./polyfill.js | derequire > ./dist/lie.polyfill.js", | ||
"build-poly-min": "uglifyjs ./dist/lie.polyfill.js -mc > ./dist/lie.polyfill.min.js", | ||
"build-poly": "npm run build-poly-js && npm run build-poly-min", | ||
"build": "npm run build-js && npm run build-min && npm run build-nc && npm run build-poly", | ||
"build": "npm run build-js && npm run build-min && npm run build-poly", | ||
"cover": "istanbul cover _mocha ./test/cover.js -- -R spec && istanbul check-coverage --lines 100 --function 100 --statements 100 --branches 100", | ||
@@ -38,3 +35,3 @@ "jshint": "jshint lib/*.js", | ||
"devDependencies": { | ||
"browserify": "^10.2.1", | ||
"browserify": "^11.0.0", | ||
"derequire": "^1.2.0", | ||
@@ -44,3 +41,3 @@ "istanbul": "^0.2.6", | ||
"mocha": "^1.18.0", | ||
"mocha-phantomjs": "^3.5.0", | ||
"mocha-phantomjs": "~3.5.0", | ||
"phantomjs": "^1.9.9", | ||
@@ -51,2 +48,3 @@ "promises-aplus-tests": "calvinmetcalf/promises-tests#phantom", | ||
"dependencies": { | ||
"es3ify": "^0.1.3", | ||
"immediate": "~3.0.0", | ||
@@ -59,5 +57,6 @@ "inline-process-browser": "^1.0.0", | ||
"inline-process-browser", | ||
"unreachable-branch-transform" | ||
"unreachable-branch-transform", | ||
"es3ify" | ||
] | ||
} | ||
} |
@@ -18,2 +18,4 @@ # lie | ||
var Promise = require('lie'); | ||
// or use the pollyfill | ||
require('lie/polyfill'); | ||
``` | ||
@@ -25,4 +27,3 @@ | ||
- lie.js/lie.min.js makes 'Promise' available in global scope (or since it's a UMD `Promise` will be availble through a CJS or AMD loader if it's available instead) | ||
- lie.noConflict.js/lie.noConflict.min.js makes 'Lie' available in global scope, otherwise they are the same as lie.js/lie.min.js | ||
- lie.js/lie.min.js makes 'Promise' available in global scope (or since it's a UMD `Promise` will be available through a CJS or AMD loader if it's available instead) | ||
- lie.polyfill.js/lie.polyfill.min.js adds 'Promise' to the global scope only if it's not already defined (not a UMD). | ||
@@ -29,0 +30,0 @@ |
@@ -5,3 +5,2 @@ 'use strict'; | ||
var adapter = {}; | ||
var INTERNAL = require('../lib/INTERNAL'); | ||
var assert = require('assert'); | ||
@@ -17,15 +16,10 @@ | ||
}; | ||
adapter.resolved = Promise.resolve; | ||
adapter.rejected = Promise.reject; | ||
//noop, just for coverage | ||
INTERNAL(); | ||
adapter.resolved = function (value) { | ||
return Promise.resolve(value); | ||
} | ||
adapter.rejected = function (reason) { | ||
return Promise.reject(reason); | ||
} | ||
describe('Lie', function () { | ||
it('should work without new', function (done) { | ||
Promise(function (resolve) { | ||
resolve(true); | ||
}).then(function () { | ||
done(); | ||
}); | ||
}); | ||
it('should work resolving a promise new', function (done) { | ||
@@ -32,0 +26,0 @@ new Promise(function (resolve) { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 2 instances in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
2
65
8
1
54884
4
18
1355
+ Addedes3ify@^0.1.3
+ Addedamdefine@1.0.1(transitive)
+ Addedbase62@0.1.1(transitive)
+ Addedes3ify@0.1.4(transitive)
+ Addedesprima-fb@3001.1.0-dev-harmony-fb(transitive)
+ Addedjstransform@3.0.0(transitive)
+ Addedsource-map@0.1.31(transitive)
+ Addedthrough@2.3.8(transitive)