@zudojs/queue 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/contextCarrier/contextCarrier.core.d.ts +0 -1
  2. package/dist/contextCarrier/contextCarrier.core.js +0 -1
  3. package/dist/contextCarrier/contextCarrier.type.d.ts +0 -1
  4. package/dist/contextCarrier/contextCarrier.type.js +0 -1
  5. package/dist/contextCarrier/index.d.ts +0 -1
  6. package/dist/contextCarrier/index.js +0 -1
  7. package/dist/deadLetter/deadLetter.core.d.ts +0 -1
  8. package/dist/deadLetter/deadLetter.core.js +0 -1
  9. package/dist/deadLetter/deadLetter.type.d.ts +0 -1
  10. package/dist/deadLetter/deadLetter.type.js +0 -1
  11. package/dist/deadLetter/index.d.ts +0 -1
  12. package/dist/deadLetter/index.js +0 -1
  13. package/dist/inMemoryQueue/inMemoryQueue.core.d.ts +0 -1
  14. package/dist/inMemoryQueue/inMemoryQueue.core.js +1 -1
  15. package/dist/inMemoryQueue/inMemoryQueue.factory.d.ts +0 -1
  16. package/dist/inMemoryQueue/inMemoryQueue.factory.js +0 -1
  17. package/dist/inMemoryQueue/inMemoryQueue.processing.d.ts +19 -3
  18. package/dist/inMemoryQueue/inMemoryQueue.processing.js +37 -15
  19. package/dist/inMemoryQueue/inMemoryQueue.scheduling.d.ts +0 -1
  20. package/dist/inMemoryQueue/inMemoryQueue.scheduling.js +0 -1
  21. package/dist/inMemoryQueue/inMemoryQueue.settle.d.ts +0 -1
  22. package/dist/inMemoryQueue/inMemoryQueue.settle.js +0 -1
  23. package/dist/inMemoryQueue/index.d.ts +0 -1
  24. package/dist/inMemoryQueue/index.js +0 -1
  25. package/dist/inMemoryQueue/polling/inMemoryQueue.poller.d.ts +0 -1
  26. package/dist/inMemoryQueue/polling/inMemoryQueue.poller.js +0 -1
  27. package/dist/inMemoryQueue/polling/inMemoryQueue.select.d.ts +5 -1
  28. package/dist/inMemoryQueue/polling/inMemoryQueue.select.js +33 -10
  29. package/dist/inMemoryQueue/polling/index.d.ts +0 -1
  30. package/dist/inMemoryQueue/polling/index.js +0 -1
  31. package/dist/index.d.ts +2 -1
  32. package/dist/index.js +4 -1
  33. package/dist/job/index.d.ts +0 -1
  34. package/dist/job/index.js +0 -1
  35. package/dist/job/job.core.d.ts +0 -1
  36. package/dist/job/job.core.js +0 -1
  37. package/dist/job/job.type.d.ts +0 -1
  38. package/dist/job/job.type.js +0 -1
  39. package/dist/jobContext/index.d.ts +0 -1
  40. package/dist/jobContext/index.js +0 -1
  41. package/dist/jobContext/jobContext.core.d.ts +0 -1
  42. package/dist/jobContext/jobContext.core.js +0 -1
  43. package/dist/jobContext/jobContext.type.d.ts +0 -1
  44. package/dist/jobContext/jobContext.type.js +0 -1
  45. package/dist/jobFailure/index.d.ts +8 -0
  46. package/dist/jobFailure/index.js +7 -0
  47. package/dist/jobFailure/jobFailure.unrecoverable.d.ts +51 -0
  48. package/dist/jobFailure/jobFailure.unrecoverable.js +65 -0
  49. package/dist/jobOptions/index.d.ts +0 -1
  50. package/dist/jobOptions/index.js +0 -1
  51. package/dist/jobOptions/jobOptions.core.d.ts +0 -1
  52. package/dist/jobOptions/jobOptions.core.js +0 -1
  53. package/dist/jobOptions/jobOptions.type.d.ts +0 -1
  54. package/dist/jobOptions/jobOptions.type.js +0 -1
  55. package/dist/jobResult/index.d.ts +0 -1
  56. package/dist/jobResult/index.js +0 -1
  57. package/dist/jobResult/jobResult.core.d.ts +8 -2
  58. package/dist/jobResult/jobResult.core.js +7 -2
  59. package/dist/jobResult/jobResult.type.d.ts +6 -1
  60. package/dist/jobResult/jobResult.type.js +0 -1
  61. package/dist/jobTypes/index.d.ts +0 -1
  62. package/dist/jobTypes/index.js +0 -1
  63. package/dist/jobTypes/jobTypes.type.d.ts +0 -1
  64. package/dist/jobTypes/jobTypes.type.js +0 -1
  65. package/dist/middleware/index.d.ts +0 -1
  66. package/dist/middleware/index.js +0 -1
  67. package/dist/middleware/middleware.core.d.ts +0 -1
  68. package/dist/middleware/middleware.core.js +0 -1
  69. package/dist/middleware/middleware.type.d.ts +0 -1
  70. package/dist/middleware/middleware.type.js +0 -1
  71. package/dist/processor/index.d.ts +0 -1
  72. package/dist/processor/index.js +0 -1
  73. package/dist/processor/processor.core.d.ts +0 -1
  74. package/dist/processor/processor.core.js +0 -1
  75. package/dist/processor/processor.type.d.ts +0 -1
  76. package/dist/processor/processor.type.js +0 -1
  77. package/dist/queue/index.d.ts +0 -1
  78. package/dist/queue/index.js +0 -1
  79. package/dist/queue/queue.core.d.ts +0 -1
  80. package/dist/queue/queue.core.js +0 -1
  81. package/dist/queue/queue.report.d.ts +0 -1
  82. package/dist/queue/queue.report.js +0 -1
  83. package/dist/queue/queue.type.d.ts +6 -1
  84. package/dist/queue/queue.type.js +0 -1
  85. package/dist/queueEmitter/index.d.ts +0 -1
  86. package/dist/queueEmitter/index.js +0 -1
  87. package/dist/queueEmitter/queueEmitter.core.d.ts +0 -1
  88. package/dist/queueEmitter/queueEmitter.core.js +0 -1
  89. package/dist/queueEmitter/queueEmitter.type.d.ts +0 -1
  90. package/dist/queueEmitter/queueEmitter.type.js +0 -1
  91. package/dist/queueErrors/index.d.ts +7 -0
  92. package/dist/queueErrors/index.js +6 -0
  93. package/dist/queueErrors/queueError.base.d.ts +13 -0
  94. package/dist/queueErrors/queueError.base.js +12 -0
  95. package/dist/queueManager/index.d.ts +0 -1
  96. package/dist/queueManager/index.js +0 -1
  97. package/dist/queueManager/queueManager.core.d.ts +0 -1
  98. package/dist/queueManager/queueManager.core.js +0 -1
  99. package/dist/queueManager/queueManager.type.d.ts +0 -1
  100. package/dist/queueManager/queueManager.type.js +0 -1
  101. package/dist/queueRegistry/index.d.ts +0 -1
  102. package/dist/queueRegistry/index.js +0 -1
  103. package/dist/queueRegistry/queueRegistry.core.d.ts +0 -1
  104. package/dist/queueRegistry/queueRegistry.core.js +0 -1
  105. package/dist/queueRegistry/queueRegistry.type.d.ts +0 -1
  106. package/dist/queueRegistry/queueRegistry.type.js +0 -1
  107. package/dist/retryPolicy/index.d.ts +1 -2
  108. package/dist/retryPolicy/index.js +1 -2
  109. package/dist/retryPolicy/retryPolicy.core.d.ts +7 -2
  110. package/dist/retryPolicy/retryPolicy.core.js +8 -3
  111. package/dist/serializer/index.d.ts +0 -1
  112. package/dist/serializer/index.js +0 -1
  113. package/dist/serializer/serializer.core.d.ts +0 -1
  114. package/dist/serializer/serializer.core.js +0 -1
  115. package/dist/serializer/serializer.type.d.ts +0 -1
  116. package/dist/serializer/serializer.type.js +0 -1
  117. package/dist/worker/index.d.ts +0 -1
  118. package/dist/worker/index.js +0 -1
  119. package/dist/worker/worker.core.d.ts +0 -1
  120. package/dist/worker/worker.core.js +0 -1
  121. package/dist/worker/worker.type.d.ts +0 -1
  122. package/dist/worker/worker.type.js +0 -1
  123. package/package.json +4 -4
