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
package/src/interfaces.ts DELETED
@@ -1,328 +0,0 @@
1
- export type Identifier = string | number;
2
-
3
- export interface IMessage<TPayload = any> {
4
- /** Event or command type */
5
- type: string;
6
-
7
- aggregateId?: Identifier;
8
- aggregateVersion?: number;
9
-
10
- sagaId?: Identifier;
11
- sagaVersion?: number;
12
-
13
- payload?: TPayload;
14
- context?: any;
15
- }
16
-
17
- export type ICommand<TPayload = any> = IMessage<TPayload>;
18
-
19
- export type IEvent<TPayload = any> = IMessage<TPayload> & {
20
- /** Unique event identifier */
21
- id?: string;
22
- };
23
-
24
- /**
25
- * @deprecated Try to use `IEventStream` instead
26
- */
27
- export type IEventSet = ReadonlyArray<Readonly<IEvent>>;
28
-
29
- export type IEventStream = AsyncIterableIterator<Readonly<IEvent>>;
30
-
31
-
32
- /**
33
- * Minimum aggregate interface, as it's used by default `AggregateCommandHandler`
34
- */
35
- export interface IAggregate {
36
-
37
- /** Unique aggregate identifier */
38
- readonly id: Identifier;
39
-
40
- /** Main entry point for aggregate commands */
41
- handle(command: ICommand): void | Promise<void>;
42
-
43
- /** List of events emitted by Aggregate as a result of handling command(s) */
44
- readonly changes: IEventSet;
45
-
46
- /** An indicator if aggregate snapshot should be taken */
47
- readonly shouldTakeSnapshot?: boolean;
48
-
49
- /** Take an aggregate state snapshot and add it to the changes queue */
50
- takeSnapshot(): void;
51
- }
52
-
53
- export interface IMutableAggregateState {
54
- // schemaVersion?: number;
55
- // constructor: IAggregateStateConstructor;
56
- mutate(event: IEvent): void;
57
- }
58
-
59
- // export interface IAggregateStateConstructor extends Function {
60
- // schemaVersion?: number;
61
- // new(): IAggregateState;
62
- // }
63
-
64
- export type IAggregateConstructorParams<TState extends IMutableAggregateState | object | void> = {
65
- /** Unique aggregate identifier */
66
- id: Identifier,
67
-
68
- /** Aggregate events, logged after latest snapshot */
69
- events?: IEventSet,
70
-
71
- /** Aggregate state instance */
72
- state?: TState
73
- };
74
-
75
- export interface IAggregateConstructor<TState extends IMutableAggregateState | object | void> {
76
- readonly handles?: string[];
77
- new(options: IAggregateConstructorParams<TState>): IAggregate;
78
- }
79
-
80
- export type IAggregateFactory<TState extends IMutableAggregateState | object | void> =
81
- (options: IAggregateConstructorParams<TState>) => IAggregate;
82
-
83
- export interface ISaga {
84
- /** Unique Saga ID */
85
- readonly id: Identifier;
86
-
87
- /** List of commands emitted by Saga */
88
- readonly uncommittedMessages: ICommand[];
89
-
90
- /** Main entry point for Saga events */
91
- apply(event: IEvent): void | Promise<void>;
92
-
93
- /** Reset emitted commands when they are not longer needed */
94
- resetUncommittedMessages(): void;
95
-
96
- onError?(error: Error, options: { event: IEvent, command: ICommand }): void;
97
- }
98
-
99
- export type ISagaConstructorParams = {
100
- id: Identifier,
101
- events?: IEventSet
102
- };
103
-
104
- export type ISagaFactory = (options: ISagaConstructorParams) => ISaga;
105
-
106
- export interface ISagaConstructor {
107
- new(options: ISagaConstructorParams): ISaga;
108
-
109
- /** List of event types that trigger new saga start */
110
- readonly startsWith: string[];
111
-
112
- /** List of events being handled by Saga */
113
- readonly handles: string[];
114
- }
115
-
116
- export interface IMessageHandler {
117
- (...args: any[]): any | Promise<any>
118
- };
119
-
120
- export interface IObservable {
121
- on(type: string, handler: IMessageHandler): void;
122
-
123
- off(type: string, handler: IMessageHandler): void;
124
-
125
- queue?(name: string): IObservable;
126
- }
127
-
128
- export interface IObserver {
129
- subscribe(observable: IObservable): void;
130
- }
131
-
132
- /** Commands */
133
-
134
- export interface ICommandBus extends IObservable {
135
- send(commandType: string, aggregateId: Identifier, options: { payload?: object, context?: object }):
136
- Promise<IEventSet>;
137
-
138
- sendRaw(command: ICommand):
139
- Promise<IEventSet>;
140
-
141
- on(type: string, handler: IMessageHandler): void;
142
- }
143
-
144
- export interface ICommandHandler extends IObserver {
145
- subscribe(commandBus: ICommandBus): void;
146
- }
147
-
148
- /** Events */
149
-
150
- export type IEventQueryFilter = {
151
- /** Get events emitted after this specific event */
152
- afterEvent?: IEvent;
153
-
154
- /** Get events emitted before this specific event */
155
- beforeEvent?: IEvent;
156
- }
157
-
158
- export interface IEventStorage {
159
- /**
160
- * Create unique identifier
161
- */
162
- getNewId(): Identifier | Promise<Identifier>;
163
-
164
- commitEvents(events: IEventSet): Promise<IEventSet>;
165
-
166
- getEvents(eventTypes?: Readonly<string[]>): IEventStream;
167
-
168
- getAggregateEvents(aggregateId: Identifier, options?: { snapshot?: IEvent }): Promise<IEventSet>;
169
-
170
- getSagaEvents(sagaId: Identifier, options: Pick<IEventQueryFilter, "beforeEvent">): Promise<IEventSet>;
171
- }
172
-
173
- export interface IEventStore extends IObservable {
174
- readonly snapshotsSupported?: boolean;
175
-
176
- getNewId(): Identifier | Promise<Identifier>;
177
-
178
- commit(events: IEventSet): Promise<IEventSet>;
179
-
180
- getAllEvents(eventTypes?: Readonly<string[]>): IEventStream;
181
-
182
- getAggregateEvents(aggregateId: Identifier, options?: { snapshot?: IEvent }): Promise<IEventSet>;
183
-
184
- getSagaEvents(sagaId: Identifier, options: Pick<IEventQueryFilter, "beforeEvent">): Promise<IEventSet>;
185
-
186
- once(messageTypes: string | string[], handler?: IMessageHandler, filter?: (e: IEvent) => boolean): Promise<IEvent>;
187
-
188
- queue(name: string): IObservable;
189
-
190
- registerSagaStarters(startsWith: string[] | undefined): void;
191
- }
192
-
193
- export interface IEventReceptor extends IObserver {
194
- subscribe(eventStore: IEventStore): void;
195
- }
196
-
197
- export interface IMessageBus extends IObservable {
198
- send(command: ICommand): Promise<any>;
199
- publish(event: IEvent): Promise<any>;
200
- }
201
-
202
-
203
- /** Projection */
204
-
205
- export interface IProjection<TView extends object> extends IObserver {
206
- readonly view: TView;
207
-
208
- subscribe(eventStore: IEventStore): Promise<void>;
209
-
210
- project(event: IEvent): Promise<void>;
211
- }
212
-
213
- export interface IProjectionConstructor {
214
- new(c?: any): IProjection<any>;
215
- readonly handles?: string[];
216
- }
217
-
218
- // export type ProjectionViewFactoryParams = {
219
- // schemaVersion: string,
220
- // collectionName: string
221
- // }
222
-
223
- export interface IViewFactory<TView> {
224
- (): TView;
225
- }
226
-
227
- export interface ILockable {
228
- lock(): Promise<any>;
229
- unlock(): Promise<any>;
230
- }
231
-
232
- export interface ILockableWithIndication extends ILockable {
233
- locked: Readonly<boolean>;
234
- once(event: 'unlocked'): Promise<void>;
235
- }
236
-
237
- export interface IProjectionView extends ILockable {
238
-
239
- /**
240
- * Indicates if view is ready for new events projecting
241
- */
242
- ready: boolean;
243
-
244
- /**
245
- * Lock the view for external reads/writes
246
- */
247
- lock(): Promise<boolean>;
248
-
249
- /**
250
- * Unlock external read/write operations
251
- */
252
- unlock(): Promise<void>;
253
-
254
- /**
255
- * Wait till the view is ready to accept new events
256
- */
257
- once(eventType: "ready"): Promise<void>;
258
- }
259
-
260
- export interface IPersistentView extends IProjectionView {
261
-
262
- /**
263
- * Get last projected event
264
- */
265
- getLastEvent(): Promise<IEvent | undefined>;
266
-
267
- /**
268
- * Mark event as projecting to prevent its handling by another
269
- * projection instance working with the same storage.
270
- *
271
- * @returns False value if event is already processing or processed
272
- */
273
- tryMarkAsProjecting(event: IEvent<any>): Promise<boolean>;
274
-
275
- /**
276
- * Mark event as projected
277
- */
278
- markAsProjected(event: IEvent<any>): Promise<void>;
279
- }
280
-
281
-
282
- /** Snapshots */
283
-
284
- type TSnapshot<TPayload = object> = {
285
- /**
286
- * Schema version of the data stored in `state` property.
287
- * Snapshots with older schema versions must be passed thru a data migration before applying for a newer schema
288
- */
289
- schemaVersion: string | number;
290
-
291
- /**
292
- * Last event that was processed before making a snapshot
293
- */
294
- lastEvent: IEvent;
295
-
296
- /**
297
- * Snapshot data
298
- */
299
- data: TPayload;
300
- }
301
-
302
- interface ISnapshotStorage {
303
- getSnapshot(id: Identifier): Promise<TSnapshot>;
304
- saveSnapshot(id: Identifier, snapshot: TSnapshot): Promise<void>;
305
- }
306
-
307
- type ISnapshotEvent<TPayload> = IEvent<TSnapshot<TPayload>>;
308
-
309
- export interface IAggregateSnapshotStorage {
310
- getAggregateSnapshot<TState>(aggregateId: Identifier): Promise<IEvent<TState> | undefined> | IEvent<TState> | undefined;
311
-
312
- saveAggregateSnapshot<TState>(snapshotEvent: IEvent<TState>): Promise<void> | void;
313
- }
314
-
315
-
316
- /** Interfaces */
317
-
318
- export interface ILogger {
319
- log(level: 'debug' | 'info' | 'warn' | 'error', message: string, meta?: { [key: string]: any }): void;
320
- debug(message: string, meta?: { [key: string]: any }): void;
321
- info(message: string, meta?: { [key: string]: any }): void;
322
- warn(message: string, meta?: { [key: string]: any }): void;
323
- error(message: string, meta?: { [key: string]: any }): void;
324
- }
325
-
326
- export interface IExtendableLogger extends ILogger {
327
- child(meta?: { [key: string]: any }): IExtendableLogger;
328
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * Get instance class name
3
- */
4
- export function getClassName(instance: object): string {
5
- return Object.getPrototypeOf(instance).constructor.name;
6
- }
@@ -1,20 +0,0 @@
1
- import { getMessageHandlerNames } from './getMessageHandlerNames';
2
-
3
- /**
4
- * Get a list of message types handled by observer
5
- */
6
- export function getHandledMessageTypes(
7
- observerInstanceOrClass: (object | Function) & { handles?: string[] }
8
- ): string[] {
9
- if (!observerInstanceOrClass)
10
- throw new TypeError('observerInstanceOrClass argument required');
11
-
12
- if (observerInstanceOrClass.handles)
13
- return observerInstanceOrClass.handles;
14
-
15
- const prototype = Object.getPrototypeOf(observerInstanceOrClass);
16
- if (prototype && prototype.constructor && prototype.constructor.handles)
17
- return prototype.constructor.handles;
18
-
19
- return getMessageHandlerNames(observerInstanceOrClass);
20
- }
@@ -1,20 +0,0 @@
1
- import { IMessageHandler } from "../interfaces";
2
-
3
- /**
4
- * Gets a handler for a specific message type, prefers a public (w\o _ prefix) method, if available
5
- */
6
- export function getHandler(context: { [key: string]: any }, messageType: string): IMessageHandler | null {
7
- if (!context || typeof context !== 'object')
8
- throw new TypeError('context argument required');
9
- if (typeof messageType !== 'string' || !messageType.length)
10
- throw new TypeError('messageType argument must be a non-empty string');
11
-
12
- if (messageType in context && typeof context[messageType] === 'function')
13
- return context[messageType].bind(context);
14
-
15
- const privateHandlerName = `_${messageType}`;
16
- if (privateHandlerName in context && typeof context[privateHandlerName] === 'function')
17
- return context[privateHandlerName].bind(context);
18
-
19
- return null;
20
- };
@@ -1,44 +0,0 @@
1
- const KNOWN_METHOD_NAMES = new Set([
2
- 'subscribe'
3
- ]);
4
-
5
- function getInheritedPropertyNames(prototype: object): string[] {
6
- const parentPrototype = prototype && Object.getPrototypeOf(prototype);
7
- if (!parentPrototype)
8
- return [];
9
-
10
- const propDescriptors = Object.getOwnPropertyDescriptors(parentPrototype);
11
- const propNames = Object.keys(propDescriptors);
12
-
13
- return [
14
- ...propNames,
15
- ...getInheritedPropertyNames(parentPrototype)
16
- ];
17
- }
18
-
19
- /**
20
- * Get message handler names from a command/event handler class.
21
- * Assumes all private method names start from underscore ("_").
22
- */
23
- export function getMessageHandlerNames(observerInstanceOrClass: (object | Function)): string[] {
24
- if (!observerInstanceOrClass)
25
- throw new TypeError('observerInstanceOrClass argument required');
26
-
27
- const prototype = typeof observerInstanceOrClass === 'function' ?
28
- observerInstanceOrClass.prototype :
29
- Object.getPrototypeOf(observerInstanceOrClass);
30
-
31
- if (!prototype)
32
- throw new TypeError('prototype cannot be resolved');
33
-
34
- const inheritedProperties = new Set(getInheritedPropertyNames(prototype));
35
-
36
- const propDescriptors = Object.getOwnPropertyDescriptors(prototype);
37
- const propNames = Object.keys(propDescriptors);
38
-
39
- return propNames.filter(key =>
40
- !key.startsWith('_') &&
41
- !inheritedProperties.has(key) &&
42
- !KNOWN_METHOD_NAMES.has(key) &&
43
- typeof propDescriptors[key].value === 'function');
44
- }
@@ -1,8 +0,0 @@
1
- export * from './getClassName';
2
- export * from './getHandler';
3
- export * from './validateHandlers';
4
- export * from './getMessageHandlerNames';
5
- export * from './getHandledMessageTypes';
6
- export * from './setupOneTimeEmitterSubscription';
7
- export * from './subscribe';
8
- export * from './isClass';
@@ -1,4 +0,0 @@
1
- export function isClass(func: Function) {
2
- return typeof func === 'function'
3
- && Function.prototype.toString.call(func).startsWith('class');
4
- }
@@ -1,57 +0,0 @@
1
- import { IEvent, ILogger, IObservable } from "../interfaces";
2
-
3
- /**
4
- * Create one-time eventEmitter subscription for one or multiple events that match a filter
5
- *
6
- * @param {IObservable} emitter
7
- * @param {string[]} messageTypes Array of event type to subscribe to
8
- * @param {function(IEvent):any} [handler] Optional handler to execute for a first event received
9
- * @param {function(IEvent):boolean} [filter] Optional filter to apply before executing a handler
10
- * @param {ILogger} logger
11
- * @return {Promise<IEvent>} Resolves to first event that passes filter
12
- */
13
- export function setupOneTimeEmitterSubscription(
14
- emitter: IObservable,
15
- messageTypes: string[],
16
- filter?: (e: IEvent) => boolean,
17
- handler?: (e: IEvent) => void,
18
- logger?: ILogger
19
- ): Promise<IEvent> {
20
- if (typeof emitter !== 'object' || !emitter)
21
- throw new TypeError('emitter argument must be an Object');
22
- if (!Array.isArray(messageTypes) || messageTypes.some(m => !m || typeof m !== 'string'))
23
- throw new TypeError('messageTypes argument must be an Array of non-empty Strings');
24
- if (handler && typeof handler !== 'function')
25
- throw new TypeError('handler argument, when specified, must be a Function');
26
- if (filter && typeof filter !== 'function')
27
- throw new TypeError('filter argument, when specified, must be a Function');
28
-
29
- return new Promise(resolve => {
30
-
31
- // handler will be invoked only once,
32
- // even if multiple events have been emitted before subscription was destroyed
33
- // https://nodejs.org/api/events.html#events_emitter_removelistener_eventname_listener
34
- let handled = false;
35
-
36
- function filteredHandler(event: IEvent) {
37
- if (filter && !filter(event)) return;
38
- if (handled) return;
39
- handled = true;
40
-
41
- for (const messageType of messageTypes)
42
- emitter.off(messageType, filteredHandler);
43
-
44
- logger?.debug(`'${event.type}' received, one-time subscription to '${messageTypes.join(',')}' removed`);
45
-
46
- if (handler)
47
- handler(event);
48
-
49
- resolve(event);
50
- }
51
-
52
- for (const messageType of messageTypes)
53
- emitter.on(messageType, filteredHandler);
54
-
55
- logger?.debug(`set up one-time ${filter ? 'filtered subscription' : 'subscription'} to '${messageTypes.join(',')}'`);
56
- });
57
- }
@@ -1,51 +0,0 @@
1
- import { IMessageHandler, IObservable } from "../interfaces";
2
- import { getHandler } from './getHandler';
3
- import { getHandledMessageTypes } from './getHandledMessageTypes';
4
-
5
- const unique = <T>(arr: T[]): T[] => [...new Set(arr)];
6
-
7
- /**
8
- * Subscribe observer to observable
9
- */
10
- export function subscribe(
11
- observable: IObservable,
12
- observer: object,
13
- options: {
14
- messageTypes?: string[],
15
- masterHandler?: IMessageHandler,
16
- queueName?: string
17
- } = {}
18
- ) {
19
- if (typeof observable !== 'object' || !observable)
20
- throw new TypeError('observable argument must be an Object');
21
- if (typeof observable.on !== 'function')
22
- throw new TypeError('observable.on must be a Function');
23
- if (typeof observer !== 'object' || !observer)
24
- throw new TypeError('observer argument must be an Object');
25
-
26
- const { masterHandler, messageTypes, queueName } = options;
27
- if (masterHandler && typeof masterHandler !== 'function')
28
- throw new TypeError('masterHandler parameter, when provided, must be a Function');
29
- if (queueName && typeof observable.queue !== 'function')
30
- throw new TypeError('observable.queue, when queueName is specified, must be a Function');
31
-
32
- const subscribeTo = messageTypes || getHandledMessageTypes(observer);
33
- if (!Array.isArray(subscribeTo))
34
- throw new TypeError('either options.messageTypes, observer.handles or ObserverType.handles is required');
35
-
36
- for (const messageType of unique(subscribeTo)) {
37
- const handler = masterHandler || getHandler(observer, messageType);
38
- if (!handler)
39
- throw new Error(`'${messageType}' handler is not defined or not a function`);
40
-
41
- if (queueName) {
42
- if(!observable.queue)
43
- throw new TypeError('Observer does not support named queues');
44
-
45
- observable.queue(queueName).on(messageType, handler);
46
- }
47
- else {
48
- observable.on(messageType, handler);
49
- }
50
- }
51
- }
@@ -1,19 +0,0 @@
1
- import { getHandler } from './getHandler';
2
-
3
- /**
4
- * Ensure instance has handlers declared for all handled message types
5
- */
6
- export function validateHandlers(instance: object, handlesFieldName = 'handles') {
7
- if (!instance) throw new TypeError('instance argument required');
8
-
9
- const messageTypes = Object.getPrototypeOf(instance).constructor[handlesFieldName];
10
- if (messageTypes === undefined)
11
- return;
12
- if (!Array.isArray(messageTypes))
13
- throw new TypeError('handles getter, when defined, must return an Array of Strings');
14
-
15
- for (const type of messageTypes) {
16
- if (!getHandler(instance, type))
17
- throw new Error(`'${type}' handler is not defined or not a function`);
18
- }
19
- }
File without changes
File without changes
File without changes