| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 
							- 'use strict';
 
- const mimicFn = require('mimic-fn');
 
- const calledFunctions = new WeakMap();
 
- const onetime = (function_, options = {}) => {
 
- 	if (typeof function_ !== 'function') {
 
- 		throw new TypeError('Expected a function');
 
- 	}
 
- 	let returnValue;
 
- 	let callCount = 0;
 
- 	const functionName = function_.displayName || function_.name || '<anonymous>';
 
- 	const onetime = function (...arguments_) {
 
- 		calledFunctions.set(onetime, ++callCount);
 
- 		if (callCount === 1) {
 
- 			returnValue = function_.apply(this, arguments_);
 
- 			function_ = null;
 
- 		} else if (options.throw === true) {
 
- 			throw new Error(`Function \`${functionName}\` can only be called once`);
 
- 		}
 
- 		return returnValue;
 
- 	};
 
- 	mimicFn(onetime, function_);
 
- 	calledFunctions.set(onetime, callCount);
 
- 	return onetime;
 
- };
 
- module.exports = onetime;
 
- // TODO: Remove this for the next major release
 
- module.exports.default = onetime;
 
- module.exports.callCount = function_ => {
 
- 	if (!calledFunctions.has(function_)) {
 
- 		throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
 
- 	}
 
- 	return calledFunctions.get(function_);
 
- };
 
 
  |