UNPKG

@webda/core

Version:

Expose API with Lambda

81 lines 1.98 kB
"use strict"; import * as uuid from "uuid"; import { JSONUtils } from "../utils/serializers.js"; import { Queue, QueueParameters } from "./queueservice.js"; export class MemoryQueueParameters extends QueueParameters { constructor(params) { super(params); this.expire = this.expire ?? 30; this.expire *= 1000; } } /** * FIFO Queue in Memory * @category CoreServices * @WebdaModda */ export class MemoryQueue extends Queue { constructor() { super(...arguments); this._queue = {}; } /** * Load parameters * * @param params * @ignore */ loadParameters(params) { return new MemoryQueueParameters(params); } /** * Return queue size */ async size() { return Object.keys(this._queue).length; } async sendMessage(params) { let uid = uuid.v4(); // Avoid duplication while (this._queue[uid]) { uid = uuid.v4(); } this._queue[uid] = { Body: JSONUtils.stringify(params, undefined, 0), Claimed: 0, ReceiptHandle: uid }; } /** * @inheritdoc */ async receiveMessage(proto) { for (let i in this._queue) { if (this._queue[i].Claimed < new Date().getTime() - this.parameters.expire) { this._queue[i].Claimed = new Date().getTime(); return [ { ReceiptHandle: this._queue[i].ReceiptHandle, Message: this.unserialize(this._queue[i].Body, proto) } ]; } } return []; } /** * @inheritdoc */ async deleteMessage(receipt) { if (this._queue[receipt]) { delete this._queue[receipt]; } } /** * @inheritdoc */ async __clean() { this._queue = {}; } } //# sourceMappingURL=memoryqueue.js.map