node-cqrs 0.16.4 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (576) hide show
  1. package/CHANGELOG.md +615 -79
  2. package/LICENSE +202 -21
  3. package/NOTICE +15 -0
  4. package/README.md +429 -112
  5. package/dist/cjs/AbstractAggregate.js +193 -0
  6. package/dist/cjs/AbstractAggregate.js.map +1 -0
  7. package/dist/cjs/AbstractProjection.js +165 -0
  8. package/dist/cjs/AbstractProjection.js.map +1 -0
  9. package/dist/cjs/AbstractSaga.js +109 -0
  10. package/dist/cjs/AbstractSaga.js.map +1 -0
  11. package/dist/cjs/AggregateCommandHandler.js +182 -0
  12. package/dist/cjs/AggregateCommandHandler.js.map +1 -0
  13. package/dist/cjs/CommandBus.js +9 -0
  14. package/dist/cjs/CommandBus.js.map +1 -0
  15. package/dist/cjs/CqrsContainerBuilder.js +97 -0
  16. package/dist/cjs/CqrsContainerBuilder.js.map +1 -0
  17. package/dist/cjs/Event.js +19 -0
  18. package/dist/cjs/Event.js.map +1 -0
  19. package/dist/cjs/EventDispatchPipeline.js +83 -0
  20. package/dist/cjs/EventDispatchPipeline.js.map +1 -0
  21. package/dist/cjs/EventDispatcher.js +93 -0
  22. package/dist/cjs/EventDispatcher.js.map +1 -0
  23. package/dist/cjs/EventIdAugmentor.js +30 -0
  24. package/dist/cjs/EventIdAugmentor.js.map +1 -0
  25. package/dist/cjs/EventStore.js +106 -0
  26. package/dist/cjs/EventStore.js.map +1 -0
  27. package/dist/cjs/SagaEventHandler.js +153 -0
  28. package/dist/cjs/SagaEventHandler.js.map +1 -0
  29. package/dist/cjs/errors/ConcurrencyError.js +21 -0
  30. package/dist/cjs/errors/ConcurrencyError.js.map +1 -0
  31. package/dist/cjs/errors/index.js +18 -0
  32. package/dist/cjs/errors/index.js.map +1 -0
  33. package/dist/cjs/in-memory/InMemoryEventStorage.js +106 -0
  34. package/dist/cjs/in-memory/InMemoryEventStorage.js.map +1 -0
  35. package/dist/cjs/in-memory/InMemoryLock.js +44 -0
  36. package/dist/cjs/in-memory/InMemoryLock.js.map +1 -0
  37. package/dist/cjs/in-memory/InMemoryMessageBus.js +93 -0
  38. package/dist/cjs/in-memory/InMemoryMessageBus.js.map +1 -0
  39. package/dist/cjs/in-memory/InMemorySnapshotStorage.js +101 -0
  40. package/dist/cjs/in-memory/InMemorySnapshotStorage.js.map +1 -0
  41. package/dist/cjs/in-memory/InMemoryView.js +154 -0
  42. package/dist/cjs/in-memory/InMemoryView.js.map +1 -0
  43. package/dist/cjs/in-memory/index.js +22 -0
  44. package/dist/cjs/in-memory/index.js.map +1 -0
  45. package/dist/cjs/in-memory/utils/index.js +18 -0
  46. package/dist/cjs/in-memory/utils/index.js.map +1 -0
  47. package/dist/cjs/in-memory/utils/nextCycle.js +9 -0
  48. package/dist/cjs/in-memory/utils/nextCycle.js.map +1 -0
  49. package/dist/cjs/index.js +58 -0
  50. package/dist/cjs/index.js.map +1 -0
  51. package/dist/cjs/interfaces/IAggregate.js +3 -0
  52. package/dist/cjs/interfaces/IAggregate.js.map +1 -0
  53. package/dist/cjs/interfaces/IAggregateSnapshotStorage.js +13 -0
  54. package/dist/cjs/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  55. package/dist/cjs/interfaces/ICommand.js +3 -0
  56. package/dist/cjs/interfaces/ICommand.js.map +1 -0
  57. package/dist/cjs/interfaces/ICommandBus.js +3 -0
  58. package/dist/cjs/interfaces/ICommandBus.js.map +1 -0
  59. package/dist/cjs/interfaces/IContainer.js +3 -0
  60. package/dist/cjs/interfaces/IContainer.js.map +1 -0
  61. package/dist/cjs/interfaces/IDispatchPipelineProcessor.js +9 -0
  62. package/dist/cjs/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  63. package/dist/cjs/interfaces/IEvent.js +10 -0
  64. package/dist/cjs/interfaces/IEvent.js.map +1 -0
  65. package/dist/cjs/interfaces/IEventBus.js +9 -0
  66. package/dist/cjs/interfaces/IEventBus.js.map +1 -0
  67. package/dist/cjs/interfaces/IEventDispatcher.js +3 -0
  68. package/dist/cjs/interfaces/IEventDispatcher.js.map +1 -0
  69. package/dist/cjs/interfaces/IEventLocker.js +15 -0
  70. package/dist/cjs/interfaces/IEventLocker.js.map +1 -0
  71. package/dist/cjs/interfaces/IEventReceptor.js +3 -0
  72. package/dist/cjs/interfaces/IEventReceptor.js.map +1 -0
  73. package/dist/cjs/interfaces/IEventSet.js +8 -0
  74. package/dist/cjs/interfaces/IEventSet.js.map +1 -0
  75. package/dist/cjs/interfaces/IEventStorageReader.js +13 -0
  76. package/dist/cjs/interfaces/IEventStorageReader.js.map +1 -0
  77. package/dist/cjs/interfaces/IEventStore.js +3 -0
  78. package/dist/cjs/interfaces/IEventStore.js.map +1 -0
  79. package/dist/cjs/interfaces/IEventStream.js +3 -0
  80. package/dist/cjs/interfaces/IEventStream.js.map +1 -0
  81. package/dist/cjs/interfaces/IIdentifierProvider.js +9 -0
  82. package/dist/cjs/interfaces/IIdentifierProvider.js.map +1 -0
  83. package/dist/cjs/interfaces/ILocker.js +9 -0
  84. package/dist/cjs/interfaces/ILocker.js.map +1 -0
  85. package/dist/cjs/interfaces/ILogger.js +3 -0
  86. package/dist/cjs/interfaces/ILogger.js.map +1 -0
  87. package/dist/cjs/interfaces/IMessage.js +10 -0
  88. package/dist/cjs/interfaces/IMessage.js.map +1 -0
  89. package/dist/cjs/interfaces/IMutableState.js +3 -0
  90. package/dist/cjs/interfaces/IMutableState.js.map +1 -0
  91. package/dist/cjs/interfaces/IObjectStorage.js +3 -0
  92. package/dist/cjs/interfaces/IObjectStorage.js.map +1 -0
  93. package/dist/cjs/interfaces/IObservable.js +11 -0
  94. package/dist/cjs/interfaces/IObservable.js.map +1 -0
  95. package/dist/cjs/interfaces/IObservableQueueProvider.js +9 -0
  96. package/dist/cjs/interfaces/IObservableQueueProvider.js.map +1 -0
  97. package/dist/cjs/interfaces/IObserver.js +3 -0
  98. package/dist/cjs/interfaces/IObserver.js.map +1 -0
  99. package/dist/cjs/interfaces/IProjection.js +3 -0
  100. package/dist/cjs/interfaces/IProjection.js.map +1 -0
  101. package/dist/cjs/interfaces/ISaga.js +3 -0
  102. package/dist/cjs/interfaces/ISaga.js.map +1 -0
  103. package/dist/cjs/interfaces/ISnapshotEvent.js +10 -0
  104. package/dist/cjs/interfaces/ISnapshotEvent.js.map +1 -0
  105. package/dist/cjs/interfaces/IViewLocker.js +21 -0
  106. package/dist/cjs/interfaces/IViewLocker.js.map +1 -0
  107. package/dist/cjs/interfaces/Identifier.js +3 -0
  108. package/dist/cjs/interfaces/Identifier.js.map +1 -0
  109. package/dist/cjs/interfaces/index.js +46 -0
  110. package/dist/cjs/interfaces/index.js.map +1 -0
  111. package/dist/cjs/interfaces/isObject.js +9 -0
  112. package/dist/cjs/interfaces/isObject.js.map +1 -0
  113. package/dist/cjs/package.json +3 -0
  114. package/dist/cjs/rabbitmq/IContainer.js +3 -0
  115. package/dist/cjs/rabbitmq/IContainer.js.map +1 -0
  116. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js +84 -0
  117. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js.map +1 -0
  118. package/dist/cjs/rabbitmq/RabbitMqEventBus.js +121 -0
  119. package/dist/cjs/rabbitmq/RabbitMqEventBus.js.map +1 -0
  120. package/dist/cjs/rabbitmq/RabbitMqGateway.js +578 -0
  121. package/dist/cjs/rabbitmq/RabbitMqGateway.js.map +1 -0
  122. package/dist/cjs/rabbitmq/index.js +21 -0
  123. package/dist/cjs/rabbitmq/index.js.map +1 -0
  124. package/dist/cjs/rabbitmq/utils/index.js +19 -0
  125. package/dist/cjs/rabbitmq/utils/index.js.map +1 -0
  126. package/dist/cjs/rabbitmq/utils/registerExitCleanup.js +28 -0
  127. package/dist/cjs/rabbitmq/utils/registerExitCleanup.js.map +1 -0
  128. package/dist/cjs/rabbitmq/utils/resolveProvider.js +9 -0
  129. package/dist/cjs/rabbitmq/utils/resolveProvider.js.map +1 -0
  130. package/dist/cjs/sqlite/AbstractSqliteAccessor.js +50 -0
  131. package/dist/cjs/sqlite/AbstractSqliteAccessor.js.map +1 -0
  132. package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js +26 -0
  133. package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  134. package/dist/cjs/sqlite/AbstractSqliteView.js +50 -0
  135. package/dist/cjs/sqlite/AbstractSqliteView.js.map +1 -0
  136. package/dist/cjs/sqlite/IContainer.js +3 -0
  137. package/dist/cjs/sqlite/IContainer.js.map +1 -0
  138. package/dist/cjs/sqlite/SqliteEventLocker.js +93 -0
  139. package/dist/cjs/sqlite/SqliteEventLocker.js.map +1 -0
  140. package/dist/cjs/sqlite/SqliteObjectStorage.js +114 -0
  141. package/dist/cjs/sqlite/SqliteObjectStorage.js.map +1 -0
  142. package/dist/cjs/sqlite/SqliteObjectView.js +48 -0
  143. package/dist/cjs/sqlite/SqliteObjectView.js.map +1 -0
  144. package/dist/cjs/sqlite/SqliteProjectionDataParams.js +3 -0
  145. package/dist/cjs/sqlite/SqliteProjectionDataParams.js.map +1 -0
  146. package/dist/cjs/sqlite/SqliteViewLocker.js +119 -0
  147. package/dist/cjs/sqlite/SqliteViewLocker.js.map +1 -0
  148. package/dist/cjs/sqlite/index.js +26 -0
  149. package/dist/cjs/sqlite/index.js.map +1 -0
  150. package/dist/cjs/sqlite/queries/eventLockTableInit.js +15 -0
  151. package/dist/cjs/sqlite/queries/eventLockTableInit.js.map +1 -0
  152. package/dist/cjs/sqlite/queries/index.js +19 -0
  153. package/dist/cjs/sqlite/queries/index.js.map +1 -0
  154. package/dist/cjs/sqlite/queries/viewLockTableInit.js +14 -0
  155. package/dist/cjs/sqlite/queries/viewLockTableInit.js.map +1 -0
  156. package/dist/cjs/sqlite/utils/getEventId.js +14 -0
  157. package/dist/cjs/sqlite/utils/getEventId.js.map +1 -0
  158. package/dist/cjs/sqlite/utils/guid.js +9 -0
  159. package/dist/cjs/sqlite/utils/guid.js.map +1 -0
  160. package/dist/cjs/sqlite/utils/index.js +19 -0
  161. package/dist/cjs/sqlite/utils/index.js.map +1 -0
  162. package/dist/cjs/utils/Deferred.js +38 -0
  163. package/dist/cjs/utils/Deferred.js.map +1 -0
  164. package/dist/cjs/utils/Lock.js +102 -0
  165. package/dist/cjs/utils/Lock.js.map +1 -0
  166. package/dist/cjs/utils/MapAssertable.js +30 -0
  167. package/dist/cjs/utils/MapAssertable.js.map +1 -0
  168. package/dist/cjs/utils/assert.js +88 -0
  169. package/dist/cjs/utils/assert.js.map +1 -0
  170. package/dist/cjs/utils/clone.js +13 -0
  171. package/dist/cjs/utils/clone.js.map +1 -0
  172. package/dist/cjs/utils/extractErrorDetails.js +37 -0
  173. package/dist/cjs/utils/extractErrorDetails.js.map +1 -0
  174. package/dist/cjs/utils/getClassName.js +10 -0
  175. package/dist/cjs/utils/getClassName.js.map +1 -0
  176. package/dist/cjs/utils/getHandler.js +18 -0
  177. package/dist/cjs/utils/getHandler.js.map +1 -0
  178. package/dist/cjs/utils/getMessageHandlerNames.js +30 -0
  179. package/dist/cjs/utils/getMessageHandlerNames.js.map +1 -0
  180. package/dist/cjs/utils/index.js +31 -0
  181. package/dist/cjs/utils/index.js.map +1 -0
  182. package/dist/cjs/utils/isClass.js +8 -0
  183. package/dist/cjs/utils/isClass.js.map +1 -0
  184. package/dist/cjs/utils/sagaId.js +23 -0
  185. package/dist/cjs/utils/sagaId.js.map +1 -0
  186. package/dist/cjs/utils/setupOneTimeEmitterSubscription.js +45 -0
  187. package/dist/cjs/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  188. package/dist/cjs/utils/subscribe.js +43 -0
  189. package/dist/cjs/utils/subscribe.js.map +1 -0
  190. package/dist/cjs/utils/validateHandlers.js +21 -0
  191. package/dist/cjs/utils/validateHandlers.js.map +1 -0
  192. package/dist/cjs/workers/AbstractWorkerProjection.js +56 -0
  193. package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -0
  194. package/dist/cjs/workers/WorkerProxyProjection.js +142 -0
  195. package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -0
  196. package/dist/cjs/workers/index.js +20 -0
  197. package/dist/cjs/workers/index.js.map +1 -0
  198. package/dist/cjs/workers/interfaces/IProxyProjection.js +3 -0
  199. package/dist/cjs/workers/interfaces/IProxyProjection.js.map +1 -0
  200. package/dist/cjs/workers/interfaces/IWorkerProjection.js +3 -0
  201. package/dist/cjs/workers/interfaces/IWorkerProjection.js.map +1 -0
  202. package/dist/cjs/workers/interfaces/index.js +3 -0
  203. package/dist/cjs/workers/interfaces/index.js.map +1 -0
  204. package/dist/cjs/workers/protocol.js +16 -0
  205. package/dist/cjs/workers/protocol.js.map +1 -0
  206. package/dist/cjs/workers/utils/ProjectionView.js +3 -0
  207. package/dist/cjs/workers/utils/ProjectionView.js.map +1 -0
  208. package/dist/cjs/workers/utils/createWorker.js +87 -0
  209. package/dist/cjs/workers/utils/createWorker.js.map +1 -0
  210. package/dist/cjs/workers/utils/createWorkerInstance.js +59 -0
  211. package/dist/cjs/workers/utils/createWorkerInstance.js.map +1 -0
  212. package/dist/cjs/workers/utils/index.js +21 -0
  213. package/dist/cjs/workers/utils/index.js.map +1 -0
  214. package/dist/cjs/workers/utils/nodeEndpoint.js +8 -0
  215. package/dist/cjs/workers/utils/nodeEndpoint.js.map +1 -0
  216. package/dist/cjs/workers/utils/workerProxyFactory.js +21 -0
  217. package/dist/cjs/workers/utils/workerProxyFactory.js.map +1 -0
  218. package/dist/esm/AbstractAggregate.js +189 -0
  219. package/dist/esm/AbstractAggregate.js.map +1 -0
  220. package/dist/esm/AbstractProjection.js +161 -0
  221. package/dist/esm/AbstractProjection.js.map +1 -0
  222. package/dist/esm/AbstractSaga.js +105 -0
  223. package/dist/esm/AbstractSaga.js.map +1 -0
  224. package/dist/esm/AggregateCommandHandler.js +178 -0
  225. package/dist/esm/AggregateCommandHandler.js.map +1 -0
  226. package/dist/esm/CommandBus.js +5 -0
  227. package/dist/esm/CommandBus.js.map +1 -0
  228. package/dist/esm/CqrsContainerBuilder.js +93 -0
  229. package/dist/esm/CqrsContainerBuilder.js.map +1 -0
  230. package/dist/esm/Event.js +15 -0
  231. package/dist/esm/Event.js.map +1 -0
  232. package/dist/esm/EventDispatchPipeline.js +79 -0
  233. package/dist/esm/EventDispatchPipeline.js.map +1 -0
  234. package/dist/esm/EventDispatcher.js +89 -0
  235. package/dist/esm/EventDispatcher.js.map +1 -0
  236. package/dist/esm/EventIdAugmentor.js +26 -0
  237. package/dist/esm/EventIdAugmentor.js.map +1 -0
  238. package/dist/esm/EventStore.js +102 -0
  239. package/dist/esm/EventStore.js.map +1 -0
  240. package/dist/esm/SagaEventHandler.js +116 -0
  241. package/dist/esm/SagaEventHandler.js.map +1 -0
  242. package/dist/esm/errors/ConcurrencyError.js +17 -0
  243. package/dist/esm/errors/ConcurrencyError.js.map +1 -0
  244. package/dist/esm/errors/index.js +2 -0
  245. package/dist/esm/errors/index.js.map +1 -0
  246. package/dist/esm/in-memory/InMemoryEventStorage.js +102 -0
  247. package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -0
  248. package/dist/esm/in-memory/InMemoryLock.js +40 -0
  249. package/dist/esm/in-memory/InMemoryLock.js.map +1 -0
  250. package/dist/esm/in-memory/InMemoryMessageBus.js +89 -0
  251. package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -0
  252. package/dist/esm/in-memory/InMemorySnapshotStorage.js +64 -0
  253. package/dist/esm/in-memory/InMemorySnapshotStorage.js.map +1 -0
  254. package/dist/esm/in-memory/InMemoryView.js +150 -0
  255. package/dist/esm/in-memory/InMemoryView.js.map +1 -0
  256. package/dist/esm/in-memory/index.js +6 -0
  257. package/dist/esm/in-memory/index.js.map +1 -0
  258. package/dist/esm/in-memory/utils/index.js +2 -0
  259. package/dist/esm/in-memory/utils/index.js.map +1 -0
  260. package/dist/esm/in-memory/utils/nextCycle.js +5 -0
  261. package/dist/esm/in-memory/utils/nextCycle.js.map +1 -0
  262. package/dist/esm/index.js +16 -0
  263. package/dist/esm/index.js.map +1 -0
  264. package/dist/esm/interfaces/IAggregate.js +2 -0
  265. package/dist/esm/interfaces/IAggregate.js.map +1 -0
  266. package/dist/esm/interfaces/IAggregateSnapshotStorage.js +9 -0
  267. package/dist/esm/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  268. package/dist/esm/interfaces/ICommand.js +2 -0
  269. package/dist/esm/interfaces/ICommand.js.map +1 -0
  270. package/dist/esm/interfaces/ICommandBus.js +2 -0
  271. package/dist/esm/interfaces/ICommandBus.js.map +1 -0
  272. package/dist/esm/interfaces/IContainer.js +2 -0
  273. package/dist/esm/interfaces/IContainer.js.map +1 -0
  274. package/dist/esm/interfaces/IDispatchPipelineProcessor.js +5 -0
  275. package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  276. package/dist/esm/interfaces/IEvent.js +6 -0
  277. package/dist/esm/interfaces/IEvent.js.map +1 -0
  278. package/dist/esm/interfaces/IEventBus.js +5 -0
  279. package/dist/esm/interfaces/IEventBus.js.map +1 -0
  280. package/dist/esm/interfaces/IEventDispatcher.js +2 -0
  281. package/dist/esm/interfaces/IEventDispatcher.js.map +1 -0
  282. package/dist/esm/interfaces/IEventLocker.js +11 -0
  283. package/dist/esm/interfaces/IEventLocker.js.map +1 -0
  284. package/dist/esm/interfaces/IEventReceptor.js +2 -0
  285. package/dist/esm/interfaces/IEventReceptor.js.map +1 -0
  286. package/dist/esm/interfaces/IEventSet.js +4 -0
  287. package/dist/esm/interfaces/IEventSet.js.map +1 -0
  288. package/dist/esm/interfaces/IEventStorageReader.js +9 -0
  289. package/dist/esm/interfaces/IEventStorageReader.js.map +1 -0
  290. package/dist/esm/interfaces/IEventStore.js +2 -0
  291. package/dist/esm/interfaces/IEventStore.js.map +1 -0
  292. package/dist/esm/interfaces/IEventStream.js +2 -0
  293. package/dist/esm/interfaces/IEventStream.js.map +1 -0
  294. package/dist/esm/interfaces/IIdentifierProvider.js +5 -0
  295. package/dist/esm/interfaces/IIdentifierProvider.js.map +1 -0
  296. package/dist/esm/interfaces/ILocker.js +5 -0
  297. package/dist/esm/interfaces/ILocker.js.map +1 -0
  298. package/dist/esm/interfaces/ILogger.js +2 -0
  299. package/dist/esm/interfaces/ILogger.js.map +1 -0
  300. package/dist/esm/interfaces/IMessage.js +6 -0
  301. package/dist/esm/interfaces/IMessage.js.map +1 -0
  302. package/dist/esm/interfaces/IMutableState.js +2 -0
  303. package/dist/esm/interfaces/IMutableState.js.map +1 -0
  304. package/dist/esm/interfaces/IObjectStorage.js +2 -0
  305. package/dist/esm/interfaces/IObjectStorage.js.map +1 -0
  306. package/dist/esm/interfaces/IObservable.js +7 -0
  307. package/dist/esm/interfaces/IObservable.js.map +1 -0
  308. package/dist/esm/interfaces/IObservableQueueProvider.js +5 -0
  309. package/dist/esm/interfaces/IObservableQueueProvider.js.map +1 -0
  310. package/dist/esm/interfaces/IObserver.js +2 -0
  311. package/dist/esm/interfaces/IObserver.js.map +1 -0
  312. package/dist/esm/interfaces/IProjection.js +2 -0
  313. package/dist/esm/interfaces/IProjection.js.map +1 -0
  314. package/dist/esm/interfaces/ISaga.js +2 -0
  315. package/dist/esm/interfaces/ISaga.js.map +1 -0
  316. package/dist/esm/interfaces/ISnapshotEvent.js +6 -0
  317. package/dist/esm/interfaces/ISnapshotEvent.js.map +1 -0
  318. package/dist/esm/interfaces/IViewLocker.js +17 -0
  319. package/dist/esm/interfaces/IViewLocker.js.map +1 -0
  320. package/dist/esm/interfaces/Identifier.js +2 -0
  321. package/dist/esm/interfaces/Identifier.js.map +1 -0
  322. package/dist/esm/interfaces/index.js +30 -0
  323. package/dist/esm/interfaces/index.js.map +1 -0
  324. package/dist/esm/interfaces/isObject.js +5 -0
  325. package/dist/esm/interfaces/isObject.js.map +1 -0
  326. package/dist/esm/rabbitmq/IContainer.js +2 -0
  327. package/dist/esm/rabbitmq/IContainer.js.map +1 -0
  328. package/dist/esm/rabbitmq/RabbitMqCommandBus.js +80 -0
  329. package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -0
  330. package/dist/esm/rabbitmq/RabbitMqEventBus.js +117 -0
  331. package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -0
  332. package/dist/esm/rabbitmq/RabbitMqGateway.js +541 -0
  333. package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -0
  334. package/dist/esm/rabbitmq/index.js +5 -0
  335. package/dist/esm/rabbitmq/index.js.map +1 -0
  336. package/dist/esm/rabbitmq/utils/index.js +3 -0
  337. package/dist/esm/rabbitmq/utils/index.js.map +1 -0
  338. package/dist/esm/rabbitmq/utils/registerExitCleanup.js +24 -0
  339. package/dist/esm/rabbitmq/utils/registerExitCleanup.js.map +1 -0
  340. package/dist/esm/rabbitmq/utils/resolveProvider.js +6 -0
  341. package/dist/esm/rabbitmq/utils/resolveProvider.js.map +1 -0
  342. package/dist/esm/sqlite/AbstractSqliteAccessor.js +46 -0
  343. package/dist/esm/sqlite/AbstractSqliteAccessor.js.map +1 -0
  344. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js +22 -0
  345. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  346. package/dist/esm/sqlite/AbstractSqliteView.js +46 -0
  347. package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -0
  348. package/dist/esm/sqlite/IContainer.js +2 -0
  349. package/dist/esm/sqlite/IContainer.js.map +1 -0
  350. package/dist/esm/sqlite/SqliteEventLocker.js +89 -0
  351. package/dist/esm/sqlite/SqliteEventLocker.js.map +1 -0
  352. package/dist/esm/sqlite/SqliteObjectStorage.js +110 -0
  353. package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -0
  354. package/dist/esm/sqlite/SqliteObjectView.js +44 -0
  355. package/dist/esm/sqlite/SqliteObjectView.js.map +1 -0
  356. package/dist/esm/sqlite/SqliteProjectionDataParams.js +2 -0
  357. package/dist/esm/sqlite/SqliteProjectionDataParams.js.map +1 -0
  358. package/dist/esm/sqlite/SqliteViewLocker.js +115 -0
  359. package/dist/esm/sqlite/SqliteViewLocker.js.map +1 -0
  360. package/dist/esm/sqlite/index.js +10 -0
  361. package/dist/esm/sqlite/index.js.map +1 -0
  362. package/dist/esm/sqlite/queries/eventLockTableInit.js +11 -0
  363. package/dist/esm/sqlite/queries/eventLockTableInit.js.map +1 -0
  364. package/dist/esm/sqlite/queries/index.js +3 -0
  365. package/dist/esm/sqlite/queries/index.js.map +1 -0
  366. package/dist/esm/sqlite/queries/viewLockTableInit.js +10 -0
  367. package/dist/esm/sqlite/queries/viewLockTableInit.js.map +1 -0
  368. package/dist/esm/sqlite/utils/getEventId.js +7 -0
  369. package/dist/esm/sqlite/utils/getEventId.js.map +1 -0
  370. package/dist/esm/sqlite/utils/guid.js +5 -0
  371. package/dist/esm/sqlite/utils/guid.js.map +1 -0
  372. package/dist/esm/sqlite/utils/index.js +3 -0
  373. package/dist/esm/sqlite/utils/index.js.map +1 -0
  374. package/dist/esm/utils/Deferred.js +34 -0
  375. package/dist/esm/utils/Deferred.js.map +1 -0
  376. package/dist/esm/utils/Lock.js +97 -0
  377. package/dist/esm/utils/Lock.js.map +1 -0
  378. package/dist/esm/utils/MapAssertable.js +26 -0
  379. package/dist/esm/utils/MapAssertable.js.map +1 -0
  380. package/dist/esm/utils/assert.js +70 -0
  381. package/dist/esm/utils/assert.js.map +1 -0
  382. package/dist/esm/utils/clone.js +10 -0
  383. package/dist/esm/utils/clone.js.map +1 -0
  384. package/dist/esm/utils/extractErrorDetails.js +33 -0
  385. package/dist/esm/utils/extractErrorDetails.js.map +1 -0
  386. package/dist/esm/utils/getClassName.js +7 -0
  387. package/dist/esm/utils/getClassName.js.map +1 -0
  388. package/dist/esm/utils/getHandler.js +15 -0
  389. package/dist/esm/utils/getHandler.js.map +1 -0
  390. package/dist/esm/utils/getMessageHandlerNames.js +27 -0
  391. package/dist/esm/utils/getMessageHandlerNames.js.map +1 -0
  392. package/dist/esm/utils/index.js +15 -0
  393. package/dist/esm/utils/index.js.map +1 -0
  394. package/dist/esm/utils/isClass.js +5 -0
  395. package/dist/esm/utils/isClass.js.map +1 -0
  396. package/dist/esm/utils/sagaId.js +18 -0
  397. package/dist/esm/utils/sagaId.js.map +1 -0
  398. package/dist/esm/utils/setupOneTimeEmitterSubscription.js +42 -0
  399. package/dist/esm/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  400. package/dist/esm/utils/subscribe.js +40 -0
  401. package/dist/esm/utils/subscribe.js.map +1 -0
  402. package/dist/esm/utils/validateHandlers.js +18 -0
  403. package/dist/esm/utils/validateHandlers.js.map +1 -0
  404. package/dist/esm/workers/AbstractWorkerProjection.js +52 -0
  405. package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -0
  406. package/dist/esm/workers/WorkerProxyProjection.js +105 -0
  407. package/dist/esm/workers/WorkerProxyProjection.js.map +1 -0
  408. package/dist/esm/workers/index.js +4 -0
  409. package/dist/esm/workers/index.js.map +1 -0
  410. package/dist/esm/workers/interfaces/IProxyProjection.js +2 -0
  411. package/dist/esm/workers/interfaces/IProxyProjection.js.map +1 -0
  412. package/dist/esm/workers/interfaces/IWorkerProjection.js +2 -0
  413. package/dist/esm/workers/interfaces/IWorkerProjection.js.map +1 -0
  414. package/dist/esm/workers/interfaces/index.js +2 -0
  415. package/dist/esm/workers/interfaces/index.js.map +1 -0
  416. package/dist/esm/workers/protocol.js +11 -0
  417. package/dist/esm/workers/protocol.js.map +1 -0
  418. package/dist/esm/workers/utils/ProjectionView.js +2 -0
  419. package/dist/esm/workers/utils/ProjectionView.js.map +1 -0
  420. package/dist/esm/workers/utils/createWorker.js +51 -0
  421. package/dist/esm/workers/utils/createWorker.js.map +1 -0
  422. package/dist/esm/workers/utils/createWorkerInstance.js +23 -0
  423. package/dist/esm/workers/utils/createWorkerInstance.js.map +1 -0
  424. package/dist/esm/workers/utils/index.js +5 -0
  425. package/dist/esm/workers/utils/index.js.map +1 -0
  426. package/dist/esm/workers/utils/nodeEndpoint.js +5 -0
  427. package/dist/esm/workers/utils/nodeEndpoint.js.map +1 -0
  428. package/dist/esm/workers/utils/workerProxyFactory.js +18 -0
  429. package/dist/esm/workers/utils/workerProxyFactory.js.map +1 -0
  430. package/dist/types/AbstractAggregate.d.ts +80 -0
  431. package/dist/types/AbstractProjection.d.ts +77 -0
  432. package/dist/types/AbstractSaga.d.ts +42 -0
  433. package/dist/types/AggregateCommandHandler.d.ts +22 -0
  434. package/dist/types/CommandBus.d.ts +4 -0
  435. package/dist/types/CqrsContainerBuilder.d.ts +21 -0
  436. package/dist/types/Event.d.ts +9 -0
  437. package/dist/types/EventDispatchPipeline.d.ts +16 -0
  438. package/dist/types/EventDispatcher.d.ts +39 -0
  439. package/dist/types/EventIdAugmentor.d.ts +12 -0
  440. package/dist/types/EventStore.d.ts +29 -0
  441. package/dist/types/SagaEventHandler.d.ts +22 -0
  442. package/dist/types/errors/ConcurrencyError.d.ts +9 -0
  443. package/dist/types/errors/index.d.ts +1 -0
  444. package/dist/types/in-memory/InMemoryEventStorage.d.ts +24 -0
  445. package/dist/types/in-memory/InMemoryLock.d.ts +23 -0
  446. package/dist/types/in-memory/InMemoryMessageBus.d.ts +45 -0
  447. package/dist/types/in-memory/InMemorySnapshotStorage.d.ts +37 -0
  448. package/dist/types/in-memory/InMemoryView.d.ts +53 -0
  449. package/dist/types/in-memory/index.d.ts +5 -0
  450. package/dist/types/in-memory/utils/index.d.ts +1 -0
  451. package/dist/types/in-memory/utils/nextCycle.d.ts +4 -0
  452. package/dist/types/index.d.ts +15 -0
  453. package/dist/types/interfaces/IAggregate.d.ts +78 -0
  454. package/dist/types/interfaces/IAggregateSnapshotStorage.d.ts +8 -0
  455. package/dist/types/interfaces/ICommand.d.ts +2 -0
  456. package/dist/types/interfaces/ICommandBus.d.ts +15 -0
  457. package/dist/types/interfaces/IContainer.d.ts +37 -0
  458. package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +29 -0
  459. package/dist/types/interfaces/IEvent.d.ts +7 -0
  460. package/dist/types/interfaces/IEventBus.d.ts +6 -0
  461. package/dist/types/interfaces/IEventDispatcher.d.ts +6 -0
  462. package/dist/types/interfaces/IEventLocker.d.ts +28 -0
  463. package/dist/types/interfaces/IEventReceptor.d.ts +5 -0
  464. package/dist/types/interfaces/IEventSet.d.ts +3 -0
  465. package/dist/types/interfaces/IEventStorageReader.d.ts +48 -0
  466. package/dist/types/interfaces/IEventStore.d.ts +9 -0
  467. package/dist/types/interfaces/IEventStream.d.ts +2 -0
  468. package/dist/types/interfaces/IIdentifierProvider.d.ts +10 -0
  469. package/dist/types/interfaces/ILocker.d.ts +8 -0
  470. package/dist/types/interfaces/ILogger.d.ts +22 -0
  471. package/dist/types/interfaces/IMessage.d.ts +23 -0
  472. package/dist/types/interfaces/IMutableState.d.ts +14 -0
  473. package/dist/types/interfaces/IObjectStorage.d.ts +8 -0
  474. package/dist/types/interfaces/IObservable.d.ts +15 -0
  475. package/dist/types/interfaces/IObservableQueueProvider.d.ts +8 -0
  476. package/dist/types/interfaces/IObserver.d.ts +4 -0
  477. package/dist/types/interfaces/IProjection.d.ts +17 -0
  478. package/dist/types/interfaces/ISaga.d.ts +38 -0
  479. package/dist/types/interfaces/ISnapshotEvent.d.ts +7 -0
  480. package/dist/types/interfaces/IViewLocker.d.ts +34 -0
  481. package/dist/types/interfaces/Identifier.d.ts +1 -0
  482. package/dist/types/interfaces/index.d.ts +29 -0
  483. package/dist/types/interfaces/isObject.d.ts +1 -0
  484. package/dist/types/rabbitmq/IContainer.d.ts +19 -0
  485. package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +38 -0
  486. package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +44 -0
  487. package/dist/types/rabbitmq/RabbitMqGateway.d.ts +133 -0
  488. package/dist/types/rabbitmq/index.d.ts +4 -0
  489. package/dist/types/rabbitmq/utils/index.d.ts +2 -0
  490. package/dist/types/rabbitmq/utils/registerExitCleanup.d.ts +10 -0
  491. package/dist/types/rabbitmq/utils/resolveProvider.d.ts +3 -0
  492. package/dist/types/sqlite/AbstractSqliteAccessor.d.ts +25 -0
  493. package/dist/types/sqlite/AbstractSqliteObjectProjection.d.ts +8 -0
  494. package/dist/types/sqlite/AbstractSqliteView.d.ts +23 -0
  495. package/dist/types/sqlite/IContainer.d.ts +7 -0
  496. package/dist/types/sqlite/SqliteEventLocker.d.ts +30 -0
  497. package/dist/types/sqlite/SqliteObjectStorage.d.ts +17 -0
  498. package/dist/types/sqlite/SqliteObjectView.d.ts +19 -0
  499. package/dist/types/sqlite/SqliteProjectionDataParams.d.ts +14 -0
  500. package/dist/types/sqlite/SqliteViewLocker.d.ts +31 -0
  501. package/dist/types/sqlite/index.d.ts +9 -0
  502. package/dist/types/sqlite/queries/eventLockTableInit.d.ts +1 -0
  503. package/dist/types/sqlite/queries/index.d.ts +2 -0
  504. package/dist/types/sqlite/queries/viewLockTableInit.d.ts +1 -0
  505. package/dist/types/sqlite/utils/getEventId.d.ts +5 -0
  506. package/dist/types/sqlite/utils/guid.d.ts +4 -0
  507. package/dist/types/sqlite/utils/index.d.ts +2 -0
  508. package/dist/types/utils/Deferred.d.ts +13 -0
  509. package/dist/types/utils/Lock.d.ts +30 -0
  510. package/dist/types/utils/MapAssertable.d.ts +11 -0
  511. package/dist/types/utils/assert.d.ts +20 -0
  512. package/dist/types/utils/clone.d.ts +1 -0
  513. package/dist/types/utils/extractErrorDetails.d.ts +8 -0
  514. package/dist/types/utils/getClassName.d.ts +4 -0
  515. package/dist/types/utils/getHandler.d.ts +7 -0
  516. package/dist/types/utils/getMessageHandlerNames.d.ts +12 -0
  517. package/dist/types/utils/index.d.ts +14 -0
  518. package/dist/types/utils/isClass.d.ts +1 -0
  519. package/dist/types/utils/sagaId.d.ts +6 -0
  520. package/dist/types/utils/setupOneTimeEmitterSubscription.d.ts +12 -0
  521. package/dist/types/utils/subscribe.d.ts +9 -0
  522. package/dist/types/utils/validateHandlers.d.ts +4 -0
  523. package/dist/types/workers/AbstractWorkerProjection.d.ts +25 -0
  524. package/dist/types/workers/WorkerProxyProjection.d.ts +25 -0
  525. package/dist/types/workers/index.d.ts +3 -0
  526. package/dist/types/workers/interfaces/IProxyProjection.d.ts +15 -0
  527. package/dist/types/workers/interfaces/IWorkerProjection.d.ts +19 -0
  528. package/dist/types/workers/interfaces/index.d.ts +2 -0
  529. package/dist/types/workers/protocol.d.ts +10 -0
  530. package/dist/types/workers/utils/ProjectionView.d.ts +2 -0
  531. package/dist/types/workers/utils/createWorker.d.ts +10 -0
  532. package/dist/types/workers/utils/createWorkerInstance.d.ts +11 -0
  533. package/dist/types/workers/utils/index.d.ts +5 -0
  534. package/dist/types/workers/utils/nodeEndpoint.d.ts +2 -0
  535. package/dist/types/workers/utils/workerProxyFactory.d.ts +14 -0
  536. package/package.json +129 -29
  537. package/jsconfig.json +0 -15
  538. package/src/AbstractAggregate.js +0 -277
  539. package/src/AbstractProjection.js +0 -192
  540. package/src/AbstractSaga.js +0 -171
  541. package/src/AggregateCommandHandler.js +0 -126
  542. package/src/CommandBus.js +0 -91
  543. package/src/CqrsContainerBuilder.js +0 -131
  544. package/src/EventStore.js +0 -457
  545. package/src/EventStream.js +0 -63
  546. package/src/SagaEventHandler.js +0 -141
  547. package/src/index.js +0 -21
  548. package/src/infrastructure/InMemoryEventStorage.js +0 -76
  549. package/src/infrastructure/InMemoryMessageBus.js +0 -132
  550. package/src/infrastructure/InMemorySnapshotStorage.js +0 -40
  551. package/src/infrastructure/InMemoryView.js +0 -265
  552. package/src/subscribe.js +0 -48
  553. package/src/utils/getClassName.js +0 -11
  554. package/src/utils/getHandledMessageTypes.js +0 -24
  555. package/src/utils/getHandler.js +0 -21
  556. package/src/utils/getMessageHandlerNames.js +0 -51
  557. package/src/utils/index.js +0 -6
  558. package/src/utils/isClass.js +0 -6
  559. package/src/utils/nullLogger.js +0 -8
  560. package/src/utils/validateHandlers.js +0 -25
  561. package/types/index.d.ts +0 -16
  562. package/types/interfaces/IAggregate.d.ts +0 -30
  563. package/types/interfaces/IAggregateSnapshotStorage.d.ts +0 -4
  564. package/types/interfaces/ICommandBus.d.ts +0 -6
  565. package/types/interfaces/ICommandHandler.d.ts +0 -3
  566. package/types/interfaces/IConcurrentView.d.ts +0 -22
  567. package/types/interfaces/IEventReceptor.d.ts +0 -3
  568. package/types/interfaces/IEventStorage.d.ts +0 -20
  569. package/types/interfaces/IEventStore.d.ts +0 -18
  570. package/types/interfaces/IEventStream.d.ts +0 -13
  571. package/types/interfaces/ILogger.d.ts +0 -3
  572. package/types/interfaces/IMessageBus.d.ts +0 -5
  573. package/types/interfaces/IObserver.d.ts +0 -11
  574. package/types/interfaces/IProjection.d.ts +0 -10
  575. package/types/interfaces/ISaga.d.ts +0 -27
  576. package/types/interfaces/Identifier.d.ts +0 -1