@@ -4,4 +4,3 @@
4
4
  * Provides options for job creation, retry policies, and defaults.
5
5
  */
6
6
  export { DEFAULT_JOB_OPTIONS, mergeJobOptions } from "./jobOptions.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -7,4 +7,3 @@ export declare const DEFAULT_JOB_OPTIONS: Readonly<Pick<JobOptions, "attempts" |
7
7
  * Merges user-provided job options with defaults.
8
8
  */
9
9
  export declare function mergeJobOptions(options?: JobOptions): Required<Pick<JobOptions, "attempts" | "timeout">> & Pick<JobOptions, "backoff" | "delay" | "priority" | "deduplicationKey" | "scheduledAt" | "metadata">;
10
- //# sourceMappingURL=jobOptions.core.d.ts.map
@@ -20,4 +20,3 @@ export function mergeJobOptions(options) {
20
20
  metadata: options?.metadata,
21
21
  };
22
22
  }
23
- //# sourceMappingURL=jobOptions.core.js.map
@@ -42,4 +42,3 @@ export interface JobOptions {
42
42
  /** Additional metadata to attach to the job. */
43
43
  readonly metadata?: Record<string, unknown>;
44
44
  }
45
- //# sourceMappingURL=jobOptions.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=jobOptions.type.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createJobResult, createJobErrorResult, createJobProgress, } from "./jobResult.core.js";
7
7
  export type { JobResult, JobProgress } from "./jobResult.type.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * Provides types for job execution results and progress tracking.
