uptime-kuma/server/utils/limit-queue.js
Frank Elsinga 0f61d7ee1b
chore: enable formatting over the entire codebase in CI (#6655)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-09 02:10:36 +01:00

46 lines
1 KiB
JavaScript

const { ArrayWithKey } = require("./array-with-key");
/**
* Limit Queue
* The first element will be removed when the length exceeds the limit
*/
class LimitQueue extends ArrayWithKey {
/**
* The limit of the queue after which the first element will be removed
* @private
* @type {number}
*/
__limit;
/**
* The callback function when the queue exceeds the limit
* @private
* @callback onExceedCallback
* @param {{key:K,value:V}|nul} item
*/
__onExceed = null;
/**
* @param {number} limit The limit of the queue after which the first element will be removed
*/
constructor(limit) {
super();
this.__limit = limit;
}
/**
* @inheritDoc
*/
push(key, value) {
super.push(key, value);
if (this.length() > this.__limit) {
let item = this.shift();
if (this.__onExceed) {
this.__onExceed(item);
}
}
}
}
module.exports = {
LimitQueue,
};