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
@@ -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,2 @@
1
+ export declare const queueEntityIdRegistry: Map<Function, string>;
2
+ //# sourceMappingURL=registry.d.ts.map
@@ -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"}