pg-trx-outbox
Version:
Transactional outbox of Postgres for Node.js with little Event Sourcing
32 lines (31 loc) • 1.13 kB
JavaScript
;
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;