node-cqrs 0.17.0 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/CHANGELOG.md +583 -92
  2. package/LICENSE +202 -21
  3. package/NOTICE +15 -0
  4. package/README.md +429 -113
  5. package/dist/cjs/AbstractAggregate.js +193 -0
  6. package/dist/cjs/AbstractAggregate.js.map +1 -0
  7. package/dist/cjs/AbstractProjection.js +165 -0
  8. package/dist/cjs/AbstractProjection.js.map +1 -0
  9. package/dist/cjs/AbstractSaga.js +109 -0
  10. package/dist/cjs/AbstractSaga.js.map +1 -0
  11. package/dist/cjs/AggregateCommandHandler.js +182 -0
  12. package/dist/cjs/AggregateCommandHandler.js.map +1 -0
  13. package/dist/cjs/CommandBus.js +9 -0
  14. package/dist/cjs/CommandBus.js.map +1 -0
  15. package/dist/cjs/CqrsContainerBuilder.js +97 -0
  16. package/dist/cjs/CqrsContainerBuilder.js.map +1 -0
  17. package/dist/cjs/Event.js +19 -0
  18. package/dist/cjs/Event.js.map +1 -0
  19. package/dist/cjs/EventDispatchPipeline.js +83 -0
  20. package/dist/cjs/EventDispatchPipeline.js.map +1 -0
  21. package/dist/cjs/EventDispatcher.js +93 -0
  22. package/dist/cjs/EventDispatcher.js.map +1 -0
  23. package/dist/cjs/EventIdAugmentor.js +30 -0
  24. package/dist/cjs/EventIdAugmentor.js.map +1 -0
  25. package/dist/cjs/EventStore.js +106 -0
  26. package/dist/cjs/EventStore.js.map +1 -0
  27. package/dist/cjs/SagaEventHandler.js +153 -0
  28. package/dist/cjs/SagaEventHandler.js.map +1 -0
  29. package/dist/cjs/errors/ConcurrencyError.js +21 -0
  30. package/dist/cjs/errors/ConcurrencyError.js.map +1 -0
  31. package/dist/{infrastructure/utils → cjs/errors}/index.js +1 -2
  32. package/dist/cjs/errors/index.js.map +1 -0
  33. package/dist/cjs/in-memory/InMemoryEventStorage.js +106 -0
  34. package/dist/cjs/in-memory/InMemoryEventStorage.js.map +1 -0
  35. package/dist/cjs/in-memory/InMemoryLock.js +44 -0
  36. package/dist/cjs/in-memory/InMemoryLock.js.map +1 -0
  37. package/dist/cjs/in-memory/InMemoryMessageBus.js +93 -0
  38. package/dist/cjs/in-memory/InMemoryMessageBus.js.map +1 -0
  39. package/dist/cjs/in-memory/InMemorySnapshotStorage.js +101 -0
  40. package/dist/cjs/in-memory/InMemorySnapshotStorage.js.map +1 -0
  41. package/dist/{infrastructure → cjs/in-memory}/InMemoryView.js +26 -45
  42. package/dist/cjs/in-memory/InMemoryView.js.map +1 -0
  43. package/dist/{utils → cjs/in-memory}/index.js +5 -8
  44. package/dist/cjs/in-memory/index.js.map +1 -0
  45. package/dist/cjs/in-memory/utils/index.js +18 -0
  46. package/dist/cjs/in-memory/utils/index.js.map +1 -0
  47. package/dist/{infrastructure → cjs/in-memory}/utils/nextCycle.js +1 -1
  48. package/dist/cjs/in-memory/utils/nextCycle.js.map +1 -0
  49. package/dist/cjs/index.js +58 -0
  50. package/dist/cjs/index.js.map +1 -0
  51. package/dist/{interfaces.js → cjs/interfaces/IAggregate.js} +1 -2
  52. package/dist/cjs/interfaces/IAggregate.js.map +1 -0
  53. package/dist/cjs/interfaces/IAggregateSnapshotStorage.js +13 -0
  54. package/dist/cjs/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  55. package/dist/cjs/interfaces/ICommand.js +3 -0
  56. package/dist/cjs/interfaces/ICommand.js.map +1 -0
  57. package/dist/cjs/interfaces/ICommandBus.js +3 -0
  58. package/dist/cjs/interfaces/ICommandBus.js.map +1 -0
  59. package/dist/cjs/interfaces/IContainer.js +3 -0
  60. package/dist/cjs/interfaces/IContainer.js.map +1 -0
  61. package/dist/cjs/interfaces/IDispatchPipelineProcessor.js +9 -0
  62. package/dist/cjs/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  63. package/dist/cjs/interfaces/IEvent.js +10 -0
  64. package/dist/cjs/interfaces/IEvent.js.map +1 -0
  65. package/dist/cjs/interfaces/IEventBus.js +9 -0
  66. package/dist/cjs/interfaces/IEventBus.js.map +1 -0
  67. package/dist/cjs/interfaces/IEventDispatcher.js +3 -0
  68. package/dist/cjs/interfaces/IEventDispatcher.js.map +1 -0
  69. package/dist/cjs/interfaces/IEventLocker.js +15 -0
  70. package/dist/cjs/interfaces/IEventLocker.js.map +1 -0
  71. package/dist/cjs/interfaces/IEventReceptor.js +3 -0
  72. package/dist/cjs/interfaces/IEventReceptor.js.map +1 -0
  73. package/dist/cjs/interfaces/IEventSet.js +8 -0
  74. package/dist/cjs/interfaces/IEventSet.js.map +1 -0
  75. package/dist/cjs/interfaces/IEventStorageReader.js +13 -0
  76. package/dist/cjs/interfaces/IEventStorageReader.js.map +1 -0
  77. package/dist/cjs/interfaces/IEventStore.js +3 -0
  78. package/dist/cjs/interfaces/IEventStore.js.map +1 -0
  79. package/dist/cjs/interfaces/IEventStream.js +3 -0
  80. package/dist/cjs/interfaces/IEventStream.js.map +1 -0
  81. package/dist/cjs/interfaces/IIdentifierProvider.js +9 -0
  82. package/dist/cjs/interfaces/IIdentifierProvider.js.map +1 -0
  83. package/dist/cjs/interfaces/ILocker.js +9 -0
  84. package/dist/cjs/interfaces/ILocker.js.map +1 -0
  85. package/dist/cjs/interfaces/ILogger.js +3 -0
  86. package/dist/cjs/interfaces/ILogger.js.map +1 -0
  87. package/dist/cjs/interfaces/IMessage.js +10 -0
  88. package/dist/cjs/interfaces/IMessage.js.map +1 -0
  89. package/dist/cjs/interfaces/IMutableState.js +3 -0
  90. package/dist/cjs/interfaces/IMutableState.js.map +1 -0
  91. package/dist/cjs/interfaces/IObjectStorage.js +3 -0
  92. package/dist/cjs/interfaces/IObjectStorage.js.map +1 -0
  93. package/dist/cjs/interfaces/IObservable.js +11 -0
  94. package/dist/cjs/interfaces/IObservable.js.map +1 -0
  95. package/dist/cjs/interfaces/IObservableQueueProvider.js +9 -0
  96. package/dist/cjs/interfaces/IObservableQueueProvider.js.map +1 -0
  97. package/dist/cjs/interfaces/IObserver.js +3 -0
  98. package/dist/cjs/interfaces/IObserver.js.map +1 -0
  99. package/dist/cjs/interfaces/IProjection.js +3 -0
  100. package/dist/cjs/interfaces/IProjection.js.map +1 -0
  101. package/dist/cjs/interfaces/ISaga.js +3 -0
  102. package/dist/cjs/interfaces/ISaga.js.map +1 -0
  103. package/dist/cjs/interfaces/ISnapshotEvent.js +10 -0
  104. package/dist/cjs/interfaces/ISnapshotEvent.js.map +1 -0
  105. package/dist/cjs/interfaces/IViewLocker.js +21 -0
  106. package/dist/cjs/interfaces/IViewLocker.js.map +1 -0
  107. package/dist/cjs/interfaces/Identifier.js +3 -0
  108. package/dist/cjs/interfaces/Identifier.js.map +1 -0
  109. package/dist/cjs/interfaces/index.js +46 -0
  110. package/dist/cjs/interfaces/index.js.map +1 -0
  111. package/dist/cjs/interfaces/isObject.js +9 -0
  112. package/dist/cjs/interfaces/isObject.js.map +1 -0
  113. package/dist/cjs/package.json +3 -0
  114. package/dist/cjs/rabbitmq/IContainer.js +3 -0
  115. package/dist/cjs/rabbitmq/IContainer.js.map +1 -0
  116. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js +84 -0
  117. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js.map +1 -0
  118. package/dist/cjs/rabbitmq/RabbitMqEventBus.js +121 -0
  119. package/dist/cjs/rabbitmq/RabbitMqEventBus.js.map +1 -0
  120. package/dist/cjs/rabbitmq/RabbitMqGateway.js +578 -0
  121. package/dist/cjs/rabbitmq/RabbitMqGateway.js.map +1 -0
  122. package/dist/cjs/rabbitmq/index.js +21 -0
  123. package/dist/cjs/rabbitmq/index.js.map +1 -0
  124. package/dist/cjs/rabbitmq/utils/index.js +19 -0
  125. package/dist/cjs/rabbitmq/utils/index.js.map +1 -0
  126. package/dist/cjs/rabbitmq/utils/registerExitCleanup.js +28 -0
  127. package/dist/cjs/rabbitmq/utils/registerExitCleanup.js.map +1 -0
  128. package/dist/cjs/rabbitmq/utils/resolveProvider.js +9 -0
  129. package/dist/cjs/rabbitmq/utils/resolveProvider.js.map +1 -0
  130. package/dist/cjs/sqlite/AbstractSqliteAccessor.js +50 -0
  131. package/dist/cjs/sqlite/AbstractSqliteAccessor.js.map +1 -0
  132. package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js +26 -0
  133. package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  134. package/dist/cjs/sqlite/AbstractSqliteView.js +50 -0
  135. package/dist/cjs/sqlite/AbstractSqliteView.js.map +1 -0
  136. package/dist/cjs/sqlite/IContainer.js +3 -0
  137. package/dist/cjs/sqlite/IContainer.js.map +1 -0
  138. package/dist/cjs/sqlite/SqliteEventLocker.js +93 -0
  139. package/dist/cjs/sqlite/SqliteEventLocker.js.map +1 -0
  140. package/dist/cjs/sqlite/SqliteObjectStorage.js +114 -0
  141. package/dist/cjs/sqlite/SqliteObjectStorage.js.map +1 -0
  142. package/dist/cjs/sqlite/SqliteObjectView.js +48 -0
  143. package/dist/cjs/sqlite/SqliteObjectView.js.map +1 -0
  144. package/dist/cjs/sqlite/SqliteProjectionDataParams.js +3 -0
  145. package/dist/cjs/sqlite/SqliteProjectionDataParams.js.map +1 -0
  146. package/dist/cjs/sqlite/SqliteViewLocker.js +119 -0
  147. package/dist/cjs/sqlite/SqliteViewLocker.js.map +1 -0
  148. package/dist/cjs/sqlite/index.js +26 -0
  149. package/dist/cjs/sqlite/index.js.map +1 -0
  150. package/dist/cjs/sqlite/queries/eventLockTableInit.js +15 -0
  151. package/dist/cjs/sqlite/queries/eventLockTableInit.js.map +1 -0
  152. package/dist/cjs/sqlite/queries/index.js +19 -0
  153. package/dist/cjs/sqlite/queries/index.js.map +1 -0
  154. package/dist/cjs/sqlite/queries/viewLockTableInit.js +14 -0
  155. package/dist/cjs/sqlite/queries/viewLockTableInit.js.map +1 -0
  156. package/dist/cjs/sqlite/utils/getEventId.js +14 -0
  157. package/dist/cjs/sqlite/utils/getEventId.js.map +1 -0
  158. package/dist/cjs/sqlite/utils/guid.js +9 -0
  159. package/dist/cjs/sqlite/utils/guid.js.map +1 -0
  160. package/dist/cjs/sqlite/utils/index.js +19 -0
  161. package/dist/cjs/sqlite/utils/index.js.map +1 -0
  162. package/dist/cjs/utils/Deferred.js.map +1 -0
  163. package/dist/cjs/utils/Lock.js +102 -0
  164. package/dist/cjs/utils/Lock.js.map +1 -0
  165. package/dist/cjs/utils/MapAssertable.js +30 -0
  166. package/dist/cjs/utils/MapAssertable.js.map +1 -0
  167. package/dist/cjs/utils/assert.js +88 -0
  168. package/dist/cjs/utils/assert.js.map +1 -0
  169. package/dist/cjs/utils/clone.js +13 -0
  170. package/dist/cjs/utils/clone.js.map +1 -0
  171. package/dist/cjs/utils/extractErrorDetails.js +37 -0
  172. package/dist/cjs/utils/extractErrorDetails.js.map +1 -0
  173. package/dist/cjs/utils/getClassName.js.map +1 -0
  174. package/dist/{utils → cjs/utils}/getHandler.js +5 -7
  175. package/dist/cjs/utils/getHandler.js.map +1 -0
  176. package/dist/{utils → cjs/utils}/getMessageHandlerNames.js +2 -10
  177. package/dist/cjs/utils/getMessageHandlerNames.js.map +1 -0
  178. package/dist/cjs/utils/index.js +31 -0
  179. package/dist/cjs/utils/index.js.map +1 -0
  180. package/dist/cjs/utils/isClass.js.map +1 -0
  181. package/dist/cjs/utils/sagaId.js +23 -0
  182. package/dist/cjs/utils/sagaId.js.map +1 -0
  183. package/dist/{utils → cjs/utils}/setupOneTimeEmitterSubscription.js +7 -8
  184. package/dist/cjs/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  185. package/dist/cjs/utils/subscribe.js +43 -0
  186. package/dist/cjs/utils/subscribe.js.map +1 -0
  187. package/dist/{utils → cjs/utils}/validateHandlers.js +6 -6
  188. package/dist/cjs/utils/validateHandlers.js.map +1 -0
  189. package/dist/cjs/workers/AbstractWorkerProjection.js +56 -0
  190. package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -0
  191. package/dist/cjs/workers/WorkerProxyProjection.js +142 -0
  192. package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -0
  193. package/dist/cjs/workers/index.js +20 -0
  194. package/dist/cjs/workers/index.js.map +1 -0
  195. package/dist/cjs/workers/interfaces/IProxyProjection.js +3 -0
  196. package/dist/cjs/workers/interfaces/IProxyProjection.js.map +1 -0
  197. package/dist/cjs/workers/interfaces/IWorkerProjection.js +3 -0
  198. package/dist/cjs/workers/interfaces/IWorkerProjection.js.map +1 -0
  199. package/dist/cjs/workers/interfaces/index.js +3 -0
  200. package/dist/cjs/workers/interfaces/index.js.map +1 -0
  201. package/dist/cjs/workers/protocol.js +16 -0
  202. package/dist/cjs/workers/protocol.js.map +1 -0
  203. package/dist/cjs/workers/utils/ProjectionView.js +3 -0
  204. package/dist/cjs/workers/utils/ProjectionView.js.map +1 -0
  205. package/dist/cjs/workers/utils/createWorker.js +87 -0
  206. package/dist/cjs/workers/utils/createWorker.js.map +1 -0
  207. package/dist/cjs/workers/utils/createWorkerInstance.js +59 -0
  208. package/dist/cjs/workers/utils/createWorkerInstance.js.map +1 -0
  209. package/dist/cjs/workers/utils/index.js +21 -0
  210. package/dist/cjs/workers/utils/index.js.map +1 -0
  211. package/dist/cjs/workers/utils/nodeEndpoint.js +8 -0
  212. package/dist/cjs/workers/utils/nodeEndpoint.js.map +1 -0
  213. package/dist/cjs/workers/utils/workerProxyFactory.js +21 -0
  214. package/dist/cjs/workers/utils/workerProxyFactory.js.map +1 -0
  215. package/dist/esm/AbstractAggregate.js +189 -0
  216. package/dist/esm/AbstractAggregate.js.map +1 -0
  217. package/dist/esm/AbstractProjection.js +161 -0
  218. package/dist/esm/AbstractProjection.js.map +1 -0
  219. package/dist/esm/AbstractSaga.js +105 -0
  220. package/dist/esm/AbstractSaga.js.map +1 -0
  221. package/dist/esm/AggregateCommandHandler.js +178 -0
  222. package/dist/esm/AggregateCommandHandler.js.map +1 -0
  223. package/dist/esm/CommandBus.js +5 -0
  224. package/dist/esm/CommandBus.js.map +1 -0
  225. package/dist/esm/CqrsContainerBuilder.js +93 -0
  226. package/dist/esm/CqrsContainerBuilder.js.map +1 -0
  227. package/dist/esm/Event.js +15 -0
  228. package/dist/esm/Event.js.map +1 -0
  229. package/dist/esm/EventDispatchPipeline.js +79 -0
  230. package/dist/esm/EventDispatchPipeline.js.map +1 -0
  231. package/dist/esm/EventDispatcher.js +89 -0
  232. package/dist/esm/EventDispatcher.js.map +1 -0
  233. package/dist/esm/EventIdAugmentor.js +26 -0
  234. package/dist/esm/EventIdAugmentor.js.map +1 -0
  235. package/dist/esm/EventStore.js +102 -0
  236. package/dist/esm/EventStore.js.map +1 -0
  237. package/dist/esm/SagaEventHandler.js +116 -0
  238. package/dist/esm/SagaEventHandler.js.map +1 -0
  239. package/dist/esm/errors/ConcurrencyError.js +17 -0
  240. package/dist/esm/errors/ConcurrencyError.js.map +1 -0
  241. package/dist/esm/errors/index.js +2 -0
  242. package/dist/esm/errors/index.js.map +1 -0
  243. package/dist/esm/in-memory/InMemoryEventStorage.js +102 -0
  244. package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -0
  245. package/dist/esm/in-memory/InMemoryLock.js +40 -0
  246. package/dist/esm/in-memory/InMemoryLock.js.map +1 -0
  247. package/dist/esm/in-memory/InMemoryMessageBus.js +89 -0
  248. package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -0
  249. package/dist/esm/in-memory/InMemorySnapshotStorage.js +64 -0
  250. package/dist/esm/in-memory/InMemorySnapshotStorage.js.map +1 -0
  251. package/dist/esm/in-memory/InMemoryView.js +150 -0
  252. package/dist/esm/in-memory/InMemoryView.js.map +1 -0
  253. package/dist/esm/in-memory/index.js +6 -0
  254. package/dist/esm/in-memory/index.js.map +1 -0
  255. package/dist/esm/in-memory/utils/index.js +2 -0
  256. package/dist/esm/in-memory/utils/index.js.map +1 -0
  257. package/dist/esm/in-memory/utils/nextCycle.js +5 -0
  258. package/dist/esm/in-memory/utils/nextCycle.js.map +1 -0
  259. package/dist/esm/index.js +16 -0
  260. package/dist/esm/index.js.map +1 -0
  261. package/dist/esm/interfaces/IAggregate.js +2 -0
  262. package/dist/esm/interfaces/IAggregate.js.map +1 -0
  263. package/dist/esm/interfaces/IAggregateSnapshotStorage.js +9 -0
  264. package/dist/esm/interfaces/IAggregateSnapshotStorage.js.map +1 -0
  265. package/dist/esm/interfaces/ICommand.js +2 -0
  266. package/dist/esm/interfaces/ICommand.js.map +1 -0
  267. package/dist/esm/interfaces/ICommandBus.js +2 -0
  268. package/dist/esm/interfaces/ICommandBus.js.map +1 -0
  269. package/dist/esm/interfaces/IContainer.js +2 -0
  270. package/dist/esm/interfaces/IContainer.js.map +1 -0
  271. package/dist/esm/interfaces/IDispatchPipelineProcessor.js +5 -0
  272. package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -0
  273. package/dist/esm/interfaces/IEvent.js +6 -0
  274. package/dist/esm/interfaces/IEvent.js.map +1 -0
  275. package/dist/esm/interfaces/IEventBus.js +5 -0
  276. package/dist/esm/interfaces/IEventBus.js.map +1 -0
  277. package/dist/esm/interfaces/IEventDispatcher.js +2 -0
  278. package/dist/esm/interfaces/IEventDispatcher.js.map +1 -0
  279. package/dist/esm/interfaces/IEventLocker.js +11 -0
  280. package/dist/esm/interfaces/IEventLocker.js.map +1 -0
  281. package/dist/esm/interfaces/IEventReceptor.js +2 -0
  282. package/dist/esm/interfaces/IEventReceptor.js.map +1 -0
  283. package/dist/esm/interfaces/IEventSet.js +4 -0
  284. package/dist/esm/interfaces/IEventSet.js.map +1 -0
  285. package/dist/esm/interfaces/IEventStorageReader.js +9 -0
  286. package/dist/esm/interfaces/IEventStorageReader.js.map +1 -0
  287. package/dist/esm/interfaces/IEventStore.js +2 -0
  288. package/dist/esm/interfaces/IEventStore.js.map +1 -0
  289. package/dist/esm/interfaces/IEventStream.js +2 -0
  290. package/dist/esm/interfaces/IEventStream.js.map +1 -0
  291. package/dist/esm/interfaces/IIdentifierProvider.js +5 -0
  292. package/dist/esm/interfaces/IIdentifierProvider.js.map +1 -0
  293. package/dist/esm/interfaces/ILocker.js +5 -0
  294. package/dist/esm/interfaces/ILocker.js.map +1 -0
  295. package/dist/esm/interfaces/ILogger.js +2 -0
  296. package/dist/esm/interfaces/ILogger.js.map +1 -0
  297. package/dist/esm/interfaces/IMessage.js +6 -0
  298. package/dist/esm/interfaces/IMessage.js.map +1 -0
  299. package/dist/esm/interfaces/IMutableState.js +2 -0
  300. package/dist/esm/interfaces/IMutableState.js.map +1 -0
  301. package/dist/esm/interfaces/IObjectStorage.js +2 -0
  302. package/dist/esm/interfaces/IObjectStorage.js.map +1 -0
  303. package/dist/esm/interfaces/IObservable.js +7 -0
  304. package/dist/esm/interfaces/IObservable.js.map +1 -0
  305. package/dist/esm/interfaces/IObservableQueueProvider.js +5 -0
  306. package/dist/esm/interfaces/IObservableQueueProvider.js.map +1 -0
  307. package/dist/esm/interfaces/IObserver.js +2 -0
  308. package/dist/esm/interfaces/IObserver.js.map +1 -0
  309. package/dist/esm/interfaces/IProjection.js +2 -0
  310. package/dist/esm/interfaces/IProjection.js.map +1 -0
  311. package/dist/esm/interfaces/ISaga.js +2 -0
  312. package/dist/esm/interfaces/ISaga.js.map +1 -0
  313. package/dist/esm/interfaces/ISnapshotEvent.js +6 -0
  314. package/dist/esm/interfaces/ISnapshotEvent.js.map +1 -0
  315. package/dist/esm/interfaces/IViewLocker.js +17 -0
  316. package/dist/esm/interfaces/IViewLocker.js.map +1 -0
  317. package/dist/esm/interfaces/Identifier.js +2 -0
  318. package/dist/esm/interfaces/Identifier.js.map +1 -0
  319. package/dist/esm/interfaces/index.js +30 -0
  320. package/dist/esm/interfaces/index.js.map +1 -0
  321. package/dist/esm/interfaces/isObject.js +5 -0
  322. package/dist/esm/interfaces/isObject.js.map +1 -0
  323. package/dist/esm/rabbitmq/IContainer.js +2 -0
  324. package/dist/esm/rabbitmq/IContainer.js.map +1 -0
  325. package/dist/esm/rabbitmq/RabbitMqCommandBus.js +80 -0
  326. package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -0
  327. package/dist/esm/rabbitmq/RabbitMqEventBus.js +117 -0
  328. package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -0
  329. package/dist/esm/rabbitmq/RabbitMqGateway.js +541 -0
  330. package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -0
  331. package/dist/esm/rabbitmq/index.js +5 -0
  332. package/dist/esm/rabbitmq/index.js.map +1 -0
  333. package/dist/esm/rabbitmq/utils/index.js +3 -0
  334. package/dist/esm/rabbitmq/utils/index.js.map +1 -0
  335. package/dist/esm/rabbitmq/utils/registerExitCleanup.js +24 -0
  336. package/dist/esm/rabbitmq/utils/registerExitCleanup.js.map +1 -0
  337. package/dist/esm/rabbitmq/utils/resolveProvider.js +6 -0
  338. package/dist/esm/rabbitmq/utils/resolveProvider.js.map +1 -0
  339. package/dist/esm/sqlite/AbstractSqliteAccessor.js +46 -0
  340. package/dist/esm/sqlite/AbstractSqliteAccessor.js.map +1 -0
  341. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js +22 -0
  342. package/dist/esm/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
  343. package/dist/esm/sqlite/AbstractSqliteView.js +46 -0
  344. package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -0
  345. package/dist/esm/sqlite/IContainer.js +2 -0
  346. package/dist/esm/sqlite/IContainer.js.map +1 -0
  347. package/dist/esm/sqlite/SqliteEventLocker.js +89 -0
  348. package/dist/esm/sqlite/SqliteEventLocker.js.map +1 -0
  349. package/dist/esm/sqlite/SqliteObjectStorage.js +110 -0
  350. package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -0
  351. package/dist/esm/sqlite/SqliteObjectView.js +44 -0
  352. package/dist/esm/sqlite/SqliteObjectView.js.map +1 -0
  353. package/dist/esm/sqlite/SqliteProjectionDataParams.js +2 -0
  354. package/dist/esm/sqlite/SqliteProjectionDataParams.js.map +1 -0
  355. package/dist/esm/sqlite/SqliteViewLocker.js +115 -0
  356. package/dist/esm/sqlite/SqliteViewLocker.js.map +1 -0
  357. package/dist/esm/sqlite/index.js +10 -0
  358. package/dist/esm/sqlite/index.js.map +1 -0
  359. package/dist/esm/sqlite/queries/eventLockTableInit.js +11 -0
  360. package/dist/esm/sqlite/queries/eventLockTableInit.js.map +1 -0
  361. package/dist/esm/sqlite/queries/index.js +3 -0
  362. package/dist/esm/sqlite/queries/index.js.map +1 -0
  363. package/dist/esm/sqlite/queries/viewLockTableInit.js +10 -0
  364. package/dist/esm/sqlite/queries/viewLockTableInit.js.map +1 -0
  365. package/dist/esm/sqlite/utils/getEventId.js +7 -0
  366. package/dist/esm/sqlite/utils/getEventId.js.map +1 -0
  367. package/dist/esm/sqlite/utils/guid.js +5 -0
  368. package/dist/esm/sqlite/utils/guid.js.map +1 -0
  369. package/dist/esm/sqlite/utils/index.js +3 -0
  370. package/dist/esm/sqlite/utils/index.js.map +1 -0
  371. package/dist/esm/utils/Deferred.js +34 -0
  372. package/dist/esm/utils/Deferred.js.map +1 -0
  373. package/dist/esm/utils/Lock.js +97 -0
  374. package/dist/esm/utils/Lock.js.map +1 -0
  375. package/dist/esm/utils/MapAssertable.js +26 -0
  376. package/dist/esm/utils/MapAssertable.js.map +1 -0
  377. package/dist/esm/utils/assert.js +70 -0
  378. package/dist/esm/utils/assert.js.map +1 -0
  379. package/dist/esm/utils/clone.js +10 -0
  380. package/dist/esm/utils/clone.js.map +1 -0
  381. package/dist/esm/utils/extractErrorDetails.js +33 -0
  382. package/dist/esm/utils/extractErrorDetails.js.map +1 -0
  383. package/dist/esm/utils/getClassName.js +7 -0
  384. package/dist/esm/utils/getClassName.js.map +1 -0
  385. package/dist/esm/utils/getHandler.js +15 -0
  386. package/dist/esm/utils/getHandler.js.map +1 -0
  387. package/dist/esm/utils/getMessageHandlerNames.js +27 -0
  388. package/dist/esm/utils/getMessageHandlerNames.js.map +1 -0
  389. package/dist/esm/utils/index.js +15 -0
  390. package/dist/esm/utils/index.js.map +1 -0
  391. package/dist/esm/utils/isClass.js +5 -0
  392. package/dist/esm/utils/isClass.js.map +1 -0
  393. package/dist/esm/utils/sagaId.js +18 -0
  394. package/dist/esm/utils/sagaId.js.map +1 -0
  395. package/dist/esm/utils/setupOneTimeEmitterSubscription.js +42 -0
  396. package/dist/esm/utils/setupOneTimeEmitterSubscription.js.map +1 -0
  397. package/dist/esm/utils/subscribe.js +40 -0
  398. package/dist/esm/utils/subscribe.js.map +1 -0
  399. package/dist/esm/utils/validateHandlers.js +18 -0
  400. package/dist/esm/utils/validateHandlers.js.map +1 -0
  401. package/dist/esm/workers/AbstractWorkerProjection.js +52 -0
  402. package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -0
  403. package/dist/esm/workers/WorkerProxyProjection.js +105 -0
  404. package/dist/esm/workers/WorkerProxyProjection.js.map +1 -0
  405. package/dist/esm/workers/index.js +4 -0
  406. package/dist/esm/workers/index.js.map +1 -0
  407. package/dist/esm/workers/interfaces/IProxyProjection.js +2 -0
  408. package/dist/esm/workers/interfaces/IProxyProjection.js.map +1 -0
  409. package/dist/esm/workers/interfaces/IWorkerProjection.js +2 -0
  410. package/dist/esm/workers/interfaces/IWorkerProjection.js.map +1 -0
  411. package/dist/esm/workers/interfaces/index.js +2 -0
  412. package/dist/esm/workers/interfaces/index.js.map +1 -0
  413. package/dist/esm/workers/protocol.js +11 -0
  414. package/dist/esm/workers/protocol.js.map +1 -0
  415. package/dist/esm/workers/utils/ProjectionView.js +2 -0
  416. package/dist/esm/workers/utils/ProjectionView.js.map +1 -0
  417. package/dist/esm/workers/utils/createWorker.js +51 -0
  418. package/dist/esm/workers/utils/createWorker.js.map +1 -0
  419. package/dist/esm/workers/utils/createWorkerInstance.js +23 -0
  420. package/dist/esm/workers/utils/createWorkerInstance.js.map +1 -0
  421. package/dist/esm/workers/utils/index.js +5 -0
  422. package/dist/esm/workers/utils/index.js.map +1 -0
  423. package/dist/esm/workers/utils/nodeEndpoint.js +5 -0
  424. package/dist/esm/workers/utils/nodeEndpoint.js.map +1 -0
  425. package/dist/esm/workers/utils/workerProxyFactory.js +18 -0
  426. package/dist/esm/workers/utils/workerProxyFactory.js.map +1 -0
  427. package/dist/types/AbstractAggregate.d.ts +80 -0
  428. package/dist/types/AbstractProjection.d.ts +77 -0
  429. package/dist/types/AbstractSaga.d.ts +42 -0
  430. package/dist/types/AggregateCommandHandler.d.ts +22 -0
  431. package/dist/types/CommandBus.d.ts +4 -0
  432. package/dist/types/CqrsContainerBuilder.d.ts +21 -0
  433. package/dist/types/Event.d.ts +9 -0
  434. package/dist/types/EventDispatchPipeline.d.ts +16 -0
  435. package/dist/types/EventDispatcher.d.ts +39 -0
  436. package/dist/types/EventIdAugmentor.d.ts +12 -0
  437. package/dist/types/EventStore.d.ts +29 -0
  438. package/dist/types/SagaEventHandler.d.ts +22 -0
  439. package/dist/types/errors/ConcurrencyError.d.ts +9 -0
  440. package/dist/types/errors/index.d.ts +1 -0
  441. package/dist/types/in-memory/InMemoryEventStorage.d.ts +24 -0
  442. package/dist/types/in-memory/InMemoryLock.d.ts +23 -0
  443. package/dist/types/in-memory/InMemoryMessageBus.d.ts +45 -0
  444. package/dist/types/in-memory/InMemorySnapshotStorage.d.ts +37 -0
  445. package/dist/types/in-memory/InMemoryView.d.ts +53 -0
  446. package/dist/types/in-memory/index.d.ts +5 -0
  447. package/dist/types/in-memory/utils/index.d.ts +1 -0
  448. package/dist/types/in-memory/utils/nextCycle.d.ts +4 -0
  449. package/dist/types/index.d.ts +15 -0
  450. package/dist/types/interfaces/IAggregate.d.ts +78 -0
  451. package/dist/types/interfaces/IAggregateSnapshotStorage.d.ts +8 -0
  452. package/dist/types/interfaces/ICommand.d.ts +2 -0
  453. package/dist/types/interfaces/ICommandBus.d.ts +15 -0
  454. package/dist/types/interfaces/IContainer.d.ts +37 -0
  455. package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +29 -0
  456. package/dist/types/interfaces/IEvent.d.ts +7 -0
  457. package/dist/types/interfaces/IEventBus.d.ts +6 -0
  458. package/dist/types/interfaces/IEventDispatcher.d.ts +6 -0
  459. package/dist/types/interfaces/IEventLocker.d.ts +28 -0
  460. package/dist/types/interfaces/IEventReceptor.d.ts +5 -0
  461. package/dist/types/interfaces/IEventSet.d.ts +3 -0
  462. package/dist/types/interfaces/IEventStorageReader.d.ts +48 -0
  463. package/dist/types/interfaces/IEventStore.d.ts +9 -0
  464. package/dist/types/interfaces/IEventStream.d.ts +2 -0
  465. package/dist/types/interfaces/IIdentifierProvider.d.ts +10 -0
  466. package/dist/types/interfaces/ILocker.d.ts +8 -0
  467. package/dist/types/interfaces/ILogger.d.ts +22 -0
  468. package/dist/types/interfaces/IMessage.d.ts +23 -0
  469. package/dist/types/interfaces/IMutableState.d.ts +14 -0
  470. package/dist/types/interfaces/IObjectStorage.d.ts +8 -0
  471. package/dist/types/interfaces/IObservable.d.ts +15 -0
  472. package/dist/types/interfaces/IObservableQueueProvider.d.ts +8 -0
  473. package/dist/types/interfaces/IObserver.d.ts +4 -0
  474. package/dist/types/interfaces/IProjection.d.ts +17 -0
  475. package/dist/types/interfaces/ISaga.d.ts +38 -0
  476. package/dist/types/interfaces/ISnapshotEvent.d.ts +7 -0
  477. package/dist/types/interfaces/IViewLocker.d.ts +34 -0
  478. package/dist/types/interfaces/Identifier.d.ts +1 -0
  479. package/dist/types/interfaces/index.d.ts +29 -0
  480. package/dist/types/interfaces/isObject.d.ts +1 -0
  481. package/dist/types/rabbitmq/IContainer.d.ts +19 -0
  482. package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +38 -0
  483. package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +44 -0
  484. package/dist/types/rabbitmq/RabbitMqGateway.d.ts +133 -0
  485. package/dist/types/rabbitmq/index.d.ts +4 -0
  486. package/dist/types/rabbitmq/utils/index.d.ts +2 -0
  487. package/dist/types/rabbitmq/utils/registerExitCleanup.d.ts +10 -0
  488. package/dist/types/rabbitmq/utils/resolveProvider.d.ts +3 -0
  489. package/dist/types/sqlite/AbstractSqliteAccessor.d.ts +25 -0
  490. package/dist/types/sqlite/AbstractSqliteObjectProjection.d.ts +8 -0
  491. package/dist/types/sqlite/AbstractSqliteView.d.ts +23 -0
  492. package/dist/types/sqlite/IContainer.d.ts +7 -0
  493. package/dist/types/sqlite/SqliteEventLocker.d.ts +30 -0
  494. package/dist/types/sqlite/SqliteObjectStorage.d.ts +17 -0
  495. package/dist/types/sqlite/SqliteObjectView.d.ts +19 -0
  496. package/dist/types/sqlite/SqliteProjectionDataParams.d.ts +14 -0
  497. package/dist/types/sqlite/SqliteViewLocker.d.ts +31 -0
  498. package/dist/types/sqlite/index.d.ts +9 -0
  499. package/dist/types/sqlite/queries/eventLockTableInit.d.ts +1 -0
  500. package/dist/types/sqlite/queries/index.d.ts +2 -0
  501. package/dist/types/sqlite/queries/viewLockTableInit.d.ts +1 -0
  502. package/dist/types/sqlite/utils/getEventId.d.ts +5 -0
  503. package/dist/types/sqlite/utils/guid.d.ts +4 -0
  504. package/dist/types/sqlite/utils/index.d.ts +2 -0
  505. package/dist/types/utils/Deferred.d.ts +13 -0
  506. package/dist/types/utils/Lock.d.ts +30 -0
  507. package/dist/types/utils/MapAssertable.d.ts +11 -0
  508. package/dist/types/utils/assert.d.ts +20 -0
  509. package/dist/types/utils/clone.d.ts +1 -0
  510. package/dist/types/utils/extractErrorDetails.d.ts +8 -0
  511. package/dist/types/utils/getClassName.d.ts +4 -0
  512. package/dist/types/utils/getHandler.d.ts +7 -0
  513. package/dist/types/utils/getMessageHandlerNames.d.ts +12 -0
  514. package/dist/types/utils/index.d.ts +14 -0
  515. package/dist/types/utils/isClass.d.ts +1 -0
  516. package/dist/types/utils/sagaId.d.ts +6 -0
  517. package/dist/types/utils/setupOneTimeEmitterSubscription.d.ts +12 -0
  518. package/dist/types/utils/subscribe.d.ts +9 -0
  519. package/dist/types/utils/validateHandlers.d.ts +4 -0
  520. package/dist/types/workers/AbstractWorkerProjection.d.ts +25 -0
  521. package/dist/types/workers/WorkerProxyProjection.d.ts +25 -0
  522. package/dist/types/workers/index.d.ts +3 -0
  523. package/dist/types/workers/interfaces/IProxyProjection.d.ts +15 -0
  524. package/dist/types/workers/interfaces/IWorkerProjection.d.ts +19 -0
  525. package/dist/types/workers/interfaces/index.d.ts +2 -0
  526. package/dist/types/workers/protocol.d.ts +10 -0
  527. package/dist/types/workers/utils/ProjectionView.d.ts +2 -0
  528. package/dist/types/workers/utils/createWorker.d.ts +10 -0
  529. package/dist/types/workers/utils/createWorkerInstance.d.ts +11 -0
  530. package/dist/types/workers/utils/index.d.ts +5 -0
  531. package/dist/types/workers/utils/nodeEndpoint.d.ts +2 -0
  532. package/dist/types/workers/utils/workerProxyFactory.d.ts +14 -0
  533. package/package.json +124 -35
  534. package/dist/AbstractAggregate.js +0 -178
  535. package/dist/AbstractAggregate.js.map +0 -1
  536. package/dist/AbstractProjection.js +0 -121
  537. package/dist/AbstractProjection.js.map +0 -1
  538. package/dist/AbstractSaga.js +0 -99
  539. package/dist/AbstractSaga.js.map +0 -1
  540. package/dist/AggregateCommandHandler.js +0 -85
  541. package/dist/AggregateCommandHandler.js.map +0 -1
  542. package/dist/CommandBus.js +0 -77
  543. package/dist/CommandBus.js.map +0 -1
  544. package/dist/CqrsContainerBuilder.js +0 -77
  545. package/dist/CqrsContainerBuilder.js.map +0 -1
  546. package/dist/Event.js +0 -43
  547. package/dist/Event.js.map +0 -1
  548. package/dist/EventStore.js +0 -229
  549. package/dist/EventStore.js.map +0 -1
  550. package/dist/SagaEventHandler.js +0 -117
  551. package/dist/SagaEventHandler.js.map +0 -1
  552. package/dist/index.js +0 -39
  553. package/dist/index.js.map +0 -1
  554. package/dist/infrastructure/InMemoryEventStorage.js +0 -53
  555. package/dist/infrastructure/InMemoryEventStorage.js.map +0 -1
  556. package/dist/infrastructure/InMemoryLock.js +0 -68
  557. package/dist/infrastructure/InMemoryLock.js.map +0 -1
  558. package/dist/infrastructure/InMemoryMessageBus.js +0 -95
  559. package/dist/infrastructure/InMemoryMessageBus.js.map +0 -1
  560. package/dist/infrastructure/InMemorySnapshotStorage.js +0 -26
  561. package/dist/infrastructure/InMemorySnapshotStorage.js.map +0 -1
  562. package/dist/infrastructure/InMemoryView.js.map +0 -1
  563. package/dist/infrastructure/utils/Deferred.js.map +0 -1
  564. package/dist/infrastructure/utils/index.js.map +0 -1
  565. package/dist/infrastructure/utils/nextCycle.js.map +0 -1
  566. package/dist/interfaces.js.map +0 -1
  567. package/dist/utils/getClassName.js.map +0 -1
  568. package/dist/utils/getHandledMessageTypes.js +0 -18
  569. package/dist/utils/getHandledMessageTypes.js.map +0 -1
  570. package/dist/utils/getHandler.js.map +0 -1
  571. package/dist/utils/getMessageHandlerNames.js.map +0 -1
  572. package/dist/utils/index.js.map +0 -1
  573. package/dist/utils/isClass.js.map +0 -1
  574. package/dist/utils/setupOneTimeEmitterSubscription.js.map +0 -1
  575. package/dist/utils/subscribe.js +0 -39
  576. package/dist/utils/subscribe.js.map +0 -1
  577. package/dist/utils/validateHandlers.js.map +0 -1
  578. package/src/AbstractAggregate.ts +0 -223
  579. package/src/AbstractProjection.ts +0 -172
  580. package/src/AbstractSaga.ts +0 -118
  581. package/src/AggregateCommandHandler.ts +0 -129
  582. package/src/CommandBus.ts +0 -98
  583. package/src/CqrsContainerBuilder.ts +0 -120
  584. package/src/Event.ts +0 -43
  585. package/src/EventStore.ts +0 -315
  586. package/src/SagaEventHandler.ts +0 -161
  587. package/src/index.ts +0 -26
  588. package/src/infrastructure/InMemoryEventStorage.ts +0 -68
  589. package/src/infrastructure/InMemoryLock.ts +0 -73
  590. package/src/infrastructure/InMemoryMessageBus.ts +0 -118
  591. package/src/infrastructure/InMemorySnapshotStorage.ts +0 -27
  592. package/src/infrastructure/InMemoryView.ts +0 -221
  593. package/src/infrastructure/utils/Deferred.ts +0 -41
  594. package/src/infrastructure/utils/index.ts +0 -2
  595. package/src/infrastructure/utils/nextCycle.ts +0 -4
  596. package/src/interfaces.ts +0 -328
  597. package/src/utils/getClassName.ts +0 -6
  598. package/src/utils/getHandledMessageTypes.ts +0 -20
  599. package/src/utils/getHandler.ts +0 -20
  600. package/src/utils/getMessageHandlerNames.ts +0 -44
  601. package/src/utils/index.ts +0 -8
  602. package/src/utils/isClass.ts +0 -4
  603. package/src/utils/setupOneTimeEmitterSubscription.ts +0 -57
  604. package/src/utils/subscribe.ts +0 -51
  605. package/src/utils/validateHandlers.ts +0 -19
  606. /package/dist/{infrastructure → cjs}/utils/Deferred.js +0 -0
  607. /package/dist/{utils → cjs/utils}/getClassName.js +0 -0
  608. /package/dist/{utils → cjs/utils}/isClass.js +0 -0
