UNPKG

pg-trx-outbox

Version:

Transactional outbox of Postgres for Node.js with little Event Sourcing

32 lines (31 loc) 1.13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.GroupedAsyncAdapter = void 0; const p_queue_1 = __importDefault(require("p-queue")); const base_ts_1 = require("./base.js"); class GroupedAsyncAdapter extends base_ts_1.BaseAdapter { queues = new Map(); async send(messages) { const resp = []; for (const message of messages) { if (!this.queues.has(message.key)) { this.queues.set(message.key, new p_queue_1.default({ concurrency: 1 })); } resp.push(this.queues.get(message.key).add(() => this.baseHandleMessage(message))); } const result = await Promise.all(resp); this.cleanup(); return result; } cleanup() { for (const [key, queue] of this.queues.entries()) { if (!queue.size && !queue.pending) { this.queues.delete(key); } } } } exports.GroupedAsyncAdapter = GroupedAsyncAdapter;