@@ -0,0 +1,14 @@
1
+ export type SqliteProjectionDataParams = {
2
+ /**
3
+ * Unique identifier for the projection, used with the schema version to distinguish data ownership.
4
+ */
5
+ projectionName: string;
6
+ /**
7
+ * The version of the schema used for data produced by the projection.
8
+ * When the projection's output format changes, this version should be incremented.
9
+ * A version change indicates that previously stored data is obsolete and must be rebuilt.
10
+ *
11
+ * @example "20250519", "1.0.0"
12
+ */
13
+ schemaVersion: string;
14
+ };
@@ -0,0 +1,31 @@
1
+ import type { Database } from 'better-sqlite3';
2
+ import type { IContainer } from 'node-cqrs';
3
+ import type { IViewLocker } from '../interfaces/index.ts';
4
+ import type { SqliteProjectionDataParams } from './SqliteProjectionDataParams.ts';
5
+ import { AbstractSqliteAccessor } from './AbstractSqliteAccessor.ts';
6
+ export type SqliteViewLockerParams = SqliteProjectionDataParams & {
7
+ /**
8
+ * (Optional) SQLite table name where event locks along with the latest event are stored
9
+ *
10
+ * @default "tbl_view_lock"
11
+ */
12
+ viewLockTableName?: string;
13
+ /**
14
+ * (Optional) Time-to-live (TTL) duration (in milliseconds) for which a view remains locked
15
+ *
16
+ * @default 120_000
17
+ */
18
+ viewLockTtl?: number;
19
+ };
20
+ export declare class SqliteViewLocker extends AbstractSqliteAccessor implements IViewLocker {
21
+ #private;
22
+ constructor(o: Partial<Pick<IContainer, 'viewModelSqliteDb' | 'viewModelSqliteDbFactory' | 'logger'>> & SqliteViewLockerParams);
23
+ protected initialize(db: Database): void;
24
+ get ready(): boolean;
25
+ lock(): Promise<boolean>;
26
+ private scheduleLockProlongation;
27
+ private cancelLockProlongation;
28
+ private prolongLock;
29
+ unlock(): Promise<void>;
30
+ once(event: 'ready'): Promise<void>;
31
+ }
@@ -0,0 +1,9 @@
1
+ import './IContainer.ts';
2
+ export * from './AbstractSqliteAccessor.ts';
3
+ export * from './AbstractSqliteObjectProjection.ts';
4
+ export * from './AbstractSqliteView.ts';
5
+ export * from './SqliteEventLocker.ts';
6
+ export * from './SqliteObjectStorage.ts';
7
+ export * from './SqliteObjectView.ts';
8
+ export * from './SqliteViewLocker.ts';
9
+ export * from './utils/index.ts';
@@ -0,0 +1 @@
1
+ export declare const eventLockTableInit: (eventLockTableName: string) => string;
@@ -0,0 +1,2 @@
1
+ export * from './eventLockTableInit.ts';
2
+ export * from './viewLockTableInit.ts';
@@ -0,0 +1 @@
1
+ export declare const viewLockTableInit: (viewLockTableName: string) => string;
@@ -0,0 +1,5 @@
1
+ import { IEvent } from '../../interfaces/index.ts';
2
+ /**
3
+ * Get assigned or generate new event ID from event content
4
+ */
5
+ export declare const getEventId: (event: IEvent) => Buffer;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Convert Guid to Buffer for storing in Sqlite BLOB
3
+ */
4
+ export declare const guid: (str: string) => Buffer<ArrayBuffer>;
@@ -0,0 +1,2 @@
1
+ export * from './guid.ts';
2
+ export * from './getEventId.ts';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Deferred promise that must be resolved from outside
3
+ */
4
+ export declare class Deferred<TDeferredValue> {
5
+ #private;
6
+ readonly promise: Promise<TDeferredValue | void>;
7
+ get resolved(): boolean;
8
+ get rejected(): boolean;
9
+ get settled(): boolean;
10
+ constructor();
11
+ resolve(value?: TDeferredValue): void;
12
+ reject(reason?: any): void;
13
+ }
@@ -0,0 +1,30 @@
1
+ import type { ILocker, ILockerLease } from '../interfaces/ILocker.ts';
2
+ export declare class LockLease implements ILockerLease {
3
+ readonly lock: Lock;
4
+ readonly name?: string;
5
+ constructor(lock: Lock, name?: string);
6
+ release(): void;
7
+ [Symbol.dispose](): void;
8
+ }
9
+ export declare class Lock implements ILocker {
10
+ #private;
11
+ isLocked(name?: string): boolean;
12
+ /**
13
+ * Acquire named or global lock
14
+ *
15
+ * @returns Promise that resolves once lock is acquired
16
+ */
17
+ acquire(name?: string): Promise<LockLease>;
18
+ /**
19
+ * @returns Promise that resolves once lock is released
20
+ */
21
+ waitForUnlock(name?: string): Promise<void>;
22
+ /**
23
+ * Release named or global lock
24
+ */
25
+ release(name?: string): void;
26
+ /**
27
+ * Execute callback with lock acquired, then release lock
28
+ */
29
+ runExclusively<T>(name: string | undefined, callback: () => Promise<T> | T): Promise<T>;
30
+ }
@@ -0,0 +1,11 @@
1
+ export declare class MapAssertable<K, V> extends Map<K, V> {
2
+ #private;
3
+ /**
4
+ * Ensures the key exists in the map, creating it with the factory if needed, and increments its usage counter.
5
+ */
6
+ assert(key: K, factory: () => V): V;
7
+ /**
8
+ * Decrements the usage counter for the key and removes it from the map if no longer used.
9
+ */
10
+ release(key: K): void;
11
+ }
@@ -0,0 +1,20 @@
1
+ import { type IMessage } from '../interfaces/IMessage.ts';
2
+ import { type IEvent } from '../interfaces/IEvent.ts';
3
+ import { type ISnapshotEvent } from '../interfaces/ISnapshotEvent.ts';
4
+ import { type IObservable } from '../interfaces/IObservable.ts';
5
+ export declare function assertDefined<T>(value: T, argName: string): asserts value is NonNullable<T>;
6
+ export declare function assertString(value: unknown, argName: string): asserts value is string;
7
+ export declare function assertFunction(value: unknown, argName: string): asserts value is Function;
8
+ export declare function assertObject(value: unknown, argName: string): asserts value is object;
9
+ export declare function assertArray(value: unknown, argName: string): asserts value is unknown[];
10
+ export declare function assertStringArray(value: unknown, argName: string): asserts value is string[];
11
+ export declare function assertOptionalArray(value: unknown, argName: string): asserts value is unknown[];
12
+ export declare function assertMessage(value: unknown, argName: string): asserts value is IMessage;
13
+ export declare function assertEvent(value: unknown, argName: string): asserts value is IEvent;
14
+ export declare function assertSnapshotEvent(value: unknown, argName: string): asserts value is ISnapshotEvent;
15
+ export declare function assertObservable(value: unknown, argName: string): asserts value is IObservable;
16
+ export declare function assertNumber(value: unknown, argName: string): asserts value is number;
17
+ export declare function assertClass(value: unknown, argName: string): asserts value is new (...args: any[]) => any;
18
+ export declare function assertNonNegativeInteger(value: unknown, argName: string): asserts value is number;
19
+ export declare function assertBoolean(value: unknown, argName: string): asserts value is boolean;
20
+ export declare function assertNotDefined(value: unknown, argName: string): asserts value is undefined;
@@ -0,0 +1 @@
1
+ export declare function clone<T>(value: T): T;
@@ -0,0 +1,8 @@
1
+ export type ErrorDetails = {
2
+ name?: string;
3
+ message: string;
4
+ code?: any;
5
+ stack?: string;
6
+ cause?: ErrorDetails;
7
+ };
8
+ export declare const extractErrorDetails: (err: unknown) => ErrorDetails;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Get instance class name
3
+ */
4
+ export declare function getClassName(instance: object): string;
@@ -0,0 +1,7 @@
1
+ import type { IMessageHandler } from '../interfaces/index.ts';
2
+ /**
3
+ * Gets a handler for a specific message type, prefers a public (w\o _ prefix) method, if available
4
+ */
5
+ export declare function getHandler(context: {
6
+ [key: string]: any;
7
+ }, messageType: string): IMessageHandler | null;
@@ -0,0 +1,12 @@
1
+ type ObserverConstructor<T extends object> = abstract new (...args: any[]) => T;
2
+ /**
3
+ * Get message handler names from an observer instance.
4
+ * Assumes private method names start with underscore (`_`).
5
+ */
6
+ export declare function getMessageHandlerNames<T extends object>(observerInstance: T): Extract<keyof T, string>[];
7
+ /**
8
+ * Get message handler names from an observer class constructor.
9
+ * Assumes private method names start with underscore (`_`).
10
+ */
11
+ export declare function getMessageHandlerNames<T extends object>(observerClass: ObserverConstructor<T>): Extract<keyof T, string>[];
12
+ export {};
@@ -0,0 +1,14 @@
1
+ export * from './assert.ts';
2
+ export * from './clone.ts';
3
+ export * from './Deferred.ts';
4
+ export * from './extractErrorDetails.ts';
5
+ export * from './getClassName.ts';
6
+ export * from './getHandler.ts';
7
+ export * from './getMessageHandlerNames.ts';
8
+ export * from './isClass.ts';
9
+ export * from './Lock.ts';
10
+ export * from './MapAssertable.ts';
11
+ export * from './setupOneTimeEmitterSubscription.ts';
12
+ export * from './sagaId.ts';
13
+ export * from './subscribe.ts';
14
+ export * from './validateHandlers.ts';
@@ -0,0 +1 @@
1
+ export declare function isClass(func: unknown): func is new (...args: any[]) => any;
@@ -0,0 +1,6 @@
1
+ import type { Identifier } from '../interfaces/Identifier.ts';
2
+ export declare const makeSagaId: (sagaDescriptor: string, originEventId: string) => string;
3
+ export declare const parseSagaId: (sagaId: Identifier) => {
4
+ sagaDescriptor: string;
5
+ originEventId: string;
6
+ };
@@ -0,0 +1,12 @@
1
+ import type { IEvent, ILogger, IObservable } from '../interfaces/index.ts';
2
+ /**
3
+ * Create one-time eventEmitter subscription for one or multiple events that match a filter
4
+ *
5
+ * @param {IObservable} emitter
6
+ * @param {string[]} messageTypes Array of event type to subscribe to
7
+ * @param {function(IEvent):any} [handler] Optional handler to execute for a first event received
8
+ * @param {function(IEvent):boolean} [filter] Optional filter to apply before executing a handler
9
+ * @param {ILogger} logger
10
+ * @return {Promise<IEvent>} Resolves to first event that passes filter
11
+ */
12
+ export declare function setupOneTimeEmitterSubscription(emitter: IObservable, messageTypes: string[], filter?: (e: IEvent) => boolean, handler?: (e: IEvent) => void, logger?: ILogger): Promise<IEvent>;
@@ -0,0 +1,9 @@
1
+ import { type IMessageHandler, type IObservable } from '../interfaces/index.ts';
2
+ /**
3
+ * Subscribe observer to observable
4
+ */
5
+ export declare function subscribe(observable: IObservable, observer: object, options?: {
6
+ messageTypes?: string[];
7
+ masterHandler?: IMessageHandler;
8
+ queueName?: string;
9
+ }): void;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Ensure instance has handlers declared for all handled message types
3
+ */
4
+ export declare function validateHandlers(instance: object, handlesFieldName?: string): void;
@@ -0,0 +1,25 @@
1
+ import { AbstractProjection } from '../AbstractProjection.ts';
2
+ import { type ProjectionView } from './utils/index.ts';
3
+ import type { IWorkerProjection, IWorkerProjectionType } from './interfaces/index.ts';
4
+ import type { IContainer, IEvent } from '../interfaces/index.ts';
5
+ /**
6
+ * Projection base class that can run projection handlers and the associated view in a worker thread
7
+ * to isolate CPU-heavy work and keep the main thread responsive
8
+ */
9
+ export declare abstract class AbstractWorkerProjection<TView> extends AbstractProjection<TView> implements IWorkerProjection<TView> {
10
+ /**
11
+ * In a worker thread, creates and exposes the projection singleton.
12
+ */
13
+ static createInstanceInWorkerThread<V, T extends AbstractWorkerProjection<V>>(this: new () => T, factory?: () => T): T | undefined;
14
+ /**
15
+ * Creates a factory that returns a `WorkerProxyProjection` for this projection type.
16
+ * Use it in the main thread (for example, `builder.registerProjection(MyProjection.workerProxyFactory)`),
17
+ * so events are proxied to the worker instance while exposing the remote view API.
18
+ */
19
+ static workerProxyFactory<TProjection extends IWorkerProjection<any>, TContainer extends IContainer = IContainer, TView = ProjectionView<TProjection>>(this: IWorkerProjectionType<TView, TProjection>, container?: TContainer): import("./WorkerProxyProjection.ts").WorkerProxyProjection<TView, TProjection>;
20
+ static get workerModulePath(): string;
21
+ /**
22
+ * Returns the last projected event if the view implements IEventLocker, otherwise undefined.
23
+ */
24
+ getLastProjectedEvent(): Promise<IEvent | undefined>;
25
+ }
@@ -0,0 +1,25 @@
1
+ import type { IEvent, IEventStorageReader, IEventStore, IExtendableLogger, ILogger } from '../interfaces/index.ts';
2
+ import type { IProxyProjection, IWorkerProjection, ProxyProjectionParams } from './interfaces/index.ts';
3
+ import * as Comlink from 'comlink';
4
+ /**
5
+ * Projection being automatically created in the main thread to proxy events
6
+ * and view calls to AbstractWorkerThreadProjection instance
7
+ */
8
+ export declare class WorkerProxyProjection<TView, TProjection extends IWorkerProjection<TView> = IWorkerProjection<TView>> implements IProxyProjection<TView> {
9
+ #private;
10
+ get remoteProjection(): Comlink.Remote<TProjection>;
11
+ get view(): Comlink.Remote<TView>;
12
+ constructor({ workerModulePath, messageTypes, logger }: ProxyProjectionParams & {
13
+ logger?: IExtendableLogger | ILogger;
14
+ });
15
+ subscribe(eventStore: IEventStore): void;
16
+ restore(eventStore: IEventStorageReader): Promise<void>;
17
+ /** Restore view state from not-yet-projected events */
18
+ protected _restore(eventStore: IEventStorageReader): Promise<void>;
19
+ protected _onWorkerError: (error: unknown) => void;
20
+ protected _onWorkerExit: (exitCode: number) => void;
21
+ ensureWorkerReady(): Promise<void>;
22
+ project(event: IEvent): Promise<void>;
23
+ protected _project(event: IEvent): Promise<void>;
24
+ dispose(): void;
25
+ }
@@ -0,0 +1,3 @@
1
+ export * from './AbstractWorkerProjection.ts';
2
+ export * from './utils/index.ts';
3
+ export * from './WorkerProxyProjection.ts';
@@ -0,0 +1,15 @@
1
+ import type * as Comlink from 'comlink';
2
+ import type { IProjection } from '../../interfaces/index.js';
3
+ export type ProxyProjectionParams = {
4
+ /**
5
+ * Required in the main thread to spawn a worker (derived projection module path).
6
+ * Not used in the worker thread.
7
+ */
8
+ workerModulePath: string;
9
+ messageTypes: string[];
10
+ };
11
+ export interface IProxyProjection<TView> extends IProjection<Comlink.Remote<TView>> {
12
+ }
13
+ export interface IProxyProjectionType<TView, TProxyProjection extends IProxyProjection<TView> = IProxyProjection<TView>> {
14
+ new (params: ProxyProjectionParams): TProxyProjection;
15
+ }
@@ -0,0 +1,19 @@
1
+ import type { IEvent, IProjection } from '../../interfaces/index.js';
2
+ export interface IWorkerProjection<TView> extends IProjection<TView> {
3
+ /**
4
+ * Returns the last projected event, if event-locking state is available.
5
+ */
6
+ getLastProjectedEvent(): Promise<IEvent | undefined>;
7
+ /**
8
+ * Projects an event without waiting for view lock readiness.
9
+ *
10
+ * Implemented by AbstractWorkerProjection and used by worker RPC wiring
11
+ * for restore and direct projection paths.
12
+ */
13
+ _project(event: IEvent): Promise<void>;
14
+ }
15
+ export interface IWorkerProjectionType<TView, TProjection extends IWorkerProjection<TView> = IWorkerProjection<TView>> {
16
+ new (): TProjection;
17
+ readonly workerModulePath: string;
18
+ readonly handles: string[];
19
+ }
@@ -0,0 +1,2 @@
1
+ export type * from './IProxyProjection.js';
2
+ export type * from './IWorkerProjection.js';
@@ -0,0 +1,10 @@
1
+ import type { MessagePort } from 'node:worker_threads';
2
+ export interface IWorkerData {
3
+ projectionPort: MessagePort;
4
+ viewPort: MessagePort;
5
+ }
6
+ export declare const isWorkerData: (obj: unknown) => obj is IWorkerData;
7
+ export type WorkerInitMessage = {
8
+ type: 'ready';
9
+ };
10
+ export declare const isWorkerInitMessage: (msg: unknown) => msg is WorkerInitMessage;
@@ -0,0 +1,2 @@
1
+ import type { IProjection } from '../../interfaces/index.js';
2
+ export type ProjectionView<P extends IProjection<any>> = P extends IProjection<infer V> ? V : never;
@@ -0,0 +1,10 @@
1
+ import { Worker } from 'node:worker_threads';
2
+ import { type IWorkerData } from '../protocol.ts';
3
+ /**
4
+ * Create a worker instance, await a handshake or a failure
5
+ *
6
+ * @param workerModulePath - Path to worker module
7
+ * @param ports - Container with MessagePorts for communication with worker projection and view instances
8
+ * @returns Worker instance
9
+ */
10
+ export declare function createWorker(workerModulePath: string, ports: IWorkerData): Promise<Worker>;
@@ -0,0 +1,11 @@
1
+ import type { IProjection } from '../../interfaces/index.ts';
2
+ /**
3
+ * Create and expose a worker-thread projection from a projection class type.
4
+ * The class is instantiated inside the worker with `new ProjectionType()`.
5
+ */
6
+ export declare function createWorkerInstance<TProjection extends IProjection<any>>(ProjectionType: new () => TProjection, projectionMethodsToWire?: readonly Extract<keyof TProjection, string>[]): TProjection;
7
+ /**
8
+ * Create and expose a worker-thread projection from a projection factory.
9
+ * The factory is executed inside the worker and should return the projection instance.
10
+ */
11
+ export declare function createWorkerInstance<TProjection extends IProjection<any>>(projectionFactory: () => TProjection, projectionMethodsToWire?: readonly Extract<keyof TProjection, string>[]): TProjection;
@@ -0,0 +1,5 @@
1
+ export * from './createWorker.ts';
2
+ export * from './createWorkerInstance.ts';
3
+ export * from './nodeEndpoint.ts';
4
+ export * from './workerProxyFactory.ts';
5
+ export type * from './ProjectionView.ts';
@@ -0,0 +1,2 @@
1
+ import * as Comlink from 'comlink';
2
+ export declare const nodeEndpoint: (arg: any) => Comlink.Endpoint;
@@ -0,0 +1,14 @@
1
+ import type { IContainer } from '../../interfaces/index.ts';
2
+ import type { IProxyProjectionType, IWorkerProjectionType, IWorkerProjection } from '../interfaces/index.ts';
3
+ import { WorkerProxyProjection } from '../WorkerProxyProjection.ts';
4
+ import type { ProjectionView } from './ProjectionView.ts';
5
+ /**
6
+ * Create a main-thread proxy factory for a worker projection type.
7
+ * Uses the default `WorkerProxyProjection` class for the proxy instance.
8
+ */
9
+ export declare function workerProxyFactory<TProjection extends IWorkerProjection<any>, TContainer extends IContainer = IContainer, TView = ProjectionView<TProjection>>(WorkerProjectionType: IWorkerProjectionType<TView, TProjection>): (container?: TContainer) => WorkerProxyProjection<TView, TProjection>;
10
+ /**
11
+ * Create a main-thread proxy factory for a worker projection type using
12
+ * a custom proxy projection class.
13
+ */
14
+ export declare function workerProxyFactory<TProjection extends IWorkerProjection<any>, TContainer extends IContainer = IContainer, TView = ProjectionView<TProjection>, TProxyProjectionType extends IProxyProjectionType<TView, any> = IProxyProjectionType<TView, any>>(WorkerProjectionType: IWorkerProjectionType<TView, TProjection>, ProxyProjectionType: TProxyProjectionType): (container?: TContainer) => InstanceType<TProxyProjectionType>;
package/package.json CHANGED
@@ -1,51 +1,151 @@
1
1
  {
2
2
  "name": "node-cqrs",
3
- "version": "0.16.4",
4
- "description": "Basic ES6 backbone for CQRS app development",
3
+ "version": "1.0.0-beta.0",
4
+ "description": "TypeScript CQRS/Event Sourcing toolkit for Node.js with DI, sagas, projections, and optional Worker, RabbitMQ, and SQLite adapters",
5
+ "type": "module",
6
+ "keywords": [
7
+ "cqrs",
8
+ "event-sourcing",
9
+ "eventsourcing",
10
+ "ddd",
11
+ "domain-driven-design",
12
+ "event-store",
13
+ "command-bus",
14
+ "event-bus",
15
+ "projection",
16
+ "saga",
17
+ "typescript",
18
+ "nodejs",
19
+ "worker-threads",
20
+ "rabbitmq",
21
+ "sqlite"
22
+ ],
5
23
  "repository": {
6
24
  "type": "git",
7
25
  "url": "https://github.com/snatalenko/node-cqrs.git"
8
26
  },
27
+ "main": "./dist/cjs/index.js",
28
+ "types": "./dist/types/index.d.ts",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/types/index.d.ts",
32
+ "require": "./dist/cjs/index.js",
33
+ "import": "./dist/esm/index.js"
34
+ },
35
+ "./workers": {
36
+ "types": "./dist/types/workers/index.d.ts",
37
+ "require": "./dist/cjs/workers/index.js",
38
+ "import": "./dist/esm/workers/index.js"
39
+ },
40
+ "./rabbitmq": {
41
+ "types": "./dist/types/rabbitmq/index.d.ts",
42
+ "require": "./dist/cjs/rabbitmq/index.js",
43
+ "import": "./dist/esm/rabbitmq/index.js"
44
+ },
45
+ "./sqlite": {
46
+ "types": "./dist/types/sqlite/index.d.ts",
47
+ "require": "./dist/cjs/sqlite/index.js",
48
+ "import": "./dist/esm/sqlite/index.js"
49
+ }
50
+ },
9
51
  "directories": {
10
52
  "doc": "docs",
11
53
  "example": "examples",
12
54
  "test": "tests"
13
55
  },
