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.
Files changed (229) hide show
  1. package/README.md +300 -283
  2. package/dist/decorators/constants.d.ts +17 -0
  3. package/dist/decorators/constants.d.ts.map +1 -0
  4. package/dist/decorators/constants.js +23 -0
  5. package/dist/decorators/constants.js.map +1 -0
  6. package/dist/decorators/entity.decorators.d.ts +88 -0
  7. package/dist/decorators/entity.decorators.d.ts.map +1 -0
  8. package/dist/decorators/entity.decorators.js +150 -0
  9. package/dist/decorators/entity.decorators.js.map +1 -0
  10. package/dist/decorators/index.d.ts +9 -1
  11. package/dist/decorators/index.d.ts.map +1 -1
  12. package/dist/decorators/index.js +9 -1
  13. package/dist/decorators/index.js.map +1 -1
  14. package/dist/decorators/interfaces.d.ts +130 -0
  15. package/dist/decorators/interfaces.d.ts.map +1 -0
  16. package/dist/decorators/interfaces.js +3 -0
  17. package/dist/decorators/interfaces.js.map +1 -0
  18. package/dist/decorators/job.decorators.d.ts +60 -0
  19. package/dist/decorators/job.decorators.d.ts.map +1 -0
  20. package/dist/decorators/job.decorators.js +97 -0
  21. package/dist/decorators/job.decorators.js.map +1 -0
  22. package/dist/decorators/legacy.decorators.d.ts +36 -0
  23. package/dist/decorators/legacy.decorators.d.ts.map +1 -0
  24. package/dist/decorators/legacy.decorators.js +61 -0
  25. package/dist/decorators/legacy.decorators.js.map +1 -0
  26. package/dist/decorators/metadata-readers.d.ts +31 -0
  27. package/dist/decorators/metadata-readers.d.ts.map +1 -0
  28. package/dist/decorators/metadata-readers.js +53 -0
  29. package/dist/decorators/metadata-readers.js.map +1 -0
  30. package/dist/decorators/registry.d.ts +2 -0
  31. package/dist/decorators/registry.d.ts.map +1 -0
  32. package/dist/decorators/registry.js +6 -0
  33. package/dist/decorators/registry.js.map +1 -0
  34. package/dist/decorators/scaler.decorators.d.ts +65 -0
  35. package/dist/decorators/scaler.decorators.d.ts.map +1 -0
  36. package/dist/decorators/scaler.decorators.js +103 -0
  37. package/dist/decorators/scaler.decorators.js.map +1 -0
  38. package/dist/decorators/type-guards.d.ts +18 -0
  39. package/dist/decorators/type-guards.d.ts.map +1 -0
  40. package/dist/decorators/type-guards.js +32 -0
  41. package/dist/decorators/type-guards.js.map +1 -0
  42. package/dist/decorators/utils.d.ts +20 -0
  43. package/dist/decorators/utils.d.ts.map +1 -0
  44. package/dist/decorators/utils.js +98 -0
  45. package/dist/decorators/utils.js.map +1 -0
  46. package/dist/decorators/worker.decorators.d.ts +58 -0
  47. package/dist/decorators/worker.decorators.d.ts.map +1 -0
  48. package/dist/decorators/worker.decorators.js +92 -0
  49. package/dist/decorators/worker.decorators.js.map +1 -0
  50. package/dist/domain/interfaces/config.interfaces.d.ts +188 -0
  51. package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -0
  52. package/dist/domain/interfaces/config.interfaces.js +3 -0
  53. package/dist/domain/interfaces/config.interfaces.js.map +1 -0
  54. package/dist/domain/interfaces/cqrs.interfaces.d.ts +7 -0
  55. package/dist/domain/interfaces/cqrs.interfaces.d.ts.map +1 -0
  56. package/dist/domain/interfaces/cqrs.interfaces.js +3 -0
  57. package/dist/domain/interfaces/cqrs.interfaces.js.map +1 -0
  58. package/dist/domain/interfaces/event.interfaces.d.ts +71 -0
  59. package/dist/domain/interfaces/event.interfaces.d.ts.map +1 -0
  60. package/dist/domain/interfaces/event.interfaces.js +3 -0
  61. package/dist/domain/interfaces/event.interfaces.js.map +1 -0
  62. package/dist/domain/interfaces/index-tracking.interfaces.d.ts +69 -0
  63. package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +1 -0
  64. package/dist/domain/interfaces/index-tracking.interfaces.js +3 -0
  65. package/dist/domain/interfaces/index-tracking.interfaces.js.map +1 -0
  66. package/dist/domain/interfaces/index.d.ts +12 -0
  67. package/dist/domain/interfaces/index.d.ts.map +1 -0
  68. package/dist/domain/interfaces/index.js +28 -0
  69. package/dist/domain/interfaces/index.js.map +1 -0
  70. package/dist/domain/interfaces/job.interfaces.d.ts +76 -0
  71. package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -0
  72. package/dist/domain/interfaces/job.interfaces.js +3 -0
  73. package/dist/domain/interfaces/job.interfaces.js.map +1 -0
  74. package/dist/domain/interfaces/lock.interfaces.d.ts +54 -0
  75. package/dist/domain/interfaces/lock.interfaces.d.ts.map +1 -0
  76. package/dist/domain/interfaces/lock.interfaces.js +3 -0
  77. package/dist/domain/interfaces/lock.interfaces.js.map +1 -0
  78. package/dist/domain/interfaces/process.interfaces.d.ts +44 -0
  79. package/dist/domain/interfaces/process.interfaces.d.ts.map +1 -0
  80. package/dist/domain/interfaces/process.interfaces.js +3 -0
  81. package/dist/domain/interfaces/process.interfaces.js.map +1 -0
  82. package/dist/domain/interfaces/queue.interfaces.d.ts +46 -0
  83. package/dist/domain/interfaces/queue.interfaces.d.ts.map +1 -0
  84. package/dist/domain/interfaces/queue.interfaces.js +3 -0
  85. package/dist/domain/interfaces/queue.interfaces.js.map +1 -0
  86. package/dist/domain/interfaces/scaling.interfaces.d.ts +62 -0
  87. package/dist/domain/interfaces/scaling.interfaces.d.ts.map +1 -0
  88. package/dist/domain/interfaces/scaling.interfaces.js +3 -0
  89. package/dist/domain/interfaces/scaling.interfaces.js.map +1 -0
  90. package/dist/domain/interfaces/utility.types.d.ts +15 -0
  91. package/dist/domain/interfaces/utility.types.d.ts.map +1 -0
  92. package/dist/domain/interfaces/utility.types.js +3 -0
  93. package/dist/domain/interfaces/utility.types.js.map +1 -0
  94. package/dist/domain/interfaces/worker.interfaces.d.ts +120 -0
  95. package/dist/domain/interfaces/worker.interfaces.d.ts.map +1 -0
  96. package/dist/domain/interfaces/worker.interfaces.js +3 -0
  97. package/dist/domain/interfaces/worker.interfaces.js.map +1 -0
  98. package/dist/module/atomic-queues.module.d.ts.map +1 -1
  99. package/dist/module/atomic-queues.module.js +5 -0
  100. package/dist/module/atomic-queues.module.js.map +1 -1
  101. package/dist/services/cron-manager/cron-manager.service.d.ts +5 -4
  102. package/dist/services/cron-manager/cron-manager.service.d.ts.map +1 -1
  103. package/dist/services/cron-manager/cron-manager.service.js +26 -57
  104. package/dist/services/cron-manager/cron-manager.service.js.map +1 -1
  105. package/dist/services/index-manager/index-manager.service.d.ts +0 -4
  106. package/dist/services/index-manager/index-manager.service.d.ts.map +1 -1
  107. package/dist/services/index-manager/index-manager.service.js +4 -16
  108. package/dist/services/index-manager/index-manager.service.js.map +1 -1
  109. package/dist/services/index.d.ts +1 -0
  110. package/dist/services/index.d.ts.map +1 -1
  111. package/dist/services/index.js +1 -0
  112. package/dist/services/index.js.map +1 -1
  113. package/dist/services/processor-discovery/decorator-discovery.service.d.ts +40 -0
  114. package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +1 -0
  115. package/dist/services/processor-discovery/decorator-discovery.service.js +191 -0
  116. package/dist/services/processor-discovery/decorator-discovery.service.js.map +1 -0
  117. package/dist/services/processor-discovery/index.d.ts +4 -0
  118. package/dist/services/processor-discovery/index.d.ts.map +1 -1
  119. package/dist/services/processor-discovery/index.js +4 -0
  120. package/dist/services/processor-discovery/index.js.map +1 -1
  121. package/dist/services/processor-discovery/processor-discovery.service.d.ts +30 -138
  122. package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +1 -1
  123. package/dist/services/processor-discovery/processor-discovery.service.js +125 -502
  124. package/dist/services/processor-discovery/processor-discovery.service.js.map +1 -1
  125. package/dist/services/processor-discovery/processor-registry.d.ts +58 -0
  126. package/dist/services/processor-discovery/processor-registry.d.ts.map +1 -0
  127. package/dist/services/processor-discovery/processor-registry.js +74 -0
  128. package/dist/services/processor-discovery/processor-registry.js.map +1 -0
  129. package/dist/services/processor-discovery/scaling-registration.service.d.ts +60 -0
  130. package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +1 -0
  131. package/dist/services/processor-discovery/scaling-registration.service.js +261 -0
  132. package/dist/services/processor-discovery/scaling-registration.service.js.map +1 -0
  133. package/dist/services/processor-discovery/worker-factory.service.d.ts +54 -0
  134. package/dist/services/processor-discovery/worker-factory.service.d.ts.map +1 -0
  135. package/dist/services/processor-discovery/worker-factory.service.js +185 -0
  136. package/dist/services/processor-discovery/worker-factory.service.js.map +1 -0
  137. package/dist/services/queue-bus/entity-target.d.ts +58 -0
  138. package/dist/services/queue-bus/entity-target.d.ts.map +1 -0
  139. package/dist/services/queue-bus/entity-target.js +109 -0
  140. package/dist/services/queue-bus/entity-target.js.map +1 -0
  141. package/dist/services/queue-bus/index.d.ts +4 -0
  142. package/dist/services/queue-bus/index.d.ts.map +1 -1
  143. package/dist/services/queue-bus/index.js +4 -0
  144. package/dist/services/queue-bus/index.js.map +1 -1
  145. package/dist/services/queue-bus/queue-bus.service.d.ts +9 -145
  146. package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
  147. package/dist/services/queue-bus/queue-bus.service.js +23 -311
  148. package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
  149. package/dist/services/queue-bus/queue-bus.types.d.ts +40 -0
  150. package/dist/services/queue-bus/queue-bus.types.d.ts.map +1 -0
  151. package/dist/services/queue-bus/queue-bus.types.js +3 -0
  152. package/dist/services/queue-bus/queue-bus.types.js.map +1 -0
  153. package/dist/services/queue-bus/queue-bus.utils.d.ts +34 -0
  154. package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -0
  155. package/dist/services/queue-bus/queue-bus.utils.js +82 -0
  156. package/dist/services/queue-bus/queue-bus.utils.js.map +1 -0
  157. package/dist/services/queue-bus/queue-target.d.ts +61 -0
  158. package/dist/services/queue-bus/queue-target.d.ts.map +1 -0
  159. package/dist/services/queue-bus/queue-target.js +123 -0
  160. package/dist/services/queue-bus/queue-target.js.map +1 -0
  161. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +23 -6
  162. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +1 -1
  163. package/dist/services/queue-events-manager/queue-events-manager.service.js +69 -37
  164. package/dist/services/queue-events-manager/queue-events-manager.service.js.map +1 -1
  165. package/dist/services/resource-lock/resource-lock.service.d.ts +0 -4
  166. package/dist/services/resource-lock/resource-lock.service.d.ts.map +1 -1
  167. package/dist/services/resource-lock/resource-lock.service.js +4 -16
  168. package/dist/services/resource-lock/resource-lock.service.js.map +1 -1
  169. package/dist/services/service-queue/index.d.ts +1 -0
  170. package/dist/services/service-queue/index.d.ts.map +1 -1
  171. package/dist/services/service-queue/index.js +1 -0
  172. package/dist/services/service-queue/index.js.map +1 -1
  173. package/dist/services/service-queue/service-queue.service.d.ts +2 -35
  174. package/dist/services/service-queue/service-queue.service.d.ts.map +1 -1
  175. package/dist/services/service-queue/service-queue.service.js +17 -49
  176. package/dist/services/service-queue/service-queue.service.js.map +1 -1
  177. package/dist/services/service-queue/service-queue.types.d.ts +32 -0
  178. package/dist/services/service-queue/service-queue.types.d.ts.map +1 -0
  179. package/dist/services/service-queue/service-queue.types.js +27 -0
  180. package/dist/services/service-queue/service-queue.types.js.map +1 -0
  181. package/dist/services/spawn-queue/index.d.ts +2 -0
  182. package/dist/services/spawn-queue/index.d.ts.map +1 -0
  183. package/dist/services/spawn-queue/index.js +18 -0
  184. package/dist/services/spawn-queue/index.js.map +1 -0
  185. package/dist/services/spawn-queue/spawn-queue.service.d.ts +119 -0
  186. package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +1 -0
  187. package/dist/services/spawn-queue/spawn-queue.service.js +273 -0
  188. package/dist/services/spawn-queue/spawn-queue.service.js.map +1 -0
  189. package/dist/services/worker-manager/worker-manager.service.d.ts +18 -3
  190. package/dist/services/worker-manager/worker-manager.service.d.ts.map +1 -1
  191. package/dist/services/worker-manager/worker-manager.service.js +46 -21
  192. package/dist/services/worker-manager/worker-manager.service.js.map +1 -1
  193. package/dist/utils/async.utils.d.ts +51 -0
  194. package/dist/utils/async.utils.d.ts.map +1 -0
  195. package/dist/utils/async.utils.js +87 -0
  196. package/dist/utils/async.utils.js.map +1 -0
  197. package/dist/utils/helpers.d.ts +4 -123
  198. package/dist/utils/helpers.d.ts.map +1 -1
  199. package/dist/utils/helpers.js +18 -226
  200. package/dist/utils/helpers.js.map +1 -1
  201. package/dist/utils/index.d.ts +1 -0
  202. package/dist/utils/index.d.ts.map +1 -1
  203. package/dist/utils/index.js +1 -0
  204. package/dist/utils/index.js.map +1 -1
  205. package/dist/utils/job.utils.d.ts +50 -0
  206. package/dist/utils/job.utils.d.ts.map +1 -0
  207. package/dist/utils/job.utils.js +89 -0
  208. package/dist/utils/job.utils.js.map +1 -0
  209. package/dist/utils/naming.utils.d.ts +21 -0
  210. package/dist/utils/naming.utils.d.ts.map +1 -0
  211. package/dist/utils/naming.utils.js +38 -0
  212. package/dist/utils/naming.utils.js.map +1 -0
  213. package/dist/utils/rate-limit.utils.d.ts +9 -0
  214. package/dist/utils/rate-limit.utils.d.ts.map +1 -0
  215. package/dist/utils/rate-limit.utils.js +30 -0
  216. package/dist/utils/rate-limit.utils.js.map +1 -0
  217. package/dist/utils/redis.utils.d.ts +3 -0
  218. package/dist/utils/redis.utils.d.ts.map +1 -0
  219. package/dist/utils/redis.utils.js +14 -0
  220. package/dist/utils/redis.utils.js.map +1 -0
  221. package/package.json +17 -17
  222. package/dist/decorators/decorators.d.ts +0 -489
  223. package/dist/decorators/decorators.d.ts.map +0 -1
  224. package/dist/decorators/decorators.js +0 -680
  225. package/dist/decorators/decorators.js.map +0 -1
  226. package/dist/domain/interfaces.d.ts +0 -748
  227. package/dist/domain/interfaces.d.ts.map +0 -1
  228. package/dist/domain/interfaces.js +0 -19
  229. package/dist/domain/interfaces.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/decorators.ts"],"names":[],"mappings":"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"}
