You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

40 lines
1.0 KiB

var noop = require('./noop');
var defaults = require('./defaults');
var toArr = require('./toArr');
var isArr = require('./isArr');
var isErr = require('./isErr');
exports = function(fn, options) {
defaults(options, defOptions);
return function() {
var args = toArr(arguments);
var newArgs = options.before.apply(this, args);
if (isArr(newArgs)) {
args = newArgs;
}
try {
var result = fn.apply(this, args);
var newResult = options.after.call(this, result);
if (newResult) {
result = newResult;
}
return result;
} catch (e) {
var newErr = options.error(e);
if (newErr) {
if (isErr(newErr)) {
throw newErr;
} else {
return newErr;
}
}
throw e;
}
};
};
var defOptions = {
before: noop,
after: noop,
error: noop
};
module.exports = exports;