5
5
  */
6
6
  export { createJobResult, createJobErrorResult, createJobProgress, } from "./jobResult.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -5,8 +5,15 @@ import type { JobResult, JobProgress } from "./jobResult.type.js";
5
5
  export declare function createJobResult<T>(data: T, durationMs: number): JobResult<T>;
6
6
  /**
7
7
  * Creates a failed job result.
8
+ *
9
+ * @param error - The failure message.
10
+ * @param durationMs - How long the attempt ran.
11
+ * @param options - Pass `unrecoverable: true` to dead-letter the job at
12
+ * once instead of retrying it.
8
13
  */
9
- export declare function createJobErrorResult(error: string, durationMs: number): JobResult;
14
+ export declare function createJobErrorResult(error: string, durationMs: number, options?: {
15
+ readonly unrecoverable?: boolean;
16
+ }): JobResult;
10
17
  /**
11
18
  * Creates a job progress update.
12
19
  */
@@ -16,4 +23,3 @@ export declare function createJobProgress(percent: number, options?: {
16
23
  currentStep?: number;
17
24
  message?: string;
18
25
  }): JobProgress;
19
- //# sourceMappingURL=jobResult.core.d.ts.map
@@ -11,11 +11,17 @@ export function createJobResult(data, durationMs) {
11
11
  }
12
12
  /**
13
13
  * Creates a failed job result.
14
+ *
15
+ * @param error - The failure message.
16
+ * @param durationMs - How long the attempt ran.
17
+ * @param options - Pass `unrecoverable: true` to dead-letter the job at
18
+ * once instead of retrying it.
14
19
  */
