redis-smq
Version:
A simple high-performance Redis message queue for Node.js.
158 lines • 4.3 kB
JavaScript
import { v4 as uuid } from 'uuid';
export class MessageState {
uuid;
publishedAt = null;
scheduledAt = null;
lastScheduledAt = null;
scheduledCronFired = false;
attempts = 0;
scheduledRepeatCount = 0;
expired = false;
nextScheduledDelay = 0;
nextRetryDelay = 0;
scheduledTimes = 0;
scheduledMessageId = null;
constructor() {
this.uuid = uuid();
}
setPublishedAt(timestamp) {
this.publishedAt = timestamp;
return this;
}
setScheduledAt(timestamp) {
this.scheduledAt = timestamp;
return this;
}
setLastScheduledAt(timestamp) {
this.lastScheduledAt = timestamp;
this.scheduledTimes += 1;
return this;
}
setScheduledMessageId(messageId) {
this.scheduledMessageId = messageId;
return this;
}
setNextScheduledDelay(delay) {
this.nextScheduledDelay = delay;
return this;
}
getSetNextScheduledDelay() {
if (this.nextScheduledDelay > 0) {
const delay = this.nextScheduledDelay;
this.nextScheduledDelay = 0;
return delay;
}
return 0;
}
setNextRetryDelay(delay) {
this.nextRetryDelay = delay;
return this;
}
getSetNextRetryDelay() {
if (this.nextRetryDelay > 0) {
const delay = this.nextRetryDelay;
this.nextRetryDelay = 0;
return delay;
}
return 0;
}
hasDelay() {
return this.nextScheduledDelay > 0 || this.nextRetryDelay > 0;
}
resetMessageScheduledRepeatCount() {
this.scheduledRepeatCount = 0;
return this;
}
incrAttempts() {
this.setAttempts(this.attempts + 1);
return this.attempts;
}
setAttempts(attempts) {
this.attempts = attempts;
return this;
}
setMessageScheduledCronFired(fired) {
this.scheduledCronFired = fired;
return this;
}
incrMessageScheduledRepeatCount() {
this.scheduledRepeatCount += 1;
return this.scheduledRepeatCount;
}
setExpired(expired) {
this.expired = expired;
return this;
}
reset() {
this.publishedAt = null;
this.scheduledAt = null;
this.lastScheduledAt = null;
this.attempts = 0;
this.expired = false;
this.nextScheduledDelay = 0;
this.scheduledCronFired = false;
this.scheduledRepeatCount = 0;
this.scheduledTimes = 0;
return this;
}
getPublishedAt() {
return this.publishedAt;
}
getScheduledAt() {
return this.scheduledAt;
}
getAttempts() {
return this.attempts;
}
getMessageScheduledRepeatCount() {
return this.scheduledRepeatCount;
}
getId() {
return this.uuid;
}
hasScheduledCronFired() {
return this.scheduledCronFired;
}
hasExpired() {
return this.expired;
}
getSetExpired(ttl, createdAt) {
if (ttl) {
const curTime = new Date().getTime();
const expired = createdAt + ttl - curTime <= 0;
this.setExpired(expired);
}
return this.hasExpired();
}
getSetNextDelay() {
const retryDelay = this.getSetNextRetryDelay();
if (retryDelay) {
return retryDelay;
}
const scheduledDelay = this.getSetNextScheduledDelay();
if (scheduledDelay) {
return scheduledDelay;
}
return 0;
}
getScheduledMessageId() {
return this.scheduledMessageId;
}
toJSON() {
return {
uuid: this.uuid,
publishedAt: this.publishedAt,
scheduledAt: this.scheduledAt,
lastScheduledAt: this.lastScheduledAt,
scheduledCronFired: this.scheduledCronFired,
scheduledTimes: this.scheduledTimes,
attempts: this.attempts,
scheduledRepeatCount: this.scheduledRepeatCount,
expired: this.expired,
nextScheduledDelay: this.nextScheduledDelay,
nextRetryDelay: this.nextRetryDelay,
scheduledMessageId: this.scheduledMessageId,
};
}
}
//# sourceMappingURL=message-state.js.map