node-cqrs 0.16.4 → 1.0.0-beta.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 (576) hide show
  1. package/CHANGELOG.md +615 -79
  2. package/LICENSE +202 -21
  3. package/NOTICE +15 -0
  4. package/README.md +429 -112
  5. package/dist/cjs/AbstractAggregate.js +193 -0
  6. package/dist/cjs/AbstractAggregate.js.map +1 -0
  7. package/dist/cjs/AbstractProjection.js +165 -0
  8. package/dist/cjs/AbstractProjection.js.map +1 -0
  9. package/dist/cjs/AbstractSaga.js +109 -0
  10. package/dist/cjs/AbstractSaga.js.map +1 -0
  11. package/dist/cjs/AggregateCommandHandler.js +182 -0
  12. package/dist/cjs/AggregateCommandHandler.js.map +1 -0
  13. package/dist/cjs/CommandBus.js +9 -0
  14. package/dist/cjs/CommandBus.js.map +1 -0
  15. package/dist/cjs/CqrsContainerBuilder.js +97 -0
  16. package/dist/cjs/CqrsContainerBuilder.js.map +1 -0
  17. package/dist/cjs/Event.js +19 -0
  18. package/dist/cjs/Event.js.map +1 -0
  19. package/dist/cjs/EventDispatchPipeline.js +83 -0
  20. package/dist/cjs/EventDispatchPipeline.js.map +1 -0
  21. package/dist/cjs/EventDispatcher.js +93 -0
  22. package/dist/cjs/EventDispatcher.js.map +1 -0
  23. package/dist/cjs/EventIdAugmentor.js +30 -0
  24. package/dist/cjs/EventIdAugmentor.js.map +1 -0
  25. package/dist/cjs/EventStore.js +106 -0
  26. package/dist/cjs/EventStore.js.map +1 -0
  27. package/dist/cjs/SagaEventHandler.js +153 -0
  28. package/dist/cjs/SagaEventHandler.js.map +1 -0
  29. package/dist/cjs/errors/ConcurrencyError.js +21 -0
  30. package/dist/cjs/errors/ConcurrencyError.js.map +1 -0
  31. package/dist/cjs/errors/index.js +18 -0
  32. package/dist/cjs/errors/index.js.map +1 -0
  33. package/dist/cjs/in-memory/InMemoryEventStorage.js +106 -0
  34. package/dist/cjs/in-memory/InMemoryEventStorage.js.map +1 -0
  35. package/dist/cjs/in-memory/InMemoryLock.js +44 -0
  36. package/dist/cjs/in-memory/InMemoryLock.js.map +1 -0
  37. package/dist/cjs/in-memory/InMemoryMessageBus.js +93 -0
  38. package/dist/cjs/in-memory/InMemoryMessageBus.js.map +1 -0
  39. package/dist/cjs/in-memory/InMemorySnapshotStorage.js +101 -0
  40. package/dist/cjs/in-memory/InMemorySnapshotStorage.js.map +1 -0
  41. package/dist/cjs/in-memory/InMemoryView.js +154 -0
  42. package/dist/cjs/in-memory/InMemoryView.js.map +1 -0
  43. package/dist/cjs/in-memory/index.js +22 -0
  44. package/dist/cjs/in-memory/index.js.map +1 -0
  45. package/dist/cjs/in-memory/utils/index.js +18 -0
  46. package/dist/cjs/in-memory/utils/index.js.map +1 -0
  47. package/dist/cjs/in-memory/utils/nextCycle.js +9 -0
  48. package/dist/cjs/in-memory/utils/nextCycle.js.map +1 -0
  49. package/dist/cjs/index.js +58 -0
  50. package/dist/cjs/index.js.map +1 -0
  51. package/dist/cjs/interfaces/IAggregate.js +3 -0
  52. package/dist/cjs/interfaces/IAggregate.js.map +1 -0
  53. package/dist/cjs/interfaces/IAggregateSnapshotStorage.js +13 -0
  54. package/dist/cjs/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  55. package/dist/cjs/interfaces/ICommand.js +3 -0
  56. package/dist/cjs/interfaces/ICommand.js.map +1 -0
  57. package/dist/cjs/interfaces/ICommandBus.js +3 -0
  58. package/dist/cjs/interfaces/ICommandBus.js.map +1 -0
  59. package/dist/cjs/interfaces/IContainer.js +3 -0
  60. package/dist/cjs/interfaces/IContainer.js.map +1 -0
  61. package/dist/cjs/interfaces/IDispatchPipelineProcessor.js +9 -0
  62. package/dist/cjs/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  63. package/dist/cjs/interfaces/IEvent.js +10 -0
  64. package/dist/cjs/interfaces/IEvent.js.map +1 -0
  65. package/dist/cjs/interfaces/IEventBus.js +9 -0
  66. package/dist/cjs/interfaces/IEventBus.js.map +1 -0
  67. package/dist/cjs/interfaces/IEventDispatcher.js +3 -0
  68. package/dist/cjs/interfaces/IEventDispatcher.js.map +1 -0
  69. package/dist/cjs/interfaces/IEventLocker.js +15 -0
  70. package/dist/cjs/interfaces/IEventLocker.js.map +1 -0
  71. package/dist/cjs/interfaces/IEventReceptor.js +3 -0
  72. package/dist/cjs/interfaces/IEventReceptor.js.map +1 -0
  73. package/dist/cjs/interfaces/IEventSet.js +8 -0
  74. package/dist/cjs/interfaces/IEventSet.js.map +1 -0
  75. package/dist/cjs/interfaces/IEventStorageReader.js +13 -0
  76. package/dist/cjs/interfaces/IEventStorageReader.js.map +1 -0
  77. package/dist/cjs/interfaces/IEventStore.js +3 -0
  78. package/dist/cjs/interfaces/IEventStore.js.map +1 -0
  79. package/dist/cjs/interfaces/IEventStream.js +3 -0
  80. package/dist/cjs/interfaces/IEventStream.js.map +1 -0
  81. package/dist/cjs/interfaces/IIdentifierProvider.js +9 -0
  82. package/dist/cjs/interfaces/IIdentifierProvider.js.map +1 -0
  83. package/dist/cjs/interfaces/ILocker.js +9 -0
  84. package/dist/cjs/interfaces/ILocker.js.map +1 -0
  85. package/dist/cjs/interfaces/ILogger.js +3 -0
  86. package/dist/cjs/interfaces/ILogger.js.map +1 -0
  87. package/dist/cjs/interfaces/IMessage.js +10 -0
  88. package/dist/cjs/interfaces/IMessage.js.map +1 -0
  89. package/dist/cjs/interfaces/IMutableState.js +3 -0
  90. package/dist/cjs/interfaces/IMutableState.js.map +1 -0
  91. package/dist/cjs/interfaces/IObjectStorage.js +3 -0
  92. package/dist/cjs/interfaces/IObjectStorage.js.map +1 -0
  93. package/dist/cjs/interfaces/IObservable.js +11 -0
  94. package/dist/cjs/interfaces/IObservable.js.map +1 -0
  95. package/dist/cjs/interfaces/IObservableQueueProvider.js +9 -0
  96. package/dist/cjs/interfaces/IObservableQueueProvider.js.map +1 -0
  97. package/dist/cjs/interfaces/IObserver.js +3 -0
  98. package/dist/cjs/interfaces/IObserver.js.map +1 -0
  99. package/dist/cjs/interfaces/IProjection.js +3 -0
  100. package/dist/cjs/interfaces/IProjection.js.map +1 -0
  101. package/dist/cjs/interfaces/ISaga.js +3 -0
  102. package/dist/cjs/interfaces/ISaga.js.map +1 -0
  103. package/dist/cjs/interfaces/ISnapshotEvent.js +10 -0
  104. package/dist/cjs/interfaces/ISnapshotEvent.js.map +1 -0
  105. package/dist/cjs/interfaces/IViewLocker.js +21 -0
  106. package/dist/cjs/interfaces/IViewLocker.js.map +1 -0
  107. package/dist/cjs/interfaces/Identifier.js +3 -0
  108. package/dist/cjs/interfaces/Identifier.js.map +1 -0
  109. package/dist/cjs/interfaces/index.js +46 -0
  110. package/dist/cjs/interfaces/index.js.map +1 -0
  111. package/dist/cjs/interfaces/isObject.js +9 -0
  112. package/dist/cjs/interfaces/isObject.js.map +1 -0
  113. package/dist/cjs/package.json +3 -0
  114. package/dist/cjs/rabbitmq/IContainer.js +3 -0
  115. package/dist/cjs/rabbitmq/IContainer.js.map +1 -0
  116. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js +84 -0
  117. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js.map +1 -0
  118. package/dist/cjs/rabbitmq/RabbitMqEventBus.js +121 -0
  119. package/dist/cjs/rabbitmq/RabbitMqEventBus.js.map +1 -0
  120. package/dist/cjs/rabbitmq/RabbitMqGateway.js +578 -0
  121. package/dist/cjs/rabbitmq/RabbitMqGateway.js.map +1 -0
  122. package/dist/cjs/rabbitmq/index.js +21 -0
  123. package/dist/cjs/rabbitmq/index.js.map +1 -0
  124. package/dist/cjs/rabbitmq/utils/index.js +19 -0
  125. package/dist/cjs/rabbitmq/utils/index.js.map +1 -0
  126. package/dist/cjs/rabbitmq/utils/registerExitCleanup.js +28 -0
  127. package/dist/cjs/rabbitmq/utils/registerExitCleanup.js.map +1 -0
  128. package/dist/cjs/rabbitmq/utils/resolveProvider.js +9 -0
  129. package/dist/cjs/rabbitmq/utils/resolveProvider.js.map +1 -0
  130. package/dist/cjs/sqlite/AbstractSqliteAccessor.js +50 -0
  131. package/dist/cjs/sqlite/AbstractSqliteAccessor.js.map +1 -0
  132. package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js +26 -0
  133. package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  134. package/dist/cjs/sqlite/AbstractSqliteView.js +50 -0
  135. package/dist/cjs/sqlite/AbstractSqliteView.js.map +1 -0
  136. package/dist/cjs/sqlite/IContainer.js +3 -0
  137. package/dist/cjs/sqlite/IContainer.js.map +1 -0
  138. package/dist/cjs/sqlite/SqliteEventLocker.js +93 -0
  139. package/dist/cjs/sqlite/SqliteEventLocker.js.map +1 -0
  140. package/dist/cjs/sqlite/SqliteObjectStorage.js +114 -0
  141. package/dist/cjs/sqlite/SqliteObjectStorage.js.map +1 -0
  142. package/dist/cjs/sqlite/SqliteObjectView.js +48 -0
  143. package/dist/cjs/sqlite/SqliteObjectView.js.map +1 -0
  144. package/dist/cjs/sqlite/SqliteProjectionDataParams.js +3 -0
  145. package/dist/cjs/sqlite/SqliteProjectionDataParams.js.map +1 -0
  146. package/dist/cjs/sqlite/SqliteViewLocker.js +119 -0
  147. package/dist/cjs/sqlite/SqliteViewLocker.js.map +1 -0
  148. package/dist/cjs/sqlite/index.js +26 -0
  149. package/dist/cjs/sqlite/index.js.map +1 -0
  150. package/dist/cjs/sqlite/queries/eventLockTableInit.js +15 -0
  151. package/dist/cjs/sqlite/queries/eventLockTableInit.js.map +1 -0
  152. package/dist/cjs/sqlite/queries/index.js +19 -0
  153. package/dist/cjs/sqlite/queries/index.js.map +1 -0
  154. package/dist/cjs/sqlite/queries/viewLockTableInit.js +14 -0
  155. package/dist/cjs/sqlite/queries/viewLockTableInit.js.map +1 -0
  156. package/dist/cjs/sqlite/utils/getEventId.js +14 -0
  157. package/dist/cjs/sqlite/utils/getEventId.js.map +1 -0
  158. package/dist/cjs/sqlite/utils/guid.js +9 -0
  159. package/dist/cjs/sqlite/utils/guid.js.map +1 -0
  160. package/dist/cjs/sqlite/utils/index.js +19 -0
  161. package/dist/cjs/sqlite/utils/index.js.map +1 -0
  162. package/dist/cjs/utils/Deferred.js +38 -0
  163. package/dist/cjs/utils/Deferred.js.map +1 -0
  164. package/dist/cjs/utils/Lock.js +102 -0
  165. package/dist/cjs/utils/Lock.js.map +1 -0
  166. package/dist/cjs/utils/MapAssertable.js +30 -0
  167. package/dist/cjs/utils/MapAssertable.js.map +1 -0
  168. package/dist/cjs/utils/assert.js +88 -0
  169. package/dist/cjs/utils/assert.js.map +1 -0
  170. package/dist/cjs/utils/clone.js +13 -0
  171. package/dist/cjs/utils/clone.js.map +1 -0
  172. package/dist/cjs/utils/extractErrorDetails.js +37 -0
  173. package/dist/cjs/utils/extractErrorDetails.js.map +1 -0
  174. package/dist/cjs/utils/getClassName.js +10 -0
  175. package/dist/cjs/utils/getClassName.js.map +1 -0
  176. package/dist/cjs/utils/getHandler.js +18 -0
  177. package/dist/cjs/utils/getHandler.js.map +1 -0
  178. package/dist/cjs/utils/getMessageHandlerNames.js +30 -0
  179. package/dist/cjs/utils/getMessageHandlerNames.js.map +1 -0
  180. package/dist/cjs/utils/index.js +31 -0
  181. package/dist/cjs/utils/index.js.map +1 -0
  182. package/dist/cjs/utils/isClass.js +8 -0
  183. package/dist/cjs/utils/isClass.js.map +1 -0
  184. package/dist/cjs/utils/sagaId.js +23 -0
  185. package/dist/cjs/utils/sagaId.js.map +1 -0
  186. package/dist/cjs/utils/setupOneTimeEmitterSubscription.js +45 -0
  187. package/dist/cjs/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  188. package/dist/cjs/utils/subscribe.js +43 -0
  189. package/dist/cjs/utils/subscribe.js.map +1 -0
  190. package/dist/cjs/utils/validateHandlers.js +21 -0
  191. package/dist/cjs/utils/validateHandlers.js.map +1 -0
  192. package/dist/cjs/workers/AbstractWorkerProjection.js +56 -0
  193. package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -0
  194. package/dist/cjs/workers/WorkerProxyProjection.js +142 -0
  195. package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -0
  196. package/dist/cjs/workers/index.js +20 -0
  197. package/dist/cjs/workers/index.js.map +1 -0
  198. package/dist/cjs/workers/interfaces/IProxyProjection.js +3 -0
  199. package/dist/cjs/workers/interfaces/IProxyProjection.js.map +1 -0
  200. package/dist/cjs/workers/interfaces/IWorkerProjection.js +3 -0
  201. package/dist/cjs/workers/interfaces/IWorkerProjection.js.map +1 -0
  202. package/dist/cjs/workers/interfaces/index.js +3 -0
  203. package/dist/cjs/workers/interfaces/index.js.map +1 -0
  204. package/dist/cjs/workers/protocol.js +16 -0
  205. package/dist/cjs/workers/protocol.js.map +1 -0
  206. package/dist/cjs/workers/utils/ProjectionView.js +3 -0
  207. package/dist/cjs/workers/utils/ProjectionView.js.map +1 -0
  208. package/dist/cjs/workers/utils/createWorker.js +87 -0
  209. package/dist/cjs/workers/utils/createWorker.js.map +1 -0
  210. package/dist/cjs/workers/utils/createWorkerInstance.js +59 -0
  211. package/dist/cjs/workers/utils/createWorkerInstance.js.map +1 -0
  212. package/dist/cjs/workers/utils/index.js +21 -0
  213. package/dist/cjs/workers/utils/index.js.map +1 -0
  214. package/dist/cjs/workers/utils/nodeEndpoint.js +8 -0
  215. package/dist/cjs/workers/utils/nodeEndpoint.js.map +1 -0
  216. package/dist/cjs/workers/utils/workerProxyFactory.js +21 -0
  217. package/dist/cjs/workers/utils/workerProxyFactory.js.map +1 -0
  218. package/dist/esm/AbstractAggregate.js +189 -0
  219. package/dist/esm/AbstractAggregate.js.map +1 -0
  220. package/dist/esm/AbstractProjection.js +161 -0
  221. package/dist/esm/AbstractProjection.js.map +1 -0
  222. package/dist/esm/AbstractSaga.js +105 -0
  223. package/dist/esm/AbstractSaga.js.map +1 -0
  224. package/dist/esm/AggregateCommandHandler.js +178 -0
  225. package/dist/esm/AggregateCommandHandler.js.map +1 -0
  226. package/dist/esm/CommandBus.js +5 -0
  227. package/dist/esm/CommandBus.js.map +1 -0
  228. package/dist/esm/CqrsContainerBuilder.js +93 -0
  229. package/dist/esm/CqrsContainerBuilder.js.map +1 -0
  230. package/dist/esm/Event.js +15 -0
  231. package/dist/esm/Event.js.map +1 -0
  232. package/dist/esm/EventDispatchPipeline.js +79 -0
  233. package/dist/esm/EventDispatchPipeline.js.map +1 -0
  234. package/dist/esm/EventDispatcher.js +89 -0
  235. package/dist/esm/EventDispatcher.js.map +1 -0
  236. package/dist/esm/EventIdAugmentor.js +26 -0
  237. package/dist/esm/EventIdAugmentor.js.map +1 -0
  238. package/dist/esm/EventStore.js +102 -0
  239. package/dist/esm/EventStore.js.map +1 -0
  240. package/dist/esm/SagaEventHandler.js +116 -0
  241. package/dist/esm/SagaEventHandler.js.map +1 -0
  242. package/dist/esm/errors/ConcurrencyError.js +17 -0
  243. package/dist/esm/errors/ConcurrencyError.js.map +1 -0
  244. package/dist/esm/errors/index.js +2 -0
  245. package/dist/esm/errors/index.js.map +1 -0
  246. package/dist/esm/in-memory/InMemoryEventStorage.js +102 -0
  247. package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -0
  248. package/dist/esm/in-memory/InMemoryLock.js +40 -0
  249. package/dist/esm/in-memory/InMemoryLock.js.map +1 -0
  250. package/dist/esm/in-memory/InMemoryMessageBus.js +89 -0
  251. package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -0
  252. package/dist/esm/in-memory/InMemorySnapshotStorage.js +64 -0
  253. package/dist/esm/in-memory/InMemorySnapshotStorage.js.map +1 -0
  254. package/dist/esm/in-memory/InMemoryView.js +150 -0
  255. package/dist/esm/in-memory/InMemoryView.js.map +1 -0
  256. package/dist/esm/in-memory/index.js +6 -0
  257. package/dist/esm/in-memory/index.js.map +1 -0
  258. package/dist/esm/in-memory/utils/index.js +2 -0
  259. package/dist/esm/in-memory/utils/index.js.map +1 -0
  260. package/dist/esm/in-memory/utils/nextCycle.js +5 -0
  261. package/dist/esm/in-memory/utils/nextCycle.js.map +1 -0
  262. package/dist/esm/index.js +16 -0
  263. package/dist/esm/index.js.map +1 -0
  264. package/dist/esm/interfaces/IAggregate.js +2 -0
  265. package/dist/esm/interfaces/IAggregate.js.map +1 -0
  266. package/dist/esm/interfaces/IAggregateSnapshotStorage.js +9 -0
  267. package/dist/esm/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  268. package/dist/esm/interfaces/ICommand.js +2 -0
  269. package/dist/esm/interfaces/ICommand.js.map +1 -0
  270. package/dist/esm/interfaces/ICommandBus.js +2 -0
  271. package/dist/esm/interfaces/ICommandBus.js.map +1 -0
  272. package/dist/esm/interfaces/IContainer.js +2 -0
  273. package/dist/esm/interfaces/IContainer.js.map +1 -0
  274. package/dist/esm/interfaces/IDispatchPipelineProcessor.js +5 -0
  275. package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  276. package/dist/esm/interfaces/IEvent.js +6 -0
  277. package/dist/esm/interfaces/IEvent.js.map +1 -0
  278. package/dist/esm/interfaces/IEventBus.js +5 -0
  279. package/dist/esm/interfaces/IEventBus.js.map +1 -0
  280. package/dist/esm/interfaces/IEventDispatcher.js +2 -0
  281. package/dist/esm/interfaces/IEventDispatcher.js.map +1 -0
  282. package/dist/esm/interfaces/IEventLocker.js +11 -0
  283. package/dist/esm/interfaces/IEventLocker.js.map +1 -0
  284. package/dist/esm/interfaces/IEventReceptor.js +2 -0
  285. package/dist/esm/interfaces/IEventReceptor.js.map +1 -0
  286. package/dist/esm/interfaces/IEventSet.js +4 -0
  287. package/dist/esm/interfaces/IEventSet.js.map +1 -0
  288. package/dist/esm/interfaces/IEventStorageReader.js +9 -0
  289. package/dist/esm/interfaces/IEventStorageReader.js.map +1 -0
  290. package/dist/esm/interfaces/IEventStore.js +2 -0
  291. package/dist/esm/interfaces/IEventStore.js.map +1 -0
  292. package/dist/esm/interfaces/IEventStream.js +2 -0
  293. package/dist/esm/interfaces/IEventStream.js.map +1 -0
  294. package/dist/esm/interfaces/IIdentifierProvider.js +5 -0
  295. package/dist/esm/interfaces/IIdentifierProvider.js.map +1 -0
  296. package/dist/esm/interfaces/ILocker.js +5 -0
  297. package/dist/esm/interfaces/ILocker.js.map +1 -0
  298. package/dist/esm/interfaces/ILogger.js +2 -0
  299. package/dist/esm/interfaces/ILogger.js.map +1 -0
  300. package/dist/esm/interfaces/IMessage.js +6 -0
  301. package/dist/esm/interfaces/IMessage.js.map +1 -0
  302. package/dist/esm/interfaces/IMutableState.js +2 -0
  303. package/dist/esm/interfaces/IMutableState.js.map +1 -0
  304. package/dist/esm/interfaces/IObjectStorage.js +2 -0
  305. package/dist/esm/interfaces/IObjectStorage.js.map +1 -0
  306. package/dist/esm/interfaces/IObservable.js +7 -0
  307. package/dist/esm/interfaces/IObservable.js.map +1 -0
  308. package/dist/esm/interfaces/IObservableQueueProvider.js +5 -0
  309. package/dist/esm/interfaces/IObservableQueueProvider.js.map +1 -0
  310. package/dist/esm/interfaces/IObserver.js +2 -0
  311. package/dist/esm/interfaces/IObserver.js.map +1 -0
  312. package/dist/esm/interfaces/IProjection.js +2 -0
  313. package/dist/esm/interfaces/IProjection.js.map +1 -0
  314. package/dist/esm/interfaces/ISaga.js +2 -0
  315. package/dist/esm/interfaces/ISaga.js.map +1 -0
  316. package/dist/esm/interfaces/ISnapshotEvent.js +6 -0
  317. package/dist/esm/interfaces/ISnapshotEvent.js.map +1 -0
  318. package/dist/esm/interfaces/IViewLocker.js +17 -0
  319. package/dist/esm/interfaces/IViewLocker.js.map +1 -0
  320. package/dist/esm/interfaces/Identifier.js +2 -0
  321. package/dist/esm/interfaces/Identifier.js.map +1 -0
  322. package/dist/esm/interfaces/index.js +30 -0
  323. package/dist/esm/interfaces/index.js.map +1 -0
  324. package/dist/esm/interfaces/isObject.js +5 -0
  325. package/dist/esm/interfaces/isObject.js.map +1 -0
  326. package/dist/esm/rabbitmq/IContainer.js +2 -0
  327. package/dist/esm/rabbitmq/IContainer.js.map +1 -0
  328. package/dist/esm/rabbitmq/RabbitMqCommandBus.js +80 -0
  329. package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -0
  330. package/dist/esm/rabbitmq/RabbitMqEventBus.js +117 -0
  331. package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -0
  332. package/dist/esm/rabbitmq/RabbitMqGateway.js +541 -0
  333. package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -0
  334. package/dist/esm/rabbitmq/index.js +5 -0
  335. package/dist/esm/rabbitmq/index.js.map +1 -0
  336. package/dist/esm/rabbitmq/utils/index.js +3 -0
  337. package/dist/esm/rabbitmq/utils/index.js.map +1 -0
  338. package/dist/esm/rabbitmq/utils/registerExitCleanup.js +24 -0
  339. package/dist/esm/rabbitmq/utils/registerExitCleanup.js.map +1 -0
  340. package/dist/esm/rabbitmq/utils/resolveProvider.js +6 -0
  341. package/dist/esm/rabbitmq/utils/resolveProvider.js.map +1 -0
  342. package/dist/esm/sqlite/AbstractSqliteAccessor.js +46 -0
  343. package/dist/esm/sqlite/AbstractSqliteAccessor.js.map +1 -0
  344. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js +22 -0
  345. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  346. package/dist/esm/sqlite/AbstractSqliteView.js +46 -0
  347. package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -0
  348. package/dist/esm/sqlite/IContainer.js +2 -0
  349. package/dist/esm/sqlite/IContainer.js.map +1 -0
  350. package/dist/esm/sqlite/SqliteEventLocker.js +89 -0
  351. package/dist/esm/sqlite/SqliteEventLocker.js.map +1 -0
  352. package/dist/esm/sqlite/SqliteObjectStorage.js +110 -0
  353. package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -0
  354. package/dist/esm/sqlite/SqliteObjectView.js +44 -0
  355. package/dist/esm/sqlite/SqliteObjectView.js.map +1 -0
  356. package/dist/esm/sqlite/SqliteProjectionDataParams.js +2 -0
  357. package/dist/esm/sqlite/SqliteProjectionDataParams.js.map +1 -0
  358. package/dist/esm/sqlite/SqliteViewLocker.js +115 -0
  359. package/dist/esm/sqlite/SqliteViewLocker.js.map +1 -0
  360. package/dist/esm/sqlite/index.js +10 -0
  361. package/dist/esm/sqlite/index.js.map +1 -0
  362. package/dist/esm/sqlite/queries/eventLockTableInit.js +11 -0
  363. package/dist/esm/sqlite/queries/eventLockTableInit.js.map +1 -0
  364. package/dist/esm/sqlite/queries/index.js +3 -0
  365. package/dist/esm/sqlite/queries/index.js.map +1 -0
  366. package/dist/esm/sqlite/queries/viewLockTableInit.js +10 -0
  367. package/dist/esm/sqlite/queries/viewLockTableInit.js.map +1 -0
  368. package/dist/esm/sqlite/utils/getEventId.js +7 -0
  369. package/dist/esm/sqlite/utils/getEventId.js.map +1 -0
  370. package/dist/esm/sqlite/utils/guid.js +5 -0
  371. package/dist/esm/sqlite/utils/guid.js.map +1 -0
  372. package/dist/esm/sqlite/utils/index.js +3 -0
  373. package/dist/esm/sqlite/utils/index.js.map +1 -0
  374. package/dist/esm/utils/Deferred.js +34 -0
  375. package/dist/esm/utils/Deferred.js.map +1 -0
  376. package/dist/esm/utils/Lock.js +97 -0
  377. package/dist/esm/utils/Lock.js.map +1 -0
  378. package/dist/esm/utils/MapAssertable.js +26 -0
  379. package/dist/esm/utils/MapAssertable.js.map +1 -0
  380. package/dist/esm/utils/assert.js +70 -0
  381. package/dist/esm/utils/assert.js.map +1 -0
  382. package/dist/esm/utils/clone.js +10 -0
  383. package/dist/esm/utils/clone.js.map +1 -0
  384. package/dist/esm/utils/extractErrorDetails.js +33 -0
  385. package/dist/esm/utils/extractErrorDetails.js.map +1 -0
  386. package/dist/esm/utils/getClassName.js +7 -0
  387. package/dist/esm/utils/getClassName.js.map +1 -0
  388. package/dist/esm/utils/getHandler.js +15 -0
  389. package/dist/esm/utils/getHandler.js.map +1 -0
  390. package/dist/esm/utils/getMessageHandlerNames.js +27 -0
  391. package/dist/esm/utils/getMessageHandlerNames.js.map +1 -0
  392. package/dist/esm/utils/index.js +15 -0
  393. package/dist/esm/utils/index.js.map +1 -0
  394. package/dist/esm/utils/isClass.js +5 -0
  395. package/dist/esm/utils/isClass.js.map +1 -0
  396. package/dist/esm/utils/sagaId.js +18 -0
  397. package/dist/esm/utils/sagaId.js.map +1 -0
  398. package/dist/esm/utils/setupOneTimeEmitterSubscription.js +42 -0
  399. package/dist/esm/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  400. package/dist/esm/utils/subscribe.js +40 -0
  401. package/dist/esm/utils/subscribe.js.map +1 -0
  402. package/dist/esm/utils/validateHandlers.js +18 -0
  403. package/dist/esm/utils/validateHandlers.js.map +1 -0
  404. package/dist/esm/workers/AbstractWorkerProjection.js +52 -0
  405. package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -0
  406. package/dist/esm/workers/WorkerProxyProjection.js +105 -0
  407. package/dist/esm/workers/WorkerProxyProjection.js.map +1 -0
  408. package/dist/esm/workers/index.js +4 -0
  409. package/dist/esm/workers/index.js.map +1 -0
  410. package/dist/esm/workers/interfaces/IProxyProjection.js +2 -0
  411. package/dist/esm/workers/interfaces/IProxyProjection.js.map +1 -0
  412. package/dist/esm/workers/interfaces/IWorkerProjection.js +2 -0
  413. package/dist/esm/workers/interfaces/IWorkerProjection.js.map +1 -0
  414. package/dist/esm/workers/interfaces/index.js +2 -0
  415. package/dist/esm/workers/interfaces/index.js.map +1 -0
  416. package/dist/esm/workers/protocol.js +11 -0
  417. package/dist/esm/workers/protocol.js.map +1 -0
  418. package/dist/esm/workers/utils/ProjectionView.js +2 -0
  419. package/dist/esm/workers/utils/ProjectionView.js.map +1 -0
  420. package/dist/esm/workers/utils/createWorker.js +51 -0
  421. package/dist/esm/workers/utils/createWorker.js.map +1 -0
  422. package/dist/esm/workers/utils/createWorkerInstance.js +23 -0
  423. package/dist/esm/workers/utils/createWorkerInstance.js.map +1 -0
  424. package/dist/esm/workers/utils/index.js +5 -0
  425. package/dist/esm/workers/utils/index.js.map +1 -0
  426. package/dist/esm/workers/utils/nodeEndpoint.js +5 -0
  427. package/dist/esm/workers/utils/nodeEndpoint.js.map +1 -0
  428. package/dist/esm/workers/utils/workerProxyFactory.js +18 -0
  429. package/dist/esm/workers/utils/workerProxyFactory.js.map +1 -0
  430. package/dist/types/AbstractAggregate.d.ts +80 -0
  431. package/dist/types/AbstractProjection.d.ts +77 -0
  432. package/dist/types/AbstractSaga.d.ts +42 -0
  433. package/dist/types/AggregateCommandHandler.d.ts +22 -0
  434. package/dist/types/CommandBus.d.ts +4 -0
  435. package/dist/types/CqrsContainerBuilder.d.ts +21 -0
  436. package/dist/types/Event.d.ts +9 -0
  437. package/dist/types/EventDispatchPipeline.d.ts +16 -0
  438. package/dist/types/EventDispatcher.d.ts +39 -0
  439. package/dist/types/EventIdAugmentor.d.ts +12 -0
  440. package/dist/types/EventStore.d.ts +29 -0
  441. package/dist/types/SagaEventHandler.d.ts +22 -0
  442. package/dist/types/errors/ConcurrencyError.d.ts +9 -0
  443. package/dist/types/errors/index.d.ts +1 -0
  444. package/dist/types/in-memory/InMemoryEventStorage.d.ts +24 -0
  445. package/dist/types/in-memory/InMemoryLock.d.ts +23 -0
  446. package/dist/types/in-memory/InMemoryMessageBus.d.ts +45 -0
  447. package/dist/types/in-memory/InMemorySnapshotStorage.d.ts +37 -0
  448. package/dist/types/in-memory/InMemoryView.d.ts +53 -0
  449. package/dist/types/in-memory/index.d.ts +5 -0
  450. package/dist/types/in-memory/utils/index.d.ts +1 -0
  451. package/dist/types/in-memory/utils/nextCycle.d.ts +4 -0
  452. package/dist/types/index.d.ts +15 -0
  453. package/dist/types/interfaces/IAggregate.d.ts +78 -0
  454. package/dist/types/interfaces/IAggregateSnapshotStorage.d.ts +8 -0
  455. package/dist/types/interfaces/ICommand.d.ts +2 -0
  456. package/dist/types/interfaces/ICommandBus.d.ts +15 -0
  457. package/dist/types/interfaces/IContainer.d.ts +37 -0
  458. package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +29 -0
  459. package/dist/types/interfaces/IEvent.d.ts +7 -0
  460. package/dist/types/interfaces/IEventBus.d.ts +6 -0
  461. package/dist/types/interfaces/IEventDispatcher.d.ts +6 -0
  462. package/dist/types/interfaces/IEventLocker.d.ts +28 -0
  463. package/dist/types/interfaces/IEventReceptor.d.ts +5 -0
  464. package/dist/types/interfaces/IEventSet.d.ts +3 -0
  465. package/dist/types/interfaces/IEventStorageReader.d.ts +48 -0
  466. package/dist/types/interfaces/IEventStore.d.ts +9 -0
  467. package/dist/types/interfaces/IEventStream.d.ts +2 -0
  468. package/dist/types/interfaces/IIdentifierProvider.d.ts +10 -0
  469. package/dist/types/interfaces/ILocker.d.ts +8 -0
  470. package/dist/types/interfaces/ILogger.d.ts +22 -0
  471. package/dist/types/interfaces/IMessage.d.ts +23 -0
  472. package/dist/types/interfaces/IMutableState.d.ts +14 -0
  473. package/dist/types/interfaces/IObjectStorage.d.ts +8 -0
  474. package/dist/types/interfaces/IObservable.d.ts +15 -0
  475. package/dist/types/interfaces/IObservableQueueProvider.d.ts +8 -0
  476. package/dist/types/interfaces/IObserver.d.ts +4 -0
  477. package/dist/types/interfaces/IProjection.d.ts +17 -0
  478. package/dist/types/interfaces/ISaga.d.ts +38 -0
  479. package/dist/types/interfaces/ISnapshotEvent.d.ts +7 -0
  480. package/dist/types/interfaces/IViewLocker.d.ts +34 -0
  481. package/dist/types/interfaces/Identifier.d.ts +1 -0
  482. package/dist/types/interfaces/index.d.ts +29 -0
  483. package/dist/types/interfaces/isObject.d.ts +1 -0
  484. package/dist/types/rabbitmq/IContainer.d.ts +19 -0
  485. package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +38 -0
  486. package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +44 -0
  487. package/dist/types/rabbitmq/RabbitMqGateway.d.ts +133 -0
  488. package/dist/types/rabbitmq/index.d.ts +4 -0
  489. package/dist/types/rabbitmq/utils/index.d.ts +2 -0
  490. package/dist/types/rabbitmq/utils/registerExitCleanup.d.ts +10 -0
  491. package/dist/types/rabbitmq/utils/resolveProvider.d.ts +3 -0
  492. package/dist/types/sqlite/AbstractSqliteAccessor.d.ts +25 -0
  493. package/dist/types/sqlite/AbstractSqliteObjectProjection.d.ts +8 -0
  494. package/dist/types/sqlite/AbstractSqliteView.d.ts +23 -0
  495. package/dist/types/sqlite/IContainer.d.ts +7 -0
  496. package/dist/types/sqlite/SqliteEventLocker.d.ts +30 -0
  497. package/dist/types/sqlite/SqliteObjectStorage.d.ts +17 -0
  498. package/dist/types/sqlite/SqliteObjectView.d.ts +19 -0
  499. package/dist/types/sqlite/SqliteProjectionDataParams.d.ts +14 -0
  500. package/dist/types/sqlite/SqliteViewLocker.d.ts +31 -0
  501. package/dist/types/sqlite/index.d.ts +9 -0
  502. package/dist/types/sqlite/queries/eventLockTableInit.d.ts +1 -0
  503. package/dist/types/sqlite/queries/index.d.ts +2 -0
  504. package/dist/types/sqlite/queries/viewLockTableInit.d.ts +1 -0
  505. package/dist/types/sqlite/utils/getEventId.d.ts +5 -0
  506. package/dist/types/sqlite/utils/guid.d.ts +4 -0
  507. package/dist/types/sqlite/utils/index.d.ts +2 -0
  508. package/dist/types/utils/Deferred.d.ts +13 -0
  509. package/dist/types/utils/Lock.d.ts +30 -0
  510. package/dist/types/utils/MapAssertable.d.ts +11 -0
  511. package/dist/types/utils/assert.d.ts +20 -0
  512. package/dist/types/utils/clone.d.ts +1 -0
  513. package/dist/types/utils/extractErrorDetails.d.ts +8 -0
  514. package/dist/types/utils/getClassName.d.ts +4 -0
  515. package/dist/types/utils/getHandler.d.ts +7 -0
  516. package/dist/types/utils/getMessageHandlerNames.d.ts +12 -0
  517. package/dist/types/utils/index.d.ts +14 -0
  518. package/dist/types/utils/isClass.d.ts +1 -0
  519. package/dist/types/utils/sagaId.d.ts +6 -0
  520. package/dist/types/utils/setupOneTimeEmitterSubscription.d.ts +12 -0
  521. package/dist/types/utils/subscribe.d.ts +9 -0
  522. package/dist/types/utils/validateHandlers.d.ts +4 -0
  523. package/dist/types/workers/AbstractWorkerProjection.d.ts +25 -0
  524. package/dist/types/workers/WorkerProxyProjection.d.ts +25 -0
  525. package/dist/types/workers/index.d.ts +3 -0
  526. package/dist/types/workers/interfaces/IProxyProjection.d.ts +15 -0
  527. package/dist/types/workers/interfaces/IWorkerProjection.d.ts +19 -0
  528. package/dist/types/workers/interfaces/index.d.ts +2 -0
  529. package/dist/types/workers/protocol.d.ts +10 -0
  530. package/dist/types/workers/utils/ProjectionView.d.ts +2 -0
  531. package/dist/types/workers/utils/createWorker.d.ts +10 -0
  532. package/dist/types/workers/utils/createWorkerInstance.d.ts +11 -0
  533. package/dist/types/workers/utils/index.d.ts +5 -0
  534. package/dist/types/workers/utils/nodeEndpoint.d.ts +2 -0
  535. package/dist/types/workers/utils/workerProxyFactory.d.ts +14 -0
  536. package/package.json +129 -29
  537. package/jsconfig.json +0 -15
  538. package/src/AbstractAggregate.js +0 -277
  539. package/src/AbstractProjection.js +0 -192
  540. package/src/AbstractSaga.js +0 -171
  541. package/src/AggregateCommandHandler.js +0 -126
  542. package/src/CommandBus.js +0 -91
  543. package/src/CqrsContainerBuilder.js +0 -131
  544. package/src/EventStore.js +0 -457
  545. package/src/EventStream.js +0 -63
  546. package/src/SagaEventHandler.js +0 -141
  547. package/src/index.js +0 -21
  548. package/src/infrastructure/InMemoryEventStorage.js +0 -76
  549. package/src/infrastructure/InMemoryMessageBus.js +0 -132
  550. package/src/infrastructure/InMemorySnapshotStorage.js +0 -40
  551. package/src/infrastructure/InMemoryView.js +0 -265
  552. package/src/subscribe.js +0 -48
  553. package/src/utils/getClassName.js +0 -11
  554. package/src/utils/getHandledMessageTypes.js +0 -24
  555. package/src/utils/getHandler.js +0 -21
  556. package/src/utils/getMessageHandlerNames.js +0 -51
  557. package/src/utils/index.js +0 -6
  558. package/src/utils/isClass.js +0 -6
  559. package/src/utils/nullLogger.js +0 -8
  560. package/src/utils/validateHandlers.js +0 -25
  561. package/types/index.d.ts +0 -16
  562. package/types/interfaces/IAggregate.d.ts +0 -30
  563. package/types/interfaces/IAggregateSnapshotStorage.d.ts +0 -4
  564. package/types/interfaces/ICommandBus.d.ts +0 -6
  565. package/types/interfaces/ICommandHandler.d.ts +0 -3
  566. package/types/interfaces/IConcurrentView.d.ts +0 -22
  567. package/types/interfaces/IEventReceptor.d.ts +0 -3
  568. package/types/interfaces/IEventStorage.d.ts +0 -20
  569. package/types/interfaces/IEventStore.d.ts +0 -18
  570. package/types/interfaces/IEventStream.d.ts +0 -13
  571. package/types/interfaces/ILogger.d.ts +0 -3
  572. package/types/interfaces/IMessageBus.d.ts +0 -5
  573. package/types/interfaces/IObserver.d.ts +0 -11
  574. package/types/interfaces/IProjection.d.ts +0 -10
  575. package/types/interfaces/ISaga.d.ts +0 -27
  576. package/types/interfaces/Identifier.d.ts +0 -1
