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 @@
1
+ {"version":3,"file":"naming.utils.d.ts","sourceRoot":"","sources":["../../src/utils/naming.utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,SAAO,GACZ,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,SAAO,GACZ,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAUP"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_KEY_PREFIX = void 0;
4
+ exports.resolveKeyPrefix = resolveKeyPrefix;
5
+ exports.getEntityQueueName = getEntityQueueName;
6
+ exports.getEntityWorkerName = getEntityWorkerName;
7
+ exports.parseQueueName = parseQueueName;
8
+ exports.DEFAULT_KEY_PREFIX = 'aq';
9
+ function resolveKeyPrefix(config) {
10
+ return config.keyPrefix || exports.DEFAULT_KEY_PREFIX;
11
+ }
12
+ /**
13
+ * Generate a queue name for an entity.
14
+ */
15
+ function getEntityQueueName(entityType, entityId, prefix = 'aq') {
16
+ return `${prefix}:${entityType}:${entityId}:queue`;
17
+ }
18
+ /**
19
+ * Generate a worker name for an entity.
20
+ */
21
+ function getEntityWorkerName(entityType, entityId, prefix = 'aq') {
22
+ return `${prefix}:${entityType}:${entityId}:worker`;
23
+ }
24
+ /**
25
+ * Parse a queue name to extract entity info.
26
+ */
27
+ function parseQueueName(queueName) {
28
+ const parts = queueName.split(':');
29
+ if (parts.length >= 4 && parts[3] === 'queue') {
30
+ return {
31
+ prefix: parts[0],
32
+ entityType: parts[1],
33
+ entityId: parts[2],
34
+ };
35
+ }
36
+ return null;
37
+ }
38
+ //# sourceMappingURL=naming.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.utils.js","sourceRoot":"","sources":["../../src/utils/naming.utils.ts"],"names":[],"mappings":";;;AAEA,4CAEC;AAKD,gDAMC;AAKD,kDAMC;AAKD,wCAcC;AA7CY,QAAA,kBAAkB,GAAG,IAAI,CAAC;AAEvC,SAAgB,gBAAgB,CAAC,MAA8B;IAC7D,OAAO,MAAM,CAAC,SAAS,IAAI,0BAAkB,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,UAAkB,EAClB,QAAgB,EAChB,MAAM,GAAG,IAAI;IAEb,OAAO,GAAG,MAAM,IAAI,UAAU,IAAI,QAAQ,QAAQ,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,UAAkB,EAClB,QAAgB,EAChB,MAAM,GAAG,IAAI;IAEb,OAAO,GAAG,MAAM,IAAI,UAAU,IAAI,QAAQ,SAAS,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,SAAiB;IAK9C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC9C,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;SACnB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Debounce utility for functions.
3
+ */
4
+ export declare function debounce<T extends (...args: unknown[]) => unknown>(fn: T, ms: number): (...args: Parameters<T>) => void;
5
+ /**
6
+ * Throttle utility for functions.
7
+ */
8
+ export declare function throttle<T extends (...args: unknown[]) => unknown>(fn: T, ms: number): (...args: Parameters<T>) => void;
9
+ //# sourceMappingURL=rate-limit.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.utils.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limit.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CASlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAUlC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.debounce = debounce;
4
+ exports.throttle = throttle;
5
+ /**
6
+ * Debounce utility for functions.
7
+ */
8
+ function debounce(fn, ms) {
9
+ let timeoutId = null;
10
+ return (...args) => {
11
+ if (timeoutId) {
12
+ clearTimeout(timeoutId);
13
+ }
14
+ timeoutId = setTimeout(() => fn(...args), ms);
15
+ };
16
+ }
17
+ /**
18
+ * Throttle utility for functions.
19
+ */
20
+ function throttle(fn, ms) {
21
+ let lastCall = 0;
22
+ return (...args) => {
23
+ const now = Date.now();
24
+ if (now - lastCall >= ms) {
25
+ lastCall = now;
26
+ fn(...args);
27
+ }
28
+ };
29
+ }
30
+ //# sourceMappingURL=rate-limit.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.utils.js","sourceRoot":"","sources":["../../src/utils/rate-limit.utils.ts"],"names":[],"mappings":";;AAGA,4BAYC;AAKD,4BAaC;AAjCD;;GAEG;AACH,SAAgB,QAAQ,CACtB,EAAK,EACL,EAAU;IAEV,IAAI,SAAS,GAA0B,IAAI,CAAC;IAE5C,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QACD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CACtB,EAAK,EACL,EAAU;IAEV,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;YACzB,QAAQ,GAAG,GAAG,CAAC;YACf,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import Redis from 'ioredis';
2
+ export declare function scanKeys(redis: Redis, pattern: string, count?: number): Promise<string[]>;
3
+ //# sourceMappingURL=redis.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.utils.d.ts","sourceRoot":"","sources":["../../src/utils/redis.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,wBAAsB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAS5F"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scanKeys = scanKeys;
4
+ async function scanKeys(redis, pattern, count = 100) {
5
+ let cursor = '0';
6
+ const keys = [];
7
+ do {
8
+ const [nextCursor, foundKeys] = await redis.scan(cursor, 'MATCH', pattern, 'COUNT', count);
9
+ cursor = nextCursor;
10
+ keys.push(...foundKeys);
11
+ } while (cursor !== '0');
12
+ return keys;
13
+ }
14
+ //# sourceMappingURL=redis.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.utils.js","sourceRoot":"","sources":["../../src/utils/redis.utils.ts"],"names":[],"mappings":";;AAEA,4BASC;AATM,KAAK,UAAU,QAAQ,CAAC,KAAY,EAAE,OAAe,EAAE,KAAK,GAAG,GAAG;IACvE,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,GAAG,CAAC;QACF,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3F,MAAM,GAAG,UAAU,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1B,CAAC,QAAQ,MAAM,KAAK,GAAG,EAAE;IACzB,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atomic-queues",
3
- "version": "1.4.1",
3
+ "version": "1.6.0",
4
4
  "description": "A plug-and-play NestJS library for atomic process handling per entity with BullMQ, Redis distributed locking, and dynamic worker management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -42,39 +42,39 @@
42
42
  "author": "",
43
43
  "license": "MIT",
44
44
  "peerDependencies": {
45
- "@nestjs/bullmq": ">=10.0.0",
46
45
  "@nestjs/common": ">=10.0.0",
47
46
  "@nestjs/core": ">=10.0.0",
48
47
  "@nestjs/cqrs": ">=10.0.0",
49
- "bullmq": ">=5.0.0",
50
- "ioredis": ">=5.0.0",
51
48
  "reflect-metadata": ">=0.1.13",
52
49
  "rxjs": ">=7.0.0"
53
50
  },
54
51
  "devDependencies": {
55
- "@nestjs/bullmq": "^10.2.0",
56
- "@nestjs/common": "^10.3.0",
57
- "@nestjs/core": "^10.3.0",
58
- "@nestjs/cqrs": "^10.2.0",
52
+ "@nestjs/bullmq": "^11.0.4",
53
+ "@nestjs/common": "^11.1.19",
54
+ "@nestjs/core": "^11.1.19",
55
+ "@nestjs/cqrs": "^11.0.3",
59
56
  "@types/jest": "^29.5.0",
60
- "@types/node": "^20.0.0",
57
+ "@types/node": "^25.6.0",
61
58
  "@types/uuid": "^10.0.0",
62
59
  "@typescript-eslint/eslint-plugin": "^6.0.0",
63
60
  "@typescript-eslint/parser": "^6.0.0",
64
- "bullmq": "^5.1.0",
61
+ "bullmq": "^5.74.1",
65
62
  "eslint": "^8.0.0",
66
- "ioredis": "^5.3.0",
63
+ "ioredis": "^5.10.1",
67
64
  "jest": "^29.5.0",
68
65
  "reflect-metadata": "^0.1.13",
69
- "rimraf": "^6.1.2",
70
- "rxjs": "^7.8.0",
66
+ "rimraf": "^6.1.3",
67
+ "rxjs": "^7.8.2",
71
68
  "shx": "^0.4.0",
72
- "ts-jest": "^29.1.0",
73
- "typescript": "^5.3.0",
74
- "uuid": "^9.0.0"
69
+ "ts-jest": "^29.4.9",
70
+ "typescript": "^5.9.3",
71
+ "uuid": "^9.0.1"
75
72
  },
76
73
  "dependencies": {
74
+ "@nestjs/bullmq": "^11.0.4",
75
+ "bullmq": "^5.74.1",
77
76
  "class-transformer": "^0.5.1",
78
- "uuid": "^9.0.0"
77
+ "ioredis": "^5.10.1",
78
+ "uuid": "^9.0.1"
79
79
  }
80
80
  }
@@ -1,489 +0,0 @@
1
- import { Type } from '@nestjs/common';
2
- import { IWorkerConfig } from '../domain';
3
- /**
4
- * Metadata keys for decorators
5
- */
6
- export declare const ATOMIC_PROCESSOR_METADATA = "atomic:processor";
7
- export declare const ENTITY_TYPE_METADATA = "atomic:entity-type";
8
- export declare const ENTITY_ID_METADATA = "atomic:entity-id";
9
- export declare const JOB_TYPE_METADATA = "atomic:job-type";
10
- export declare const WORKER_PROCESSOR_METADATA = "atomic:worker-processor";
11
- export declare const JOB_HANDLER_METADATA = "atomic:job-handler";
12
- export declare const ENTITY_SCALER_METADATA = "atomic:entity-scaler";
13
- export declare const GET_ACTIVE_ENTITIES_METADATA = "atomic:get-active-entities";
14
- export declare const GET_DESIRED_WORKER_COUNT_METADATA = "atomic:get-desired-worker-count";
15
- export declare const ON_SPAWN_WORKER_METADATA = "atomic:on-spawn-worker";
16
- export declare const ON_TERMINATE_WORKER_METADATA = "atomic:on-terminate-worker";
17
- export declare const JOB_COMMAND_METADATA = "atomic:job-command";
18
- export declare const JOB_QUERY_METADATA = "atomic:job-query";
19
- /**
20
- * Options for @WorkerProcessor decorator
21
- */
22
- export interface WorkerProcessorOptions {
23
- /** Entity type this processor handles (e.g., 'table', 'user') */
24
- entityType: string;
25
- /** Default property name for entity ID extraction (optional) */
26
- defaultEntityId?: string;
27
- /** Function to generate queue name from entityId */
28
- queueName?: string | ((entityId: string) => string);
29
- /** Function to generate worker name from entityId */
30
- workerName?: string | ((entityId: string) => string);
31
- /** Worker configuration */
32
- workerConfig?: IWorkerConfig;
33
- /**
34
- * If true, workerConfig fully replaces module workerDefaults (no merge).
35
- * If false (default), workerConfig is merged with workerDefaults.
36
- */
37
- overrideDefaults?: boolean;
38
- /**
39
- * Maximum workers per entity (default: 1).
40
- * Used when operating without an EntityScaler.
41
- */
42
- maxWorkersPerEntity?: number;
43
- /**
44
- * Idle timeout in seconds before a worker is considered idle and can be terminated.
45
- * Workers self-report idle time via heartbeat. Default: 15 seconds.
46
- * Used when operating without an EntityScaler.
47
- */
48
- idleTimeoutSeconds?: number;
49
- /**
50
- * If true, workers are automatically spawned when jobs arrive (scalerless mode).
51
- * When enabled, no @EntityScaler is required - workers spawn on job arrival
52
- * and terminate when idle. Default: true if no EntityScaler is registered.
53
- */
54
- autoSpawn?: boolean;
55
- }
56
- /**
57
- * Options for @EntityScaler decorator
58
- */
59
- export interface EntityScalerOptions {
60
- /** Entity type this scaler handles */
61
- entityType: string;
62
- /** Maximum workers per entity */
63
- maxWorkersPerEntity?: number;
64
- /**
65
- * Idle timeout in seconds before a worker is considered idle and can be terminated.
66
- * Workers self-report idle time via heartbeat. Default: 15 seconds.
67
- */
68
- idleTimeoutSeconds?: number;
69
- }
70
- /**
71
- * Options for @JobCommand decorator
72
- */
73
- export interface JobCommandOptions {
74
- /** Job name (defaults to kebab-case of class name without 'Command' suffix) */
75
- name?: string;
76
- /** Entity type this command belongs to (optional, for scoped routing) */
77
- entityType?: string;
78
- /** Which constructor parameter is the entityId (default: 0 = first param) */
79
- entityIdParam?: number | string;
80
- }
81
- /**
82
- * Options for @JobQuery decorator
83
- */
84
- export interface JobQueryOptions {
85
- /** Job name (defaults to kebab-case of class name without 'Query' suffix) */
86
- name?: string;
87
- /** Entity type this query belongs to (optional, for scoped routing) */
88
- entityType?: string;
89
- /** Which constructor parameter is the entityId (default: 0 = first param) */
90
- entityIdParam?: number | string;
91
- }
92
- /**
93
- * Stored job command metadata
94
- */
95
- export interface JobCommandMetadata {
96
- jobName: string;
97
- entityType?: string;
98
- entityIdParam: number | string;
99
- targetClass: Function;
100
- paramNames: string[];
101
- }
102
- /**
103
- * Stored job query metadata
104
- */
105
- export interface JobQueryMetadata {
106
- jobName: string;
107
- entityType?: string;
108
- entityIdParam: number | string;
109
- targetClass: Function;
110
- paramNames: string[];
111
- }
112
- /**
113
- * Stored job handler metadata
114
- */
115
- export interface JobHandlerMetadata {
116
- jobName: string;
117
- methodName: string;
118
- isWildcard: boolean;
119
- }
120
- /**
121
- * Stored worker processor metadata
122
- */
123
- export interface WorkerProcessorMetadata {
124
- entityType: string;
125
- defaultEntityId?: string;
126
- queueNameFn: (entityId: string) => string;
127
- workerNameFn: (entityId: string) => string;
128
- workerConfig: IWorkerConfig;
129
- overrideDefaults: boolean;
130
- targetClass: Type<any>;
131
- jobHandlers: Map<string, JobHandlerMetadata>;
132
- wildcardHandler?: JobHandlerMetadata;
133
- }
134
- /**
135
- * Stored entity scaler metadata
136
- */
137
- export interface EntityScalerMetadata {
138
- entityType: string;
139
- maxWorkersPerEntity: number;
140
- targetClass: Type<any>;
141
- getActiveEntitiesMethod?: string;
142
- getDesiredWorkerCountMethod?: string;
143
- onSpawnWorkerMethod?: string;
144
- onTerminateWorkerMethod?: string;
145
- }
146
- /**
147
- * @AtomicProcessor decorator (LEGACY)
148
- *
149
- * Marks a method as an atomic job processor.
150
- * Can be used on handler methods to auto-register them.
151
- *
152
- * @deprecated Use @WorkerProcessor class decorator with @JobHandler method decorators instead
153
- *
154
- * @example
155
- * ```typescript
156
- * @Injectable()
157
- * export class MessageProcessor {
158
- * @AtomicProcessor('send-message')
159
- * async handleSendMessage(job: Job<IAtomicJobData>) {
160
- * // Process the job
161
- * }
162
- * }
163
- * ```
164
- */
165
- export declare const AtomicProcessor: (jobType: string) => MethodDecorator;
166
- /**
167
- * @EntityType decorator
168
- *
169
- * Marks a command/query class with its entity type for automatic routing.
170
- * When present, queueBus.enqueue(cmd) can auto-route without forEntity().
171
- *
172
- * @example
173
- * ```typescript
174
- * @EntityType('account')
175
- * export class WithdrawCommand {
176
- * @QueueEntityId()
177
- * public readonly accountId: string;
178
- * public readonly amount: number;
179
- * }
180
- *
181
- * // Can now use direct enqueue:
182
- * await queueBus.enqueue(new WithdrawCommand(accountId, amount));
183
- * ```
184
- */
185
- export declare function EntityType(entityType: string): ClassDecorator;
186
- /**
187
- * @QueueEntityId decorator
188
- *
189
- * Marks a property OR constructor parameter as the entity ID for queue routing.
190
- * Only ONE @QueueEntityId() allowed per class (enforced at decoration time).
191
- * Overrides module-level defaultEntityId configuration.
192
- *
193
- * @example Property decorator:
194
- * ```typescript
195
- * export class TransferCommand {
196
- * @QueueEntityId()
197
- * public readonly sourceAccountId: string;
198
- * public readonly amount: number;
199
- * }
200
- * ```
201
- *
202
- * @example Parameter decorator (recommended):
203
- * ```typescript
204
- * @QueueEntity('account')
205
- * export class TransferCommand {
206
- * constructor(
207
- * @QueueEntityId() public readonly sourceAccountId: string,
208
- * public readonly amount: number,
209
- * ) {}
210
- * }
211
- * ```
212
- */
213
- export declare function QueueEntityId(): PropertyDecorator & ParameterDecorator;
214
- /**
215
- * @deprecated Use @QueueEntityId() instead. This alias is provided for backwards compatibility.
216
- */
217
- export declare const EntityId: typeof QueueEntityId;
218
- /**
219
- * Get the entity type from a command/query class decorated with @EntityType or @QueueEntity
220
- */
221
- export declare function getEntityType(target: Function): string | undefined;
222
- /**
223
- * Get the entity ID property name from a class decorated with @QueueEntityId or @QueueEntity
224
- */
225
- export declare function getEntityIdProperty(target: Function): string | undefined;
226
- /**
227
- * @QueueEntity decorator
228
- *
229
- * Single decorator that combines @EntityType and @QueueEntityId into one.
230
- * This is the recommended way to mark commands/queries for queue routing.
231
- *
232
- * @param entityType - The entity type for routing (e.g., 'table', 'account')
233
- * @param entityIdProperty - Optional property name containing the entity ID.
234
- * If omitted, uses module-level defaultEntityId from entities config.
235
- *
236
- * @example
237
- * // With explicit property name:
238
- * @QueueEntity('table', 'tableId')
239
- * export class MakeBetCommand {
240
- * constructor(
241
- * public readonly tableId: string, // ← unchanged!
242
- * public readonly amount: number,
243
- * ) {}
244
- * }
245
- *
246
- * @example
247
- * // Using module default (entities config has defaultEntityId: 'tableId'):
248
- * @QueueEntity('table')
249
- * export class DealCommand {
250
- * constructor(
251
- * public readonly tableId: string,
252
- * public readonly card: string,
253
- * ) {}
254
- * }
255
- *
256
- * @example
257
- * // Then just enqueue directly:
258
- * await queueBus.enqueue(new MakeBetCommand(tableId, 100));
259
- */
260
- export declare function QueueEntity(entityType: string, entityIdProperty?: string): ClassDecorator;
261
- /**
262
- * @JobType decorator (LEGACY)
263
- *
264
- * Specifies the job type for a processor method.
265
- *
266
- * @deprecated Use @JobHandler method decorator instead
267
- */
268
- export declare const JobType: (jobType: string) => MethodDecorator;
269
- /**
270
- * @InjectAtomicQueue decorator
271
- *
272
- * Custom parameter decorator for injecting a specific queue.
273
- * Useful when you need direct access to a queue in a service.
274
- */
275
- export declare const InjectAtomicQueue: (entityType: string, entityId?: string) => ParameterDecorator;
276
- /**
277
- * @WorkerProcessor class decorator
278
- *
279
- * Marks a class as a worker processor for a specific entity type.
280
- * Combined with @JobHandler method decorators, this enables declarative
281
- * job processing with automatic worker creation and management.
282
- *
283
- * @example
284
- * ```typescript
285
- * @WorkerProcessor({
286
- * entityType: 'table',
287
- * queueName: (tableId) => `${tableId}-queue`,
288
- * workerName: (tableId) => `table-worker-${tableId}`,
289
- * workerConfig: {
290
- * concurrency: 1,
291
- * heartbeatTTL: 3,
292
- * }
293
- * })
294
- * @Injectable()
295
- * export class TableWorkerProcessor {
296
- * constructor(private readonly commandBus: CommandBus) {}
297
- *
298
- * @JobHandler('make-bet')
299
- * async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
300
- * return this.commandBus.execute(new MakeBetCommand(entityId, job.data));
301
- * }
302
- *
303
- * @JobHandler('*') // Wildcard handler for any unmatched job
304
- * async handleDynamic(job: Job, entityId: string) {
305
- * // Dynamic handling
306
- * }
307
- * }
308
- * ```
309
- */
310
- export declare function WorkerProcessor(options: WorkerProcessorOptions): ClassDecorator;
311
- /**
312
- * @JobHandler method decorator
313
- *
314
- * Marks a method as a handler for a specific job name.
315
- * Use '*' as jobName to create a wildcard handler that catches
316
- * any jobs not matched by specific handlers.
317
- *
318
- * @example
319
- * ```typescript
320
- * @JobHandler('make-bet')
321
- * async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
322
- * // Handle make-bet jobs
323
- * }
324
- *
325
- * @JobHandler('*')
326
- * async handleOther(job: Job, entityId: string) {
327
- * // Handle any other jobs
328
- * }
329
- * ```
330
- */
331
- export declare function JobHandler(jobName: string): MethodDecorator;
332
- /**
333
- * @EntityScaler class decorator
334
- *
335
- * Marks a class as an entity scaler provider for a specific entity type.
336
- * Methods decorated with @GetActiveEntities, @GetDesiredWorkerCount,
337
- * @OnSpawnWorker, and @OnTerminateWorker define the scaling behavior.
338
- *
339
- * @example
340
- * ```typescript
341
- * @EntityScaler({
342
- * entityType: 'table',
343
- * maxWorkersPerEntity: 1,
344
- * })
345
- * @Injectable()
346
- * export class TableEntityScaler {
347
- * constructor(private readonly redis: Redis) {}
348
- *
349
- * @GetActiveEntities()
350
- * async getAllTables(): Promise<string[]> {
351
- * // Return all table IDs that need workers
352
- * }
353
- *
354
- * @GetDesiredWorkerCount()
355
- * async getWorkerCount(entityId: string): Promise<number> {
356
- * return 1; // Each table gets 1 worker
357
- * }
358
- *
359
- * @OnSpawnWorker()
360
- * async spawnWorker(entityId: string): Promise<void> {
361
- * // Called when a worker should be spawned
362
- * }
363
- * }
364
- * ```
365
- */
366
- export declare function EntityScaler(options: EntityScalerOptions): ClassDecorator;
367
- /**
368
- * @GetActiveEntities method decorator
369
- *
370
- * Marks a method that returns all active entity IDs for scaling decisions.
371
- * Used within an @EntityScaler class.
372
- */
373
- export declare function GetActiveEntities(): MethodDecorator;
374
- /**
375
- * @GetDesiredWorkerCount method decorator
376
- *
377
- * Marks a method that returns the desired worker count for an entity.
378
- * Used within an @EntityScaler class.
379
- */
380
- export declare function GetDesiredWorkerCount(): MethodDecorator;
381
- /**
382
- * @OnSpawnWorker method decorator
383
- *
384
- * Marks a method that is called when a worker should be spawned.
385
- * Used within an @EntityScaler class.
386
- */
387
- export declare function OnSpawnWorker(): MethodDecorator;
388
- /**
389
- * @OnTerminateWorker method decorator
390
- *
391
- * Marks a method that is called when a worker should be terminated.
392
- * Used within an @EntityScaler class.
393
- */
394
- export declare function OnTerminateWorker(): MethodDecorator;
395
- /**
396
- * @JobCommand class decorator
397
- *
398
- * Marks a command class for automatic job routing. When a job with the
399
- * specified name arrives, the library will automatically instantiate
400
- * the command with entityId + job.data and execute it via CommandBus.
401
- *
402
- * This eliminates the need for @JobHandler boilerplate in processors.
403
- *
404
- * @example
405
- * ```typescript
406
- * // Option 1: Explicit job name
407
- * @JobCommand('make-bet')
408
- * export class MakeBetCommand {
409
- * constructor(
410
- * public readonly tableId: string, // entityId (first param)
411
- * public readonly playerId: string,
412
- * public readonly amount: number,
413
- * ) {}
414
- * }
415
- *
416
- * // Option 2: Auto-derived job name (MakeBetCommand -> 'make-bet')
417
- * @JobCommand()
418
- * export class MakeBetCommand { ... }
419
- *
420
- * // Option 3: With options
421
- * @JobCommand({
422
- * name: 'place-bet',
423
- * entityType: 'table',
424
- * entityIdParam: 'tableId', // or 0 for first param
425
- * })
426
- * export class PlaceBetCommand { ... }
427
- * ```
428
- */
429
- export declare function JobCommand(options?: string | JobCommandOptions): ClassDecorator;
430
- /**
431
- * @JobQuery class decorator
432
- *
433
- * Marks a query class for automatic job routing. When a job with the
434
- * specified name arrives, the library will automatically instantiate
435
- * the query with entityId + job.data and execute it via QueryBus.
436
- *
437
- * @example
438
- * ```typescript
439
- * @JobQuery('get-score')
440
- * export class GetScoreQuery {
441
- * constructor(
442
- * public readonly tableId: string,
443
- * public readonly seatIndex: number,
444
- * ) {}
445
- * }
446
- *
447
- * // Auto-derived: GetTableStateQuery -> 'get-table-state'
448
- * @JobQuery()
449
- * export class GetTableStateQuery { ... }
450
- * ```
451
- */
452
- export declare function JobQuery(options?: string | JobQueryOptions): ClassDecorator;
453
- /**
454
- * Get JobCommand metadata from a class
455
- */
456
- export declare function getJobCommandMetadata(target: Function): JobCommandMetadata | undefined;
457
- /**
458
- * Get JobQuery metadata from a class
459
- */
460
- export declare function getJobQueryMetadata(target: Function): JobQueryMetadata | undefined;
461
- /**
462
- * Check if a class is a JobCommand
463
- */
464
- export declare function isJobCommand(target: Function): boolean;
465
- /**
466
- * Check if a class is a JobQuery
467
- */
468
- export declare function isJobQuery(target: Function): boolean;
469
- /**
470
- * Get WorkerProcessor metadata from a class
471
- */
472
- export declare function getWorkerProcessorMetadata(target: Type<any>): WorkerProcessorOptions | undefined;
473
- /**
474
- * Get all JobHandler metadata from a class
475
- */
476
- export declare function getJobHandlerMetadata(target: Type<any>): JobHandlerMetadata[];
477
- /**
478
- * Get EntityScaler metadata from a class
479
- */
480
- export declare function getEntityScalerMetadata(target: Type<any>): EntityScalerOptions | undefined;
481
- /**
482
- * Check if a class is a WorkerProcessor
483
- */
484
- export declare function isWorkerProcessor(target: Type<any>): boolean;
485
- /**
486
- * Check if a class is an EntityScaler
487
- */
488
- export declare function isEntityScaler(target: Type<any>): boolean;
489
- //# sourceMappingURL=decorators.d.ts.map