15
- export function createJobErrorResult(error, durationMs) {
20
+ export function createJobErrorResult(error, durationMs, options = {}) {
16
21
  return {
17
22
  success: false,
18
23
  error,
24
+ ...(options.unrecoverable === true ? { unrecoverable: true } : {}),
19
25
  durationMs,
20
26
  timestamp: new Date().toISOString(),
21
27
  };
@@ -33,4 +39,3 @@ export function createJobProgress(percent, options = {}) {
33
39
  timestamp: new Date().toISOString(),
34
40
  };
35
41
  }
36
- //# sourceMappingURL=jobResult.core.js.map
@@ -9,6 +9,12 @@ export interface JobResult<T = unknown> {
9
9
  readonly data?: T;
10
10
  /** Error message if the job failed. */
11
11
  readonly error?: string;
12
+ /**
13
+ * When `true` on a failed result, the job is dead-lettered at once
14
+ * instead of being retried. See `markUnrecoverable` for the thrown-error
15
+ * equivalent.
16
+ */
17
+ readonly unrecoverable?: boolean;
12
18
  /** Duration of the job execution in milliseconds. */
13
19
  readonly durationMs: number;
14
20
  /** When the result was created. */
@@ -31,4 +37,3 @@ export interface JobProgress {
31
37
  /** When the progress was updated. */
32
38
  readonly timestamp: Timestamp;
33
39
  }
34
- //# sourceMappingURL=jobResult.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=jobResult.type.js.map
@@ -6,4 +6,3 @@
6
6
  */
7
7
  export { JobState, JobPriorityLevels, BackoffType, WorkerState, createJobId, createQueueName, createJobName, isJobId, isQueueName, isJobName, } from "./jobTypes.type.js";
8
8
  export type { JobId, QueueName, JobName, JobPriority, BackoffStrategy, } from "./jobTypes.type.js";
9
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  * as well as lifecycle state enums and priority constants.
6
6
  */
7
7
  export { JobState, JobPriorityLevels, BackoffType, WorkerState, createJobId, createQueueName, createJobName, isJobId, isQueueName, isJobName, } from "./jobTypes.type.js";
8
- //# sourceMappingURL=index.js.map
@@ -95,4 +95,3 @@ export declare function isQueueName(value: unknown): value is QueueName;
95
95
  * Checks if a value is a valid JobName.
96
96
  */
97
97
  export declare function isJobName(value: unknown): value is JobName;
98
- //# sourceMappingURL=jobTypes.type.d.ts.map
@@ -78,4 +78,3 @@ export function isQueueName(value) {
78
78
  export function isJobName(value) {
79
79
  return typeof value === "string" && value.length > 0;
80
80
  }
81
- //# sourceMappingURL=jobTypes.type.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createMiddlewareChain, createLoggingMiddleware, createTimeoutMiddleware, } from "./middleware.core.js";
7
7
  export type { QueueMiddlewareContext, QueueMiddleware, } from "./middleware.type.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * Provides middleware composition for queue processing.
5
5
  */
6
6
  export { createMiddlewareChain, createLoggingMiddleware, createTimeoutMiddleware, } from "./middleware.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -22,4 +22,3 @@ export declare function createLoggingMiddleware(logger?: {
22
22
  * `AbortSignal` and let a cooperative processor stop its own work.
23
23
  */
24
24
  export declare function createTimeoutMiddleware(timeoutMs: number, onTimeout?: () => void): QueueMiddleware;
25
- //# sourceMappingURL=middleware.core.d.ts.map
@@ -96,4 +96,3 @@ export function createTimeoutMiddleware(timeoutMs, onTimeout) {
96
96
  }
97
97
  };
98
98
  }
99
- //# sourceMappingURL=middleware.core.js.map
@@ -16,4 +16,3 @@ export interface QueueMiddlewareContext<TData = unknown> {
16
16
  * Queue middleware function.
17
17
  */
18
18
  export type QueueMiddleware<TData = unknown> = (ctx: QueueMiddlewareContext<TData>) => Promise<JobResult | void>;
19
- //# sourceMappingURL=middleware.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=middleware.type.js.map
@@ -7,4 +7,3 @@
7
7
  export { createProcessorRegistry } from "./processor.core.js";
8
8
  export { assertProcessor, isProcessor } from "./processor.type.js";
9
9
  export type { Processor, ProcessorInfo, ProcessorRegistry, } from "./processor.type.js";
10
- //# sourceMappingURL=index.d.ts.map
@@ -6,4 +6,3 @@
6
6
  */
7
7
  export { createProcessorRegistry } from "./processor.core.js";
8
8
  export { assertProcessor, isProcessor } from "./processor.type.js";
9
- //# sourceMappingURL=index.js.map
@@ -3,4 +3,3 @@ import type { ProcessorRegistry } from "./processor.type.js";
3
3
  * Creates a new ProcessorRegistry.
4
4
  */
5
5
  export declare function createProcessorRegistry(): ProcessorRegistry;
6
- //# sourceMappingURL=processor.core.d.ts.map
@@ -39,4 +39,3 @@ export function createProcessorRegistry() {
39
39
  },
40
40
  };
41
41
  }
42
- //# sourceMappingURL=processor.core.js.map
@@ -56,4 +56,3 @@ export declare function isProcessor(value: unknown): value is Processor;
56
56
  * @throws {TypeError} when the value is not callable.
57
57
  */
58
58
  export declare function assertProcessor(value: unknown, jobName: string): asserts value is Processor;
