atomic-queues 1.4.1 → 1.6.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/README.md +300 -283
- package/dist/decorators/constants.d.ts +17 -0
- package/dist/decorators/constants.d.ts.map +1 -0
- package/dist/decorators/constants.js +23 -0
- package/dist/decorators/constants.js.map +1 -0
- package/dist/decorators/entity.decorators.d.ts +88 -0
- package/dist/decorators/entity.decorators.d.ts.map +1 -0
- package/dist/decorators/entity.decorators.js +150 -0
- package/dist/decorators/entity.decorators.js.map +1 -0
- package/dist/decorators/index.d.ts +9 -1
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +9 -1
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/interfaces.d.ts +130 -0
- package/dist/decorators/interfaces.d.ts.map +1 -0
- package/dist/decorators/interfaces.js +3 -0
- package/dist/decorators/interfaces.js.map +1 -0
- package/dist/decorators/job.decorators.d.ts +60 -0
- package/dist/decorators/job.decorators.d.ts.map +1 -0
- package/dist/decorators/job.decorators.js +97 -0
- package/dist/decorators/job.decorators.js.map +1 -0
- package/dist/decorators/legacy.decorators.d.ts +36 -0
- package/dist/decorators/legacy.decorators.d.ts.map +1 -0
- package/dist/decorators/legacy.decorators.js +61 -0
- package/dist/decorators/legacy.decorators.js.map +1 -0
- package/dist/decorators/metadata-readers.d.ts +31 -0
- package/dist/decorators/metadata-readers.d.ts.map +1 -0
- package/dist/decorators/metadata-readers.js +53 -0
- package/dist/decorators/metadata-readers.js.map +1 -0
- package/dist/decorators/registry.d.ts +2 -0
- package/dist/decorators/registry.d.ts.map +1 -0
- package/dist/decorators/registry.js +6 -0
- package/dist/decorators/registry.js.map +1 -0
- package/dist/decorators/scaler.decorators.d.ts +65 -0
- package/dist/decorators/scaler.decorators.d.ts.map +1 -0
- package/dist/decorators/scaler.decorators.js +103 -0
- package/dist/decorators/scaler.decorators.js.map +1 -0
- package/dist/decorators/type-guards.d.ts +18 -0
- package/dist/decorators/type-guards.d.ts.map +1 -0
- package/dist/decorators/type-guards.js +32 -0
- package/dist/decorators/type-guards.js.map +1 -0
- package/dist/decorators/utils.d.ts +20 -0
- package/dist/decorators/utils.d.ts.map +1 -0
- package/dist/decorators/utils.js +98 -0
- package/dist/decorators/utils.js.map +1 -0
- package/dist/decorators/worker.decorators.d.ts +58 -0
- package/dist/decorators/worker.decorators.d.ts.map +1 -0
- package/dist/decorators/worker.decorators.js +92 -0
- package/dist/decorators/worker.decorators.js.map +1 -0
- package/dist/domain/interfaces/config.interfaces.d.ts +188 -0
- package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/config.interfaces.js +3 -0
- package/dist/domain/interfaces/config.interfaces.js.map +1 -0
- package/dist/domain/interfaces/cqrs.interfaces.d.ts +7 -0
- package/dist/domain/interfaces/cqrs.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/cqrs.interfaces.js +3 -0
- package/dist/domain/interfaces/cqrs.interfaces.js.map +1 -0
- package/dist/domain/interfaces/event.interfaces.d.ts +71 -0
- package/dist/domain/interfaces/event.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/event.interfaces.js +3 -0
- package/dist/domain/interfaces/event.interfaces.js.map +1 -0
- package/dist/domain/interfaces/index-tracking.interfaces.d.ts +69 -0
- package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/index-tracking.interfaces.js +3 -0
- package/dist/domain/interfaces/index-tracking.interfaces.js.map +1 -0
- package/dist/domain/interfaces/index.d.ts +12 -0
- package/dist/domain/interfaces/index.d.ts.map +1 -0
- package/dist/domain/interfaces/index.js +28 -0
- package/dist/domain/interfaces/index.js.map +1 -0
- package/dist/domain/interfaces/job.interfaces.d.ts +76 -0
- package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/job.interfaces.js +3 -0
- package/dist/domain/interfaces/job.interfaces.js.map +1 -0
- package/dist/domain/interfaces/lock.interfaces.d.ts +54 -0
- package/dist/domain/interfaces/lock.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/lock.interfaces.js +3 -0
- package/dist/domain/interfaces/lock.interfaces.js.map +1 -0
- package/dist/domain/interfaces/process.interfaces.d.ts +44 -0
- package/dist/domain/interfaces/process.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/process.interfaces.js +3 -0
- package/dist/domain/interfaces/process.interfaces.js.map +1 -0
- package/dist/domain/interfaces/queue.interfaces.d.ts +46 -0
- package/dist/domain/interfaces/queue.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/queue.interfaces.js +3 -0
- package/dist/domain/interfaces/queue.interfaces.js.map +1 -0
- package/dist/domain/interfaces/scaling.interfaces.d.ts +62 -0
- package/dist/domain/interfaces/scaling.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/scaling.interfaces.js +3 -0
- package/dist/domain/interfaces/scaling.interfaces.js.map +1 -0
- package/dist/domain/interfaces/utility.types.d.ts +15 -0
- package/dist/domain/interfaces/utility.types.d.ts.map +1 -0
- package/dist/domain/interfaces/utility.types.js +3 -0
- package/dist/domain/interfaces/utility.types.js.map +1 -0
- package/dist/domain/interfaces/worker.interfaces.d.ts +120 -0
- package/dist/domain/interfaces/worker.interfaces.d.ts.map +1 -0
- package/dist/domain/interfaces/worker.interfaces.js +3 -0
- package/dist/domain/interfaces/worker.interfaces.js.map +1 -0
- package/dist/module/atomic-queues.module.d.ts.map +1 -1
- package/dist/module/atomic-queues.module.js +5 -0
- package/dist/module/atomic-queues.module.js.map +1 -1
- package/dist/services/cron-manager/cron-manager.service.d.ts +5 -4
- package/dist/services/cron-manager/cron-manager.service.d.ts.map +1 -1
- package/dist/services/cron-manager/cron-manager.service.js +26 -57
- package/dist/services/cron-manager/cron-manager.service.js.map +1 -1
- package/dist/services/index-manager/index-manager.service.d.ts +0 -4
- package/dist/services/index-manager/index-manager.service.d.ts.map +1 -1
- package/dist/services/index-manager/index-manager.service.js +4 -16
- package/dist/services/index-manager/index-manager.service.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/processor-discovery/decorator-discovery.service.d.ts +40 -0
- package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +1 -0
- package/dist/services/processor-discovery/decorator-discovery.service.js +191 -0
- package/dist/services/processor-discovery/decorator-discovery.service.js.map +1 -0
- package/dist/services/processor-discovery/index.d.ts +4 -0
- package/dist/services/processor-discovery/index.d.ts.map +1 -1
- package/dist/services/processor-discovery/index.js +4 -0
- package/dist/services/processor-discovery/index.js.map +1 -1
- package/dist/services/processor-discovery/processor-discovery.service.d.ts +30 -138
- package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +1 -1
- package/dist/services/processor-discovery/processor-discovery.service.js +125 -502
- package/dist/services/processor-discovery/processor-discovery.service.js.map +1 -1
- package/dist/services/processor-discovery/processor-registry.d.ts +58 -0
- package/dist/services/processor-discovery/processor-registry.d.ts.map +1 -0
- package/dist/services/processor-discovery/processor-registry.js +74 -0
- package/dist/services/processor-discovery/processor-registry.js.map +1 -0
- package/dist/services/processor-discovery/scaling-registration.service.d.ts +60 -0
- package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +1 -0
- package/dist/services/processor-discovery/scaling-registration.service.js +261 -0
- package/dist/services/processor-discovery/scaling-registration.service.js.map +1 -0
- package/dist/services/processor-discovery/worker-factory.service.d.ts +54 -0
- package/dist/services/processor-discovery/worker-factory.service.d.ts.map +1 -0
- package/dist/services/processor-discovery/worker-factory.service.js +185 -0
- package/dist/services/processor-discovery/worker-factory.service.js.map +1 -0
- package/dist/services/queue-bus/entity-target.d.ts +58 -0
- package/dist/services/queue-bus/entity-target.d.ts.map +1 -0
- package/dist/services/queue-bus/entity-target.js +109 -0
- package/dist/services/queue-bus/entity-target.js.map +1 -0
- package/dist/services/queue-bus/index.d.ts +4 -0
- package/dist/services/queue-bus/index.d.ts.map +1 -1
- package/dist/services/queue-bus/index.js +4 -0
- package/dist/services/queue-bus/index.js.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.d.ts +9 -145
- package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
- package/dist/services/queue-bus/queue-bus.service.js +23 -311
- package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
- package/dist/services/queue-bus/queue-bus.types.d.ts +40 -0
- package/dist/services/queue-bus/queue-bus.types.d.ts.map +1 -0
- package/dist/services/queue-bus/queue-bus.types.js +3 -0
- package/dist/services/queue-bus/queue-bus.types.js.map +1 -0
- package/dist/services/queue-bus/queue-bus.utils.d.ts +34 -0
- package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -0
- package/dist/services/queue-bus/queue-bus.utils.js +82 -0
- package/dist/services/queue-bus/queue-bus.utils.js.map +1 -0
- package/dist/services/queue-bus/queue-target.d.ts +61 -0
- package/dist/services/queue-bus/queue-target.d.ts.map +1 -0
- package/dist/services/queue-bus/queue-target.js +123 -0
- package/dist/services/queue-bus/queue-target.js.map +1 -0
- package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +23 -6
- package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +1 -1
- package/dist/services/queue-events-manager/queue-events-manager.service.js +69 -37
- package/dist/services/queue-events-manager/queue-events-manager.service.js.map +1 -1
- package/dist/services/resource-lock/resource-lock.service.d.ts +0 -4
- package/dist/services/resource-lock/resource-lock.service.d.ts.map +1 -1
- package/dist/services/resource-lock/resource-lock.service.js +4 -16
- package/dist/services/resource-lock/resource-lock.service.js.map +1 -1
- package/dist/services/service-queue/index.d.ts +1 -0
- package/dist/services/service-queue/index.d.ts.map +1 -1
- package/dist/services/service-queue/index.js +1 -0
- package/dist/services/service-queue/index.js.map +1 -1
- package/dist/services/service-queue/service-queue.service.d.ts +2 -35
- package/dist/services/service-queue/service-queue.service.d.ts.map +1 -1
- package/dist/services/service-queue/service-queue.service.js +17 -49
- package/dist/services/service-queue/service-queue.service.js.map +1 -1
- package/dist/services/service-queue/service-queue.types.d.ts +32 -0
- package/dist/services/service-queue/service-queue.types.d.ts.map +1 -0
- package/dist/services/service-queue/service-queue.types.js +27 -0
- package/dist/services/service-queue/service-queue.types.js.map +1 -0
- package/dist/services/spawn-queue/index.d.ts +2 -0
- package/dist/services/spawn-queue/index.d.ts.map +1 -0
- package/dist/services/spawn-queue/index.js +18 -0
- package/dist/services/spawn-queue/index.js.map +1 -0
- package/dist/services/spawn-queue/spawn-queue.service.d.ts +119 -0
- package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +1 -0
- package/dist/services/spawn-queue/spawn-queue.service.js +273 -0
- package/dist/services/spawn-queue/spawn-queue.service.js.map +1 -0
- package/dist/services/worker-manager/worker-manager.service.d.ts +18 -3
- package/dist/services/worker-manager/worker-manager.service.d.ts.map +1 -1
- package/dist/services/worker-manager/worker-manager.service.js +46 -21
- package/dist/services/worker-manager/worker-manager.service.js.map +1 -1
- package/dist/utils/async.utils.d.ts +51 -0
- package/dist/utils/async.utils.d.ts.map +1 -0
- package/dist/utils/async.utils.js +87 -0
- package/dist/utils/async.utils.js.map +1 -0
- package/dist/utils/helpers.d.ts +4 -123
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +18 -226
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/job.utils.d.ts +50 -0
- package/dist/utils/job.utils.d.ts.map +1 -0
- package/dist/utils/job.utils.js +89 -0
- package/dist/utils/job.utils.js.map +1 -0
- package/dist/utils/naming.utils.d.ts +21 -0
- package/dist/utils/naming.utils.d.ts.map +1 -0
- package/dist/utils/naming.utils.js +38 -0
- package/dist/utils/naming.utils.js.map +1 -0
- package/dist/utils/rate-limit.utils.d.ts +9 -0
- package/dist/utils/rate-limit.utils.d.ts.map +1 -0
- package/dist/utils/rate-limit.utils.js +30 -0
- package/dist/utils/rate-limit.utils.js.map +1 -0
- package/dist/utils/redis.utils.d.ts +3 -0
- package/dist/utils/redis.utils.d.ts.map +1 -0
- package/dist/utils/redis.utils.js +14 -0
- package/dist/utils/redis.utils.js.map +1 -0
- package/package.json +17 -17
- package/dist/decorators/decorators.d.ts +0 -489
- package/dist/decorators/decorators.d.ts.map +0 -1
- package/dist/decorators/decorators.js +0 -680
- package/dist/decorators/decorators.js.map +0 -1
- package/dist/domain/interfaces.d.ts +0 -748
- package/dist/domain/interfaces.d.ts.map +0 -1
- package/dist/domain/interfaces.js +0 -19
- package/dist/domain/interfaces.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @AtomicProcessor decorator (LEGACY)
|
|
3
|
+
*
|
|
4
|
+
* Marks a method as an atomic job processor.
|
|
5
|
+
* Can be used on handler methods to auto-register them.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Use @WorkerProcessor class decorator with @JobHandler method decorators instead
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* @Injectable()
|
|
12
|
+
* export class MessageProcessor {
|
|
13
|
+
* @AtomicProcessor('send-message')
|
|
14
|
+
* async handleSendMessage(job: Job<IAtomicJobData>) {
|
|
15
|
+
* // Process the job
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const AtomicProcessor: (jobType: string) => MethodDecorator;
|
|
21
|
+
/**
|
|
22
|
+
* @JobType decorator (LEGACY)
|
|
23
|
+
*
|
|
24
|
+
* Specifies the job type for a processor method.
|
|
25
|
+
*
|
|
26
|
+
* @deprecated Use @JobHandler method decorator instead
|
|
27
|
+
*/
|
|
28
|
+
export declare const JobType: (jobType: string) => MethodDecorator;
|
|
29
|
+
/**
|
|
30
|
+
* @InjectAtomicQueue decorator
|
|
31
|
+
*
|
|
32
|
+
* Custom parameter decorator for injecting a specific queue.
|
|
33
|
+
* Useful when you need direct access to a queue in a service.
|
|
34
|
+
*/
|
|
35
|
+
export declare const InjectAtomicQueue: (entityType: string, entityId?: string) => ParameterDecorator;
|
|
36
|
+
//# sourceMappingURL=legacy.decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/legacy.decorators.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,KAAG,eAEjD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,KAAG,eAEzC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,MAAM,EAClB,WAAW,MAAM,KAChB,kBAsBF,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectAtomicQueue = exports.JobType = exports.AtomicProcessor = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const constants_1 = require("./constants");
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// LEGACY DECORATORS (Preserved for backward compatibility)
|
|
8
|
+
// =============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* @AtomicProcessor decorator (LEGACY)
|
|
11
|
+
*
|
|
12
|
+
* Marks a method as an atomic job processor.
|
|
13
|
+
* Can be used on handler methods to auto-register them.
|
|
14
|
+
*
|
|
15
|
+
* @deprecated Use @WorkerProcessor class decorator with @JobHandler method decorators instead
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* @Injectable()
|
|
20
|
+
* export class MessageProcessor {
|
|
21
|
+
* @AtomicProcessor('send-message')
|
|
22
|
+
* async handleSendMessage(job: Job<IAtomicJobData>) {
|
|
23
|
+
* // Process the job
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
const AtomicProcessor = (jobType) => {
|
|
29
|
+
return (0, common_1.SetMetadata)(constants_1.ATOMIC_PROCESSOR_METADATA, jobType);
|
|
30
|
+
};
|
|
31
|
+
exports.AtomicProcessor = AtomicProcessor;
|
|
32
|
+
/**
|
|
33
|
+
* @JobType decorator (LEGACY)
|
|
34
|
+
*
|
|
35
|
+
* Specifies the job type for a processor method.
|
|
36
|
+
*
|
|
37
|
+
* @deprecated Use @JobHandler method decorator instead
|
|
38
|
+
*/
|
|
39
|
+
const JobType = (jobType) => {
|
|
40
|
+
return (0, common_1.SetMetadata)(constants_1.JOB_TYPE_METADATA, jobType);
|
|
41
|
+
};
|
|
42
|
+
exports.JobType = JobType;
|
|
43
|
+
/**
|
|
44
|
+
* @InjectAtomicQueue decorator
|
|
45
|
+
*
|
|
46
|
+
* Custom parameter decorator for injecting a specific queue.
|
|
47
|
+
* Useful when you need direct access to a queue in a service.
|
|
48
|
+
*/
|
|
49
|
+
const InjectAtomicQueue = (entityType, entityId) => {
|
|
50
|
+
return (target, propertyKey, parameterIndex) => {
|
|
51
|
+
const existingParams = Reflect.getMetadata('atomic:inject-queue', target, propertyKey) || [];
|
|
52
|
+
existingParams.push({
|
|
53
|
+
type: entityType,
|
|
54
|
+
id: entityId,
|
|
55
|
+
index: parameterIndex,
|
|
56
|
+
});
|
|
57
|
+
Reflect.defineMetadata('atomic:inject-queue', existingParams, target, propertyKey);
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
exports.InjectAtomicQueue = InjectAtomicQueue;
|
|
61
|
+
//# sourceMappingURL=legacy.decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.decorators.js","sourceRoot":"","sources":["../../src/decorators/legacy.decorators.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,2CAA2E;AAE3E,gFAAgF;AAChF,2DAA2D;AAC3D,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,eAAe,GAAG,CAAC,OAAe,EAAmB,EAAE;IAClE,OAAO,IAAA,oBAAW,EAAC,qCAAyB,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEF;;;;;;GAMG;AACI,MAAM,OAAO,GAAG,CAAC,OAAe,EAAmB,EAAE;IAC1D,OAAO,IAAA,oBAAW,EAAC,6BAAiB,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB;AAEF;;;;;GAKG;AACI,MAAM,iBAAiB,GAAG,CAC/B,UAAkB,EAClB,QAAiB,EACG,EAAE;IACtB,OAAO,CACL,MAAc,EACd,WAAwC,EACxC,cAAsB,EACtB,EAAE;QACF,MAAM,cAAc,GAClB,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,EAAE,WAAY,CAAC,IAAI,EAAE,CAAC;QAEzE,cAAc,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,cAAc,CACpB,qBAAqB,EACrB,cAAc,EACd,MAAM,EACN,WAAY,CACb,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,iBAAiB,qBAyB5B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
import { WorkerProcessorOptions, JobHandlerMetadata, EntityScalerOptions, JobCommandMetadata, JobQueryMetadata } from './interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Get the entity type from a command/query class decorated with @EntityType or @QueueEntity
|
|
5
|
+
*/
|
|
6
|
+
export declare function getEntityType(target: Function): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Get the entity ID property name from a class decorated with @QueueEntityId or @QueueEntity
|
|
9
|
+
*/
|
|
10
|
+
export declare function getEntityIdProperty(target: Function): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Get WorkerProcessor metadata from a class
|
|
13
|
+
*/
|
|
14
|
+
export declare function getWorkerProcessorMetadata(target: Type<any>): WorkerProcessorOptions | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Get all JobHandler metadata from a class
|
|
17
|
+
*/
|
|
18
|
+
export declare function getJobHandlerMetadata(target: Type<any>): JobHandlerMetadata[];
|
|
19
|
+
/**
|
|
20
|
+
* Get EntityScaler metadata from a class
|
|
21
|
+
*/
|
|
22
|
+
export declare function getEntityScalerMetadata(target: Type<any>): EntityScalerOptions | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Get JobCommand metadata from a class
|
|
25
|
+
*/
|
|
26
|
+
export declare function getJobCommandMetadata(target: Function): JobCommandMetadata | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Get JobQuery metadata from a class
|
|
29
|
+
*/
|
|
30
|
+
export declare function getJobQueryMetadata(target: Function): JobQueryMetadata | undefined;
|
|
31
|
+
//# sourceMappingURL=metadata-readers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-readers.d.ts","sourceRoot":"","sources":["../../src/decorators/metadata-readers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAUtC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAExE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,sBAAsB,GAAG,SAAS,CAEhG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,EAAE,CAE7E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,SAAS,CAE1F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAEtF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,gBAAgB,GAAG,SAAS,CAElF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getEntityType = getEntityType;
|
|
4
|
+
exports.getEntityIdProperty = getEntityIdProperty;
|
|
5
|
+
exports.getWorkerProcessorMetadata = getWorkerProcessorMetadata;
|
|
6
|
+
exports.getJobHandlerMetadata = getJobHandlerMetadata;
|
|
7
|
+
exports.getEntityScalerMetadata = getEntityScalerMetadata;
|
|
8
|
+
exports.getJobCommandMetadata = getJobCommandMetadata;
|
|
9
|
+
exports.getJobQueryMetadata = getJobQueryMetadata;
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
/**
|
|
12
|
+
* Get the entity type from a command/query class decorated with @EntityType or @QueueEntity
|
|
13
|
+
*/
|
|
14
|
+
function getEntityType(target) {
|
|
15
|
+
return Reflect.getMetadata(constants_1.ENTITY_TYPE_METADATA, target);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the entity ID property name from a class decorated with @QueueEntityId or @QueueEntity
|
|
19
|
+
*/
|
|
20
|
+
function getEntityIdProperty(target) {
|
|
21
|
+
return Reflect.getMetadata(constants_1.ENTITY_ID_METADATA, target);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get WorkerProcessor metadata from a class
|
|
25
|
+
*/
|
|
26
|
+
function getWorkerProcessorMetadata(target) {
|
|
27
|
+
return Reflect.getMetadata(constants_1.WORKER_PROCESSOR_METADATA, target);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get all JobHandler metadata from a class
|
|
31
|
+
*/
|
|
32
|
+
function getJobHandlerMetadata(target) {
|
|
33
|
+
return Reflect.getMetadata(constants_1.JOB_HANDLER_METADATA, target) || [];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get EntityScaler metadata from a class
|
|
37
|
+
*/
|
|
38
|
+
function getEntityScalerMetadata(target) {
|
|
39
|
+
return Reflect.getMetadata(constants_1.ENTITY_SCALER_METADATA, target);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get JobCommand metadata from a class
|
|
43
|
+
*/
|
|
44
|
+
function getJobCommandMetadata(target) {
|
|
45
|
+
return Reflect.getMetadata(constants_1.JOB_COMMAND_METADATA, target);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get JobQuery metadata from a class
|
|
49
|
+
*/
|
|
50
|
+
function getJobQueryMetadata(target) {
|
|
51
|
+
return Reflect.getMetadata(constants_1.JOB_QUERY_METADATA, target);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=metadata-readers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-readers.js","sourceRoot":"","sources":["../../src/decorators/metadata-readers.ts"],"names":[],"mappings":";;AAqBA,sCAEC;AAKD,kDAEC;AAKD,gEAEC;AAKD,sDAEC;AAKD,0DAEC;AAKD,sDAEC;AAKD,kDAEC;AAhED,2CAQqB;AASrB;;GAEG;AACH,SAAgB,aAAa,CAAC,MAAgB;IAC5C,OAAO,OAAO,CAAC,WAAW,CAAC,gCAAoB,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,MAAgB;IAClD,OAAO,OAAO,CAAC,WAAW,CAAC,8BAAkB,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CAAC,MAAiB;IAC1D,OAAO,OAAO,CAAC,WAAW,CAAC,qCAAyB,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAiB;IACrD,OAAO,OAAO,CAAC,WAAW,CAAC,gCAAoB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,MAAiB;IACvD,OAAO,OAAO,CAAC,WAAW,CAAC,kCAAsB,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAgB;IACpD,OAAO,OAAO,CAAC,WAAW,CAAC,gCAAoB,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,MAAgB;IAClD,OAAO,OAAO,CAAC,WAAW,CAAC,8BAAkB,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/decorators/registry.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,qBAAqB,uBAA8B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.queueEntityIdRegistry = void 0;
|
|
4
|
+
// Registry to track @QueueEntityId usage per class (for duplicate detection)
|
|
5
|
+
exports.queueEntityIdRegistry = new Map();
|
|
6
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/decorators/registry.ts"],"names":[],"mappings":";;;AAAA,6EAA6E;AAChE,QAAA,qBAAqB,GAAG,IAAI,GAAG,EAAoB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { EntityScalerOptions } from './interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* @EntityScaler class decorator
|
|
4
|
+
*
|
|
5
|
+
* Marks a class as an entity scaler provider for a specific entity type.
|
|
6
|
+
* Methods decorated with @GetActiveEntities, @GetDesiredWorkerCount,
|
|
7
|
+
* @OnSpawnWorker, and @OnTerminateWorker define the scaling behavior.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* @EntityScaler({
|
|
12
|
+
* entityType: 'table',
|
|
13
|
+
* maxWorkersPerEntity: 1,
|
|
14
|
+
* })
|
|
15
|
+
* @Injectable()
|
|
16
|
+
* export class TableEntityScaler {
|
|
17
|
+
* constructor(private readonly redis: Redis) {}
|
|
18
|
+
*
|
|
19
|
+
* @GetActiveEntities()
|
|
20
|
+
* async getAllTables(): Promise<string[]> {
|
|
21
|
+
* // Return all table IDs that need workers
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* @GetDesiredWorkerCount()
|
|
25
|
+
* async getWorkerCount(entityId: string): Promise<number> {
|
|
26
|
+
* return 1; // Each table gets 1 worker
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* @OnSpawnWorker()
|
|
30
|
+
* async spawnWorker(entityId: string): Promise<void> {
|
|
31
|
+
* // Called when a worker should be spawned
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function EntityScaler(options: EntityScalerOptions): ClassDecorator;
|
|
37
|
+
/**
|
|
38
|
+
* @GetActiveEntities method decorator
|
|
39
|
+
*
|
|
40
|
+
* Marks a method that returns all active entity IDs for scaling decisions.
|
|
41
|
+
* Used within an @EntityScaler class.
|
|
42
|
+
*/
|
|
43
|
+
export declare function GetActiveEntities(): MethodDecorator;
|
|
44
|
+
/**
|
|
45
|
+
* @GetDesiredWorkerCount method decorator
|
|
46
|
+
*
|
|
47
|
+
* Marks a method that returns the desired worker count for an entity.
|
|
48
|
+
* Used within an @EntityScaler class.
|
|
49
|
+
*/
|
|
50
|
+
export declare function GetDesiredWorkerCount(): MethodDecorator;
|
|
51
|
+
/**
|
|
52
|
+
* @OnSpawnWorker method decorator
|
|
53
|
+
*
|
|
54
|
+
* Marks a method that is called when a worker should be spawned.
|
|
55
|
+
* Used within an @EntityScaler class.
|
|
56
|
+
*/
|
|
57
|
+
export declare function OnSpawnWorker(): MethodDecorator;
|
|
58
|
+
/**
|
|
59
|
+
* @OnTerminateWorker method decorator
|
|
60
|
+
*
|
|
61
|
+
* Marks a method that is called when a worker should be terminated.
|
|
62
|
+
* Used within an @EntityScaler class.
|
|
63
|
+
*/
|
|
64
|
+
export declare function OnTerminateWorker(): MethodDecorator;
|
|
65
|
+
//# sourceMappingURL=scaler.decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaler.decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/scaler.decorators.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CAQzE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,CAcnD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAcvD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,eAAe,CAc/C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,CAcnD"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EntityScaler = EntityScaler;
|
|
4
|
+
exports.GetActiveEntities = GetActiveEntities;
|
|
5
|
+
exports.GetDesiredWorkerCount = GetDesiredWorkerCount;
|
|
6
|
+
exports.OnSpawnWorker = OnSpawnWorker;
|
|
7
|
+
exports.OnTerminateWorker = OnTerminateWorker;
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
/**
|
|
10
|
+
* @EntityScaler class decorator
|
|
11
|
+
*
|
|
12
|
+
* Marks a class as an entity scaler provider for a specific entity type.
|
|
13
|
+
* Methods decorated with @GetActiveEntities, @GetDesiredWorkerCount,
|
|
14
|
+
* @OnSpawnWorker, and @OnTerminateWorker define the scaling behavior.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* @EntityScaler({
|
|
19
|
+
* entityType: 'table',
|
|
20
|
+
* maxWorkersPerEntity: 1,
|
|
21
|
+
* })
|
|
22
|
+
* @Injectable()
|
|
23
|
+
* export class TableEntityScaler {
|
|
24
|
+
* constructor(private readonly redis: Redis) {}
|
|
25
|
+
*
|
|
26
|
+
* @GetActiveEntities()
|
|
27
|
+
* async getAllTables(): Promise<string[]> {
|
|
28
|
+
* // Return all table IDs that need workers
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* @GetDesiredWorkerCount()
|
|
32
|
+
* async getWorkerCount(entityId: string): Promise<number> {
|
|
33
|
+
* return 1; // Each table gets 1 worker
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* @OnSpawnWorker()
|
|
37
|
+
* async spawnWorker(entityId: string): Promise<void> {
|
|
38
|
+
* // Called when a worker should be spawned
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
function EntityScaler(options) {
|
|
44
|
+
return (target) => {
|
|
45
|
+
Reflect.defineMetadata(constants_1.ENTITY_SCALER_METADATA, options, target);
|
|
46
|
+
if (!Reflect.hasMetadata('injectable', target)) {
|
|
47
|
+
Reflect.defineMetadata('injectable', true, target);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @GetActiveEntities method decorator
|
|
53
|
+
*
|
|
54
|
+
* Marks a method that returns all active entity IDs for scaling decisions.
|
|
55
|
+
* Used within an @EntityScaler class.
|
|
56
|
+
*/
|
|
57
|
+
function GetActiveEntities() {
|
|
58
|
+
return (target, propertyKey, descriptor) => {
|
|
59
|
+
Reflect.defineMetadata(constants_1.GET_ACTIVE_ENTITIES_METADATA, true, target, propertyKey);
|
|
60
|
+
Reflect.defineMetadata(constants_1.GET_ACTIVE_ENTITIES_METADATA + ':method', String(propertyKey), target.constructor);
|
|
61
|
+
return descriptor;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @GetDesiredWorkerCount method decorator
|
|
66
|
+
*
|
|
67
|
+
* Marks a method that returns the desired worker count for an entity.
|
|
68
|
+
* Used within an @EntityScaler class.
|
|
69
|
+
*/
|
|
70
|
+
function GetDesiredWorkerCount() {
|
|
71
|
+
return (target, propertyKey, descriptor) => {
|
|
72
|
+
Reflect.defineMetadata(constants_1.GET_DESIRED_WORKER_COUNT_METADATA, true, target, propertyKey);
|
|
73
|
+
Reflect.defineMetadata(constants_1.GET_DESIRED_WORKER_COUNT_METADATA + ':method', String(propertyKey), target.constructor);
|
|
74
|
+
return descriptor;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @OnSpawnWorker method decorator
|
|
79
|
+
*
|
|
80
|
+
* Marks a method that is called when a worker should be spawned.
|
|
81
|
+
* Used within an @EntityScaler class.
|
|
82
|
+
*/
|
|
83
|
+
function OnSpawnWorker() {
|
|
84
|
+
return (target, propertyKey, descriptor) => {
|
|
85
|
+
Reflect.defineMetadata(constants_1.ON_SPAWN_WORKER_METADATA, true, target, propertyKey);
|
|
86
|
+
Reflect.defineMetadata(constants_1.ON_SPAWN_WORKER_METADATA + ':method', String(propertyKey), target.constructor);
|
|
87
|
+
return descriptor;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @OnTerminateWorker method decorator
|
|
92
|
+
*
|
|
93
|
+
* Marks a method that is called when a worker should be terminated.
|
|
94
|
+
* Used within an @EntityScaler class.
|
|
95
|
+
*/
|
|
96
|
+
function OnTerminateWorker() {
|
|
97
|
+
return (target, propertyKey, descriptor) => {
|
|
98
|
+
Reflect.defineMetadata(constants_1.ON_TERMINATE_WORKER_METADATA, true, target, propertyKey);
|
|
99
|
+
Reflect.defineMetadata(constants_1.ON_TERMINATE_WORKER_METADATA + ':method', String(propertyKey), target.constructor);
|
|
100
|
+
return descriptor;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=scaler.decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaler.decorators.js","sourceRoot":"","sources":["../../src/decorators/scaler.decorators.ts"],"names":[],"mappings":";;AA2CA,oCAQC;AAQD,8CAcC;AAQD,sDAcC;AAQD,sCAcC;AAQD,8CAcC;AA3ID,2CAMqB;AAGrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAgB,YAAY,CAAC,OAA4B;IACvD,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,OAAO,CAAC,cAAc,CAAC,kCAAsB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEhE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,CACL,MAAc,EACd,WAA4B,EAC5B,UAA8B,EAC9B,EAAE;QACF,OAAO,CAAC,cAAc,CAAC,wCAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAChF,OAAO,CAAC,cAAc,CACpB,wCAA4B,GAAG,SAAS,EACxC,MAAM,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB;IACnC,OAAO,CACL,MAAc,EACd,WAA4B,EAC5B,UAA8B,EAC9B,EAAE;QACF,OAAO,CAAC,cAAc,CAAC,6CAAiC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACrF,OAAO,CAAC,cAAc,CACpB,6CAAiC,GAAG,SAAS,EAC7C,MAAM,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa;IAC3B,OAAO,CACL,MAAc,EACd,WAA4B,EAC5B,UAA8B,EAC9B,EAAE;QACF,OAAO,CAAC,cAAc,CAAC,oCAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5E,OAAO,CAAC,cAAc,CACpB,oCAAwB,GAAG,SAAS,EACpC,MAAM,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,CACL,MAAc,EACd,WAA4B,EAC5B,UAA8B,EAC9B,EAAE;QACF,OAAO,CAAC,cAAc,CAAC,wCAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAChF,OAAO,CAAC,cAAc,CACpB,wCAA4B,GAAG,SAAS,EACxC,MAAM,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a class is a WorkerProcessor
|
|
4
|
+
*/
|
|
5
|
+
export declare function isWorkerProcessor(target: Type<any>): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Check if a class is an EntityScaler
|
|
8
|
+
*/
|
|
9
|
+
export declare function isEntityScaler(target: Type<any>): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Check if a class is a JobCommand
|
|
12
|
+
*/
|
|
13
|
+
export declare function isJobCommand(target: Function): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Check if a class is a JobQuery
|
|
16
|
+
*/
|
|
17
|
+
export declare function isJobQuery(target: Function): boolean;
|
|
18
|
+
//# sourceMappingURL=type-guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../src/decorators/type-guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAQtC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isWorkerProcessor = isWorkerProcessor;
|
|
4
|
+
exports.isEntityScaler = isEntityScaler;
|
|
5
|
+
exports.isJobCommand = isJobCommand;
|
|
6
|
+
exports.isJobQuery = isJobQuery;
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
/**
|
|
9
|
+
* Check if a class is a WorkerProcessor
|
|
10
|
+
*/
|
|
11
|
+
function isWorkerProcessor(target) {
|
|
12
|
+
return Reflect.hasMetadata(constants_1.WORKER_PROCESSOR_METADATA, target);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if a class is an EntityScaler
|
|
16
|
+
*/
|
|
17
|
+
function isEntityScaler(target) {
|
|
18
|
+
return Reflect.hasMetadata(constants_1.ENTITY_SCALER_METADATA, target);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if a class is a JobCommand
|
|
22
|
+
*/
|
|
23
|
+
function isJobCommand(target) {
|
|
24
|
+
return Reflect.hasMetadata(constants_1.JOB_COMMAND_METADATA, target);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if a class is a JobQuery
|
|
28
|
+
*/
|
|
29
|
+
function isJobQuery(target) {
|
|
30
|
+
return Reflect.hasMetadata(constants_1.JOB_QUERY_METADATA, target);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=type-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../src/decorators/type-guards.ts"],"names":[],"mappings":";;AAWA,8CAEC;AAKD,wCAEC;AAKD,oCAEC;AAKD,gCAEC;AAjCD,2CAKqB;AAErB;;GAEG;AACH,SAAgB,iBAAiB,CAAC,MAAiB;IACjD,OAAO,OAAO,CAAC,WAAW,CAAC,qCAAyB,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAiB;IAC9C,OAAO,OAAO,CAAC,WAAW,CAAC,kCAAsB,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAgB;IAC3C,OAAO,OAAO,CAAC,WAAW,CAAC,gCAAoB,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAgB;IACzC,OAAO,OAAO,CAAC,WAAW,CAAC,8BAAkB,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract parameter name from constructor function by parsing its string representation.
|
|
3
|
+
* Works with TypeScript's 'public readonly paramName' shorthand.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getConstructorParamName(constructor: Function, index: number): string | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* Split parameter string by commas, respecting nested structures
|
|
8
|
+
*/
|
|
9
|
+
export declare function splitParams(paramsStr: string): string[];
|
|
10
|
+
/**
|
|
11
|
+
* Helper to convert class name to kebab-case job name
|
|
12
|
+
* MakeBetCommand -> make-bet
|
|
13
|
+
* ProcessPaymentCommand -> process-payment
|
|
14
|
+
*/
|
|
15
|
+
export declare function deriveJobName(className: string, suffix: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Helper to extract constructor parameter names using reflection
|
|
18
|
+
*/
|
|
19
|
+
export declare function getConstructorParamNames(target: Function): string[];
|
|
20
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/decorators/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuBhG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBvD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,CAwBnE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConstructorParamName = getConstructorParamName;
|
|
4
|
+
exports.splitParams = splitParams;
|
|
5
|
+
exports.deriveJobName = deriveJobName;
|
|
6
|
+
exports.getConstructorParamNames = getConstructorParamNames;
|
|
7
|
+
/**
|
|
8
|
+
* Extract parameter name from constructor function by parsing its string representation.
|
|
9
|
+
* Works with TypeScript's 'public readonly paramName' shorthand.
|
|
10
|
+
*/
|
|
11
|
+
function getConstructorParamName(constructor, index) {
|
|
12
|
+
const fnStr = constructor.toString();
|
|
13
|
+
// Match constructor parameters - handles various formats
|
|
14
|
+
const constructorMatch = fnStr.match(/constructor\s*\(([^)]*)\)/);
|
|
15
|
+
if (!constructorMatch)
|
|
16
|
+
return undefined;
|
|
17
|
+
const paramsStr = constructorMatch[1];
|
|
18
|
+
if (!paramsStr.trim())
|
|
19
|
+
return undefined;
|
|
20
|
+
// Split by comma, but be careful with nested generics/objects
|
|
21
|
+
const params = splitParams(paramsStr);
|
|
22
|
+
if (index >= params.length)
|
|
23
|
+
return undefined;
|
|
24
|
+
const param = params[index].trim();
|
|
25
|
+
// Extract the actual parameter name, handling:
|
|
26
|
+
// - @Decorator() public readonly paramName: Type
|
|
27
|
+
// - public readonly paramName: Type
|
|
28
|
+
// - paramName: Type
|
|
29
|
+
// - paramName
|
|
30
|
+
const nameMatch = param.match(/(?:@\w+\([^)]*\)\s*)*(?:public\s+)?(?:readonly\s+)?(\w+)/);
|
|
31
|
+
return nameMatch ? nameMatch[1] : undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Split parameter string by commas, respecting nested structures
|
|
35
|
+
*/
|
|
36
|
+
function splitParams(paramsStr) {
|
|
37
|
+
const params = [];
|
|
38
|
+
let current = '';
|
|
39
|
+
let depth = 0;
|
|
40
|
+
for (const char of paramsStr) {
|
|
41
|
+
if (char === '(' || char === '<' || char === '{' || char === '[') {
|
|
42
|
+
depth++;
|
|
43
|
+
current += char;
|
|
44
|
+
}
|
|
45
|
+
else if (char === ')' || char === '>' || char === '}' || char === ']') {
|
|
46
|
+
depth--;
|
|
47
|
+
current += char;
|
|
48
|
+
}
|
|
49
|
+
else if (char === ',' && depth === 0) {
|
|
50
|
+
params.push(current);
|
|
51
|
+
current = '';
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
current += char;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (current.trim()) {
|
|
58
|
+
params.push(current);
|
|
59
|
+
}
|
|
60
|
+
return params;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Helper to convert class name to kebab-case job name
|
|
64
|
+
* MakeBetCommand -> make-bet
|
|
65
|
+
* ProcessPaymentCommand -> process-payment
|
|
66
|
+
*/
|
|
67
|
+
function deriveJobName(className, suffix) {
|
|
68
|
+
return className
|
|
69
|
+
.replace(new RegExp(`${suffix}$`), '')
|
|
70
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
71
|
+
.toLowerCase();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Helper to extract constructor parameter names using reflection
|
|
75
|
+
*/
|
|
76
|
+
function getConstructorParamNames(target) {
|
|
77
|
+
const paramTypes = Reflect.getMetadata('design:paramtypes', target) || [];
|
|
78
|
+
// Try to extract parameter names from the constructor string
|
|
79
|
+
const constructorStr = target.toString();
|
|
80
|
+
const match = constructorStr.match(/constructor\s*\(([^)]*)\)/);
|
|
81
|
+
if (match && match[1]) {
|
|
82
|
+
return match[1]
|
|
83
|
+
.split(',')
|
|
84
|
+
.map((param) => {
|
|
85
|
+
// Handle various patterns:
|
|
86
|
+
// "public readonly tableId: string" -> "tableId"
|
|
87
|
+
// "tableId" -> "tableId"
|
|
88
|
+
// "private tableId: string" -> "tableId"
|
|
89
|
+
const cleaned = param.trim();
|
|
90
|
+
const nameMatch = cleaned.match(/(?:public\s+)?(?:private\s+)?(?:protected\s+)?(?:readonly\s+)?(\w+)/);
|
|
91
|
+
return nameMatch ? nameMatch[1] : cleaned;
|
|
92
|
+
})
|
|
93
|
+
.filter((name) => name.length > 0);
|
|
94
|
+
}
|
|
95
|
+
// Fallback: generate param0, param1, etc.
|
|
96
|
+
return paramTypes.map((_, i) => `param${i}`);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/decorators/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { WorkerProcessorOptions } from './interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* @WorkerProcessor class decorator
|
|
4
|
+
*
|
|
5
|
+
* Marks a class as a worker processor for a specific entity type.
|
|
6
|
+
* Combined with @JobHandler method decorators, this enables declarative
|
|
7
|
+
* job processing with automatic worker creation and management.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* @WorkerProcessor({
|
|
12
|
+
* entityType: 'table',
|
|
13
|
+
* queueName: (tableId) => `${tableId}-queue`,
|
|
14
|
+
* workerName: (tableId) => `table-worker-${tableId}`,
|
|
15
|
+
* workerConfig: {
|
|
16
|
+
* concurrency: 1,
|
|
17
|
+
* heartbeatTTL: 3,
|
|
18
|
+
* }
|
|
19
|
+
* })
|
|
20
|
+
* @Injectable()
|
|
21
|
+
* export class TableWorkerProcessor {
|
|
22
|
+
* constructor(private readonly commandBus: CommandBus) {}
|
|
23
|
+
*
|
|
24
|
+
* @JobHandler('make-bet')
|
|
25
|
+
* async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
|
|
26
|
+
* return this.commandBus.execute(new MakeBetCommand(entityId, job.data));
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* @JobHandler('*') // Wildcard handler for any unmatched job
|
|
30
|
+
* async handleDynamic(job: Job, entityId: string) {
|
|
31
|
+
* // Dynamic handling
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function WorkerProcessor(options: WorkerProcessorOptions): ClassDecorator;
|
|
37
|
+
/**
|
|
38
|
+
* @JobHandler method decorator
|
|
39
|
+
*
|
|
40
|
+
* Marks a method as a handler for a specific job name.
|
|
41
|
+
* Use '*' as jobName to create a wildcard handler that catches
|
|
42
|
+
* any jobs not matched by specific handlers.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* @JobHandler('make-bet')
|
|
47
|
+
* async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
|
|
48
|
+
* // Handle make-bet jobs
|
|
49
|
+
* }
|
|
50
|
+
*
|
|
51
|
+
* @JobHandler('*')
|
|
52
|
+
* async handleOther(job: Job, entityId: string) {
|
|
53
|
+
* // Handle any other jobs
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function JobHandler(jobName: string): MethodDecorator;
|
|
58
|
+
//# sourceMappingURL=worker.decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/worker.decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,cAAc,CAc/E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAyB3D"}
|