14
- "keywords": [
15
- "cqrs",
16
- "eventsourcing",
17
- "ddd",
18
- "domain",
19
- "eventstore"
20
- ],
21
- "main": "src/index.js",
22
- "types": "types/index.d.ts",
23
56
  "engines": {
24
- "node": ">=10.3.0"
57
+ "node": ">=16.0.0"
25
58
  },
26
59
  "scripts": {
27
- "lint": "eslint . --max-warnings=0",
28
- "test": "mocha ./tests/unit/index.js ./examples/user-domain-tests",
29
- "test:coverage": "nyc --reporter=lcov --reporter=text-summary node_modules/.bin/_mocha ./tests/unit/index.js",
30
- "pretest:coveralls": "npm run test:coverage",
31
- "test:coveralls": "cat ./coverage/lcov.info | coveralls",
32
- "posttest:coveralls": "rm -rf ./coverage",
33
- "changelog": "conventional-changelog -n ./scripts/changelog -i CHANGELOG.md -s",
34
- "preversion": "npm run lint && npm test",
35
- "version": "npm run changelog && git add CHANGELOG.md"
60
+ "cleanup": "rm -rf ./dist ./coverage",
61
+ "test": "jest",
62
+ "examples": "npm run example:user-domain-framework-free && npm run example:user-domain-ts && npm run example:sagas-simple && npm run example:sagas-overlaps && npm run example:user-domain-cjs && npm run example:workers-worker-projection && npm run example:browser",
63
+ "example:user-domain-ts": "node examples/user-domain/ts/index.ts",
64
+ "example:user-domain-framework-free": "node examples/user-domain/framework-free/index.ts",
65
+ "example:user-domain-cjs": "npm run build:cjs && node examples/user-domain/cjs/index.cjs",
66
+ "example:sagas-simple": "node examples/sagas/simple/index.ts",
67
+ "example:sagas-overlaps": "node examples/sagas/overlaps/index.ts",
68
+ "example:workers-worker-projection": "npm run build:cjs && node examples/workers/worker-projection/index.cjs",
69
+ "example:browser": "npm run build:browser && echo \"\nOpen ./examples/browser/index.html in your browser (check DevTools console)\n\"",
70
+ "pretest:examples": "npm run build:cjs",
71
+ "test:examples": "jest --roots='<rootDir>/examples'",
72
+ "test:coverage": "npm t -- --collect-coverage",
73
+ "test:rabbitmq": "jest --verbose --roots='<rootDir>/tests/integration/rabbitmq'",
74
+ "test:sqlite": "jest --verbose --roots='<rootDir>/tests/integration/sqlite'",
75
+ "pretest:workers": "npm run build:cjs",
76
+ "test:workers": "jest --verbose --roots='<rootDir>/tests/integration/workers'",
77
+ "changelog": "conventional-changelog -n ./scripts/changelog/index.cjs -r 0 > CHANGELOG.md",
78
+ "build:cjs": "tsc -p ./tsconfig.cjs.json && cp ./scripts/etc/cjs-package.json ./dist/cjs/package.json",
79
+ "build:esm": "tsc -p ./tsconfig.esm.json",
80
+ "build:browser:bundle-min": "rollup -c ./rollup.browser.config.mjs --environment MINIFY:true",
81
+ "build:browser:bundle": "rollup -c ./rollup.browser.config.mjs",
82
+ "build:browser": "npm run build:esm && npm run build:browser:bundle && npm run build:browser:bundle-min",
83
+ "build": "npm run build:esm && npm run build:cjs",
84
+ "prepare": "npm run build",
85
+ "preversion": "npm test",
86
+ "version": "./scripts/cleanup_obsolete_tags.sh v$npm_package_version && npm run changelog && git add CHANGELOG.md",
87
+ "lint": "eslint"
36
88
  },
