all files / lib/deps/ toPromise.js

100% Statements 39/39
93.75% Branches 15/16
100% Functions 8/8
100% Lines 38/38
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75                              32658×   70926× 70926× 70926×   70926× 70926×     23952× 18830× 18830×       70926× 70926× 70926× 70926× 64240× 8796×   55444×         70926× 70926× 70908× 8053×     18×       70926× 23952× 15091×     70926×      
'use strict';
 
Object.defineProperty(exports, "__esModule", {
  value: true
});
 
var _promise = require('./promise');
 
var _promise2 = _interopRequireDefault(_promise);
 
var _argsarray = require('argsarray');
 
var _argsarray2 = _interopRequireDefault(_argsarray);
 
var _clone = require('./clone');
 
var _clone2 = _interopRequireDefault(_clone);
 
var _once = require('./once');
 
var _once2 = _interopRequireDefault(_once);
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
function toPromise(func) {
  //create the function we will be returning
  return (0, _argsarray2.default)(function (args) {
    // Clone arguments
    args = (0, _clone2.default)(args);
    var self = this;
    var tempCB = typeof args[args.length - 1] === 'function' ? args.pop() : false;
    // if the last argument is a function, assume its a callback
    var usedCB;
    if (tempCB) {
      // if it was a callback, create a new callback which calls it,
      // but do so async so we don't trap any errors
      usedCB = function (err, resp) {
        process.nextTick(function () {
          tempCB(err, resp);
        });
      };
    }
    var promise = new _promise2.default(function (fulfill, reject) {
      var resp;
      try {
        var callback = (0, _once2.default)(function (err, mesg) {
          if (err) {
            reject(err);
          } else {
            fulfill(mesg);
          }
        });
        // create a callback for this invocation
        // apply the function in the orig context
        args.push(callback);
        resp = func.apply(self, args);
        if (resp && typeof resp.then === 'function') {
          fulfill(resp);
        }
      } catch (e) {
        reject(e);
      }
    });
    // if there is a callback, call it back
    if (usedCB) {
      promise.then(function (result) {
        usedCB(null, result);
      }, usedCB);
    }
    return promise;
  });
}
 
exports.default = toPromise;
module.exports = exports['default'];