power-queues 0.0.14 → 1.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/dist/Processor.d.ts +17 -0
- package/dist/Processor.js +63 -0
- package/dist/Processor.js.map +1 -0
- package/dist/Queue.d.ts +37 -0
- package/dist/Queue.js +181 -0
- package/dist/Queue.js.map +1 -0
- package/dist/QueuePortion.d.ts +8 -0
- package/dist/QueuePortion.js +34 -0
- package/dist/QueuePortion.js.map +1 -0
- package/dist/QueuePortionProcessor.d.ts +8 -0
- package/dist/QueuePortionProcessor.js +75 -0
- package/dist/QueuePortionProcessor.js.map +1 -0
- package/dist/QueuePortionProcessorMethod.d.ts +12 -0
- package/dist/QueuePortionProcessorMethod.js +116 -0
- package/dist/QueuePortionProcessorMethod.js.map +1 -0
- package/dist/QueueProcessor.d.ts +14 -0
- package/dist/QueueProcessor.js +61 -0
- package/dist/QueueProcessor.js.map +1 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.js +13 -13
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/ProcessorService.d.ts +0 -7
- package/dist/ProcessorService.js +0 -19
- package/dist/ProcessorService.js.map +0 -1
- package/dist/QueuePortionProcessorOrderService.d.ts +0 -5
- package/dist/QueuePortionProcessorOrderService.js +0 -44
- package/dist/QueuePortionProcessorOrderService.js.map +0 -1
- package/dist/QueuePortionProcessorService.d.ts +0 -8
- package/dist/QueuePortionProcessorService.js +0 -26
- package/dist/QueuePortionProcessorService.js.map +0 -1
- package/dist/QueuePortionService.d.ts +0 -7
- package/dist/QueuePortionService.js +0 -38
- package/dist/QueuePortionService.js.map +0 -1
- package/dist/QueueProcessorService.d.ts +0 -15
- package/dist/QueueProcessorService.js +0 -66
- package/dist/QueueProcessorService.js.map +0 -1
- package/dist/QueueService.d.ts +0 -18
- package/dist/QueueService.js +0 -86
- package/dist/QueueService.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueuePortionService.js","sourceRoot":"","sources":["../src/QueuePortionService.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAE/C,MAAa,mBAAoB,SAAQ,2BAAY;IAArD;;QACiB,gBAAW,GAAW,CAAC,CAAC;IAkCzC,CAAC;IAhCA,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,YAAoB;QACnD,IAAI,CAAC,GAAG,CAAC,EACR,MAAM,GAAG,EAAE,CAAC;QAEb,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAEzD,IAAI,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YACD,CAAC,EAAE,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,YAAoB,EAAE,SAAqB;QACjF,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,YAAoB,EAAE,SAAqB;QAC5E,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClH,CAAC;YACD,OAAO,GAAG,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC;YACD,CAAC,EAAE,CAAC;QACL,CAAC;IACF,CAAC;CACD;AAnCD,kDAmCC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { QueueService } from './QueueService';
|
|
2
|
-
import { ProcessorService } from './ProcessorService';
|
|
3
|
-
export declare class QueueProcessorService extends QueueService {
|
|
4
|
-
private providedProcessors;
|
|
5
|
-
setProcessors(processorServices: Array<ProcessorService>): QueueProcessorService;
|
|
6
|
-
getProcessors(): Array<ProcessorService>;
|
|
7
|
-
getProcessorByName(name: string): ProcessorService | null;
|
|
8
|
-
listen(queueName: string): void;
|
|
9
|
-
excecute(queueName: string, attemptIndex: number, inputData: any): Promise<void>;
|
|
10
|
-
excecuteProcessorMethod(processor: ProcessorService, method: Function, queueName: string, attemptIndex: number, inputData: any): Promise<void>;
|
|
11
|
-
success(queueName: string, attemptIndex: number, inputData: any, resultData: any): Promise<void>;
|
|
12
|
-
error(queueName: string, attemptIndex: number, inputData: any, err: any): Promise<void>;
|
|
13
|
-
successOrder(queueName: string, attemptIndex: number, inputData: any, resultData: any): Promise<void>;
|
|
14
|
-
errorCritical(queueName: string, attemptIndex: number, inputData: any, err: any): Promise<void>;
|
|
15
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QueueProcessorService = void 0;
|
|
4
|
-
const QueueService_1 = require("./QueueService");
|
|
5
|
-
class QueueProcessorService extends QueueService_1.QueueService {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.providedProcessors = [];
|
|
9
|
-
}
|
|
10
|
-
setProcessors(processorServices) {
|
|
11
|
-
this.providedProcessors = [...processorServices];
|
|
12
|
-
return this;
|
|
13
|
-
}
|
|
14
|
-
getProcessors() {
|
|
15
|
-
return [...this.providedProcessors];
|
|
16
|
-
}
|
|
17
|
-
getProcessorByName(name) {
|
|
18
|
-
return (this.providedProcessors ?? []).find((processor) => processor.name === name) ?? null;
|
|
19
|
-
}
|
|
20
|
-
listen(queueName) {
|
|
21
|
-
const processors = this.getProcessors();
|
|
22
|
-
let i = 0;
|
|
23
|
-
while (i < processors.length) {
|
|
24
|
-
const methods = processors[i].orderMethods();
|
|
25
|
-
let ii = 0;
|
|
26
|
-
while (ii < methods.length) {
|
|
27
|
-
super.listen(`${queueName}.${processors[i].name}.${ii}`);
|
|
28
|
-
ii++;
|
|
29
|
-
}
|
|
30
|
-
i++;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
async excecute(queueName, attemptIndex, inputData) {
|
|
34
|
-
const queueNameSplit = queueName.split(`.`);
|
|
35
|
-
const processorName = queueNameSplit[queueNameSplit.length - 2];
|
|
36
|
-
const methodIndex = queueNameSplit[queueNameSplit.length - 1];
|
|
37
|
-
const processor = this.getProcessorByName(processorName);
|
|
38
|
-
if (processor) {
|
|
39
|
-
const methods = processor.orderMethods();
|
|
40
|
-
const method = methods[methodIndex];
|
|
41
|
-
if (typeof method === `function`) {
|
|
42
|
-
return await this.excecuteProcessorMethod(processor, method, queueName, attemptIndex, inputData);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
async excecuteProcessorMethod(processor, method, queueName, attemptIndex, inputData) {
|
|
47
|
-
try {
|
|
48
|
-
await this.success(queueName, attemptIndex, inputData, await processor.result(await method.call(processor, attemptIndex, inputData)));
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
this.retry(queueName, attemptIndex, inputData, err);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async success(queueName, attemptIndex, inputData, resultData) {
|
|
55
|
-
await this.successOrder(queueName, attemptIndex, inputData, resultData);
|
|
56
|
-
}
|
|
57
|
-
async error(queueName, attemptIndex, inputData, err) {
|
|
58
|
-
await this.errorCritical(queueName, attemptIndex, inputData, err);
|
|
59
|
-
}
|
|
60
|
-
async successOrder(queueName, attemptIndex, inputData, resultData) {
|
|
61
|
-
}
|
|
62
|
-
async errorCritical(queueName, attemptIndex, inputData, err) {
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
exports.QueueProcessorService = QueueProcessorService;
|
|
66
|
-
//# sourceMappingURL=QueueProcessorService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueueProcessorService.js","sourceRoot":"","sources":["../src/QueueProcessorService.ts"],"names":[],"mappings":"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"}
|
package/dist/QueueService.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import Redis from 'ioredis';
|
|
2
|
-
export declare class QueueService {
|
|
3
|
-
protected readonly redisService: Redis | null;
|
|
4
|
-
readonly threadId: string;
|
|
5
|
-
readonly loopTimeout: number;
|
|
6
|
-
readonly attempts: number;
|
|
7
|
-
listen(queueName: string): void;
|
|
8
|
-
listenByAttempt(queueName: string, attemptIndex: number): Promise<void>;
|
|
9
|
-
loop(queueName: string, attemptIndex: number): Promise<void>;
|
|
10
|
-
select(queueName: string, attemptIndex: number): Promise<any>;
|
|
11
|
-
dataProcessingAfterSelect(inputData: any): any;
|
|
12
|
-
allowExcecute(queueName: string, attemptIndex: number, inputData: any): Promise<boolean>;
|
|
13
|
-
excecute(queueName: string, attemptIndex: number, inputData: any): Promise<void>;
|
|
14
|
-
excecuteWrapper(queueName: string, attemptIndex: number, inputData: any): Promise<any>;
|
|
15
|
-
success(queueName: string, attemptIndex: number, inputData: any, resultData: any): Promise<void>;
|
|
16
|
-
error(queueName: string, attemptIndex: number, inputData: any, err: any): Promise<void>;
|
|
17
|
-
retry(queueName: string, attemptIndex: number, inputData: any, err: any): Promise<number>;
|
|
18
|
-
}
|
package/dist/QueueService.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QueueService = void 0;
|
|
4
|
-
const uuid_1 = require("uuid");
|
|
5
|
-
class QueueService {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.threadId = (0, uuid_1.v4)();
|
|
8
|
-
this.loopTimeout = Number(process.env.LOOP_TIMEOUT ?? 10);
|
|
9
|
-
this.attempts = 1;
|
|
10
|
-
}
|
|
11
|
-
listen(queueName) {
|
|
12
|
-
let i = 0;
|
|
13
|
-
while (i < this.attempts) {
|
|
14
|
-
this.listenByAttempt(queueName, i);
|
|
15
|
-
i++;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
async listenByAttempt(queueName, attemptIndex) {
|
|
19
|
-
await this.redisService.rpush(`ready.${queueName}.${attemptIndex}`, this.threadId);
|
|
20
|
-
await new Promise((resolve) => setTimeout(resolve, this.loopTimeout));
|
|
21
|
-
setImmediate(() => this.loop(queueName, attemptIndex));
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
async loop(queueName, attemptIndex) {
|
|
25
|
-
try {
|
|
26
|
-
const readyThreadId = await this.redisService.lpop(`ready.${queueName}.${attemptIndex}`);
|
|
27
|
-
if (readyThreadId) {
|
|
28
|
-
if (readyThreadId === this.threadId) {
|
|
29
|
-
const inputData = await this.select(queueName, attemptIndex);
|
|
30
|
-
if (await this.allowExcecute(queueName, attemptIndex, inputData)) {
|
|
31
|
-
try {
|
|
32
|
-
await this.excecute(queueName, attemptIndex, inputData);
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
this.retry(queueName, attemptIndex, inputData, err);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
await this.redisService.rpush(`ready.${queueName}.${attemptIndex}`, readyThreadId);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
await this.error(queueName, attemptIndex, null, err);
|
|
44
|
-
}
|
|
45
|
-
await new Promise((resolve) => setTimeout(resolve, this.loopTimeout));
|
|
46
|
-
setImmediate(() => this.loop(queueName, attemptIndex));
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
async select(queueName, attemptIndex) {
|
|
50
|
-
return this.dataProcessingAfterSelect(await this.redisService.lpop(`queue.${queueName}.${attemptIndex}`));
|
|
51
|
-
}
|
|
52
|
-
dataProcessingAfterSelect(inputData) {
|
|
53
|
-
try {
|
|
54
|
-
return JSON.parse(inputData);
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
}
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
async allowExcecute(queueName, attemptIndex, inputData) {
|
|
61
|
-
return !!inputData;
|
|
62
|
-
}
|
|
63
|
-
async excecute(queueName, attemptIndex, inputData) {
|
|
64
|
-
this.success(queueName, attemptIndex, inputData, await this.excecuteWrapper(queueName, attemptIndex, inputData));
|
|
65
|
-
}
|
|
66
|
-
async excecuteWrapper(queueName, attemptIndex, inputData) {
|
|
67
|
-
return {};
|
|
68
|
-
}
|
|
69
|
-
async success(queueName, attemptIndex, inputData, resultData) {
|
|
70
|
-
}
|
|
71
|
-
async error(queueName, attemptIndex, inputData, err) {
|
|
72
|
-
}
|
|
73
|
-
async retry(queueName, attemptIndex, inputData, err) {
|
|
74
|
-
try {
|
|
75
|
-
if (attemptIndex < (this.attempts - 1)) {
|
|
76
|
-
return await this.redisService.rpush(`queue.${queueName}.${attemptIndex + 1}`, JSON.stringify(inputData));
|
|
77
|
-
}
|
|
78
|
-
this.error(queueName, attemptIndex, inputData, err);
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
}
|
|
82
|
-
return 0;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
exports.QueueService = QueueService;
|
|
86
|
-
//# sourceMappingURL=QueueService.js.map
|
package/dist/QueueService.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueueService.js","sourceRoot":"","sources":["../src/QueueService.ts"],"names":[],"mappings":"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"}
|