promise-toolbox
Advanced tools
Comparing version 0.3.1 to 0.3.2
@@ -6,6 +6,5 @@ 'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.TimeoutError=exports.finally=exports.fromCallback=exports.forOwn=exports.forIterable=exports.forIn=exports.forEach=exports.forArray=exports.makeAsyncIterator=exports.defer=exports.cancellable=exports.nodeify=exports.isPromise=undefined;var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol?"symbol":typeof obj;};exports.all=all;exports.asCallback=asCallback;exports.catchPlus=catchPlus;exports.delay=delay;exports.join=join;exports.lastly=lastly;exports.promisify=promisify;exports.promisifyAll=promisifyAll;exports.reflect=reflect;exports.settle=settle;exports.some=some;exports.timeout=timeout;exports.unpromisify=unpromisify;var _makeError=require('make-error');function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return call&&(typeof call==="object"||typeof call==="function")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;} // =================================================================== | ||
var isPromise=exports.isPromise=function isPromise(value){return value!=null&&typeof value.then==='function';}; // ------------------------------------------------------------------- | ||
var _makeAsyncIterator=function _makeAsyncIterator(iterator){return function(promises,cb){var mainPromise=Promise.resolve();iterator(promises,function(promise,key){if(isPromise(promise)){ // Avoid unhandled rejections. | ||
promise.then(null,_noop);mainPromise=mainPromise.then(function(){return promise;}).then(function(value){return cb(value,key);});}else {mainPromise=mainPromise.then(function(){return cb(promise,key);});}});return mainPromise;};};var _forEachAsync=_makeAsyncIterator(_forEach);var _wrap=function _wrap(value){return isPromise(value)?value:Promise.resolve(value);};var _wrapCall=function _wrapCall(fn,args,thisArg){try{return _wrap(fn.apply(thisArg,args));}catch(error){return Promise.reject(error);}}; // =================================================================== | ||
var _all=function _all(promises,mapFn){ // mapFn may be undefined but it's okay :) | ||
var results=_map(promises,mapFn);return _forEachAsync(mapFn?results:promises,function(value,key){results[key]=value;}).then(function(){return results;});}; // Returns a promise which resolves when all the promises in a | ||
var _makeAsyncIterator=function _makeAsyncIterator(iterator){return function(promises,cb){var mainPromise=Promise.resolve();iterator(promises,function(promise,key){mainPromise=isPromise(promise)?mainPromise.then(function(){return promise.then(function(value){return cb(value,key);});}):mainPromise.then(function(value){return cb(value,key);});});return mainPromise;};};var _wrap=function _wrap(value){return isPromise(value)?value:Promise.resolve(value);};var _wrapCall=function _wrapCall(fn,args,thisArg){try{return _wrap(fn.apply(thisArg,args));}catch(error){return Promise.reject(error);}}; // =================================================================== | ||
var _all=function _all(promises,mapFn){return new Promise(function(resolve,reject){ // mapFn may be undefined but it's okay :) | ||
var result=_map(promises,mapFn);var count=1;var onFulfillment0=function onFulfillment0(){if(--count===0){var tmp=result;result=null;resolve(tmp);}};var onFulfillment=function onFulfillment(value,key){if(!result){return;}result[key]=value;onFulfillment0();};var onRejection=function onRejection(reason){if(!result){return;}result=null;reject(reason);};_forEach(mapFn?result:promises,function(promise,key){++count;if(isPromise(promise)){promise.then(function(value){return onFulfillment(value,key);},onRejection);}else {onFulfillment(promise,key);}});onFulfillment0();});}; // Returns a promise which resolves when all the promises in a | ||
// collection have resolved or rejects with the reason of the first | ||
@@ -82,3 +81,3 @@ // promise that rejects. | ||
function settle(){return all.call(this,function(x){return reflect.call(x);});} // ------------------------------------------------------------------- | ||
var _some=function _some(promises,count){return new Promise(function(resolve,reject){var values=[];var errors=[];var onFulfillment=function onFulfillment(value){if(!values){return;}values.push(value);if(--count){resolve(values);values=errors=null;}};var acceptableErrors=-count;var onRejection=function onRejection(reason){if(!values){return;}errors.push(reason);if(--acceptableErrors){reject(errors);values=errors=null;}};_forEach(promises,function(promise){++acceptableErrors;_wrap(promise).then(onFulfillment,onRejection);});});}; // Usage: promises::some(count) | ||
var _some=function _some(promises,count){return new Promise(function(resolve,reject){var values=[];var errors=[];var onFulfillment=function onFulfillment(value){if(!values){return;}values.push(value);if(--count===0){resolve(values);values=errors=null;}};var acceptableErrors=-count;var onRejection=function onRejection(reason){if(!values){return;}errors.push(reason);if(--acceptableErrors===0){reject(errors);values=errors=null;}};_forEach(promises,function(promise){++acceptableErrors;_wrap(promise).then(onFulfillment,onRejection);});});}; // Usage: promises::some(count) | ||
function some(count){return _wrap(this).then(function(promises){return _some(promises,count);});} // ------------------------------------------------------------------- | ||
@@ -85,0 +84,0 @@ var TimeoutError=exports.TimeoutError=function(_BaseError){_inherits(TimeoutError,_BaseError);function TimeoutError(){_classCallCheck(this,TimeoutError);return _possibleConstructorReturn(this,Object.getPrototypeOf(TimeoutError).call(this,'operation timed out'));}return TimeoutError;}(_makeError.BaseError); // Usage: promise::timeout(ms) |
'use strict';var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally {try{if(!_n&&_i["return"])_i["return"]();}finally {if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}(); /* eslint-env mocha */var _must=require('must');var _must2=_interopRequireDefault(_must);var _makeError=require('make-error');var _makeError2=_interopRequireDefault(_makeError);var _sinon=require('sinon');var _sinon2=_interopRequireDefault(_sinon);var _=require('./');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};} // =================================================================== | ||
describe('catchPlus',function(){var ident=function ident(value){return value;};it('catches errors matching a predicate',function(){var _context;var predicate=function predicate(reason){return reason==='foo';};return Promise.all([(0,_must2.default)((_context=Promise.reject('foo'),_.catchPlus).call(_context,predicate,ident)).to.resolve.to.equal('foo'),(0,_must2.default)((_context=Promise.reject('bar'),_.catchPlus).call(_context,predicate,ident)).to.reject.to.equal('bar')]);});it('catches errors matching a class',function(){var _context2;var CustomError1=(0,_makeError2.default)('CustomError1');var CustomError2=(0,_makeError2.default)('CustomError2');var error=new CustomError1();return Promise.all([ // The class itself. | ||
(0,_must2.default)((_context2=Promise.reject(error),_.catchPlus).call(_context2,CustomError1,ident)).to.resolve.to.equal(error), // A parent. | ||
(0,_must2.default)((_context2=Promise.reject(error),_.catchPlus).call(_context2,Error,ident)).to.resolve.to.equal(error), // Another class. | ||
(0,_must2.default)((_context2=Promise.reject(error),_.catchPlus).call(_context2,CustomError2,ident)).to.reject.to.equal(error)]);});it('catches errors matching an object pattern',function(){var _context3;var predicate={foo:0};return Promise.all([(0,_must2.default)((_context3=Promise.reject({foo:0}),_.catchPlus).call(_context3,predicate,ident)).to.resolve.to.be.an.object(),(0,_must2.default)((_context3=Promise.reject({foo:1}),_.catchPlus).call(_context3,predicate,ident)).to.reject.to.be.an.object(),(0,_must2.default)((_context3=Promise.reject({bar:0}),_.catchPlus).call(_context3,predicate,ident)).to.reject.to.be.an.object()]);});it('does not catch programmer errors',function(){var _context4;return Promise.all([(0,_must2.default)((_context4=Promise.reject(new TypeError('')),_.catchPlus).call(_context4,ident)).to.reject.to.error(TypeError),(0,_must2.default)((_context4=Promise.reject(new SyntaxError('')),_.catchPlus).call(_context4,ident)).to.reject.to.error(SyntaxError), // Unless matches by a predicate. | ||
(0,_must2.default)((_context4=Promise.reject(new TypeError('')),_.catchPlus).call(_context4,TypeError,ident)).to.resolve.to.error(TypeError)]);});}); // ------------------------------------------------------------------- | ||
describe('all()',function(){it('with array',function(){var _context;return (0,_must2.default)((_context=[Promise.resolve('foo'),'bar'],_.all).call(_context)).to.resolve.to.eql(['foo','bar']);});it('with object',function(){var _context2;return (0,_must2.default)((_context2={foo:Promise.resolve('foo'),bar:'bar'},_.all).call(_context2)).to.resolve.to.eql({foo:'foo',bar:'bar'});});it('resolve with empty collection',function(){var _context3;return (0,_must2.default)((_context3=[],_.all).call(_context3)).to.resolve.to.eql([]);});it('rejects first rejection',function(){var _context4;return (0,_must2.default)((_context4=['foo',Promise.reject('bar')],_.all).call(_context4)).to.reject.to.equal('bar');});it('rejects first rejection (even with pending promises)',function(){var _context5;return (0,_must2.default)((_context5=[new Promise(function(){}),Promise.reject('bar')],_.all).call(_context5)).to.reject.to.equal('bar');});}); // ------------------------------------------------------------------- | ||
describe('catchPlus',function(){var ident=function ident(value){return value;};it('catches errors matching a predicate',function(){var _context6;var predicate=function predicate(reason){return reason==='foo';};return Promise.all([(0,_must2.default)((_context6=Promise.reject('foo'),_.catchPlus).call(_context6,predicate,ident)).to.resolve.to.equal('foo'),(0,_must2.default)((_context6=Promise.reject('bar'),_.catchPlus).call(_context6,predicate,ident)).to.reject.to.equal('bar')]);});it('catches errors matching a class',function(){var _context7;var CustomError1=(0,_makeError2.default)('CustomError1');var CustomError2=(0,_makeError2.default)('CustomError2');var error=new CustomError1();return Promise.all([ // The class itself. | ||
(0,_must2.default)((_context7=Promise.reject(error),_.catchPlus).call(_context7,CustomError1,ident)).to.resolve.to.equal(error), // A parent. | ||
(0,_must2.default)((_context7=Promise.reject(error),_.catchPlus).call(_context7,Error,ident)).to.resolve.to.equal(error), // Another class. | ||
(0,_must2.default)((_context7=Promise.reject(error),_.catchPlus).call(_context7,CustomError2,ident)).to.reject.to.equal(error)]);});it('catches errors matching an object pattern',function(){var _context8;var predicate={foo:0};return Promise.all([(0,_must2.default)((_context8=Promise.reject({foo:0}),_.catchPlus).call(_context8,predicate,ident)).to.resolve.to.be.an.object(),(0,_must2.default)((_context8=Promise.reject({foo:1}),_.catchPlus).call(_context8,predicate,ident)).to.reject.to.be.an.object(),(0,_must2.default)((_context8=Promise.reject({bar:0}),_.catchPlus).call(_context8,predicate,ident)).to.reject.to.be.an.object()]);});it('does not catch programmer errors',function(){var _context9;return Promise.all([(0,_must2.default)((_context9=Promise.reject(new TypeError('')),_.catchPlus).call(_context9,ident)).to.reject.to.error(TypeError),(0,_must2.default)((_context9=Promise.reject(new SyntaxError('')),_.catchPlus).call(_context9,ident)).to.reject.to.error(SyntaxError), // Unless matches by a predicate. | ||
(0,_must2.default)((_context9=Promise.reject(new TypeError('')),_.catchPlus).call(_context9,TypeError,ident)).to.resolve.to.error(TypeError)]);});}); // ------------------------------------------------------------------- | ||
describe('fromCallback()',function(){it('creates a promise which resolves with value passed to the callback',function(){return (0,_must2.default)((0,_.fromCallback)(function(cb){cb(null,'foo');})).to.resolve.to.equal('foo');});it('creates a promise which rejects with reason passed to the callback',function(){return (0,_must2.default)((0,_.fromCallback)(function(cb){cb('bar');})).to.reject.to.equal('bar');});}); // ------------------------------------------------------------------- | ||
describe('join()',function(){it('calls the callback once promises are resolved',function(){return (0,_.join)(Promise.resolve('foo'),Promise.resolve('bar'),function(foo,bar){(0,_must2.default)(foo).to.equal('foo');(0,_must2.default)(bar).to.equal('bar');});});it('can takes inputs in an array',function(){return (0,_.join)([Promise.resolve('foo'),Promise.resolve('bar')],function(foo,bar){(0,_must2.default)(foo).to.equal('foo');(0,_must2.default)(bar).to.equal('bar');});});it('rejects if one promise rejects',function(){return (0,_must2.default)((0,_.join)(Promise.resolve('foo'),Promise.reject('bar'),function(foo,bar){(0,_must2.default)(foo).to.equal('foo');(0,_must2.default)(bar).to.equal('bar');})).to.reject.to.equal('bar');});}); // ------------------------------------------------------------------- | ||
describe('lastly()',function(){it('calls a callback on resolution',function(){var _context5;var value={};var spy=_sinon2.default.spy();return (0,_must2.default)((_context5=Promise.resolve(value),_.lastly).call(_context5,spy)).to.resolve.to.equal(value).then(function(){(0,_must2.default)(spy.callCount).to.equal(1);});});it('calls a callback on rejection',function(){var _context6;var reason={};var spy=_sinon2.default.spy();return (0,_must2.default)((_context6=Promise.reject(reason),_.lastly).call(_context6,spy)).to.reject.to.equal(reason).then(function(){(0,_must2.default)(spy.callCount).to.equal(1);});});}); // ------------------------------------------------------------------- | ||
describe('lastly()',function(){it('calls a callback on resolution',function(){var _context10;var value={};var spy=_sinon2.default.spy();return (0,_must2.default)((_context10=Promise.resolve(value),_.lastly).call(_context10,spy)).to.resolve.to.equal(value).then(function(){(0,_must2.default)(spy.callCount).to.equal(1);});});it('calls a callback on rejection',function(){var _context11;var reason={};var spy=_sinon2.default.spy();return (0,_must2.default)((_context11=Promise.reject(reason),_.lastly).call(_context11,spy)).to.reject.to.equal(reason).then(function(){(0,_must2.default)(spy.callCount).to.equal(1);});});}); // ------------------------------------------------------------------- | ||
describe('promisifyAll()',function(){it('returns a new object',function(){var o={};var r=_.promisifyAll.call(o);(0,_must2.default)(r).to.be.an.object();(0,_must2.default)(r).to.not.equal(o);});it('creates promisified version of all functions bound to the original object',function(){var o={foo:function foo(cb){cb(null,this);}};var r=_.promisifyAll.call(o);return (0,_must2.default)(r.foo()).to.resolve.to.equal(o);});it('ignores functions ending with Sync or Async',function(){var o={fooAsync:function fooAsync(){},fooSync:function fooSync(){}};var r=_.promisifyAll.call(o);(0,_must2.default)(r).to.not.have.property('foo');(0,_must2.default)(r).to.not.have.property('fooASync');(0,_must2.default)(r).to.not.have.property('fooSync');});}); // ------------------------------------------------------------------- | ||
describe('settle()',function(){it('works with arrays',function(){var _context7;return (_context7=[Promise.resolve(42),Math.PI,Promise.reject('fatality')],_.settle).call(_context7).then(function(_ref){var _ref2=_slicedToArray(_ref,3);var status1=_ref2[0];var status2=_ref2[1];var status3=_ref2[2];(0,_must2.default)(status1.isFulfilled()).to.equal(true);(0,_must2.default)(status2.isFulfilled()).to.equal(true);(0,_must2.default)(status3.isFulfilled()).to.equal(false); // Alias. | ||
(0,_must2.default)(status1.isResolved()).to.equal(true);(0,_must2.default)(status2.isResolved()).to.equal(true);(0,_must2.default)(status3.isResolved()).to.equal(false);(0,_must2.default)(status1.isRejected()).to.equal(false);(0,_must2.default)(status2.isRejected()).to.equal(false);(0,_must2.default)(status3.isRejected()).to.equal(true);(0,_must2.default)(status1.value()).to.equal(42);(0,_must2.default)(status2.value()).to.equal(Math.PI);(0,_must2.default)(status3.value.bind(status3)).to.throw();(0,_must2.default)(status1.reason.bind(status1)).to.throw();(0,_must2.default)(status2.reason.bind(status2)).to.throw();(0,_must2.default)(status3.reason()).to.equal('fatality');});});it('works with objects',function(){var _context8;return (_context8={a:Promise.resolve(42),b:Math.PI,c:Promise.reject('fatality')},_.settle).call(_context8).then(function(_ref3){var status1=_ref3.a;var status2=_ref3.b;var status3=_ref3.c;(0,_must2.default)(status1.isFulfilled()).to.equal(true);(0,_must2.default)(status2.isFulfilled()).to.equal(true);(0,_must2.default)(status3.isFulfilled()).to.equal(false); // Alias. | ||
describe('settle()',function(){it('works with arrays',function(){var _context12;return (_context12=[Promise.resolve(42),Math.PI,Promise.reject('fatality')],_.settle).call(_context12).then(function(_ref){var _ref2=_slicedToArray(_ref,3);var status1=_ref2[0];var status2=_ref2[1];var status3=_ref2[2];(0,_must2.default)(status1.isFulfilled()).to.equal(true);(0,_must2.default)(status2.isFulfilled()).to.equal(true);(0,_must2.default)(status3.isFulfilled()).to.equal(false); // Alias. | ||
(0,_must2.default)(status1.isResolved()).to.equal(true);(0,_must2.default)(status2.isResolved()).to.equal(true);(0,_must2.default)(status3.isResolved()).to.equal(false);(0,_must2.default)(status1.isRejected()).to.equal(false);(0,_must2.default)(status2.isRejected()).to.equal(false);(0,_must2.default)(status3.isRejected()).to.equal(true);(0,_must2.default)(status1.value()).to.equal(42);(0,_must2.default)(status2.value()).to.equal(Math.PI);(0,_must2.default)(status3.value.bind(status3)).to.throw();(0,_must2.default)(status1.reason.bind(status1)).to.throw();(0,_must2.default)(status2.reason.bind(status2)).to.throw();(0,_must2.default)(status3.reason()).to.equal('fatality');});});it('works with objects',function(){var _context13;return (_context13={a:Promise.resolve(42),b:Math.PI,c:Promise.reject('fatality')},_.settle).call(_context13).then(function(_ref3){var status1=_ref3.a;var status2=_ref3.b;var status3=_ref3.c;(0,_must2.default)(status1.isFulfilled()).to.equal(true);(0,_must2.default)(status2.isFulfilled()).to.equal(true);(0,_must2.default)(status3.isFulfilled()).to.equal(false); // Alias. | ||
(0,_must2.default)(status1.isResolved()).to.equal(true);(0,_must2.default)(status2.isResolved()).to.equal(true);(0,_must2.default)(status3.isResolved()).to.equal(false);(0,_must2.default)(status1.isRejected()).to.equal(false);(0,_must2.default)(status2.isRejected()).to.equal(false);(0,_must2.default)(status3.isRejected()).to.equal(true);(0,_must2.default)(status1.value()).to.equal(42);(0,_must2.default)(status2.value()).to.equal(Math.PI);(0,_must2.default)(status3.value.bind(status3)).to.throw();(0,_must2.default)(status1.reason.bind(status1)).to.throw();(0,_must2.default)(status2.reason.bind(status2)).to.throw();(0,_must2.default)(status3.reason()).to.equal('fatality');});});}); // ------------------------------------------------------------------- | ||
describe('timeout()',function(){it('rejects a promise if not settled after a delay',function(){var _context9;return (0,_must2.default)((_context9=new Promise(function(){}),_.timeout).call(_context9,10)).to.reject.to.error(_.TimeoutError);});it('forwards the settlement if settled before a delay',function(){var _context10;return Promise.all([(0,_must2.default)((_context10=Promise.resolve('value'),_.timeout).call(_context10,10)).to.resolve.to.equal('value'),(0,_must2.default)((_context10=Promise.reject('reason'),_.timeout).call(_context10,10)).to.reject.to.equal('reason')]);});}); // ------------------------------------------------------------------- | ||
describe('timeout()',function(){it('rejects a promise if not settled after a delay',function(){var _context14;return (0,_must2.default)((_context14=new Promise(function(){}),_.timeout).call(_context14,10)).to.reject.to.error(_.TimeoutError);});it('forwards the settlement if settled before a delay',function(){var _context15;return Promise.all([(0,_must2.default)((_context15=Promise.resolve('value'),_.timeout).call(_context15,10)).to.resolve.to.equal('value'),(0,_must2.default)((_context15=Promise.reject('reason'),_.timeout).call(_context15,10)).to.reject.to.equal('reason')]);});}); // ------------------------------------------------------------------- | ||
describe('unpromisify()',function(){it('forwards the result',function(done){var fn=_.unpromisify.call(function(){return Promise.resolve('foo');});fn(function(error,result){(0,_must2.default)(error).to.not.exist();(0,_must2.default)(result).to.equal('foo');done();});});it('forwards the error',function(done){var fn=_.unpromisify.call(function(){return Promise.reject('foo');});fn(function(error){(0,_must2.default)(error).to.equal('foo');done();});});}); | ||
//# sourceMappingURL=index.spec.js.map |
{ | ||
"name": "promise-toolbox", | ||
"version": "0.3.1", | ||
"version": "0.3.2", | ||
"license": "ISC", | ||
@@ -38,3 +38,3 @@ "description": "Essential utils for promises", | ||
"babel-cli": "^6.3.17", | ||
"babel-eslint": "^5.0.0", | ||
"babel-eslint": "^6.0.0", | ||
"babel-plugin-transform-runtime": "^6.3.13", | ||
@@ -45,8 +45,8 @@ "babel-preset-es2015": "^6.3.13", | ||
"dependency-check": "^2.5.1", | ||
"julien-f-source-map-support": "0.0.0", | ||
"mocha": "^2.3.4", | ||
"must": "^0.13.1", | ||
"native-promise-only": "^0.8.1", | ||
"nyc": "^5.3.0", | ||
"nyc": "^6.1.1", | ||
"sinon": "^1.17.2", | ||
"source-map-support": "^0.4.0", | ||
"standard": "^6.0.7", | ||
@@ -53,0 +53,0 @@ "trace": "^2.0.1" |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
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
83223
167