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.
Files changed (41) hide show
  1. package/dist/Processor.d.ts +17 -0
  2. package/dist/Processor.js +63 -0
  3. package/dist/Processor.js.map +1 -0
  4. package/dist/Queue.d.ts +37 -0
  5. package/dist/Queue.js +181 -0
  6. package/dist/Queue.js.map +1 -0
  7. package/dist/QueuePortion.d.ts +8 -0
  8. package/dist/QueuePortion.js +34 -0
  9. package/dist/QueuePortion.js.map +1 -0
  10. package/dist/QueuePortionProcessor.d.ts +8 -0
  11. package/dist/QueuePortionProcessor.js +75 -0
  12. package/dist/QueuePortionProcessor.js.map +1 -0
  13. package/dist/QueuePortionProcessorMethod.d.ts +12 -0
  14. package/dist/QueuePortionProcessorMethod.js +116 -0
  15. package/dist/QueuePortionProcessorMethod.js.map +1 -0
  16. package/dist/QueueProcessor.d.ts +14 -0
  17. package/dist/QueueProcessor.js +61 -0
  18. package/dist/QueueProcessor.js.map +1 -0
  19. package/dist/index.d.ts +7 -7
  20. package/dist/index.js +13 -13
  21. package/dist/index.js.map +1 -1
  22. package/dist/tsconfig.build.tsbuildinfo +1 -1
  23. package/package.json +1 -1
  24. package/dist/ProcessorService.d.ts +0 -7
  25. package/dist/ProcessorService.js +0 -19
  26. package/dist/ProcessorService.js.map +0 -1
  27. package/dist/QueuePortionProcessorOrderService.d.ts +0 -5
  28. package/dist/QueuePortionProcessorOrderService.js +0 -44
  29. package/dist/QueuePortionProcessorOrderService.js.map +0 -1
  30. package/dist/QueuePortionProcessorService.d.ts +0 -8
  31. package/dist/QueuePortionProcessorService.js +0 -26
  32. package/dist/QueuePortionProcessorService.js.map +0 -1
  33. package/dist/QueuePortionService.d.ts +0 -7
  34. package/dist/QueuePortionService.js +0 -38
  35. package/dist/QueuePortionService.js.map +0 -1
  36. package/dist/QueueProcessorService.d.ts +0 -15
  37. package/dist/QueueProcessorService.js +0 -66
  38. package/dist/QueueProcessorService.js.map +0 -1
  39. package/dist/QueueService.d.ts +0 -18
  40. package/dist/QueueService.js +0 -86
  41. 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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"}
@@ -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
- }
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueueService.js","sourceRoot":"","sources":["../src/QueueService.ts"],"names":[],"mappings":"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"}