dockge/backend/utils/limit-queue.ts

25 lines
532 B
TypeScript
Raw Permalink Normal View History

2023-11-11 14:18:37 +00:00
/**
* Limit Queue
* The first element will be removed when the length exceeds the limit
*/
export class LimitQueue<T> extends Array<T> {
__limit;
__onExceed? : (item : T | undefined) => void;
2023-11-11 14:18:37 +00:00
constructor(limit: number) {
super();
this.__limit = limit;
}
pushItem(value : T) {
2023-11-11 14:18:37 +00:00
super.push(value);
if (this.length > this.__limit) {
const item = this.shift();
if (this.__onExceed) {
this.__onExceed(item);
}
}
}
}