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
@@ -1,38 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InMemoryEventStorage = void 0;
4
- const index_ts_1 = require("../utils/index.js");
5
- const index_ts_2 = require("./utils/index.js");
6
- const index_ts_3 = require("../errors/index.js");
4
+ const index_ts_1 = require("../telemetry/index.js");
5
+ const index_ts_2 = require("../utils/index.js");
6
+ const index_ts_3 = require("./utils/index.js");
7
+ const index_ts_4 = require("../errors/index.js");
7
8
  /**
8
9
  * A simple event storage implementation intended to use for tests only.
9
10
  * Storage content resets on each app restart.
10
11
  */
11
12
  class InMemoryEventStorage {
13
+ #tracer;
12
14
  #nextId = 0;
13
15
  #events = [];
16
+ constructor({ tracerFactory } = {}) {
17
+ this.#tracer = tracerFactory?.(new.target.name);
18
+ }
14
19
  getNewId() {
15
20
  this.#nextId += 1;
16
21
  return String(this.#nextId);
17
22
  }
18
23
  async commitEvents(events, options) {
19
- await (0, index_ts_2.nextCycle)();
24
+ await (0, index_ts_3.nextCycle)();
20
25
  if (!options?.ignoreConcurrencyError) {
21
26
  for (const event of events) {
22
27
  if (event.aggregateId !== undefined && event.aggregateVersion !== undefined) {
23
28
  const conflict = this.#events.find(e => e.aggregateId === event.aggregateId &&
24
29
  e.aggregateVersion === event.aggregateVersion);
25
30
  if (conflict)
26
- throw new index_ts_3.ConcurrencyError(`Duplicate aggregateVersion ${event.aggregateVersion} for aggregate ${event.aggregateId}`);
31
+ throw new index_ts_4.ConcurrencyError(`Duplicate aggregateVersion ${event.aggregateVersion} for aggregate ${event.aggregateId}`);
27
32
  }
28
33
  }
29
34
  }
30
35
  this.#events = this.#events.concat(events);
31
- await (0, index_ts_2.nextCycle)();
36
+ await (0, index_ts_3.nextCycle)();
32
37
  return events;
33
38
  }
34
39
  async *getAggregateEvents(aggregateId, options) {
35
- await (0, index_ts_2.nextCycle)();
40
+ await (0, index_ts_3.nextCycle)();
36
41
  const afterVersion = options?.snapshot?.aggregateVersion;
37
42
  const allAfterSnapshot = !afterVersion ?
38
43
  this.#events.filter(e => e.aggregateId === aggregateId) :
@@ -42,7 +47,7 @@ class InMemoryEventStorage {
42
47
  const results = options?.eventTypes === undefined ?
43
48
  allAfterSnapshot :
44
49
  allAfterSnapshot.filter(e => options.eventTypes.includes(e.type));
45
- await (0, index_ts_2.nextCycle)();
50
+ await (0, index_ts_3.nextCycle)();
46
51
  yield* results;
47
52
  if (options?.tail === 'last' && allAfterSnapshot.length) {
48
53
  const tailEvent = allAfterSnapshot[allAfterSnapshot.length - 1];
@@ -52,9 +57,9 @@ class InMemoryEventStorage {
52
57
  }
53
58
  }
54
59
  async *getSagaEvents(sagaId, { beforeEvent }) {
55
- await (0, index_ts_2.nextCycle)();
56
- (0, index_ts_1.assertString)(beforeEvent?.id, 'beforeEvent.id');
57
- const { sagaDescriptor, originEventId } = (0, index_ts_1.parseSagaId)(sagaId);
60
+ await (0, index_ts_3.nextCycle)();
61
+ (0, index_ts_2.assertString)(beforeEvent?.id, 'beforeEvent.id');
62
+ const { sagaDescriptor, originEventId } = (0, index_ts_2.parseSagaId)(sagaId);
58
63
  if (beforeEvent.sagaOrigins?.[sagaDescriptor] !== originEventId)
59
64
  throw new TypeError('beforeEvent.sagaOrigins does not match sagaId');
60
65
  const originOffset = this.#events.findIndex(e => e.id === originEventId);
@@ -66,14 +71,14 @@ class InMemoryEventStorage {
66
71
  const results = this.#events
67
72
  .slice(originOffset, beforeEventOffset)
68
73
  .filter(e => e.sagaOrigins?.[sagaDescriptor] === originEventId);
69
- await (0, index_ts_2.nextCycle)();
74
+ await (0, index_ts_3.nextCycle)();
70
75
  yield* results;
71
76
  }
72
77
  async *getEventsByTypes(eventTypes, options) {
73
- await (0, index_ts_2.nextCycle)();
78
+ await (0, index_ts_3.nextCycle)();
74
79
  const lastEventId = options?.afterEvent?.id;
75
80
  if (options?.afterEvent)
76
- (0, index_ts_1.assertString)(options.afterEvent.id, 'options.afterEvent.id');
81
+ (0, index_ts_2.assertString)(options.afterEvent.id, 'options.afterEvent.id');
77
82
  let offsetFound = !lastEventId;
78
83
  for (const event of this.#events) {
79
84
  if (!offsetFound)
@@ -89,17 +94,27 @@ class InMemoryEventStorage {
89
94
  * This method is part of the `IDispatchPipelineProcessor` interface.
90
95
  */
91
96
  async process(batch) {
92
- const events = [];
93
- for (const { event } of batch) {
94
- if (!event)
95
- throw new Error('Event batch does not contain `event`');
96
- events.push(event);
97
+ const span = this.#tracer?.startSpan('InMemoryEventStorage.process', undefined, (0, index_ts_1.spanContext)(batch[0]));
98
+ try {
99
+ const events = [];
100
+ for (const { event } of batch) {
101
+ if (!event)
102
+ throw new Error('Event batch does not contain `event`');
103
+ events.push(event);
104
+ }
105
+ if (batch.at(0)?.ignoreConcurrencyError)
106
+ await this.commitEvents(events, { ignoreConcurrencyError: true });
107
+ else
108
+ await this.commitEvents(events);
109
+ return batch;
110
+ }
111
+ catch (error) {
112
+ (0, index_ts_1.recordSpanError)(span, error);
113
+ throw error;
114
+ }
115
+ finally {
116
+ span?.end();
97
117
  }
98
- if (batch.at(0)?.ignoreConcurrencyError)
99
- await this.commitEvents(events, { ignoreConcurrencyError: true });
100
- else
101
- await this.commitEvents(events);
102
- return batch;
103
118
  }
104
119
  }
105
120
  exports.InMemoryEventStorage = InMemoryEventStorage;
@@ -1 +1 @@
1
- {"version":3,"file":"InMemoryEventStorage.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryEventStorage.ts"],"names":[],"mappings":";;;AAYA,gDAA8D;AAC9D,+CAA6C;AAC7C,iDAAsD;AAEtD;;;GAGG;AACH,MAAa,oBAAoB;IAKhC,OAAO,GAAW,CAAC,CAAC;IACpB,OAAO,GAAc,EAAE,CAAC;IAExB,QAAQ;QACP,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAiB,EAAE,OAA8C;QACnF,MAAM,IAAA,oBAAS,GAAE,CAAC;QAElB,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC;YACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACtC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;wBACnC,CAAC,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB,CAAC,CAAC;oBAChD,IAAI,QAAQ;wBACX,MAAM,IAAI,2BAAgB,CAAC,8BAA8B,KAAK,CAAC,gBAAgB,kBAAkB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxH,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,IAAA,oBAAS,GAAE,CAAC;QAElB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAA,CAAE,kBAAkB,CAAC,WAAuB,EAAE,OAAoC;QACtF,MAAM,IAAA,oBAAS,GAAE,CAAC;QAElB,MAAM,YAAY,GAAG,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QACzD,MAAM,gBAAgB,GAAG,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvB,CAAC,CAAC,WAAW,KAAK,WAAW;gBAC7B,CAAC,CAAC,gBAAgB,KAAK,SAAS;gBAChC,CAAC,CAAC,gBAAgB,GAAG,YAAY,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,OAAO,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC;YAClD,gBAAgB,CAAC,CAAC;YAClB,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,MAAM,IAAA,oBAAS,GAAE,CAAC;QAElB,KAAK,CAAC,CAAC,OAAO,CAAC;QAEf,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAChE,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC;YACvF,IAAI,CAAC,kBAAkB;gBACtB,MAAM,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAED,KAAK,CAAA,CAAE,aAAa,CAAC,MAAkB,EAAE,EAAE,WAAW,EAA2B;QAChF,MAAM,IAAA,oBAAS,GAAE,CAAC;QAElB,IAAA,uBAAY,EAAC,WAAW,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAEhD,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAA,sBAAW,EAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,KAAK,aAAa;YAC9D,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;QAEtE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC;QACzE,IAAI,YAAY,KAAK,CAAC,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,gBAAgB,aAAa,YAAY,CAAC,CAAC;QAE5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC;QAC/E,IAAI,iBAAiB,KAAK,CAAC,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;aAC1B,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,KAAK,aAAa,CAAC,CAAC;QAEjE,MAAM,IAAA,oBAAS,GAAE,CAAC;QAElB,KAAK,CAAC,CAAC,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAA,CAAE,gBAAgB,CAAC,UAA8B,EAAE,OAAyB;QAChF,MAAM,IAAA,oBAAS,GAAE,CAAC;QAElB,MAAM,WAAW,GAAG,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;QAC5C,IAAI,OAAO,EAAE,UAAU;YACtB,IAAA,uBAAY,EAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAE9D,IAAI,WAAW,GAAG,CAAC,WAAW,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW;gBACf,WAAW,GAAG,KAAK,CAAC,EAAE,KAAK,WAAW,CAAC;iBACnC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAA4B;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK;gBACT,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAEzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,sBAAsB;YACtC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;;YAElE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AA9HD,oDA8HC"}
1
+ {"version":3,"file":"InMemoryEventStorage.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryEventStorage.ts"],"names":[],"mappings":"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"}
@@ -53,10 +53,16 @@ class InMemoryMessageBus {
53
53
  throw new Error(`No ${messageType} subscribers found`);
54
54
  this.handlers.get(messageType)?.delete(handler);
55
55
  }
56
- async send(commandOrType, aggregateId, options) {
57
- const command = typeof commandOrType === 'string'
58
- ? { type: commandOrType, aggregateId, ...options }
59
- : commandOrType;
56
+ async send(commandOrType, aggregateIdOrMeta, options) {
57
+ let command;
58
+ let meta;
59
+ if (typeof commandOrType === 'string') {
60
+ command = { type: commandOrType, aggregateId: aggregateIdOrMeta, ...options };
61
+ }
62
+ else {
63
+ command = commandOrType;
64
+ meta = aggregateIdOrMeta;
65
+ }
60
66
  (0, assert_ts_1.assertMessage)(command, 'command');
61
67
  const handlers = this.handlers.get(command.type);
62
68
  if (!handlers || !handlers.size)
@@ -64,7 +70,7 @@ class InMemoryMessageBus {
64
70
  if (handlers.size > 1)
65
71
  throw new Error(`More than one '${command.type}' subscriber found`);
66
72
  const commandHandler = handlers.values().next().value;
67
- return commandHandler(command);
73
+ return commandHandler(command, meta);
68
74
  }
69
75
  /** @deprecated Use {@link send} */
70
76
  sendRaw(command) {
@@ -1 +1 @@
1
- {"version":3,"file":"InMemoryMessageBus.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryMessageBus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InMemoryMessageBus.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryMessageBus.ts"],"names":[],"mappings":";;;AAUA,kDAK4B;AAE5B;;;GAGG;AACH,MAAa,kBAAkB;IAEpB,QAAQ,GAAsC,IAAI,GAAG,EAAE,CAAC;IACxD,mBAAmB,CAAU;IAC7B,SAAS,CAAqB;IAC9B,MAAM,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE9D,YAAY,EAAE,SAAS,EAAE,mBAAmB,GAAG,CAAC,CAAC,SAAS,KAGtD,EAAE;QACL,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,WAAmB,EAAE,OAAwB;QAC/C,IAAA,wBAAY,EAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACzC,IAAA,0BAAc,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEnC,gEAAgE;QAChE,gHAAgH;QAChH,oGAAoG;QACpG,iGAAiG;QACjG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;aACtC,IAAI,IAAI,CAAC,mBAAmB;YAChC,MAAM,IAAI,KAAK,CAAC,IAAI,WAAW,uCAAuC,IAAI,CAAC,SAAS,SAAS,CAAC,CAAC;QAEhG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAiB;QACtB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,IAAI,kBAAkB,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,WAAmB,EAAE,OAAwB;QAChD,IAAA,wBAAY,EAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACzC,IAAA,0BAAc,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,MAAM,WAAW,oBAAoB,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAgBD,KAAK,CAAC,IAAI,CAAC,aAAgC,EAAE,iBAAyC,EAAE,OAGxE;QACf,IAAI,OAAiB,CAAC;QACtB,IAAI,IAA8B,CAAC;QACnC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAuC,EAAE,GAAG,OAAO,EAAE,CAAC;QACrG,CAAC;aACI,CAAC;YACL,OAAO,GAAG,aAAa,CAAC;YACxB,IAAI,GAAG,iBAA6C,CAAC;QACtD,CAAC;QAED,IAAA,yBAAa,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC9B,MAAM,IAAI,KAAK,CAAC,OAAO,OAAO,CAAC,IAAI,qBAAqB,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,CAAC,IAAI,oBAAoB,CAAC,CAAC;QAErE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAEtD,OAAO,cAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,OAAiB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAA0B;QACtD,IAAA,uBAAW,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE5B,MAAM,QAAQ,GAAmC,EAAE,CAAC;QAEpD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3D,IAAI,CAAC;gBACJ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,GAAG,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5C,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAEhD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACD;AAhID,gDAgIC"}
@@ -1 +1 @@
1
- {"version":3,"file":"IDispatchPipelineProcessor.js","sourceRoot":"","sources":["../../../src/interfaces/IDispatchPipelineProcessor.ts"],"names":[],"mappings":";;;AACA,+CAAyC;AAmClC,MAAM,2BAA2B,GAAG,CAAC,GAAY,EAAqC,EAAE,CAC9F,IAAA,sBAAQ,EAAC,GAAG,CAAC;OACV,SAAS,IAAI,GAAG;OAChB,OAAQ,GAAkC,CAAC,OAAO,KAAK,UAAU,CAAC;AAHzD,QAAA,2BAA2B,+BAG8B"}
1
+ {"version":3,"file":"IDispatchPipelineProcessor.js","sourceRoot":"","sources":["../../../src/interfaces/IDispatchPipelineProcessor.ts"],"names":[],"mappings":";;;AAEA,+CAAyC;AAqClC,MAAM,2BAA2B,GAAG,CAAC,GAAY,EAAqC,EAAE,CAC9F,IAAA,sBAAQ,EAAC,GAAG,CAAC;OACV,SAAS,IAAI,GAAG;OAChB,OAAQ,GAAkC,CAAC,OAAO,KAAK,UAAU,CAAC;AAHzD,QAAA,2BAA2B,+BAG8B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IMessageMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMessageMeta.js","sourceRoot":"","sources":["../../../src/interfaces/IMessageMeta.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"IObservable.js","sourceRoot":"","sources":["../../../src/interfaces/IObservable.ts"],"names":[],"mappings":";;;AACA,+CAAyC;AAmBlC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAsB,EAAE,CAChE,IAAA,sBAAQ,EAAC,GAAG,CAAC;OACV,IAAI,IAAI,GAAG;OACX,OAAO,GAAG,CAAC,EAAE,KAAK,UAAU;OAC5B,KAAK,IAAI,GAAG;OACZ,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC;AALrB,QAAA,YAAY,gBAKS"}
1
+ {"version":3,"file":"IObservable.js","sourceRoot":"","sources":["../../../src/interfaces/IObservable.ts"],"names":[],"mappings":";;;AAEA,+CAAyC;AAmBlC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAsB,EAAE,CAChE,IAAA,sBAAQ,EAAC,GAAG,CAAC;OACV,IAAI,IAAI,GAAG;OACX,OAAO,GAAG,CAAC,EAAE,KAAK,UAAU;OAC5B,KAAK,IAAI,GAAG;OACZ,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC;AALrB,QAAA,YAAY,gBAKS"}
@@ -34,6 +34,7 @@ __exportStar(require("./IIdentifierProvider.js"), exports);
34
34
  __exportStar(require("./ILocker.js"), exports);
35
35
  __exportStar(require("./ILogger.js"), exports);
36
36
  __exportStar(require("./IMessage.js"), exports);
37
+ __exportStar(require("./IMessageMeta.js"), exports);
37
38
  __exportStar(require("./IMutableState.js"), exports);
38
39
  __exportStar(require("./IObjectStorage.js"), exports);
39
40
  __exportStar(require("./IObservable.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,iEAA+C;AAC/C,gDAA8B;AAC9B,mDAAiC;AACjC,kDAAgC;AAChC,kDAAgC;AAChC,kEAAgD;AAChD,8CAA4B;AAC5B,iDAA+B;AAC/B,wDAAsC;AACtC,oDAAkC;AAClC,sDAAoC;AACpC,iDAA+B;AAC/B,2DAAyC;AACzC,mDAAiC;AACjC,oDAAkC;AAClC,2DAAyC;AACzC,+CAA6B;AAC7B,+CAA6B;AAC7B,gDAA8B;AAC9B,qDAAmC;AACnC,sDAAoC;AACpC,mDAAiC;AACjC,gEAA8C;AAC9C,iDAA+B;AAC/B,mDAAiC;AACjC,6CAA2B;AAC3B,sDAAoC;AACpC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,iEAA+C;AAC/C,gDAA8B;AAC9B,mDAAiC;AACjC,kDAAgC;AAChC,kDAAgC;AAChC,kEAAgD;AAChD,8CAA4B;AAC5B,iDAA+B;AAC/B,wDAAsC;AACtC,oDAAkC;AAClC,sDAAoC;AACpC,iDAA+B;AAC/B,2DAAyC;AACzC,mDAAiC;AACjC,oDAAkC;AAClC,2DAAyC;AACzC,+CAA6B;AAC7B,+CAA6B;AAC7B,gDAA8B;AAC9B,oDAAkC;AAClC,qDAAmC;AACnC,sDAAoC;AACpC,mDAAiC;AACjC,gEAA8C;AAC9C,iDAA+B;AAC/B,mDAAiC;AACjC,6CAA2B;AAC3B,sDAAoC;AACpC,mDAAiC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractMongoAccessor = void 0;
4
+ const index_ts_1 = require("../utils/index.js");
5
+ /**
6
+ * Abstract base class for accessing a MongoDB database.
7
+ *
8
+ * Manages the database connection lifecycle, ensuring initialization via `assertConnection`.
9
+ * Supports providing a Db instance directly or a factory function for lazy initialization.
10
+ *
11
+ * Subclasses must implement the `initialize` method for specific setup tasks
12
+ * (e.g. creating collections or indexes).
13
+ */
14
+ class AbstractMongoAccessor {
15
+ db;
16
+ #dbFactory;
17
+ #initLocker = new index_ts_1.Lock();
18
+ #initialized = false;
19
+ constructor(c) {
20
+ if (!c.viewModelMongoDb && !c.viewModelMongoDbFactory)
21
+ throw new TypeError('either viewModelMongoDb or viewModelMongoDbFactory argument required');
22
+ this.db = c.viewModelMongoDb;
23
+ this.#dbFactory = c.viewModelMongoDbFactory;
24
+ }
25
+ /**
26
+ * Ensures that the MongoDB connection is initialized.
27
+ * Uses a lock to prevent race conditions during concurrent initialization attempts.
28
+ * If the database is not already set, it creates one using the provided factory
29
+ * and then calls the `initialize` method.
30
+ *
31
+ * This method is idempotent and safe to call multiple times.
32
+ */
33
+ async assertConnection() {
34
+ if (this.#initialized)
35
+ return;
36
+ try {
37
+ await this.#initLocker.acquire();
38
+ if (this.#initialized)
39
+ return;
40
+ if (!this.db)
41
+ this.db = await this.#dbFactory();
42
+ await this.initialize(this.db);
43
+ this.#initialized = true;
44
+ }
45
+ finally {
46
+ this.#initLocker.release();
47
+ }
48
+ }
49
+ }
50
+ exports.AbstractMongoAccessor = AbstractMongoAccessor;
51
+ //# sourceMappingURL=AbstractMongoAccessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractMongoAccessor.js","sourceRoot":"","sources":["../../../src/mongodb/AbstractMongoAccessor.ts"],"names":[],"mappings":";;;AAEA,gDAAyC;AAEzC;;;;;;;;GAQG;AACH,MAAsB,qBAAqB;IAEhC,EAAE,CAAiB;IACpB,UAAU,CAAuC;IACjD,WAAW,GAAG,IAAI,eAAI,EAAE,CAAC;IAClC,YAAY,GAAG,KAAK,CAAC;IAErB,YAAY,CAA4E;QACvF,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,uBAAuB;YACpD,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;QAE7F,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,gBAAgB,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,uBAAuB,CAAC;IAC7C,CAAC;IAID;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB;QACrB,IAAI,IAAI,CAAC,YAAY;YACpB,OAAO;QAER,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,YAAY;gBACpB,OAAO;YAER,IAAI,CAAC,IAAI,CAAC,EAAE;gBACX,IAAI,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,UAAW,EAAE,CAAC;YAEpC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,CAAC;gBACO,CAAC;YACR,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;IACF,CAAC;CACD;AA7CD,sDA6CC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractMongoObjectProjection = void 0;
4
+ const AbstractProjection_ts_1 = require("../AbstractProjection.js");
5
+ const MongoObjectView_ts_1 = require("./MongoObjectView.js");
6
+ class AbstractMongoObjectProjection extends AbstractProjection_ts_1.AbstractProjection {
7
+ static get tableName() {
8
+ throw new Error('tableName is not defined');
9
+ }
10
+ static get schemaVersion() {
11
+ throw new Error('schemaVersion is not defined');
12
+ }
13
+ constructor({ viewModelMongoDb, viewModelMongoDbFactory, logger }) {
14
+ super({ logger });
15
+ this.view = new MongoObjectView_ts_1.MongoObjectView({
16
+ schemaVersion: new.target.schemaVersion,
17
+ projectionName: new.target.name,
18
+ viewModelMongoDb,
19
+ viewModelMongoDbFactory,
20
+ tableNamePrefix: new.target.tableName,
21
+ logger
22
+ });
23
+ }
24
+ }
25
+ exports.AbstractMongoObjectProjection = AbstractMongoObjectProjection;
26
+ //# sourceMappingURL=AbstractMongoObjectProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractMongoObjectProjection.js","sourceRoot":"","sources":["../../../src/mongodb/AbstractMongoObjectProjection.ts"],"names":[],"mappings":";;;AACA,oEAA8D;AAC9D,6DAAuD;AAEvD,MAAsB,6BAAiC,SAAQ,0CAAsC;IAEpG,MAAM,KAAK,SAAS;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,aAAa;QACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,EACsB;QAEpF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAElB,IAAI,CAAC,IAAI,GAAG,IAAI,oCAAe,CAAC;YAC/B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa;YACvC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;YAC/B,gBAAgB;YAChB,uBAAuB;YACvB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;YACrC,MAAM;SACN,CAAC,CAAC;IACJ,CAAC;CACD;AAxBD,sEAwBC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractMongoView = void 0;
4
+ const MongoViewLocker_ts_1 = require("./MongoViewLocker.js");
5
+ const MongoEventLocker_ts_1 = require("./MongoEventLocker.js");
6
+ const AbstractMongoAccessor_ts_1 = require("./AbstractMongoAccessor.js");
7
+ const assert_ts_1 = require("../utils/assert.js");
8
+ /**
9
+ * Base class for MongoDB-backed projection views with restore locking and last-processed-event tracking
10
+ */
11
+ class AbstractMongoView extends AbstractMongoAccessor_ts_1.AbstractMongoAccessor {
12
+ schemaVersion;
13
+ viewLocker;
14
+ eventLocker;
15
+ logger;
16
+ get ready() {
17
+ return this.viewLocker.ready;
18
+ }
19
+ constructor(options) {
20
+ (0, assert_ts_1.assertString)(options.projectionName, 'projectionName');
21
+ (0, assert_ts_1.assertString)(options.schemaVersion, 'schemaVersion');
22
+ super(options);
23
+ this.schemaVersion = options.schemaVersion;
24
+ this.viewLocker = new MongoViewLocker_ts_1.MongoViewLocker(options);
25
+ this.eventLocker = new MongoEventLocker_ts_1.MongoEventLocker(options);
26
+ this.logger = options.logger && 'child' in options.logger ?
27
+ options.logger.child({ serviceName: new.target.name }) :
28
+ options.logger;
29
+ }
30
+ // eslint-disable-next-line class-methods-use-this
31
+ initialize(_db) {
32
+ // Lockers initialize themselves on first use
33
+ }
34
+ async lock() {
35
+ return this.viewLocker.lock();
36
+ }
37
+ async unlock() {
38
+ await this.viewLocker.unlock();
39
+ }
40
+ once(event) {
41
+ return this.viewLocker.once(event);
42
+ }
43
+ getLastEvent() {
44
+ return this.eventLocker.getLastEvent();
45
+ }
46
+ tryMarkAsProjecting(event) {
47
+ return this.eventLocker.tryMarkAsProjecting(event);
48
+ }
49
+ markAsProjected(event) {
50
+ return this.eventLocker.markAsProjected(event);
51
+ }
52
+ markAsLastEvent(event) {
53
+ return this.eventLocker.markAsLastEvent(event);
54
+ }
55
+ }
56
+ exports.AbstractMongoView = AbstractMongoView;
57
+ //# sourceMappingURL=AbstractMongoView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractMongoView.js","sourceRoot":"","sources":["../../../src/mongodb/AbstractMongoView.ts"],"names":[],"mappings":";;;AAGA,6DAAmF;AACnF,+DAAsF;AACtF,yEAAmE;AACnE,kDAAkD;AAElD;;GAEG;AACH,MAAsB,iBAAkB,SAAQ,gDAAqB;IAEjD,aAAa,CAAS;IACtB,UAAU,CAAkB;IAC5B,WAAW,CAAmB;IACvC,MAAM,CAAsB;IAEtC,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,YAAY,OAEY;QACvB,IAAA,wBAAY,EAAC,OAAO,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACvD,IAAA,wBAAY,EAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAErD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,oCAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,sCAAgB,CAAC,OAAO,CAAC,CAAC;QACjD,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,kDAAkD;IACxC,UAAU,CAAC,GAAO;QAC3B,6CAA6C;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAChC,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,KAAa;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACD;AA3DD,8CA2DC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IContainer.js","sourceRoot":"","sources":["../../../src/mongodb/IContainer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MongoEventLocker = void 0;
4
+ const assert_ts_1 = require("../utils/assert.js");
5
+ const AbstractMongoAccessor_ts_1 = require("./AbstractMongoAccessor.js");
6
+ const index_ts_1 = require("./utils/index.js");
7
+ /**
8
+ * MongoDB-backed implementation of IEventLocker.
9
+ *
10
+ * Uses two collections:
11
+ * - `ncqrs_event_locks`: tracks per-event processing state
12
+ * - `ncqrs_view_locks`: stores the last processed event per projection
13
+ *
14
+ * Event lock state machine: nil → processing → processed
15
+ */
16
+ class MongoEventLocker extends AbstractMongoAccessor_ts_1.AbstractMongoAccessor {
17
+ static DEFAULT_EVENT_LOCK_TTL = 15_000;
18
+ static DEFAULT_EVENT_LOCKS_COLLECTION = 'ncqrs_event_locks';
19
+ static DEFAULT_VIEW_LOCKS_COLLECTION = 'ncqrs_view_locks';
20
+ #lockIdPrefix;
21
+ #viewLockId;
22
+ #eventLockTtl;
23
+ #eventLocksCollectionName;
24
+ #viewLocksCollectionName;
25
+ #eventLocksCollection;
26
+ #viewLocksCollection;
27
+ constructor(o) {
28
+ super(o);
29
+ (0, assert_ts_1.assertString)(o.projectionName, 'projectionName');
30
+ (0, assert_ts_1.assertString)(o.schemaVersion, 'schemaVersion');
31
+ if (o.eventLockTtl !== undefined)
32
+ (0, assert_ts_1.assertNonNegativeInteger)(o.eventLockTtl, 'eventLockTtl');
33
+ if (o.eventLocksCollection !== undefined)
34
+ (0, assert_ts_1.assertString)(o.eventLocksCollection, 'eventLocksCollection');
35
+ if (o.viewLocksCollection !== undefined)
36
+ (0, assert_ts_1.assertString)(o.viewLocksCollection, 'viewLocksCollection');
37
+ this.#eventLocksCollectionName = o.eventLocksCollection ?? MongoEventLocker.DEFAULT_EVENT_LOCKS_COLLECTION;
38
+ this.#viewLocksCollectionName = o.viewLocksCollection ?? MongoEventLocker.DEFAULT_VIEW_LOCKS_COLLECTION;
39
+ this.#lockIdPrefix = `${o.projectionName}:${o.schemaVersion}`;
40
+ this.#viewLockId = `${o.projectionName}:${o.schemaVersion}`;
41
+ this.#eventLockTtl = o.eventLockTtl ?? MongoEventLocker.DEFAULT_EVENT_LOCK_TTL;
42
+ }
43
+ async initialize(db) {
44
+ this.#eventLocksCollection = db.collection(this.#eventLocksCollectionName);
45
+ this.#viewLocksCollection = db.collection(this.#viewLocksCollectionName);
46
+ await this.#eventLocksCollection.createIndex({ processingAt: 1 }, { sparse: true });
47
+ }
48
+ #eventLockId(eventId) {
49
+ return `${this.#lockIdPrefix}:${eventId}`;
50
+ }
51
+ async tryMarkAsProjecting(event) {
52
+ await this.assertConnection();
53
+ const eventId = (0, index_ts_1.getEventId)(event);
54
+ const lockId = this.#eventLockId(eventId);
55
+ const now = new Date();
56
+ const lockExpiry = new Date(now.getTime() - this.#eventLockTtl);
57
+ // Claim an expired lock if one exists
58
+ const updateResult = await this.#eventLocksCollection.updateOne({
59
+ _id: lockId,
60
+ processedAt: null,
61
+ $or: [
62
+ { processingAt: null },
63
+ { processingAt: { $exists: false } },
64
+ { processingAt: { $lt: lockExpiry } }
65
+ ]
66
+ }, { $set: { processingAt: now, processedAt: null } });
67
+ if (updateResult.modifiedCount === 1)
68
+ return true;
69
+ // No existing document matched — try to insert a fresh lock
70
+ try {
71
+ await this.#eventLocksCollection.insertOne({ _id: lockId, processingAt: now, processedAt: null });
72
+ return true;
73
+ }
74
+ catch (err) {
75
+ if (typeof err === 'object' && err !== null && 'code' in err && err.code === 11000)
76
+ return false; // Document exists and is actively locked
77
+ throw err;
78
+ }
79
+ }
80
+ async markAsProjected(event) {
81
+ await this.assertConnection();
82
+ const eventId = (0, index_ts_1.getEventId)(event);
83
+ const lockId = this.#eventLockId(eventId);
84
+ const result = await this.#eventLocksCollection.findOneAndUpdate({ _id: lockId, processedAt: null }, { $set: { processedAt: new Date() } });
85
+ if (!result)
86
+ throw new Error(`Event ${event.id} could not be marked as processed`);
87
+ }
88
+ async markAsLastEvent(event) {
89
+ await this.assertConnection();
90
+ await this.#viewLocksCollection.updateOne({ _id: this.#viewLockId }, {
91
+ $set: { lastEvent: JSON.stringify(event) },
92
+ $setOnInsert: { _id: this.#viewLockId }
93
+ }, { upsert: true });
94
+ }
95
+ async getLastEvent() {
96
+ await this.assertConnection();
97
+ const doc = await this.#viewLocksCollection.findOne({ _id: this.#viewLockId });
98
+ if (!doc?.lastEvent)
99
+ return undefined;
100
+ return JSON.parse(doc.lastEvent);
101
+ }
102
+ }
103
+ exports.MongoEventLocker = MongoEventLocker;
104
+ //# sourceMappingURL=MongoEventLocker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoEventLocker.js","sourceRoot":"","sources":["../../../src/mongodb/MongoEventLocker.ts"],"names":[],"mappings":"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"}