node-cqrs 1.0.0-rc.2 → 1.0.0-rc.20

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 (354) hide show
  1. package/CHANGELOG.md +244 -83
  2. package/dist/AbstractAggregate.js +62 -40
  3. package/dist/AbstractAggregate.js.map +1 -1
  4. package/dist/AbstractProjection.js +64 -47
  5. package/dist/AbstractProjection.js.map +1 -1
  6. package/dist/AbstractSaga.js.map +1 -1
  7. package/dist/AggregateCommandHandler.js +44 -20
  8. package/dist/AggregateCommandHandler.js.map +1 -1
  9. package/dist/CommandBus.js +6 -10
  10. package/dist/CommandBus.js.map +1 -1
  11. package/dist/CqrsContainerBuilder.js +12 -3
  12. package/dist/CqrsContainerBuilder.js.map +1 -1
  13. package/dist/Event.js +0 -24
  14. package/dist/Event.js.map +1 -1
  15. package/dist/EventDispatchPipeline.js +81 -0
  16. package/dist/EventDispatchPipeline.js.map +1 -0
  17. package/dist/EventDispatcher.js +94 -0
  18. package/dist/EventDispatcher.js.map +1 -0
  19. package/dist/EventStore.js +63 -141
  20. package/dist/EventStore.js.map +1 -1
  21. package/dist/SagaEventHandler.js +3 -2
  22. package/dist/SagaEventHandler.js.map +1 -1
  23. package/dist/in-memory/InMemoryEventStorage.js +73 -0
  24. package/dist/in-memory/InMemoryEventStorage.js.map +1 -0
  25. package/dist/in-memory/InMemoryLock.js +40 -0
  26. package/dist/in-memory/InMemoryLock.js.map +1 -0
  27. package/dist/{infrastructure → in-memory}/InMemoryMessageBus.js +28 -27
  28. package/dist/in-memory/InMemoryMessageBus.js.map +1 -0
  29. package/dist/in-memory/InMemorySnapshotStorage.js +70 -0
  30. package/dist/in-memory/InMemorySnapshotStorage.js.map +1 -0
  31. package/dist/{infrastructure → in-memory}/InMemoryView.js +13 -9
  32. package/dist/in-memory/InMemoryView.js.map +1 -0
  33. package/dist/in-memory/index.js +22 -0
  34. package/dist/in-memory/index.js.map +1 -0
  35. package/dist/{infrastructure → in-memory}/utils/index.js +0 -1
  36. package/dist/in-memory/utils/index.js.map +1 -0
  37. package/dist/{infrastructure → in-memory}/utils/nextCycle.js +1 -1
  38. package/dist/in-memory/utils/nextCycle.js.map +1 -0
  39. package/dist/index.js +3 -8
  40. package/dist/index.js.map +1 -1
  41. package/dist/{interfaces.js → interfaces/IAggregate.js} +1 -2
  42. package/dist/interfaces/IAggregate.js.map +1 -0
  43. package/dist/interfaces/IAggregateSnapshotStorage.js +3 -0
  44. package/dist/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  45. package/dist/interfaces/ICommand.js +3 -0
  46. package/dist/interfaces/ICommand.js.map +1 -0
  47. package/dist/interfaces/ICommandBus.js +3 -0
  48. package/dist/interfaces/ICommandBus.js.map +1 -0
  49. package/dist/interfaces/IContainer.js +3 -0
  50. package/dist/interfaces/IContainer.js.map +1 -0
  51. package/dist/interfaces/IDispatchPipelineProcessor.js +9 -0
  52. package/dist/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  53. package/dist/interfaces/IEvent.js +10 -0
  54. package/dist/interfaces/IEvent.js.map +1 -0
  55. package/dist/interfaces/IEventBus.js +9 -0
  56. package/dist/interfaces/IEventBus.js.map +1 -0
  57. package/dist/interfaces/IEventDispatcher.js +3 -0
  58. package/dist/interfaces/IEventDispatcher.js.map +1 -0
  59. package/dist/interfaces/IEventLocker.js +10 -0
  60. package/dist/interfaces/IEventLocker.js.map +1 -0
  61. package/dist/interfaces/IEventReceptor.js +3 -0
  62. package/dist/interfaces/IEventReceptor.js.map +1 -0
  63. package/dist/interfaces/IEventSet.js +8 -0
  64. package/dist/interfaces/IEventSet.js.map +1 -0
  65. package/dist/interfaces/IEventStorageReader.js +13 -0
  66. package/dist/interfaces/IEventStorageReader.js.map +1 -0
  67. package/dist/interfaces/IEventStorageWriter.js +3 -0
  68. package/dist/interfaces/IEventStorageWriter.js.map +1 -0
  69. package/dist/interfaces/IEventStore.js +3 -0
  70. package/dist/interfaces/IEventStore.js.map +1 -0
  71. package/dist/interfaces/IEventStream.js +3 -0
  72. package/dist/interfaces/IEventStream.js.map +1 -0
  73. package/dist/interfaces/IIdentifierProvider.js +9 -0
  74. package/dist/interfaces/IIdentifierProvider.js.map +1 -0
  75. package/dist/interfaces/ILogger.js +3 -0
  76. package/dist/interfaces/ILogger.js.map +1 -0
  77. package/dist/interfaces/IMessage.js +9 -0
  78. package/dist/interfaces/IMessage.js.map +1 -0
  79. package/dist/interfaces/IMessageBus.js +3 -0
  80. package/dist/interfaces/IMessageBus.js.map +1 -0
  81. package/dist/interfaces/IObjectStorage.js +3 -0
  82. package/dist/interfaces/IObjectStorage.js.map +1 -0
  83. package/dist/interfaces/IObservable.js +11 -0
  84. package/dist/interfaces/IObservable.js.map +1 -0
  85. package/dist/interfaces/IObserver.js +3 -0
  86. package/dist/interfaces/IObserver.js.map +1 -0
  87. package/dist/interfaces/IProjection.js +3 -0
  88. package/dist/interfaces/IProjection.js.map +1 -0
  89. package/dist/interfaces/ISaga.js +3 -0
  90. package/dist/interfaces/ISaga.js.map +1 -0
  91. package/dist/interfaces/IViewLocker.js +17 -0
  92. package/dist/interfaces/IViewLocker.js.map +1 -0
  93. package/dist/interfaces/Identifier.js +3 -0
  94. package/dist/interfaces/Identifier.js.map +1 -0
  95. package/dist/interfaces/index.js +44 -0
  96. package/dist/interfaces/index.js.map +1 -0
  97. package/dist/interfaces/isObject.js +9 -0
  98. package/dist/interfaces/isObject.js.map +1 -0
  99. package/dist/rabbitmq/IContainer.js +3 -0
  100. package/dist/rabbitmq/IContainer.js.map +1 -0
  101. package/dist/rabbitmq/RabbitMqEventBus.js +89 -0
  102. package/dist/rabbitmq/RabbitMqEventBus.js.map +1 -0
  103. package/dist/rabbitmq/RabbitMqEventInjector.js +55 -0
  104. package/dist/rabbitmq/RabbitMqEventInjector.js.map +1 -0
  105. package/dist/rabbitmq/RabbitMqGateway.js +349 -0
  106. package/dist/rabbitmq/RabbitMqGateway.js.map +1 -0
  107. package/dist/rabbitmq/TerminationHandler.js +31 -0
  108. package/dist/rabbitmq/TerminationHandler.js.map +1 -0
  109. package/dist/rabbitmq/index.js +20 -0
  110. package/dist/rabbitmq/index.js.map +1 -0
  111. package/dist/sqlite/AbstractSqliteAccessor.js +50 -0
  112. package/dist/sqlite/AbstractSqliteAccessor.js.map +1 -0
  113. package/dist/sqlite/AbstractSqliteObjectProjection.js +26 -0
  114. package/dist/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  115. package/dist/sqlite/AbstractSqliteView.js +44 -0
  116. package/dist/sqlite/AbstractSqliteView.js.map +1 -0
  117. package/dist/sqlite/IContainer.js +3 -0
  118. package/dist/sqlite/IContainer.js.map +1 -0
  119. package/dist/sqlite/SqliteEventLocker.js +94 -0
  120. package/dist/sqlite/SqliteEventLocker.js.map +1 -0
  121. package/dist/sqlite/SqliteObjectStorage.js +113 -0
  122. package/dist/sqlite/SqliteObjectStorage.js.map +1 -0
  123. package/dist/sqlite/SqliteObjectView.js +46 -0
  124. package/dist/sqlite/SqliteObjectView.js.map +1 -0
  125. package/dist/sqlite/SqliteProjectionDataParams.js +3 -0
  126. package/dist/sqlite/SqliteProjectionDataParams.js.map +1 -0
  127. package/dist/sqlite/SqliteViewLocker.js +121 -0
  128. package/dist/sqlite/SqliteViewLocker.js.map +1 -0
  129. package/dist/sqlite/index.js +25 -0
  130. package/dist/sqlite/index.js.map +1 -0
  131. package/dist/sqlite/queries/eventLockTableInit.js +15 -0
  132. package/dist/sqlite/queries/eventLockTableInit.js.map +1 -0
  133. package/dist/sqlite/queries/index.js +19 -0
  134. package/dist/sqlite/queries/index.js.map +1 -0
  135. package/dist/sqlite/queries/viewLockTableInit.js +14 -0
  136. package/dist/sqlite/queries/viewLockTableInit.js.map +1 -0
  137. package/dist/sqlite/utils/getEventId.js +11 -0
  138. package/dist/sqlite/utils/getEventId.js.map +1 -0
  139. package/dist/sqlite/utils/guid.js +9 -0
  140. package/dist/sqlite/utils/guid.js.map +1 -0
  141. package/dist/sqlite/utils/index.js +19 -0
  142. package/dist/sqlite/utils/index.js.map +1 -0
  143. package/dist/tsconfig.tsbuildinfo +1 -0
  144. package/dist/utils/Deferred.js.map +1 -0
  145. package/dist/utils/Lock.js +86 -0
  146. package/dist/utils/Lock.js.map +1 -0
  147. package/dist/utils/MapAssertable.js +30 -0
  148. package/dist/utils/MapAssertable.js.map +1 -0
  149. package/dist/utils/delay.js +13 -0
  150. package/dist/utils/delay.js.map +1 -0
  151. package/dist/utils/getHandler.js +2 -3
  152. package/dist/utils/getHandler.js.map +1 -1
  153. package/dist/utils/getMessageHandlerNames.js +2 -6
  154. package/dist/utils/getMessageHandlerNames.js.map +1 -1
  155. package/dist/utils/index.js +8 -3
  156. package/dist/utils/index.js.map +1 -1
  157. package/dist/utils/iteratorToArray.js +10 -0
  158. package/dist/utils/iteratorToArray.js.map +1 -0
  159. package/dist/utils/notEmpty.js +6 -0
  160. package/dist/utils/notEmpty.js.map +1 -0
  161. package/dist/utils/setupOneTimeEmitterSubscription.js.map +1 -1
  162. package/dist/utils/subscribe.js +16 -4
  163. package/dist/utils/subscribe.js.map +1 -1
  164. package/dist/utils/validateHandlers.js.map +1 -1
  165. package/eslint.config.mjs +839 -0
  166. package/package.json +68 -30
  167. package/src/AbstractAggregate.ts +83 -56
  168. package/src/AbstractProjection.ts +107 -69
  169. package/src/AbstractSaga.ts +3 -3
  170. package/src/AggregateCommandHandler.ts +69 -46
  171. package/src/CommandBus.ts +14 -13
  172. package/src/CqrsContainerBuilder.ts +28 -29
  173. package/src/Event.ts +1 -26
  174. package/src/EventDispatchPipeline.ts +99 -0
  175. package/src/EventDispatcher.ts +126 -0
  176. package/src/EventStore.ts +93 -181
  177. package/src/SagaEventHandler.ts +7 -8
  178. package/src/in-memory/InMemoryEventStorage.ts +108 -0
  179. package/src/in-memory/InMemoryLock.ts +43 -0
  180. package/src/{infrastructure → in-memory}/InMemoryMessageBus.ts +34 -32
  181. package/src/in-memory/InMemorySnapshotStorage.ts +89 -0
  182. package/src/{infrastructure → in-memory}/InMemoryView.ts +23 -24
  183. package/src/in-memory/index.ts +5 -0
  184. package/src/{infrastructure → in-memory}/utils/index.ts +0 -1
  185. package/src/{infrastructure → in-memory}/utils/nextCycle.ts +1 -1
  186. package/src/index.ts +2 -7
  187. package/src/interfaces/IAggregate.ts +68 -0
  188. package/src/interfaces/IAggregateSnapshotStorage.ts +11 -0
  189. package/src/interfaces/ICommand.ts +3 -0
  190. package/src/interfaces/ICommandBus.ts +16 -0
  191. package/src/interfaces/IContainer.ts +33 -0
  192. package/src/interfaces/IDispatchPipelineProcessor.ts +35 -0
  193. package/src/interfaces/IEvent.ts +14 -0
  194. package/src/interfaces/IEventBus.ts +11 -0
  195. package/src/interfaces/IEventDispatcher.ts +7 -0
  196. package/src/interfaces/IEventLocker.ts +34 -0
  197. package/src/interfaces/IEventReceptor.ts +6 -0
  198. package/src/interfaces/IEventSet.ts +7 -0
  199. package/src/interfaces/IEventStorageReader.ts +44 -0
  200. package/src/interfaces/IEventStorageWriter.ts +10 -0
  201. package/src/interfaces/IEventStore.ts +13 -0
  202. package/src/interfaces/IEventStream.ts +3 -0
  203. package/src/interfaces/IIdentifierProvider.ts +17 -0
  204. package/src/interfaces/ILogger.ts +11 -0
  205. package/src/interfaces/IMessage.ts +22 -0
  206. package/src/interfaces/IMessageBus.ts +8 -0
  207. package/src/interfaces/IObjectStorage.ts +13 -0
  208. package/src/interfaces/IObservable.ts +31 -0
  209. package/src/interfaces/IObserver.ts +5 -0
  210. package/src/interfaces/IProjection.ts +20 -0
  211. package/src/interfaces/ISaga.ts +38 -0
  212. package/src/interfaces/IViewLocker.ts +46 -0
  213. package/src/interfaces/Identifier.ts +1 -0
  214. package/src/interfaces/index.ts +27 -0
  215. package/src/interfaces/isObject.ts +5 -0
  216. package/src/rabbitmq/IContainer.ts +16 -0
  217. package/src/rabbitmq/RabbitMqEventBus.ts +105 -0
  218. package/src/rabbitmq/RabbitMqEventInjector.ts +66 -0
  219. package/src/rabbitmq/RabbitMqGateway.ts +474 -0
  220. package/src/rabbitmq/TerminationHandler.ts +31 -0
  221. package/src/rabbitmq/index.ts +3 -0
  222. package/src/sqlite/AbstractSqliteAccessor.ts +58 -0
  223. package/src/sqlite/AbstractSqliteObjectProjection.ts +31 -0
  224. package/src/sqlite/AbstractSqliteView.ts +53 -0
  225. package/src/sqlite/IContainer.ts +8 -0
  226. package/src/sqlite/SqliteEventLocker.ts +137 -0
  227. package/src/sqlite/SqliteObjectStorage.ts +142 -0
  228. package/src/sqlite/SqliteObjectView.ts +58 -0
  229. package/src/sqlite/SqliteProjectionDataParams.ts +16 -0
  230. package/src/sqlite/SqliteViewLocker.ts +171 -0
  231. package/src/sqlite/index.ts +8 -0
  232. package/src/sqlite/queries/eventLockTableInit.ts +10 -0
  233. package/src/sqlite/queries/index.ts +2 -0
  234. package/src/sqlite/queries/viewLockTableInit.ts +9 -0
  235. package/src/sqlite/utils/getEventId.ts +8 -0
  236. package/src/sqlite/utils/guid.ts +4 -0
  237. package/src/sqlite/utils/index.ts +2 -0
  238. package/src/utils/Lock.ts +99 -0
  239. package/src/utils/MapAssertable.ts +30 -0
  240. package/src/utils/delay.ts +8 -0
  241. package/src/utils/getHandler.ts +4 -4
  242. package/src/utils/getMessageHandlerNames.ts +2 -8
  243. package/src/utils/index.ts +8 -3
  244. package/src/utils/iteratorToArray.ts +6 -0
  245. package/src/utils/notEmpty.ts +1 -0
  246. package/src/utils/setupOneTimeEmitterSubscription.ts +5 -3
  247. package/src/utils/subscribe.ts +20 -6
  248. package/src/utils/validateHandlers.ts +2 -1
  249. package/types/AbstractAggregate.d.ts +61 -0
  250. package/types/AbstractProjection.d.ts +60 -0
  251. package/types/AbstractSaga.d.ts +31 -0
  252. package/types/AggregateCommandHandler.d.ts +20 -0
  253. package/types/CommandBus.d.ts +27 -0
  254. package/types/CqrsContainerBuilder.d.ts +21 -0
  255. package/types/Event.d.ts +9 -0
  256. package/types/EventDispatchPipeline.d.ts +18 -0
  257. package/types/EventDispatcher.d.ts +39 -0
  258. package/types/EventStore.d.ts +34 -0
  259. package/types/SagaEventHandler.d.ts +21 -0
  260. package/types/in-memory/InMemoryEventStorage.d.ts +24 -0
  261. package/types/in-memory/InMemoryLock.d.ts +21 -0
  262. package/types/in-memory/InMemoryMessageBus.d.ts +36 -0
  263. package/types/in-memory/InMemorySnapshotStorage.d.ts +37 -0
  264. package/types/in-memory/InMemoryView.d.ts +53 -0
  265. package/types/in-memory/index.d.ts +5 -0
  266. package/types/in-memory/utils/index.d.ts +1 -0
  267. package/types/in-memory/utils/nextCycle.d.ts +4 -0
  268. package/types/index.d.ts +13 -0
  269. package/types/interfaces/IAggregate.d.ts +51 -0
  270. package/types/interfaces/IAggregateSnapshotStorage.d.ts +7 -0
  271. package/types/interfaces/ICommand.d.ts +2 -0
  272. package/types/interfaces/ICommandBus.d.ts +14 -0
  273. package/types/interfaces/IContainer.d.ts +27 -0
  274. package/types/interfaces/IDispatchPipelineProcessor.d.ts +25 -0
  275. package/types/interfaces/IEvent.d.ts +6 -0
  276. package/types/interfaces/IEventBus.d.ts +6 -0
  277. package/types/interfaces/IEventDispatcher.d.ts +6 -0
  278. package/types/interfaces/IEventLocker.d.ts +24 -0
  279. package/types/interfaces/IEventReceptor.d.ts +5 -0
  280. package/types/interfaces/IEventSet.d.ts +3 -0
  281. package/types/interfaces/IEventStorageReader.d.ts +28 -0
  282. package/types/interfaces/IEventStorageWriter.d.ts +8 -0
  283. package/types/interfaces/IEventStore.d.ts +9 -0
  284. package/types/interfaces/IEventStream.d.ts +2 -0
  285. package/types/interfaces/IIdentifierProvider.d.ts +10 -0
  286. package/types/interfaces/ILogger.d.ts +22 -0
  287. package/types/interfaces/IMessage.d.ts +12 -0
  288. package/types/interfaces/IMessageBus.d.ts +7 -0
  289. package/types/interfaces/IObjectStorage.d.ts +8 -0
  290. package/types/interfaces/IObservable.d.ts +19 -0
  291. package/types/interfaces/IObserver.d.ts +4 -0
  292. package/types/interfaces/IProjection.d.ts +17 -0
  293. package/types/interfaces/ISaga.d.ts +30 -0
  294. package/types/interfaces/IViewLocker.d.ts +34 -0
  295. package/types/interfaces/Identifier.d.ts +1 -0
  296. package/types/interfaces/index.d.ts +27 -0
  297. package/types/interfaces/isObject.d.ts +1 -0
  298. package/types/rabbitmq/IContainer.d.ts +14 -0
  299. package/types/rabbitmq/RabbitMqEventBus.d.ts +42 -0
  300. package/types/rabbitmq/RabbitMqEventInjector.d.ts +13 -0
  301. package/types/rabbitmq/RabbitMqGateway.d.ts +79 -0
  302. package/types/rabbitmq/TerminationHandler.d.ts +10 -0
  303. package/types/rabbitmq/index.d.ts +3 -0
  304. package/types/sqlite/AbstractSqliteAccessor.d.ts +25 -0
  305. package/types/sqlite/AbstractSqliteObjectProjection.d.ts +8 -0
  306. package/types/sqlite/AbstractSqliteView.d.ts +18 -0
  307. package/types/sqlite/IContainer.d.ts +7 -0
  308. package/types/sqlite/SqliteEventLocker.d.ts +28 -0
  309. package/types/sqlite/SqliteObjectStorage.d.ts +16 -0
  310. package/types/sqlite/SqliteObjectView.d.ts +16 -0
  311. package/types/sqlite/SqliteProjectionDataParams.d.ts +14 -0
  312. package/types/sqlite/SqliteViewLocker.d.ts +30 -0
  313. package/types/sqlite/index.d.ts +8 -0
  314. package/types/sqlite/queries/eventLockTableInit.d.ts +1 -0
  315. package/types/sqlite/queries/index.d.ts +2 -0
  316. package/types/sqlite/queries/viewLockTableInit.d.ts +1 -0
  317. package/types/sqlite/utils/getEventId.d.ts +5 -0
  318. package/types/sqlite/utils/guid.d.ts +4 -0
  319. package/types/sqlite/utils/index.d.ts +2 -0
  320. package/types/utils/Deferred.d.ts +13 -0
  321. package/types/utils/Lock.d.ts +22 -0
  322. package/types/utils/MapAssertable.d.ts +11 -0
  323. package/types/utils/delay.d.ts +5 -0
  324. package/types/utils/getClassName.d.ts +4 -0
  325. package/types/utils/getHandler.d.ts +7 -0
  326. package/types/utils/getMessageHandlerNames.d.ts +5 -0
  327. package/types/utils/index.d.ts +13 -0
  328. package/types/utils/isClass.d.ts +1 -0
  329. package/types/utils/iteratorToArray.d.ts +1 -0
  330. package/types/utils/notEmpty.d.ts +1 -0
  331. package/types/utils/setupOneTimeEmitterSubscription.d.ts +12 -0
  332. package/types/utils/subscribe.d.ts +13 -0
  333. package/types/utils/validateHandlers.d.ts +4 -0
  334. package/dist/infrastructure/InMemoryEventStorage.js +0 -53
  335. package/dist/infrastructure/InMemoryEventStorage.js.map +0 -1
  336. package/dist/infrastructure/InMemoryLock.js +0 -68
  337. package/dist/infrastructure/InMemoryLock.js.map +0 -1
  338. package/dist/infrastructure/InMemoryMessageBus.js.map +0 -1
  339. package/dist/infrastructure/InMemorySnapshotStorage.js +0 -26
  340. package/dist/infrastructure/InMemorySnapshotStorage.js.map +0 -1
  341. package/dist/infrastructure/InMemoryView.js.map +0 -1
  342. package/dist/infrastructure/utils/Deferred.js.map +0 -1
  343. package/dist/infrastructure/utils/index.js.map +0 -1
  344. package/dist/infrastructure/utils/nextCycle.js.map +0 -1
  345. package/dist/interfaces.js.map +0 -1
  346. package/dist/utils/getHandledMessageTypes.js +0 -18
  347. package/dist/utils/getHandledMessageTypes.js.map +0 -1
  348. package/src/infrastructure/InMemoryEventStorage.ts +0 -68
  349. package/src/infrastructure/InMemoryLock.ts +0 -73
  350. package/src/infrastructure/InMemorySnapshotStorage.ts +0 -27
  351. package/src/interfaces.ts +0 -328
  352. package/src/utils/getHandledMessageTypes.ts +0 -20
  353. /package/dist/{infrastructure/utils → utils}/Deferred.js +0 -0
  354. /package/src/{infrastructure/utils → utils}/Deferred.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -1,27 +1,109 @@
