node-cqrs 0.17.0 → 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 (608) hide show
  1. package/CHANGELOG.md +583 -92
  2. package/LICENSE +202 -21
  3. package/NOTICE +15 -0
  4. package/README.md +429 -113
  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/{infrastructure/utils → cjs/errors}/index.js +1 -2
  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/{infrastructure → cjs/in-memory}/InMemoryView.js +26 -45
  42. package/dist/cjs/in-memory/InMemoryView.js.map +1 -0
  43. package/dist/{utils → cjs/in-memory}/index.js +5 -8
  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/{infrastructure → cjs/in-memory}/utils/nextCycle.js +1 -1
  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/{interfaces.js → cjs/interfaces/IAggregate.js} +1 -2
  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.map +1 -0
  163. package/dist/cjs/utils/Lock.js +102 -0
  164. package/dist/cjs/utils/Lock.js.map +1 -0
  165. package/dist/cjs/utils/MapAssertable.js +30 -0
  166. package/dist/cjs/utils/MapAssertable.js.map +1 -0
  167. package/dist/cjs/utils/assert.js +88 -0
  168. package/dist/cjs/utils/assert.js.map +1 -0
  169. package/dist/cjs/utils/clone.js +13 -0
  170. package/dist/cjs/utils/clone.js.map +1 -0
  171. package/dist/cjs/utils/extractErrorDetails.js +37 -0
  172. package/dist/cjs/utils/extractErrorDetails.js.map +1 -0
  173. package/dist/cjs/utils/getClassName.js.map +1 -0
  174. package/dist/{utils → cjs/utils}/getHandler.js +5 -7
  175. package/dist/cjs/utils/getHandler.js.map +1 -0
  176. package/dist/{utils → cjs/utils}/getMessageHandlerNames.js +2 -10
  177. package/dist/cjs/utils/getMessageHandlerNames.js.map +1 -0
  178. package/dist/cjs/utils/index.js +31 -0
  179. package/dist/cjs/utils/index.js.map +1 -0
  180. package/dist/cjs/utils/isClass.js.map +1 -0
  181. package/dist/cjs/utils/sagaId.js +23 -0
  182. package/dist/cjs/utils/sagaId.js.map +1 -0
  183. package/dist/{utils → cjs/utils}/setupOneTimeEmitterSubscription.js +7 -8
  184. package/dist/cjs/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  185. package/dist/cjs/utils/subscribe.js +43 -0
  186. package/dist/cjs/utils/subscribe.js.map +1 -0
  187. package/dist/{utils → cjs/utils}/validateHandlers.js +6 -6
  188. package/dist/cjs/utils/validateHandlers.js.map +1 -0
  189. package/dist/cjs/workers/AbstractWorkerProjection.js +56 -0
  190. package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -0
  191. package/dist/cjs/workers/WorkerProxyProjection.js +142 -0
  192. package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -0
  193. package/dist/cjs/workers/index.js +20 -0
  194. package/dist/cjs/workers/index.js.map +1 -0
  195. package/dist/cjs/workers/interfaces/IProxyProjection.js +3 -0
  196. package/dist/cjs/workers/interfaces/IProxyProjection.js.map +1 -0
  197. package/dist/cjs/workers/interfaces/IWorkerProjection.js +3 -0
  198. package/dist/cjs/workers/interfaces/IWorkerProjection.js.map +1 -0
  199. package/dist/cjs/workers/interfaces/index.js +3 -0
  200. package/dist/cjs/workers/interfaces/index.js.map +1 -0
  201. package/dist/cjs/workers/protocol.js +16 -0
  202. package/dist/cjs/workers/protocol.js.map +1 -0
  203. package/dist/cjs/workers/utils/ProjectionView.js +3 -0
  204. package/dist/cjs/workers/utils/ProjectionView.js.map +1 -0
  205. package/dist/cjs/workers/utils/createWorker.js +87 -0
  206. package/dist/cjs/workers/utils/createWorker.js.map +1 -0
  207. package/dist/cjs/workers/utils/createWorkerInstance.js +59 -0
  208. package/dist/cjs/workers/utils/createWorkerInstance.js.map +1 -0
  209. package/dist/cjs/workers/utils/index.js +21 -0
  210. package/dist/cjs/workers/utils/index.js.map +1 -0
  211. package/dist/cjs/workers/utils/nodeEndpoint.js +8 -0
  212. package/dist/cjs/workers/utils/nodeEndpoint.js.map +1 -0
  213. package/dist/cjs/workers/utils/workerProxyFactory.js +21 -0
  214. package/dist/cjs/workers/utils/workerProxyFactory.js.map +1 -0
  215. package/dist/esm/AbstractAggregate.js +189 -0
  216. package/dist/esm/AbstractAggregate.js.map +1 -0
  217. package/dist/esm/AbstractProjection.js +161 -0
  218. package/dist/esm/AbstractProjection.js.map +1 -0
  219. package/dist/esm/AbstractSaga.js +105 -0
  220. package/dist/esm/AbstractSaga.js.map +1 -0
  221. package/dist/esm/AggregateCommandHandler.js +178 -0
  222. package/dist/esm/AggregateCommandHandler.js.map +1 -0
  223. package/dist/esm/CommandBus.js +5 -0
  224. package/dist/esm/CommandBus.js.map +1 -0
  225. package/dist/esm/CqrsContainerBuilder.js +93 -0
  226. package/dist/esm/CqrsContainerBuilder.js.map +1 -0
  227. package/dist/esm/Event.js +15 -0
  228. package/dist/esm/Event.js.map +1 -0
  229. package/dist/esm/EventDispatchPipeline.js +79 -0
  230. package/dist/esm/EventDispatchPipeline.js.map +1 -0
  231. package/dist/esm/EventDispatcher.js +89 -0
  232. package/dist/esm/EventDispatcher.js.map +1 -0
  233. package/dist/esm/EventIdAugmentor.js +26 -0
  234. package/dist/esm/EventIdAugmentor.js.map +1 -0
  235. package/dist/esm/EventStore.js +102 -0
  236. package/dist/esm/EventStore.js.map +1 -0
  237. package/dist/esm/SagaEventHandler.js +116 -0
  238. package/dist/esm/SagaEventHandler.js.map +1 -0
  239. package/dist/esm/errors/ConcurrencyError.js +17 -0
  240. package/dist/esm/errors/ConcurrencyError.js.map +1 -0
  241. package/dist/esm/errors/index.js +2 -0
  242. package/dist/esm/errors/index.js.map +1 -0
  243. package/dist/esm/in-memory/InMemoryEventStorage.js +102 -0
  244. package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -0
  245. package/dist/esm/in-memory/InMemoryLock.js +40 -0
  246. package/dist/esm/in-memory/InMemoryLock.js.map +1 -0
  247. package/dist/esm/in-memory/InMemoryMessageBus.js +89 -0
  248. package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -0
  249. package/dist/esm/in-memory/InMemorySnapshotStorage.js +64 -0
  250. package/dist/esm/in-memory/InMemorySnapshotStorage.js.map +1 -0
  251. package/dist/esm/in-memory/InMemoryView.js +150 -0
  252. package/dist/esm/in-memory/InMemoryView.js.map +1 -0
  253. package/dist/esm/in-memory/index.js +6 -0
  254. package/dist/esm/in-memory/index.js.map +1 -0
  255. package/dist/esm/in-memory/utils/index.js +2 -0
  256. package/dist/esm/in-memory/utils/index.js.map +1 -0
  257. package/dist/esm/in-memory/utils/nextCycle.js +5 -0
  258. package/dist/esm/in-memory/utils/nextCycle.js.map +1 -0
  259. package/dist/esm/index.js +16 -0
  260. package/dist/esm/index.js.map +1 -0
  261. package/dist/esm/interfaces/IAggregate.js +2 -0
  262. package/dist/esm/interfaces/IAggregate.js.map +1 -0
  263. package/dist/esm/interfaces/IAggregateSnapshotStorage.js +9 -0
  264. package/dist/esm/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  265. package/dist/esm/interfaces/ICommand.js +2 -0
  266. package/dist/esm/interfaces/ICommand.js.map +1 -0
  267. package/dist/esm/interfaces/ICommandBus.js +2 -0
  268. package/dist/esm/interfaces/ICommandBus.js.map +1 -0
  269. package/dist/esm/interfaces/IContainer.js +2 -0
  270. package/dist/esm/interfaces/IContainer.js.map +1 -0
  271. package/dist/esm/interfaces/IDispatchPipelineProcessor.js +5 -0
  272. package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  273. package/dist/esm/interfaces/IEvent.js +6 -0
  274. package/dist/esm/interfaces/IEvent.js.map +1 -0
  275. package/dist/esm/interfaces/IEventBus.js +5 -0
  276. package/dist/esm/interfaces/IEventBus.js.map +1 -0
  277. package/dist/esm/interfaces/IEventDispatcher.js +2 -0
  278. package/dist/esm/interfaces/IEventDispatcher.js.map +1 -0
  279. package/dist/esm/interfaces/IEventLocker.js +11 -0
  280. package/dist/esm/interfaces/IEventLocker.js.map +1 -0
  281. package/dist/esm/interfaces/IEventReceptor.js +2 -0
  282. package/dist/esm/interfaces/IEventReceptor.js.map +1 -0
  283. package/dist/esm/interfaces/IEventSet.js +4 -0
  284. package/dist/esm/interfaces/IEventSet.js.map +1 -0
  285. package/dist/esm/interfaces/IEventStorageReader.js +9 -0
  286. package/dist/esm/interfaces/IEventStorageReader.js.map +1 -0
  287. package/dist/esm/interfaces/IEventStore.js +2 -0
  288. package/dist/esm/interfaces/IEventStore.js.map +1 -0
  289. package/dist/esm/interfaces/IEventStream.js +2 -0
  290. package/dist/esm/interfaces/IEventStream.js.map +1 -0
  291. package/dist/esm/interfaces/IIdentifierProvider.js +5 -0
  292. package/dist/esm/interfaces/IIdentifierProvider.js.map +1 -0
  293. package/dist/esm/interfaces/ILocker.js +5 -0
  294. package/dist/esm/interfaces/ILocker.js.map +1 -0
  295. package/dist/esm/interfaces/ILogger.js +2 -0
  296. package/dist/esm/interfaces/ILogger.js.map +1 -0
  297. package/dist/esm/interfaces/IMessage.js +6 -0
  298. package/dist/esm/interfaces/IMessage.js.map +1 -0
  299. package/dist/esm/interfaces/IMutableState.js +2 -0
  300. package/dist/esm/interfaces/IMutableState.js.map +1 -0
  301. package/dist/esm/interfaces/IObjectStorage.js +2 -0
  302. package/dist/esm/interfaces/IObjectStorage.js.map +1 -0
  303. package/dist/esm/interfaces/IObservable.js +7 -0
  304. package/dist/esm/interfaces/IObservable.js.map +1 -0
  305. package/dist/esm/interfaces/IObservableQueueProvider.js +5 -0
  306. package/dist/esm/interfaces/IObservableQueueProvider.js.map +1 -0
  307. package/dist/esm/interfaces/IObserver.js +2 -0
  308. package/dist/esm/interfaces/IObserver.js.map +1 -0
  309. package/dist/esm/interfaces/IProjection.js +2 -0
  310. package/dist/esm/interfaces/IProjection.js.map +1 -0
  311. package/dist/esm/interfaces/ISaga.js +2 -0
  312. package/dist/esm/interfaces/ISaga.js.map +1 -0
  313. package/dist/esm/interfaces/ISnapshotEvent.js +6 -0
  314. package/dist/esm/interfaces/ISnapshotEvent.js.map +1 -0
  315. package/dist/esm/interfaces/IViewLocker.js +17 -0
  316. package/dist/esm/interfaces/IViewLocker.js.map +1 -0
  317. package/dist/esm/interfaces/Identifier.js +2 -0
  318. package/dist/esm/interfaces/Identifier.js.map +1 -0
  319. package/dist/esm/interfaces/index.js +30 -0
  320. package/dist/esm/interfaces/index.js.map +1 -0
  321. package/dist/esm/interfaces/isObject.js +5 -0
  322. package/dist/esm/interfaces/isObject.js.map +1 -0
  323. package/dist/esm/rabbitmq/IContainer.js +2 -0
  324. package/dist/esm/rabbitmq/IContainer.js.map +1 -0
  325. package/dist/esm/rabbitmq/RabbitMqCommandBus.js +80 -0
  326. package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -0
  327. package/dist/esm/rabbitmq/RabbitMqEventBus.js +117 -0
  328. package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -0
  329. package/dist/esm/rabbitmq/RabbitMqGateway.js +541 -0
  330. package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -0
  331. package/dist/esm/rabbitmq/index.js +5 -0
  332. package/dist/esm/rabbitmq/index.js.map +1 -0
  333. package/dist/esm/rabbitmq/utils/index.js +3 -0
  334. package/dist/esm/rabbitmq/utils/index.js.map +1 -0
  335. package/dist/esm/rabbitmq/utils/registerExitCleanup.js +24 -0
  336. package/dist/esm/rabbitmq/utils/registerExitCleanup.js.map +1 -0
  337. package/dist/esm/rabbitmq/utils/resolveProvider.js +6 -0
  338. package/dist/esm/rabbitmq/utils/resolveProvider.js.map +1 -0
  339. package/dist/esm/sqlite/AbstractSqliteAccessor.js +46 -0
  340. package/dist/esm/sqlite/AbstractSqliteAccessor.js.map +1 -0
  341. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js +22 -0
  342. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  343. package/dist/esm/sqlite/AbstractSqliteView.js +46 -0
  344. package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -0
  345. package/dist/esm/sqlite/IContainer.js +2 -0
  346. package/dist/esm/sqlite/IContainer.js.map +1 -0
  347. package/dist/esm/sqlite/SqliteEventLocker.js +89 -0
  348. package/dist/esm/sqlite/SqliteEventLocker.js.map +1 -0
  349. package/dist/esm/sqlite/SqliteObjectStorage.js +110 -0
  350. package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -0
  351. package/dist/esm/sqlite/SqliteObjectView.js +44 -0
  352. package/dist/esm/sqlite/SqliteObjectView.js.map +1 -0
  353. package/dist/esm/sqlite/SqliteProjectionDataParams.js +2 -0
  354. package/dist/esm/sqlite/SqliteProjectionDataParams.js.map +1 -0
  355. package/dist/esm/sqlite/SqliteViewLocker.js +115 -0
  356. package/dist/esm/sqlite/SqliteViewLocker.js.map +1 -0
  357. package/dist/esm/sqlite/index.js +10 -0
  358. package/dist/esm/sqlite/index.js.map +1 -0
  359. package/dist/esm/sqlite/queries/eventLockTableInit.js +11 -0
  360. package/dist/esm/sqlite/queries/eventLockTableInit.js.map +1 -0
  361. package/dist/esm/sqlite/queries/index.js +3 -0
  362. package/dist/esm/sqlite/queries/index.js.map +1 -0
  363. package/dist/esm/sqlite/queries/viewLockTableInit.js +10 -0
  364. package/dist/esm/sqlite/queries/viewLockTableInit.js.map +1 -0
  365. package/dist/esm/sqlite/utils/getEventId.js +7 -0
  366. package/dist/esm/sqlite/utils/getEventId.js.map +1 -0
  367. package/dist/esm/sqlite/utils/guid.js +5 -0
  368. package/dist/esm/sqlite/utils/guid.js.map +1 -0
  369. package/dist/esm/sqlite/utils/index.js +3 -0
  370. package/dist/esm/sqlite/utils/index.js.map +1 -0
  371. package/dist/esm/utils/Deferred.js +34 -0
  372. package/dist/esm/utils/Deferred.js.map +1 -0
  373. package/dist/esm/utils/Lock.js +97 -0
  374. package/dist/esm/utils/Lock.js.map +1 -0
  375. package/dist/esm/utils/MapAssertable.js +26 -0
  376. package/dist/esm/utils/MapAssertable.js.map +1 -0
  377. package/dist/esm/utils/assert.js +70 -0
  378. package/dist/esm/utils/assert.js.map +1 -0
  379. package/dist/esm/utils/clone.js +10 -0
  380. package/dist/esm/utils/clone.js.map +1 -0
  381. package/dist/esm/utils/extractErrorDetails.js +33 -0
  382. package/dist/esm/utils/extractErrorDetails.js.map +1 -0
  383. package/dist/esm/utils/getClassName.js +7 -0
  384. package/dist/esm/utils/getClassName.js.map +1 -0
  385. package/dist/esm/utils/getHandler.js +15 -0
  386. package/dist/esm/utils/getHandler.js.map +1 -0
  387. package/dist/esm/utils/getMessageHandlerNames.js +27 -0
  388. package/dist/esm/utils/getMessageHandlerNames.js.map +1 -0
  389. package/dist/esm/utils/index.js +15 -0
  390. package/dist/esm/utils/index.js.map +1 -0
  391. package/dist/esm/utils/isClass.js +5 -0
  392. package/dist/esm/utils/isClass.js.map +1 -0
  393. package/dist/esm/utils/sagaId.js +18 -0
  394. package/dist/esm/utils/sagaId.js.map +1 -0
  395. package/dist/esm/utils/setupOneTimeEmitterSubscription.js +42 -0
  396. package/dist/esm/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  397. package/dist/esm/utils/subscribe.js +40 -0
  398. package/dist/esm/utils/subscribe.js.map +1 -0
  399. package/dist/esm/utils/validateHandlers.js +18 -0
  400. package/dist/esm/utils/validateHandlers.js.map +1 -0
  401. package/dist/esm/workers/AbstractWorkerProjection.js +52 -0
  402. package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -0
  403. package/dist/esm/workers/WorkerProxyProjection.js +105 -0
  404. package/dist/esm/workers/WorkerProxyProjection.js.map +1 -0
  405. package/dist/esm/workers/index.js +4 -0
  406. package/dist/esm/workers/index.js.map +1 -0
  407. package/dist/esm/workers/interfaces/IProxyProjection.js +2 -0
  408. package/dist/esm/workers/interfaces/IProxyProjection.js.map +1 -0
  409. package/dist/esm/workers/interfaces/IWorkerProjection.js +2 -0
  410. package/dist/esm/workers/interfaces/IWorkerProjection.js.map +1 -0
  411. package/dist/esm/workers/interfaces/index.js +2 -0
  412. package/dist/esm/workers/interfaces/index.js.map +1 -0
  413. package/dist/esm/workers/protocol.js +11 -0
  414. package/dist/esm/workers/protocol.js.map +1 -0
  415. package/dist/esm/workers/utils/ProjectionView.js +2 -0
  416. package/dist/esm/workers/utils/ProjectionView.js.map +1 -0
  417. package/dist/esm/workers/utils/createWorker.js +51 -0
  418. package/dist/esm/workers/utils/createWorker.js.map +1 -0
  419. package/dist/esm/workers/utils/createWorkerInstance.js +23 -0
  420. package/dist/esm/workers/utils/createWorkerInstance.js.map +1 -0
  421. package/dist/esm/workers/utils/index.js +5 -0
  422. package/dist/esm/workers/utils/index.js.map +1 -0
  423. package/dist/esm/workers/utils/nodeEndpoint.js +5 -0
  424. package/dist/esm/workers/utils/nodeEndpoint.js.map +1 -0
  425. package/dist/esm/workers/utils/workerProxyFactory.js +18 -0
  426. package/dist/esm/workers/utils/workerProxyFactory.js.map +1 -0
  427. package/dist/types/AbstractAggregate.d.ts +80 -0
  428. package/dist/types/AbstractProjection.d.ts +77 -0
  429. package/dist/types/AbstractSaga.d.ts +42 -0
  430. package/dist/types/AggregateCommandHandler.d.ts +22 -0
  431. package/dist/types/CommandBus.d.ts +4 -0
  432. package/dist/types/CqrsContainerBuilder.d.ts +21 -0
  433. package/dist/types/Event.d.ts +9 -0
  434. package/dist/types/EventDispatchPipeline.d.ts +16 -0
  435. package/dist/types/EventDispatcher.d.ts +39 -0
  436. package/dist/types/EventIdAugmentor.d.ts +12 -0
  437. package/dist/types/EventStore.d.ts +29 -0
  438. package/dist/types/SagaEventHandler.d.ts +22 -0
  439. package/dist/types/errors/ConcurrencyError.d.ts +9 -0
  440. package/dist/types/errors/index.d.ts +1 -0
  441. package/dist/types/in-memory/InMemoryEventStorage.d.ts +24 -0
  442. package/dist/types/in-memory/InMemoryLock.d.ts +23 -0
  443. package/dist/types/in-memory/InMemoryMessageBus.d.ts +45 -0
  444. package/dist/types/in-memory/InMemorySnapshotStorage.d.ts +37 -0
  445. package/dist/types/in-memory/InMemoryView.d.ts +53 -0
  446. package/dist/types/in-memory/index.d.ts +5 -0
  447. package/dist/types/in-memory/utils/index.d.ts +1 -0
  448. package/dist/types/in-memory/utils/nextCycle.d.ts +4 -0
  449. package/dist/types/index.d.ts +15 -0
  450. package/dist/types/interfaces/IAggregate.d.ts +78 -0
  451. package/dist/types/interfaces/IAggregateSnapshotStorage.d.ts +8 -0
  452. package/dist/types/interfaces/ICommand.d.ts +2 -0
  453. package/dist/types/interfaces/ICommandBus.d.ts +15 -0
  454. package/dist/types/interfaces/IContainer.d.ts +37 -0
  455. package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +29 -0
  456. package/dist/types/interfaces/IEvent.d.ts +7 -0
  457. package/dist/types/interfaces/IEventBus.d.ts +6 -0
  458. package/dist/types/interfaces/IEventDispatcher.d.ts +6 -0
  459. package/dist/types/interfaces/IEventLocker.d.ts +28 -0
  460. package/dist/types/interfaces/IEventReceptor.d.ts +5 -0
  461. package/dist/types/interfaces/IEventSet.d.ts +3 -0
  462. package/dist/types/interfaces/IEventStorageReader.d.ts +48 -0
  463. package/dist/types/interfaces/IEventStore.d.ts +9 -0
  464. package/dist/types/interfaces/IEventStream.d.ts +2 -0
  465. package/dist/types/interfaces/IIdentifierProvider.d.ts +10 -0
  466. package/dist/types/interfaces/ILocker.d.ts +8 -0
  467. package/dist/types/interfaces/ILogger.d.ts +22 -0
  468. package/dist/types/interfaces/IMessage.d.ts +23 -0
  469. package/dist/types/interfaces/IMutableState.d.ts +14 -0
  470. package/dist/types/interfaces/IObjectStorage.d.ts +8 -0
  471. package/dist/types/interfaces/IObservable.d.ts +15 -0
  472. package/dist/types/interfaces/IObservableQueueProvider.d.ts +8 -0
  473. package/dist/types/interfaces/IObserver.d.ts +4 -0
  474. package/dist/types/interfaces/IProjection.d.ts +17 -0
  475. package/dist/types/interfaces/ISaga.d.ts +38 -0
  476. package/dist/types/interfaces/ISnapshotEvent.d.ts +7 -0
  477. package/dist/types/interfaces/IViewLocker.d.ts +34 -0
  478. package/dist/types/interfaces/Identifier.d.ts +1 -0
  479. package/dist/types/interfaces/index.d.ts +29 -0
  480. package/dist/types/interfaces/isObject.d.ts +1 -0
  481. package/dist/types/rabbitmq/IContainer.d.ts +19 -0
  482. package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +38 -0
  483. package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +44 -0
  484. package/dist/types/rabbitmq/RabbitMqGateway.d.ts +133 -0
  485. package/dist/types/rabbitmq/index.d.ts +4 -0
  486. package/dist/types/rabbitmq/utils/index.d.ts +2 -0
  487. package/dist/types/rabbitmq/utils/registerExitCleanup.d.ts +10 -0
  488. package/dist/types/rabbitmq/utils/resolveProvider.d.ts +3 -0
  489. package/dist/types/sqlite/AbstractSqliteAccessor.d.ts +25 -0
  490. package/dist/types/sqlite/AbstractSqliteObjectProjection.d.ts +8 -0
  491. package/dist/types/sqlite/AbstractSqliteView.d.ts +23 -0
  492. package/dist/types/sqlite/IContainer.d.ts +7 -0
  493. package/dist/types/sqlite/SqliteEventLocker.d.ts +30 -0
  494. package/dist/types/sqlite/SqliteObjectStorage.d.ts +17 -0
  495. package/dist/types/sqlite/SqliteObjectView.d.ts +19 -0
  496. package/dist/types/sqlite/SqliteProjectionDataParams.d.ts +14 -0
  497. package/dist/types/sqlite/SqliteViewLocker.d.ts +31 -0
  498. package/dist/types/sqlite/index.d.ts +9 -0
  499. package/dist/types/sqlite/queries/eventLockTableInit.d.ts +1 -0
  500. package/dist/types/sqlite/queries/index.d.ts +2 -0
  501. package/dist/types/sqlite/queries/viewLockTableInit.d.ts +1 -0
  502. package/dist/types/sqlite/utils/getEventId.d.ts +5 -0
  503. package/dist/types/sqlite/utils/guid.d.ts +4 -0
  504. package/dist/types/sqlite/utils/index.d.ts +2 -0
  505. package/dist/types/utils/Deferred.d.ts +13 -0
  506. package/dist/types/utils/Lock.d.ts +30 -0
  507. package/dist/types/utils/MapAssertable.d.ts +11 -0
  508. package/dist/types/utils/assert.d.ts +20 -0
  509. package/dist/types/utils/clone.d.ts +1 -0
  510. package/dist/types/utils/extractErrorDetails.d.ts +8 -0
  511. package/dist/types/utils/getClassName.d.ts +4 -0
  512. package/dist/types/utils/getHandler.d.ts +7 -0
  513. package/dist/types/utils/getMessageHandlerNames.d.ts +12 -0
  514. package/dist/types/utils/index.d.ts +14 -0
  515. package/dist/types/utils/isClass.d.ts +1 -0
  516. package/dist/types/utils/sagaId.d.ts +6 -0
  517. package/dist/types/utils/setupOneTimeEmitterSubscription.d.ts +12 -0
  518. package/dist/types/utils/subscribe.d.ts +9 -0
  519. package/dist/types/utils/validateHandlers.d.ts +4 -0
  520. package/dist/types/workers/AbstractWorkerProjection.d.ts +25 -0
  521. package/dist/types/workers/WorkerProxyProjection.d.ts +25 -0
  522. package/dist/types/workers/index.d.ts +3 -0
  523. package/dist/types/workers/interfaces/IProxyProjection.d.ts +15 -0
  524. package/dist/types/workers/interfaces/IWorkerProjection.d.ts +19 -0
  525. package/dist/types/workers/interfaces/index.d.ts +2 -0
  526. package/dist/types/workers/protocol.d.ts +10 -0
  527. package/dist/types/workers/utils/ProjectionView.d.ts +2 -0
  528. package/dist/types/workers/utils/createWorker.d.ts +10 -0
  529. package/dist/types/workers/utils/createWorkerInstance.d.ts +11 -0
  530. package/dist/types/workers/utils/index.d.ts +5 -0
  531. package/dist/types/workers/utils/nodeEndpoint.d.ts +2 -0
  532. package/dist/types/workers/utils/workerProxyFactory.d.ts +14 -0
  533. package/package.json +124 -35
  534. package/dist/AbstractAggregate.js +0 -178
  535. package/dist/AbstractAggregate.js.map +0 -1
  536. package/dist/AbstractProjection.js +0 -121
  537. package/dist/AbstractProjection.js.map +0 -1
  538. package/dist/AbstractSaga.js +0 -99
  539. package/dist/AbstractSaga.js.map +0 -1
  540. package/dist/AggregateCommandHandler.js +0 -85
  541. package/dist/AggregateCommandHandler.js.map +0 -1
  542. package/dist/CommandBus.js +0 -77
  543. package/dist/CommandBus.js.map +0 -1
  544. package/dist/CqrsContainerBuilder.js +0 -77
  545. package/dist/CqrsContainerBuilder.js.map +0 -1
  546. package/dist/Event.js +0 -43
  547. package/dist/Event.js.map +0 -1
  548. package/dist/EventStore.js +0 -229
  549. package/dist/EventStore.js.map +0 -1
  550. package/dist/SagaEventHandler.js +0 -117
  551. package/dist/SagaEventHandler.js.map +0 -1
  552. package/dist/index.js +0 -39
  553. package/dist/index.js.map +0 -1
  554. package/dist/infrastructure/InMemoryEventStorage.js +0 -53
  555. package/dist/infrastructure/InMemoryEventStorage.js.map +0 -1
  556. package/dist/infrastructure/InMemoryLock.js +0 -68
  557. package/dist/infrastructure/InMemoryLock.js.map +0 -1
  558. package/dist/infrastructure/InMemoryMessageBus.js +0 -95
  559. package/dist/infrastructure/InMemoryMessageBus.js.map +0 -1
  560. package/dist/infrastructure/InMemorySnapshotStorage.js +0 -26
  561. package/dist/infrastructure/InMemorySnapshotStorage.js.map +0 -1
  562. package/dist/infrastructure/InMemoryView.js.map +0 -1
  563. package/dist/infrastructure/utils/Deferred.js.map +0 -1
  564. package/dist/infrastructure/utils/index.js.map +0 -1
  565. package/dist/infrastructure/utils/nextCycle.js.map +0 -1
  566. package/dist/interfaces.js.map +0 -1
  567. package/dist/utils/getClassName.js.map +0 -1
  568. package/dist/utils/getHandledMessageTypes.js +0 -18
  569. package/dist/utils/getHandledMessageTypes.js.map +0 -1
  570. package/dist/utils/getHandler.js.map +0 -1
  571. package/dist/utils/getMessageHandlerNames.js.map +0 -1
  572. package/dist/utils/index.js.map +0 -1
  573. package/dist/utils/isClass.js.map +0 -1
  574. package/dist/utils/setupOneTimeEmitterSubscription.js.map +0 -1
  575. package/dist/utils/subscribe.js +0 -39
  576. package/dist/utils/subscribe.js.map +0 -1
  577. package/dist/utils/validateHandlers.js.map +0 -1
  578. package/src/AbstractAggregate.ts +0 -223
  579. package/src/AbstractProjection.ts +0 -172
  580. package/src/AbstractSaga.ts +0 -118
  581. package/src/AggregateCommandHandler.ts +0 -129
  582. package/src/CommandBus.ts +0 -98
  583. package/src/CqrsContainerBuilder.ts +0 -120
  584. package/src/Event.ts +0 -43
  585. package/src/EventStore.ts +0 -315
  586. package/src/SagaEventHandler.ts +0 -161
  587. package/src/index.ts +0 -26
  588. package/src/infrastructure/InMemoryEventStorage.ts +0 -68
  589. package/src/infrastructure/InMemoryLock.ts +0 -73
  590. package/src/infrastructure/InMemoryMessageBus.ts +0 -118
  591. package/src/infrastructure/InMemorySnapshotStorage.ts +0 -27
  592. package/src/infrastructure/InMemoryView.ts +0 -221
  593. package/src/infrastructure/utils/Deferred.ts +0 -41
  594. package/src/infrastructure/utils/index.ts +0 -2
  595. package/src/infrastructure/utils/nextCycle.ts +0 -4
  596. package/src/interfaces.ts +0 -328
  597. package/src/utils/getClassName.ts +0 -6
  598. package/src/utils/getHandledMessageTypes.ts +0 -20
  599. package/src/utils/getHandler.ts +0 -20
  600. package/src/utils/getMessageHandlerNames.ts +0 -44
  601. package/src/utils/index.ts +0 -8
  602. package/src/utils/isClass.ts +0 -4
  603. package/src/utils/setupOneTimeEmitterSubscription.ts +0 -57
  604. package/src/utils/subscribe.ts +0 -51
  605. package/src/utils/validateHandlers.ts +0 -19
  606. /package/dist/{infrastructure → cjs}/utils/Deferred.js +0 -0
  607. /package/dist/{utils → cjs/utils}/getClassName.js +0 -0
  608. /package/dist/{utils → cjs/utils}/isClass.js +0 -0