59
- //# sourceMappingURL=processor.type.d.ts.map
@@ -19,4 +19,3 @@ export function assertProcessor(value, jobName) {
19
19
  throw new TypeError(`Processor for job "${jobName}" must be a function; received ${value === null ? "null" : typeof value}.`);
20
20
  }
21
21
  }
22
- //# sourceMappingURL=processor.type.js.map
@@ -7,4 +7,3 @@
7
7
  export { createQueue, isQueue } from "./queue.core.js";
8
8
  export type { Queue, QueueLogger, QueueOptions, QueueStats, QueueEventMap, } from "./queue.type.js";
9
9
  export type { QueueEventEmitter } from "../queueEmitter/queueEmitter.type.js";
10
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  * and managing job queues.
6
6
  */
7
7
  export { createQueue, isQueue } from "./queue.core.js";
8
- //# sourceMappingURL=index.js.map
@@ -10,4 +10,3 @@ export declare function createQueue<TData>(name: QueueName, options?: QueueOptio
10
10
  * Checks if a value is a valid Queue.
11
11
  */
12
12
  export declare function isQueue(value: unknown): value is Queue;
13
- //# sourceMappingURL=queue.core.d.ts.map
@@ -20,4 +20,3 @@ export function isQueue(value) {
20
20
  "getNextJob" in value &&
21
21
  "claimNextJob" in value);
22
22
  }
23
- //# sourceMappingURL=queue.core.js.map
@@ -18,4 +18,3 @@ import type { QueueLogger } from "./queue.type.js";
18
18
  * @param logger - The configured logger, if any.
19
19
  */
20
20
  export declare function reportQueueError(message: string, error: unknown, logger?: QueueLogger): void;
21
- //# sourceMappingURL=queue.report.d.ts.map
@@ -23,4 +23,3 @@ export function reportQueueError(message, error, logger) {
23
23
  }
24
24
  process.emitWarning(error instanceof Error ? error : new Error(String(error)), { type: "ZudoQueueWarning", detail: message });
25
25
  }
26
- //# sourceMappingURL=queue.report.js.map
@@ -134,6 +134,12 @@ export interface QueueOptions {
134
134
  * id, trace ids). See {@link QueueContextCarrier}.
135
135
  */
136
136
  readonly contextCarriers?: readonly QueueContextCarrier[];
137
+ /**
138
+ * Source of randomness for retry jitter, returning a number in `[0, 1)`.
139
+ * Defaults to `Math.random`; inject a seeded function to make a jittered
140
+ * backoff reproducible in tests.
141
+ */
142
+ readonly random?: () => number;
137
143
  }
138
144
  /**
139
145
  * Statistics for a queue.
@@ -306,4 +312,3 @@ export type QueueEventMap = {
306
312
  error: Error;
307
313
  };
308
314
  };
309
- //# sourceMappingURL=queue.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=queue.type.js.map
@@ -6,4 +6,3 @@
6
6
  */
7
7
  export { createNoopQueueEventEmitter, createInMemoryQueueEventEmitter, InMemoryQueueEventEmitter, } from "./queueEmitter.core.js";
8
8
  export type { QueueEventEmitter } from "./queueEmitter.type.js";
9
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  * Can be implemented by different backends (in-memory, @zudojs/events, etc.).
6
6
  */
7
7
  export { createNoopQueueEventEmitter, createInMemoryQueueEventEmitter, InMemoryQueueEventEmitter, } from "./queueEmitter.core.js";
8
- //# sourceMappingURL=index.js.map
@@ -60,4 +60,3 @@ export declare function createInMemoryQueueEventEmitter(options?: QueueEventEmit
60
60
  */
61
61
  export declare function createNoopQueueEventEmitter(): QueueEventEmitter;
62
62
  export {};
63
- //# sourceMappingURL=queueEmitter.core.d.ts.map
@@ -102,4 +102,3 @@ export function createNoopQueueEventEmitter() {
102
102
  },
103
103
  };
104
104
  }
105
- //# sourceMappingURL=queueEmitter.core.js.map
@@ -11,4 +11,3 @@ export interface QueueEventEmitter {
11
11
  /** Subscribe to an event. */
12
12
  on<K extends keyof QueueEventMap>(event: K, handler: (data: QueueEventMap[K]) => void): () => void;
13
13
  }
