zapier-platform-cli
Version:
The CLI for apps in the Zapier Developer Platform.
57 lines (50 loc) • 1.5 kB
JavaScript
;
var _ = require('lodash');
/*
Turn node style async methods with callbacks into methods that return promises.
Poor man's version of Bluebird's promisify module. If we start using Bluebird,
ditch this module.
*/
var promisify = function promisify(fn, context) {
return function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return new Promise(function (resolve, reject) {
var cb = function cb(err, result) {
if (err) {
reject(err);
}
resolve(result);
};
fn.apply(context, args.concat(cb));
});
};
};
var promisifyAll = function promisifyAll(object, context) {
return _.reduce(object, function (result, method, name) {
if (!name.match(/Sync$/)) {
result[name + 'Async'] = promisify(method, context);
}
result[name] = method;
return result;
}, {});
};
/*
Promisify white list of method names for an object. Object is passed as
context (this) when calling. Useful for AWS, where some of the methods
are dynamic properties not reachable in an each loop.
*/
var promisifySome = function promisifySome(object, methods) {
_.each(methods, function (name) {
if (!name.match(/Sync$/)) {
object[name + 'Async'] = promisify(object[name], object);
}
});
return object;
};
module.exports = {
promisify: promisify,
promisifyAll: promisifyAll,
promisifySome: promisifySome
};