'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _argsarray = require('argsarray');
var _argsarray2 = _interopRequireDefault(_argsarray);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var promisedCallback = function (promise, callback) {
if (callback) {
promise.then(function (res) {
process.nextTick(function () {
callback(null, res);
});
}, function (reason) {
process.nextTick(function () {
callback(reason);
});
});
}
return promise;
};
var callbackify = function (fun) {
return (0, _argsarray2.default)(function (args) {
var cb = args.pop();
var promise = fun.apply(this, args);
if (typeof cb === 'function') {
promisedCallback(promise, cb);
}
return promise;
});
};
// Promise finally util similar to Q.finally
var fin = function (promise, finalPromiseFactory) {
return promise.then(function (res) {
return finalPromiseFactory().then(function () {
return res;
});
}, function (reason) {
return finalPromiseFactory().then(function () {
throw reason;
});
});
};
var sequentialize = function (queue, promiseFactory) {
return function () {
var args = arguments;
var that = this;
return queue.add(function () {
return promiseFactory.apply(that, args);
});
};
};
// uniq an array of strings, order not guaranteed
// similar to underscore/lodash _.uniq
var uniq = function (arr) {
var map = {};
for (var i = 0, len = arr.length; i < len; i++) {
map['$' + arr[i]] = true;
}
var keys = Object.keys(map);
var output = new Array(keys.length);
for (i = 0, len = keys.length; i < len; i++) {
output[i] = keys[i].substring(1);
}
return output;
};
exports.default = {
uniq: uniq,
sequentialize: sequentialize,
fin: fin,
callbackify: callbackify,
promisedCallback: promisedCallback
};
module.exports = exports['default']; |