14
- //# sourceMappingURL=queueEmitter.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=queueEmitter.type.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Queue error classes, re-exported from `@zudojs/errors`.
3
+ *
4
+ * @module queueErrors
5
+ */
6
+ export { QueueError, createQueueError, isQueueError, toQueueError, QueueConnectionError, QueueNotFoundError, QueueClosedError, QueueDisposedError, JobError, JobNotFoundError, JobTimeoutError, JobCancelledError, JobSerializationError, JobDeserializationError, JobProcessingError, JobDuplicateError, JobMaxAttemptsError, JobStalledError, WorkerError, WorkerNotFoundError, WorkerLifecycleError, } from "./queueError.base.js";
7
+ export type { QueueErrorOptions } from "./queueError.base.js";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Queue error classes, re-exported from `@zudojs/errors`.
3
+ *
4
+ * @module queueErrors
5
+ */
6
+ export { QueueError, createQueueError, isQueueError, toQueueError, QueueConnectionError, QueueNotFoundError, QueueClosedError, QueueDisposedError, JobError, JobNotFoundError, JobTimeoutError, JobCancelledError, JobSerializationError, JobDeserializationError, JobProcessingError, JobDuplicateError, JobMaxAttemptsError, JobStalledError, WorkerError, WorkerNotFoundError, WorkerLifecycleError, } from "./queueError.base.js";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Queue-specific error classes.
3
+ *
4
+ * Every class is owned by `@zudojs/errors` and re-exported here, so a queue
5
+ * consumer can import the errors the queue throws — `JobDuplicateError` from
6
+ * `add()`, `JobMaxAttemptsError` on a dead-lettered job — from the package
7
+ * it already depends on. `instanceof` checks against either import path
8
+ * match the same errors.
9
+ *
10
+ * @module queueErrors
11
+ */
12
+ export { QueueError, createQueueError, isQueueError, toQueueError, QueueConnectionError, QueueNotFoundError, QueueClosedError, QueueDisposedError, JobError, JobNotFoundError, JobTimeoutError, JobCancelledError, JobSerializationError, JobDeserializationError, JobProcessingError, JobDuplicateError, JobMaxAttemptsError, JobStalledError, WorkerError, WorkerNotFoundError, WorkerLifecycleError, } from "@zudojs/errors";
13
+ export type { QueueErrorOptions } from "@zudojs/errors";
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Queue-specific error classes.
3
+ *
4
+ * Every class is owned by `@zudojs/errors` and re-exported here, so a queue
5
+ * consumer can import the errors the queue throws — `JobDuplicateError` from
6
+ * `add()`, `JobMaxAttemptsError` on a dead-lettered job — from the package
7
+ * it already depends on. `instanceof` checks against either import path
8
+ * match the same errors.
9
+ *
10
+ * @module queueErrors
11
+ */
12
+ export { QueueError, createQueueError, isQueueError, toQueueError, QueueConnectionError, QueueNotFoundError, QueueClosedError, QueueDisposedError, JobError, JobNotFoundError, JobTimeoutError, JobCancelledError, JobSerializationError, JobDeserializationError, JobProcessingError, JobDuplicateError, JobMaxAttemptsError, JobStalledError, WorkerError, WorkerNotFoundError, WorkerLifecycleError, } from "@zudojs/errors";
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createQueueManager } from "./queueManager.core.js";
7
7
  export type { QueueManager } from "./queueManager.type.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * Provides management of multiple named queues.
5
5
  */
6
6
  export { createQueueManager } from "./queueManager.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -3,4 +3,3 @@ import type { QueueManager } from "./queueManager.type.js";
3
3
  * Creates a new QueueManager.
4
4
  */
5
5
  export declare function createQueueManager(): QueueManager;
6
- //# sourceMappingURL=queueManager.core.d.ts.map
@@ -48,4 +48,3 @@ export function createQueueManager() {
48
48
  },
49
49
  };
50
50
  }
51
- //# sourceMappingURL=queueManager.core.js.map
@@ -15,4 +15,3 @@ export interface QueueManager {
15
15
  /** Close all queues. */
16
16
  closeAll(): Promise<void>;
17
17
  }
18
- //# sourceMappingURL=queueManager.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=queueManager.type.js.map
@@ -5,4 +5,3 @@
5
5
  */
