@whiskeysockets/baileys
Version:
A WebSockets library for interacting with WhatsApp Web
45 lines (44 loc) • 1.4 kB
JavaScript
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;
;