node-cqrs 1.0.0 → 1.1.0-alpha.1

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 (273) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/README.md +115 -101
  3. package/dist/cjs/AbstractProjection.js +43 -18
  4. package/dist/cjs/AbstractProjection.js.map +1 -1
  5. package/dist/cjs/AggregateCommandHandler.js +27 -13
  6. package/dist/cjs/AggregateCommandHandler.js.map +1 -1
  7. package/dist/cjs/CqrsContainerBuilder.js +6 -1
  8. package/dist/cjs/CqrsContainerBuilder.js.map +1 -1
  9. package/dist/cjs/EventDispatchPipeline.js +12 -2
  10. package/dist/cjs/EventDispatchPipeline.js.map +1 -1
  11. package/dist/cjs/EventDispatcher.js +39 -10
  12. package/dist/cjs/EventDispatcher.js.map +1 -1
  13. package/dist/cjs/EventStore.js +7 -2
  14. package/dist/cjs/EventStore.js.map +1 -1
  15. package/dist/cjs/SagaEventHandler.js +54 -40
  16. package/dist/cjs/SagaEventHandler.js.map +1 -1
  17. package/dist/cjs/in-memory/InMemoryEventStorage.js +39 -24
  18. package/dist/cjs/in-memory/InMemoryEventStorage.js.map +1 -1
  19. package/dist/cjs/in-memory/InMemoryMessageBus.js +11 -5
  20. package/dist/cjs/in-memory/InMemoryMessageBus.js.map +1 -1
  21. package/dist/cjs/interfaces/IDispatchPipelineProcessor.js.map +1 -1
  22. package/dist/cjs/interfaces/IMessageMeta.js +3 -0
  23. package/dist/cjs/interfaces/IMessageMeta.js.map +1 -0
  24. package/dist/cjs/interfaces/IObservable.js.map +1 -1
  25. package/dist/cjs/interfaces/index.js +1 -0
  26. package/dist/cjs/interfaces/index.js.map +1 -1
  27. package/dist/cjs/mongodb/AbstractMongoAccessor.js +51 -0
  28. package/dist/cjs/mongodb/AbstractMongoAccessor.js.map +1 -0
  29. package/dist/cjs/mongodb/AbstractMongoObjectProjection.js +26 -0
  30. package/dist/cjs/mongodb/AbstractMongoObjectProjection.js.map +1 -0
  31. package/dist/cjs/mongodb/AbstractMongoView.js +57 -0
  32. package/dist/cjs/mongodb/AbstractMongoView.js.map +1 -0
  33. package/dist/cjs/mongodb/IContainer.js +3 -0
  34. package/dist/cjs/mongodb/IContainer.js.map +1 -0
  35. package/dist/cjs/mongodb/MongoEventLocker.js +104 -0
  36. package/dist/cjs/mongodb/MongoEventLocker.js.map +1 -0
  37. package/dist/cjs/mongodb/MongoEventStorage.js +200 -0
  38. package/dist/cjs/mongodb/MongoEventStorage.js.map +1 -0
  39. package/dist/cjs/mongodb/MongoObjectStorage.js +101 -0
  40. package/dist/cjs/mongodb/MongoObjectStorage.js.map +1 -0
  41. package/dist/cjs/mongodb/MongoObjectView.js +41 -0
  42. package/dist/cjs/mongodb/MongoObjectView.js.map +1 -0
  43. package/dist/cjs/mongodb/MongoProjectionDataParams.js +3 -0
  44. package/dist/cjs/mongodb/MongoProjectionDataParams.js.map +1 -0
  45. package/dist/cjs/mongodb/MongoViewLocker.js +136 -0
  46. package/dist/cjs/mongodb/MongoViewLocker.js.map +1 -0
  47. package/dist/cjs/mongodb/index.js +28 -0
  48. package/dist/cjs/mongodb/index.js.map +1 -0
  49. package/dist/cjs/mongodb/registerExitCleanup.js +28 -0
  50. package/dist/cjs/mongodb/registerExitCleanup.js.map +1 -0
  51. package/dist/cjs/mongodb/utils/getEventId.js +14 -0
  52. package/dist/cjs/mongodb/utils/getEventId.js.map +1 -0
  53. package/dist/cjs/mongodb/utils/index.js +18 -0
  54. package/dist/cjs/mongodb/utils/index.js.map +1 -0
  55. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js +21 -8
  56. package/dist/cjs/rabbitmq/RabbitMqCommandBus.js.map +1 -1
  57. package/dist/cjs/rabbitmq/RabbitMqEventBus.js +2 -2
  58. package/dist/cjs/rabbitmq/RabbitMqEventBus.js.map +1 -1
  59. package/dist/cjs/rabbitmq/RabbitMqGateway.js +89 -64
  60. package/dist/cjs/rabbitmq/RabbitMqGateway.js.map +1 -1
  61. package/dist/cjs/redis/AbstractRedisAccessor.js +51 -0
  62. package/dist/cjs/redis/AbstractRedisAccessor.js.map +1 -0
  63. package/dist/cjs/redis/AbstractRedisProjection.js +26 -0
  64. package/dist/cjs/redis/AbstractRedisProjection.js.map +1 -0
  65. package/dist/cjs/redis/IContainer.js +3 -0
  66. package/dist/cjs/redis/IContainer.js.map +1 -0
  67. package/dist/cjs/redis/RedisEventLocker.js +96 -0
  68. package/dist/cjs/redis/RedisEventLocker.js.map +1 -0
  69. package/dist/cjs/redis/RedisObjectStorage.js +125 -0
  70. package/dist/cjs/redis/RedisObjectStorage.js.map +1 -0
  71. package/dist/cjs/redis/RedisProjectionDataParams.js +3 -0
  72. package/dist/cjs/redis/RedisProjectionDataParams.js.map +1 -0
  73. package/dist/cjs/redis/RedisView.js +81 -0
  74. package/dist/cjs/redis/RedisView.js.map +1 -0
  75. package/dist/cjs/redis/RedisViewLocker.js +111 -0
  76. package/dist/cjs/redis/RedisViewLocker.js.map +1 -0
  77. package/dist/cjs/redis/index.js +30 -0
  78. package/dist/cjs/redis/index.js.map +1 -0
  79. package/dist/cjs/redis/utils/getEventId.js +14 -0
  80. package/dist/cjs/redis/utils/getEventId.js.map +1 -0
  81. package/dist/cjs/redis/utils/index.js +18 -0
  82. package/dist/cjs/redis/utils/index.js.map +1 -0
  83. package/dist/cjs/sqlite/AbstractSqliteView.js.map +1 -1
  84. package/dist/cjs/sqlite/SqliteEventStorage.js +215 -0
  85. package/dist/cjs/sqlite/SqliteEventStorage.js.map +1 -0
  86. package/dist/cjs/sqlite/SqliteObjectStorage.js +6 -6
  87. package/dist/cjs/sqlite/SqliteObjectStorage.js.map +1 -1
  88. package/dist/cjs/sqlite/SqliteObjectView.js.map +1 -1
  89. package/dist/cjs/sqlite/index.js +1 -0
  90. package/dist/cjs/sqlite/index.js.map +1 -1
  91. package/dist/cjs/sqlite/utils/bufferToGuid.js +9 -0
  92. package/dist/cjs/sqlite/utils/bufferToGuid.js.map +1 -0
  93. package/dist/cjs/sqlite/utils/getEventId.js +2 -5
  94. package/dist/cjs/sqlite/utils/getEventId.js.map +1 -1
  95. package/dist/cjs/sqlite/utils/guid.js +1 -1
  96. package/dist/cjs/sqlite/utils/guid.js.map +1 -1
  97. package/dist/cjs/sqlite/utils/index.js +1 -0
  98. package/dist/cjs/sqlite/utils/index.js.map +1 -1
  99. package/dist/cjs/telemetry/index.js +20 -0
  100. package/dist/cjs/telemetry/index.js.map +1 -0
  101. package/dist/cjs/telemetry/recordSpanError.js +19 -0
  102. package/dist/cjs/telemetry/recordSpanError.js.map +1 -0
  103. package/dist/cjs/telemetry/spanAttributes.js +26 -0
  104. package/dist/cjs/telemetry/spanAttributes.js.map +1 -0
  105. package/dist/cjs/telemetry/spanContext.js +25 -0
  106. package/dist/cjs/telemetry/spanContext.js.map +1 -0
  107. package/dist/cjs/utils/MapAssertable.js +25 -1
  108. package/dist/cjs/utils/MapAssertable.js.map +1 -1
  109. package/dist/esm/AbstractProjection.js +32 -7
  110. package/dist/esm/AbstractProjection.js.map +1 -1
  111. package/dist/esm/AggregateCommandHandler.js +22 -8
  112. package/dist/esm/AggregateCommandHandler.js.map +1 -1
  113. package/dist/esm/CqrsContainerBuilder.js +6 -1
  114. package/dist/esm/CqrsContainerBuilder.js.map +1 -1
  115. package/dist/esm/EventDispatchPipeline.js +12 -2
  116. package/dist/esm/EventDispatchPipeline.js.map +1 -1
  117. package/dist/esm/EventDispatcher.js +33 -4
  118. package/dist/esm/EventDispatcher.js.map +1 -1
  119. package/dist/esm/EventStore.js +7 -2
  120. package/dist/esm/EventStore.js.map +1 -1
  121. package/dist/esm/SagaEventHandler.js +42 -28
  122. package/dist/esm/SagaEventHandler.js.map +1 -1
  123. package/dist/esm/in-memory/InMemoryEventStorage.js +25 -10
  124. package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -1
  125. package/dist/esm/in-memory/InMemoryMessageBus.js +11 -5
  126. package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -1
  127. package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -1
  128. package/dist/esm/interfaces/IMessageMeta.js +2 -0
  129. package/dist/esm/interfaces/IMessageMeta.js.map +1 -0
  130. package/dist/esm/interfaces/IObservable.js.map +1 -1
  131. package/dist/esm/interfaces/index.js +1 -0
  132. package/dist/esm/interfaces/index.js.map +1 -1
  133. package/dist/esm/mongodb/AbstractMongoAccessor.js +47 -0
  134. package/dist/esm/mongodb/AbstractMongoAccessor.js.map +1 -0
  135. package/dist/esm/mongodb/AbstractMongoObjectProjection.js +22 -0
  136. package/dist/esm/mongodb/AbstractMongoObjectProjection.js.map +1 -0
  137. package/dist/esm/mongodb/AbstractMongoView.js +53 -0
  138. package/dist/esm/mongodb/AbstractMongoView.js.map +1 -0
  139. package/dist/esm/mongodb/IContainer.js +2 -0
  140. package/dist/esm/mongodb/IContainer.js.map +1 -0
  141. package/dist/esm/mongodb/MongoEventLocker.js +100 -0
  142. package/dist/esm/mongodb/MongoEventLocker.js.map +1 -0
  143. package/dist/esm/mongodb/MongoEventStorage.js +196 -0
  144. package/dist/esm/mongodb/MongoEventStorage.js.map +1 -0
  145. package/dist/esm/mongodb/MongoObjectStorage.js +97 -0
  146. package/dist/esm/mongodb/MongoObjectStorage.js.map +1 -0
  147. package/dist/esm/mongodb/MongoObjectView.js +37 -0
  148. package/dist/esm/mongodb/MongoObjectView.js.map +1 -0
  149. package/dist/esm/mongodb/MongoProjectionDataParams.js +2 -0
  150. package/dist/esm/mongodb/MongoProjectionDataParams.js.map +1 -0
  151. package/dist/esm/mongodb/MongoViewLocker.js +132 -0
  152. package/dist/esm/mongodb/MongoViewLocker.js.map +1 -0
  153. package/dist/esm/mongodb/index.js +12 -0
  154. package/dist/esm/mongodb/index.js.map +1 -0
  155. package/dist/esm/mongodb/registerExitCleanup.js +24 -0
  156. package/dist/esm/mongodb/registerExitCleanup.js.map +1 -0
  157. package/dist/esm/mongodb/utils/getEventId.js +10 -0
  158. package/dist/esm/mongodb/utils/getEventId.js.map +1 -0
  159. package/dist/esm/mongodb/utils/index.js +2 -0
  160. package/dist/esm/mongodb/utils/index.js.map +1 -0
  161. package/dist/esm/rabbitmq/RabbitMqCommandBus.js +21 -8
  162. package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -1
  163. package/dist/esm/rabbitmq/RabbitMqEventBus.js +2 -2
  164. package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -1
  165. package/dist/esm/rabbitmq/RabbitMqGateway.js +69 -44
  166. package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -1
  167. package/dist/esm/redis/AbstractRedisAccessor.js +47 -0
  168. package/dist/esm/redis/AbstractRedisAccessor.js.map +1 -0
  169. package/dist/esm/redis/AbstractRedisProjection.js +22 -0
  170. package/dist/esm/redis/AbstractRedisProjection.js.map +1 -0
  171. package/dist/esm/redis/IContainer.js +2 -0
  172. package/dist/esm/redis/IContainer.js.map +1 -0
  173. package/dist/esm/redis/RedisEventLocker.js +92 -0
  174. package/dist/esm/redis/RedisEventLocker.js.map +1 -0
  175. package/dist/esm/redis/RedisObjectStorage.js +121 -0
  176. package/dist/esm/redis/RedisObjectStorage.js.map +1 -0
  177. package/dist/esm/redis/RedisProjectionDataParams.js +2 -0
  178. package/dist/esm/redis/RedisProjectionDataParams.js.map +1 -0
  179. package/dist/esm/redis/RedisView.js +77 -0
  180. package/dist/esm/redis/RedisView.js.map +1 -0
  181. package/dist/esm/redis/RedisViewLocker.js +107 -0
  182. package/dist/esm/redis/RedisViewLocker.js.map +1 -0
  183. package/dist/esm/redis/index.js +14 -0
  184. package/dist/esm/redis/index.js.map +1 -0
  185. package/dist/esm/redis/utils/getEventId.js +10 -0
  186. package/dist/esm/redis/utils/getEventId.js.map +1 -0
  187. package/dist/esm/redis/utils/index.js +2 -0
  188. package/dist/esm/redis/utils/index.js.map +1 -0
  189. package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -1
  190. package/dist/esm/sqlite/SqliteEventStorage.js +211 -0
  191. package/dist/esm/sqlite/SqliteEventStorage.js.map +1 -0
  192. package/dist/esm/sqlite/SqliteObjectStorage.js +7 -7
  193. package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -1
  194. package/dist/esm/sqlite/SqliteObjectView.js.map +1 -1
  195. package/dist/esm/sqlite/index.js +1 -0
  196. package/dist/esm/sqlite/index.js.map +1 -1
  197. package/dist/esm/sqlite/utils/bufferToGuid.js +5 -0
  198. package/dist/esm/sqlite/utils/bufferToGuid.js.map +1 -0
  199. package/dist/esm/sqlite/utils/getEventId.js +2 -2
  200. package/dist/esm/sqlite/utils/getEventId.js.map +1 -1
  201. package/dist/esm/sqlite/utils/guid.js +1 -1
  202. package/dist/esm/sqlite/utils/guid.js.map +1 -1
  203. package/dist/esm/sqlite/utils/index.js +1 -0
  204. package/dist/esm/sqlite/utils/index.js.map +1 -1
  205. package/dist/esm/telemetry/index.js +4 -0
  206. package/dist/esm/telemetry/index.js.map +1 -0
  207. package/dist/esm/telemetry/recordSpanError.js +16 -0
  208. package/dist/esm/telemetry/recordSpanError.js.map +1 -0
  209. package/dist/esm/telemetry/spanAttributes.js +23 -0
  210. package/dist/esm/telemetry/spanAttributes.js.map +1 -0
  211. package/dist/esm/telemetry/spanContext.js +22 -0
  212. package/dist/esm/telemetry/spanContext.js.map +1 -0
  213. package/dist/esm/utils/MapAssertable.js +25 -1
  214. package/dist/esm/utils/MapAssertable.js.map +1 -1
  215. package/dist/types/AbstractProjection.d.ts +3 -1
  216. package/dist/types/AggregateCommandHandler.d.ts +3 -3
  217. package/dist/types/EventDispatchPipeline.d.ts +3 -1
  218. package/dist/types/EventDispatcher.d.ts +9 -1
  219. package/dist/types/EventStore.d.ts +4 -2
  220. package/dist/types/SagaEventHandler.d.ts +3 -3
  221. package/dist/types/in-memory/InMemoryEventStorage.d.ts +2 -1
  222. package/dist/types/in-memory/InMemoryMessageBus.d.ts +3 -3
  223. package/dist/types/interfaces/ICommandBus.d.ts +3 -2
  224. package/dist/types/interfaces/IContainer.d.ts +7 -0
  225. package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +2 -0
  226. package/dist/types/interfaces/IEventDispatcher.d.ts +3 -0
  227. package/dist/types/interfaces/IMessageMeta.d.ts +4 -0
  228. package/dist/types/interfaces/IObservable.d.ts +2 -1
  229. package/dist/types/interfaces/index.d.ts +1 -0
  230. package/dist/types/mongodb/AbstractMongoAccessor.d.ts +26 -0
  231. package/dist/types/mongodb/AbstractMongoObjectProjection.d.ts +8 -0
  232. package/dist/types/mongodb/AbstractMongoView.d.ts +25 -0
  233. package/dist/types/mongodb/IContainer.d.ts +11 -0
  234. package/dist/types/mongodb/MongoEventLocker.d.ts +47 -0
  235. package/dist/types/mongodb/MongoEventStorage.d.ts +27 -0
  236. package/dist/types/mongodb/MongoObjectStorage.d.ts +26 -0
  237. package/dist/types/mongodb/MongoObjectView.d.ts +16 -0
  238. package/dist/types/mongodb/MongoProjectionDataParams.d.ts +14 -0
  239. package/dist/types/mongodb/MongoViewLocker.d.ts +43 -0
  240. package/dist/types/mongodb/index.d.ts +11 -0
  241. package/dist/types/mongodb/registerExitCleanup.d.ts +10 -0
  242. package/dist/types/mongodb/utils/getEventId.d.ts +5 -0
  243. package/dist/types/mongodb/utils/index.d.ts +1 -0
  244. package/dist/types/rabbitmq/IContainer.d.ts +2 -2
  245. package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +5 -4
  246. package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +2 -2
  247. package/dist/types/rabbitmq/RabbitMqGateway.d.ts +4 -4
  248. package/dist/types/redis/AbstractRedisAccessor.d.ts +26 -0
  249. package/dist/types/redis/AbstractRedisProjection.d.ts +8 -0
  250. package/dist/types/redis/IContainer.d.ts +7 -0
  251. package/dist/types/redis/RedisEventLocker.d.ts +36 -0
  252. package/dist/types/redis/RedisObjectStorage.d.ts +26 -0
  253. package/dist/types/redis/RedisProjectionDataParams.d.ts +21 -0
  254. package/dist/types/redis/RedisView.d.ts +33 -0
  255. package/dist/types/redis/RedisViewLocker.d.ts +35 -0
  256. package/dist/types/redis/index.d.ts +13 -0
  257. package/dist/types/redis/utils/getEventId.d.ts +5 -0
  258. package/dist/types/redis/utils/index.d.ts +1 -0
  259. package/dist/types/sqlite/AbstractSqliteView.d.ts +2 -2
  260. package/dist/types/sqlite/SqliteEventStorage.d.ts +18 -0
  261. package/dist/types/sqlite/SqliteObjectStorage.d.ts +7 -7
  262. package/dist/types/sqlite/SqliteObjectView.d.ts +7 -7
  263. package/dist/types/sqlite/index.d.ts +1 -0
  264. package/dist/types/sqlite/utils/bufferToGuid.d.ts +4 -0
  265. package/dist/types/sqlite/utils/getEventId.d.ts +1 -1
  266. package/dist/types/sqlite/utils/guid.d.ts +2 -1
  267. package/dist/types/sqlite/utils/index.d.ts +1 -0
  268. package/dist/types/telemetry/index.d.ts +3 -0
  269. package/dist/types/telemetry/recordSpanError.d.ts +6 -0
  270. package/dist/types/telemetry/spanAttributes.d.ts +14 -0
  271. package/dist/types/telemetry/spanContext.d.ts +12 -0
  272. package/dist/types/utils/MapAssertable.d.ts +8 -0
  273. package/package.json +43 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/redis/utils/getEventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;IACnD,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,EAAE,CAAC;IAEjB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./getEventId.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/redis/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractSqliteView.js","sourceRoot":"","sources":["../../../src/sqlite/AbstractSqliteView.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAA2B,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,sBAAsB;IAEnD,aAAa,CAAS;IACtB,UAAU,CAAmB;IAC7B,WAAW,CAAoB;IACxC,MAAM,CAAsB;IAEtC,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,YAAY,OAEa;QACxB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,MAAM,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM;QACL,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,KAAc;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IACxC,CAAC;IAED,mBAAmB,CAAC,KAAkB;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CAAC,KAAkB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,KAAkB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACD"}
