'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = awaitify; // conditionally promisify a function. // only return a promise if a callback is omitted function awaitify(asyncFn, arity = asyncFn.length) { if (!arity) throw new Error('arity is undefined'); function awaitable(...args) { if (typeof args[arity - 1] === 'function') { return asyncFn.apply(this, args); } return new Promise((resolve, reject) => { args[arity - 1] = (err, ...cbArgs) => { if (err) return reject(err); resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]); }; asyncFn.apply(this, args); }); } Object.defineProperty(awaitable, 'name', { value: `awaitable(${asyncFn.name})` }); return awaitable; } module.exports = exports['default'];