UNPKG

cbify

Version:

Wraps synchronous functions with a callback-style API

46 lines (37 loc) 896 B
'use strict'; var wrappy = require('wrappy'); var fnArgs = require('fn-args'); module.exports = wrappy(function cbify (fn) { if (typeof fn !== 'function') { throw new TypeError('Expected a function'); } var origArgs = fnArgs(fn); var lastArg = origArgs[origArgs.length - 1]; if ( origArgs.length && lastArg.toLowerCase().indexOf('callback') !== -1 || lastArg === 'cb' ) { return fn; } return function () { var argsLen = arguments.length; var args = argsLen > 1 ? [].slice.call(arguments, 0, argsLen - 1) : []; var callback = arguments[argsLen - 1]; var result; if (typeof callback !== 'function') { throw new Error('Must pass callback function'); } try { result = fn.apply(this, args); } catch (_err) { result = _err; } finally { if (result instanceof Error) { callback(result); } else { callback(null, result); } } }; });