diff options
Diffstat (limited to 'node_modules/onetime/index.js')
-rw-r--r-- | node_modules/onetime/index.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/node_modules/onetime/index.js b/node_modules/onetime/index.js new file mode 100644 index 0000000..0d76476 --- /dev/null +++ b/node_modules/onetime/index.js @@ -0,0 +1,39 @@ +'use strict'; +const mimicFn = require('mimic-fn'); + +module.exports = (fn, opts) => { + // TODO: Remove this in v3 + if (opts === true) { + throw new TypeError('The second argument is now an options object'); + } + + if (typeof fn !== 'function') { + throw new TypeError('Expected a function'); + } + + opts = opts || {}; + + let ret; + let called = false; + const fnName = fn.displayName || fn.name || '<anonymous>'; + + const onetime = function () { + if (called) { + if (opts.throw === true) { + throw new Error(`Function \`${fnName}\` can only be called once`); + } + + return ret; + } + + called = true; + ret = fn.apply(this, arguments); + fn = null; + + return ret; + }; + + mimicFn(onetime, fn); + + return onetime; +}; |