6
6
  export { createQueueRegistry } from "./queueRegistry.core.js";
7
7
  export type { QueueRegistry, QueueInfo } from "./queueRegistry.type.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -4,4 +4,3 @@
4
4
  * Provides registration and lookup of queue instances.
5
5
  */
6
6
  export { createQueueRegistry } from "./queueRegistry.core.js";
7
- //# sourceMappingURL=index.js.map
@@ -3,4 +3,3 @@ import type { QueueRegistry } from "./queueRegistry.type.js";
3
3
  * Creates a new QueueRegistry.
4
4
  */
5
5
  export declare function createQueueRegistry(): QueueRegistry;
6
- //# sourceMappingURL=queueRegistry.core.d.ts.map
@@ -53,4 +53,3 @@ export function createQueueRegistry() {
53
53
  },
54
54
  };
55
55
  }
56
- //# sourceMappingURL=queueRegistry.core.js.map
@@ -30,4 +30,3 @@ export interface QueueRegistry {
30
30
  /** Clear all queues. */
31
31
  clear(): void;
32
32
  }
33
- //# sourceMappingURL=queueRegistry.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=queueRegistry.type.js.map
@@ -4,5 +4,4 @@
4
4
  * Provides functions for calculating retry delays and
5
5
  * creating backoff configurations.
6
6
  */
7
- export { calculateRetryDelay, shouldRetry, createBackoffOptions, createFixedBackoff, createExponentialBackoff, } from "./retryPolicy.core.js";
8
- //# sourceMappingURL=index.d.ts.map
7
+ export { DEFAULT_RETRY_BACKOFF, MAX_TIMER_DELAY, applyJitter, calculateRetryDelay, resolveBackoff, shouldRetry, createBackoffOptions, createFixedBackoff, createExponentialBackoff, } from "./retryPolicy.core.js";
@@ -4,5 +4,4 @@
4
4
  * Provides functions for calculating retry delays and
5
5
  * creating backoff configurations.
6
6
  */
