UNPKG

reliable-zeromq

Version:

A collection of reliable zeromq messaging constructs

54 lines 4.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const typescript_collections_1 = require("typescript-collections"); const EXPIRY_BUFFER = 500; // Addresses potential rounding issues and encourages batching class ExpiryMap extends Map { constructor(aExpiryMS, aEntries) { super(); this.mExpiryQueue = new typescript_collections_1.Queue(); this.PruneStale = () => { delete (this.mNextExpiry); const lStaleTime = Date.now(); // PERF: Can optimize with for() & break on undefined while (this.mExpiryQueue.size() > 0 && lStaleTime >= this.mExpiryQueue.peek().Expiry) { const lKey = this.mExpiryQueue.dequeue().Key; super.delete(lKey); } if (this.mExpiryQueue.size() > 0) { const lNextExpiry = this.mExpiryQueue.peek().Expiry - Date.now() + EXPIRY_BUFFER; this.mNextExpiry = setTimeout(this.PruneStale, lNextExpiry); // setTimeout has its own range check } }; this.mExpiryMS = aExpiryMS; if (aEntries) { for (const aEntry of aEntries) { this.set(aEntry[0], aEntry[1]); } } } AddKeyToQueue(aKey) { this.mExpiryQueue.add({ Key: aKey, Expiry: Date.now() + this.mExpiryMS, }); } clear() { super.clear(); this.mExpiryQueue.clear(); if (this.mNextExpiry) { clearTimeout(this.mNextExpiry); delete (this.mNextExpiry); } } set(key, value) { // KNOWN ISSUE: Overwriting an already set value will not reset the expiry. Does not affect reliable-zeromq functionality super.set(key, value); this.AddKeyToQueue(key); if (!this.mNextExpiry) { this.mNextExpiry = setTimeout(this.PruneStale, this.mExpiryMS + EXPIRY_BUFFER); } return this; } } exports.default = ExpiryMap; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwaXJ5TWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vU3JjL1V0aWxzL0V4cGlyeU1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1FQUErQztBQUUvQyxNQUFNLGFBQWEsR0FBVyxHQUFHLENBQUMsQ0FBRSw4REFBOEQ7QUFRbEcsTUFBcUIsU0FBZ0IsU0FBUSxHQUFTO0lBTWxELFlBQW1CLFNBQWlCLEVBQUUsUUFBb0M7UUFFdEUsS0FBSyxFQUFFLENBQUM7UUFMSixpQkFBWSxHQUEyQixJQUFJLDhCQUFLLEVBQW1CLENBQUM7UUEyQnBFLGVBQVUsR0FBRyxHQUFTLEVBQUU7WUFFNUIsT0FBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QixNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFdEMscURBQXFEO1lBQ3JELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFHLENBQUMsTUFBTSxFQUNyRjtnQkFDSSxNQUFNLElBQUksR0FBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRyxDQUFDLEdBQUcsQ0FBQztnQkFFakQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QjtZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ2hDO2dCQUNJLE1BQU0sV0FBVyxHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUM7Z0JBRTFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBSSxxQ0FBcUM7YUFDeEc7UUFDTCxDQUFDLENBQUE7UUF4Q0csSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IsSUFBSSxRQUFRLEVBQ1o7WUFDSSxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFDN0I7Z0JBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEM7U0FDSjtJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBTztRQUV6QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDakI7WUFDSSxHQUFHLEVBQUUsSUFBSTtZQUNULE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVM7U0FDdEMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQXVCTSxLQUFLO1FBRVIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQ3BCO1lBQ0ksWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvQixPQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzVCO0lBRUwsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNLEVBQUUsS0FBUTtRQUV2Qix5SEFBeUg7UUFDekgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFDckI7WUFDSSxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUM7U0FDbEY7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUE3RUQsNEJBNkVDIn0=