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-18.0.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.21.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.20.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.19.1 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.19.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.18.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.17.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.16.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.15.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.14.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.13.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.12.2 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.12.1 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.12.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.11.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.10.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.9.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.8.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.7.0 node_modules/standard/node_modules/onetime/index.js
govuk_publishing_components-17.6.1 node_modules/standard/node_modules/onetime/index.js