7
- export { calculateRetryDelay, shouldRetry, createBackoffOptions, createFixedBackoff, createExponentialBackoff, } from "./retryPolicy.core.js";
8
- //# sourceMappingURL=index.js.map
7
+ export { DEFAULT_RETRY_BACKOFF, MAX_TIMER_DELAY, applyJitter, calculateRetryDelay, resolveBackoff, shouldRetry, createBackoffOptions, createFixedBackoff, createExponentialBackoff, } from "./retryPolicy.core.js";
@@ -30,8 +30,14 @@ export declare function applyJitter(delay: number, jitter: BackoffOptions["jitte
30
30
  * The result is always a finite, non-negative number no greater than
31
31
  * {@link MAX_TIMER_DELAY}. Jitter is applied only when the backoff opts
32
32
  * into it, so a backoff without `jitter` stays deterministic.
33
+ *
34
+ * @param attempt - The 1-based number of the attempt that just failed.
35
+ * @param backoff - The backoff to apply; no backoff means no delay.
36
+ * @param random - Source of randomness for jitter, returning a number in
37
+ * `[0, 1)`. Defaults to `Math.random`; inject a seeded function to make a
38
+ * jittered backoff reproducible in tests.
33
39
  */
34
- export declare function calculateRetryDelay(attempt: number, backoff?: BackoffOptions): number;
40
+ export declare function calculateRetryDelay(attempt: number, backoff?: BackoffOptions, random?: () => number): number;
35
41
  /**
36
42
  * Resolves the backoff to use for a job.
37
43
  *
@@ -65,4 +71,3 @@ export declare function createExponentialBackoff(delay: number, options?: {
65
71
  multiplier?: number;
66
72
  jitter?: BackoffOptions["jitter"];
67
73
  }): BackoffOptions;
68
- //# sourceMappingURL=retryPolicy.core.d.ts.map
@@ -56,8 +56,14 @@ export function applyJitter(delay, jitter, random = Math.random) {
56
56
  * The result is always a finite, non-negative number no greater than
57
57
  * {@link MAX_TIMER_DELAY}. Jitter is applied only when the backoff opts
58
58
  * into it, so a backoff without `jitter` stays deterministic.
59
+ *
60
+ * @param attempt - The 1-based number of the attempt that just failed.
61
+ * @param backoff - The backoff to apply; no backoff means no delay.
62
+ * @param random - Source of randomness for jitter, returning a number in
63
+ * `[0, 1)`. Defaults to `Math.random`; inject a seeded function to make a
64
+ * jittered backoff reproducible in tests.
59
65
  */
60
- export function calculateRetryDelay(attempt, backoff) {
66
+ export function calculateRetryDelay(attempt, backoff, random = Math.random) {
61
67
  if (!backoff) {
62
68
  return 0;
63
69
  }
@@ -76,7 +82,7 @@ export function calculateRetryDelay(attempt, backoff) {
76
82
  return delay;
77
83
  }
78
84
  };
79
- return clampDelay(applyJitter(clampDelay(base()), jitter));
85
+ return clampDelay(applyJitter(clampDelay(base()), jitter, random));
80
86
  }
81
87
  /**
82
88
  * Resolves the backoff to use for a job.
@@ -117,4 +123,3 @@ export function createFixedBackoff(delay, options) {
117
123
  export function createExponentialBackoff(delay, options) {
118
124
  return createBackoffOptions(BackoffType.EXPONENTIAL, delay, options);
119
125
  }
120
- //# sourceMappingURL=retryPolicy.core.js.map
@@ -6,4 +6,3 @@
6
6
  */
7
7
  export { JsonSerializer, createJsonSerializer, PassthroughSerializer, } from "./serializer.core.js";
8
8
  export type { Serializer } from "./serializer.type.js";
9
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  * with JSON and passthrough implementations.
6
6
  */
7
7
  export { JsonSerializer, createJsonSerializer, PassthroughSerializer, } from "./serializer.core.js";
8
- //# sourceMappingURL=index.js.map
@@ -40,4 +40,3 @@ export declare function createJsonSerializer(options?: {
40
40
  * cannot.
41
41
  */
42
42
  export declare const PassthroughSerializer: Serializer;
43
- //# sourceMappingURL=serializer.core.d.ts.map
@@ -69,4 +69,3 @@ export const PassthroughSerializer = Object.freeze({
69
69
  }
70
70
  },
71
71
  });
72
- //# sourceMappingURL=serializer.core.js.map
@@ -15,4 +15,3 @@ export interface Serializer {
15
15
  /** Deserialize a string to data. */
16
16
  deserialize<T>(data: string): T;
17
17
  }
18
- //# sourceMappingURL=serializer.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=serializer.type.js.map
@@ -6,4 +6,3 @@
6
6
  */
7
7
  export { createWorker, isWorker } from "./worker.core.js";
8
8
  export type { Worker, WorkerOptions, WorkerStats, WorkerLifecycleState, } from "./worker.type.js";
9
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  * and managing job workers.
6
6
  */
7
7
  export { createWorker, isWorker } from "./worker.core.js";
8
- //# sourceMappingURL=index.js.map
@@ -17,4 +17,3 @@ export declare function createWorker<TData>(id: string, queue: Queue<TData>, opt
17
17
  * Checks if a value is a valid Worker.
18
18
  */
19
19
  export declare function isWorker(value: unknown): value is Worker;
20
- //# sourceMappingURL=worker.core.d.ts.map
@@ -265,4 +265,3 @@ export function isWorker(value) {
265
265
  "start" in value &&
266
266
  "stop" in value);
267
267
  }
268
- //# sourceMappingURL=worker.core.js.map
@@ -85,4 +85,3 @@ export interface WorkerStats {
85
85
  /** Worker state. */
86
86
  readonly state: WorkerLifecycleState;
87
87
  }
88
- //# sourceMappingURL=worker.type.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=worker.type.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zudojs/queue",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "Background job and asynchronous task infrastructure with in-memory and adapter-based queue implementations.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -25,9 +25,9 @@
25
25
  "!dist/.tsbuildinfo"
26
26
  ],
27
27
  "dependencies": {
28
- "@zudojs/errors": "1.3.2",
29
- "@zudojs/constants": "1.1.4",
30
- "@zudojs/serialization": "1.2.3"
28
+ "@zudojs/errors": "1.4.0",
29
+ "@zudojs/constants": "1.2.0",
30
+ "@zudojs/serialization": "1.3.0"
31
31
  },
32
32
  "devDependencies": {
33
33
  "typescript": "7.0.2",