@zudojs/queue 0.0.1
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.
- package/README.md +46 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/deadLetter/deadLetter.core.d.ts +13 -0
- package/dist/deadLetter/deadLetter.core.d.ts.map +1 -0
- package/dist/deadLetter/deadLetter.core.js +41 -0
- package/dist/deadLetter/deadLetter.core.js.map +1 -0
- package/dist/deadLetter/deadLetter.type.d.ts +33 -0
- package/dist/deadLetter/deadLetter.type.d.ts.map +1 -0
- package/dist/deadLetter/deadLetter.type.js +2 -0
- package/dist/deadLetter/deadLetter.type.js.map +1 -0
- package/dist/deadLetter/index.d.ts +9 -0
- package/dist/deadLetter/index.d.ts.map +1 -0
- package/dist/deadLetter/index.js +8 -0
- package/dist/deadLetter/index.js.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.core.d.ts +48 -0
- package/dist/inMemoryQueue/inMemoryQueue.core.d.ts.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.core.js +230 -0
- package/dist/inMemoryQueue/inMemoryQueue.core.js.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.factory.d.ts +7 -0
- package/dist/inMemoryQueue/inMemoryQueue.factory.d.ts.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.factory.js +8 -0
- package/dist/inMemoryQueue/inMemoryQueue.factory.js.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.processing.d.ts +19 -0
- package/dist/inMemoryQueue/inMemoryQueue.processing.d.ts.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.processing.js +112 -0
- package/dist/inMemoryQueue/inMemoryQueue.processing.js.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.scheduling.d.ts +10 -0
- package/dist/inMemoryQueue/inMemoryQueue.scheduling.d.ts.map +1 -0
- package/dist/inMemoryQueue/inMemoryQueue.scheduling.js +38 -0
- package/dist/inMemoryQueue/inMemoryQueue.scheduling.js.map +1 -0
- package/dist/inMemoryQueue/index.d.ts +8 -0
- package/dist/inMemoryQueue/index.d.ts.map +1 -0
- package/dist/inMemoryQueue/index.js +8 -0
- package/dist/inMemoryQueue/index.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/job/index.d.ts +9 -0
- package/dist/job/index.d.ts.map +1 -0
- package/dist/job/index.js +8 -0
- package/dist/job/index.js.map +1 -0
- package/dist/job/job.core.d.ts +19 -0
- package/dist/job/job.core.d.ts.map +1 -0
- package/dist/job/job.core.js +74 -0
- package/dist/job/job.core.js.map +1 -0
- package/dist/job/job.type.d.ts +65 -0
- package/dist/job/job.type.d.ts.map +1 -0
- package/dist/job/job.type.js +2 -0
- package/dist/job/job.type.js.map +1 -0
- package/dist/jobContext/index.d.ts +8 -0
- package/dist/jobContext/index.d.ts.map +1 -0
- package/dist/jobContext/index.js +7 -0
- package/dist/jobContext/index.js.map +1 -0
- package/dist/jobContext/jobContext.core.d.ts +17 -0
- package/dist/jobContext/jobContext.core.d.ts.map +1 -0
- package/dist/jobContext/jobContext.core.js +36 -0
- package/dist/jobContext/jobContext.core.js.map +1 -0
- package/dist/jobContext/jobContext.type.d.ts +16 -0
- package/dist/jobContext/jobContext.type.d.ts.map +1 -0
- package/dist/jobContext/jobContext.type.js +2 -0
- package/dist/jobContext/jobContext.type.js.map +1 -0
- package/dist/jobOptions/index.d.ts +8 -0
- package/dist/jobOptions/index.d.ts.map +1 -0
- package/dist/jobOptions/index.js +7 -0
- package/dist/jobOptions/index.js.map +1 -0
- package/dist/jobOptions/jobOptions.core.d.ts +10 -0
- package/dist/jobOptions/jobOptions.core.d.ts.map +1 -0
- package/dist/jobOptions/jobOptions.core.js +23 -0
- package/dist/jobOptions/jobOptions.core.js.map +1 -0
- package/dist/jobOptions/jobOptions.type.d.ts +36 -0
- package/dist/jobOptions/jobOptions.type.d.ts.map +1 -0
- package/dist/jobOptions/jobOptions.type.js +2 -0
- package/dist/jobOptions/jobOptions.type.js.map +1 -0
- package/dist/jobResult/index.d.ts +8 -0
- package/dist/jobResult/index.d.ts.map +1 -0
- package/dist/jobResult/index.js +7 -0
- package/dist/jobResult/index.js.map +1 -0
- package/dist/jobResult/jobResult.core.d.ts +19 -0
- package/dist/jobResult/jobResult.core.d.ts.map +1 -0
- package/dist/jobResult/jobResult.core.js +36 -0
- package/dist/jobResult/jobResult.core.js.map +1 -0
- package/dist/jobResult/jobResult.type.d.ts +34 -0
- package/dist/jobResult/jobResult.type.d.ts.map +1 -0
- package/dist/jobResult/jobResult.type.js +2 -0
- package/dist/jobResult/jobResult.type.js.map +1 -0
- package/dist/jobTypes/index.d.ts +9 -0
- package/dist/jobTypes/index.d.ts.map +1 -0
- package/dist/jobTypes/index.js +8 -0
- package/dist/jobTypes/index.js.map +1 -0
- package/dist/jobTypes/jobTypes.type.d.ts +89 -0
- package/dist/jobTypes/jobTypes.type.d.ts.map +1 -0
- package/dist/jobTypes/jobTypes.type.js +81 -0
- package/dist/jobTypes/jobTypes.type.js.map +1 -0
- package/dist/middleware/index.d.ts +8 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +7 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/middleware.core.d.ts +16 -0
- package/dist/middleware/middleware.core.d.ts.map +1 -0
- package/dist/middleware/middleware.core.js +76 -0
- package/dist/middleware/middleware.core.js.map +1 -0
- package/dist/middleware/middleware.type.d.ts +19 -0
- package/dist/middleware/middleware.type.d.ts.map +1 -0
- package/dist/middleware/middleware.type.js +2 -0
- package/dist/middleware/middleware.type.js.map +1 -0
- package/dist/processor/index.d.ts +10 -0
- package/dist/processor/index.d.ts.map +1 -0
- package/dist/processor/index.js +9 -0
- package/dist/processor/index.js.map +1 -0
- package/dist/processor/processor.core.d.ts +6 -0
- package/dist/processor/processor.core.d.ts.map +1 -0
- package/dist/processor/processor.core.js +40 -0
- package/dist/processor/processor.core.js.map +1 -0
- package/dist/processor/processor.type.d.ts +42 -0
- package/dist/processor/processor.type.d.ts.map +1 -0
- package/dist/processor/processor.type.js +7 -0
- package/dist/processor/processor.type.js.map +1 -0
- package/dist/queue/index.d.ts +10 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +8 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue.core.d.ts +13 -0
- package/dist/queue/queue.core.d.ts.map +1 -0
- package/dist/queue/queue.core.js +23 -0
- package/dist/queue/queue.core.js.map +1 -0
- package/dist/queue/queue.type.d.ts +109 -0
- package/dist/queue/queue.type.d.ts.map +1 -0
- package/dist/queue/queue.type.js +2 -0
- package/dist/queue/queue.type.js.map +1 -0
- package/dist/queueEmitter/index.d.ts +9 -0
- package/dist/queueEmitter/index.d.ts.map +1 -0
- package/dist/queueEmitter/index.js +8 -0
- package/dist/queueEmitter/index.js.map +1 -0
- package/dist/queueEmitter/queueEmitter.core.d.ts +24 -0
- package/dist/queueEmitter/queueEmitter.core.d.ts.map +1 -0
- package/dist/queueEmitter/queueEmitter.core.js +45 -0
- package/dist/queueEmitter/queueEmitter.core.js.map +1 -0
- package/dist/queueEmitter/queueEmitter.type.d.ts +14 -0
- package/dist/queueEmitter/queueEmitter.type.d.ts.map +1 -0
- package/dist/queueEmitter/queueEmitter.type.js +2 -0
- package/dist/queueEmitter/queueEmitter.type.js.map +1 -0
- package/dist/queueEvents/index.d.ts +8 -0
- package/dist/queueEvents/index.d.ts.map +1 -0
- package/dist/queueEvents/index.js +7 -0
- package/dist/queueEvents/index.js.map +1 -0
- package/dist/queueEvents/queueEvents.core.d.ts +6 -0
- package/dist/queueEvents/queueEvents.core.d.ts.map +1 -0
- package/dist/queueEvents/queueEvents.core.js +12 -0
- package/dist/queueEvents/queueEvents.core.js.map +1 -0
- package/dist/queueEvents/queueEvents.type.d.ts +97 -0
- package/dist/queueEvents/queueEvents.type.d.ts.map +1 -0
- package/dist/queueEvents/queueEvents.type.js +2 -0
- package/dist/queueEvents/queueEvents.type.js.map +1 -0
- package/dist/queueManager/index.d.ts +8 -0
- package/dist/queueManager/index.d.ts.map +1 -0
- package/dist/queueManager/index.js +7 -0
- package/dist/queueManager/index.js.map +1 -0
- package/dist/queueManager/queueManager.core.d.ts +6 -0
- package/dist/queueManager/queueManager.core.d.ts.map +1 -0
- package/dist/queueManager/queueManager.core.js +32 -0
- package/dist/queueManager/queueManager.core.js.map +1 -0
- package/dist/queueManager/queueManager.type.d.ts +18 -0
- package/dist/queueManager/queueManager.type.d.ts.map +1 -0
- package/dist/queueManager/queueManager.type.js +2 -0
- package/dist/queueManager/queueManager.type.js.map +1 -0
- package/dist/queueRegistry/index.d.ts +8 -0
- package/dist/queueRegistry/index.d.ts.map +1 -0
- package/dist/queueRegistry/index.js +7 -0
- package/dist/queueRegistry/index.js.map +1 -0
- package/dist/queueRegistry/queueRegistry.core.d.ts +6 -0
- package/dist/queueRegistry/queueRegistry.core.d.ts.map +1 -0
- package/dist/queueRegistry/queueRegistry.core.js +41 -0
- package/dist/queueRegistry/queueRegistry.core.js.map +1 -0
- package/dist/queueRegistry/queueRegistry.type.d.ts +31 -0
- package/dist/queueRegistry/queueRegistry.type.d.ts.map +1 -0
- package/dist/queueRegistry/queueRegistry.type.js +2 -0
- package/dist/queueRegistry/queueRegistry.type.js.map +1 -0
- package/dist/retryPolicy/index.d.ts +8 -0
- package/dist/retryPolicy/index.d.ts.map +1 -0
- package/dist/retryPolicy/index.js +8 -0
- package/dist/retryPolicy/index.js.map +1 -0
- package/dist/retryPolicy/retryPolicy.core.d.ts +29 -0
- package/dist/retryPolicy/retryPolicy.core.d.ts.map +1 -0
- package/dist/retryPolicy/retryPolicy.core.js +51 -0
- package/dist/retryPolicy/retryPolicy.core.js.map +1 -0
- package/dist/serializer/index.d.ts +9 -0
- package/dist/serializer/index.d.ts.map +1 -0
- package/dist/serializer/index.js +8 -0
- package/dist/serializer/index.js.map +1 -0
- package/dist/serializer/serializer.core.d.ts +19 -0
- package/dist/serializer/serializer.core.d.ts.map +1 -0
- package/dist/serializer/serializer.core.js +53 -0
- package/dist/serializer/serializer.core.js.map +1 -0
- package/dist/serializer/serializer.type.d.ts +12 -0
- package/dist/serializer/serializer.type.d.ts.map +1 -0
- package/dist/serializer/serializer.type.js +2 -0
- package/dist/serializer/serializer.type.js.map +1 -0
- package/dist/worker/index.d.ts +9 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +8 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/worker.core.d.ts +11 -0
- package/dist/worker/worker.core.d.ts.map +1 -0
- package/dist/worker/worker.core.js +117 -0
- package/dist/worker/worker.core.js.map +1 -0
- package/dist/worker/worker.type.d.ts +61 -0
- package/dist/worker/worker.type.d.ts.map +1 -0
- package/dist/worker/worker.type.js +2 -0
- package/dist/worker/worker.type.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { QueueName } from "../jobTypes/jobTypes.type.js";
|
|
2
|
+
import type { Queue } from "../queue/queue.type.js";
|
|
3
|
+
/**
|
|
4
|
+
* Information about a registered queue.
|
|
5
|
+
*/
|
|
6
|
+
export interface QueueInfo {
|
|
7
|
+
/** Queue name. */
|
|
8
|
+
readonly name: QueueName;
|
|
9
|
+
/** When the queue was registered. */
|
|
10
|
+
readonly registeredAt: Date;
|
|
11
|
+
/** Queue options. */
|
|
12
|
+
readonly options?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Registry for queue instances.
|
|
16
|
+
*/
|
|
17
|
+
export interface QueueRegistry {
|
|
18
|
+
/** Register a queue. */
|
|
19
|
+
register<TData>(queue: Queue<TData>): void;
|
|
20
|
+
/** Get a queue by name. */
|
|
21
|
+
get<TData>(name: QueueName): Queue<TData> | undefined;
|
|
22
|
+
/** Check if a queue is registered. */
|
|
23
|
+
has(name: QueueName): boolean;
|
|
24
|
+
/** Get all registered queue info. */
|
|
25
|
+
getAll(): QueueInfo[];
|
|
26
|
+
/** Remove a queue. */
|
|
27
|
+
unregister(name: QueueName): boolean;
|
|
28
|
+
/** Clear all queues. */
|
|
29
|
+
clear(): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=queueRegistry.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queueRegistry.type.d.ts","sourceRoot":"","sources":["../../src/queueRegistry/queueRegistry.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kBAAkB;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,qBAAqB;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC3C,2BAA2B;IAC3B,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACtD,sCAAsC;IACtC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,qCAAqC;IACrC,MAAM,IAAI,SAAS,EAAE,CAAC;IACtB,sBAAsB;IACtB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IACrC,wBAAwB;IACxB,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queueRegistry.type.js","sourceRoot":"","sources":["../../src/queueRegistry/queueRegistry.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry policy and backoff strategies.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for calculating retry delays and
|
|
5
|
+
* creating backoff configurations.
|
|
6
|
+
*/
|
|
7
|
+
export { calculateRetryDelay, shouldRetry, createBackoffOptions, createFixedBackoff, createExponentialBackoff, } from "./retryPolicy.core.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/retryPolicy/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry policy and backoff strategies.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for calculating retry delays and
|
|
5
|
+
* creating backoff configurations.
|
|
6
|
+
*/
|
|
7
|
+
export { calculateRetryDelay, shouldRetry, createBackoffOptions, createFixedBackoff, createExponentialBackoff, } from "./retryPolicy.core.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/retryPolicy/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BackoffType } from "../jobTypes/jobTypes.type.js";
|
|
2
|
+
import type { BackoffOptions } from "../jobOptions/jobOptions.type.js";
|
|
3
|
+
/**
|
|
4
|
+
* Calculates the delay for the next retry attempt.
|
|
5
|
+
*/
|
|
6
|
+
export declare function calculateRetryDelay(attempt: number, backoff?: BackoffOptions): number;
|
|
7
|
+
/**
|
|
8
|
+
* Checks if a job should be retried based on its state.
|
|
9
|
+
*/
|
|
10
|
+
export declare function shouldRetry(attempt: number, maxAttempts: number): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Creates a backoff options object.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createBackoffOptions(type: BackoffType, delay: number, options?: {
|
|
15
|
+
maxDelay?: number;
|
|
16
|
+
multiplier?: number;
|
|
17
|
+
}): BackoffOptions;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a fixed backoff options.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createFixedBackoff(delay: number): BackoffOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Creates an exponential backoff options.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createExponentialBackoff(delay: number, options?: {
|
|
26
|
+
maxDelay?: number;
|
|
27
|
+
multiplier?: number;
|
|
28
|
+
}): BackoffOptions;
|
|
29
|
+
//# sourceMappingURL=retryPolicy.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryPolicy.core.d.ts","sourceRoot":"","sources":["../../src/retryPolicy/retryPolicy.core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAEzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,cAAc,CAOhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAEhE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,cAAc,CAEhB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BackoffType } from "../jobTypes/jobTypes.type.js";
|
|
2
|
+
/**
|
|
3
|
+
* Calculates the delay for the next retry attempt.
|
|
4
|
+
*/
|
|
5
|
+
export function calculateRetryDelay(attempt, backoff) {
|
|
6
|
+
if (!backoff) {
|
|
7
|
+
return 0;
|
|
8
|
+
}
|
|
9
|
+
const { type, delay, maxDelay, multiplier } = backoff;
|
|
10
|
+
switch (type) {
|
|
11
|
+
case BackoffType.FIXED:
|
|
12
|
+
return delay;
|
|
13
|
+
case BackoffType.EXPONENTIAL: {
|
|
14
|
+
const multiplierValue = multiplier ?? 2;
|
|
15
|
+
const calculatedDelay = delay * Math.pow(multiplierValue, attempt - 1);
|
|
16
|
+
return maxDelay ? Math.min(calculatedDelay, maxDelay) : calculatedDelay;
|
|
17
|
+
}
|
|
18
|
+
default:
|
|
19
|
+
return delay;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Checks if a job should be retried based on its state.
|
|
24
|
+
*/
|
|
25
|
+
export function shouldRetry(attempt, maxAttempts) {
|
|
26
|
+
return attempt < maxAttempts;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a backoff options object.
|
|
30
|
+
*/
|
|
31
|
+
export function createBackoffOptions(type, delay, options) {
|
|
32
|
+
return {
|
|
33
|
+
type,
|
|
34
|
+
delay,
|
|
35
|
+
maxDelay: options?.maxDelay,
|
|
36
|
+
multiplier: options?.multiplier,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates a fixed backoff options.
|
|
41
|
+
*/
|
|
42
|
+
export function createFixedBackoff(delay) {
|
|
43
|
+
return createBackoffOptions(BackoffType.FIXED, delay);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates an exponential backoff options.
|
|
47
|
+
*/
|
|
48
|
+
export function createExponentialBackoff(delay, options) {
|
|
49
|
+
return createBackoffOptions(BackoffType.EXPONENTIAL, delay, options);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=retryPolicy.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryPolicy.core.js","sourceRoot":"","sources":["../../src/retryPolicy/retryPolicy.core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,OAAwB;IAExB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEtD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,KAAK;YACpB,OAAO,KAAK,CAAC;QAEf,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,eAAe,GAAG,UAAU,IAAI,CAAC,CAAC;YACxC,MAAM,eAAe,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YACvE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QAC1E,CAAC;QAED;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,WAAmB;IAC9D,OAAO,OAAO,GAAG,WAAW,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAiB,EACjB,KAAa,EACb,OAGC;IAED,OAAO;QACL,IAAI;QACJ,KAAK;QACL,QAAQ,EAAE,OAAO,EAAE,QAAQ;QAC3B,UAAU,EAAE,OAAO,EAAE,UAAU;KAChC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,oBAAoB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAa,EACb,OAGC;IAED,OAAO,oBAAoB,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializer abstraction for job payloads.
|
|
3
|
+
*
|
|
4
|
+
* Provides serialization and deserialization of job data
|
|
5
|
+
* with JSON and passthrough implementations.
|
|
6
|
+
*/
|
|
7
|
+
export { JsonSerializer, createJsonSerializer, PassthroughSerializer, } from "./serializer.core.js";
|
|
8
|
+
export type { Serializer } from "./serializer.type.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializer abstraction for job payloads.
|
|
3
|
+
*
|
|
4
|
+
* Provides serialization and deserialization of job data
|
|
5
|
+
* with JSON and passthrough implementations.
|
|
6
|
+
*/
|
|
7
|
+
export { JsonSerializer, createJsonSerializer, PassthroughSerializer, } from "./serializer.core.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/queue — Serializer
|
|
3
|
+
*
|
|
4
|
+
* Job payload serialization using @zudojs/serialization's JSONSerializer.
|
|
5
|
+
*/
|
|
6
|
+
import type { Serializer } from "./serializer.type.js";
|
|
7
|
+
/** Default JSON serializer backed by @zudojs/serialization. */
|
|
8
|
+
export declare const JsonSerializer: Serializer;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a serializer with custom options.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createJsonSerializer(options?: {
|
|
13
|
+
replacer?: (key: string, value: unknown) => unknown;
|
|
14
|
+
space?: number;
|
|
15
|
+
preserveTypes?: boolean;
|
|
16
|
+
}): Serializer;
|
|
17
|
+
/** No-op serializer that passes data through unchanged. */
|
|
18
|
+
export declare const PassthroughSerializer: Serializer;
|
|
19
|
+
//# sourceMappingURL=serializer.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.core.d.ts","sourceRoot":"","sources":["../../src/serializer/serializer.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,+DAA+D;AAC/D,eAAO,MAAM,cAAc,EAAE,UAQ3B,CAAC;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAC7C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,UAAU,CAiBb;AAED,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,EAAE,UAelC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/queue — Serializer
|
|
3
|
+
*
|
|
4
|
+
* Job payload serialization using @zudojs/serialization's JSONSerializer.
|
|
5
|
+
*/
|
|
6
|
+
import { JSONSerializer } from "@zudojs/serialization";
|
|
7
|
+
/** Default JSON serializer backed by @zudojs/serialization. */
|
|
8
|
+
export const JsonSerializer = Object.freeze({
|
|
9
|
+
serialize(data) {
|
|
10
|
+
return new JSONSerializer().serialize(data);
|
|
11
|
+
},
|
|
12
|
+
deserialize(data) {
|
|
13
|
+
return new JSONSerializer().deserialize(data);
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Creates a serializer with custom options.
|
|
18
|
+
*/
|
|
19
|
+
export function createJsonSerializer(options) {
|
|
20
|
+
const inner = new JSONSerializer();
|
|
21
|
+
return Object.freeze({
|
|
22
|
+
serialize(data) {
|
|
23
|
+
return inner.serialize(data, {
|
|
24
|
+
pretty: options?.space !== undefined,
|
|
25
|
+
preserveTypes: options?.preserveTypes,
|
|
26
|
+
indent: options?.space,
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
deserialize(data) {
|
|
30
|
+
return inner.deserialize(data, {
|
|
31
|
+
preserveTypes: options?.preserveTypes,
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/** No-op serializer that passes data through unchanged. */
|
|
37
|
+
export const PassthroughSerializer = Object.freeze({
|
|
38
|
+
serialize(data) {
|
|
39
|
+
if (typeof data === "string") {
|
|
40
|
+
return data;
|
|
41
|
+
}
|
|
42
|
+
return new JSONSerializer().serialize(data);
|
|
43
|
+
},
|
|
44
|
+
deserialize(data) {
|
|
45
|
+
try {
|
|
46
|
+
return new JSONSerializer().deserialize(data);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=serializer.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.core.js","sourceRoot":"","sources":["../../src/serializer/serializer.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAe,MAAM,CAAC,MAAM,CAAC;IACtD,SAAS,CAAI,IAAO;QAClB,OAAO,IAAI,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,WAAW,CAAI,IAAY;QACzB,OAAO,IAAI,cAAc,EAAE,CAAC,WAAW,CAAI,IAAI,CAAC,CAAC;IACnD,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAIpC;IACC,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,CAAI,IAAO;YAClB,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;gBAC3B,MAAM,EAAE,OAAO,EAAE,KAAK,KAAK,SAAS;gBACpC,aAAa,EAAE,OAAO,EAAE,aAAa;gBACrC,MAAM,EAAE,OAAO,EAAE,KAAK;aACvB,CAAC,CAAC;QACL,CAAC;QAED,WAAW,CAAI,IAAY;YACzB,OAAO,KAAK,CAAC,WAAW,CAAI,IAAI,EAAE;gBAChC,aAAa,EAAE,OAAO,EAAE,aAAa;aACtC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAe,MAAM,CAAC,MAAM,CAAC;IAC7D,SAAS,CAAI,IAAO;QAClB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,WAAW,CAAI,IAAY;QACzB,IAAI,CAAC;YACH,OAAO,IAAI,cAAc,EAAE,CAAC,WAAW,CAAI,IAAI,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializer for job payloads.
|
|
3
|
+
*
|
|
4
|
+
* Provides serialization and deserialization of job data.
|
|
5
|
+
*/
|
|
6
|
+
export interface Serializer {
|
|
7
|
+
/** Serialize data to a string. */
|
|
8
|
+
serialize<T>(data: T): string;
|
|
9
|
+
/** Deserialize a string to data. */
|
|
10
|
+
deserialize<T>(data: string): T;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=serializer.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.type.d.ts","sourceRoot":"","sources":["../../src/serializer/serializer.type.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IAC9B,oCAAoC;IACpC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.type.js","sourceRoot":"","sources":["../../src/serializer/serializer.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker abstraction with lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Provides the core Worker type and functions for creating
|
|
5
|
+
* and managing job workers.
|
|
6
|
+
*/
|
|
7
|
+
export { createWorker, isWorker } from "./worker.core.js";
|
|
8
|
+
export type { Worker, WorkerOptions, WorkerStats, WorkerLifecycleState, } from "./worker.type.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE1D,YAAY,EACV,MAAM,EACN,aAAa,EACb,WAAW,EACX,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Queue } from "../queue/queue.type.js";
|
|
2
|
+
import type { Worker, WorkerOptions } from "./worker.type.js";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a new Worker.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createWorker<TData>(id: string, queue: Queue<TData>, options?: WorkerOptions): Worker<TData>;
|
|
7
|
+
/**
|
|
8
|
+
* Checks if a value is a valid Worker.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isWorker(value: unknown): value is Worker;
|
|
11
|
+
//# sourceMappingURL=worker.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.core.d.ts","sourceRoot":"","sources":["../../src/worker/worker.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EAGd,MAAM,kBAAkB,CAAC;AAM1B;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAChC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EACnB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAAC,KAAK,CAAC,CA0Hf;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAUxD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { WorkerState } from "../jobTypes/jobTypes.type.js";
|
|
2
|
+
import { WorkerLifecycleError } from "@zudojs/errors";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a new Worker.
|
|
5
|
+
*/
|
|
6
|
+
export function createWorker(id, queue, options) {
|
|
7
|
+
let state = WorkerState.CREATED;
|
|
8
|
+
let stats = { processed: 0, succeeded: 0, failed: 0, concurrency: 0 };
|
|
9
|
+
const concurrency = options?.concurrency ?? 1;
|
|
10
|
+
const pollInterval = options?.pollInterval ?? 100;
|
|
11
|
+
let pollTimer = null;
|
|
12
|
+
let activeJobs = 0;
|
|
13
|
+
let abortController = null;
|
|
14
|
+
const poll = async () => {
|
|
15
|
+
if (state !== WorkerState.RUNNING || abortController?.signal.aborted) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (activeJobs >= concurrency) {
|
|
19
|
+
pollTimer = setTimeout(poll, pollInterval);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const job = await queue.getNextJob();
|
|
23
|
+
if (!job) {
|
|
24
|
+
pollTimer = setTimeout(poll, pollInterval);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const proc = queue.getProcessor(job.name);
|
|
28
|
+
if (!proc) {
|
|
29
|
+
pollTimer = setTimeout(poll, pollInterval);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
activeJobs++;
|
|
33
|
+
stats.processed++;
|
|
34
|
+
try {
|
|
35
|
+
await proc(job, {
|
|
36
|
+
signal: abortController?.signal ?? new AbortController().signal,
|
|
37
|
+
});
|
|
38
|
+
stats.succeeded++;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
stats.failed++;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
activeJobs--;
|
|
45
|
+
pollTimer = setTimeout(poll, 0);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
id,
|
|
50
|
+
queue,
|
|
51
|
+
queueName: queue.name,
|
|
52
|
+
get state() {
|
|
53
|
+
return state;
|
|
54
|
+
},
|
|
55
|
+
async start() {
|
|
56
|
+
if (state !== WorkerState.CREATED && state !== WorkerState.STOPPED) {
|
|
57
|
+
throw new WorkerLifecycleError(`Worker "${id}" cannot start from state "${state}".`, { workerId: id });
|
|
58
|
+
}
|
|
59
|
+
state = WorkerState.STARTING;
|
|
60
|
+
abortController = new AbortController();
|
|
61
|
+
try {
|
|
62
|
+
state = WorkerState.RUNNING;
|
|
63
|
+
pollTimer = setTimeout(poll, 0);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
state = WorkerState.FAILED;
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
async stop() {
|
|
71
|
+
if (state !== WorkerState.RUNNING) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
state = WorkerState.DRAINING;
|
|
75
|
+
abortController?.abort();
|
|
76
|
+
while (activeJobs > 0) {
|
|
77
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
78
|
+
}
|
|
79
|
+
if (pollTimer) {
|
|
80
|
+
clearTimeout(pollTimer);
|
|
81
|
+
pollTimer = null;
|
|
82
|
+
}
|
|
83
|
+
state = WorkerState.STOPPED;
|
|
84
|
+
},
|
|
85
|
+
async forceStop() {
|
|
86
|
+
abortController?.abort();
|
|
87
|
+
if (pollTimer) {
|
|
88
|
+
clearTimeout(pollTimer);
|
|
89
|
+
pollTimer = null;
|
|
90
|
+
}
|
|
91
|
+
state = WorkerState.STOPPED;
|
|
92
|
+
},
|
|
93
|
+
isRunning() {
|
|
94
|
+
return state === WorkerState.RUNNING;
|
|
95
|
+
},
|
|
96
|
+
getStats() {
|
|
97
|
+
return {
|
|
98
|
+
...stats,
|
|
99
|
+
concurrency,
|
|
100
|
+
state,
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Checks if a value is a valid Worker.
|
|
107
|
+
*/
|
|
108
|
+
export function isWorker(value) {
|
|
109
|
+
return (typeof value === "object" &&
|
|
110
|
+
value !== null &&
|
|
111
|
+
"id" in value &&
|
|
112
|
+
"queueName" in value &&
|
|
113
|
+
"state" in value &&
|
|
114
|
+
"start" in value &&
|
|
115
|
+
"stop" in value);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=worker.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.core.js","sourceRoot":"","sources":["../../src/worker/worker.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Queue } from "../queue/queue.type.js";
|
|
2
|
+
import type { QueueMiddleware } from "../middleware/middleware.type.js";
|
|
3
|
+
import type { WorkerState } from "../jobTypes/jobTypes.type.js";
|
|
4
|
+
/**
|
|
5
|
+
* Options for creating a worker.
|
|
6
|
+
*/
|
|
7
|
+
export interface WorkerOptions {
|
|
8
|
+
/** Maximum number of jobs to process concurrently. */
|
|
9
|
+
readonly concurrency?: number;
|
|
10
|
+
/** Poll interval in milliseconds. */
|
|
11
|
+
readonly pollInterval?: number;
|
|
12
|
+
/** Maximum number of stalled jobs before marking as failed. */
|
|
13
|
+
readonly maxStalledCount?: number;
|
|
14
|
+
/** Job timeout in milliseconds. */
|
|
15
|
+
readonly timeoutMs?: number;
|
|
16
|
+
/** Middleware for job processing. */
|
|
17
|
+
readonly middleware?: QueueMiddleware[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Worker lifecycle states.
|
|
21
|
+
*/
|
|
22
|
+
export type WorkerLifecycleState = WorkerState;
|
|
23
|
+
/**
|
|
24
|
+
* A worker that processes jobs from a queue.
|
|
25
|
+
*/
|
|
26
|
+
export interface Worker<TData = unknown> {
|
|
27
|
+
/** Worker ID. */
|
|
28
|
+
readonly id: string;
|
|
29
|
+
/** Queue this worker processes jobs from. */
|
|
30
|
+
readonly queue: Queue<TData>;
|
|
31
|
+
/** Queue name. */
|
|
32
|
+
readonly queueName: string;
|
|
33
|
+
/** Current worker state. */
|
|
34
|
+
readonly state: WorkerLifecycleState;
|
|
35
|
+
/** Start processing jobs. */
|
|
36
|
+
start(): Promise<void>;
|
|
37
|
+
/** Stop processing jobs gracefully. */
|
|
38
|
+
stop(): Promise<void>;
|
|
39
|
+
/** Force stop processing jobs. */
|
|
40
|
+
forceStop(): Promise<void>;
|
|
41
|
+
/** Check if the worker is running. */
|
|
42
|
+
isRunning(): boolean;
|
|
43
|
+
/** Get worker statistics. */
|
|
44
|
+
getStats(): WorkerStats;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Worker statistics.
|
|
48
|
+
*/
|
|
49
|
+
export interface WorkerStats {
|
|
50
|
+
/** Number of jobs processed. */
|
|
51
|
+
readonly processed: number;
|
|
52
|
+
/** Number of successful jobs. */
|
|
53
|
+
readonly succeeded: number;
|
|
54
|
+
/** Number of failed jobs. */
|
|
55
|
+
readonly failed: number;
|
|
56
|
+
/** Current concurrency. */
|
|
57
|
+
readonly concurrency: number;
|
|
58
|
+
/** Worker state. */
|
|
59
|
+
readonly state: WorkerLifecycleState;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=worker.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.type.d.ts","sourceRoot":"","sources":["../../src/worker/worker.type.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,mCAAmC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,KAAK,GAAG,OAAO;IACrC,iBAAiB;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,kBAAkB;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,6BAA6B;IAC7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,uCAAuC;IACvC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,kCAAkC;IAClC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,sCAAsC;IACtC,SAAS,IAAI,OAAO,CAAC;IACrB,6BAA6B;IAC7B,QAAQ,IAAI,WAAW,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oBAAoB;IACpB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.type.js","sourceRoot":"","sources":["../../src/worker/worker.type.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zudojs/queue",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Background job and asynchronous task infrastructure with in-memory and adapter-based queue implementations.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc -p tsconfig.json",
|
|
22
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
23
|
+
"clean": "rm -rf dist",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@zudojs/errors": "workspace:*",
|
|
29
|
+
"@zudojs/constants": "workspace:*",
|
|
30
|
+
"@zudojs/serialization": "workspace:*"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"typescript": "7.0.2",
|
|
34
|
+
"vitest": "^4.1.11"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=24.0.0"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"zudojs",
|
|
44
|
+
"queue",
|
|
45
|
+
"jobs",
|
|
46
|
+
"background-jobs",
|
|
47
|
+
"worker"
|
|
48
|
+
],
|
|
49
|
+
"homepage": "https://github.com/oyinlola-tech/zudo#readme",
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "https://github.com/oyinlola-tech/zudo"
|
|
53
|
+
}
|
|
54
|
+
}
|