export function createSequentialQueue() { const queues = new Map>(); return (key: string, task: () => Promise): Promise => { const previous = queues.get(key) ?? Promise.resolve(); const next = previous.then(task, task); queues.set(key, next); const cleanup = () => { if (queues.get(key) === next) { queues.delete(key); } }; next.then(cleanup, cleanup); return next; }; }