@@ -0,0 +1,22 @@
1
+ export interface ILogger {
2
+ log(level: 'debug' | 'info' | 'warn' | 'error', message: string, meta?: {
3
+ [key: string]: any;
4
+ }): void;
5
+ debug(message: string, meta?: {
6
+ [key: string]: any;
7
+ }): void;
8
+ info(message: string, meta?: {
9
+ [key: string]: any;
10
+ }): void;
11
+ warn(message: string, meta?: {
12
+ [key: string]: any;
13
+ }): void;
14
+ error(message: string, meta?: {
15
+ [key: string]: any;
16
+ }): void;
17
+ }
18
+ export interface IExtendableLogger extends ILogger {
19
+ child(meta?: {
20
+ [key: string]: any;
21
+ }): IExtendableLogger;
22
+ }
@@ -0,0 +1,23 @@
1
+ import type { Identifier } from './Identifier.ts';
2
+ export type SagaOriginsMap = Record<string, string>;
3
+ export interface IMessage<TPayload = any> {
4
+ /** Event or command type */
5
+ type: string;
6
+ /**
7
+ * Target aggregate identifier for commands,
8
+ * originating aggregate identifier for events
9
+ */
10
+ aggregateId?: Identifier;
11
+ /** Aggregate version at the time of the message */
12
+ aggregateVersion?: number;
13
+ /** Starter event ids of sagas associated with this message, keyed by saga descriptor */
14
+ sagaOrigins?: SagaOriginsMap;
15
+ /** Business data */
16
+ payload?: TPayload;
17
+ /**
18
+ * Optional metadata/context (e.g. auth info, request id);
19
+ * Commonly set on commands, then copied to emitted events
20
+ */
21
+ context?: any;
22
+ }
23
+ export declare const isMessage: (obj: unknown) => obj is IMessage;
@@ -0,0 +1,14 @@
1
+ import type { IEvent } from './IEvent.ts';
2
+ export interface IMutableState {
3
+ /**
4
+ * Optional list of event types that are required to restore this state.
5
+ *
6
+ * Exposed by AbstractAggregate as `restoresFrom` and may be used by the command handler
7
+ * to load only the state-relevant events when rehydrating an aggregate.
8
+ */
9
+ handles?: Readonly<string[]>;
10
+ /**
11
+ * Apply a single event to mutate the state.
12
+ */
13
+ mutate(event: IEvent): void;
14
+ }
@@ -0,0 +1,8 @@
1
+ import type { Identifier } from './Identifier.ts';
2
+ export interface IObjectStorage<TRecord> {
3
+ get(id: Identifier): Promise<TRecord | undefined> | TRecord | undefined;
4
+ create(id: Identifier, r: TRecord): Promise<any> | any;
5
+ update(id: Identifier, cb: (r: TRecord) => TRecord): Promise<any> | any;
6
+ updateEnforcingNew(id: Identifier, cb: (r?: TRecord) => TRecord): Promise<any> | any;
7
+ delete(id: Identifier): Promise<any> | any;
8
+ }
@@ -0,0 +1,15 @@
1
+ import type { IMessage } from './IMessage.ts';
2
+ export interface IMessageHandler {
3
+ (message: IMessage, meta?: Record<string, any>): unknown | Promise<unknown>;
4
+ }
5
+ export interface IObservable {
6
+ /**
7
+ * Setup a listener for a specific event type
8
+ */
9
+ on(type: string, handler: IMessageHandler): void;
10
+ /**
11
+ * Remove previously installed listener
12
+ */
13
+ off(type: string, handler: IMessageHandler): void;
14
+ }
15
+ export declare const isObservable: (obj: unknown) => obj is IObservable;
@@ -0,0 +1,8 @@
1
+ import type { IObservable } from './IObservable.ts';
2
+ export interface IObservableQueueProvider {
3
+ /**
4
+ * Get or create a named queue, which delivers events to a single handler only
5
+ */
6
+ queue(name: string): IObservable;
7
+ }
8
+ export declare const isObservableQueueProvider: (obj: unknown) => obj is IObservableQueueProvider;
@@ -0,0 +1,4 @@
1
+ import type { IObservable } from './IObservable.ts';
2
+ export interface IObserver {
3
+ subscribe(observable: IObservable): void;
4
+ }
@@ -0,0 +1,17 @@
1
+ import type { IObserver } from './IObserver.ts';
2
+ import type { IObservable } from './IObservable.ts';
3
+ import type { IEventStorageReader } from './IEventStorageReader.ts';
4
+ import type { IEvent } from './IEvent.ts';
5
+ export interface IProjection<TView> extends IObserver {
6
+ readonly view: TView;
7
+ /** Subscribe to new events */
8
+ subscribe(eventStore: IObservable): void;
9
+ /** Restore view state from not-yet-projected events */
10
+ restore(eventStore: IEventStorageReader): Promise<void> | void;
11
+ /** Project new event */
12
+ project(event: IEvent, meta?: Record<string, any>): Promise<void> | void;
13
+ }
14
+ export interface IProjectionConstructor {
15
+ new (c?: any): IProjection<any>;
16
+ readonly handles?: string[];
17
+ }
@@ -0,0 +1,38 @@
1
+ import type { IEvent } from './IEvent.ts';
2
+ import type { IEventSet } from './IEventSet.ts';
3
+ import type { ICommand } from './ICommand.ts';
4
+ import type { Identifier } from './Identifier.ts';
5
+ export interface ISaga {
6
+ /**
7
+ * Apply a historical event to restore saga state.
8
+ */
9
+ mutate(event: IEvent): unknown | Promise<unknown>;
10
+ /**
11
+ * Process an incoming event.
12
+ *
13
+ * @returns Commands produced by the saga in response to the event
14
+ */
15
+ handle(event: IEvent): ReadonlyArray<ICommand> | Promise<ReadonlyArray<ICommand>>;
16
+ }
17
+ export type ISagaConstructorParams = {
18
+ id: Identifier;
19
+ /** @deprecated Past events will be passed to the `mutate` method */
20
+ events?: IEventSet;
21
+ };
22
+ export type ISagaFactory = (options: ISagaConstructorParams) => ISaga;
23
+ export interface ISagaConstructor {
24
+ new (options: ISagaConstructorParams): ISaga;
25
+ /**
26
+ * Override to provide a stable saga descriptor used as a key in `message.sagaOrigins`.
27
+ * Defaults to the Saga class name.
28
+ */
29
+ readonly sagaDescriptor?: string;
30
+ /**
31
+ * Optional list of event types that trigger new saga start.
32
+ *
33
+ * When not defined, saga start is inferred by the absence of `message.sagaOrigins[sagaDescriptor]`.
34
+ */
35
+ readonly startsWith?: string[];
36
+ /** List of events being handled by Saga */
37
+ readonly handles: string[];
38
+ }
@@ -0,0 +1,7 @@
1
+ import { type IEvent } from './IEvent.ts';
2
+ export declare const SNAPSHOT_EVENT_TYPE: 'snapshot';
3
+ export interface ISnapshotEvent<TState = any> extends IEvent<TState> {
4
+ type: typeof SNAPSHOT_EVENT_TYPE;
5
+ payload: TState;
6
+ }
7
+ export declare const isSnapshotEvent: (event?: unknown) => event is ISnapshotEvent;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Interface for managing view restoration state to prevent early access to an inconsistent view
3
+ * or concurrent restoration by another process.
4
+ */
5
+ export interface IViewLocker {
6
+ /**
7
+ * Indicates whether the view is fully restored and ready to accept new event projections.
8
+ */
9
+ ready: boolean;
10
+ /**
11
+ * Locks the view to prevent external read/write operations.
12
+ *
13
+ * @returns `true` if the lock is successfully acquired, `false` otherwise.
14
+ */
15
+ lock(): Promise<boolean> | boolean;
16
+ /**
17
+ * Unlocks the view, allowing external read/write operations to resume.
18
+ */
19
+ unlock(): Promise<void> | void;
20
+ /**
21
+ * Waits until the view is fully restored and ready to accept new events.
22
+ *
23
+ * @param eventType The event type to listen for (`"ready"`).
24
+ * @returns A promise that resolves when the view is ready.
25
+ */
26
+ once(eventType: 'ready'): Promise<void>;
27
+ }
28
+ /**
29
+ * Checks if a given object conforms to the `IViewLocker` interface.
30
+ *
31
+ * @param view The object to check.
32
+ * @returns `true` if the object implements `IViewLocker`, `false` otherwise.
33
+ */
34
+ export declare const isViewLocker: (view: unknown) => view is IViewLocker;
@@ -0,0 +1 @@
1
+ export type Identifier = string | number | object;
@@ -0,0 +1,29 @@
1
+ export * from './IAggregate.ts';
2
+ export * from './IAggregateSnapshotStorage.ts';
3
+ export * from './ICommand.ts';
4
+ export * from './ICommandBus.ts';
5
+ export * from './IContainer.ts';
6
+ export * from './Identifier.ts';
7
+ export * from './IDispatchPipelineProcessor.ts';
8
+ export * from './IEvent.ts';
9
+ export * from './IEventBus.ts';
10
+ export * from './IEventDispatcher.ts';
11
+ export * from './IEventLocker.ts';
12
+ export * from './IEventReceptor.ts';
13
+ export * from './IEventSet.ts';
14
+ export * from './IEventStorageReader.ts';
15
+ export * from './IEventStore.ts';
16
+ export * from './IEventStream.ts';
17
+ export * from './IIdentifierProvider.ts';
18
+ export * from './ILocker.ts';
19
+ export * from './ILogger.ts';
20
+ export * from './IMessage.ts';
21
+ export * from './IMutableState.ts';
22
+ export * from './IObjectStorage.ts';
23
+ export * from './IObservable.ts';
24
+ export * from './IObservableQueueProvider.ts';
25
+ export * from './IObserver.ts';
26
+ export * from './IProjection.ts';
27
+ export * from './ISaga.ts';
28
+ export * from './ISnapshotEvent.ts';
29
+ export * from './IViewLocker.ts';
@@ -0,0 +1 @@
1
+ export declare const isObject: (obj: unknown) => obj is Record<string, any>;
@@ -0,0 +1,19 @@
1
+ import type { ChannelModel } from 'amqplib';
2
+ import type { RabbitMqCommandBusConfig } from './RabbitMqCommandBus.ts';
3
+ import type { RabbitMqEventBusConfig } from './RabbitMqEventBus.ts';
4
+ import type { RabbitMqGateway } from './RabbitMqGateway.ts';
5
+ import type { ConfigProvider } from './utils/index.ts';
6
+ declare module 'node-cqrs' {
7
+ interface IContainer {
8
+ rabbitMqGateway?: RabbitMqGateway;
9
+ rabbitMqConnectionFactory?: () => Promise<ChannelModel>;
10
+ /**
11
+ * Provides app id for publish metadata and `ignoreOwn` filtering.
12
+ *
13
+ * Defaults to a random string for each {@link RabbitMqGateway} instance.
14
+ */
15
+ rabbitMqAppId?: ConfigProvider<string>;
16
+ rabbitMqEventBusConfig?: ConfigProvider<RabbitMqEventBusConfig>;
17
+ rabbitMqCommandBusConfig?: ConfigProvider<RabbitMqCommandBusConfig>;
18
+ }
19
+ }
@@ -0,0 +1,38 @@
1
+ import type { IContainer } from 'node-cqrs';
2
+ import type { ICommand, ICommandBus, IMessageHandler } from '../interfaces/index.ts';
3
+ import { type Subscription } from './RabbitMqGateway.ts';
4
+ export type RabbitMqCommandBusConfig = Partial<Pick<Subscription, 'exchange' | 'queueName' | 'ignoreOwn' | 'concurrentLimit' | 'handlerProcessTimeout' | 'queueExpires'>>;
5
+ /**
6
+ * RabbitMQ-backed command bus: delivers each message to exactly
7
+ * one consumer via a durable named queue.
8
+ *
9
+ * Used for point-to-point command delivery or durable event processing.
10
+ */
11
+ export declare class RabbitMqCommandBus implements ICommandBus {
12
+ #private;
13
+ static DEFAULT_EXCHANGE: string;
14
+ constructor({ rabbitMqGateway, rabbitMqCommandBusConfig }: Pick<IContainer, 'rabbitMqGateway' | 'rabbitMqCommandBusConfig'>);
15
+ /**
16
+ * Format and send a command for execution
17
+ */
18
+ send(commandType: string, aggregateId?: string, options?: {
19
+ payload?: object;
20
+ context?: object;
21
+ }): Promise<any>;
22
+ /**
23
+ * Sends a pre-built command to the exchange, routed to the durable queue.
24
+ * Exactly one consumer will process it.
25
+ */
26
+ send(command: ICommand): Promise<any>;
27
+ /** @deprecated Use {@link send} */
28
+ sendRaw(command: ICommand): Promise<any>;
29
+ /**
30
+ * Registers a message handler for a specific message type on the durable queue.
31
+ * Only one consumer receives each message.
32
+ */
33
+ on(messageType: string, handler: IMessageHandler): Promise<void>;
34
+ /**
35
+ * Removes a previously registered message handler.
36
+ */
37
+ off(messageType: string, handler: IMessageHandler): Promise<void>;
38
+ }
@@ -0,0 +1,44 @@
1
+ import type { IContainer } from 'node-cqrs';
2
+ import type { IEventBus, IMessage, IMessageHandler, IObservable, IObservableQueueProvider } from '../interfaces/index.ts';
3
+ import { type Subscription, type SubscribeResult } from './RabbitMqGateway.ts';
4
+ export type RabbitMqEventBusConfig = Partial<Pick<Subscription, 'exchange' | 'queueName' | 'ignoreOwn' | 'concurrentLimit' | 'handlerProcessTimeout' | 'queueExpires'>>;
5
+ /**
6
+ * RabbitMQ-backed event bus: delivers each published message
7
+ * to all subscribers.
8
+ *
9
+ * By default uses an exclusive (non-durable) queue per connection.
10
+ * Set `queueName` in config for a durable queue that survives restarts.
11
+ *
12
+ * Optionally ignores messages published by this instance (default: true).
13
+ *
14
+ * Supports named durable queues via {@link queue} for single-consumer delivery.
15
+ */
16
+ export declare class RabbitMqEventBus implements IEventBus, IObservableQueueProvider {
17
+ #private;
18
+ static get allEventsWildcard(): string;
19
+ static DEFAULT_EXCHANGE: string;
20
+ constructor({ rabbitMqGateway, rabbitMqEventBusConfig }: Pick<IContainer, 'rabbitMqGateway' | 'rabbitMqEventBusConfig'>);
21
+ /**
22
+ * Publishes a message to the event exchange.
23
+ * The message will be delivered to all subscribers.
24
+ */
25
+ publish(message: IMessage): Promise<void>;
26
+ /**
27
+ * Registers a message handler for a specific message type.
28
+ *
29
+ * When `queueName` is set in config, uses a durable queue
30
+ * that survives broker restarts. Otherwise uses an exclusive
31
+ * (non-durable) queue that is deleted on disconnect.
32
+ */
33
+ on(eventType: string, handler: IMessageHandler): Promise<SubscribeResult>;
34
+ /**
35
+ * Removes a previously registered message handler for a specific message type.
36
+ */
37
+ off(eventType: string, handler: IMessageHandler): Promise<void>;
38
+ /**
39
+ * Returns a {@link RabbitMqCommandBus} that uses a durable queue with the given name.
40
+ * Messages published to the event exchange are also delivered to this queue,
41
+ * but only one consumer will process each message.
42
+ */
43
+ queue(queueName: string): IObservable;
44
+ }
@@ -0,0 +1,133 @@
1
+ import type { ChannelModel } from 'amqplib';
2
+ import type { IContainer } from 'node-cqrs';
3
+ import type { IMessage } from '../interfaces/index.ts';
4
+ import { EventEmitter } from 'events';
5
+ type MessageHandler = (m: IMessage) => Promise<unknown> | unknown;
6
+ /**
7
+ * Represents a subscription to events from a RabbitMQ exchange.
8
+ */
9
+ export type Subscription = {
10
+ /** Name of the exchange to subscribe to */
11
+ exchange: string;
12
+ /** Optional durable queue name; if omitted, an exclusive temporary queue is used */
13
+ queueName?: string;
14
+ /** Specific event type (routing key) for filtering, defaults to all if omitted */
15
+ eventType?: string;
16
+ /** Callback function to process received messages */
17
+ handler: MessageHandler;
18
+ /** If true, messages originating from this instance are ignored */
19
+ ignoreOwn?: boolean;
20
+ /** Optional limit for concurrent message handling */
21
+ concurrentLimit?: number;
22
+ /**
23
+ * If true, the broker won't expect an acknowledgement of messages delivered to this consumer;
24
+ * i.e., it will dequeue messages as soon as they've been sent down the wire.
25
+ *
26
+ * Defaults to `false` - messages are acknowledged after successful handler completion or rejected on exception.
27
+ */
28
+ noAck?: boolean;
29
+ /**
30
+ * Handler timeout in milliseconds; if the handler does not complete within this time,
31
+ * the message is considered failed and is rejected.
32
+ *
33
+ * Defaults to 1h (`RabbitMqGateway.HANDLER_PROCESS_TIMEOUT`).
34
+ * Set to `0` to disable the timeout entirely.
35
+ */
36
+ handlerProcessTimeout?: number;
37
+ /**
38
+ * How long a durable queue may remain unused (no consumers, no new messages) before RabbitMQ
39
+ * automatically deletes it, in milliseconds.
40
+ *
41
+ * When set, the `x-expires` argument is passed to RabbitMQ on queue assertion (requires RabbitMQ ≥ 3.10
42
+ * for quorum queues). Set to `0` or leave `undefined` to keep the queue indefinitely.
43
+ */
44
+ queueExpires?: number;
45
+ /**
46
+ * Enables RabbitMQ single active consumer mode (`x-single-active-consumer`).
47
+ */
48
+ singleActiveConsumer?: boolean;
49
+ };
50
+ export type SubscribeResult = {
51
+ /** The actual queue name (may be auto-generated for exclusive queues) */
52
+ queue: string;
53
+ /** True when a new consumer was created for the queue in this call */
54
+ consumerCreated: boolean;
55
+ /** Number of ready messages in the queue at the time of subscription */
56
+ messageCount: number;
57
+ /** Number of consumers on the queue at the time of subscription (before this one) */
58
+ consumerCount: number;
59
+ };
60
+ interface RabbitMqGatewayConnected {
61
+ get connection(): ChannelModel;
62
+ }
63
+ type GatewayEvents = {
64
+ connected: [];
65
+ disconnected: [reason?: string];
66
+ };
67
+ /**
68
+ * RabbitMqGateway provides RabbitMQ-based publish/subscribe for ICommand/IEvent-style messages.
69
+ *
70
+ * It uses a fanout exchange to broadcast messages to all connected subscribers.
71
+ * The `on` and `off` methods allow you to register and remove handlers for specific event types.
72
+ * The `queue(name)` method creates or returns a durable queue with the given name, ensuring that
73
+ * all messages delivered to the fanout exchange are also routed to this queue.
74
+ */
75
+ export declare class RabbitMqGateway {
76
+ #private;
77
+ static HANDLER_PROCESS_TIMEOUT: number;
78
+ static ALL_EVENTS_WILDCARD: string;
79
+ static RECONNECT_DELAY: number;
80
+ get connection(): ChannelModel | undefined;
81
+ isConnected(): this is this & RabbitMqGatewayConnected;
82
+ constructor({ rabbitMqConnectionFactory, rabbitMqAppId, eventEmitterFactory, logger, process }: Partial<Pick<IContainer, 'logger' | 'process' | 'rabbitMqConnectionFactory' | 'rabbitMqAppId'>> & {
83
+ eventEmitterFactory?: () => EventEmitter<GatewayEvents>;
84
+ });
85
+ /** Returns this gateway's app id from `rabbitMqAppIdProvider` */
86
+ getAppId(): Promise<string>;
87
+ /**
88
+ * Establishes a connection to RabbitMQ.
89
+ * If a connection attempt is already in progress, it waits for it to complete.
90
+ * If the connection is lost, it attempts to reconnect automatically.
91
+ * Upon successful connection, it restores any previously active subscriptions.
92
+ *
93
+ * This method is called automatically by other methods if a connection is required but not yet established.
94
+ *
95
+ * @returns A promise that resolves with the ChannelModel representing the established connection.
96
+ */
97
+ connect(): Promise<ChannelModel>;
98
+ disconnect(): Promise<void>;
99
+ subscribeToQueue(exchange: string, queueName: string, handler: MessageHandler, options?: Omit<Subscription, 'exchange' | 'queueName' | 'handler'>): Promise<SubscribeResult>;
100
+ /**
101
+ * Subscribes to a non-durable, exclusive queue without requiring acknowledgments.
102
+ * The queue is deleted when the connection closes.
103
+ * Messages are considered "delivered" upon receipt.
104
+ * Failed message processing does not result in redelivery or dead-lettering.
105
+ */
106
+ subscribeToFanout(exchange: string, handler: MessageHandler, options?: Omit<Subscription, 'exchange' | 'handler'>): Promise<SubscribeResult>;
107
+ /**
108
+ * Subscribes to events from a specified exchange.
109
+ *
110
+ * This method sets up the necessary RabbitMQ topology (exchange, queue, bindings) based on the provided details.
111
+ * If a `queueName` is provided, it asserts a durable queue with a dead-letter queue for failed messages.
112
+ * If `queueName` is omitted, it uses or creates a temporary, exclusive queue for the connection.
113
+ * Then it starts consuming messages from the queue with the specified concurrency limit, if specified.
114
+ *
115
+ * @param subscription - The subscription details.
116
+ * @param subscription.exchange - The name of the exchange to subscribe to.
117
+ * @param subscription.queueName - Optional. The name of the durable queue. If omitted, an exclusive queue is used.
118
+ * @param subscription.eventType - The routing key or pattern to bind the queue with.
119
+ * @param subscription.concurrentLimit - Optional. The maximum number of concurrent messages to process.
120
+ * @returns A promise that resolves when the subscription is successfully set up.
121
+ */
122
+ subscribe(subscription: Subscription): Promise<SubscribeResult>;
123
+ unsubscribe(subscription: Pick<Subscription, 'exchange' | 'queueName' | 'eventType' | 'handler'>): Promise<void>;
124
+ /**
125
+ * Publishes an event to the fanout exchange.
126
+ * The event will be delivered to all subscribers, except this instance's own consumer.
127
+ */
128
+ publish(exchange: string, message: IMessage): Promise<void>;
129
+ on<K extends keyof GatewayEvents>(event: K, fn: (...args: GatewayEvents[K]) => void): this;
130
+ once<K extends keyof GatewayEvents>(event: K, fn: (...args: GatewayEvents[K]) => void): this;
131
+ off<K extends keyof GatewayEvents>(event: K, fn: (...args: GatewayEvents[K]) => void): this;
132
+ }
133
+ export {};
@@ -0,0 +1,4 @@
1
+ import './IContainer.ts';
2
+ export * from './RabbitMqEventBus.ts';
3
+ export * from './RabbitMqGateway.ts';
4
+ export * from './RabbitMqCommandBus.ts';
@@ -0,0 +1,2 @@
1
+ export * from './registerExitCleanup.ts';
2
+ export * from './resolveProvider.ts';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Registers cleanup handlers for SIGINT and SIGTERM signals on a Node.js process.
3
+ * Executes the provided cleanup procedure when one of these signals is received,
4
+ * then removes the listeners to allow the process to exit gracefully.
5
+ *
6
+ * @returns An object with a `dispose` method to manually remove the registered signal handlers.
7
+ */
8
+ export declare const registerExitCleanup: (process: NodeJS.Process | undefined, cleanupProcedure: () => Promise<unknown> | unknown) => {
9
+ dispose: () => void;
10
+ };
@@ -0,0 +1,3 @@
1
+ export type ConfigProvider<T> = T | (() => T | Promise<T>);
2
+ export declare function resolveProvider<T>(provider: ConfigProvider<T>): Promise<T>;
3
+ export declare function resolveProvider<T>(provider: ConfigProvider<T> | undefined): Promise<T | undefined>;
@@ -0,0 +1,25 @@
1
+ import type { IContainer } from 'node-cqrs';
2
+ import type { Database } from 'better-sqlite3';
3
+ /**
4
+ * Abstract base class for accessing a SQLite database.
5
+ *
6
+ * Manages the database connection lifecycle, ensuring initialization via `assertDb`.
7
+ * Supports providing a database instance directly or a factory function for lazy initialization.
8
+ *
9
+ * Subclasses must implement the `initialize` method for specific setup tasks.
10
+ */
11
+ export declare abstract class AbstractSqliteAccessor {
12
+ #private;
13
+ protected db: Database | undefined;
14
+ constructor(c: Partial<Pick<IContainer, 'viewModelSqliteDb' | 'viewModelSqliteDbFactory'>>);
15
+ protected abstract initialize(db: Database): Promise<void> | void;
16
+ /**
17
+ * Ensures that the database connection is initialized.
18
+ * Uses a lock to prevent race conditions during concurrent initialization attempts.
19
+ * If the database is not already initialized, it creates the database connection
20
+ * using the provided factory and calls the `initialize` method.
21
+ *
22
+ * This method is idempotent and safe to call multiple times.
23
+ */
24
+ assertConnection(): Promise<void>;
25
+ }
@@ -0,0 +1,8 @@
1
+ import type { IContainer } from 'node-cqrs';
2
+ import { AbstractProjection } from '../AbstractProjection.ts';
3
+ import { SqliteObjectView } from './SqliteObjectView.ts';
4
+ export declare abstract class AbstractSqliteObjectProjection<T> extends AbstractProjection<SqliteObjectView<T>> {
5
+ static get tableName(): string;
6
+ static get schemaVersion(): string;
7
+ constructor({ viewModelSqliteDb, viewModelSqliteDbFactory, logger }: Pick<IContainer, 'viewModelSqliteDbFactory' | 'viewModelSqliteDb' | 'logger'>);
8
+ }
@@ -0,0 +1,23 @@
1
+ import type { IContainer } from 'node-cqrs';
2
+ import type { IEvent, IEventLocker, ILogger, IViewLocker } from '../interfaces/index.ts';
3
+ import { SqliteViewLocker, SqliteViewLockerParams } from './SqliteViewLocker.ts';
4
+ import { SqliteEventLocker, SqliteEventLockerParams } from './SqliteEventLocker.ts';
5
+ import { AbstractSqliteAccessor } from './AbstractSqliteAccessor.ts';
6
+ /**
7
+ * Base class for SQLite-backed projection views with restore locking and last-processed-event tracking
8
+ */
9
+ export declare abstract class AbstractSqliteView extends AbstractSqliteAccessor implements IViewLocker, IEventLocker {
10
+ protected readonly schemaVersion: string;
11
+ protected readonly viewLocker: SqliteViewLocker;
12
+ protected readonly eventLocker: SqliteEventLocker;
13
+ protected logger: ILogger | undefined;
14
+ get ready(): boolean;
15
+ constructor(options: Partial<Pick<IContainer, 'viewModelSqliteDb' | 'viewModelSqliteDbFactory' | 'logger'>> & SqliteEventLockerParams & SqliteViewLockerParams);
16
+ lock(): Promise<boolean>;
17
+ unlock(): void;
18
+ once(event: 'ready'): Promise<void>;
19
+ getLastEvent(): Promise<IEvent<any> | undefined>;
20
+ tryMarkAsProjecting(event: IEvent<any>): Promise<boolean>;
21
+ markAsProjected(event: IEvent<any>): Promise<void>;
22
+ markAsLastEvent(event: IEvent<any>): Promise<void>;
23
+ }
@@ -0,0 +1,7 @@
1
+ import type { Database } from 'better-sqlite3';
2
+ declare module 'node-cqrs' {
3
+ interface IContainer {
4
+ viewModelSqliteDbFactory?: () => Promise<Database> | Database;
5
+ viewModelSqliteDb?: Database;
6
+ }
7
+ }
@@ -0,0 +1,30 @@
1
+ import type { Database } from 'better-sqlite3';
2
+ import type { IContainer } from 'node-cqrs';
3
+ import type { IEvent, IEventLocker } from '../interfaces/index.ts';
4
+ import type { SqliteViewLockerParams } from './SqliteViewLocker.ts';
5
+ import type { SqliteProjectionDataParams } from './SqliteProjectionDataParams.ts';
6
+ import { AbstractSqliteAccessor } from './AbstractSqliteAccessor.ts';
7
+ export type SqliteEventLockerParams = SqliteProjectionDataParams & Pick<SqliteViewLockerParams, 'viewLockTableName'> & {
8
+ /**
9
+ * (Optional) SQLite table name where event locks are stored
10
+ *
11
+ * @default "tbl_event_lock"
12
+ */
13
+ eventLockTableName?: string;
14
+ /**
15
+ * (Optional) Time-to-live (TTL) duration in milliseconds
16
+ * for which an event remains in the "processing" state until released.
17
+ *
18
+ * @default 15_000
19
+ */
20
+ eventLockTtl?: number;
21
+ };
22
+ export declare class SqliteEventLocker extends AbstractSqliteAccessor implements IEventLocker {
23
+ #private;
24
+ constructor(o: Pick<IContainer, 'viewModelSqliteDb' | 'viewModelSqliteDbFactory'> & SqliteEventLockerParams);
25
+ protected initialize(db: Database): void;
26
+ tryMarkAsProjecting(event: IEvent<any>): Promise<boolean>;
27
+ markAsProjected(event: IEvent<any>): Promise<void>;
28
+ markAsLastEvent(event: IEvent<any>): Promise<void>;
29
+ getLastEvent(): Promise<IEvent<any> | undefined>;
30
+ }
@@ -0,0 +1,17 @@
1
+ import type { Database } from 'better-sqlite3';
2
+ import type { IContainer } from 'node-cqrs';
3
+ import type { IObjectStorage } from '../interfaces/index.ts';
4
+ import { AbstractSqliteAccessor } from './AbstractSqliteAccessor.ts';
5
+ export declare class SqliteObjectStorage<TRecord> extends AbstractSqliteAccessor implements IObjectStorage<TRecord> {
6
+ #private;
7
+ constructor(o: Pick<IContainer, 'viewModelSqliteDb' | 'viewModelSqliteDbFactory'> & {
8
+ tableName: string;
9
+ });
10
+ protected initialize(db: Database): void;
11
+ get(id: string): Promise<TRecord | undefined>;
12
+ getSync(id: string): TRecord | undefined;
13
+ create(id: string, data: TRecord): Promise<void>;
14
+ update(id: string, update: (r: TRecord) => TRecord): Promise<void>;
15
+ updateEnforcingNew(id: string, update: (r?: TRecord) => TRecord): Promise<void>;
16
+ delete(id: string): Promise<boolean>;
17
+ }
@@ -0,0 +1,19 @@
1
+ import { AbstractSqliteView } from './AbstractSqliteView.ts';
2
+ import type { IObjectStorage, IEventLocker } from '../interfaces/index.ts';
3
+ import type { Database } from 'better-sqlite3';
4
+ /**
5
+ * SQLite-backed object view with restore locking and last-processed-event tracking
6
+ */
7
+ export declare class SqliteObjectView<TRecord> extends AbstractSqliteView implements IObjectStorage<TRecord>, IEventLocker {
8
+ #private;
9
+ constructor(options: ConstructorParameters<typeof AbstractSqliteView>[0] & {
10
+ tableNamePrefix: string;
11
+ });
12
+ protected initialize(db: Database): Promise<void> | void;
13
+ get(id: string): Promise<TRecord | undefined>;
14
+ getSync(id: string): TRecord | undefined;
15
+ create(id: string, data: TRecord): Promise<void>;
16
+ update(id: string, update: (r: TRecord) => TRecord): Promise<void>;
17
+ updateEnforcingNew(id: string, update: (r?: TRecord) => TRecord): Promise<void>;
18
+ delete(id: string): Promise<boolean>;
19
+ }