'use strict'; exports.fromCallback = function (fn) { return Object.defineProperty( function (...args) { if (typeof args[args.length - 1] === 'function') fn.apply(this, args); else { return new Promise((resolve, reject) => { args.push((err, res) => (err != null ? reject(err) : resolve(res))); fn.apply(this, args); }); } }, 'name', { value: fn.name } ); }; exports.fromPromise = function (fn) { return Object.defineProperty( function (...args) { const cb = args[args.length - 1]; if (typeof cb !== 'function') return fn.apply(this, args); else { args.pop(); fn.apply(this, args).then((r) => cb(null, r), cb); } }, 'name', { value: fn.name } ); };