UNPKG

@cjs-mifi-test/onetime

Version:

CJS version: Ensure a function is only called once

50 lines (37 loc) 1.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _mimicFn = _interopRequireDefault(require("@cjs-mifi-test/mimic-fn")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; }; (0, _mimicFn.default)(onetime, function_); calledFunctions.set(onetime, callCount); return onetime; }; onetime.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_); }; var _default = onetime; exports.default = _default;