@@ -0,0 +1,12 @@
1
+ import type { DispatchPipelineBatch, DispatchPipelineEnvelope, IContainer, IDispatchPipelineProcessor } from './interfaces/index.ts';
2
+ /**
3
+ * Dispatch-pipeline processor that ensures each event has an `id`.
4
+ *
5
+ * Some components (e.g. `SagaEventHandler`) require `event.id` to correlate saga instances.
6
+ * Put this processor early in the `eventDispatchPipeline` to auto-assign ids to events that don't have them.
7
+ */
8
+ export declare class EventIdAugmentor implements IDispatchPipelineProcessor {
9
+ #private;
10
+ constructor({ identifierProvider }: Pick<IContainer, 'identifierProvider'>);
11
+ process(batch: DispatchPipelineBatch<DispatchPipelineEnvelope>): Promise<readonly DispatchPipelineEnvelope[]>;
12
+ }
@@ -0,0 +1,29 @@
1
+ import { type IEvent, type IEventSet, type IMessageHandler, type IObservable, type IEventStream, type IEventStore, type EventQueryAfter, type EventQueryBefore, type Identifier, type IEventBus, type IContainer, type AggregateEventsQueryParams } from './interfaces/index.ts';
2
+ export declare class EventStore implements IEventStore {
3
+ #private;
4
+ eventBus: IEventBus;
5
+ constructor({ eventStorage, eventStorageReader, identifierProvider, snapshotStorage, eventBus, eventDispatcher, eventDispatchPipeline, eventDispatchPipelines, logger }: Pick<IContainer, 'eventStorage' | 'eventStorageReader' | 'identifierProvider' | 'snapshotStorage' | 'eventBus' | 'eventDispatcher' | 'logger' | 'eventDispatchPipeline' | 'eventDispatchPipelines'>);
6
+ /**
7
+ * Generates and returns a new unique identifier using the configured identifier provider.
8
+ *
9
+ * @returns A promise resolving to a unique identifier suitable for aggregates, sagas, and events.
10
+ */
11
+ getNewId(): Promise<Identifier>;
12
+ getEventsByTypes(eventTypes: Readonly<string[]>, options?: EventQueryAfter): IEventStream;
13
+ /** Retrieve all events of specific Aggregate */
14
+ getAggregateEvents(aggregateId: Identifier, options?: AggregateEventsQueryParams): IEventStream;
15
+ /** Retrieve events of specific Saga */
16
+ getSagaEvents(sagaId: Identifier, filter: EventQueryBefore): AsyncGenerator<Readonly<IEvent>, void, any>;
17
+ /**
18
+ * Validate events, commit to storage and publish to eventBus, if needed
19
+ *
20
+ * @param events - a set of events to commit
21
+ * @returns Signed and committed events
22
+ */
23
+ dispatch(events: IEventSet, meta?: Record<string, any>): Promise<IEventSet>;
24
+ on(messageType: string, handler: IMessageHandler): void;
25
+ off(messageType: string, handler: IMessageHandler): void;
26
+ queue(name: string): IObservable;
27
+ /** Creates one-time subscription for one or multiple events that match a filter */
28
+ once(messageTypes: string | string[], handler?: IMessageHandler, filter?: (e: IEvent) => boolean): Promise<IEvent>;
29
+ }
@@ -0,0 +1,22 @@
1
+ import type { IContainer, IEvent, IEventReceptor, IObservable, ISagaConstructor, ISagaFactory } from './interfaces/index.ts';
2
+ /**
3
+ * Listens to Saga events,
4
+ * creates new saga or restores it from event store,
5
+ * applies new events
6
+ * and passes command(s) to command bus
7
+ */
8
+ export declare class SagaEventHandler implements IEventReceptor {
9
+ #private;
10
+ constructor(options: Pick<IContainer, 'eventStore' | 'commandBus' | 'executionLocker' | 'logger'> & {
11
+ sagaType?: ISagaConstructor;
12
+ sagaFactory?: ISagaFactory;
13
+ sagaDescriptor?: string;
14
+ queueName?: string;
15
+ startsWith?: string[];
16
+ handles?: string[];
17
+ });
18
+ /** Overrides observer subscribe method */
19
+ subscribe(eventStore: IObservable): void;
20
+ /** Handle saga event */
21
+ handle(event: IEvent): Promise<void>;
22
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Thrown by event storage implementations when a concurrency conflict is detected
3
+ * (e.g. duplicate aggregate version). When this error is thrown during event dispatch,
4
+ * AggregateCommandHandler can automatically retry the command by re-creating
5
+ * the aggregate from the event store.
6
+ */
7
+ export declare class ConcurrencyError extends Error {
8
+ constructor(message?: string, options?: ErrorOptions);
9
+ }
@@ -0,0 +1 @@
1
+ export * from './ConcurrencyError.ts';
@@ -0,0 +1,24 @@
1
+ import type { IIdentifierProvider, IEvent, IEventSet, EventQueryAfter, IEventStorageReader, IEventStream, Identifier, IDispatchPipelineProcessor, DispatchPipelineBatch, AggregateEventsQueryParams } from '../interfaces/index.ts';
2
+ /**
3
+ * A simple event storage implementation intended to use for tests only.
4
+ * Storage content resets on each app restart.
5
+ */
6
+ export declare class InMemoryEventStorage implements IEventStorageReader, IIdentifierProvider, IDispatchPipelineProcessor {
7
+ #private;
8
+ getNewId(): string;
9
+ commitEvents(events: IEventSet, options?: {
10
+ ignoreConcurrencyError?: boolean;
11
+ }): Promise<IEventSet>;
12
+ getAggregateEvents(aggregateId: Identifier, options?: AggregateEventsQueryParams): IEventStream;
13
+ getSagaEvents(sagaId: Identifier, { beforeEvent }: {
14
+ beforeEvent: IEvent;
15
+ }): IEventStream;
16
+ getEventsByTypes(eventTypes: Readonly<string[]>, options?: EventQueryAfter): IEventStream;
17
+ /**
18
+ * Processes a batch of dispatch pipeline items, extracts the events,
19
+ * commits them to the in-memory storage, and returns the original batch.
20
+ *
21
+ * This method is part of the `IDispatchPipelineProcessor` interface.
22
+ */
23
+ process(batch: DispatchPipelineBatch): Promise<DispatchPipelineBatch>;
24
+ }
@@ -0,0 +1,23 @@
1
+ import type { IViewLocker } from '../interfaces/IViewLocker.js';
2
+ export declare class InMemoryLock implements IViewLocker {
3
+ #private;
4
+ /**
5
+ * Indicates if lock is acquired
6
+ */
7
+ get locked(): boolean;
8
+ get ready(): boolean;
9
+ /**
10
+ * Acquire the lock on the current instance.
11
+ * Resolves when the lock is successfully acquired
12
+ */
13
+ lock(): Promise<boolean>;
14
+ /**
15
+ * Release the lock acquired earlier
16
+ */
17
+ unlock(): Promise<void>;
18
+ /**
19
+ * Wait until the lock is released.
20
+ * Resolves immediately if the lock is not acquired
21
+ */
22
+ once(event: 'ready'): Promise<void>;
23
+ }
@@ -0,0 +1,45 @@
1
+ import type { ICommand, ICommandBus, IEvent, IEventBus, IMessageHandler, IObservable, IObservableQueueProvider } from '../interfaces/index.ts';
2
+ /**
3
+ * Default implementation of the message bus.
4
+ * Keeps all subscriptions and messages in memory.
5
+ */
6
+ export declare class InMemoryMessageBus implements IEventBus, ICommandBus, IObservableQueueProvider {
7
+ protected handlers: Map<string, Set<IMessageHandler>>;
8
+ protected uniqueEventHandlers: boolean;
9
+ protected queueName: string | undefined;
10
+ protected queues: Map<string, InMemoryMessageBus>;
11
+ constructor({ queueName, uniqueEventHandlers }?: {
12
+ queueName?: string;
13
+ uniqueEventHandlers?: boolean;
14
+ });
15
+ /**
16
+ * Subscribe to message type
17
+ */
18
+ on(messageType: string, handler: IMessageHandler): void;
19
+ /**
20
+ * Get or create a named queue.
21
+ * Named queues support only one handler per event type.
22
+ */
23
+ queue(queueName: string): IObservable;
24
+ /**
25
+ * Remove subscription
26
+ */
27
+ off(messageType: string, handler: IMessageHandler): void;
28
+ /**
29
+ * Send command to exactly 1 command handler
30
+ */
31
+ send(commandType: string, aggregateId?: string, options?: {
32
+ payload?: object;
33
+ context?: object;
34
+ }): Promise<any>;
35
+ /**
36
+ * Send pre-built command to exactly 1 command handler
37
+ */
38
+ send(command: ICommand): Promise<any>;
39
+ /** @deprecated Use {@link send} */
40
+ sendRaw(command: ICommand): Promise<any>;
41
+ /**
42
+ * Publish event to all subscribers (if any)
43
+ */
44
+ publish(event: IEvent, meta?: Record<string, any>): Promise<unknown[]>;
45
+ }
@@ -0,0 +1,37 @@
1
+ import { type DispatchPipelineBatch, type IAggregateSnapshotStorage, type IContainer, type IDispatchPipelineProcessor, type ISnapshotEvent } from '../interfaces/index.ts';
2
+ /**
3
+ * In-memory storage for aggregate snapshots.
4
+ * Storage content resets on app restart
5
+ */
6
+ export declare class InMemorySnapshotStorage implements IAggregateSnapshotStorage, IDispatchPipelineProcessor {
7
+ #private;
8
+ constructor(c?: Partial<Pick<IContainer, 'logger'>>);
9
+ /**
10
+ * Get latest aggregate snapshot
11
+ */
12
+ getAggregateSnapshot(aggregateId: string): Promise<ISnapshotEvent | undefined>;
13
+ /**
14
+ * Save new aggregate snapshot
15
+ */
16
+ saveAggregateSnapshot(snapshotEvent: ISnapshotEvent): Promise<void>;
17
+ /**
18
+ * Delete aggregate snapshot
19
+ */
20
+ deleteAggregateSnapshot<TState>(snapshotEvent: ISnapshotEvent<TState>): Promise<void> | void;
21
+ /**
22
+ * Processes a batch of events, saves any snapshot events found, and returns the batch
23
+ * without the snapshot events.
24
+ *
25
+ * This method is part of the `IDispatchPipelineProcessor` interface.
26
+ */
27
+ process(batch: DispatchPipelineBatch): Promise<DispatchPipelineBatch>;
28
+ /**
29
+ * Reverts the snapshots associated with the events in the given batch.
30
+ * It filters the batch for snapshot events and deletes the corresponding aggregate snapshots.
31
+ *
32
+ * This method is part of the `IDispatchPipelineProcessor` interface.
33
+ *
34
+ * @param batch The batch of events to revert snapshots for.
35
+ */
36
+ revert(batch: DispatchPipelineBatch): Promise<void>;
37
+ }
@@ -0,0 +1,53 @@
1
+ import type { IViewLocker, Identifier, IObjectStorage } from '../interfaces/index.ts';
2
+ /**
3
+ * In-memory Projection View, which suspends get()'s until it is ready
4
+ */
5
+ export declare class InMemoryView<TRecord> implements IViewLocker, IObjectStorage<TRecord> {
6
+ #private;
7
+ static factory<TView>(): TView;
8
+ protected _map: Map<Identifier, TRecord>;
9
+ /** Whether the view is restored */
10
+ get ready(): boolean;
11
+ /** Number of records in the View */
12
+ get size(): number;
13
+ constructor();
14
+ /** Lock the view to prevent concurrent modifications */
15
+ lock(): Promise<boolean>;
16
+ /** Release the lock */
17
+ unlock(): Promise<void>;
18
+ /** Create a Promise which will resolve to a first emitted event of a given type */
19
+ once(eventType: 'ready'): Promise<any>;
20
+ /**
21
+ * Check if view contains a record with a given key.
22
+ * This is the only synchronous method, so make sure to check the `ready` flag, if necessary
23
+ *
24
+ * @deprecated Use `async get()` instead
25
+ */
26
+ has(key: Identifier): boolean;
27
+ /** Get record with a given key; await until the view is restored */
28
+ get(key: Identifier, options?: {
29
+ nowait?: boolean;
30
+ }): Promise<TRecord | undefined>;
31
+ /**
32
+ * Get record with a given key synchronously
33
+ */
34
+ getSync(key: Identifier): TRecord | undefined;
35
+ /** Get all records matching an optional filter */
36
+ getAll(filter?: (r: TRecord | undefined, i: Identifier) => boolean): Promise<Array<[Identifier, TRecord | undefined]>>;
37
+ /** Create record with a given key and value */
38
+ create(key: Identifier, value?: TRecord): Promise<void>;
39
+ /** Update existing view record */
40
+ update(key: Identifier, update: (r: TRecord) => TRecord): Promise<void>;
41
+ /** Update existing view record or create new */
42
+ updateEnforcingNew(key: Identifier, update: (r?: TRecord) => TRecord): Promise<void>;
43
+ /** Update all records that match filter criteria */
44
+ updateAll(filter: (r: TRecord) => boolean, update: (r: TRecord) => TRecord): Promise<void>;
45
+ /** Update existing record */
46
+ private _update;
47
+ /** Delete record */
48
+ delete(key: Identifier): Promise<void>;
49
+ /** Delete all records that match filter criteria */
50
+ deleteAll(filter: (r?: TRecord) => boolean): Promise<void>;
51
+ /** Get view summary as string */
52
+ toString(): string;
53
+ }
@@ -0,0 +1,5 @@
1
+ export * from './InMemoryEventStorage.ts';
2
+ export * from './InMemoryLock.ts';
3
+ export * from './InMemoryMessageBus.ts';
4
+ export * from './InMemorySnapshotStorage.ts';
5
+ export * from './InMemoryView.ts';
@@ -0,0 +1 @@
1
+ export * from './nextCycle.ts';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @returns Promise that resolves on next event loop cycle
3
+ */
4
+ export declare const nextCycle: () => Promise<void>;
@@ -0,0 +1,15 @@
1
+ export { CqrsContainerBuilder as ContainerBuilder } from './CqrsContainerBuilder.ts';
2
+ export * from './CommandBus.ts';
3
+ export * from './EventStore.ts';
4
+ export * from './EventIdAugmentor.ts';
5
+ export * from './AbstractAggregate.ts';
6
+ export * from './AggregateCommandHandler.ts';
7
+ export * from './AbstractSaga.ts';
8
+ export * from './SagaEventHandler.ts';
9
+ export * from './AbstractProjection.ts';
10
+ export * from './EventDispatcher.ts';
11
+ export * from './in-memory/index.ts';
12
+ export * as Event from './Event.ts';
13
+ export { getMessageHandlerNames, subscribe } from './utils/index.ts';
14
+ export * from './interfaces/index.ts';
15
+ export * from './errors/index.ts';
@@ -0,0 +1,78 @@
1
+ import type { ICommand } from './ICommand.ts';
2
+ import type { Identifier } from './Identifier.ts';
3
+ import type { IEvent } from './IEvent.ts';
4
+ import type { IEventSet } from './IEventSet.ts';
5
+ import type { IMutableState } from './IMutableState.ts';
6
+ /**
7
+ * Core interface representing an Aggregate in a CQRS architecture.
8
+ * An aggregate encapsulates business logic and state, handling commands
9
+ * and applying events to transition between states.
10
+ */
11
+ export interface IAggregate {
12
+ /**
13
+ * Applies a single event to update the aggregate's internal state.
14
+ *
15
+ * This method is used primarily when rehydrating the aggregate
16
+ * from the persisted sequence of events
17
+ *
18
+ * @param event - The event to be applied
19
+ */
20
+ mutate(event: IEvent): void;
21
+ /**
22
+ * Processes a command by executing the aggregate's business logic,
23
+ * resulting in new events that capture the state changes.
24
+ * It serves as the primary entry point for invoking aggregate behavior
25
+ *
26
+ * @param command - The command to be processed
27
+ * @returns A set of events produced by the command
28
+ */
29
+ handle(command: ICommand): IEventSet | Promise<IEventSet>;
30
+ }
31
+ export type IAggregateConstructorParams<TState extends IMutableState | object | void> = {
32
+ /** Unique aggregate identifier */
33
+ id: Identifier;
34
+ /**
35
+ * @deprecated The aggregate no longer receives all events in the constructor.
36
+ * Instead, events are loaded and passed to the `mutate` method after instantiation.
37
+ */
38
+ events?: IEventSet;
39
+ /** Aggregate state instance */
40
+ state?: TState;
41
+ };
42
+ export type RetryOnConcurrencyErrorDecision = boolean | 'ignore';
43
+ export type RetryOnConcurrencyErrorResolver = (err: unknown, events: IEventSet | undefined, attempt: number) => RetryOnConcurrencyErrorDecision;
44
+ export type RetryOnConcurrencyErrorConfig = {
45
+ maxRetries?: number;
46
+ ignoreAfterMaxRetries?: boolean;
47
+ };
48
+ export type RetryOnConcurrencyErrorOptions = RetryOnConcurrencyErrorDecision | RetryOnConcurrencyErrorConfig | RetryOnConcurrencyErrorResolver | number;
49
+ export interface IAggregateConstructor<TAggregate extends IAggregate, TState extends IMutableState | object | void> {
50
+ /**
51
+ * List of command types handled by the aggregate.
52
+ *
53
+ * Used to subscribe AggregateCommandHandler to the command bus.
54
+ */
55
+ readonly handles: string[];
56
+ /**
57
+ * Optional list of event types that are required to restore the aggregate state.
58
+ *
59
+ * If provided, AggregateCommandHandler can request only these events from storage
60
+ * (typically together with a `tail: 'last'` marker to restore the version).
61
+ */
62
+ readonly restoresFrom?: Readonly<string[]>;
63
+ /**
64
+ * Defines retry behavior when a ConcurrencyError is thrown during event dispatch.
65
+ *
66
+ * - `undefined` (default): retry up to 5 times on ConcurrencyError
67
+ * - `false`: no retry
68
+ * - `true`: retry up to 5 times on ConcurrencyError
69
+ * - `'ignore'`: on ConcurrencyError, force-dispatch immediately with `ignoreConcurrencyError: true`
70
+ * - `number`: retry up to the specified number of times on ConcurrencyError
71
+ * - `{ maxRetries?: number, ignoreAfterMaxRetries?: boolean }`: configure retries
72
+ * - `(err, events, attempt) => RetryOnConcurrencyErrorDecision`:
73
+ * custom function to decide whether to retry (`true`), stop (`false`) or ignore (`'ignore'`)
74
+ */
75
+ readonly retryOnConcurrencyError?: RetryOnConcurrencyErrorOptions;
76
+ new (options: IAggregateConstructorParams<TState>): TAggregate;
77
+ }
78
+ export type IAggregateFactory<TAggregate extends IAggregate, TState extends IMutableState | object | void> = (options: IAggregateConstructorParams<TState>) => TAggregate;
@@ -0,0 +1,8 @@
1
+ import type { Identifier } from './Identifier.ts';
2
+ import type { ISnapshotEvent } from './ISnapshotEvent.ts';
3
+ export interface IAggregateSnapshotStorage {
4
+ getAggregateSnapshot<TState>(aggregateId: Identifier): Promise<ISnapshotEvent<TState> | undefined> | ISnapshotEvent<TState> | undefined;
5
+ saveAggregateSnapshot<TState>(snapshotEvent: ISnapshotEvent<TState>): Promise<void> | void;
6
+ deleteAggregateSnapshot<TState>(snapshotEvent: ISnapshotEvent<TState>): Promise<void> | void;
7
+ }
8
+ export declare const isAggregateSnapshotStorage: (obj: unknown) => obj is IAggregateSnapshotStorage;
@@ -0,0 +1,2 @@
1
+ import type { IMessage } from './IMessage.ts';
2
+ export type ICommand<TPayload = any> = Omit<IMessage<TPayload>, 'aggregateVersion'>;
@@ -0,0 +1,15 @@
1
+ import type { ICommand } from './ICommand.ts';
2
+ import type { IObservable } from './IObservable.ts';
3
+ import type { IObserver } from './IObserver.ts';
4
+ export interface ICommandBus extends IObservable {
5
+ send(command: ICommand): Promise<any>;
6
+ send(commandType: string, aggregateId?: string, options?: {
7
+ payload?: object;
8
+ context?: object;
9
+ }): Promise<any>;
10
+ /** @deprecated Use {@link send} */
11
+ sendRaw(command: ICommand): Promise<any>;
12
+ }
13
+ export interface ICommandHandler extends IObserver {
14
+ subscribe(commandBus: ICommandBus): void;
15
+ }
@@ -0,0 +1,37 @@
1
+ import type { Container } from 'di0';
2
+ import type { ICommandBus } from './ICommandBus.ts';
3
+ import type { IEventDispatcher } from './IEventDispatcher.ts';
4
+ import type { IEventStore } from './IEventStore.ts';
5
+ import type { IEventBus } from './IEventBus.ts';
6
+ import type { IDispatchPipelineProcessor } from './IDispatchPipelineProcessor.ts';
7
+ import type { IEventStorageReader } from './IEventStorageReader.ts';
8
+ import type { IAggregateSnapshotStorage } from './IAggregateSnapshotStorage.ts';
9
+ import type { IIdentifierProvider } from './IIdentifierProvider.ts';
10
+ import type { IExtendableLogger, ILogger } from './ILogger.ts';
11
+ import type { ILocker } from './ILocker.ts';
12
+ export interface IContainer extends Container {
13
+ eventBus: IEventBus;
14
+ eventStore: IEventStore;
15
+ /**
16
+ * Storage alias used by dispatch pipelines (write/persist role).
17
+ * In simple setups this is the same implementation as eventStorageReader.
18
+ */
19
+ eventStorage?: IEventStorageReader;
20
+ /**
21
+ * Reader alias consumed by EventStore and other restore/read flows.
22
+ * Can point to a dedicated read implementation in split-storage setups.
23
+ */
24
+ eventStorageReader?: IEventStorageReader;
25
+ identifierProvider?: IIdentifierProvider;
26
+ snapshotStorage?: IAggregateSnapshotStorage;
27
+ eventIdAugmenter?: IDispatchPipelineProcessor;
28
+ commandBus: ICommandBus;
29
+ eventDispatcher?: IEventDispatcher;
30
+ /** Default event dispatch pipeline */
31
+ eventDispatchPipeline?: IDispatchPipelineProcessor[];
32
+ /** Multiple event dispatch pipelines per origin */
33
+ eventDispatchPipelines?: Record<string, IDispatchPipelineProcessor[]>;
34
+ executionLocker?: ILocker;
35
+ logger?: ILogger | IExtendableLogger;
36
+ process?: NodeJS.Process;
37
+ }
@@ -0,0 +1,29 @@
1
+ import type { IEvent } from './IEvent.ts';
2
+ /**
3
+ * Represents a wrapper for an event that can optionally contain additional metadata.
4
+ * Used to extend event processing with context-specific data required by processors.
5
+ */
6
+ export type DispatchPipelineEnvelope = {
7
+ /**
8
+ * Origin of the event. Can be used to distinguish between events coming from different sources.
9
+ */
10
+ origin?: string;
11
+ /**
12
+ * When true, storage writers may bypass optimistic-concurrency checks for this batch.
13
+ */
14
+ ignoreConcurrencyError?: boolean;
15
+ event?: IEvent;
16
+ };
17
+ /**
18
+ * A batch of event envelopes. Can contain custom envelope types extending EventEnvelope.
19
+ */
20
+ export type DispatchPipelineBatch<T extends DispatchPipelineEnvelope = DispatchPipelineEnvelope> = Readonly<Array<T>>;
21
+ /**
22
+ * Defines a processor that operates on a batch of event envelopes.
23
+ * Allows transformations, side-effects, or filtering of events during dispatch.
24
+ */
25
+ export interface IDispatchPipelineProcessor<T extends DispatchPipelineEnvelope = {}> {
26
+ process(batch: DispatchPipelineBatch<T>): Promise<DispatchPipelineBatch<T>>;
27
+ revert?(batch: DispatchPipelineBatch<T>): Promise<void>;
28
+ }
29
+ export declare const isDispatchPipelineProcessor: (obj: unknown) => obj is IDispatchPipelineProcessor;
@@ -0,0 +1,7 @@
1
+ import type { Identifier } from './Identifier.ts';
2
+ import type { IMessage } from './IMessage.ts';
3
+ export type IEvent<TPayload = any> = IMessage<TPayload> & {
4
+ /** Unique event identifier */
5
+ id?: Identifier;
6
+ };
7
+ export declare const isEvent: (event: unknown) => event is IEvent;
@@ -0,0 +1,6 @@
1
+ import type { IEvent } from './IEvent.ts';
2
+ import { type IObservable } from './IObservable.ts';
3
+ export interface IEventBus extends IObservable {
4
+ publish(event: IEvent, meta?: Record<string, any>): Promise<any>;
5
+ }
6
+ export declare const isEventBus: (obj: unknown) => boolean;
@@ -0,0 +1,6 @@
1
+ import type { IEventSet } from './IEventSet.ts';
2
+ import type { IEventBus } from './IEventBus.ts';
3
+ export interface IEventDispatcher {
4
+ readonly eventBus: IEventBus;
5
+ dispatch(events: IEventSet, meta?: Record<string, any>): Promise<IEventSet>;
6
+ }
@@ -0,0 +1,28 @@
1
+ import type { IEvent } from './IEvent.ts';
2
+ /**
3
+ * Interface for tracking event processing state to prevent concurrent processing
4
+ * by multiple processes.
5
+ */
6
+ export interface IEventLocker {
7
+ /**
8
+ * Retrieves the last projected event,
9
+ * allowing the projection state to be restored from subsequent events.
10
+ */
11
+ getLastEvent(): Promise<IEvent | undefined> | IEvent | undefined;
12
+ /**
13
+ * Marks an event as projecting to prevent it from being processed
14
+ * by another projection instance using the same storage.
15
+ *
16
+ * @returns `false` if the event is already being processed or has been processed.
17
+ */
18
+ tryMarkAsProjecting(event: IEvent): Promise<boolean> | boolean;
19
+ /**
20
+ * Marks an event as projected.
21
+ */
22
+ markAsProjected(event: IEvent): Promise<void> | void;
23
+ /**
24
+ * Records an event as the last projected event (restore checkpoint).
25
+ */
26
+ markAsLastEvent(event: IEvent): Promise<void> | void;
27
+ }
28
+ export declare const isEventLocker: (view: unknown) => view is IEventLocker;
@@ -0,0 +1,5 @@
1
+ import type { IEventStore } from './IEventStore.ts';
2
+ import type { IObserver } from './IObserver.ts';
3
+ export interface IEventReceptor extends IObserver {
4
+ subscribe(eventStore: IEventStore): void;
5
+ }
@@ -0,0 +1,3 @@
1
+ import { type IEvent } from './IEvent.ts';
2
+ export type IEventSet = ReadonlyArray<Readonly<IEvent>>;
3
+ export declare const isEventSet: (arr: unknown) => arr is IEventSet;
@@ -0,0 +1,48 @@
1
+ import type { Identifier } from './Identifier.ts';
2
+ import type { IEvent } from './IEvent.ts';
3
+ import type { IEventStream } from './IEventStream.ts';
4
+ import type { ISnapshotEvent } from './ISnapshotEvent.ts';
5
+ export type EventQueryAfter = {
6
+ /** Get events emitted after this specific event */
7
+ afterEvent?: IEvent;
8
+ };
9
+ export type EventQueryBefore = {
10
+ /** Get events emitted before this specific event */
11
+ beforeEvent?: IEvent;
12
+ };
13
+ export type AggregateEventsQueryParams = {
14
+ /**
15
+ * Optional snapshot event. If provided, storage should return only events after
16
+ * the snapshot's aggregateVersion.
17
+ */
18
+ snapshot?: ISnapshotEvent;
19
+ /**
20
+ * Optional list of event types to return.
21
+ *
22
+ * IMPORTANT: If you filter eventTypes, make sure you still restore the aggregate
23
+ * version correctly (e.g. via `tail: 'last'`), otherwise emitted events may get
24
+ * incorrect aggregateVersion values.
25
+ */
26
+ eventTypes?: Readonly<string[]>;
27
+ /**
28
+ * Optionally include the last aggregate event (after snapshot), regardless of type.
29
+ * Useful together with `eventTypes` to restore the aggregate version without pulling
30
+ * the full stream.
31
+ */
32
+ tail?: 'last';
33
+ };
34
+ export interface IEventStorageReader {
35
+ /**
36
+ * Retrieves events of specified types that were emitted after a given event.
37
+ */
38
+ getEventsByTypes(eventTypes: Readonly<string[]>, options?: EventQueryAfter): IEventStream;
39
+ /**
40
+ * Retrieves all events (and optionally a snapshot) associated with a specific aggregate.
41
+ */
42
+ getAggregateEvents(aggregateId: Identifier, options?: AggregateEventsQueryParams): IEventStream;
43
+ /**
44
+ * Retrieves events associated with a saga instance.
45
+ */
46
+ getSagaEvents(sagaId: Identifier, options: EventQueryBefore): IEventStream;
47
+ }
48
+ export declare const isEventStorageReader: (storage: unknown) => storage is IEventStorageReader;
@@ -0,0 +1,9 @@
1
+ import type { IEventDispatcher } from './IEventDispatcher.ts';
2
+ import type { IEvent } from './IEvent.ts';
3
+ import type { IEventStorageReader } from './IEventStorageReader.ts';
4
+ import type { IIdentifierProvider } from './IIdentifierProvider.ts';
5
+ import type { IMessageHandler, IObservable } from './IObservable.ts';
6
+ import type { IObservableQueueProvider } from './IObservableQueueProvider.ts';
7
+ export interface IEventStore extends IObservable, IObservableQueueProvider, IEventDispatcher, IEventStorageReader, IIdentifierProvider {
8
+ once(messageTypes: string | string[], handler?: IMessageHandler, filter?: (e: IEvent) => boolean): Promise<IEvent>;
9
+ }
@@ -0,0 +1,2 @@
1
+ import type { IEvent } from './IEvent.ts';
2
+ export type IEventStream = AsyncIterableIterator<Readonly<IEvent>>;
@@ -0,0 +1,10 @@
1
+ import type { Identifier } from './Identifier.ts';
2
+ export interface IIdentifierProvider {
3
+ /**
4
+ * Generates and returns a new unique identifier suitable for aggregates, sagas, and events.
5
+ *
6
+ * @returns A promise resolving to an identifier or an identifier itself.
7
+ */
8
+ getNewId(): Identifier | Promise<Identifier>;
9
+ }
10
+ export declare const isIdentifierProvider: (obj: any) => obj is IIdentifierProvider;
@@ -0,0 +1,8 @@
1
+ export interface ILockerLease {
2
+ release(): void;
3
+ [Symbol.dispose](): void;
4
+ }
5
+ export interface ILocker {
6
+ acquire(name?: string): Promise<ILockerLease>;
7
+ }
8
+ export declare const isExecutionLocker: (obj: unknown) => obj is ILocker;