1
+ {"version":3,"file":"AbstractSqliteView.js","sourceRoot":"","sources":["../../../src/sqlite/AbstractSqliteView.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAgC,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,sBAAsB;IAEnD,aAAa,CAAS;IACtB,UAAU,CAAmB;IAC7B,WAAW,CAAoB;IACxC,MAAM,CAAsB;IAEtC,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,YAAY,OAEa;QACxB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,MAAM,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM;QACL,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,KAAc;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IACxC,CAAC;IAED,mBAAmB,CAAC,KAAkB;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CAAC,KAAkB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,KAAkB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACD"}
@@ -0,0 +1,211 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { assertString, parseSagaId } from "../utils/index.js";
3
+ import { ConcurrencyError } from "../errors/index.js";
4
+ import { AbstractSqliteAccessor } from "./AbstractSqliteAccessor.js";
5
+ import { guid, bufferToGuid } from "./utils/index.js";
6
+ function extractMeta(envelope) {
7
+ const { event: _event, ignoreConcurrencyError: _ignore, ...rest } = envelope;
8
+ if (Object.keys(rest).length === 0)
9
+ return null;
10
+ return rest;
11
+ }
12
+ export class SqliteEventStorage extends AbstractSqliteAccessor {
13
+ #insertEventQuery;
14
+ #insertSagaRefQuery;
15
+ #checkConcurrencyQuery;
16
+ #getRowidQuery;
17
+ #getAggregateEventsQuery;
18
+ #getSagaEventsQuery;
19
+ #getSagaRefsQuery;
20
+ #getEventsByTypesQuery;
21
+ initialize(db) {
22
+ db.pragma('foreign_keys = ON');
23
+ db.exec(`CREATE TABLE IF NOT EXISTS tbl_events (
24
+ id BLOB PRIMARY KEY,
25
+ aggregate_id BLOB,
26
+ aggregate_version INTEGER,
27
+ type TEXT NOT NULL,
28
+ data JSON NOT NULL,
29
+ meta JSON
30
+ )`);
31
+ db.exec(`CREATE TABLE IF NOT EXISTS tbl_event_sagas (
32
+ saga_descriptor TEXT NOT NULL,
33
+ origin_id BLOB NOT NULL,
34
+ event_id BLOB NOT NULL,
35
+ PRIMARY KEY (saga_descriptor, origin_id, event_id),
36
+ FOREIGN KEY (event_id) REFERENCES tbl_events(id)
37
+ )`);
38
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_aggregate_id ON tbl_events (aggregate_id)');
39
+ db.exec('CREATE INDEX IF NOT EXISTS idx_event_sagas_event_id ON tbl_event_sagas (event_id)');
40
+ this.#insertEventQuery = db.prepare(`
41
+ INSERT INTO tbl_events (id, aggregate_id, aggregate_version, type, data, meta)
42
+ VALUES (?, ?, ?, ?, ?, ?)
43
+ `);
44
+ this.#insertSagaRefQuery = db.prepare(`
45
+ INSERT INTO tbl_event_sagas (saga_descriptor, origin_id, event_id)
46
+ VALUES (?, ?, ?)
47
+ `);
48
+ this.#checkConcurrencyQuery = db.prepare(`
49
+ SELECT 1 FROM tbl_events
50
+ WHERE aggregate_id = ? AND aggregate_version = ?
51
+ LIMIT 1
52
+ `);
53
+ this.#getRowidQuery = db.prepare(`
54
+ SELECT rowid FROM tbl_events WHERE id = ?
55
+ `);
56
+ this.#getAggregateEventsQuery = db.prepare(`
57
+ WITH tail AS (
58
+ SELECT id AS tail_id
59
+ FROM tbl_events
60
+ WHERE aggregate_id = @aggregateId
61
+ AND (@afterVersion IS NULL OR aggregate_version > @afterVersion)
62
+ ORDER BY rowid DESC
63
+ LIMIT 1
64
+ )
65
+ SELECT e.id, e.aggregate_id, e.aggregate_version, e.type, e.data, e.meta, e.rowid
66
+ FROM tbl_events e, tail
67
+ WHERE e.aggregate_id = @aggregateId
68
+ AND (@afterVersion IS NULL OR e.aggregate_version > @afterVersion)
69
+ AND (
70
+ @eventTypes IS NULL
71
+ OR e.type IN (SELECT value FROM json_each(@eventTypes))
72
+ OR (@tail = 'last' AND e.id = tail.tail_id)
73
+ )
74
+ ORDER BY e.rowid
75
+ `);
76
+ this.#getSagaEventsQuery = db.prepare(`
77
+ SELECT e.id, e.aggregate_id, e.aggregate_version, e.type, e.data, e.meta, e.rowid
78
+ FROM tbl_events e
79
+ LEFT JOIN tbl_event_sagas sr
80
+ ON sr.event_id = e.id
81
+ AND sr.saga_descriptor = @sagaDescriptor
82
+ AND sr.origin_id = @originId
83
+ WHERE e.rowid >= @originRowid AND e.rowid < @beforeRowid
84
+ AND (e.id = @originId OR sr.event_id IS NOT NULL)
85
+ ORDER BY e.rowid
86
+ `);
87
+ this.#getSagaRefsQuery = db.prepare(`
88
+ SELECT saga_descriptor, origin_id
89
+ FROM tbl_event_sagas
90
+ WHERE event_id = ?
91
+ `);
92
+ this.#getEventsByTypesQuery = db.prepare(`
93
+ SELECT id, aggregate_id, aggregate_version, type, data, meta, rowid
94
+ FROM tbl_events
95
+ WHERE rowid > ?
96
+ ORDER BY rowid
97
+ `);
98
+ }
99
+ // eslint-disable-next-line class-methods-use-this
100
+ getNewId() {
101
+ return randomUUID().replaceAll('-', '');
102
+ }
103
+ async commitEvents(events, options) {
104
+ await this.assertConnection();
105
+ const metaJson = options?.meta ? JSON.stringify(options.meta) : null;
106
+ this.db.transaction(() => {
107
+ for (const event of events) {
108
+ if (!options?.ignoreConcurrencyError && event.aggregateId && event.aggregateVersion !== undefined) {
109
+ const conflict = this.#checkConcurrencyQuery.get(guid(event.aggregateId), event.aggregateVersion);
110
+ if (conflict)
111
+ throw new ConcurrencyError(`Duplicate aggregateVersion ${event.aggregateVersion} for aggregate ${event.aggregateId}`);
112
+ }
113
+ const { sagaOrigins, id, ...eventData } = event;
114
+ assertString(id, 'event.id');
115
+ const eventId = guid(id);
116
+ this.#insertEventQuery.run(eventId, event.aggregateId !== undefined ? guid(event.aggregateId) : null, event.aggregateVersion ?? null, event.type, JSON.stringify(eventData), metaJson);
117
+ if (sagaOrigins) {
118
+ for (const [descriptor, originId] of Object.entries(sagaOrigins)) {
119
+ this.#insertSagaRefQuery.run(descriptor, guid(originId), eventId);
120
+ }
121
+ }
122
+ }
123
+ })();
124
+ return events;
125
+ }
126
+ async *getAggregateEvents(aggregateId, options) {
127
+ await this.assertConnection();
128
+ const rows = this.#getAggregateEventsQuery.all({
129
+ aggregateId: guid(aggregateId),
130
+ afterVersion: options?.snapshot?.aggregateVersion ?? null,
131
+ eventTypes: options?.eventTypes
132
+ ? JSON.stringify(options.eventTypes)
133
+ : null,
134
+ tail: options?.tail ?? null
135
+ });
136
+ for (const row of rows)
137
+ yield this.#reconstructEvent(row);
138
+ }
139
+ async *getSagaEvents(sagaId, { beforeEvent }) {
140
+ await this.assertConnection();
141
+ assertString(beforeEvent?.id, 'beforeEvent.id');
142
+ const { sagaDescriptor, originEventId } = parseSagaId(sagaId);
143
+ if (beforeEvent.sagaOrigins?.[sagaDescriptor] !== originEventId)
144
+ throw new TypeError('beforeEvent.sagaOrigins does not match sagaId');
145
+ const originRowid = this.#getRowidQuery.get(guid(originEventId));
146
+ if (!originRowid)
147
+ throw new Error(`origin event ${originEventId} not found`);
148
+ const beforeRowid = this.#getRowidQuery.get(guid(beforeEvent.id));
149
+ if (!beforeRowid)
150
+ throw new Error(`beforeEvent ${beforeEvent.id} not found`);
151
+ const rows = this.#getSagaEventsQuery.all({
152
+ sagaDescriptor,
153
+ originId: guid(originEventId),
154
+ originRowid: originRowid.rowid,
155
+ beforeRowid: beforeRowid.rowid
156
+ });
157
+ for (const row of rows)
158
+ yield this.#reconstructEvent(row);
159
+ }
160
+ async *getEventsByTypes(eventTypes, options) {
161
+ await this.assertConnection();
162
+ const lastEventId = options?.afterEvent?.id;
163
+ if (options?.afterEvent)
164
+ assertString(options.afterEvent.id, 'options.afterEvent.id');
165
+ let afterRowid = 0;
166
+ if (lastEventId) {
167
+ const row = this.#getRowidQuery.get(guid(lastEventId));
168
+ if (!row)
169
+ return;
170
+ afterRowid = row.rowid;
171
+ }
172
+ const rows = this.#getEventsByTypesQuery.all(afterRowid);
173
+ for (const row of rows) {
174
+ if (eventTypes.includes(row.type))
175
+ yield this.#reconstructEvent(row);
176
+ }
177
+ }
178
+ async process(batch) {
179
+ const events = [];
180
+ for (const item of batch) {
181
+ if (!item.event)
182
+ throw new Error('Event batch does not contain `event`');
183
+ events.push(item.event);
184
+ }
185
+ const meta = extractMeta(batch[0]);
186
+ const ignoreConcurrencyError = batch[0]?.ignoreConcurrencyError;
187
+ await this.commitEvents(events, { ignoreConcurrencyError, meta });
188
+ return batch;
189
+ }
190
+ #getSagaOriginsForEvent(eventIdBuf) {
191
+ const refs = this.#getSagaRefsQuery.all(eventIdBuf);
192
+ if (refs.length === 0)
193
+ return {};
194
+ const sagaOrigins = {};
195
+ for (const ref of refs)
196
+ sagaOrigins[ref.saga_descriptor] = bufferToGuid(ref.origin_id);
197
+ return sagaOrigins;
198
+ }
199
+ #reconstructEvent(row) {
200
+ const data = JSON.parse(row.data);
201
+ const sagaOrigins = this.#getSagaOriginsForEvent(row.id);
202
+ const event = {
203
+ id: bufferToGuid(row.id),
204
+ ...data
205
+ };
206
+ if (Object.keys(sagaOrigins).length > 0)
207
+ event.sagaOrigins = sagaOrigins;
208
+ return event;
209
+ }
210
+ }
211
+ //# sourceMappingURL=SqliteEventStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteEventStorage.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteEventStorage.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { guid } from "./utils/index.js";
2
2
  import { AbstractSqliteAccessor } from "./AbstractSqliteAccessor.js";
3
- import { assertFunction, assertString } from "../utils/assert.js";
3
+ import { assertDefined, assertFunction } from "../utils/assert.js";
4
4
  export class SqliteObjectStorage extends AbstractSqliteAccessor {
5
5
  #tableName;
6
6
  #getQuery;
@@ -41,7 +41,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
41
41
  `);
42
42
  }
43
43
  async get(id) {
44
- assertString(id, 'id');
44
+ assertDefined(id, 'id');
45
45
  await this.assertConnection();
46
46
  const r = this.#getQuery.get(guid(id));
47
47
  if (!r)
@@ -49,14 +49,14 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
49
49
  return JSON.parse(r.data);
50
50
  }
51
51
  getSync(id) {
52
- assertString(id, 'id');
52
+ assertDefined(id, 'id');
53
53
  const r = this.#getQuery.get(guid(id));
54
54
  if (!r)
55
55
  return undefined;
56
56
  return JSON.parse(r.data);
57
57
  }
58
58
  async create(id, data) {
59
- assertString(id, 'id');
59
+ assertDefined(id, 'id');
60
60
  await this.assertConnection();
61
61
  this.#createSync(id, data);
62
62
  }
@@ -66,7 +66,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
66
66
  throw new Error(`Record '${id}' could not be created`);
67
67
  }