37
89
  "author": "@snatalenko",
38
- "license": "MIT",
90
+ "license": "Apache-2.0",
39
91
  "homepage": "https://github.com/snatalenko/node-cqrs#readme",
92
+ "files": [
93
+ "dist/**",
94
+ "!dist/.tsbuildinfo*",
95
+ "README.md",
96
+ "LICENSE",
97
+ "NOTICE",
98
+ "CHANGELOG.md"
99
+ ],
40
100
  "dependencies": {
41
- "di0": "^1.0.0"
101
+ "async-iterable-buffer": "^1.1.0",
102
+ "async-parallel-pipe": "^1.0.2",
103
+ "di0": "^1.3.0"
42
104
  },
43
105
  "devDependencies": {
44
- "chai": "^4.3.6",
45
- "coveralls": "^3.1.1",
46
- "eslint": "^8.7.0",
47
- "mocha": "^9.2.0",
48
- "nyc": "^15.1.0",
49
- "sinon": "^12.0.1"
106
+ "@rollup/plugin-commonjs": "^29.0.2",
107
+ "@rollup/plugin-node-resolve": "^16.0.3",
108
+ "@rollup/plugin-terser": "^1.0.0",
109
+ "@types/amqplib": "^0.10.8",
110
+ "@types/better-sqlite3": "^7.6.13",
111
+ "@types/jest": "^29.5.14",
112
+ "@types/md5": "^2.3.6",
113
+ "@types/node": "^25.5.0",
114
+ "@typescript-eslint/eslint-plugin": "^8.29.0",
115
+ "@typescript-eslint/parser": "^8.29.0",
116
+ "amqplib": "^0.10.9",
117
+ "better-sqlite3": "^12.6.2",
118
+ "comlink": "^4.4.2",
119
+ "conventional-changelog": "^3.1.25",
120
+ "eslint": "^9.39.4",
121
+ "eslint-plugin-jest": "^28.14.0",
122
+ "globals": "^17.4.0",
123
+ "jest": "^29.7.0",
124
+ "md5": "^2.3.0",
125
+ "rollup": "^4.59.0",
126
+ "ts-jest": "^29.4.6",
127
+ "ts-node": "^10.9.2",
128
+ "typescript": "^5.9.3",
129
+ "typescript-eslint": "^8.57.0"
130
+ },
131
+ "peerDependencies": {
132
+ "amqplib": "^0.10.9",
133
+ "better-sqlite3": "^12.6.2",
134
+ "comlink": "^4.4.2",
135
+ "md5": "^2.3.0"
136
+ },
137
+ "peerDependenciesMeta": {
138
+ "better-sqlite3": {
139
+ "optional": true
140
+ },
141
+ "amqplib": {
142
+ "optional": true
143
+ },
144
+ "comlink": {
145
+ "optional": true
146
+ },
147
+ "md5": {
148
+ "optional": true
149
+ }
50
150
  }
51
151
  }
package/jsconfig.json DELETED
@@ -1,15 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es6",
4
- "module": "commonjs",
5
- "allowSyntheticDefaultImports": true,
6
- "checkJs": true,
7
- "resolveJsonModule": true,
8
- "lib": [
9
- "es2018"
10
- ]
11
- },
12
- "exclude": [
13
- "node_modules"
14
- ]
15
- }