@orchestr-sh/orchestr 1.7.4 → 1.8.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.
- package/dist/Console/Commands/MakeJobCommand.d.ts +20 -0
- package/dist/Console/Commands/MakeJobCommand.d.ts.map +1 -0
- package/dist/Console/Commands/MakeJobCommand.js +165 -0
- package/dist/Console/Commands/MakeJobCommand.js.map +1 -0
- package/dist/Console/Commands/QueueBatchesTableCommand.d.ts +17 -0
- package/dist/Console/Commands/QueueBatchesTableCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueBatchesTableCommand.js +92 -0
- package/dist/Console/Commands/QueueBatchesTableCommand.js.map +1 -0
- package/dist/Console/Commands/QueueClearCommand.d.ts +16 -0
- package/dist/Console/Commands/QueueClearCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueClearCommand.js +29 -0
- package/dist/Console/Commands/QueueClearCommand.js.map +1 -0
- package/dist/Console/Commands/QueueFailedCommand.d.ts +18 -0
- package/dist/Console/Commands/QueueFailedCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueFailedCommand.js +76 -0
- package/dist/Console/Commands/QueueFailedCommand.js.map +1 -0
- package/dist/Console/Commands/QueueFailedTableCommand.d.ts +17 -0
- package/dist/Console/Commands/QueueFailedTableCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueFailedTableCommand.js +89 -0
- package/dist/Console/Commands/QueueFailedTableCommand.js.map +1 -0
- package/dist/Console/Commands/QueueFlushCommand.d.ts +18 -0
- package/dist/Console/Commands/QueueFlushCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueFlushCommand.js +44 -0
- package/dist/Console/Commands/QueueFlushCommand.js.map +1 -0
- package/dist/Console/Commands/QueueForgetCommand.d.ts +18 -0
- package/dist/Console/Commands/QueueForgetCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueForgetCommand.js +48 -0
- package/dist/Console/Commands/QueueForgetCommand.js.map +1 -0
- package/dist/Console/Commands/QueueMonitorCommand.d.ts +16 -0
- package/dist/Console/Commands/QueueMonitorCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueMonitorCommand.js +42 -0
- package/dist/Console/Commands/QueueMonitorCommand.js.map +1 -0
- package/dist/Console/Commands/QueuePruneBatchesCommand.d.ts +16 -0
- package/dist/Console/Commands/QueuePruneBatchesCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueuePruneBatchesCommand.js +44 -0
- package/dist/Console/Commands/QueuePruneBatchesCommand.js.map +1 -0
- package/dist/Console/Commands/QueuePruneFailedCommand.d.ts +18 -0
- package/dist/Console/Commands/QueuePruneFailedCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueuePruneFailedCommand.js +39 -0
- package/dist/Console/Commands/QueuePruneFailedCommand.js.map +1 -0
- package/dist/Console/Commands/QueueRestartCommand.d.ts +16 -0
- package/dist/Console/Commands/QueueRestartCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueRestartCommand.js +34 -0
- package/dist/Console/Commands/QueueRestartCommand.js.map +1 -0
- package/dist/Console/Commands/QueueRetryCommand.d.ts +20 -0
- package/dist/Console/Commands/QueueRetryCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueRetryCommand.js +77 -0
- package/dist/Console/Commands/QueueRetryCommand.js.map +1 -0
- package/dist/Console/Commands/QueueTableCommand.d.ts +17 -0
- package/dist/Console/Commands/QueueTableCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueTableCommand.js +89 -0
- package/dist/Console/Commands/QueueTableCommand.js.map +1 -0
- package/dist/Console/Commands/QueueWorkCommand.d.ts +16 -0
- package/dist/Console/Commands/QueueWorkCommand.d.ts.map +1 -0
- package/dist/Console/Commands/QueueWorkCommand.js +51 -0
- package/dist/Console/Commands/QueueWorkCommand.js.map +1 -0
- package/dist/Facades/Bus.d.ts +62 -0
- package/dist/Facades/Bus.d.ts.map +1 -0
- package/dist/Facades/Bus.js +102 -0
- package/dist/Facades/Bus.js.map +1 -0
- package/dist/Facades/Queue.d.ts +42 -0
- package/dist/Facades/Queue.d.ts.map +1 -0
- package/dist/Facades/Queue.js +71 -0
- package/dist/Facades/Queue.js.map +1 -0
- package/dist/Facades/index.d.ts +2 -0
- package/dist/Facades/index.d.ts.map +1 -1
- package/dist/Facades/index.js +5 -1
- package/dist/Facades/index.js.map +1 -1
- package/dist/Queue/Batching/Batch.d.ts +86 -0
- package/dist/Queue/Batching/Batch.d.ts.map +1 -0
- package/dist/Queue/Batching/Batch.js +170 -0
- package/dist/Queue/Batching/Batch.js.map +1 -0
- package/dist/Queue/Batching/PendingBatch.d.ts +72 -0
- package/dist/Queue/Batching/PendingBatch.d.ts.map +1 -0
- package/dist/Queue/Batching/PendingBatch.js +122 -0
- package/dist/Queue/Batching/PendingBatch.js.map +1 -0
- package/dist/Queue/Batching/index.d.ts +3 -0
- package/dist/Queue/Batching/index.d.ts.map +1 -0
- package/dist/Queue/Batching/index.js +8 -0
- package/dist/Queue/Batching/index.js.map +1 -0
- package/dist/Queue/Concerns/Dispatchable.d.ts +36 -0
- package/dist/Queue/Concerns/Dispatchable.d.ts.map +1 -0
- package/dist/Queue/Concerns/Dispatchable.js +102 -0
- package/dist/Queue/Concerns/Dispatchable.js.map +1 -0
- package/dist/Queue/Contracts/QueueDriver.d.ts +67 -0
- package/dist/Queue/Contracts/QueueDriver.d.ts.map +1 -0
- package/dist/Queue/Contracts/QueueDriver.js +9 -0
- package/dist/Queue/Contracts/QueueDriver.js.map +1 -0
- package/dist/Queue/Contracts/QueueableJob.d.ts +74 -0
- package/dist/Queue/Contracts/QueueableJob.d.ts.map +1 -0
- package/dist/Queue/Contracts/QueueableJob.js +9 -0
- package/dist/Queue/Contracts/QueueableJob.js.map +1 -0
- package/dist/Queue/Contracts/ShouldBeUnique.d.ts +43 -0
- package/dist/Queue/Contracts/ShouldBeUnique.d.ts.map +1 -0
- package/dist/Queue/Contracts/ShouldBeUnique.js +12 -0
- package/dist/Queue/Contracts/ShouldBeUnique.js.map +1 -0
- package/dist/Queue/Drivers/DatabaseDriver.d.ts +39 -0
- package/dist/Queue/Drivers/DatabaseDriver.d.ts.map +1 -0
- package/dist/Queue/Drivers/DatabaseDriver.js +176 -0
- package/dist/Queue/Drivers/DatabaseDriver.js.map +1 -0
- package/dist/Queue/Drivers/NullDriver.d.ts +30 -0
- package/dist/Queue/Drivers/NullDriver.d.ts.map +1 -0
- package/dist/Queue/Drivers/NullDriver.js +57 -0
- package/dist/Queue/Drivers/NullDriver.js.map +1 -0
- package/dist/Queue/Drivers/SyncDriver.d.ts +29 -0
- package/dist/Queue/Drivers/SyncDriver.d.ts.map +1 -0
- package/dist/Queue/Drivers/SyncDriver.js +67 -0
- package/dist/Queue/Drivers/SyncDriver.js.map +1 -0
- package/dist/Queue/Drivers/index.d.ts +4 -0
- package/dist/Queue/Drivers/index.d.ts.map +1 -0
- package/dist/Queue/Drivers/index.js +10 -0
- package/dist/Queue/Drivers/index.js.map +1 -0
- package/dist/Queue/Events/JobExceptionOccurred.d.ts +13 -0
- package/dist/Queue/Events/JobExceptionOccurred.d.ts.map +1 -0
- package/dist/Queue/Events/JobExceptionOccurred.js +20 -0
- package/dist/Queue/Events/JobExceptionOccurred.js.map +1 -0
- package/dist/Queue/Events/JobFailed.d.ts +13 -0
- package/dist/Queue/Events/JobFailed.d.ts.map +1 -0
- package/dist/Queue/Events/JobFailed.js +20 -0
- package/dist/Queue/Events/JobFailed.js.map +1 -0
- package/dist/Queue/Events/JobProcessed.d.ts +12 -0
- package/dist/Queue/Events/JobProcessed.d.ts.map +1 -0
- package/dist/Queue/Events/JobProcessed.js +18 -0
- package/dist/Queue/Events/JobProcessed.js.map +1 -0
- package/dist/Queue/Events/JobProcessing.d.ts +12 -0
- package/dist/Queue/Events/JobProcessing.d.ts.map +1 -0
- package/dist/Queue/Events/JobProcessing.js +18 -0
- package/dist/Queue/Events/JobProcessing.js.map +1 -0
- package/dist/Queue/Events/JobQueued.d.ts +14 -0
- package/dist/Queue/Events/JobQueued.d.ts.map +1 -0
- package/dist/Queue/Events/JobQueued.js +22 -0
- package/dist/Queue/Events/JobQueued.js.map +1 -0
- package/dist/Queue/Events/JobRetryRequested.d.ts +12 -0
- package/dist/Queue/Events/JobRetryRequested.d.ts.map +1 -0
- package/dist/Queue/Events/JobRetryRequested.js +20 -0
- package/dist/Queue/Events/JobRetryRequested.js.map +1 -0
- package/dist/Queue/Events/WorkerStopping.d.ts +11 -0
- package/dist/Queue/Events/WorkerStopping.d.ts.map +1 -0
- package/dist/Queue/Events/WorkerStopping.js +18 -0
- package/dist/Queue/Events/WorkerStopping.js.map +1 -0
- package/dist/Queue/Events/index.d.ts +8 -0
- package/dist/Queue/Events/index.d.ts.map +1 -0
- package/dist/Queue/Events/index.js +18 -0
- package/dist/Queue/Events/index.js.map +1 -0
- package/dist/Queue/Failed/DatabaseFailedJobProvider.d.ts +33 -0
- package/dist/Queue/Failed/DatabaseFailedJobProvider.d.ts.map +1 -0
- package/dist/Queue/Failed/DatabaseFailedJobProvider.js +100 -0
- package/dist/Queue/Failed/DatabaseFailedJobProvider.js.map +1 -0
- package/dist/Queue/Failed/FailedJobProvider.d.ts +42 -0
- package/dist/Queue/Failed/FailedJobProvider.d.ts.map +1 -0
- package/dist/Queue/Failed/FailedJobProvider.js +9 -0
- package/dist/Queue/Failed/FailedJobProvider.js.map +1 -0
- package/dist/Queue/Job.d.ts +194 -0
- package/dist/Queue/Job.d.ts.map +1 -0
- package/dist/Queue/Job.js +286 -0
- package/dist/Queue/Job.js.map +1 -0
- package/dist/Queue/JobPayload.d.ts +37 -0
- package/dist/Queue/JobPayload.d.ts.map +1 -0
- package/dist/Queue/JobPayload.js +46 -0
- package/dist/Queue/JobPayload.js.map +1 -0
- package/dist/Queue/Middleware/JobMiddleware.d.ts +29 -0
- package/dist/Queue/Middleware/JobMiddleware.d.ts.map +1 -0
- package/dist/Queue/Middleware/JobMiddleware.js +21 -0
- package/dist/Queue/Middleware/JobMiddleware.js.map +1 -0
- package/dist/Queue/Middleware/RateLimited.d.ts +56 -0
- package/dist/Queue/Middleware/RateLimited.d.ts.map +1 -0
- package/dist/Queue/Middleware/RateLimited.js +83 -0
- package/dist/Queue/Middleware/RateLimited.js.map +1 -0
- package/dist/Queue/Middleware/ThrottlesExceptions.d.ts +71 -0
- package/dist/Queue/Middleware/ThrottlesExceptions.d.ts.map +1 -0
- package/dist/Queue/Middleware/ThrottlesExceptions.js +119 -0
- package/dist/Queue/Middleware/ThrottlesExceptions.js.map +1 -0
- package/dist/Queue/Middleware/WithoutOverlapping.d.ts +64 -0
- package/dist/Queue/Middleware/WithoutOverlapping.d.ts.map +1 -0
- package/dist/Queue/Middleware/WithoutOverlapping.js +103 -0
- package/dist/Queue/Middleware/WithoutOverlapping.js.map +1 -0
- package/dist/Queue/Middleware/index.d.ts +5 -0
- package/dist/Queue/Middleware/index.d.ts.map +1 -0
- package/dist/Queue/Middleware/index.js +10 -0
- package/dist/Queue/Middleware/index.js.map +1 -0
- package/dist/Queue/PendingChain.d.ts +63 -0
- package/dist/Queue/PendingChain.d.ts.map +1 -0
- package/dist/Queue/PendingChain.js +111 -0
- package/dist/Queue/PendingChain.js.map +1 -0
- package/dist/Queue/PendingDispatch.d.ts +66 -0
- package/dist/Queue/PendingDispatch.d.ts.map +1 -0
- package/dist/Queue/PendingDispatch.js +101 -0
- package/dist/Queue/PendingDispatch.js.map +1 -0
- package/dist/Queue/QueueManager.d.ts +151 -0
- package/dist/Queue/QueueManager.d.ts.map +1 -0
- package/dist/Queue/QueueManager.js +227 -0
- package/dist/Queue/QueueManager.js.map +1 -0
- package/dist/Queue/QueueServiceProvider.d.ts +19 -0
- package/dist/Queue/QueueServiceProvider.d.ts.map +1 -0
- package/dist/Queue/QueueServiceProvider.js +75 -0
- package/dist/Queue/QueueServiceProvider.js.map +1 -0
- package/dist/Queue/Workers/Worker.d.ts +99 -0
- package/dist/Queue/Workers/Worker.d.ts.map +1 -0
- package/dist/Queue/Workers/Worker.js +324 -0
- package/dist/Queue/Workers/Worker.js.map +1 -0
- package/dist/Queue/Workers/WorkerOptions.d.ts +62 -0
- package/dist/Queue/Workers/WorkerOptions.d.ts.map +1 -0
- package/dist/Queue/Workers/WorkerOptions.js +23 -0
- package/dist/Queue/Workers/WorkerOptions.js.map +1 -0
- package/dist/Queue/index.d.ts +41 -0
- package/dist/Queue/index.d.ts.map +1 -0
- package/dist/Queue/index.js +67 -0
- package/dist/Queue/index.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* QueueWorkCommand
|
|
4
|
+
*
|
|
5
|
+
* Start processing jobs on the queue as a daemon.
|
|
6
|
+
* Mirrors Laravel's `php artisan queue:work`.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.QueueWorkCommand = void 0;
|
|
10
|
+
const Command_1 = require("../Command");
|
|
11
|
+
class QueueWorkCommand extends Command_1.Command {
|
|
12
|
+
app;
|
|
13
|
+
signature = 'queue:work [connection]';
|
|
14
|
+
description = 'Start processing jobs on the queue as a daemon';
|
|
15
|
+
constructor(app) {
|
|
16
|
+
super();
|
|
17
|
+
this.app = app;
|
|
18
|
+
}
|
|
19
|
+
async handle(args, options) {
|
|
20
|
+
const manager = this.app.make('queue');
|
|
21
|
+
const worker = this.app.make('queue.worker');
|
|
22
|
+
const connection = args[0] || manager.getDefaultConnection();
|
|
23
|
+
const queues = options.queue || 'default';
|
|
24
|
+
const once = options.once === true || options.once === 'true';
|
|
25
|
+
this.info(`[${new Date().toISOString()}] Processing jobs from the [${queues}] queue(s) on [${connection}] connection.`);
|
|
26
|
+
const workerOptions = {
|
|
27
|
+
name: options.name || 'default',
|
|
28
|
+
sleep: Number(options.sleep) || 3,
|
|
29
|
+
tries: Number(options.tries) || 1,
|
|
30
|
+
timeout: Number(options.timeout) || 60,
|
|
31
|
+
memory: Number(options.memory) || 128,
|
|
32
|
+
maxJobs: Number(options['max-jobs']) || 0,
|
|
33
|
+
maxTime: Number(options['max-time']) || 0,
|
|
34
|
+
force: options.force === true || options.force === 'true',
|
|
35
|
+
stopWhenEmpty: options['stop-when-empty'] === true || options['stop-when-empty'] === 'true',
|
|
36
|
+
backoff: Number(options.backoff) || 0,
|
|
37
|
+
rest: Number(options.rest) || 0,
|
|
38
|
+
};
|
|
39
|
+
if (once) {
|
|
40
|
+
const processed = await worker.runOnce(connection, queues, workerOptions);
|
|
41
|
+
if (!processed) {
|
|
42
|
+
this.comment('No jobs available.');
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await worker.daemon(connection, queues, workerOptions);
|
|
47
|
+
this.info('Worker stopped.');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.QueueWorkCommand = QueueWorkCommand;
|
|
51
|
+
//# sourceMappingURL=QueueWorkCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueueWorkCommand.js","sourceRoot":"","sources":["../../../src/Console/Commands/QueueWorkCommand.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,wCAAqD;AAKrD,MAAa,gBAAiB,SAAQ,iBAAO;IAIrB;IAHtB,SAAS,GAAG,yBAAyB,CAAC;IACtC,WAAW,GAAG,gDAAgD,CAAC;IAE/D,YAAsB,GAAgB;QACpC,KAAK,EAAE,CAAC;QADY,QAAG,GAAH,GAAG,CAAa;IAEtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAc,EAAE,OAAuB;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAe,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAS,cAAc,CAAC,CAAC;QAErD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAI,OAAO,CAAC,KAAgB,IAAI,SAAS,CAAC;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;QAE9D,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,+BAA+B,MAAM,kBAAkB,UAAU,eAAe,CAAC,CAAC;QAExH,MAAM,aAAa,GAAG;YACpB,IAAI,EAAG,OAAO,CAAC,IAAe,IAAI,SAAS;YAC3C,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;YACtC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG;YACrC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YACzC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;YACzD,aAAa,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,MAAM;YAC3F,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACrC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;SAChC,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAC1E,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACrC,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;CACF;AA3CD,4CA2CC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bus Facade
|
|
3
|
+
*
|
|
4
|
+
* Provides static access to the command bus for dispatching jobs,
|
|
5
|
+
* chains, and batches.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Dispatch a job
|
|
10
|
+
* await Bus.dispatch(new ProcessPodcast(podcastId));
|
|
11
|
+
*
|
|
12
|
+
* // Dispatch synchronously
|
|
13
|
+
* await Bus.dispatchSync(new ProcessPodcast(podcastId));
|
|
14
|
+
*
|
|
15
|
+
* // Chain jobs
|
|
16
|
+
* await Bus.chain([
|
|
17
|
+
* new ProcessPodcast(id),
|
|
18
|
+
* new OptimizePodcast(id),
|
|
19
|
+
* new ReleasePodcast(id),
|
|
20
|
+
* ]).dispatch();
|
|
21
|
+
*
|
|
22
|
+
* // Batch jobs
|
|
23
|
+
* const batch = await Bus.batch([
|
|
24
|
+
* new ProcessPodcast(1),
|
|
25
|
+
* new ProcessPodcast(2),
|
|
26
|
+
* ])
|
|
27
|
+
* .then((batch) => console.log('Done'))
|
|
28
|
+
* .catch((batch, error) => console.error('Failed'))
|
|
29
|
+
* .dispatch();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import { Facade } from '../Support/Facade';
|
|
33
|
+
import type { QueueManager } from '../Queue/QueueManager';
|
|
34
|
+
import type { Job } from '../Queue/Job';
|
|
35
|
+
import { PendingChain } from '../Queue/PendingChain';
|
|
36
|
+
import { PendingBatch } from '../Queue/Batching/PendingBatch';
|
|
37
|
+
declare class BusFacadeClass extends Facade {
|
|
38
|
+
protected static getFacadeAccessor(): string;
|
|
39
|
+
/**
|
|
40
|
+
* Dispatch a job to the queue
|
|
41
|
+
*/
|
|
42
|
+
static dispatch(job: Job): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Dispatch a job synchronously
|
|
45
|
+
*/
|
|
46
|
+
static dispatchSync(job: Job): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Dispatch a job immediately (alias for dispatchSync)
|
|
49
|
+
*/
|
|
50
|
+
static dispatchNow(job: Job): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Create a new chain of queueable jobs
|
|
53
|
+
*/
|
|
54
|
+
static chain(jobs: Job[]): PendingChain;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new batch of queueable jobs
|
|
57
|
+
*/
|
|
58
|
+
static batch(jobs: Job[]): PendingBatch;
|
|
59
|
+
}
|
|
60
|
+
export declare const Bus: typeof BusFacadeClass & QueueManager;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=Bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bus.d.ts","sourceRoot":"","sources":["../../src/Facades/Bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,cAAM,cAAe,SAAQ,MAAM;IACjC,SAAS,CAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM;IAI5C;;OAEG;WACU,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhD;;OAEG;WACU,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD;;OAEG;WACU,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY;IAKvC;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY;CAIxC;AAED,eAAO,MAAM,GAAG,EAyBC,OAAO,cAAc,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Bus Facade
|
|
4
|
+
*
|
|
5
|
+
* Provides static access to the command bus for dispatching jobs,
|
|
6
|
+
* chains, and batches.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Dispatch a job
|
|
11
|
+
* await Bus.dispatch(new ProcessPodcast(podcastId));
|
|
12
|
+
*
|
|
13
|
+
* // Dispatch synchronously
|
|
14
|
+
* await Bus.dispatchSync(new ProcessPodcast(podcastId));
|
|
15
|
+
*
|
|
16
|
+
* // Chain jobs
|
|
17
|
+
* await Bus.chain([
|
|
18
|
+
* new ProcessPodcast(id),
|
|
19
|
+
* new OptimizePodcast(id),
|
|
20
|
+
* new ReleasePodcast(id),
|
|
21
|
+
* ]).dispatch();
|
|
22
|
+
*
|
|
23
|
+
* // Batch jobs
|
|
24
|
+
* const batch = await Bus.batch([
|
|
25
|
+
* new ProcessPodcast(1),
|
|
26
|
+
* new ProcessPodcast(2),
|
|
27
|
+
* ])
|
|
28
|
+
* .then((batch) => console.log('Done'))
|
|
29
|
+
* .catch((batch, error) => console.error('Failed'))
|
|
30
|
+
* .dispatch();
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.Bus = void 0;
|
|
35
|
+
const Facade_1 = require("../Support/Facade");
|
|
36
|
+
const PendingChain_1 = require("../Queue/PendingChain");
|
|
37
|
+
const PendingBatch_1 = require("../Queue/Batching/PendingBatch");
|
|
38
|
+
class BusFacadeClass extends Facade_1.Facade {
|
|
39
|
+
static getFacadeAccessor() {
|
|
40
|
+
return 'queue';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Dispatch a job to the queue
|
|
44
|
+
*/
|
|
45
|
+
static async dispatch(job) {
|
|
46
|
+
const manager = this.getFacadeRoot();
|
|
47
|
+
return manager.dispatch(job);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Dispatch a job synchronously
|
|
51
|
+
*/
|
|
52
|
+
static async dispatchSync(job) {
|
|
53
|
+
const manager = this.getFacadeRoot();
|
|
54
|
+
return manager.dispatchSync(job);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Dispatch a job immediately (alias for dispatchSync)
|
|
58
|
+
*/
|
|
59
|
+
static async dispatchNow(job) {
|
|
60
|
+
return this.dispatchSync(job);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Create a new chain of queueable jobs
|
|
64
|
+
*/
|
|
65
|
+
static chain(jobs) {
|
|
66
|
+
const manager = this.getFacadeRoot();
|
|
67
|
+
return new PendingChain_1.PendingChain(manager, jobs);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a new batch of queueable jobs
|
|
71
|
+
*/
|
|
72
|
+
static batch(jobs) {
|
|
73
|
+
const app = this.getFacadeApplication();
|
|
74
|
+
return new PendingBatch_1.PendingBatch(app, jobs);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.Bus = new Proxy(BusFacadeClass, {
|
|
78
|
+
get(target, prop) {
|
|
79
|
+
if (prop in target) {
|
|
80
|
+
const value = target[prop];
|
|
81
|
+
if (typeof value === 'function') {
|
|
82
|
+
return value.bind(target);
|
|
83
|
+
}
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const root = target.getFacadeRoot();
|
|
88
|
+
if (root && prop in root) {
|
|
89
|
+
const value = root[prop];
|
|
90
|
+
if (typeof value === 'function') {
|
|
91
|
+
return (...args) => value.apply(root, args);
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// Facade root not available yet
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=Bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bus.js","sourceRoot":"","sources":["../../src/Facades/Bus.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;AAEH,8CAA2C;AAG3C,wDAAqD;AACrD,iEAA8D;AAE9D,MAAM,cAAe,SAAQ,eAAM;IACvB,MAAM,CAAC,iBAAiB;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAQ;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAkB,CAAC;QACrD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAQ;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAkB,CAAC;QACrD,OAAO,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAQ;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAW;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAkB,CAAC;QACrD,OAAO,IAAI,2BAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAW;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxC,OAAO,IAAI,2BAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;CACF;AAEY,QAAA,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE;IAC3C,GAAG,CAAC,MAAM,EAAE,IAAI;QACd,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,MAAM,KAAK,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAI,MAAc,CAAC,aAAa,EAAkB,CAAC;YAC7D,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAI,IAAY,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gCAAgC;QAClC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAoD,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue Facade
|
|
3
|
+
*
|
|
4
|
+
* Provides static access to the queue manager for dispatching
|
|
5
|
+
* and managing queued jobs.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Push a job onto the queue
|
|
10
|
+
* await Queue.push(new ProcessPodcast(podcastId));
|
|
11
|
+
*
|
|
12
|
+
* // Push onto a specific queue
|
|
13
|
+
* await Queue.pushOn('high-priority', new ProcessPodcast(podcastId));
|
|
14
|
+
*
|
|
15
|
+
* // Push with a delay
|
|
16
|
+
* await Queue.later(60, new ProcessPodcast(podcastId));
|
|
17
|
+
*
|
|
18
|
+
* // Get queue size
|
|
19
|
+
* const size = await Queue.size();
|
|
20
|
+
*
|
|
21
|
+
* // Event hooks
|
|
22
|
+
* Queue.before((connectionName, job) => {
|
|
23
|
+
* console.log('Processing:', job.displayName());
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* Queue.after((connectionName, job) => {
|
|
27
|
+
* console.log('Processed:', job.displayName());
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* Queue.failing((connectionName, job, error) => {
|
|
31
|
+
* console.error('Failed:', job.displayName(), error);
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
import { Facade } from '../Support/Facade';
|
|
36
|
+
import type { QueueManager } from '../Queue/QueueManager';
|
|
37
|
+
declare class QueueFacadeClass extends Facade {
|
|
38
|
+
protected static getFacadeAccessor(): string;
|
|
39
|
+
}
|
|
40
|
+
export declare const Queue: typeof QueueFacadeClass & QueueManager;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=Queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../src/Facades/Queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,cAAM,gBAAiB,SAAQ,MAAM;IACnC,SAAS,CAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM;CAG7C;AAED,eAAO,MAAM,KAAK,EA2BD,OAAO,gBAAgB,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Queue Facade
|
|
4
|
+
*
|
|
5
|
+
* Provides static access to the queue manager for dispatching
|
|
6
|
+
* and managing queued jobs.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Push a job onto the queue
|
|
11
|
+
* await Queue.push(new ProcessPodcast(podcastId));
|
|
12
|
+
*
|
|
13
|
+
* // Push onto a specific queue
|
|
14
|
+
* await Queue.pushOn('high-priority', new ProcessPodcast(podcastId));
|
|
15
|
+
*
|
|
16
|
+
* // Push with a delay
|
|
17
|
+
* await Queue.later(60, new ProcessPodcast(podcastId));
|
|
18
|
+
*
|
|
19
|
+
* // Get queue size
|
|
20
|
+
* const size = await Queue.size();
|
|
21
|
+
*
|
|
22
|
+
* // Event hooks
|
|
23
|
+
* Queue.before((connectionName, job) => {
|
|
24
|
+
* console.log('Processing:', job.displayName());
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* Queue.after((connectionName, job) => {
|
|
28
|
+
* console.log('Processed:', job.displayName());
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* Queue.failing((connectionName, job, error) => {
|
|
32
|
+
* console.error('Failed:', job.displayName(), error);
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.Queue = void 0;
|
|
38
|
+
const Facade_1 = require("../Support/Facade");
|
|
39
|
+
class QueueFacadeClass extends Facade_1.Facade {
|
|
40
|
+
static getFacadeAccessor() {
|
|
41
|
+
return 'queue';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.Queue = new Proxy(QueueFacadeClass, {
|
|
45
|
+
get(target, prop) {
|
|
46
|
+
// First check if it's a static method on the facade class itself
|
|
47
|
+
if (prop in target) {
|
|
48
|
+
const value = target[prop];
|
|
49
|
+
if (typeof value === 'function') {
|
|
50
|
+
return value.bind(target);
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
// Then try to get from the facade root (the QueueManager instance)
|
|
55
|
+
try {
|
|
56
|
+
const root = target.getFacadeRoot();
|
|
57
|
+
if (root && prop in root) {
|
|
58
|
+
const value = root[prop];
|
|
59
|
+
if (typeof value === 'function') {
|
|
60
|
+
return (...args) => value.apply(root, args);
|
|
61
|
+
}
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// Facade root not available yet
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=Queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/Facades/Queue.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;;;AAEH,8CAA2C;AAG3C,MAAM,gBAAiB,SAAQ,eAAM;IACzB,MAAM,CAAC,iBAAiB;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAEY,QAAA,KAAK,GAAG,IAAI,KAAK,CAAC,gBAAgB,EAAE;IAC/C,GAAG,CAAC,MAAM,EAAE,IAAI;QACd,iEAAiE;QACjE,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,MAAM,KAAK,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mEAAmE;QACnE,IAAI,CAAC;YACH,MAAM,IAAI,GAAI,MAAc,CAAC,aAAa,EAAkB,CAAC;YAC7D,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAI,IAAY,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gCAAgC;QAClC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAsD,CAAC"}
|
package/dist/Facades/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Facades/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Facades/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
|
package/dist/Facades/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Export all facades for easy importing
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.EventFake = exports.Event = exports.Route = exports.DB = exports.Config = void 0;
|
|
8
|
+
exports.Bus = exports.Queue = exports.EventFake = exports.Event = exports.Route = exports.DB = exports.Config = void 0;
|
|
9
9
|
var Config_1 = require("./Config");
|
|
10
10
|
Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return Config_1.Config; } });
|
|
11
11
|
var DB_1 = require("./DB");
|
|
@@ -15,4 +15,8 @@ Object.defineProperty(exports, "Route", { enumerable: true, get: function () { r
|
|
|
15
15
|
var Event_1 = require("./Event");
|
|
16
16
|
Object.defineProperty(exports, "Event", { enumerable: true, get: function () { return Event_1.Event; } });
|
|
17
17
|
Object.defineProperty(exports, "EventFake", { enumerable: true, get: function () { return Event_1.EventFake; } });
|
|
18
|
+
var Queue_1 = require("./Queue");
|
|
19
|
+
Object.defineProperty(exports, "Queue", { enumerable: true, get: function () { return Queue_1.Queue; } });
|
|
20
|
+
var Bus_1 = require("./Bus");
|
|
21
|
+
Object.defineProperty(exports, "Bus", { enumerable: true, get: function () { return Bus_1.Bus; } });
|
|
18
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Facades/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,2BAA0B;AAAjB,wFAAA,EAAE,OAAA;AACX,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,iCAA2C;AAAlC,8FAAA,KAAK,OAAA;AAAE,kGAAA,SAAS,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Facades/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,2BAA0B;AAAjB,wFAAA,EAAE,OAAA;AACX,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,iCAA2C;AAAlC,8FAAA,KAAK,OAAA;AAAE,kGAAA,SAAS,OAAA;AACzB,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,6BAA4B;AAAnB,0FAAA,GAAG,OAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch
|
|
3
|
+
*
|
|
4
|
+
* Represents a batch of jobs being processed.
|
|
5
|
+
* Tracks progress and fires callbacks on completion/failure.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors Laravel's Illuminate\Bus\Batch.
|
|
8
|
+
*/
|
|
9
|
+
import type { QueueManager } from '../QueueManager';
|
|
10
|
+
export interface BatchOptions {
|
|
11
|
+
thenCallbacks: Array<(batch: Batch) => void | Promise<void>>;
|
|
12
|
+
catchCallbacks: Array<(batch: Batch, error: Error) => void | Promise<void>>;
|
|
13
|
+
finallyCallbacks: Array<(batch: Batch) => void | Promise<void>>;
|
|
14
|
+
allowFailures: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare class Batch {
|
|
17
|
+
protected manager: QueueManager;
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly id: string;
|
|
20
|
+
readonly createdAt: Date;
|
|
21
|
+
protected _totalJobs: number;
|
|
22
|
+
protected _pendingJobs: number;
|
|
23
|
+
protected _failedJobs: number;
|
|
24
|
+
protected _failedJobIds: string[];
|
|
25
|
+
protected _cancelled: boolean;
|
|
26
|
+
protected _finishedAt: Date | null;
|
|
27
|
+
protected _options: BatchOptions;
|
|
28
|
+
constructor(manager: QueueManager, name: string, totalJobs: number, options: BatchOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Get the total number of jobs in the batch
|
|
31
|
+
*/
|
|
32
|
+
get totalJobs(): number;
|
|
33
|
+
/**
|
|
34
|
+
* Get the number of pending jobs
|
|
35
|
+
*/
|
|
36
|
+
get pendingJobs(): number;
|
|
37
|
+
/**
|
|
38
|
+
* Get the number of failed jobs
|
|
39
|
+
*/
|
|
40
|
+
get failedJobs(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Get the number of processed jobs
|
|
43
|
+
*/
|
|
44
|
+
get processedJobs(): number;
|
|
45
|
+
/**
|
|
46
|
+
* Get the batch progress percentage (0-100)
|
|
47
|
+
*/
|
|
48
|
+
progress(): number;
|
|
49
|
+
/**
|
|
50
|
+
* Whether the batch has finished
|
|
51
|
+
*/
|
|
52
|
+
finished(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Whether the batch has been cancelled
|
|
55
|
+
*/
|
|
56
|
+
cancelled(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Record a successful job completion
|
|
59
|
+
*/
|
|
60
|
+
recordSuccessfulJob(jobId: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Record a failed job
|
|
63
|
+
*/
|
|
64
|
+
recordFailedJob(jobId: string, error: Error): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Cancel the batch
|
|
67
|
+
*/
|
|
68
|
+
cancel(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Fire the then callbacks
|
|
71
|
+
*/
|
|
72
|
+
protected fireThenCallbacks(): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Fire the catch callbacks
|
|
75
|
+
*/
|
|
76
|
+
protected fireCatchCallbacks(error: Error): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Fire the finally callbacks
|
|
79
|
+
*/
|
|
80
|
+
protected fireFinallyCallbacks(): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Convert to a plain object for inspection
|
|
83
|
+
*/
|
|
84
|
+
toJSON(): Record<string, any>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=Batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Batch.d.ts","sourceRoot":"","sources":["../../../src/Queue/Batching/Batch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,cAAc,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,gBAAgB,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,KAAK;IAad,SAAS,CAAC,OAAO,EAAE,YAAY;aACf,IAAI,EAAE,MAAM;IAb9B,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,SAAS,EAAE,IAAI,CAAC;IAEhC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAK;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,CAAM;IACvC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAS;IACtC,SAAS,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC1C,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC;gBAGrB,OAAO,EAAE,YAAY,EACf,IAAI,EAAE,MAAM,EAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY;IASvB;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,QAAQ,IAAI,MAAM;IAKlB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjE;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;cACa,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUlD;;OAEG;cACa,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/D;;OAEG;cACa,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrD;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAc9B"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Batch
|
|
4
|
+
*
|
|
5
|
+
* Represents a batch of jobs being processed.
|
|
6
|
+
* Tracks progress and fires callbacks on completion/failure.
|
|
7
|
+
*
|
|
8
|
+
* Mirrors Laravel's Illuminate\Bus\Batch.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.Batch = void 0;
|
|
12
|
+
const crypto_1 = require("crypto");
|
|
13
|
+
class Batch {
|
|
14
|
+
manager;
|
|
15
|
+
name;
|
|
16
|
+
id;
|
|
17
|
+
createdAt;
|
|
18
|
+
_totalJobs;
|
|
19
|
+
_pendingJobs;
|
|
20
|
+
_failedJobs = 0;
|
|
21
|
+
_failedJobIds = [];
|
|
22
|
+
_cancelled = false;
|
|
23
|
+
_finishedAt = null;
|
|
24
|
+
_options;
|
|
25
|
+
constructor(manager, name, totalJobs, options) {
|
|
26
|
+
this.manager = manager;
|
|
27
|
+
this.name = name;
|
|
28
|
+
this.id = (0, crypto_1.randomUUID)();
|
|
29
|
+
this.createdAt = new Date();
|
|
30
|
+
this._totalJobs = totalJobs;
|
|
31
|
+
this._pendingJobs = totalJobs;
|
|
32
|
+
this._options = options;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the total number of jobs in the batch
|
|
36
|
+
*/
|
|
37
|
+
get totalJobs() {
|
|
38
|
+
return this._totalJobs;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the number of pending jobs
|
|
42
|
+
*/
|
|
43
|
+
get pendingJobs() {
|
|
44
|
+
return this._pendingJobs;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the number of failed jobs
|
|
48
|
+
*/
|
|
49
|
+
get failedJobs() {
|
|
50
|
+
return this._failedJobs;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the number of processed jobs
|
|
54
|
+
*/
|
|
55
|
+
get processedJobs() {
|
|
56
|
+
return this._totalJobs - this._pendingJobs;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the batch progress percentage (0-100)
|
|
60
|
+
*/
|
|
61
|
+
progress() {
|
|
62
|
+
if (this._totalJobs === 0)
|
|
63
|
+
return 100;
|
|
64
|
+
return Math.round((this.processedJobs / this._totalJobs) * 100);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Whether the batch has finished
|
|
68
|
+
*/
|
|
69
|
+
finished() {
|
|
70
|
+
return this._pendingJobs === 0;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Whether the batch has been cancelled
|
|
74
|
+
*/
|
|
75
|
+
cancelled() {
|
|
76
|
+
return this._cancelled;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Record a successful job completion
|
|
80
|
+
*/
|
|
81
|
+
async recordSuccessfulJob(jobId) {
|
|
82
|
+
this._pendingJobs = Math.max(0, this._pendingJobs - 1);
|
|
83
|
+
if (this.finished()) {
|
|
84
|
+
await this.fireThenCallbacks();
|
|
85
|
+
await this.fireFinallyCallbacks();
|
|
86
|
+
this._finishedAt = new Date();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Record a failed job
|
|
91
|
+
*/
|
|
92
|
+
async recordFailedJob(jobId, error) {
|
|
93
|
+
this._failedJobs++;
|
|
94
|
+
this._failedJobIds.push(jobId);
|
|
95
|
+
this._pendingJobs = Math.max(0, this._pendingJobs - 1);
|
|
96
|
+
// Fire catch callbacks
|
|
97
|
+
await this.fireCatchCallbacks(error);
|
|
98
|
+
if (!this._options.allowFailures) {
|
|
99
|
+
this.cancel();
|
|
100
|
+
}
|
|
101
|
+
if (this.finished()) {
|
|
102
|
+
await this.fireFinallyCallbacks();
|
|
103
|
+
this._finishedAt = new Date();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Cancel the batch
|
|
108
|
+
*/
|
|
109
|
+
cancel() {
|
|
110
|
+
this._cancelled = true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Fire the then callbacks
|
|
114
|
+
*/
|
|
115
|
+
async fireThenCallbacks() {
|
|
116
|
+
for (const callback of this._options.thenCallbacks) {
|
|
117
|
+
try {
|
|
118
|
+
await callback(this);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('[Queue] Error in batch then callback:', error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Fire the catch callbacks
|
|
127
|
+
*/
|
|
128
|
+
async fireCatchCallbacks(error) {
|
|
129
|
+
for (const callback of this._options.catchCallbacks) {
|
|
130
|
+
try {
|
|
131
|
+
await callback(this, error);
|
|
132
|
+
}
|
|
133
|
+
catch (callbackError) {
|
|
134
|
+
console.error('[Queue] Error in batch catch callback:', callbackError);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Fire the finally callbacks
|
|
140
|
+
*/
|
|
141
|
+
async fireFinallyCallbacks() {
|
|
142
|
+
for (const callback of this._options.finallyCallbacks) {
|
|
143
|
+
try {
|
|
144
|
+
await callback(this);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
console.error('[Queue] Error in batch finally callback:', error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Convert to a plain object for inspection
|
|
153
|
+
*/
|
|
154
|
+
toJSON() {
|
|
155
|
+
return {
|
|
156
|
+
id: this.id,
|
|
157
|
+
name: this.name,
|
|
158
|
+
totalJobs: this._totalJobs,
|
|
159
|
+
pendingJobs: this._pendingJobs,
|
|
160
|
+
failedJobs: this._failedJobs,
|
|
161
|
+
processedJobs: this.processedJobs,
|
|
162
|
+
progress: this.progress(),
|
|
163
|
+
cancelled: this._cancelled,
|
|
164
|
+
createdAt: this.createdAt.toISOString(),
|
|
165
|
+
finishedAt: this._finishedAt?.toISOString() || null,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.Batch = Batch;
|
|
170
|
+
//# sourceMappingURL=Batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Batch.js","sourceRoot":"","sources":["../../../src/Queue/Batching/Batch.ts"],"names":[],"mappings":"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"}
|