@arikajs/queue 0.0.3 → 0.0.5
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 +55 -15
- package/dist/Contracts.d.ts +12 -1
- package/dist/Contracts.d.ts.map +1 -1
- package/dist/Drivers/DatabaseDriver.d.ts +7 -1
- package/dist/Drivers/DatabaseDriver.d.ts.map +1 -1
- package/dist/Drivers/DatabaseDriver.js +61 -6
- package/dist/Drivers/DatabaseDriver.js.map +1 -1
- package/dist/Drivers/RedisDriver.d.ts +29 -0
- package/dist/Drivers/RedisDriver.d.ts.map +1 -0
- package/dist/Drivers/RedisDriver.js +99 -0
- package/dist/Drivers/RedisDriver.js.map +1 -0
- package/dist/Drivers/SyncDriver.d.ts +7 -1
- package/dist/Drivers/SyncDriver.d.ts.map +1 -1
- package/dist/Drivers/SyncDriver.js +11 -1
- package/dist/Drivers/SyncDriver.js.map +1 -1
- package/dist/Job.d.ts +8 -0
- package/dist/Job.d.ts.map +1 -1
- package/dist/Job.js +12 -0
- package/dist/Job.js.map +1 -1
- package/dist/QueueManager.d.ts +6 -0
- package/dist/QueueManager.d.ts.map +1 -1
- package/dist/QueueManager.js +17 -2
- package/dist/QueueManager.js.map +1 -1
- package/dist/Worker.d.ts +11 -3
- package/dist/Worker.d.ts.map +1 -1
- package/dist/Worker.js +45 -7
- package/dist/Worker.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/package.json +11 -7
package/README.md
CHANGED
|
@@ -37,29 +37,70 @@ pnpm add @arikajs/queue
|
|
|
37
37
|
|
|
38
38
|
```ts
|
|
39
39
|
import { Queue } from '@arikajs/queue';
|
|
40
|
+
import { SendEmailJob } from './Jobs/SendEmailJob';
|
|
40
41
|
|
|
42
|
+
// Basic dispatch
|
|
41
43
|
await Queue.dispatch(new SendEmailJob(user));
|
|
44
|
+
|
|
45
|
+
// Dispatch to specific connection & queue
|
|
46
|
+
await Queue.connection('redis')
|
|
47
|
+
.push(new SendEmailJob(user).onQueue('high'));
|
|
48
|
+
|
|
49
|
+
// Delayed dispatching (10 seconds)
|
|
50
|
+
await Queue.later(10, new SendEmailJob(user));
|
|
51
|
+
|
|
52
|
+
// Or using chaining on the job
|
|
53
|
+
await Queue.dispatch(
|
|
54
|
+
new SendEmailJob(user)
|
|
55
|
+
.onDelay(60)
|
|
56
|
+
.onQueue('emails')
|
|
57
|
+
);
|
|
42
58
|
```
|
|
43
59
|
|
|
44
60
|
### Defining a Job
|
|
45
61
|
|
|
62
|
+
Jobs should extend `BaseJob` to support method chaining.
|
|
63
|
+
|
|
46
64
|
```ts
|
|
47
|
-
|
|
65
|
+
import { BaseJob } from '@arikajs/queue';
|
|
66
|
+
|
|
67
|
+
export class SendEmailJob extends BaseJob {
|
|
68
|
+
constructor(public user: any) {
|
|
69
|
+
super();
|
|
70
|
+
}
|
|
71
|
+
|
|
48
72
|
async handle() {
|
|
49
|
-
// job logic
|
|
73
|
+
// job logic using this.user
|
|
50
74
|
}
|
|
51
75
|
}
|
|
52
76
|
```
|
|
53
77
|
|
|
54
78
|
---
|
|
55
79
|
|
|
80
|
+
## 🏗 Running Workers
|
|
81
|
+
|
|
82
|
+
To start processing jobs, use the `queue:work` command:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Process default queue on default connection
|
|
86
|
+
arika queue:work
|
|
87
|
+
|
|
88
|
+
# Process specific connection and queue
|
|
89
|
+
arika queue:work --connection=redis --queue=high
|
|
90
|
+
|
|
91
|
+
# Control sleep time when no jobs are found
|
|
92
|
+
arika queue:work --sleep=5
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
56
97
|
## 🔁 Queue Drivers (v1)
|
|
57
98
|
|
|
58
99
|
| Driver | Status | Description |
|
|
59
100
|
| :--- | :--- | :--- |
|
|
60
101
|
| **Sync** | ✅ Supported | Default synchronous driver for local dev |
|
|
61
102
|
| **Database** | ✅ Supported | Stores jobs in your database |
|
|
62
|
-
| **Redis** |
|
|
103
|
+
| **Redis** | ✅ Supported | Redis-based queue driver (High-performance) |
|
|
63
104
|
|
|
64
105
|
---
|
|
65
106
|
|
|
@@ -105,27 +146,26 @@ arika migrate
|
|
|
105
146
|
|
|
106
147
|
---
|
|
107
148
|
|
|
108
|
-
##
|
|
149
|
+
## 🏗 Architecture
|
|
109
150
|
|
|
110
|
-
```
|
|
151
|
+
```text
|
|
111
152
|
queue/
|
|
112
153
|
├── src/
|
|
113
|
-
│ ├──
|
|
154
|
+
│ ├── Drivers
|
|
155
|
+
│ │ ├── DatabaseDriver.ts
|
|
156
|
+
│ │ ├── RedisDriver.ts
|
|
157
|
+
│ │ └── SyncDriver.ts
|
|
158
|
+
│ ├── Contracts.ts
|
|
159
|
+
│ ├── index.ts
|
|
114
160
|
│ ├── Job.ts
|
|
115
|
-
│ ├──
|
|
116
|
-
│
|
|
117
|
-
│ │ ├── SyncDriver.ts
|
|
118
|
-
│ │ └── DatabaseDriver.ts
|
|
119
|
-
│ └── index.ts
|
|
161
|
+
│ ├── QueueManager.ts
|
|
162
|
+
│ └── Worker.ts
|
|
120
163
|
├── tests/
|
|
121
164
|
├── package.json
|
|
122
165
|
├── tsconfig.json
|
|
123
|
-
|
|
124
|
-
└── LICENSE
|
|
166
|
+
└── README.md
|
|
125
167
|
```
|
|
126
168
|
|
|
127
|
-
---
|
|
128
|
-
|
|
129
169
|
## 📄 License
|
|
130
170
|
|
|
131
171
|
`@arikajs/queue` is open-source software licensed under the **MIT License**.
|
package/dist/Contracts.d.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
export interface Job {
|
|
2
2
|
handle(): Promise<void> | void;
|
|
3
|
+
connection?: string;
|
|
4
|
+
queue?: string;
|
|
5
|
+
delay?: number | Date;
|
|
6
|
+
tries?: number;
|
|
7
|
+
timeout?: number;
|
|
3
8
|
}
|
|
4
9
|
export interface QueueDriver {
|
|
5
|
-
push(job: Job
|
|
10
|
+
push(job: Job, options?: {
|
|
11
|
+
queue?: string;
|
|
12
|
+
delay?: number | Date;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
pop(queue?: string): Promise<any | null>;
|
|
15
|
+
acknowledge(jobData: any): Promise<void>;
|
|
16
|
+
fail(jobData: any, error: any): Promise<void>;
|
|
6
17
|
}
|
|
7
18
|
//# sourceMappingURL=Contracts.d.ts.map
|
package/dist/Contracts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Contracts.d.ts","sourceRoot":"","sources":["../src/Contracts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Contracts.d.ts","sourceRoot":"","sources":["../src/Contracts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG;IAChB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
|
|
@@ -8,7 +8,13 @@ export declare class DatabaseDriver implements QueueDriver {
|
|
|
8
8
|
private database;
|
|
9
9
|
private config;
|
|
10
10
|
constructor(database: any, config: DatabaseQueueConfig);
|
|
11
|
-
push(job: Job
|
|
11
|
+
push(job: Job, options?: {
|
|
12
|
+
queue?: string;
|
|
13
|
+
delay?: number | Date;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
pop(queue?: string): Promise<any | null>;
|
|
16
|
+
acknowledge(jobData: any): Promise<void>;
|
|
17
|
+
fail(jobData: any, error: any): Promise<void>;
|
|
12
18
|
protected createPayload(job: Job): any;
|
|
13
19
|
protected getJobData(job: any): any;
|
|
14
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/DatabaseDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,YAAW,WAAW;IAE1C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;gBADN,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,mBAAmB;IAGjC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"DatabaseDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/DatabaseDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,YAAW,WAAW;IAE1C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;gBADN,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,mBAAmB;IAGjC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtF,GAAG,CAAC,KAAK,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IA8BnD,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAQtC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;CAWtC"}
|
|
@@ -6,15 +6,67 @@ class DatabaseDriver {
|
|
|
6
6
|
this.database = database;
|
|
7
7
|
this.config = config;
|
|
8
8
|
}
|
|
9
|
-
async push(job) {
|
|
9
|
+
async push(job, options = {}) {
|
|
10
10
|
const payload = this.createPayload(job);
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const queue = options.queue || job.queue || 'default';
|
|
12
|
+
let availableAt = Math.floor(Date.now() / 1000);
|
|
13
|
+
if (options.delay) {
|
|
14
|
+
if (options.delay instanceof Date) {
|
|
15
|
+
availableAt = Math.floor(options.delay.getTime() / 1000);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
availableAt += options.delay;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
await this.database.table(this.config.table, this.config.connection).insert({
|
|
22
|
+
queue: queue,
|
|
13
23
|
payload: JSON.stringify(payload),
|
|
14
24
|
attempts: 0,
|
|
15
|
-
available_at:
|
|
16
|
-
created_at:
|
|
25
|
+
available_at: availableAt,
|
|
26
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async pop(queue = 'default') {
|
|
30
|
+
const now = Math.floor(Date.now() / 1000);
|
|
31
|
+
// Find the next available job
|
|
32
|
+
const job = await this.database.table(this.config.table, this.config.connection)
|
|
33
|
+
.where('queue', queue)
|
|
34
|
+
.where('available_at', '<=', now)
|
|
35
|
+
.whereNull('reserved_at')
|
|
36
|
+
.orderBy('available_at', 'asc')
|
|
37
|
+
.first();
|
|
38
|
+
if (!job) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
// Reserve the job
|
|
42
|
+
await this.database.table(this.config.table, this.config.connection)
|
|
43
|
+
.where('id', job.id)
|
|
44
|
+
.update({
|
|
45
|
+
reserved_at: now,
|
|
46
|
+
attempts: job.attempts + 1
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
id: job.id,
|
|
50
|
+
payload: JSON.parse(job.payload),
|
|
51
|
+
attempts: job.attempts + 1
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async acknowledge(jobData) {
|
|
55
|
+
await this.database.table(this.config.table, this.config.connection)
|
|
56
|
+
.where('id', jobData.id)
|
|
57
|
+
.delete();
|
|
58
|
+
}
|
|
59
|
+
async fail(jobData, error) {
|
|
60
|
+
const failedTable = 'failed_jobs';
|
|
61
|
+
await this.database.table(failedTable, this.config.connection).insert({
|
|
62
|
+
uuid: Math.random().toString(36).substring(2),
|
|
63
|
+
connection: this.config.connection || 'default',
|
|
64
|
+
queue: jobData.queue || 'default',
|
|
65
|
+
payload: JSON.stringify(jobData.payload),
|
|
66
|
+
exception: error.stack || error.message,
|
|
67
|
+
failed_at: new Date()
|
|
17
68
|
});
|
|
69
|
+
await this.acknowledge(jobData);
|
|
18
70
|
}
|
|
19
71
|
createPayload(job) {
|
|
20
72
|
return {
|
|
@@ -27,7 +79,10 @@ class DatabaseDriver {
|
|
|
27
79
|
// Simple serialization of job properties
|
|
28
80
|
const data = {};
|
|
29
81
|
for (const key of Object.keys(job)) {
|
|
30
|
-
|
|
82
|
+
// Avoid serializing functions or complex objects
|
|
83
|
+
if (typeof job[key] !== 'function') {
|
|
84
|
+
data[key] = job[key];
|
|
85
|
+
}
|
|
31
86
|
}
|
|
32
87
|
return data;
|
|
33
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseDriver.js","sourceRoot":"","sources":["../../src/Drivers/DatabaseDriver.ts"],"names":[],"mappings":";;;AASA,MAAa,cAAc;IACvB,YACY,QAAa,EACb,MAA2B;QAD3B,aAAQ,GAAR,QAAQ,CAAK;QACb,WAAM,GAAN,MAAM,CAAqB;IACnC,CAAC;IAEL,KAAK,CAAC,IAAI,CAAC,GAAQ;
|
|
1
|
+
{"version":3,"file":"DatabaseDriver.js","sourceRoot":"","sources":["../../src/Drivers/DatabaseDriver.ts"],"names":[],"mappings":";;;AASA,MAAa,cAAc;IACvB,YACY,QAAa,EACb,MAA2B;QAD3B,aAAQ,GAAR,QAAQ,CAAK;QACb,WAAM,GAAN,MAAM,CAAqB;IACnC,CAAC;IAEL,KAAK,CAAC,IAAI,CAAC,GAAQ,EAAE,UAAqD,EAAE;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC;QACtD,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEhD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,OAAO,CAAC,KAAK,YAAY,IAAI,EAAE,CAAC;gBAChC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACJ,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;YACjC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YACxE,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAChC,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;SAC5C,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB,SAAS;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE1C,8BAA8B;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;aAC3E,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;aACrB,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC;aAChC,SAAS,CAAC,aAAa,CAAC;aACxB,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;aAC9B,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,kBAAkB;QAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;aAC/D,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;aACnB,MAAM,CAAC;YACJ,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC;SAC7B,CAAC,CAAC;QAEP,OAAO;YACH,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC;SAC7B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAY;QAC1B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;aAC/D,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;aACvB,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAY,EAAE,KAAU;QAC/B,MAAM,WAAW,GAAG,aAAa,CAAC;QAElC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YAClE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS;YAC/C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;YACjC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;YACxC,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO;YACvC,SAAS,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAES,aAAa,CAAC,GAAQ;QAC5B,OAAO;YACH,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI;YACjC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI;YACzB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;SAC7B,CAAC;IACN,CAAC;IAES,UAAU,CAAC,GAAQ;QACzB,yCAAyC;QACzC,MAAM,IAAI,GAAQ,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,iDAAiD;YACjD,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAlGD,wCAkGC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Job, QueueDriver } from '../Contracts';
|
|
2
|
+
import { Redis, RedisOptions } from 'ioredis';
|
|
3
|
+
export interface RedisQueueConfig {
|
|
4
|
+
driver: 'redis';
|
|
5
|
+
connection?: string;
|
|
6
|
+
queue?: string;
|
|
7
|
+
redisConfig?: string | RedisOptions;
|
|
8
|
+
client?: Redis;
|
|
9
|
+
}
|
|
10
|
+
export declare class RedisDriver implements QueueDriver {
|
|
11
|
+
protected config: RedisQueueConfig;
|
|
12
|
+
protected redis: Redis;
|
|
13
|
+
protected queueName: string;
|
|
14
|
+
constructor(config: RedisQueueConfig);
|
|
15
|
+
push(job: Job, options?: {
|
|
16
|
+
queue?: string;
|
|
17
|
+
delay?: number | Date;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
protected createPayload(job: Job): any;
|
|
20
|
+
protected getJobData(job: any): any;
|
|
21
|
+
protected generateJobId(): string;
|
|
22
|
+
pop(queue?: string): Promise<any>;
|
|
23
|
+
protected migrateDelayedJobs(queue: string): Promise<void>;
|
|
24
|
+
acknowledge(jobData: any): Promise<void>;
|
|
25
|
+
fail(jobData: any, error: any): Promise<void>;
|
|
26
|
+
flush(): Promise<void>;
|
|
27
|
+
close(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=RedisDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,MAAM,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,qBAAa,WAAY,YAAW,WAAW;IAI/B,SAAS,CAAC,MAAM,EAAE,gBAAgB;IAH9C,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEN,MAAM,EAAE,gBAAgB;IAcxC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5F,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAWtC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAQnC,SAAS,CAAC,aAAa,IAAI,MAAM;IAK3B,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;cASvB,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAa1C,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RedisDriver = void 0;
|
|
4
|
+
const ioredis_1 = require("ioredis");
|
|
5
|
+
class RedisDriver {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
this.queueName = config.queue || 'default';
|
|
9
|
+
if (config.client) {
|
|
10
|
+
this.redis = config.client;
|
|
11
|
+
}
|
|
12
|
+
else if (typeof config.redisConfig === 'string') {
|
|
13
|
+
this.redis = new ioredis_1.Redis(config.redisConfig);
|
|
14
|
+
}
|
|
15
|
+
else if (typeof config.redisConfig === 'object') {
|
|
16
|
+
this.redis = new ioredis_1.Redis(config.redisConfig);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.redis = new ioredis_1.Redis(); // defaults to localhost:6379
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async push(job, options = {}) {
|
|
23
|
+
const payload = this.createPayload(job);
|
|
24
|
+
const queue = options.queue || job.queue || this.queueName;
|
|
25
|
+
const json = JSON.stringify(payload);
|
|
26
|
+
if (options.delay) {
|
|
27
|
+
let availableAt = Math.floor(Date.now() / 1000);
|
|
28
|
+
if (options.delay instanceof Date) {
|
|
29
|
+
availableAt = Math.floor(options.delay.getTime() / 1000);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
availableAt += options.delay;
|
|
33
|
+
}
|
|
34
|
+
await this.redis.zadd(`queues:${queue}:delayed`, availableAt, json);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
await this.redis.rpush(`queues:${queue}`, json);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
createPayload(job) {
|
|
41
|
+
return {
|
|
42
|
+
displayName: job.constructor.name,
|
|
43
|
+
job: job.constructor.name,
|
|
44
|
+
data: this.getJobData(job),
|
|
45
|
+
id: this.generateJobId(),
|
|
46
|
+
attempts: 0,
|
|
47
|
+
createdAt: new Date().toISOString()
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
getJobData(job) {
|
|
51
|
+
const data = {};
|
|
52
|
+
for (const key of Object.keys(job)) {
|
|
53
|
+
data[key] = job[key];
|
|
54
|
+
}
|
|
55
|
+
return data;
|
|
56
|
+
}
|
|
57
|
+
generateJobId() {
|
|
58
|
+
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
|
|
59
|
+
}
|
|
60
|
+
// Helper method useful for fetching jobs if Worker implements polling later
|
|
61
|
+
async pop(queue) {
|
|
62
|
+
const queueName = queue || this.queueName;
|
|
63
|
+
// First try to move delayed jobs that are now available
|
|
64
|
+
await this.migrateDelayedJobs(queueName);
|
|
65
|
+
const result = await this.redis.lpop(`queues:${queueName}`);
|
|
66
|
+
return result ? JSON.parse(result) : null;
|
|
67
|
+
}
|
|
68
|
+
async migrateDelayedJobs(queue) {
|
|
69
|
+
const now = Math.floor(Date.now() / 1000);
|
|
70
|
+
const delayedKey = `queues:${queue}:delayed`;
|
|
71
|
+
const jobs = await this.redis.zrangebyscore(delayedKey, 0, now);
|
|
72
|
+
if (jobs.length > 0) {
|
|
73
|
+
await this.redis.zremrangebyscore(delayedKey, 0, now);
|
|
74
|
+
for (const job of jobs) {
|
|
75
|
+
await this.redis.rpush(`queues:${queue}`, job);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async acknowledge(jobData) {
|
|
80
|
+
// Redis lpop already removed the job, but we could implement ack for RPOPPLPUSH if needed
|
|
81
|
+
}
|
|
82
|
+
async fail(jobData, error) {
|
|
83
|
+
const failedKey = `queues:failed`;
|
|
84
|
+
await this.redis.rpush(failedKey, JSON.stringify({
|
|
85
|
+
...jobData,
|
|
86
|
+
exception: error.stack || error.message,
|
|
87
|
+
failedAt: new Date().toISOString()
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
// Helper method to clear for tests
|
|
91
|
+
async flush() {
|
|
92
|
+
await this.redis.del(`queues:${this.queueName}`);
|
|
93
|
+
}
|
|
94
|
+
async close() {
|
|
95
|
+
await this.redis.quit();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.RedisDriver = RedisDriver;
|
|
99
|
+
//# sourceMappingURL=RedisDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisDriver.js","sourceRoot":"","sources":["../../src/Drivers/RedisDriver.ts"],"names":[],"mappings":";;;AACA,qCAA8C;AAU9C,MAAa,WAAW;IAIpB,YAAsB,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;QAC1C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,GAAG,IAAI,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,GAAG,IAAI,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,IAAI,eAAK,EAAE,CAAC,CAAC,6BAA6B;QAC3D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAQ,EAAE,UAAqD,EAAE;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,KAAK,YAAY,IAAI,EAAE,CAAC;gBAChC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACJ,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;YACjC,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAES,aAAa,CAAC,GAAQ;QAC5B,OAAO;YACH,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI;YACjC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI;YACzB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE;YACxB,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACN,CAAC;IAES,UAAU,CAAC,GAAQ;QACzB,MAAM,IAAI,GAAQ,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,aAAa;QACnB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,GAAG,CAAC,KAAc;QACpB,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC;QAC1C,wDAAwD;QACxD,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,KAAa;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAEhE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACtD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAY;QAC1B,0FAA0F;IAC9F,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAY,EAAE,KAAU;QAC/B,MAAM,SAAS,GAAG,eAAe,CAAC;QAClC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;YAC7C,GAAG,OAAO;YACV,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO;YACvC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC,CAAC;IACR,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;CACJ;AAvGD,kCAuGC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Job, QueueDriver } from '../Contracts';
|
|
2
2
|
export declare class SyncDriver implements QueueDriver {
|
|
3
|
-
push(job: Job
|
|
3
|
+
push(job: Job, options?: {
|
|
4
|
+
queue?: string;
|
|
5
|
+
delay?: number | Date;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
pop(queue?: string): Promise<any | null>;
|
|
8
|
+
acknowledge(jobData: any): Promise<void>;
|
|
9
|
+
fail(jobData: any, error: any): Promise<void>;
|
|
4
10
|
}
|
|
5
11
|
//# sourceMappingURL=SyncDriver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/SyncDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,qBAAa,UAAW,YAAW,WAAW;IACpC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SyncDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/SyncDriver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,qBAAa,UAAW,YAAW,WAAW;IACpC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAIxC,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAItD"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SyncDriver = void 0;
|
|
4
4
|
class SyncDriver {
|
|
5
|
-
async push(job) {
|
|
5
|
+
async push(job, options) {
|
|
6
6
|
// Sync driver executes immediately
|
|
7
7
|
try {
|
|
8
8
|
await job.handle();
|
|
@@ -12,6 +12,16 @@ class SyncDriver {
|
|
|
12
12
|
throw error; // Or handle failure policy
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
async pop(queue) {
|
|
16
|
+
return null; // Sync doesn't support popping as it's immediate
|
|
17
|
+
}
|
|
18
|
+
async acknowledge(jobData) {
|
|
19
|
+
// Nothing to do for sync
|
|
20
|
+
}
|
|
21
|
+
async fail(jobData, error) {
|
|
22
|
+
// Log and throw for sync
|
|
23
|
+
console.error('Sync job failed:', error);
|
|
24
|
+
}
|
|
15
25
|
}
|
|
16
26
|
exports.SyncDriver = SyncDriver;
|
|
17
27
|
//# sourceMappingURL=SyncDriver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncDriver.js","sourceRoot":"","sources":["../../src/Drivers/SyncDriver.ts"],"names":[],"mappings":";;;AAGA,MAAa,UAAU;IACnB,KAAK,CAAC,IAAI,CAAC,GAAQ;
|
|
1
|
+
{"version":3,"file":"SyncDriver.js","sourceRoot":"","sources":["../../src/Drivers/SyncDriver.ts"],"names":[],"mappings":";;;AAGA,MAAa,UAAU;IACnB,KAAK,CAAC,IAAI,CAAC,GAAQ,EAAE,OAAmD;QACpE,mCAAmC;QACnC,IAAI,CAAC;YACD,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC,CAAC,2BAA2B;QAC5C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAc;QACpB,OAAO,IAAI,CAAC,CAAC,iDAAiD;IAClE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAY;QAC1B,yBAAyB;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAY,EAAE,KAAU;QAC/B,yBAAyB;QACzB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;CACJ;AAvBD,gCAuBC"}
|
package/dist/Job.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { Job } from './Contracts';
|
|
2
2
|
export declare abstract class BaseJob implements Job {
|
|
3
|
+
connection?: string;
|
|
4
|
+
queue?: string;
|
|
5
|
+
delay?: number | Date;
|
|
6
|
+
tries?: number;
|
|
7
|
+
timeout?: number;
|
|
3
8
|
abstract handle(): Promise<void> | void;
|
|
9
|
+
onConnection(connection: string): this;
|
|
10
|
+
onQueue(queue: string): this;
|
|
11
|
+
onDelay(delay: number | Date): this;
|
|
4
12
|
}
|
|
5
13
|
//# sourceMappingURL=Job.d.ts.map
|
package/dist/Job.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Job.d.ts","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC,8BAAsB,OAAQ,YAAW,GAAG;
|
|
1
|
+
{"version":3,"file":"Job.d.ts","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC,8BAAsB,OAAQ,YAAW,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAEhC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKtC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAI7C"}
|
package/dist/Job.js
CHANGED
|
@@ -3,6 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BaseJob = void 0;
|
|
4
4
|
// Base class for Jobs if users prefer inheritance
|
|
5
5
|
class BaseJob {
|
|
6
|
+
onConnection(connection) {
|
|
7
|
+
this.connection = connection;
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
onQueue(queue) {
|
|
11
|
+
this.queue = queue;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
onDelay(delay) {
|
|
15
|
+
this.delay = delay;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
6
18
|
}
|
|
7
19
|
exports.BaseJob = BaseJob;
|
|
8
20
|
//# sourceMappingURL=Job.js.map
|
package/dist/Job.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Job.js","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":";;;AAGA,kDAAkD;AAClD,MAAsB,OAAO;
|
|
1
|
+
{"version":3,"file":"Job.js","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":";;;AAGA,kDAAkD;AAClD,MAAsB,OAAO;IASlB,YAAY,CAAC,UAAkB;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,KAAa;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,KAAoB;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAvBD,0BAuBC"}
|
package/dist/QueueManager.d.ts
CHANGED
|
@@ -6,6 +6,12 @@ export declare class QueueManager {
|
|
|
6
6
|
constructor(config: any, database?: any);
|
|
7
7
|
driver(name?: string): QueueDriver;
|
|
8
8
|
protected resolve(name: string): QueueDriver;
|
|
9
|
+
push(job: Job, options?: {
|
|
10
|
+
queue?: string;
|
|
11
|
+
delay?: number | Date;
|
|
12
|
+
}, connection?: string): Promise<void>;
|
|
13
|
+
later(delay: number | Date, job: Job, queue?: string, connection?: string): Promise<void>;
|
|
9
14
|
dispatch(job: Job, connection?: string): Promise<void>;
|
|
15
|
+
bulk(jobs: Job[], connection?: string): Promise<void[]>;
|
|
10
16
|
}
|
|
11
17
|
//# sourceMappingURL=QueueManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../src/QueueManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../src/QueueManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,qBAAa,YAAY;IACrB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAM;gBAEV,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG;IAKhC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW;IAUzC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAmB/B,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,UAAU,CAAC,EAAE,MAAM;IAIvF,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAIzE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM;IAOtC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM;CAGrD"}
|
package/dist/QueueManager.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.QueueManager = void 0;
|
|
4
4
|
const SyncDriver_1 = require("./Drivers/SyncDriver");
|
|
5
5
|
const DatabaseDriver_1 = require("./Drivers/DatabaseDriver");
|
|
6
|
+
const RedisDriver_1 = require("./Drivers/RedisDriver");
|
|
6
7
|
class QueueManager {
|
|
7
8
|
constructor(config, database) {
|
|
8
9
|
this.drivers = new Map();
|
|
@@ -25,13 +26,27 @@ class QueueManager {
|
|
|
25
26
|
case 'sync':
|
|
26
27
|
return new SyncDriver_1.SyncDriver();
|
|
27
28
|
case 'database':
|
|
28
|
-
return new DatabaseDriver_1.DatabaseDriver(this.database
|
|
29
|
+
return new DatabaseDriver_1.DatabaseDriver(this.database, config);
|
|
30
|
+
case 'redis':
|
|
31
|
+
return new RedisDriver_1.RedisDriver(config);
|
|
29
32
|
default:
|
|
30
33
|
throw new Error(`Unsupported queue driver [${config.driver}].`);
|
|
31
34
|
}
|
|
32
35
|
}
|
|
36
|
+
async push(job, options, connection) {
|
|
37
|
+
return this.driver(connection || job.connection).push(job, options);
|
|
38
|
+
}
|
|
39
|
+
async later(delay, job, queue, connection) {
|
|
40
|
+
return this.push(job, { delay, queue }, connection);
|
|
41
|
+
}
|
|
33
42
|
async dispatch(job, connection) {
|
|
34
|
-
return this.
|
|
43
|
+
return this.push(job, {
|
|
44
|
+
queue: job.queue,
|
|
45
|
+
delay: job.delay
|
|
46
|
+
}, connection || job.connection);
|
|
47
|
+
}
|
|
48
|
+
async bulk(jobs, connection) {
|
|
49
|
+
return Promise.all(jobs.map(job => this.dispatch(job, connection)));
|
|
35
50
|
}
|
|
36
51
|
}
|
|
37
52
|
exports.QueueManager = QueueManager;
|
package/dist/QueueManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../src/QueueManager.ts"],"names":[],"mappings":";;;AAEA,qDAAkD;AAClD,6DAA0D;
|
|
1
|
+
{"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../src/QueueManager.ts"],"names":[],"mappings":";;;AAEA,qDAAkD;AAClD,6DAA0D;AAC1D,uDAAoD;AAEpD,MAAa,YAAY;IAKrB,YAAY,MAAW,EAAE,QAAc;QAJ/B,YAAO,GAA6B,IAAI,GAAG,EAAE,CAAC;QAKlD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,IAAa;QACvB,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;IACzC,CAAC;IAES,OAAO,CAAC,IAAY;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,mBAAmB,CAAC,CAAC;QAClE,CAAC;QAED,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM;gBACP,OAAO,IAAI,uBAAU,EAAE,CAAC;YAC5B,KAAK,UAAU;gBACX,OAAO,IAAI,+BAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrD,KAAK,OAAO;gBACR,OAAO,IAAI,yBAAW,CAAC,MAAM,CAAC,CAAC;YACnC;gBACI,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAQ,EAAE,OAAmD,EAAE,UAAmB;QAChG,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,KAAoB,EAAE,GAAQ,EAAE,KAAc,EAAE,UAAmB;QAClF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,GAAQ,EAAE,UAAmB;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK;SACnB,EAAE,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAW,EAAE,UAAmB;QAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;CACJ;AAzDD,oCAyDC"}
|
package/dist/Worker.d.ts
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import { Job } from './Contracts';
|
|
2
1
|
export declare class Worker {
|
|
3
2
|
private driver;
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
private options;
|
|
4
|
+
private static jobClasses;
|
|
5
|
+
private isRunning;
|
|
6
|
+
constructor(driver: any, options?: {
|
|
7
|
+
queue?: string;
|
|
8
|
+
sleep?: number;
|
|
9
|
+
});
|
|
10
|
+
static registerJob(name: string, jobClass: any): void;
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
stop(): void;
|
|
13
|
+
process(jobData: any): Promise<void>;
|
|
6
14
|
}
|
|
7
15
|
//# sourceMappingURL=Worker.d.ts.map
|
package/dist/Worker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IAIH,OAAO,CAAC,MAAM;IAAO,OAAO,CAAC,OAAO;IAHhD,OAAO,CAAC,MAAM,CAAC,UAAU,CAA+B;IACxD,OAAO,CAAC,SAAS,CAAiB;gBAEd,MAAM,EAAE,GAAG,EAAU,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO;WAE3E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG;IAIxC,GAAG;IA4BT,IAAI;IAIL,OAAO,CAAC,OAAO,EAAE,GAAG;CAgB7B"}
|
package/dist/Worker.js
CHANGED
|
@@ -2,18 +2,56 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Worker = void 0;
|
|
4
4
|
class Worker {
|
|
5
|
-
constructor(driver) {
|
|
5
|
+
constructor(driver, options = {}) {
|
|
6
6
|
this.driver = driver;
|
|
7
|
-
|
|
7
|
+
this.options = options;
|
|
8
|
+
this.isRunning = true;
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
static registerJob(name, jobClass) {
|
|
11
|
+
this.jobClasses.set(name, jobClass);
|
|
12
|
+
}
|
|
13
|
+
async run() {
|
|
14
|
+
while (this.isRunning) {
|
|
15
|
+
const jobData = await this.driver.pop(this.options.queue || 'default');
|
|
16
|
+
if (jobData) {
|
|
17
|
+
const startTime = Date.now();
|
|
18
|
+
const jobName = jobData.payload.job;
|
|
19
|
+
const dateString = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '');
|
|
20
|
+
console.log(`[\x1b[90m${dateString}\x1b[0m] \x1b[33mProcessing:\x1b[0m ${jobName}`);
|
|
21
|
+
try {
|
|
22
|
+
await this.process(jobData);
|
|
23
|
+
await this.driver.acknowledge(jobData);
|
|
24
|
+
const duration = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
25
|
+
console.log(`[\x1b[90m${dateString}\x1b[0m] \x1b[32mProcessed:\x1b[0m ${jobName} (${duration}s)`);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
await this.driver.fail(jobData, error);
|
|
29
|
+
console.log(`[\x1b[90m${dateString}\x1b[0m] \x1b[31mFailed:\x1b[0m ${jobName}`);
|
|
30
|
+
console.error(`\x1b[31mError: ${error.message}\x1b[0m`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
await new Promise(resolve => setTimeout(resolve, (this.options.sleep || 3) * 1000));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
stop() {
|
|
39
|
+
this.isRunning = false;
|
|
40
|
+
}
|
|
41
|
+
async process(jobData) {
|
|
42
|
+
const jobName = jobData.payload.job;
|
|
43
|
+
const JobClass = Worker.jobClasses.get(jobName);
|
|
44
|
+
if (!JobClass) {
|
|
45
|
+
throw new Error(`Job class [${jobName}] not registered with Worker.`);
|
|
12
46
|
}
|
|
13
|
-
|
|
14
|
-
|
|
47
|
+
const job = new JobClass();
|
|
48
|
+
// Fill job properties from data
|
|
49
|
+
if (jobData.payload.data) {
|
|
50
|
+
Object.assign(job, jobData.payload.data);
|
|
15
51
|
}
|
|
52
|
+
await job.handle();
|
|
16
53
|
}
|
|
17
54
|
}
|
|
18
55
|
exports.Worker = Worker;
|
|
56
|
+
Worker.jobClasses = new Map();
|
|
19
57
|
//# sourceMappingURL=Worker.js.map
|
package/dist/Worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.js","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;
|
|
1
|
+
{"version":3,"file":"Worker.js","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":";;;AAEA,MAAa,MAAM;IAIf,YAAoB,MAAW,EAAU,UAA8C,EAAE;QAArE,WAAM,GAAN,MAAM,CAAK;QAAU,YAAO,GAAP,OAAO,CAAyC;QAFjF,cAAS,GAAY,IAAI,CAAC;IAE2D,CAAC;IAEvF,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,QAAa;QACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,GAAG;QACZ,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;YAEvE,IAAI,OAAO,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;gBACpC,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAElF,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,uCAAuC,OAAO,EAAE,CAAC,CAAC;gBAEpF,IAAI,CAAC;oBACD,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAEvC,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC9D,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,uCAAuC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC;gBACvG,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,uCAAuC,OAAO,EAAE,CAAC,CAAC;oBACpF,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;gBAC5D,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACxF,CAAC;QACL,CAAC;IACL,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAY;QACtB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,cAAc,OAAO,+BAA+B,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,gCAAgC;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;;AAzDL,wBA0DC;AAzDkB,iBAAU,GAAqB,IAAI,GAAG,EAAE,AAA9B,CAA+B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { QueueManager } from './QueueManager';
|
|
2
2
|
import { Job } from './Contracts';
|
|
3
|
+
import { Worker } from './Worker';
|
|
3
4
|
export declare let queueManager: QueueManager;
|
|
4
5
|
export declare class Queue {
|
|
5
6
|
static setManager(manager: QueueManager): void;
|
|
7
|
+
static connection(name: string): {
|
|
8
|
+
push: (job: Job) => Promise<void>;
|
|
9
|
+
later: (delay: number | Date, job: Job) => Promise<void>;
|
|
10
|
+
};
|
|
6
11
|
static dispatch(job: Job): Promise<void>;
|
|
12
|
+
static push(job: Job): Promise<void>;
|
|
13
|
+
static later(delay: number | Date, job: Job): Promise<void>;
|
|
14
|
+
static bulk(jobs: Job[]): Promise<void[]>;
|
|
7
15
|
}
|
|
8
|
-
export { QueueManager, Job };
|
|
16
|
+
export { QueueManager, Job, Worker };
|
|
9
17
|
export { BaseJob } from './Job';
|
|
18
|
+
export { RedisDriver } from './Drivers/RedisDriver';
|
|
10
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,IAAI,YAAY,EAAE,YAAY,CAAC;AAEtC,qBAAa,KAAK;IACd,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY;IAIvC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM;oBAEV,GAAG;uBACA,MAAM,GAAG,IAAI,OAAO,GAAG;;WAIjC,QAAQ,CAAC,GAAG,EAAE,GAAG;WAOjB,IAAI,CAAC,GAAG,EAAE,GAAG;WAIb,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;WAIpC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;CAGhC;AAED,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,20 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaseJob = exports.QueueManager = exports.Queue = exports.queueManager = void 0;
|
|
3
|
+
exports.RedisDriver = exports.BaseJob = exports.Worker = exports.QueueManager = exports.Queue = exports.queueManager = void 0;
|
|
4
4
|
const QueueManager_1 = require("./QueueManager");
|
|
5
5
|
Object.defineProperty(exports, "QueueManager", { enumerable: true, get: function () { return QueueManager_1.QueueManager; } });
|
|
6
|
+
const Worker_1 = require("./Worker");
|
|
7
|
+
Object.defineProperty(exports, "Worker", { enumerable: true, get: function () { return Worker_1.Worker; } });
|
|
6
8
|
class Queue {
|
|
7
9
|
static setManager(manager) {
|
|
8
10
|
exports.queueManager = manager;
|
|
9
11
|
}
|
|
12
|
+
static connection(name) {
|
|
13
|
+
return {
|
|
14
|
+
push: (job) => exports.queueManager.push(job, {}, name),
|
|
15
|
+
later: (delay, job) => exports.queueManager.later(delay, job, undefined, name),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
10
18
|
static async dispatch(job) {
|
|
11
19
|
if (!exports.queueManager) {
|
|
12
20
|
throw new Error('Queue not configured. Please use Queue.setManager().');
|
|
13
21
|
}
|
|
14
22
|
return exports.queueManager.dispatch(job);
|
|
15
23
|
}
|
|
24
|
+
static async push(job) {
|
|
25
|
+
return exports.queueManager.push(job);
|
|
26
|
+
}
|
|
27
|
+
static async later(delay, job) {
|
|
28
|
+
return exports.queueManager.later(delay, job);
|
|
29
|
+
}
|
|
30
|
+
static async bulk(jobs) {
|
|
31
|
+
return exports.queueManager.bulk(jobs);
|
|
32
|
+
}
|
|
16
33
|
}
|
|
17
34
|
exports.Queue = Queue;
|
|
18
35
|
var Job_1 = require("./Job");
|
|
19
36
|
Object.defineProperty(exports, "BaseJob", { enumerable: true, get: function () { return Job_1.BaseJob; } });
|
|
37
|
+
var RedisDriver_1 = require("./Drivers/RedisDriver");
|
|
38
|
+
Object.defineProperty(exports, "RedisDriver", { enumerable: true, get: function () { return RedisDriver_1.RedisDriver; } });
|
|
20
39
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,iDAA8C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAsCrC,6FAtCA,2BAAY,OAsCA;AApCrB,qCAAkC;AAoCN,uFApCnB,eAAM,OAoCmB;AAhClC,MAAa,KAAK;IACd,MAAM,CAAC,UAAU,CAAC,OAAqB;QACnC,oBAAY,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAY;QAC1B,OAAO;YACH,IAAI,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,oBAAY,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;YACpD,KAAK,EAAE,CAAC,KAAoB,EAAE,GAAQ,EAAE,EAAE,CAAC,oBAAY,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC;SAC7F,CAAC;IACN,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAQ;QAC1B,IAAI,CAAC,oBAAY,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,oBAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAQ;QACtB,OAAO,oBAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAoB,EAAE,GAAQ;QAC7C,OAAO,oBAAY,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAW;QACzB,OAAO,oBAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACJ;AA9BD,sBA8BC;AAGD,6BAAgC;AAAvB,8FAAA,OAAO,OAAA;AAChB,qDAAoD;AAA3C,0GAAA,WAAW,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arikajs/queue",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Asynchronous job processing for the ArikaJS framework.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
"build:tests": "tsc -p tsconfig.test.json",
|
|
11
11
|
"clean": "rm -rf dist",
|
|
12
12
|
"prepare": "echo skip",
|
|
13
|
-
"test": "
|
|
14
|
-
"test:watch": "
|
|
13
|
+
"test": "npx tsx --test tests/**/*.test.ts",
|
|
14
|
+
"test:watch": "npx tsx --test --watch tests/**/*.test.ts",
|
|
15
|
+
"dev": "tsc -p tsconfig.json --watch"
|
|
15
16
|
},
|
|
16
17
|
"files": [
|
|
17
18
|
"dist"
|
|
@@ -30,13 +31,16 @@
|
|
|
30
31
|
},
|
|
31
32
|
"repository": {
|
|
32
33
|
"type": "git",
|
|
33
|
-
"url": "git+https://github.com/arikajs
|
|
34
|
+
"url": "git+https://github.com/ArikaJs/arikajs.git",
|
|
35
|
+
"directory": "packages/queue"
|
|
34
36
|
},
|
|
35
37
|
"bugs": {
|
|
36
|
-
"url": "https://github.com/arikajs/
|
|
38
|
+
"url": "https://github.com/ArikaJs/arikajs/issues"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/ArikaJs/arikajs/tree/main/packages/queue#readme",
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"ioredis": "^5.9.3"
|
|
37
43
|
},
|
|
38
|
-
"homepage": "https://github.com/arikajs/queue#readme",
|
|
39
|
-
"dependencies": {},
|
|
40
44
|
"devDependencies": {
|
|
41
45
|
"@types/node": "^20.11.24",
|
|
42
46
|
"typescript": "^5.3.3"
|