Sha256: 21b18eefead9f56c160841b5ead08f4aeb29b792b500f6990f65d4e7eb0993ac

Contents?: true

Size: 709 Bytes

Versions: 48

Compression:

Stored size: 709 Bytes

Contents

'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;
};

Version data entries

48 entries across 46 versions & 3 rubygems

Version Path
govuk_publishing_components-16.19.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-16.18.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-16.17.0 node_modules/standard/node_modules/onetime/index.js
locomotivecms-4.0.0.alpha1 app/javascript/node_modules/yeoman-environment/node_modules/onetime/index.js
locomotivecms-4.0.0.alpha1 app/javascript/node_modules/inquirer/node_modules/onetime/index.js
locomotivecms-3.4.0 app/javascript/node_modules/inquirer/node_modules/onetime/index.js
dragonfly_puppeteer-0.1.0 node_modules/inquirer/node_modules/onetime/index.js
dragonfly_puppeteer-0.1.0 node_modules/yeoman-environment/node_modules/onetime/index.js