2 module.exports = function (fn, errMsg) {
3 if (typeof fn !== 'function') {
4 throw new TypeError('Expected a function');
9 var fnName = fn.displayName || fn.name || (/function ([^\(]+)/.exec(fn.toString()) || [])[1];
11 var onetime = function () {
13 if (errMsg === true) {
14 fnName = fnName ? fnName + '()' : 'Function';
15 throw new Error(fnName + ' can only be called once.');
22 ret = fn.apply(this, arguments);
28 onetime.displayName = fnName;