68
68
  async update(id, update) {
69
- assertString(id, 'id');
69
+ assertDefined(id, 'id');
70
70
  assertFunction(update, 'update');
71
71
  await this.assertConnection();
72
72
  this.#updateSync(id, update);
@@ -91,7 +91,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
91
91
  throw new Error(`Record '${id}' could not be updated`);
92
92
  }
93
93
  async updateEnforcingNew(id, update) {
94
- assertString(id, 'id');
94
+ assertDefined(id, 'id');
95
95
  assertFunction(update, 'update');
96
96
  await this.assertConnection();
97
97
  const record = this.#getQuery.get(guid(id));
@@ -101,7 +101,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
101
101
  this.#createSync(id, update());
102
102
  }
103
103
  async delete(id) {
104
- assertString(id, 'id');
104
+ assertDefined(id, 'id');
105
105
  await this.assertConnection();
106
106
  const r = this.#deleteQuery.run(guid(id));
107
107
  return r.changes === 1;
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteObjectStorage.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqliteObjectStorage.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectStorage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteObjectView.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,gBAA0B,SAAQ,kBAAkB;IAEhE,oBAAoB,CAA+B;IAEnD,YAAY,OAEX;QACA,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAClE,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE9D,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,oBAAoB,GAAG,IAAI,mBAAmB,CAAU;YAC5D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;YAC1D,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE;SAChE,CAAC,CAAC;IACJ,CAAC;IAED,qFAAqF;IAC3E,UAAU,CAAC,EAAY;QAChC,yEAAyE;IAC1E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK;YACd,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAa;QACrC,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAA+B;QACvD,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU,EAAE,MAAgC;QACpE,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;CACD"}
1
+ {"version":3,"file":"SqliteObjectView.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,gBAA0B,SAAQ,kBAAkB;IAEhE,oBAAoB,CAA+B;IAEnD,YAAY,OAEX;QACA,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAClE,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE9D,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,oBAAoB,GAAG,IAAI,mBAAmB,CAAU;YAC5D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;YAC1D,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE;SAChE,CAAC,CAAC;IACJ,CAAC;IAED,qFAAqF;IAC3E,UAAU,CAAC,EAAY;QAChC,yEAAyE;IAC1E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAc;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK;YACd,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,EAAc;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,IAAa;QACzC,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,MAA+B;QAC3D,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAc,EAAE,MAAgC;QACxE,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAc;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;CACD"}
@@ -3,6 +3,7 @@ export * from "./AbstractSqliteAccessor.js";
3
3
  export * from "./AbstractSqliteObjectProjection.js";
4
4
  export * from "./AbstractSqliteView.js";
5
5
  export * from "./SqliteEventLocker.js";
6
+ export * from "./SqliteEventStorage.js";
6
7
  export * from "./SqliteObjectStorage.js";
7
8
  export * from "./SqliteObjectView.js";
8
9
  export * from "./SqliteViewLocker.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Convert Buffer (BLOB) back to a hex string (no dashes)
3
+ */
4
+ export const bufferToGuid = (buf) => buf.toString('hex');
5
+ //# sourceMappingURL=bufferToGuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferToGuid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/bufferToGuid.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
+ import { createHash } from 'node:crypto';
1
2
  import { guid } from "./guid.js";
2
- import md5 from 'md5';
3
3
  /**
4
4
  * Get assigned or generate new event ID from event content
5
5
  */
6
- export const getEventId = (event) => guid(typeof event.id === 'string' ? event.id : md5(JSON.stringify(event)));
6
+ export const getEventId = (event) => guid(typeof event.id === 'string' ? event.id : createHash('md5').update(JSON.stringify(event)).digest('hex'));
7
7
  //# sourceMappingURL=getEventId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/getEventId.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CACnD,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/getEventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CACnD,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Convert Guid to Buffer for storing in Sqlite BLOB
3
3
  */
4
- export const guid = (str) => Buffer.from(str.replaceAll('-', ''), 'hex');
4
+ export const guid = (str) => Buffer.from(String(str).replaceAll('-', ''), 'hex');
5
5
  //# sourceMappingURL=guid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/guid.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/guid.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from "./bufferToGuid.js";
1
2
  export * from "./guid.js";
2
3
  export * from "./getEventId.js";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./recordSpanError.js";
2
+ export * from "./spanAttributes.js";
3
+ export * from "./spanContext.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** SpanStatusCode.ERROR — inlined to avoid a runtime dependency on @opentelemetry/api */
2
+ const SPAN_STATUS_ERROR = 2;
3
+ /**
4
+ * Records the error on the provided span and marks the span status as ERROR.
5
+ * No-op when span is undefined.
6
+ */
7
+ export function recordSpanError(span, error) {
8
+ if (!span)
9
+ return;
10
+ span.recordException(error);
11
+ span.setStatus({
12
+ code: SPAN_STATUS_ERROR,
13
+ message: error instanceof Error ? error.message : String(error)
14
+ });
15
+ }
16
+ //# sourceMappingURL=recordSpanError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordSpanError.js","sourceRoot":"","sources":["../../../src/telemetry/recordSpanError.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB,EAAE,KAAc;IACrE,IAAI,CAAC,IAAI;QACR,OAAO;IAER,IAAI,CAAC,eAAe,CAAC,KAAY,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,CAAC;QACd,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ const isSpanAttributeValue = (v) => typeof v === 'string'
2
+ || typeof v === 'number'
3
+ || typeof v === 'boolean';
4
+ /**
5
+ * Builds a `{ attributes }` object for use in `tracer.startSpan()` options,
6
+ * prefixing each key with `cqrs.<prefix>`.
7
+ * Entries with non-primitive values (not string/number/boolean) are omitted.
8
+ * An optional `keys` array limits which properties are included.
9
+ *
10
+ * @example
11
+ * tracer.startSpan('send', spanAttributes('command', cmd, ['type', 'aggregateId']), ctx)
12
+ */
13
+ export function spanAttributes(prefix, attrs, keys = Object.keys(attrs)) {
14
+ const attributes = {};
15
+ for (const key of keys) {
16
+ const value = attrs[key];
17
+ if (!isSpanAttributeValue(value))
18
+ continue;
19
+ attributes[`cqrs.${prefix}.${String(key)}`] = value;
20
+ }
21
+ return { attributes };
22
+ }
23
+ //# sourceMappingURL=spanAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spanAttributes.js","sourceRoot":"","sources":["../../../src/telemetry/spanAttributes.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,CAAC,CAAU,EAA2B,EAAE,CACpE,OAAO,CAAC,KAAK,QAAQ;OAClB,OAAO,CAAC,KAAK,QAAQ;OACrB,OAAO,CAAC,KAAK,SAAS,CAAC;AAE3B;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC7B,MAAc,EACd,KAAQ,EACR,OAAuB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAIzC,MAAM,UAAU,GAAuC,EAAE,CAAC;IAE1D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;YAC/B,SAAS;QAEV,UAAU,CAAC,QAAQ,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { createRequire } from 'node:module';
2
+ let _api;
3
+ function getOtelApi() {
4
+ if (!_api) {
5
+ const _require = typeof require !== 'undefined' ? require : createRequire(`${process.cwd()}/`);
6
+ _api = _require('@opentelemetry/api');
7
+ }
8
+ return _api;
9
+ }
10
+ /**
11
+ * Returns the OTel context to use as the parent for a new span.
12
+ * If `meta.span` is present it is set as the active span on the current context;
13
+ * otherwise the current active context is returned unchanged.
14
+ *
15
+ * Imports `@opentelemetry/api` lazily so the core library has no hard runtime
16
+ * dependency on it — the browser bundle and environments without OTel stay lean.
17
+ */
18
+ export function spanContext(meta) {
19
+ const { trace, context } = getOtelApi();
20
+ return meta?.span ? trace.setSpan(context.active(), meta.span) : context.active();
21
+ }
22
+ //# sourceMappingURL=spanContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spanContext.js","sourceRoot":"","sources":["../../../src/telemetry/spanContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,IAAI,IAAqD,CAAC;AAE1D,SAAS,UAAU;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/F,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAK,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAAsB;IACjD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IACxC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACnF,CAAC"}
@@ -1,14 +1,38 @@
1
1
  export class MapAssertable extends Map {
2
2
  #usageCounter = new Map();
3
+ #factories = new Map();
3
4
  /**
4
5
  * Ensures the key exists in the map, creating it with the factory if needed, and increments its usage counter.
5
6
  */
6
7
  assert(key, factory) {
7
- if (!this.has(key))
8
+ if (!this.has(key) && !this.#factories.has(key))
8
9
  this.set(key, factory());
9
10
  this.#usageCounter.set(key, (this.#usageCounter.get(key) ?? 0) + 1);
11
+ return this.get(key);
12
+ }
13
+ /**
14
+ * Stores a factory that will be called lazily on first `get()`.
15
+ * If the entry is released before being accessed, the factory is never invoked.
16
+ */
17
+ setLazy(key, factory) {
18
+ this.delete(key);
19
+ this.#factories.set(key, factory);
20
+ }
21
+ get(key) {
22
+ const factory = this.#factories.get(key);
23
+ if (factory) {
24
+ this.#factories.delete(key);
25
+ this.set(key, factory());
26
+ }
10
27
  return super.get(key);
11
28
  }
29
+ has(key) {
30
+ return super.has(key) || this.#factories.has(key);
31
+ }
32
+ delete(key) {
33
+ this.#factories.delete(key);
34
+ return super.delete(key);
35
+ }
12
36
  /**
13
37
  * Decrements the usage counter for the key and removes it from the map if no longer used.
14
38
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MapAssertable.js","sourceRoot":"","sources":["../../../src/utils/MapAssertable.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAoB,SAAQ,GAAS;IAEjD,aAAa,GAAG,IAAI,GAAG,EAAa,CAAC;IAErC;;OAEG;IACH,MAAM,CAAC,GAAM,EAAE,OAAgB;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAE1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAM;QACb,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;aACI,CAAC;YACL,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"MapAssertable.js","sourceRoot":"","sources":["../../../src/utils/MapAssertable.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAoB,SAAQ,GAAS;IAEjD,aAAa,GAAG,IAAI,GAAG,EAAa,CAAC;IACrC,UAAU,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEtC;;OAEG;IACH,MAAM,CAAC,GAAM,EAAE,OAAgB;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAE1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,GAAM,EAAE,OAAgB;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAEQ,GAAG,CAAC,GAAM;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAEQ,GAAG,CAAC,GAAM;QAClB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAEQ,MAAM,CAAC,GAAM;QACrB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAM;QACb,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;aACI,CAAC;YACL,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;CACD"}
@@ -1,3 +1,4 @@
1
+ import type { Tracer } from '@opentelemetry/api';
1
2
  import { type IViewLocker, type IEventLocker, type IProjection, type ILogger, type IExtendableLogger, type IEvent, type IObservable, type IEventStorageReader } from './interfaces/index.ts';
2
3
  export type AbstractProjectionParams<T> = {
3
4
  /**
@@ -15,6 +16,7 @@ export type AbstractProjectionParams<T> = {
15
16
  */
16
17
  eventLocker?: IEventLocker;
17
18
  logger?: ILogger | IExtendableLogger;
19
+ tracerFactory?: (name: string) => Tracer;
18
20
  };
19
21
  /**
20
22
  * Base class for Projection definition
@@ -44,7 +46,7 @@ export declare abstract class AbstractProjection<TView = any> implements IProjec
44
46
  */
45
47
  protected get _eventLocker(): IEventLocker | null;
46
48
  protected set _eventLocker(value: IEventLocker | undefined | null);
47
- constructor({ view, viewLocker, eventLocker, logger }?: AbstractProjectionParams<TView>);
49
+ constructor({ view, viewLocker, eventLocker, tracerFactory, logger }?: AbstractProjectionParams<TView>);
48
50
  /**
49
51
  * Subscribe to event store
50
52
  * and restore view state from not yet projected events
@@ -1,4 +1,4 @@
1
- import type { IAggregate, IAggregateConstructor, IAggregateFactory, ICommand, ICommandHandler, IContainer, IEventSet, IObservable, RetryOnConcurrencyErrorOptions } from './interfaces/index.ts';
1
+ import type { IAggregate, IAggregateConstructor, IAggregateFactory, ICommand, ICommandHandler, IContainer, IEventSet, IMessageMeta, IObservable, RetryOnConcurrencyErrorOptions } from './interfaces/index.ts';
2
2
  /**
3
3
  * Aggregate command handler.
4
4
  *
@@ -8,7 +8,7 @@ import type { IAggregate, IAggregateConstructor, IAggregateFactory, ICommand, IC
8
8
  */
9
9
  export declare class AggregateCommandHandler<TAggregate extends IAggregate> implements ICommandHandler {
10
10
  #private;
11
- constructor({ eventStore, aggregateType, aggregateFactory, handles, executionLocker, restoresFrom, retryOnConcurrencyError, logger }: Pick<IContainer, 'eventStore' | 'executionLocker' | 'logger'> & {
11
+ constructor({ eventStore, aggregateType, aggregateFactory, handles, executionLocker, restoresFrom, retryOnConcurrencyError, tracerFactory, logger }: Pick<IContainer, 'eventStore' | 'executionLocker' | 'logger' | 'tracerFactory'> & {
12
12
  aggregateType?: IAggregateConstructor<TAggregate, any>;
13
13
  aggregateFactory?: IAggregateFactory<TAggregate, any>;
14
14
  handles?: Readonly<string[]>;
@@ -18,5 +18,5 @@ export declare class AggregateCommandHandler<TAggregate extends IAggregate> impl
18
18
  /** Subscribe to all command types handled by aggregateType */
19
19
  subscribe(commandBus: IObservable): void;
20
20
  /** Pass a command to corresponding aggregate */
21
- execute(cmd: ICommand): Promise<IEventSet>;
21
+ execute(cmd: ICommand, meta?: IMessageMeta): Promise<IEventSet>;
22
22
  }
@@ -9,8 +9,10 @@ export type EventBatchEnvelope = {
9
9
  };
10
10
  export declare class EventDispatchPipeline {
11
11
  #private;
12
- constructor(eventBus: IEventBus, concurrentLimit: number);
12
+ constructor(eventBus: IEventBus, concurrentLimit: number, onError?: (error: Error) => void);
13
13
  addProcessor(preprocessor: IDispatchPipelineProcessor): void;
14
+ /** Get a promise that resolves when all in-flight fire-and-forget event bus publishes have settled */
15
+ drain(): Promise<unknown>;
14
16
  revert(batch: DispatchPipelineBatch): Promise<void>;
15
17
  push(envelope: EventBatchEnvelope): void;
16
18
  }
@@ -19,12 +19,18 @@ export declare class EventDispatcher implements IEventDispatcher {
19
19
  concurrentLimit: number;
20
20
  /** Router that selects a pipeline name given events and meta */
21
21
  eventDispatchRouter?: (events: IEventSet, meta?: Record<string, any>) => string | undefined;
22
- constructor(o?: Pick<IContainer, 'eventBus' | 'eventDispatchPipeline'> & {
22
+ /**
23
+ * Called when a fire-and-forget event bus publish fails.
24
+ * If not set, publish errors are silently discarded.
25
+ */
26
+ eventPublishErrorHandler?: (error: Error) => void;
27
+ constructor(o?: Pick<IContainer, 'eventBus' | 'eventDispatchPipeline' | 'tracerFactory'> & {
23
28
  eventDispatcherConfig?: {
24
29
  concurrentLimit?: number;
25
30
  };
26
31
  eventDispatchPipelines?: Record<string, IDispatchPipelineProcessor[]>;
27
32
  eventDispatchRouter?: (events: IEventSet, meta?: Record<string, any>) => string | undefined;
33
+ eventPublishErrorHandler?: (error: Error) => void;
28
34
  });
29
35
  /** Add or create the default pipeline processors */
30
36
  addPipelineProcessors(eventDispatchPipeline: IDispatchPipelineProcessor[], pipelineName?: string): void;
@@ -34,6 +40,8 @@ export declare class EventDispatcher implements IEventDispatcher {
34
40
  addPipeline(name: string, processors?: IDispatchPipelineProcessor[], options?: {
35
41
  concurrentLimit?: number;
36
42
  }): EventDispatchPipeline;
43
+ /** Get a promise that resolves when all in-flight fire-and-forget event bus publishes have settled */
44
+ drain(): Promise<unknown>;
37
45
  /** Dispatch events through a routed pipeline and publish to the shared eventBus */
38
46
  dispatch(events: IEventSet, meta?: Record<string, any>): Promise<IEventSet>;
39
47
  }