UNPKG

@whiskeysockets/baileys

Version:

A WebSockets library for interacting with WhatsApp Web

45 lines (44 loc) 1.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeKeyedMutex = exports.makeMutex = void 0; const makeMutex = () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any let task = Promise.resolve(); let taskTimeout; return { mutex(code) { task = (async () => { // wait for the previous task to complete // if there is an error, we swallow so as to not block the queue try { await task; } catch (_a) { } try { // execute the current task const result = await code(); return result; } finally { clearTimeout(taskTimeout); } })(); // we replace the existing task, appending the new piece of execution to it // so the next task will have to wait for this one to finish return task; }, }; }; exports.makeMutex = makeMutex; const makeKeyedMutex = () => { const map = {}; return { mutex(key, task) { if (!map[key]) { map[key] = (0, exports.makeMutex)(); } return map[key].mutex(task); } }; }; exports.makeKeyedMutex = makeKeyedMutex;