@@ -1,680 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InjectAtomicQueue = exports.JobType = exports.EntityId = exports.AtomicProcessor = exports.JOB_QUERY_METADATA = exports.JOB_COMMAND_METADATA = exports.ON_TERMINATE_WORKER_METADATA = exports.ON_SPAWN_WORKER_METADATA = exports.GET_DESIRED_WORKER_COUNT_METADATA = exports.GET_ACTIVE_ENTITIES_METADATA = exports.ENTITY_SCALER_METADATA = exports.JOB_HANDLER_METADATA = exports.WORKER_PROCESSOR_METADATA = exports.JOB_TYPE_METADATA = exports.ENTITY_ID_METADATA = exports.ENTITY_TYPE_METADATA = exports.ATOMIC_PROCESSOR_METADATA = void 0;
4
- exports.EntityType = EntityType;
5
- exports.QueueEntityId = QueueEntityId;
6
- exports.getEntityType = getEntityType;
7
- exports.getEntityIdProperty = getEntityIdProperty;
8
- exports.QueueEntity = QueueEntity;
9
- exports.WorkerProcessor = WorkerProcessor;
10
- exports.JobHandler = JobHandler;
11
- exports.EntityScaler = EntityScaler;
12
- exports.GetActiveEntities = GetActiveEntities;
13
- exports.GetDesiredWorkerCount = GetDesiredWorkerCount;
14
- exports.OnSpawnWorker = OnSpawnWorker;
15
- exports.OnTerminateWorker = OnTerminateWorker;
16
- exports.JobCommand = JobCommand;
17
- exports.JobQuery = JobQuery;
18
- exports.getJobCommandMetadata = getJobCommandMetadata;
19
- exports.getJobQueryMetadata = getJobQueryMetadata;
20
- exports.isJobCommand = isJobCommand;
21
- exports.isJobQuery = isJobQuery;
22
- exports.getWorkerProcessorMetadata = getWorkerProcessorMetadata;
23
- exports.getJobHandlerMetadata = getJobHandlerMetadata;
24
- exports.getEntityScalerMetadata = getEntityScalerMetadata;
25
- exports.isWorkerProcessor = isWorkerProcessor;
26
- exports.isEntityScaler = isEntityScaler;
27
- const common_1 = require("@nestjs/common");
28
- // =============================================================================
29
- // METADATA KEYS
30
- // =============================================================================
31
- /**
32
- * Metadata keys for decorators
33
- */
34
- exports.ATOMIC_PROCESSOR_METADATA = 'atomic:processor';
35
- exports.ENTITY_TYPE_METADATA = 'atomic:entity-type';
36
- exports.ENTITY_ID_METADATA = 'atomic:entity-id';
37
- exports.JOB_TYPE_METADATA = 'atomic:job-type';
38
- exports.WORKER_PROCESSOR_METADATA = 'atomic:worker-processor';
39
- exports.JOB_HANDLER_METADATA = 'atomic:job-handler';
40
- exports.ENTITY_SCALER_METADATA = 'atomic:entity-scaler';
41
- exports.GET_ACTIVE_ENTITIES_METADATA = 'atomic:get-active-entities';
42
- exports.GET_DESIRED_WORKER_COUNT_METADATA = 'atomic:get-desired-worker-count';
43
- exports.ON_SPAWN_WORKER_METADATA = 'atomic:on-spawn-worker';
44
- exports.ON_TERMINATE_WORKER_METADATA = 'atomic:on-terminate-worker';
45
- exports.JOB_COMMAND_METADATA = 'atomic:job-command';
46
- exports.JOB_QUERY_METADATA = 'atomic:job-query';
47
- // Registry to track @QueueEntityId usage per class (for duplicate detection)
48
- const queueEntityIdRegistry = new Map();
49
- // =============================================================================
50
- // LEGACY DECORATORS (Preserved for backward compatibility)
51
- // =============================================================================
52
- /**
53
- * @AtomicProcessor decorator (LEGACY)
54
- *
55
- * Marks a method as an atomic job processor.
56
- * Can be used on handler methods to auto-register them.
57
- *
58
- * @deprecated Use @WorkerProcessor class decorator with @JobHandler method decorators instead
59
- *
60
- * @example
61
- * ```typescript
62
- * @Injectable()
63
- * export class MessageProcessor {
64
- * @AtomicProcessor('send-message')
65
- * async handleSendMessage(job: Job<IAtomicJobData>) {
66
- * // Process the job
67
- * }
68
- * }
69
- * ```
70
- */
71
- const AtomicProcessor = (jobType) => {
72
- return (0, common_1.SetMetadata)(exports.ATOMIC_PROCESSOR_METADATA, jobType);
73
- };
74
- exports.AtomicProcessor = AtomicProcessor;
75
- /**
76
- * @EntityType decorator
77
- *
78
- * Marks a command/query class with its entity type for automatic routing.
79
- * When present, queueBus.enqueue(cmd) can auto-route without forEntity().
80
- *
81
- * @example
82
- * ```typescript
83
- * @EntityType('account')
84
- * export class WithdrawCommand {
85
- * @QueueEntityId()
86
- * public readonly accountId: string;
87
- * public readonly amount: number;
88
- * }
89
- *
90
- * // Can now use direct enqueue:
91
- * await queueBus.enqueue(new WithdrawCommand(accountId, amount));
92
- * ```
93
- */
94
- function EntityType(entityType) {
95
- return (target) => {
96
- Reflect.defineMetadata(exports.ENTITY_TYPE_METADATA, entityType, target);
97
- };
98
- }
99
- /**
100
- * @QueueEntityId decorator
101
- *
102
- * Marks a property OR constructor parameter as the entity ID for queue routing.
103
- * Only ONE @QueueEntityId() allowed per class (enforced at decoration time).
104
- * Overrides module-level defaultEntityId configuration.
105
- *
106
- * @example Property decorator:
107
- * ```typescript
108
- * export class TransferCommand {
109
- * @QueueEntityId()
110
- * public readonly sourceAccountId: string;
111
- * public readonly amount: number;
112
- * }
113
- * ```
114
- *
115
- * @example Parameter decorator (recommended):
116
- * ```typescript
117
- * @QueueEntity('account')
118
- * export class TransferCommand {
119
- * constructor(
120
- * @QueueEntityId() public readonly sourceAccountId: string,
121
- * public readonly amount: number,
122
- * ) {}
123
- * }
124
- * ```
125
- */
126
- function QueueEntityId() {
127
- return (target, propertyKey, parameterIndex) => {
128
- // Parameter decorator case (on constructor param)
129
- if (typeof parameterIndex === 'number') {
130
- const constructor = target;
131
- const className = constructor.name;
132
- // Extract parameter name from constructor
133
- const paramName = getConstructorParamName(constructor, parameterIndex);
134
- if (!paramName) {
135
- throw new Error(`Cannot determine parameter name at index ${parameterIndex} in ${className}. ` +
136
- `Ensure you're using 'public readonly paramName' syntax.`);
137
- }
138
- // Check for duplicate
139
- const existing = queueEntityIdRegistry.get(constructor);
140
- if (existing) {
141
- throw new Error(`Multiple @QueueEntityId() decorators on ${className}. ` +
142
- `Found on '${existing}' and '${paramName}'. ` +
143
- `Only one parameter/property can be the entity ID.`);
144
- }
145
- queueEntityIdRegistry.set(constructor, paramName);
146
- Reflect.defineMetadata(exports.ENTITY_ID_METADATA, paramName, constructor);
147
- return;
148
- }
149
- // Property decorator case (on class property)
150
- const constructor = target.constructor;
151
- const className = constructor.name;
152
- const propName = String(propertyKey);
153
- // Check for duplicate @QueueEntityId on same class
154
- const existing = queueEntityIdRegistry.get(constructor);
155
- if (existing) {
156
- throw new Error(`Multiple @QueueEntityId() decorators on ${className}. ` +
157
- `Found on '${existing}' and '${propName}'. ` +
158
- `Only one property can be the entity ID.`);
159
- }
160
- queueEntityIdRegistry.set(constructor, propName);
161
- Reflect.defineMetadata(exports.ENTITY_ID_METADATA, propName, constructor);
162
- };
163
- }
164
- /**
165
- * @deprecated Use @QueueEntityId() instead. This alias is provided for backwards compatibility.
166
- */
167
- exports.EntityId = QueueEntityId;
168
- /**
169
- * Extract parameter name from constructor function by parsing its string representation.
170
- * Works with TypeScript's 'public readonly paramName' shorthand.
171
- */
172
- function getConstructorParamName(constructor, index) {
173
- const fnStr = constructor.toString();
174
- // Match constructor parameters - handles various formats
175
- const constructorMatch = fnStr.match(/constructor\s*\(([^)]*)\)/);
176
- if (!constructorMatch)
177
- return undefined;
178
- const paramsStr = constructorMatch[1];
179
- if (!paramsStr.trim())
180
- return undefined;
181
- // Split by comma, but be careful with nested generics/objects
182
- const params = splitParams(paramsStr);
183
- if (index >= params.length)
184
- return undefined;
185
- const param = params[index].trim();
186
- // Extract the actual parameter name, handling:
187
- // - @Decorator() public readonly paramName: Type
188
- // - public readonly paramName: Type
189
- // - paramName: Type
190
- // - paramName
191
- const nameMatch = param.match(/(?:@\w+\([^)]*\)\s*)*(?:public\s+)?(?:readonly\s+)?(\w+)/);
192
- return nameMatch ? nameMatch[1] : undefined;
193
- }
194
- /**
195
- * Split parameter string by commas, respecting nested structures
196
- */
197
- function splitParams(paramsStr) {
198
- const params = [];
199
- let current = '';
200
- let depth = 0;
201
- for (const char of paramsStr) {
202
- if (char === '(' || char === '<' || char === '{' || char === '[') {
203
- depth++;
204
- current += char;
205
- }
206
- else if (char === ')' || char === '>' || char === '}' || char === ']') {
207
- depth--;
208
- current += char;
209
- }
210
- else if (char === ',' && depth === 0) {
211
- params.push(current);
212
- current = '';
213
- }
214
- else {
215
- current += char;
216
- }
217
- }
218
- if (current.trim()) {
219
- params.push(current);
220
- }
221
- return params;
222
- }
223
- /**
224
- * Get the entity type from a command/query class decorated with @EntityType or @QueueEntity
225
- */
226
- function getEntityType(target) {
227
- return Reflect.getMetadata(exports.ENTITY_TYPE_METADATA, target);
228
- }
229
- /**
230
- * Get the entity ID property name from a class decorated with @QueueEntityId or @QueueEntity
231
- */
232
- function getEntityIdProperty(target) {
233
- return Reflect.getMetadata(exports.ENTITY_ID_METADATA, target);
234
- }
235
- // =============================================================================
236
- // NEW COMBINED DECORATOR - Less Invasive
237
- // =============================================================================
238
- /**
239
- * @QueueEntity decorator
240
- *
241
- * Single decorator that combines @EntityType and @QueueEntityId into one.
242
- * This is the recommended way to mark commands/queries for queue routing.
243
- *
244
- * @param entityType - The entity type for routing (e.g., 'table', 'account')
245
- * @param entityIdProperty - Optional property name containing the entity ID.
246
- * If omitted, uses module-level defaultEntityId from entities config.
247
- *
248
- * @example
249
- * // With explicit property name:
250
- * @QueueEntity('table', 'tableId')
251
- * export class MakeBetCommand {
252
- * constructor(
253
- * public readonly tableId: string, // ← unchanged!
254
- * public readonly amount: number,
255
- * ) {}
256
- * }
257
- *
258
- * @example
259
- * // Using module default (entities config has defaultEntityId: 'tableId'):
260
- * @QueueEntity('table')
261
- * export class DealCommand {
262
- * constructor(
263
- * public readonly tableId: string,
264
- * public readonly card: string,
265
- * ) {}
266
- * }
267
- *
268
- * @example
269
- * // Then just enqueue directly:
270
- * await queueBus.enqueue(new MakeBetCommand(tableId, 100));
271
- */
272
- function QueueEntity(entityType, entityIdProperty) {
273
- return (target) => {
274
- // Always set entity type
275
- Reflect.defineMetadata(exports.ENTITY_TYPE_METADATA, entityType, target);
276
- // Set entity ID property if provided (otherwise falls back to module config)
277
- if (entityIdProperty) {
278
- Reflect.defineMetadata(exports.ENTITY_ID_METADATA, entityIdProperty, target);
279
- }
280
- };
281
- }
282
- /**
283
- * @JobType decorator (LEGACY)
284
- *
285
- * Specifies the job type for a processor method.
286
- *
287
- * @deprecated Use @JobHandler method decorator instead
288
- */
289
- const JobType = (jobType) => {
290
- return (0, common_1.SetMetadata)(exports.JOB_TYPE_METADATA, jobType);
291
- };
292
- exports.JobType = JobType;
293
- /**
294
- * @InjectAtomicQueue decorator
295
- *
296
- * Custom parameter decorator for injecting a specific queue.
297
- * Useful when you need direct access to a queue in a service.
298
- */
299
- const InjectAtomicQueue = (entityType, entityId) => {
300
- return (target, propertyKey, parameterIndex) => {
301
- const existingParams = Reflect.getMetadata('atomic:inject-queue', target, propertyKey) || [];
302
- existingParams.push({
303
- type: entityType,
304
- id: entityId,
305
- index: parameterIndex,
306
- });
307
- Reflect.defineMetadata('atomic:inject-queue', existingParams, target, propertyKey);
308
- };
309
- };
310
- exports.InjectAtomicQueue = InjectAtomicQueue;
311
- // =============================================================================
312
- // NEW DECORATORS - Worker-First Architecture
313
- // =============================================================================
314
- /**
315
- * @WorkerProcessor class decorator
316
- *
317
- * Marks a class as a worker processor for a specific entity type.
318
- * Combined with @JobHandler method decorators, this enables declarative
319
- * job processing with automatic worker creation and management.
320
- *
321
- * @example
322
- * ```typescript
323
- * @WorkerProcessor({
324
- * entityType: 'table',
325
- * queueName: (tableId) => `${tableId}-queue`,
326
- * workerName: (tableId) => `table-worker-${tableId}`,
327
- * workerConfig: {
328
- * concurrency: 1,
329
- * heartbeatTTL: 3,
330
- * }
331
- * })
332
- * @Injectable()
333
- * export class TableWorkerProcessor {
334
- * constructor(private readonly commandBus: CommandBus) {}
335
- *
336
- * @JobHandler('make-bet')
337
- * async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
338
- * return this.commandBus.execute(new MakeBetCommand(entityId, job.data));
339
- * }
340
- *
341
- * @JobHandler('*') // Wildcard handler for any unmatched job
342
- * async handleDynamic(job: Job, entityId: string) {
343
- * // Dynamic handling
344
- * }
345
- * }
346
- * ```
347
- */
348
- function WorkerProcessor(options) {
349
- return (target) => {
350
- // Store the options with defaults
351
- const metadata = {
352
- ...options,
353
- overrideDefaults: options.overrideDefaults ?? false,
354
- };
355
- Reflect.defineMetadata(exports.WORKER_PROCESSOR_METADATA, metadata, target);
356
- // Mark as injectable if not already
357
- if (!Reflect.hasMetadata('injectable', target)) {
358
- Reflect.defineMetadata('injectable', true, target);
359
- }
360
- };
361
- }
362
- /**
363
- * @JobHandler method decorator
364
- *
365
- * Marks a method as a handler for a specific job name.
366
- * Use '*' as jobName to create a wildcard handler that catches
367
- * any jobs not matched by specific handlers.
368
- *
369
- * @example
370
- * ```typescript
371
- * @JobHandler('make-bet')
372
- * async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
373
- * // Handle make-bet jobs
374
- * }
375
- *
376
- * @JobHandler('*')
377
- * async handleOther(job: Job, entityId: string) {
378
- * // Handle any other jobs
379
- * }
380
- * ```
381
- */
382
- function JobHandler(jobName) {
383
- return (target, propertyKey, descriptor) => {
384
- const methodName = String(propertyKey);
385
- const isWildcard = jobName === '*';
386
- // Store handler metadata on the method
387
- const metadata = {
388
- jobName,
389
- methodName,
390
- isWildcard,
391
- };
392
- Reflect.defineMetadata(exports.JOB_HANDLER_METADATA, metadata, target, propertyKey);
393
- // Collect all handlers on the class
394
- const existingHandlers = Reflect.getMetadata(exports.JOB_HANDLER_METADATA, target.constructor) || [];
395
- existingHandlers.push(metadata);
396
- Reflect.defineMetadata(exports.JOB_HANDLER_METADATA, existingHandlers, target.constructor);
397
- return descriptor;
398
- };
399
- }
400
- /**
401
- * @EntityScaler class decorator
402
- *
403
- * Marks a class as an entity scaler provider for a specific entity type.
404
- * Methods decorated with @GetActiveEntities, @GetDesiredWorkerCount,
405
- * @OnSpawnWorker, and @OnTerminateWorker define the scaling behavior.
406
- *
407
- * @example
408
- * ```typescript
409
- * @EntityScaler({
410
- * entityType: 'table',
411
- * maxWorkersPerEntity: 1,
412
- * })
413
- * @Injectable()
414
- * export class TableEntityScaler {
415
- * constructor(private readonly redis: Redis) {}
416
- *
417
- * @GetActiveEntities()
418
- * async getAllTables(): Promise<string[]> {
419
- * // Return all table IDs that need workers
420
- * }
421
- *
422
- * @GetDesiredWorkerCount()
423
- * async getWorkerCount(entityId: string): Promise<number> {
424
- * return 1; // Each table gets 1 worker
425
- * }
426
- *
427
- * @OnSpawnWorker()
428
- * async spawnWorker(entityId: string): Promise<void> {
429
- * // Called when a worker should be spawned
430
- * }
431
- * }
432
- * ```
433
- */
434
- function EntityScaler(options) {
435
- return (target) => {
436
- Reflect.defineMetadata(exports.ENTITY_SCALER_METADATA, options, target);
437
- if (!Reflect.hasMetadata('injectable', target)) {
438
- Reflect.defineMetadata('injectable', true, target);
439
- }
440
- };
441
- }
442
- /**
443
- * @GetActiveEntities method decorator
444
- *
445
- * Marks a method that returns all active entity IDs for scaling decisions.
446
- * Used within an @EntityScaler class.
447
- */
448
- function GetActiveEntities() {
449
- return (target, propertyKey, descriptor) => {
450
- Reflect.defineMetadata(exports.GET_ACTIVE_ENTITIES_METADATA, true, target, propertyKey);
451
- Reflect.defineMetadata(exports.GET_ACTIVE_ENTITIES_METADATA + ':method', String(propertyKey), target.constructor);
452
- return descriptor;
453
- };
454
- }
455
- /**
456
- * @GetDesiredWorkerCount method decorator
457
- *
458
- * Marks a method that returns the desired worker count for an entity.
459
- * Used within an @EntityScaler class.
460
- */
461
- function GetDesiredWorkerCount() {
462
- return (target, propertyKey, descriptor) => {
463
- Reflect.defineMetadata(exports.GET_DESIRED_WORKER_COUNT_METADATA, true, target, propertyKey);
464
- Reflect.defineMetadata(exports.GET_DESIRED_WORKER_COUNT_METADATA + ':method', String(propertyKey), target.constructor);
465
- return descriptor;
466
- };
467
- }
468
- /**
469
- * @OnSpawnWorker method decorator
470
- *
471
- * Marks a method that is called when a worker should be spawned.
472
- * Used within an @EntityScaler class.
473
- */
474
- function OnSpawnWorker() {
475
- return (target, propertyKey, descriptor) => {
476
- Reflect.defineMetadata(exports.ON_SPAWN_WORKER_METADATA, true, target, propertyKey);
477
- Reflect.defineMetadata(exports.ON_SPAWN_WORKER_METADATA + ':method', String(propertyKey), target.constructor);
478
- return descriptor;
479
- };
480
- }
481
- /**
482
- * @OnTerminateWorker method decorator
483
- *
484
- * Marks a method that is called when a worker should be terminated.
485
- * Used within an @EntityScaler class.
486
- */
487
- function OnTerminateWorker() {
488
- return (target, propertyKey, descriptor) => {
489
- Reflect.defineMetadata(exports.ON_TERMINATE_WORKER_METADATA, true, target, propertyKey);
490
- Reflect.defineMetadata(exports.ON_TERMINATE_WORKER_METADATA + ':method', String(propertyKey), target.constructor);
491
- return descriptor;
492
- };
493
- }
494
- // =============================================================================
495
- // JOB COMMAND/QUERY DECORATORS - Zero-Boilerplate CQRS Integration
496
- // =============================================================================
497
- /**
498
- * Helper to convert class name to kebab-case job name
499
- * MakeBetCommand -> make-bet
500
- * ProcessPaymentCommand -> process-payment
501
- */
502
- function deriveJobName(className, suffix) {
503
- return className
504
- .replace(new RegExp(`${suffix}$`), '')
505
- .replace(/([a-z])([A-Z])/g, '$1-$2')
506
- .toLowerCase();
507
- }
508
- /**
509
- * Helper to extract constructor parameter names using reflection
510
- */
511
- function getConstructorParamNames(target) {
512
- const paramTypes = Reflect.getMetadata('design:paramtypes', target) || [];
513
- // Try to extract parameter names from the constructor string
514
- const constructorStr = target.toString();
515
- const match = constructorStr.match(/constructor\s*\(([^)]*)\)/);
516
- if (match && match[1]) {
517
- return match[1]
518
- .split(',')
519
- .map((param) => {
520
- // Handle various patterns:
521
- // "public readonly tableId: string" -> "tableId"
522
- // "tableId" -> "tableId"
523
- // "private tableId: string" -> "tableId"
524
- const cleaned = param.trim();
525
- const nameMatch = cleaned.match(/(?:public\s+)?(?:private\s+)?(?:protected\s+)?(?:readonly\s+)?(\w+)/);
526
- return nameMatch ? nameMatch[1] : cleaned;
527
- })
528
- .filter((name) => name.length > 0);
529
- }
530
- // Fallback: generate param0, param1, etc.
531
- return paramTypes.map((_, i) => `param${i}`);
532
- }
533
- /**
534
- * @JobCommand class decorator
535
- *
536
- * Marks a command class for automatic job routing. When a job with the
537
- * specified name arrives, the library will automatically instantiate
538
- * the command with entityId + job.data and execute it via CommandBus.
539
- *
540
- * This eliminates the need for @JobHandler boilerplate in processors.
541
- *
542
- * @example
543
- * ```typescript
544
- * // Option 1: Explicit job name
545
- * @JobCommand('make-bet')
546
- * export class MakeBetCommand {
547
- * constructor(
548
- * public readonly tableId: string, // entityId (first param)
549
- * public readonly playerId: string,
550
- * public readonly amount: number,
551
- * ) {}
552
- * }
553
- *
554
- * // Option 2: Auto-derived job name (MakeBetCommand -> 'make-bet')
555
- * @JobCommand()
556
- * export class MakeBetCommand { ... }
557
- *
558
- * // Option 3: With options
559
- * @JobCommand({
560
- * name: 'place-bet',
561
- * entityType: 'table',
562
- * entityIdParam: 'tableId', // or 0 for first param
563
- * })
564
- * export class PlaceBetCommand { ... }
565
- * ```
566
- */
567
- function JobCommand(options) {
568
- return (target) => {
569
- const opts = typeof options === 'string'
570
- ? { name: options }
571
- : (options || {});
572
- const jobName = opts.name || deriveJobName(target.name, 'Command');
573
- const paramNames = getConstructorParamNames(target);
574
- const metadata = {
575
- jobName,
576
- entityType: opts.entityType,
577
- entityIdParam: opts.entityIdParam ?? 0,
578
- targetClass: target,
579
- paramNames,
580
- };
581
- Reflect.defineMetadata(exports.JOB_COMMAND_METADATA, metadata, target);
582
- };
583
- }
584
- /**
585
- * @JobQuery class decorator
586
- *
587
- * Marks a query class for automatic job routing. When a job with the
588
- * specified name arrives, the library will automatically instantiate
589
- * the query with entityId + job.data and execute it via QueryBus.
590
- *
591
- * @example
592
- * ```typescript
593
- * @JobQuery('get-score')
594
- * export class GetScoreQuery {
595
- * constructor(
596
- * public readonly tableId: string,
597
- * public readonly seatIndex: number,
598
- * ) {}
599
- * }
600
- *
601
- * // Auto-derived: GetTableStateQuery -> 'get-table-state'
602
- * @JobQuery()
603
- * export class GetTableStateQuery { ... }
604
- * ```
605
- */
606
- function JobQuery(options) {
607
- return (target) => {
608
- const opts = typeof options === 'string'
609
- ? { name: options }
610
- : (options || {});
611
- const jobName = opts.name || deriveJobName(target.name, 'Query');
612
- const paramNames = getConstructorParamNames(target);
613
- const metadata = {
614
- jobName,
615
- entityType: opts.entityType,
616
- entityIdParam: opts.entityIdParam ?? 0,
617
- targetClass: target,
618
- paramNames,
619
- };
620
- Reflect.defineMetadata(exports.JOB_QUERY_METADATA, metadata, target);
621
- };
622
- }
623
- /**
624
- * Get JobCommand metadata from a class
625
- */
626
- function getJobCommandMetadata(target) {
627
- return Reflect.getMetadata(exports.JOB_COMMAND_METADATA, target);
628
- }
629
- /**
630
- * Get JobQuery metadata from a class
631
- */
632
- function getJobQueryMetadata(target) {
633
- return Reflect.getMetadata(exports.JOB_QUERY_METADATA, target);
634
- }
635
- /**
636
- * Check if a class is a JobCommand
637
- */
638
- function isJobCommand(target) {
639
- return Reflect.hasMetadata(exports.JOB_COMMAND_METADATA, target);
640
- }
641
- /**
642
- * Check if a class is a JobQuery
643
- */
644
- function isJobQuery(target) {
645
- return Reflect.hasMetadata(exports.JOB_QUERY_METADATA, target);
646
- }
647
- // =============================================================================
648
- // UTILITY FUNCTIONS
649
- // =============================================================================
650
- /**
651
- * Get WorkerProcessor metadata from a class
652
- */
653
- function getWorkerProcessorMetadata(target) {
654
- return Reflect.getMetadata(exports.WORKER_PROCESSOR_METADATA, target);
655
- }
656
- /**
657
- * Get all JobHandler metadata from a class
658
- */
659
- function getJobHandlerMetadata(target) {
660
- return Reflect.getMetadata(exports.JOB_HANDLER_METADATA, target) || [];
661
- }
662
- /**
663
- * Get EntityScaler metadata from a class
664
- */
665
- function getEntityScalerMetadata(target) {
666
- return Reflect.getMetadata(exports.ENTITY_SCALER_METADATA, target);
667
- }
668
- /**
669
- * Check if a class is a WorkerProcessor
670
- */
671
- function isWorkerProcessor(target) {
672
- return Reflect.hasMetadata(exports.WORKER_PROCESSOR_METADATA, target);
673
- }
674
- /**
675
- * Check if a class is an EntityScaler
676
- */
677
- function isEntityScaler(target) {
678
- return Reflect.hasMetadata(exports.ENTITY_SCALER_METADATA, target);
679
- }
680
- //# sourceMappingURL=decorators.js.map