Initial commit
[yaffs-website] / node_modules / onetime / index.js
1 'use strict';
2 module.exports = function (fn, errMsg) {
3         if (typeof fn !== 'function') {
4                 throw new TypeError('Expected a function');
5         }
6
7         var ret;
8         var called = false;
9         var fnName = fn.displayName || fn.name || (/function ([^\(]+)/.exec(fn.toString()) || [])[1];
10
11         var onetime = function () {
12                 if (called) {
13                         if (errMsg === true) {
14                                 fnName = fnName ? fnName + '()' : 'Function';
15                                 throw new Error(fnName + ' can only be called once.');
16                         }
17
18                         return ret;
19                 }
20
21                 called = true;
22                 ret = fn.apply(this, arguments);
23                 fn = null;
24
25                 return ret;
26         };
27
28         onetime.displayName = fnName;
29
30         return onetime;
31 };