1
- # [1.0.0-rc.2](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.1...v1.0.0-rc.2) (2024-08-03)
1
+ # [1.0.0-rc.20](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.19...v1.0.0-rc.20) (2025-10-13)
2
2
 
3
3
 
4
+ ### Changes
4
5
 
5
- # [1.0.0-rc.1](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.0...v1.0.0-rc.1) (2024-08-03)
6
+ * Enhance type safety in CqrsContainerBuilder with generics ([025765c](https://github.com/snatalenko/node-cqrs/commit/025765cc31eec5a004142dff5cafd8264af10ea9))
6
7
 
7
8
 
8
- ### Build System
9
+ # [1.0.0-rc.19](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.18...v1.0.0-rc.19) (2025-09-24)
10
+
11
+
12
+
13
+ # [1.0.0-rc.18](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.17...v1.0.0-rc.18) (2025-09-11)
14
+
15
+
16
+
17
+ # [1.0.0-rc.17](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.16...v1.0.0-rc.17) (2025-08-29)
18
+
19
+
20
+
21
+ # [1.0.0-rc.16](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.15...v1.0.0-rc.16) (2025-08-29)
22
+
9
23
 
10
- * Add NPM publishing script ([3372990](https://github.com/snatalenko/node-cqrs/commit/3372990ba2549695398e0949e35009396e660005))
11
- * Suppress audit and test for tags ([574a00c](https://github.com/snatalenko/node-cqrs/commit/574a00cc53af009994ca4dd3278cb764743b4ad6))
12
24
 
25
+ # [1.0.0-rc.15](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.14...v1.0.0-rc.15) (2025-08-24)
13
26
 
14
- # [1.0.0-rc.0](https://github.com/snatalenko/node-cqrs/compare/v0.16.4...v1.0.0-rc.0) (2024-08-02)
27
+
28
+
29
+ # [1.0.0-rc.14](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.13...v1.0.0-rc.14) (2025-08-15)
30
+
31
+
32
+
33
+ # [1.0.0-rc.13](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.12...v1.0.0-rc.13) (2025-08-14)
34
+
35
+
36
+
37
+ # [1.0.0-rc.12](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.11...v1.0.0-rc.12) (2025-08-11)
38
+
39
+
40
+
41
+ # [1.0.0-rc.11](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.10...v1.0.0-rc.11) (2025-05-09)
42
+
43
+
44
+ ### Changes
45
+
46
+ * Cache immediate aggregates to handle concurrent commands ([e193c4c](https://github.com/snatalenko/node-cqrs/commit/e193c4c8dc7b91de6cbc84e2ac668170ddb48bc0))
47
+ * Use `structuredClone` for snapshot creation ([1d0e827](https://github.com/snatalenko/node-cqrs/commit/1d0e827da71c760739588a37ae6afe63a4fa8d34))
48
+
49
+ ### Refactoring
50
+
51
+ * Simplify aggregate interface ([3e141fd](https://github.com/snatalenko/node-cqrs/commit/3e141fd217c4a094a57fefe8788816d474020ffe))
52
+
53
+
54
+ # [1.0.0-rc.10](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.9...v1.0.0-rc.10) (2025-04-13)
55
+
56
+
57
+ ### Fixes
58
+
59
+ * Asserting db connection in prolongLock and unlock methods ([b272473](https://github.com/snatalenko/node-cqrs/commit/b2724739b3ff483b13c0cfeea30c73c7d8ab8b94))
60
+
61
+
62
+ # [1.0.0-rc.9](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.8...v1.0.0-rc.9) (2025-04-13)
63
+
64
+
65
+
66
+ # [1.0.0-rc.8](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.7...v1.0.0-rc.8) (2025-04-13)
67
+
68
+
69
+ ### Features
70
+
71
+ * RabbitMQ integration classes to support event publishing and subscription ([991c223](https://github.com/snatalenko/node-cqrs/commit/991c2233185d3610a2b8930f6930a03c0cdea01d))
72
+
73
+ ### Changes
74
+
75
+ * Move validation, snapshot and event persistence to EventDispatcher pipeline ([e781f7c](https://github.com/snatalenko/node-cqrs/commit/e781f7c6c2e4f7c9f8c4615b170d0d29d3e8f133))
76
+
77
+
78
+ # [1.0.0-rc.7](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.6...v1.0.0-rc.7) (2025-04-13)
79
+
80
+
81
+ ### Changes
82
+
83
+ * Remove `publishAsync` setting, simplify publishing sequence ([79257e5](https://github.com/snatalenko/node-cqrs/commit/79257e59d322df5dd8e41bedf5273c97ae77b609))
84
+
85
+
86
+ # [1.0.0-rc.6](https://github.com/snatalenko/node-cqrs/compare/v0.16.4...v1.0.0-rc.6) (2025-03-21)
15
87
 
16
88
 
17
89
  ### Fixes
18
90
 
19
91
  * Vulnerability in minimist dependency ([07b8c68](https://github.com/snatalenko/node-cqrs/commit/07b8c682fae4278965aa13a06caa994c037934e9))
20
92
 
93
+ ### Changes
94
+
95
+ * Add `InMemoryView.prototype.getSync` method ([5d4adb9](https://github.com/snatalenko/node-cqrs/commit/5d4adb9109c4c85edae2b0f3dfd995e8c51aef06))
96
+ * Support persistent views; Add SQLite infrastructure ([c235573](https://github.com/snatalenko/node-cqrs/commit/c235573678be349d031d1a696cab3993224979a2))
97
+
21
98
  ### Refactoring
22
99
 
23
100
  * Migrate to TS and Jest ([6737d55](https://github.com/snatalenko/node-cqrs/commit/6737d5566a9dc6314df0b20a65d32414fc503e54))
24
101
 
102
+ ### Build System
103
+
104
+ * Add NPM publishing script ([3372990](https://github.com/snatalenko/node-cqrs/commit/3372990ba2549695398e0949e35009396e660005))
105
+ * Suppress audit and test for tags ([574a00c](https://github.com/snatalenko/node-cqrs/commit/574a00cc53af009994ca4dd3278cb764743b4ad6))
106
+
25
107
 
26
108
  ## [0.16.4](https://github.com/snatalenko/node-cqrs/compare/v0.16.3...v0.16.4) (2022-08-28)
27
109
 
@@ -60,36 +142,24 @@
60
142
  * Postpone view.get responses to next loop iteration ([950c2e4](https://github.com/snatalenko/node-cqrs/commit/950c2e42f62d7388b0cc668e81fb4f6718656fca))
61
143
 
62
144
 
63
- # [0.16.0](https://github.com/snatalenko/node-cqrs/compare/v0.16.0-5...v0.16.0) (2020-03-18)
64
-
65
-
66
- ### Fixes
67
-
68
- * Moderate security issue in "minimist" dev dependency ([579d523](https://github.com/snatalenko/node-cqrs/commit/579d523745a6d33902a5245bc7e9f3fe843abc2b))
69
-
70
-
71
- # [0.16.0-5](https://github.com/snatalenko/node-cqrs/compare/v0.16.0-4...v0.16.0-5) (2020-02-19)
72
-
73
-
74
-
75
- # [0.16.0-4](https://github.com/snatalenko/node-cqrs/compare/v0.16.0-3...v0.16.0-4) (2020-02-19)
76
-
77
-
78
-
79
- # [0.16.0-3](https://github.com/snatalenko/node-cqrs/compare/v0.16.0-2...v0.16.0-3) (2020-01-28)
145
+ # [0.16.0](https://github.com/snatalenko/node-cqrs/compare/v0.15.1...v0.16.0) (2020-03-18)
80
146
 
81
147
 
82
148
  ### Features
83
149
 
150
+ * Accept logger as an optional dependency ([65fe5ad](https://github.com/snatalenko/node-cqrs/commit/65fe5ad8a9de48d548715a2bd651f6d9c4cb0af1))
84
151
  * Detect circular dependencies in DI container ([1490b51](https://github.com/snatalenko/node-cqrs/commit/1490b519c7581b1de6cd084d91f61875751d773b))
85
152
 
86
153
  ### Fixes
87
154
 
155
+ * Debug output not using toString in Node 12 ([ca0d32f](https://github.com/snatalenko/node-cqrs/commit/ca0d32f78a676faf45a342f4198ef4a93a3d0702))
88
156
  * Debug output on one time subscriptions ([2fd7601](https://github.com/snatalenko/node-cqrs/commit/2fd7601b6b8e8059f0b777af6c1294cc78cb787b))
89
157
  * Correctly set type of the extended container builder created from container ([1f2f632](https://github.com/snatalenko/node-cqrs/commit/1f2f6325ceab65c4c81494d145261668125d03b1))
158
+ * Moderate security issue in "minimist" dev dependency ([579d523](https://github.com/snatalenko/node-cqrs/commit/579d523745a6d33902a5245bc7e9f3fe843abc2b))
90
159
 
91
160
  ### Changes
92
161
 
162
+ * Debug, mocha, sinon ([ac80c27](https://github.com/snatalenko/node-cqrs/commit/ac80c27653828904cf7b80d37b0ecade860b7490))
93
163
  * Move DI container to a separate package ([350f3f4](https://github.com/snatalenko/node-cqrs/commit/350f3f405a98fea2c7a85ea92f2b0f1aa945c75c))
94
164
  * Do not bind masterHandler to observer automatically ([d2ec79d](https://github.com/snatalenko/node-cqrs/commit/d2ec79dced5460f619cf9bed5f34df1bbb8e0132))
95
165
  * Remove deprecated InMemoryView..markAsReady method ([23015ec](https://github.com/snatalenko/node-cqrs/commit/23015ec3f5bc69f843cf6815caa1f4cda9fea27c))
@@ -103,122 +173,213 @@
103
173
 
104
174
  ### Tests
105
175
 
176
+ * Fix tests in Node 12 ([beeb471](https://github.com/snatalenko/node-cqrs/commit/beeb471faee9e1259f11b4c1c65877cd27309637))
106
177
  * Run example domain tests with unit tests ([5ffdb43](https://github.com/snatalenko/node-cqrs/commit/5ffdb43c0398fc6650a7a1d62a5f07870ee20bfd))
107
178
  * Run eslint for entire project folder ([d9055a1](https://github.com/snatalenko/node-cqrs/commit/d9055a158faa67dc9ece4f77b01517a5480b0a18))
108
179
 
109
180
  ### Build System
110
181
 
182
+ * Prevent git push on version ([3ea9e38](https://github.com/snatalenko/node-cqrs/commit/3ea9e38babf440ab384235e69d248fd92a2dfdff))
183
+ * Add conventional-changelog script ([da26a1c](https://github.com/snatalenko/node-cqrs/commit/da26a1cf6db0a609fcb3f1ba3a29ce6db6d0ab95))
184
+ * Run tests in NodeJS 12 env ([1d4239c](https://github.com/snatalenko/node-cqrs/commit/1d4239cf0f48e64105bfd6b28ab9a22f3fd23e7e))
185
+ * Replace changelog eslint preset with custom one ([8507262](https://github.com/snatalenko/node-cqrs/commit/8507262eeb7c367bbb8bd52b74e04c678bfcf956))
111
186
  * Exclude unnecessary files from package ([47b6797](https://github.com/snatalenko/node-cqrs/commit/47b679750780c0d7840d4d45a1296dc9bef7d674))
112
187
  * Do not install global dependencies ([158783c](https://github.com/snatalenko/node-cqrs/commit/158783c299720e709b8a34f3ef74fba1390d03ad))
113
188
 
114
189
 
115
- # [0.16.0-2](https://github.com/snatalenko/node-cqrs/compare/v0.16.0-1...v0.16.0-2) (2019-12-18)
190
+ ## [0.15.1](https://github.com/snatalenko/node-cqrs/compare/v0.15.0...v0.15.1) (2019-08-26)
116
191
 
117
192
 
118
- ### Features
193
+ ### Changes
119
194
 
120
- * Accept logger as an optional dependency ([65fe5ad](https://github.com/snatalenko/node-cqrs/commit/65fe5ad8a9de48d548715a2bd651f6d9c4cb0af1))
195
+ * Upgrade dev dependencies to fix audit script ([ef01cc3](https://github.com/snatalenko/node-cqrs/commit/ef01cc33b63a95a8783a83b34c4fcb3f4830fe52))
121
196
 
122
- ### Build System
123
197
 
124
- * Replace changelog eslint preset with custom one ([8507262](https://github.com/snatalenko/node-cqrs/commit/8507262eeb7c367bbb8bd52b74e04c678bfcf956))
198
+ # [0.15.0](https://github.com/snatalenko/node-cqrs/compare/v0.14.2...v0.15.0) (2019-08-25)
125
199
 
126
200
 
127
- ## [0.15.1](https://github.com/snatalenko/node-cqrs/compare/v0.15.0...v0.15.1) (2019-08-26)
128
201
 
202
+ ## [0.14.2](https://github.com/snatalenko/node-cqrs/compare/v0.14.1...v0.14.2) (2018-07-29)
129
203
 
130
- ### Changes
131
204
 
132
- * Upgrade dev dependencies to fix audit script ([ef01cc3](https://github.com/snatalenko/node-cqrs/commit/ef01cc33b63a95a8783a83b34c4fcb3f4830fe52))
133
205
 
206
+ ## [0.14.1](https://github.com/snatalenko/node-cqrs/compare/v0.14.0...v0.14.1) (2018-07-14)
134
207
 
135
- # [0.16.0-1](https://github.com/snatalenko/node-cqrs/compare/v0.16.0-0...v0.16.0-1) (2019-11-28)
136
208
 
137
- ### Changes
138
209
 
139
- * EventStore to return async event generators (requires NodeJS version 10+)
210
+ # [0.14.0](https://github.com/snatalenko/node-cqrs/compare/v0.13.0...v0.14.0) (2018-05-17)
140
211
 
141
- ### Build
142
212
 
143
- * Add conventional-changelog script ([da26a1c](https://github.com/snatalenko/node-cqrs/commit/da26a1cf6db0a609fcb3f1ba3a29ce6db6d0ab95))
144
- * Prevent git push on version ([3ea9e38](https://github.com/snatalenko/node-cqrs/commit/3ea9e38babf440ab384235e69d248fd92a2dfdff))
145
- * Run tests in NodeJS 12 env ([1d4239c](https://github.com/snatalenko/node-cqrs/commit/1d4239cf0f48e64105bfd6b28ab9a22f3fd23e7e))
146
213
 
147
- ### Fix
214
+ # [0.13.0](https://github.com/snatalenko/node-cqrs/compare/v0.12.6...v0.13.0) (2017-10-04)
148
215
 
149
- * Debug output not using toString in Node 12 ([ca0d32f](https://github.com/snatalenko/node-cqrs/commit/ca0d32f78a676faf45a342f4198ef4a93a3d0702))
150
216
 
151
- ### Tests
152
217
 
153
- * Fix tests in Node 12 ([beeb471](https://github.com/snatalenko/node-cqrs/commit/beeb471faee9e1259f11b4c1c65877cd27309637))
218
+ ## [0.12.6](https://github.com/snatalenko/node-cqrs/compare/v0.12.5...v0.12.6) (2017-08-23)
154
219
 
155
- ### Upgrade
156
220
 
157
- * debug, mocha, sinon ([ac80c27](https://github.com/snatalenko/node-cqrs/commit/ac80c27653828904cf7b80d37b0ecade860b7490))
158
221
 
159
- ## 0.15.0 - 2018-08-25
222
+ ## [0.12.5](https://github.com/snatalenko/node-cqrs/compare/v0.12.4...v0.12.5) (2017-06-23)
160
223
 
161
224
 
162
- ### Features
163
225
 
164
- * `InMemoryView.prototype.getAll` as an alternative to the deprecated `state` property
226
+ ## [0.12.4](https://github.com/snatalenko/node-cqrs/compare/v0.12.3...v0.12.4) (2017-04-25)
165
227
 
166
- ### Changes
167
228
 
168
- * `InMemoryView.prototype.create` 2nd parameter must be an instance of an Object, not a factory function
169
- * `InMemoryView.prototype.updateEnforcingNew` does not pass an empty object as a parameter when record does not exist
170
- * Observable `on(,,{queueName})` replaced with `queue(name).on(,)`;
171
- * separated IProjectionView and IConcurrentView interfaces
172
- * `IProjectionView.prototype.shouldRestore` can return Promise
173
- * Projection `restore` process flow to support async concurrent views
174
229
 
175
- ### Fixes
230
+ ## [0.12.3](https://github.com/snatalenko/node-cqrs/compare/v0.12.1...v0.12.3) (2017-04-24)
176
231
 
177
- * Typings
178
- * Call stack overflow in EventStream constructor on large number of events
179
232
 
180
- ## 0.14.2 (2018-07-29)
181
233
 
234
+ ## [0.12.1](https://github.com/snatalenko/node-cqrs/compare/v0.12.0...v0.12.1) (2017-04-24)
182
235
 
183
- ### Fixes
184
236
 
185
- * `Container.prototype.registerInstance` requires an Object as first parameter
186
237
 
187
- ## 0.14.1 (2018-07-14)
238
+ # [0.12.0](https://github.com/snatalenko/node-cqrs/compare/v0.11.1...v0.12.0) (2017-04-22)
188
239
 
189
- ### Features
190
240
 
191
- * `Aggregate.prototype.makeEvent` as a separate method for testing purposes
192
241
 
193
- ### Fixes
242
+ ## [0.11.1](https://github.com/snatalenko/node-cqrs/compare/v0.11.0...v0.11.1) (2017-03-01)
194
243
 
195
- * Aggregate snapshot modification thru Aggregate state
196
- * Tests with NodeJS@^10
197
244
 
198
- ## 0.14.0 (2018-05-17)
199
245
 
246
+ # [0.11.0](https://github.com/snatalenko/node-cqrs/compare/v0.10.0...v0.11.0) (2017-01-18)
200
247
 
201
- ### Features
202
248
 
203
- * examples/user-domain
204
- * typings
205
- * changelog
206
249
 
207
- ### Changes
250
+ # [0.10.0](https://github.com/snatalenko/node-cqrs/compare/v0.9.3...v0.10.0) (2017-01-16)
208
251
 
209
- * snapshotStorage moved to a separate interface/entity
210
- * named queues handling moved out of EventStore to InMemoryMessageBus implementation
211
- * command-to-event context copying moved out of EventStore to AbstractAggregate.prototype.emit, which frees up road for a concurrent operations on same aggregate implementation
212
- * EventStream is immutable
213
- * `AbstractProjection.prototype.shouldRestoreView` can be overriden in projection for own view implementations
214
252
 
215
- ## 0.13.0 (2017-10-04)
216
253
 
217
- ### Documentation
254
+ ## [0.9.3](https://github.com/snatalenko/node-cqrs/compare/v0.9.2...v0.9.3) (2017-01-06)
255
+
256
+
257
+
258
+ ## [0.9.2](https://github.com/snatalenko/node-cqrs/compare/v0.9.1...v0.9.2) (2016-12-19)
259
+
260
+
261
+
262
+ ## [0.9.1](https://github.com/snatalenko/node-cqrs/compare/v0.9.0...v0.9.1) (2016-12-17)
263
+
264
+
265
+
266
+ # [0.9.0](https://github.com/snatalenko/node-cqrs/compare/v0.8.0...v0.9.0) (2016-12-17)
267
+
268
+
269
+
270
+ # [0.8.0](https://github.com/snatalenko/node-cqrs/compare/v0.7.8...v0.8.0) (2016-12-07)
271
+
272
+
273
+
274
+ ## [0.7.8](https://github.com/snatalenko/node-cqrs/compare/v0.7.7...v0.7.8) (2016-12-05)
275
+
276
+
277
+
278
+ ## [0.7.7](https://github.com/snatalenko/node-cqrs/compare/v0.7.6...v0.7.7) (2016-12-04)
279
+
280
+
281
+
282
+ ## [0.7.6](https://github.com/snatalenko/node-cqrs/compare/v0.7.5...v0.7.6) (2016-12-01)
283
+
284
+
285
+
286
+ ## [0.7.5](https://github.com/snatalenko/node-cqrs/compare/v0.7.4...v0.7.5) (2016-12-01)
287
+
288
+
289
+
290
+ ## [0.7.4](https://github.com/snatalenko/node-cqrs/compare/v0.7.3...v0.7.4) (2016-11-30)
291
+
292
+
293
+
294
+ ## [0.7.3](https://github.com/snatalenko/node-cqrs/compare/v0.7.2...v0.7.3) (2016-11-29)
295
+
296
+
297
+
298
+ ## [0.7.2](https://github.com/snatalenko/node-cqrs/compare/v0.7.1...v0.7.2) (2016-11-25)
299
+
300
+
301
+
302
+ ## [0.7.1](https://github.com/snatalenko/node-cqrs/compare/v0.7.0...v0.7.1) (2016-11-20)
303
+
304
+
305
+
306
+ # [0.7.0](https://github.com/snatalenko/node-cqrs/compare/v0.6.10...v0.7.0) (2016-11-18)
307
+
308
+
309
+
310
+ ## [0.6.10](https://github.com/snatalenko/node-cqrs/compare/v0.6.9...v0.6.10) (2016-10-24)
311
+
312
+
313
+
314
+ ## [0.6.9](https://github.com/snatalenko/node-cqrs/compare/v0.6.8...v0.6.9) (2016-10-24)
315
+
316
+
317
+
318
+ ## [0.6.8](https://github.com/snatalenko/node-cqrs/compare/v0.6.7...v0.6.8) (2016-10-23)
319
+
320
+
321
+
322
+ ## [0.6.7](https://github.com/snatalenko/node-cqrs/compare/v0.6.6...v0.6.7) (2016-10-23)
323
+
324
+
325
+
326
+ ## [0.6.6](https://github.com/snatalenko/node-cqrs/compare/v0.6.5...v0.6.6) (2016-08-23)
327
+
328
+
329
+
330
+ ## [0.6.5](https://github.com/snatalenko/node-cqrs/compare/v0.6.4...v0.6.5) (2016-08-23)
331
+
332
+
333
+
334
+ ## [0.6.4](https://github.com/snatalenko/node-cqrs/compare/v0.6.3...v0.6.4) (2016-07-24)
335
+
336
+
337
+
338
+ ## [0.6.3](https://github.com/snatalenko/node-cqrs/compare/v0.6.2...v0.6.3) (2016-07-06)
339
+
340
+
341
+
342
+ ## [0.6.2](https://github.com/snatalenko/node-cqrs/compare/v0.6.1...v0.6.2) (2016-07-02)
343
+
344
+
345
+
346
+ ## [0.6.1](https://github.com/snatalenko/node-cqrs/compare/v0.6.0...v0.6.1) (2016-05-31)
347
+
348
+
349
+
350
+ # [0.6.0](https://github.com/snatalenko/node-cqrs/compare/v0.5.0...v0.6.0) (2016-03-06)
351
+
352
+
353
+
354
+ # [0.5.0](https://github.com/snatalenko/node-cqrs/compare/v0.4.0...v0.5.0) (2016-03-03)
355
+
356
+
357
+
358
+ # [0.4.0](https://github.com/snatalenko/node-cqrs/compare/v0.3.2...v0.4.0) (2016-03-03)
359
+
360
+
361
+
362
+ ## [0.3.2](https://github.com/snatalenko/node-cqrs/compare/v0.3.1...v0.3.2) (2016-02-29)
363
+
364
+
365
+
366
+ ## [0.3.1](https://github.com/snatalenko/node-cqrs/compare/v0.3.0...v0.3.1) (2016-02-29)
367
+
368
+
369
+
370
+ # [0.3.0](https://github.com/snatalenko/node-cqrs/compare/v0.2.2...v0.3.0) (2016-02-29)
371
+
372
+
373
+
374
+ ## [0.2.2](https://github.com/snatalenko/node-cqrs/compare/v0.2.1...v0.2.2) (2015-12-23)
375
+
376
+
377
+
378
+ ## [0.2.1](https://github.com/snatalenko/node-cqrs/compare/v0.2.0...v0.2.1) (2015-12-22)
379
+
380
+
381
+
382
+ # 0.2.0 (2015-12-22)
218
383
 
219
- * docs publishing to [node-cqrs.org](https://www.node-cqrs.org)
220
384
 
221
- ### Changes
222
385
 
223
- * In-Memory views do not respond to get(..) requests until they are restored
224
- * In-Memory views restoring is handled by AbstractProjection
@@ -2,33 +2,27 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractAggregate = void 0;
4
4
  const utils_1 = require("./utils");
5
- /**
6
- * Deep-clone simple JS object
7
- */
8
- function clone(obj) {
9
- return JSON.parse(JSON.stringify(obj));
10
- }
11
5
  const SNAPSHOT_EVENT_TYPE = 'snapshot';
12
6
  /**
13
7
  * Base class for Aggregate definition
14
8
  */
15
9
  class AbstractAggregate {
16
10
  /**
17
- * Optional list of commands handled by Aggregate.
11
+ * List of command names handled by the Aggregate.
18
12
  *
19
- * If not overridden in Aggregate implementation,
20
- * `AggregateCommandHandler` will treat all public methods as command handlers
13
+ * Can be overridden in the Aggregate implementation to explicitly define supported commands.
14
+ * If not overridden, all public methods will be treated as command handlers by default.
21
15
  *
22
- * @example
23
- * return ['createUser', 'changePassword'];
16
+ * @example ['createUser', 'changePassword'];
24
17
  */
25
18
  static get handles() {
26
- return undefined;
19
+ return (0, utils_1.getMessageHandlerNames)(this);
27
20
  }
28
21
  #id;
29
- #changes = [];
30
22
  #version = 0;
31
23
  #snapshotVersion;
24
+ /** List of emitted events */
25
+ changes = [];
32
26
  /** Internal aggregate state */
33
27
  state;
34
28
  /** Command being handled by aggregate */
@@ -45,17 +39,15 @@ class AbstractAggregate {
45
39
  get snapshotVersion() {
46
40
  return this.#snapshotVersion;
47
41
  }
48
- /** Events emitted by Aggregate */
49
- get changes() {
50
- return [...this.#changes];
51
- }
52
42
  /**
53
43
  * Override to define whether an aggregate state snapshot should be taken
54
44
  *
55
45
  * @example
56
- * // create snapshot every 50 events
57
- * return this.version % 50 === 0;
46
+ * // create snapshot every 50 events if new events were emitted
47
+ * return !!this.changes.length
48
+ * && this.version - (this.snapshotVersion ?? 0) > 50;
58
49
  */
50
+ // eslint-disable-next-line class-methods-use-this
59
51
  get shouldTakeSnapshot() {
60
52
  return false;
61
53
  }
@@ -74,18 +66,6 @@ class AbstractAggregate {
74
66
  if (events)
75
67
  events.forEach(event => this.mutate(event));
76
68
  }
77
- /** Pass command to command handler */
78
- handle(command) {
79
- if (!command)
80
- throw new TypeError('command argument required');
81
- if (!command.type)
82
- throw new TypeError('command.type argument required');
83
- const handler = (0, utils_1.getHandler)(this, command.type);
84
- if (!handler)
85
- throw new Error(`'${command.type}' handler is not defined or not a function`);
86
- this.command = command;
87
- return handler.call(this, command.payload, command.context);
88
- }
89
69
  /** Mutate aggregate state and increment aggregate version */
90
70
  mutate(event) {
91
71
  if (event.aggregateVersion !== undefined)
@@ -103,12 +83,55 @@ class AbstractAggregate {
103
83
  }
104
84
  this.#version += 1;
105
85
  }
86
+ /** Pass command to command handler */
87
+ handle(command) {
88
+ if (!command)
89
+ throw new TypeError('command argument required');
90
+ if (!command.type)
91
+ throw new TypeError('command.type argument required');
92
+ const handler = (0, utils_1.getHandler)(this, command.type);
93
+ if (!handler)
94
+ throw new Error(`'${command.type}' handler is not defined or not a function`);
95
+ if (this.command)
96
+ throw new Error('Another command is being processed');
97
+ try {
98
+ this.command = command;
99
+ const eventsOffset = this.changes.length;
100
+ const handlerResult = handler.call(this, command.payload, command.context);
101
+ if (handlerResult instanceof Promise) {
102
+ return handlerResult
103
+ .then(() => this.getUncommittedEvents(eventsOffset))
104
+ .finally(() => {
105
+ this.command = undefined;
106
+ });
107
+ }
108
+ else { // handle synchronous result
109
+ const events = this.getUncommittedEvents(eventsOffset);
110
+ this.command = undefined;
111
+ return events;
112
+ }
113
+ }
114
+ catch (err) {
115
+ this.command = undefined;
116
+ throw err;
117
+ }
118
+ }
119
+ /**
120
+ * Get the events emitted during commands processing.
121
+ * If a snapshot should be taken, the snapshot event is added to the end.
122
+ */
123
+ getUncommittedEvents(offset) {
124
+ if (this.shouldTakeSnapshot)
125
+ this.takeSnapshot();
126
+ return this.changes.slice(offset);
127
+ }
106
128
  /** Format and register aggregate event and mutate aggregate state */
107
129
  emit(type, payload) {
108
130
  if (typeof type !== 'string' || !type.length)
109
131
  throw new TypeError('type argument must be a non-empty string');
110
132
  const event = this.makeEvent(type, payload, this.command);
111
133
  this.emitRaw(event);
134
+ return event;
112
135
  }
113
136
  /** Format event based on a current aggregate state and a command being executed */
114
137
  makeEvent(type, payload, sourceCommand) {
@@ -141,19 +164,18 @@ class AbstractAggregate {
141
164
  if (typeof event.type !== 'string' || !event.type.length)
142
165
  throw new TypeError('event.type argument must be a non-empty String');
143
166
  this.mutate(event);
144
- this.#changes.push(event);
145
- }
146
- /**
147
- * Take an aggregate state snapshot and add it to the changes queue
148
- */
149
- takeSnapshot() {
150
- this.emit(SNAPSHOT_EVENT_TYPE, this.makeSnapshot());
167
+ this.changes.push(event);
151
168
  }
152
169
  /** Create an aggregate state snapshot */
153
170
  makeSnapshot() {
154
171
  if (!this.state)
155
172
  throw new Error('state property is empty, either define state or override makeSnapshot method');
156
- return clone(this.state);
173
+ return structuredClone(this.state);
174
+ }
175
+ /** Add snapshot event to the collection of emitted events */
176
+ takeSnapshot() {
177
+ const snapshotEvent = this.emit(SNAPSHOT_EVENT_TYPE, this.makeSnapshot());
178
+ this.#snapshotVersion = snapshotEvent.aggregateVersion;
157
179
  }
158
180
  /** Restore aggregate state from a snapshot */
159
181
  restoreSnapshot(snapshotEvent) {
@@ -167,7 +189,7 @@ class AbstractAggregate {
167
189
  throw new Error(`${SNAPSHOT_EVENT_TYPE} event type expected`);
168
190
  if (!this.state)
169
191
  throw new Error('state property is empty, either defined state or override restoreSnapshot method');
170
- Object.assign(this.state, clone(snapshotEvent.payload));
192
+ Object.assign(this.state, structuredClone(snapshotEvent.payload));
171
193
  }
172
194
  /** Get human-readable aggregate identifier */
173
195
  toString() {
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractAggregate.js","sourceRoot":"","sources":["../src/AbstractAggregate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractAggregate.js","sourceRoot":"","sources":["../src/AbstractAggregate.ts"],"names":[],"mappings":"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"}