@@ -0,0 +1,105 @@
1
+ import { MessageChannel } from 'node:worker_threads';
2
+ import * as Comlink from 'comlink';
3
+ import { nodeEndpoint, createWorker } from "./utils/index.js";
4
+ import { assertStringArray, assertString, extractErrorDetails, subscribe } from "../utils/index.js";
5
+ import { describe } from "../Event.js";
6
+ import { InMemoryLock } from "../in-memory/InMemoryLock.js";
7
+ /**
8
+ * Projection being automatically created in the main thread to proxy events
9
+ * and view calls to AbstractWorkerThreadProjection instance
10
+ */
11
+ export class WorkerProxyProjection {
12
+ #worker;
13
+ #workerInit;
14
+ #remoteProjection;
15
+ #remoteView;
16
+ #logger;
17
+ #messageTypes;
18
+ #viewLocker = new InMemoryLock();
19
+ get remoteProjection() {
20
+ return this.#remoteProjection;
21
+ }
22
+ get view() {
23
+ return this.#remoteView;
24
+ }
25
+ constructor({ workerModulePath, messageTypes, logger }) {
26
+ assertString(workerModulePath, 'workerModulePath');
27
+ assertStringArray(messageTypes, 'messageTypes');
28
+ this.#messageTypes = messageTypes;
29
+ this.#logger = logger && 'child' in logger ? logger.child({ service: new.target.name }) : logger;
30
+ const { port1: projectionPortMain, port2: projectionPort } = new MessageChannel();
31
+ const { port1: viewPortMain, port2: viewPort } = new MessageChannel();
32
+ this.#workerInit = createWorker(workerModulePath, {
33
+ projectionPort,
34
+ viewPort
35
+ }).then(worker => {
36
+ this.#worker = worker;
37
+ worker.once('error', this._onWorkerError);
38
+ worker.once('exit', this._onWorkerExit);
39
+ return worker;
40
+ });
41
+ this.#workerInit.catch(() => { });
42
+ this.#remoteProjection = Comlink.wrap(nodeEndpoint(projectionPortMain));
43
+ this.#remoteView = Comlink.wrap(nodeEndpoint(viewPortMain));
44
+ }
45
+ subscribe(eventStore) {
46
+ subscribe(eventStore, this, {
47
+ masterHandler: this.project,
48
+ messageTypes: this.#messageTypes
49
+ });
50
+ }
51
+ async restore(eventStore) {
52
+ if (this.#viewLocker)
53
+ await this.#viewLocker.lock();
54
+ await this._restore(eventStore);
55
+ if (this.#viewLocker)
56
+ this.#viewLocker.unlock();
57
+ }
58
+ /** Restore view state from not-yet-projected events */
59
+ async _restore(eventStore) {
60
+ if (!this.#worker)
61
+ await this.#workerInit;
62
+ this.#logger?.debug('retrieving last event projected');
63
+ const lastEvent = await this.#remoteProjection.getLastProjectedEvent();
64
+ this.#logger?.debug(`retrieving ${lastEvent ? `events after ${describe(lastEvent)}` : 'all events'}...`);
65
+ const eventsIterable = eventStore.getEventsByTypes(this.#messageTypes, { afterEvent: lastEvent });
66
+ let eventsCount = 0;
67
+ const startTs = Date.now();
68
+ for await (const event of eventsIterable) {
69
+ await this._project(event);
70
+ eventsCount += 1;
71
+ }
72
+ this.#logger?.info(`view restored from ${eventsCount} event(s) in ${Date.now() - startTs} ms`);
73
+ }
74
+ _onWorkerError = (error) => {
75
+ this.#logger?.error('worker error', {
76
+ error: extractErrorDetails(error)
77
+ });
78
+ };
79
+ _onWorkerExit = (exitCode) => {
80
+ if (exitCode !== 0)
81
+ this.#logger?.error(`worker exited with code ${exitCode}`);
82
+ };
83
+ async ensureWorkerReady() {
84
+ await this.#workerInit;
85
+ }
86
+ async project(event) {
87
+ if (!this.#worker)
88
+ await this.#workerInit;
89
+ if (!this.#viewLocker.ready) {
90
+ this.#logger?.debug(`view is locked, awaiting until it is ready to process ${describe(event)}`);
91
+ await this.#viewLocker.once('ready');
92
+ this.#logger?.debug(`view is ready, processing ${describe(event)}`);
93
+ }
94
+ return this.#remoteProjection.project(event);
95
+ }
96
+ async _project(event) {
97
+ await this.#remoteProjection._project(event);
98
+ }
99
+ dispose() {
100
+ this.#remoteProjection[Comlink.releaseProxy]();
101
+ this.#remoteView[Comlink.releaseProxy]();
102
+ this.#worker?.terminate();
103
+ }
104
+ }
105
+ //# sourceMappingURL=WorkerProxyProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerProxyProjection.js","sourceRoot":"","sources":["../../../src/workers/WorkerProxyProjection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./AbstractWorkerProjection.js";
2
+ export * from "./utils/index.js";
3
+ export * from "./WorkerProxyProjection.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workers/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IProxyProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IProxyProjection.js","sourceRoot":"","sources":["../../../../src/workers/interfaces/IProxyProjection.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IWorkerProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IWorkerProjection.js","sourceRoot":"","sources":["../../../../src/workers/interfaces/IWorkerProjection.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/workers/interfaces/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export const isWorkerData = (obj) => typeof obj === 'object'
2
+ && obj !== null
3
+ && 'projectionPort' in obj
4
+ && !!obj.projectionPort
5
+ && 'viewPort' in obj
6
+ && !!obj.viewPort;
7
+ export const isWorkerInitMessage = (msg) => typeof msg === 'object'
8
+ && msg !== null
9
+ && 'type' in msg
10
+ && msg.type === 'ready';
11
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/workers/protocol.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAsB,EAAE,CAChE,OAAO,GAAG,KAAK,QAAQ;OACpB,GAAG,KAAK,IAAI;OACZ,gBAAgB,IAAI,GAAG;OACvB,CAAC,CAAC,GAAG,CAAC,cAAc;OACpB,UAAU,IAAI,GAAG;OACjB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAInB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAY,EAA4B,EAAE,CAC7E,OAAO,GAAG,KAAK,QAAQ;OACpB,GAAG,KAAK,IAAI;OACZ,MAAM,IAAI,GAAG;OACb,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ProjectionView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectionView.js","sourceRoot":"","sources":["../../../../src/workers/utils/ProjectionView.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import { Worker } from 'node:worker_threads';
2
+ import * as path from 'node:path';
3
+ import { isWorkerInitMessage } from "../protocol.js";
4
+ /**
5
+ * Create a worker instance, await a handshake or a failure
6
+ *
7
+ * @param workerModulePath - Path to worker module
8
+ * @param ports - Container with MessagePorts for communication with worker projection and view instances
9
+ * @returns Worker instance
10
+ */
11
+ export async function createWorker(workerModulePath, ports) {
12
+ const workerEntrypoint = path.isAbsolute(workerModulePath) ?
13
+ workerModulePath :
14
+ path.resolve(process.cwd(), workerModulePath);
15
+ const worker = new Worker(workerEntrypoint, {
16
+ workerData: ports,
17
+ transferList: [
18
+ ports.projectionPort,
19
+ ports.viewPort
20
+ ]
21
+ });
22
+ await new Promise((resolve, reject) => {
23
+ const cleanup = () => {
24
+ // eslint-disable-next-line no-use-before-define
25
+ worker.off('error', onError);
26
+ // eslint-disable-next-line no-use-before-define
27
+ worker.off('message', onMessage);
28
+ // eslint-disable-next-line no-use-before-define
29
+ worker.off('exit', onExit);
30
+ };
31
+ const onMessage = (msg) => {
32
+ if (!isWorkerInitMessage(msg))
33
+ return;
34
+ cleanup();
35
+ resolve(undefined);
36
+ };
37
+ const onError = (err) => {
38
+ cleanup();
39
+ reject(err);
40
+ };
41
+ const onExit = (exitCode) => {
42
+ cleanup();
43
+ reject(new Error(`Worker exited prematurely with exit code ${exitCode}`));
44
+ };
45
+ worker.on('message', onMessage);
46
+ worker.once('error', onError);
47
+ worker.once('exit', onExit);
48
+ });
49
+ return worker;
50
+ }
51
+ //# sourceMappingURL=createWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWorker.js","sourceRoot":"","sources":["../../../../src/workers/utils/createWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAoB,MAAM,gBAAgB,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,gBAAwB,EAAE,KAAkB;IAE9E,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3D,gBAAgB,CAAC,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,EAAE;QAC3C,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE;YACb,KAAK,CAAC,cAAc;YACpB,KAAK,CAAC,QAAQ;SACd;KACD,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAErC,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,gDAAgD;YAChD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,gDAAgD;YAChD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjC,gDAAgD;YAChD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;YAClC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;gBAC5B,OAAO;YAER,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,SAAS,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;YAChC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,EAAE;YACnC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { parentPort, workerData } from 'node:worker_threads';
2
+ import * as Comlink from 'comlink';
3
+ import { assertFunction, getMessageHandlerNames, isClass } from "../../utils/index.js";
4
+ import { isWorkerData } from "../protocol.js";
5
+ import { nodeEndpoint } from "./index.js";
6
+ export function createWorkerInstance(ProjectionFactoryOrType, projectionMethodsToWire) {
7
+ if (!parentPort)
8
+ throw new Error('createWorkerInstance can only be called from a Worker thread');
9
+ if (!isWorkerData(workerData))
10
+ throw new Error('workerData does not contain projectionPort and viewPort');
11
+ const projection = isClass(ProjectionFactoryOrType) ? new ProjectionFactoryOrType() : ProjectionFactoryOrType();
12
+ const methodsToWire = projectionMethodsToWire ?? getMessageHandlerNames(projection);
13
+ const projectionApi = Object.fromEntries(methodsToWire.map(methodName => {
14
+ const method = projection[methodName];
15
+ assertFunction(method, methodName);
16
+ return [methodName, method.bind(projection)];
17
+ }));
18
+ Comlink.expose(projectionApi, nodeEndpoint(workerData.projectionPort));
19
+ Comlink.expose(projection.view, nodeEndpoint(workerData.viewPort));
20
+ parentPort.postMessage({ type: 'ready' });
21
+ return projection;
22
+ }
23
+ //# sourceMappingURL=createWorkerInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWorkerInstance.js","sourceRoot":"","sources":["../../../../src/workers/utils/createWorkerInstance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAA0B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAoB1C,MAAM,UAAU,oBAAoB,CACnC,uBAAsE,EACtE,uBAAuE;IAEvE,IAAI,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACjF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAE5E,MAAM,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;IAChH,MAAM,aAAa,GAAG,uBAAuB,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpF,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACvC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEnC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEnE,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAA8B,CAAC,CAAC;IAEtE,OAAO,UAAU,CAAC;AACnB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./createWorker.js";
2
+ export * from "./createWorkerInstance.js";
3
+ export * from "./nodeEndpoint.js";
4
+ export * from "./workerProxyFactory.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/workers/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Jest (CJS) cannot import the ESM adapter;
2
+ // the UMD build is CJS/UMD but the default export shape varies by loader
3
+ const nodeEndpointModule = require('comlink/dist/umd/node-adapter');
4
+ export const nodeEndpoint = (nodeEndpointModule?.default ?? nodeEndpointModule);
5
+ //# sourceMappingURL=nodeEndpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeEndpoint.js","sourceRoot":"","sources":["../../../../src/workers/utils/nodeEndpoint.ts"],"names":[],"mappings":"AAEA,4CAA4C;AAC5C,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,YAAY,GACxB,CAAC,kBAAkB,EAAE,OAAO,IAAI,kBAAkB,CAAQ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { assertClass, assertString, assertStringArray } from "../../utils/assert.js";
2
+ import { WorkerProxyProjection } from "../WorkerProxyProjection.js";
3
+ export function workerProxyFactory(WorkerProjectionType, ProxyProjectionType = WorkerProxyProjection) {
4
+ assertClass(WorkerProjectionType, 'WorkerProjectionType');
5
+ assertString(WorkerProjectionType.workerModulePath, 'WorkerProjectionType.workerModulePath');
6
+ assertStringArray(WorkerProjectionType.handles, 'WorkerProjectionType.handles');
7
+ assertClass(ProxyProjectionType, 'ProxyProjectionType');
8
+ return (container) => {
9
+ const proxyParams = {
10
+ workerModulePath: WorkerProjectionType.workerModulePath,
11
+ messageTypes: WorkerProjectionType.handles
12
+ };
13
+ if (container?.createInstance)
14
+ return container.createInstance(ProxyProjectionType, proxyParams);
15
+ return new ProxyProjectionType(proxyParams);
16
+ };
17
+ }
18
+ //# sourceMappingURL=workerProxyFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerProxyFactory.js","sourceRoot":"","sources":["../../../../src/workers/utils/workerProxyFactory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AA6BpE,MAAM,UAAU,kBAAkB,CAKjC,oBAA+D,EAC/D,sBAAwD,qBAAqB;IAE7E,WAAW,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;IAC1D,YAAY,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,uCAAuC,CAAC,CAAC;IAC7F,iBAAiB,CAAC,oBAAoB,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IAChF,WAAW,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;IAExD,OAAO,CAAC,SAAsB,EAAE,EAAE;QACjC,MAAM,WAAW,GAA0B;YAC1C,gBAAgB,EAAE,oBAAoB,CAAC,gBAAgB;YACvD,YAAY,EAAE,oBAAoB,CAAC,OAAO;SAC1C,CAAC;QAEF,IAAI,SAAS,EAAE,cAAc;YAC5B,OAAO,SAAS,CAAC,cAAc,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;QAEnE,OAAO,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { AggregateCommandHandler } from './AggregateCommandHandler.ts';
2
+ import { type IAggregate, type IMutableState, type ICommand, type Identifier, type IEvent, type IEventSet, type IAggregateConstructorParams, type ISnapshotEvent, type IAggregateConstructor, type IEventStore, type ICommandBus, type RetryOnConcurrencyErrorOptions } from './interfaces/index.ts';
3
+ /**
4
+ * Base class for Aggregate definition
5
+ */
6
+ export declare abstract class AbstractAggregate<TState extends IMutableState | object | void = void> implements IAggregate {
7
+ #private;
8
+ /**
9
+ * List of command names handled by the Aggregate.
10
+ *
11
+ * Can be overridden in the Aggregate implementation to explicitly define supported commands.
12
+ * If not overridden, all public methods will be treated as command handlers by default.
13
+ *
14
+ * @example ['createUser', 'changePassword'];
15
+ */
16
+ static get handles(): string[];
17
+ /**
18
+ * Optional list of event types that are required to restore the aggregate state.
19
+ *
20
+ * @see IAggregateConstructor
21
+ */
22
+ static get restoresFrom(): Readonly<string[]> | undefined;
23
+ /**
24
+ * Defines retry behavior when a ConcurrencyError is thrown during event dispatch.
25
+ *
26
+ * @see IAggregateConstructor
27
+ */
28
+ static get retryOnConcurrencyError(): RetryOnConcurrencyErrorOptions | undefined;
29
+ /**
30
+ * Convenience helper to create an `AggregateCommandHandler` for this aggregate type and
31
+ * subscribe it to the provided `commandBus`.
32
+ */
33
+ static register<T extends AbstractAggregate, S extends IMutableState | object | void>(this: IAggregateConstructor<T, S> & (new (options: IAggregateConstructorParams<S>) => T), eventStore: IEventStore, commandBus: ICommandBus): AggregateCommandHandler<T>;
34
+ /** List of emitted events */
35
+ protected changes: IEvent[];
36
+ /** Internal aggregate state */
37
+ protected state: TState | undefined;
38
+ /** Command being handled by aggregate */
39
+ protected command?: ICommand;
40
+ /** Unique aggregate instance identifier */
41
+ get id(): Identifier;
42
+ /** Aggregate instance version */
43
+ get version(): number;
44
+ /** Restored snapshot version */
45
+ get snapshotVersion(): number | undefined;
46
+ /**
47
+ * Override to define whether an aggregate state snapshot should be taken
48
+ *
49
+ * @example
50
+ * // create snapshot every 50 events if new events were emitted
51
+ * return !!this.changes.length
52
+ * && this.version - (this.snapshotVersion ?? 0) > 50;
53
+ */
54
+ protected get shouldTakeSnapshot(): boolean;
55
+ constructor(options: IAggregateConstructorParams<TState>);
56
+ /** Mutate aggregate state and increment aggregate version */
57
+ mutate(event: IEvent): void;
58
+ /** Pass command to command handler */
59
+ handle(command: ICommand): Promise<IEventSet>;
60
+ /**
61
+ * Get the events emitted during commands processing.
62
+ * If a snapshot should be taken, the snapshot event is added to the end.
63
+ */
64
+ protected getUncommittedEvents(offset?: number): IEventSet;
65
+ /** Format and register aggregate event and mutate aggregate state */
66
+ protected emit(type: string): IEvent<void>;
67
+ protected emit<TPayload>(type: string, payload: TPayload): IEvent<TPayload>;
68
+ /** Format event based on a current aggregate state and a command being executed */
69
+ protected makeEvent<TPayload>(type: string, payload: TPayload, sourceCommand?: ICommand): IEvent<TPayload>;
70
+ /** Register aggregate event and mutate aggregate state */
71
+ protected emitRaw<TPayload>(event: IEvent<TPayload>): void;
72
+ /** Create an aggregate state snapshot */
73
+ protected makeSnapshot(): any;
74
+ /** Add snapshot event to the collection of emitted events */
75
+ protected takeSnapshot(): void;
76
+ /** Restore aggregate state from a snapshot */
77
+ protected restoreSnapshot(snapshotEvent: ISnapshotEvent<TState>): void;
78
+ /** Get human-readable aggregate identifier */
79
+ toString(): string;
80
+ }
@@ -0,0 +1,77 @@
1
+ import { type IViewLocker, type IEventLocker, type IProjection, type ILogger, type IExtendableLogger, type IEvent, type IObservable, type IEventStorageReader } from './interfaces/index.ts';
2
+ export type AbstractProjectionParams<T> = {
3
+ /**
4
+ * The default view associated with the projection.
5
+ * Can optionally implement IViewLocker and/or IEventLocker.
6
+ */
7
+ view?: T;
8
+ /**
9
+ * Manages view restoration state to prevent early access to an inconsistent view
10
+ * or conflicts from concurrent restoration by other processes.
11
+ */
12
+ viewLocker?: IViewLocker;
13
+ /**
14
+ * Tracks event processing state to prevent concurrent handling by multiple processes.
15
+ */
16
+ eventLocker?: IEventLocker;
17
+ logger?: ILogger | IExtendableLogger;
18
+ };
19
+ /**
20
+ * Base class for Projection definition
21
+ */
22
+ export declare abstract class AbstractProjection<TView = any> implements IProjection<TView> {
23
+ #private;
24
+ /**
25
+ * List of event types handled by the projection. Can be overridden in the projection implementation.
26
+ * If not overridden, event types will be inferred from handler methods defined on the Projection class.
27
+ */
28
+ static get handles(): string[];
29
+ protected _logger?: ILogger;
30
+ /**
31
+ * The default view associated with the projection.
32
+ * Can optionally implement IViewLocker and/or IEventLocker.
33
+ */
34
+ get view(): TView;
35
+ protected set view(value: TView);
36
+ /**
37
+ * Manages view restoration state to prevent early access to an inconsistent view
38
+ * or conflicts from concurrent restoration by other processes.
39
+ */
40
+ protected get _viewLocker(): IViewLocker | null;
41
+ protected set _viewLocker(value: IViewLocker | undefined | null);
42
+ /**
43
+ * Tracks event processing state to prevent concurrent handling by multiple processes.
44
+ */
45
+ protected get _eventLocker(): IEventLocker | null;
46
+ protected set _eventLocker(value: IEventLocker | undefined | null);
47
+ constructor({ view, viewLocker, eventLocker, logger }?: AbstractProjectionParams<TView>);
48
+ /**
49
+ * Subscribe to event store
50
+ * and restore view state from not yet projected events
51
+ */
52
+ subscribe(eventStore: IObservable): void;
53
+ /** Pass event to projection event handler */
54
+ project(event: IEvent, meta?: Record<string, any>): Promise<void>;
55
+ /**
56
+ * Determines whether an event should be recorded as the last projected event (restore checkpoint).
57
+ * Override in derived classes to control checkpoint behavior based on event metadata.
58
+ */
59
+ protected shouldRecordLastEvent(_event: IEvent, _meta?: Record<string, any>): boolean;
60
+ /** Pass event to projection event handler, without awaiting for restore operation to complete */
61
+ protected _project(event: IEvent, meta?: Record<string, any>): Promise<void>;
62
+ /**
63
+ * Restore view state from not-yet-projected events.
64
+ *
65
+ * Lock the view to ensure same restoring procedure
66
+ * won't be performed by another projection instance.
67
+ * */
68
+ restore(eventStore: IEventStorageReader): Promise<void>;
69
+ /** Restore view state from not-yet-projected events */
70
+ protected _restore(eventStore: IEventStorageReader): Promise<void>;
71
+ /**
72
+ * Handle error on restoring.
73
+ *
74
+ * Logs and throws error by default
75
+ */
76
+ protected _onRestoringError(error: unknown, event: IEvent): void;
77
+ }
@@ -0,0 +1,42 @@
1
+ import type { ICommand, ICommandBus, Identifier, IEvent, IEventStore, IMutableState, ISaga, ISagaConstructor, ISagaConstructorParams } from './interfaces/index.ts';
2
+ import { SagaEventHandler } from './SagaEventHandler.ts';
3
+ /**
4
+ * Base class for Saga definition
5
+ */
6
+ export declare abstract class AbstractSaga implements ISaga {
7
+ #private;
8
+ /**
9
+ * Optional list of events that start new saga.
10
+ *
11
+ * When not defined, saga start is inferred by the absence of `message.sagaOrigins[sagaDescriptor]`.
12
+ */
13
+ static get startsWith(): string[] | undefined;
14
+ /** List of event types being handled by Saga, can be overridden in Saga implementation */
15
+ static get handles(): string[];
16
+ /**
17
+ * Convenience helper to create a `SagaEventHandler` for this saga type and subscribe it to
18
+ * the provided `eventStore`.
19
+ */
20
+ static register<T extends AbstractSaga>(this: ISagaConstructor & (new (options: ISagaConstructorParams) => T), eventStore: IEventStore, commandBus: ICommandBus): SagaEventHandler;
21
+ /** Saga ID */
22
+ get id(): Identifier;
23
+ /** Saga version */
24
+ get version(): number;
25
+ protected state?: IMutableState | object;
26
+ /**
27
+ * Creates an instance of AbstractSaga
28
+ */
29
+ constructor(options: ISagaConstructorParams);
30
+ /** Modify saga state by applying an event */
31
+ mutate(event: IEvent): void;
32
+ /** Process saga event and return produced commands */
33
+ handle(event: IEvent): Promise<ReadonlyArray<ICommand>>;
34
+ /** Format a command and put it to the execution queue */
35
+ protected enqueue(commandType: string): void;
36
+ protected enqueue(commandType: string, aggregateId: Identifier): void;
37
+ protected enqueue<T>(commandType: string, aggregateId: Identifier | undefined, payload: T): void;
38
+ /** Put a command to the execution queue */
39
+ protected enqueueRaw(command: ICommand): void;
40
+ /** Get human-readable Saga name */
41
+ toString(): string;
42
+ }
@@ -0,0 +1,22 @@
1
+ import type { IAggregate, IAggregateConstructor, IAggregateFactory, ICommand, ICommandHandler, IContainer, IEventSet, IObservable, RetryOnConcurrencyErrorOptions } from './interfaces/index.ts';
2
+ /**
3
+ * Aggregate command handler.
4
+ *
5
+ * Subscribes to event store and awaits aggregate commands.
6
+ * Upon command receiving creates an instance of aggregate,
7
+ * restores its state, passes command and commits emitted events to event store.
8
+ */
9
+ export declare class AggregateCommandHandler<TAggregate extends IAggregate> implements ICommandHandler {
10
+ #private;
11
+ constructor({ eventStore, aggregateType, aggregateFactory, handles, executionLocker, restoresFrom, retryOnConcurrencyError, logger }: Pick<IContainer, 'eventStore' | 'executionLocker' | 'logger'> & {
12
+ aggregateType?: IAggregateConstructor<TAggregate, any>;
13
+ aggregateFactory?: IAggregateFactory<TAggregate, any>;
14
+ handles?: Readonly<string[]>;
15
+ restoresFrom?: Readonly<string[]>;
16
+ retryOnConcurrencyError?: RetryOnConcurrencyErrorOptions;
17
+ });
18
+ /** Subscribe to all command types handled by aggregateType */
19
+ subscribe(commandBus: IObservable): void;
20
+ /** Pass a command to corresponding aggregate */
21
+ execute(cmd: ICommand): Promise<IEventSet>;
22
+ }
@@ -0,0 +1,4 @@
1
+ import { InMemoryMessageBus } from './in-memory/index.ts';
2
+ /** @deprecated Use {@link InMemoryMessageBus} directly or a transport-specific implementation. */
3
+ export declare class CommandBus extends InMemoryMessageBus {
4
+ }
@@ -0,0 +1,21 @@
1
+ import { ContainerBuilder, type TypeConfig, type ClassOrFactory } from 'di0';
2
+ import { type IAggregateConstructor, type ICommandHandler, type IContainer, type IEventReceptor, type IProjection, type ISagaConstructor } from './interfaces/index.ts';
3
+ export declare class CqrsContainerBuilder<TContainerInterface extends IContainer = IContainer> extends ContainerBuilder<TContainerInterface> {
4
+ constructor(options?: {
5
+ types: Readonly<TypeConfig<any>[]>;
6
+ singletones: object;
7
+ });
8
+ /** Register command handler, which will be subscribed to commandBus upon instance creation */
9
+ registerCommandHandler(typeOrFactory: ClassOrFactory<ICommandHandler, TContainerInterface>): TypeConfig<ICommandHandler, TContainerInterface>;
10
+ /** Register event receptor, which will be subscribed to eventStore upon instance creation */
11
+ registerEventReceptor(typeOrFactory: ClassOrFactory<IEventReceptor, TContainerInterface>): TypeConfig<IEventReceptor, TContainerInterface>;
12
+ /**
13
+ * Register projection, which will expose view and will be subscribed
14
+ * to eventStore and will restore its state upon instance creation
15
+ */
16
+ registerProjection(typeOrFactory: ClassOrFactory<IProjection<any>, TContainerInterface>, exposedViewAlias?: keyof TContainerInterface): TypeConfig<IProjection<any>, TContainerInterface>;
17
+ /** Register aggregate type in the container */
18
+ registerAggregate(AggregateType: IAggregateConstructor<any, any>): TypeConfig<ICommandHandler, TContainerInterface>;
19
+ /** Register saga type in the container */
20
+ registerSaga(SagaType: ISagaConstructor): TypeConfig<IEventReceptor, TContainerInterface>;
21
+ }
@@ -0,0 +1,9 @@
1
+ import type { IEvent } from './interfaces/IEvent.ts';
2
+ /**
3
+ * Get text description of an event for logging purposes
4
+ */
5
+ export declare function describe(event: IEvent): string;
6
+ /**
7
+ * Get text description of a set of events for logging purposes
8
+ */
9
+ export declare function describeMultiple(events: ReadonlyArray<IEvent>): string;
@@ -0,0 +1,16 @@
1
+ import { type DispatchPipelineBatch, type IEvent, type IDispatchPipelineProcessor, type IEventBus } from './interfaces/index.ts';
2
+ export type EventBatchEnvelope = {
3
+ data: DispatchPipelineBatch<{
4
+ event?: IEvent;
5
+ }>;
6
+ error?: Error;
7
+ resolve: (event: IEvent[]) => void;
8
+ reject: (error: Error) => void;
9
+ };
10
+ export declare class EventDispatchPipeline {
11
+ #private;
12
+ constructor(eventBus: IEventBus, concurrentLimit: number);
13
+ addProcessor(preprocessor: IDispatchPipelineProcessor): void;
14
+ revert(batch: DispatchPipelineBatch): Promise<void>;
15
+ push(envelope: EventBatchEnvelope): void;
16
+ }
@@ -0,0 +1,39 @@
1
+ import { type IEventDispatcher, type IDispatchPipelineProcessor, type IEventSet, type IEventBus, type IContainer } from './interfaces/index.ts';
2
+ import { EventDispatchPipeline } from './EventDispatchPipeline.ts';
3
+ export declare class EventDispatcher implements IEventDispatcher {
4
+ #private;
5
+ /** Default pipeline name */
6
+ static DEFAULT_PIPELINE: string;
7
+ /** Default maximum number of parallel batches for newly created pipelines */
8
+ static DEFAULT_CONCURRENT_LIMIT: number;
9
+ /** Default router that uses `meta.origin` as the pipeline name */
10
+ static DEFAULT_ROUTER: (_e: IEventSet, meta?: Record<string, any>) => any;
11
+ /**
12
+ * Event bus where dispatched messages are delivered after processing.
13
+ * If not provided in the constructor, defaults to an instance of `InMemoryMessageBus`.
14
+ */
15
+ eventBus: IEventBus;
16
+ /**
17
+ * Default maximum number of parallel batches for newly created pipelines.
18
+ */
19
+ concurrentLimit: number;
20
+ /** Router that selects a pipeline name given events and meta */
21
+ eventDispatchRouter?: (events: IEventSet, meta?: Record<string, any>) => string | undefined;
22
+ constructor(o?: Pick<IContainer, 'eventBus' | 'eventDispatchPipeline'> & {
23
+ eventDispatcherConfig?: {
24
+ concurrentLimit?: number;
25
+ };
26
+ eventDispatchPipelines?: Record<string, IDispatchPipelineProcessor[]>;
27
+ eventDispatchRouter?: (events: IEventSet, meta?: Record<string, any>) => string | undefined;
28
+ });
29
+ /** Add or create the default pipeline processors */
30
+ addPipelineProcessors(eventDispatchPipeline: IDispatchPipelineProcessor[], pipelineName?: string): void;
31
+ /** Adds a single processor to the default pipeline */
32
+ addPipelineProcessor(preprocessor: IDispatchPipelineProcessor, pipelineName?: string): void;
33
+ /** Create a named pipeline with processors and optional concurrency limit */
34
+ addPipeline(name: string, processors?: IDispatchPipelineProcessor[], options?: {
35
+ concurrentLimit?: number;
36
+ }): EventDispatchPipeline;
37
+ /** Dispatch events through a routed pipeline and publish to the shared eventBus */
38
+ dispatch(events: IEventSet, meta?: Record<string, any>): Promise<IEventSet>;
39
+ }