File: //proc/1526/root/var/www/zaklada/html/node_modules/onetime/index.js
'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;
};