'use strict'; /** * Mutual exclude for JavaScript. * * @module mutex */ /** * @callback mutex * @param {function():void} cb Only executed when this mutex is not in the current stack * @param {function():void} [elseCb] Executed when this mutex is in the current stack */ /** * Creates a mutual exclude function with the following property: * * ```js * const mutex = createMutex() * mutex(() => { * // This function is immediately executed * mutex(() => { * // This function is not executed, as the mutex is already active. * }) * }) * ``` * * @return {mutex} A mutual exclude function * @public */ const createMutex = () => { let token = true; return (f, g) => { if (token) { token = false; try { f(); } finally { token = true; } } else if (g !== undefined) { g(); } } }; var mutex = /*#__PURE__*/Object.freeze({ __proto__: null, createMutex: createMutex }); exports.createMutex = createMutex; exports.mutex = mutex; //# sourceMappingURL=mutex-63f09c81.cjs.map