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,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SqliteEventStorage = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const index_ts_1 = require("../utils/index.js");
6
+ const index_ts_2 = require("../errors/index.js");
7
+ const AbstractSqliteAccessor_ts_1 = require("./AbstractSqliteAccessor.js");
8
+ const index_ts_3 = require("./utils/index.js");
9
+ function extractMeta(envelope) {
10
+ const { event: _event, ignoreConcurrencyError: _ignore, ...rest } = envelope;
11
+ if (Object.keys(rest).length === 0)
12
+ return null;
13
+ return rest;
14
+ }
15
+ class SqliteEventStorage extends AbstractSqliteAccessor_ts_1.AbstractSqliteAccessor {
16
+ #insertEventQuery;
17
+ #insertSagaRefQuery;
18
+ #checkConcurrencyQuery;
19
+ #getRowidQuery;
20
+ #getAggregateEventsQuery;
21
+ #getSagaEventsQuery;
22
+ #getSagaRefsQuery;
23
+ #getEventsByTypesQuery;
24
+ initialize(db) {
25
+ db.pragma('foreign_keys = ON');
26
+ db.exec(`CREATE TABLE IF NOT EXISTS tbl_events (
27
+ id BLOB PRIMARY KEY,
28
+ aggregate_id BLOB,
29
+ aggregate_version INTEGER,
30
+ type TEXT NOT NULL,
31
+ data JSON NOT NULL,
32
+ meta JSON
33
+ )`);
34
+ db.exec(`CREATE TABLE IF NOT EXISTS tbl_event_sagas (
35
+ saga_descriptor TEXT NOT NULL,
36
+ origin_id BLOB NOT NULL,
37
+ event_id BLOB NOT NULL,
38
+ PRIMARY KEY (saga_descriptor, origin_id, event_id),
39
+ FOREIGN KEY (event_id) REFERENCES tbl_events(id)
40
+ )`);
41
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_aggregate_id ON tbl_events (aggregate_id)');
42
+ db.exec('CREATE INDEX IF NOT EXISTS idx_event_sagas_event_id ON tbl_event_sagas (event_id)');
43
+ this.#insertEventQuery = db.prepare(`
44
+ INSERT INTO tbl_events (id, aggregate_id, aggregate_version, type, data, meta)
45
+ VALUES (?, ?, ?, ?, ?, ?)
46
+ `);
47
+ this.#insertSagaRefQuery = db.prepare(`
48
+ INSERT INTO tbl_event_sagas (saga_descriptor, origin_id, event_id)
49
+ VALUES (?, ?, ?)
50
+ `);
51
+ this.#checkConcurrencyQuery = db.prepare(`
52
+ SELECT 1 FROM tbl_events
53
+ WHERE aggregate_id = ? AND aggregate_version = ?
54
+ LIMIT 1
55
+ `);
56
+ this.#getRowidQuery = db.prepare(`
57
+ SELECT rowid FROM tbl_events WHERE id = ?
58
+ `);
59
+ this.#getAggregateEventsQuery = db.prepare(`
60
+ WITH tail AS (
61
+ SELECT id AS tail_id
62
+ FROM tbl_events
63
+ WHERE aggregate_id = @aggregateId
64
+ AND (@afterVersion IS NULL OR aggregate_version > @afterVersion)
65
+ ORDER BY rowid DESC
66
+ LIMIT 1
67
+ )
68
+ SELECT e.id, e.aggregate_id, e.aggregate_version, e.type, e.data, e.meta, e.rowid
69
+ FROM tbl_events e, tail
70
+ WHERE e.aggregate_id = @aggregateId
71
+ AND (@afterVersion IS NULL OR e.aggregate_version > @afterVersion)
72
+ AND (
73
+ @eventTypes IS NULL
74
+ OR e.type IN (SELECT value FROM json_each(@eventTypes))
75
+ OR (@tail = 'last' AND e.id = tail.tail_id)
76
+ )
77
+ ORDER BY e.rowid
78
+ `);
79
+ this.#getSagaEventsQuery = db.prepare(`
80
+ SELECT e.id, e.aggregate_id, e.aggregate_version, e.type, e.data, e.meta, e.rowid
81
+ FROM tbl_events e
82
+ LEFT JOIN tbl_event_sagas sr
83
+ ON sr.event_id = e.id
84
+ AND sr.saga_descriptor = @sagaDescriptor
85
+ AND sr.origin_id = @originId
86
+ WHERE e.rowid >= @originRowid AND e.rowid < @beforeRowid
87
+ AND (e.id = @originId OR sr.event_id IS NOT NULL)
88
+ ORDER BY e.rowid
89
+ `);
90
+ this.#getSagaRefsQuery = db.prepare(`
91
+ SELECT saga_descriptor, origin_id
92
+ FROM tbl_event_sagas
93
+ WHERE event_id = ?
94
+ `);
95
+ this.#getEventsByTypesQuery = db.prepare(`
96
+ SELECT id, aggregate_id, aggregate_version, type, data, meta, rowid
97
+ FROM tbl_events
98
+ WHERE rowid > ?
99
+ ORDER BY rowid
100
+ `);
101
+ }
102
+ // eslint-disable-next-line class-methods-use-this
103
+ getNewId() {
104
+ return (0, node_crypto_1.randomUUID)().replaceAll('-', '');
105
+ }
106
+ async commitEvents(events, options) {
107
+ await this.assertConnection();
108
+ const metaJson = options?.meta ? JSON.stringify(options.meta) : null;
109
+ this.db.transaction(() => {
110
+ for (const event of events) {
111
+ if (!options?.ignoreConcurrencyError && event.aggregateId && event.aggregateVersion !== undefined) {
112
+ const conflict = this.#checkConcurrencyQuery.get((0, index_ts_3.guid)(event.aggregateId), event.aggregateVersion);
113
+ if (conflict)
114
+ throw new index_ts_2.ConcurrencyError(`Duplicate aggregateVersion ${event.aggregateVersion} for aggregate ${event.aggregateId}`);
115
+ }
116
+ const { sagaOrigins, id, ...eventData } = event;
117
+ (0, index_ts_1.assertString)(id, 'event.id');
118
+ const eventId = (0, index_ts_3.guid)(id);
119
+ this.#insertEventQuery.run(eventId, event.aggregateId !== undefined ? (0, index_ts_3.guid)(event.aggregateId) : null, event.aggregateVersion ?? null, event.type, JSON.stringify(eventData), metaJson);
120
+ if (sagaOrigins) {
121
+ for (const [descriptor, originId] of Object.entries(sagaOrigins)) {
122
+ this.#insertSagaRefQuery.run(descriptor, (0, index_ts_3.guid)(originId), eventId);
123
+ }
124
+ }
125
+ }
126
+ })();
127
+ return events;
128
+ }
129
+ async *getAggregateEvents(aggregateId, options) {
130
+ await this.assertConnection();
131
+ const rows = this.#getAggregateEventsQuery.all({
132
+ aggregateId: (0, index_ts_3.guid)(aggregateId),
133
+ afterVersion: options?.snapshot?.aggregateVersion ?? null,
134
+ eventTypes: options?.eventTypes
135
+ ? JSON.stringify(options.eventTypes)
136
+ : null,
137
+ tail: options?.tail ?? null
138
+ });
139
+ for (const row of rows)
140
+ yield this.#reconstructEvent(row);
141
+ }
142
+ async *getSagaEvents(sagaId, { beforeEvent }) {
143
+ await this.assertConnection();
144
+ (0, index_ts_1.assertString)(beforeEvent?.id, 'beforeEvent.id');
145
+ const { sagaDescriptor, originEventId } = (0, index_ts_1.parseSagaId)(sagaId);
146
+ if (beforeEvent.sagaOrigins?.[sagaDescriptor] !== originEventId)
147
+ throw new TypeError('beforeEvent.sagaOrigins does not match sagaId');
148
+ const originRowid = this.#getRowidQuery.get((0, index_ts_3.guid)(originEventId));
149
+ if (!originRowid)
150
+ throw new Error(`origin event ${originEventId} not found`);
151
+ const beforeRowid = this.#getRowidQuery.get((0, index_ts_3.guid)(beforeEvent.id));
152
+ if (!beforeRowid)
153
+ throw new Error(`beforeEvent ${beforeEvent.id} not found`);
154
+ const rows = this.#getSagaEventsQuery.all({
155
+ sagaDescriptor,
156
+ originId: (0, index_ts_3.guid)(originEventId),
157
+ originRowid: originRowid.rowid,
158
+ beforeRowid: beforeRowid.rowid
159
+ });
160
+ for (const row of rows)
161
+ yield this.#reconstructEvent(row);
162
+ }
163
+ async *getEventsByTypes(eventTypes, options) {
164
+ await this.assertConnection();
165
+ const lastEventId = options?.afterEvent?.id;
166
+ if (options?.afterEvent)
167
+ (0, index_ts_1.assertString)(options.afterEvent.id, 'options.afterEvent.id');
168
+ let afterRowid = 0;
169
+ if (lastEventId) {
170
+ const row = this.#getRowidQuery.get((0, index_ts_3.guid)(lastEventId));
171
+ if (!row)
172
+ return;
173
+ afterRowid = row.rowid;
174
+ }
175
+ const rows = this.#getEventsByTypesQuery.all(afterRowid);
176
+ for (const row of rows) {
177
+ if (eventTypes.includes(row.type))
178
+ yield this.#reconstructEvent(row);
179
+ }
180
+ }
181
+ async process(batch) {
182
+ const events = [];
183
+ for (const item of batch) {
184
+ if (!item.event)
185
+ throw new Error('Event batch does not contain `event`');
186
+ events.push(item.event);
187
+ }
188
+ const meta = extractMeta(batch[0]);
189
+ const ignoreConcurrencyError = batch[0]?.ignoreConcurrencyError;
190
+ await this.commitEvents(events, { ignoreConcurrencyError, meta });
191
+ return batch;
192
+ }
193
+ #getSagaOriginsForEvent(eventIdBuf) {
194
+ const refs = this.#getSagaRefsQuery.all(eventIdBuf);
195
+ if (refs.length === 0)
196
+ return {};
197
+ const sagaOrigins = {};
198
+ for (const ref of refs)
199
+ sagaOrigins[ref.saga_descriptor] = (0, index_ts_3.bufferToGuid)(ref.origin_id);
200
+ return sagaOrigins;
201
+ }
202
+ #reconstructEvent(row) {
203
+ const data = JSON.parse(row.data);
204
+ const sagaOrigins = this.#getSagaOriginsForEvent(row.id);
205
+ const event = {
206
+ id: (0, index_ts_3.bufferToGuid)(row.id),
207
+ ...data
208
+ };
209
+ if (Object.keys(sagaOrigins).length > 0)
210
+ event.sagaOrigins = sagaOrigins;
211
+ return event;
212
+ }
213
+ }
214
+ exports.SqliteEventStorage = SqliteEventStorage;
215
+ //# sourceMappingURL=SqliteEventStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteEventStorage.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteEventStorage.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAezC,gDAA8D;AAC9D,iDAAsD;AACtD,2EAAqE;AACrE,+CAAsD;AAqBtD,SAAS,WAAW,CAAC,QAAkC;IACtD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC7E,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QACjC,OAAO,IAAI,CAAC;IAEb,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAa,kBAAmB,SAAQ,kDAAsB;IAK7D,iBAAiB,CAAoF;IACrG,mBAAmB,CAAuC;IAC1D,sBAAsB,CAAyC;IAC/D,cAAc,CAAiC;IAC/C,wBAAwB,CAKV;IACd,mBAAmB,CAKL;IACd,iBAAiB,CAAmC;IACpD,sBAAsB,CAAiC;IAE7C,UAAU,CAAC,EAAY;QAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE/B,EAAE,CAAC,IAAI,CAAC;;;;;;;IAON,CAAC,CAAC;QAEJ,EAAE,CAAC,IAAI,CAAC;;;;;;IAMN,CAAC,CAAC;QAEJ,EAAE,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;QAC3F,EAAE,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAE7F,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGnC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGrC,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIxC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC;;GAEhC,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;GAmB1C,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;GAUrC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAInC,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKxC,CAAC,CAAC;IAEJ,CAAC;IAED,kDAAkD;IAClD,QAAQ;QACP,OAAO,IAAA,wBAAU,GAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAiB,EAAE,OAGrC;QACA,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAErE,IAAI,CAAC,EAAG,CAAC,WAAW,CAAC,GAAG,EAAE;YACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,EAAE,sBAAsB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAA,eAAI,EAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;oBAClG,IAAI,QAAQ;wBACX,MAAM,IAAI,2BAAgB,CAAC,8BAA8B,KAAK,CAAC,gBAAgB,kBAAkB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxH,CAAC;gBAED,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;gBAChD,IAAA,uBAAY,EAAC,EAAE,EAAE,UAAU,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAA,eAAI,EAAC,EAAE,CAAC,CAAC;gBAEzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACzB,OAAO,EACP,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,eAAI,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAChE,KAAK,CAAC,gBAAgB,IAAI,IAAI,EAC9B,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EACzB,QAAQ,CACR,CAAC;gBAEF,IAAI,WAAW,EAAE,CAAC;oBACjB,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;wBAClE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC3B,UAAU,EACV,IAAA,eAAI,EAAC,QAAQ,CAAC,EACd,OAAO,CACP,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAA,CAAE,kBAAkB,CAAC,WAAuB,EAAE,OAAoC;QACtF,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;YAC9C,WAAW,EAAE,IAAA,eAAI,EAAC,WAAW,CAAC;YAC9B,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,IAAI,IAAI;YACzD,UAAU,EAAE,OAAO,EAAE,UAAU;gBAC9B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;gBACpC,CAAC,CAAC,IAAI;YACP,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI;SAC3B,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,IAAI;YACrB,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAA,CAAE,aAAa,CAAC,MAAkB,EAAE,EAAE,WAAW,EAA2B;QAChF,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,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,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAA,eAAI,EAAC,aAAa,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW;YACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,aAAa,YAAY,CAAC,CAAC;QAE5D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAA,eAAI,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW;YACf,MAAM,IAAI,KAAK,CAAC,eAAe,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC;QAE5D,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YACzC,cAAc;YACd,QAAQ,EAAE,IAAA,eAAI,EAAC,aAAa,CAAC;YAC7B,WAAW,EAAE,WAAW,CAAC,KAAK;YAC9B,WAAW,EAAE,WAAW,CAAC,KAAK;SAC9B,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,IAAI;YACrB,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAA,CAAE,gBAAgB,CAAC,UAA8B,EAAE,OAAyB;QAChF,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,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,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAA,eAAI,EAAC,WAAW,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG;gBACP,OAAO;YAER,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA4B;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK;gBACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAEzD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC;QAEhE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,uBAAuB,CAAC,UAAkB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YACpB,OAAO,EAAE,CAAC;QAEX,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,KAAK,MAAM,GAAG,IAAI,IAAI;YACrB,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,IAAA,uBAAY,EAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhE,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,iBAAiB,CAAC,GAAa;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAW;YACrB,EAAE,EAAE,IAAA,uBAAY,EAAC,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,IAAI;SACP,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;YACtC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;QAEjC,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AAnRD,gDAmRC"}
@@ -44,7 +44,7 @@ class SqliteObjectStorage extends AbstractSqliteAccessor_ts_1.AbstractSqliteAcce
44
44
  `);
45
45
  }
46
46
  async get(id) {
47
- (0, assert_ts_1.assertString)(id, 'id');
47
+ (0, assert_ts_1.assertDefined)(id, 'id');
48
48
  await this.assertConnection();
49
49
  const r = this.#getQuery.get((0, index_ts_1.guid)(id));
50
50
  if (!r)
@@ -52,14 +52,14 @@ class SqliteObjectStorage extends AbstractSqliteAccessor_ts_1.AbstractSqliteAcce
52
52
  return JSON.parse(r.data);
53
53
  }
54
54
  getSync(id) {
55
- (0, assert_ts_1.assertString)(id, 'id');
55
+ (0, assert_ts_1.assertDefined)(id, 'id');
56
56
  const r = this.#getQuery.get((0, index_ts_1.guid)(id));
57
57
  if (!r)
58
58
  return undefined;
59
59
  return JSON.parse(r.data);
60
60
  }
61
61
  async create(id, data) {
62
- (0, assert_ts_1.assertString)(id, 'id');
62
+ (0, assert_ts_1.assertDefined)(id, 'id');
63
63
  await this.assertConnection();
64
64
  this.#createSync(id, data);
65
65
  }
@@ -69,7 +69,7 @@ class SqliteObjectStorage extends AbstractSqliteAccessor_ts_1.AbstractSqliteAcce
69
69
  throw new Error(`Record '${id}' could not be created`);
70
70
  }
71
71
  async update(id, update) {
72
- (0, assert_ts_1.assertString)(id, 'id');
72
+ (0, assert_ts_1.assertDefined)(id, 'id');
73
73
  (0, assert_ts_1.assertFunction)(update, 'update');
74
74
  await this.assertConnection();
75
75
  this.#updateSync(id, update);
@@ -94,7 +94,7 @@ class SqliteObjectStorage extends AbstractSqliteAccessor_ts_1.AbstractSqliteAcce
94
94
  throw new Error(`Record '${id}' could not be updated`);
95
95
  }
96
96
  async updateEnforcingNew(id, update) {
97
- (0, assert_ts_1.assertString)(id, 'id');
97
+ (0, assert_ts_1.assertDefined)(id, 'id');
98
98
  (0, assert_ts_1.assertFunction)(update, 'update');
99
99
  await this.assertConnection();
100
100
  const record = this.#getQuery.get((0, index_ts_1.guid)(id));
@@ -104,7 +104,7 @@ class SqliteObjectStorage extends AbstractSqliteAccessor_ts_1.AbstractSqliteAcce
104
104
  this.#createSync(id, update());
105
105
  }
106
106
  async delete(id) {
107
- (0, assert_ts_1.assertString)(id, 'id');
107
+ (0, assert_ts_1.assertDefined)(id, 'id');
108
108
  await this.assertConnection();
109
109
  const r = this.#deleteQuery.run((0, index_ts_1.guid)(id));
110
110
  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,mEAA6D;AAE7D,qEAA+D;AAE/D,kDAAkD;AAElD;;GAEG;AACH,MAAa,gBAA0B,SAAQ,0CAAkB;IAEhE,oBAAoB,CAA+B;IAEnD,YAAY,OAEX;QACA,IAAA,wBAAY,EAAC,OAAO,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAClE,IAAA,wBAAY,EAAC,OAAO,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE9D,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,oBAAoB,GAAG,IAAI,4CAAmB,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;AAlDD,4CAkDC"}
1
+ {"version":3,"file":"SqliteObjectView.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectView.ts"],"names":[],"mappings":";;;AAAA,mEAA6D;AAE7D,qEAA+D;AAE/D,kDAAkD;AAElD;;GAEG;AACH,MAAa,gBAA0B,SAAQ,0CAAkB;IAEhE,oBAAoB,CAA+B;IAEnD,YAAY,OAEX;QACA,IAAA,wBAAY,EAAC,OAAO,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAClE,IAAA,wBAAY,EAAC,OAAO,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE9D,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,oBAAoB,GAAG,IAAI,4CAAmB,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;AAlDD,4CAkDC"}
@@ -19,6 +19,7 @@ __exportStar(require("./AbstractSqliteAccessor.js"), exports);
19
19
  __exportStar(require("./AbstractSqliteObjectProjection.js"), exports);
20
20
  __exportStar(require("./AbstractSqliteView.js"), exports);
21
21
  __exportStar(require("./SqliteEventLocker.js"), exports);
22
+ __exportStar(require("./SqliteEventStorage.js"), exports);
22
23
  __exportStar(require("./SqliteObjectStorage.js"), exports);
23
24
  __exportStar(require("./SqliteObjectView.js"), exports);
24
25
  __exportStar(require("./SqliteViewLocker.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2BAAyB;AAEzB,8DAA4C;AAC5C,sEAAoD;AACpD,0DAAwC;AACxC,yDAAuC;AACvC,2DAAyC;AACzC,wDAAsC;AACtC,wDAAsC;AACtC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2BAAyB;AAEzB,8DAA4C;AAC5C,sEAAoD;AACpD,0DAAwC;AACxC,yDAAuC;AACvC,0DAAwC;AACxC,2DAAyC;AACzC,wDAAsC;AACtC,wDAAsC;AACtC,mDAAiC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bufferToGuid = void 0;
4
+ /**
5
+ * Convert Buffer (BLOB) back to a hex string (no dashes)
6
+ */
7
+ const bufferToGuid = (buf) => buf.toString('hex');
8
+ exports.bufferToGuid = bufferToGuid;
9
+ //# sourceMappingURL=bufferToGuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferToGuid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/bufferToGuid.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAA5D,QAAA,YAAY,gBAAgD"}
@@ -1,14 +1,11 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.getEventId = void 0;
4
+ const node_crypto_1 = require("node:crypto");
7
5
  const guid_ts_1 = require("./guid.js");
8
- const md5_1 = __importDefault(require("md5"));
9
6
  /**
10
7
  * Get assigned or generate new event ID from event content
11
8
  */
12
- const getEventId = (event) => (0, guid_ts_1.guid)(typeof event.id === 'string' ? event.id : (0, md5_1.default)(JSON.stringify(event)));
9
+ const getEventId = (event) => (0, guid_ts_1.guid)(typeof event.id === 'string' ? event.id : (0, node_crypto_1.createHash)('md5').update(JSON.stringify(event)).digest('hex'));
13
10
  exports.getEventId = getEventId;
14
11
  //# sourceMappingURL=getEventId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/getEventId.ts"],"names":[],"mappings":";;;;;;AACA,uCAAiC;AACjC,8CAAsB;AAEtB;;GAEG;AACI,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CACnD,IAAA,cAAI,EAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,aAAG,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAD/D,QAAA,UAAU,cACqD"}
1
+ {"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/getEventId.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAEzC,uCAAiC;AAEjC;;GAEG;AACI,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CACnD,IAAA,cAAI,EAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,wBAAU,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AADlG,QAAA,UAAU,cACwF"}
@@ -4,6 +4,6 @@ exports.guid = void 0;
4
4
  /**
5
5
  * Convert Guid to Buffer for storing in Sqlite BLOB
6
6
  */
7
- const guid = (str) => Buffer.from(str.replaceAll('-', ''), 'hex');
7
+ const guid = (str) => Buffer.from(String(str).replaceAll('-', ''), 'hex');
8
8
  exports.guid = guid;
9
9
  //# sourceMappingURL=guid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/guid.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAApE,QAAA,IAAI,QAAgE"}
1
+ {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/guid.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,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;AAAhF,QAAA,IAAI,QAA4E"}
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./bufferToGuid.js"), exports);
17
18
  __exportStar(require("./guid.js"), exports);
18
19
  __exportStar(require("./getEventId.js"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,4CAA0B;AAC1B,kDAAgC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./recordSpanError.js"), exports);
18
+ __exportStar(require("./spanAttributes.js"), exports);
19
+ __exportStar(require("./spanContext.js"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,sDAAoC;AACpC,mDAAiC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recordSpanError = recordSpanError;
4
+ /** SpanStatusCode.ERROR — inlined to avoid a runtime dependency on @opentelemetry/api */
5
+ const SPAN_STATUS_ERROR = 2;
6
+ /**
7
+ * Records the error on the provided span and marks the span status as ERROR.
8
+ * No-op when span is undefined.
9
+ */
10
+ function recordSpanError(span, error) {
11
+ if (!span)
12
+ return;
13
+ span.recordException(error);
14
+ span.setStatus({
15
+ code: SPAN_STATUS_ERROR,
16
+ message: error instanceof Error ? error.message : String(error)
17
+ });
18
+ }
19
+ //# sourceMappingURL=recordSpanError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordSpanError.js","sourceRoot":"","sources":["../../../src/telemetry/recordSpanError.ts"],"names":[],"mappings":";;AASA,0CASC;AAhBD,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;GAGG;AACH,SAAgB,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,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.spanAttributes = spanAttributes;
4
+ const isSpanAttributeValue = (v) => typeof v === 'string'
5
+ || typeof v === 'number'
6
+ || typeof v === 'boolean';
7
+ /**
8
+ * Builds a `{ attributes }` object for use in `tracer.startSpan()` options,
9
+ * prefixing each key with `cqrs.<prefix>`.
10
+ * Entries with non-primitive values (not string/number/boolean) are omitted.
11
+ * An optional `keys` array limits which properties are included.
12
+ *
13
+ * @example
14
+ * tracer.startSpan('send', spanAttributes('command', cmd, ['type', 'aggregateId']), ctx)
15
+ */
16
+ function spanAttributes(prefix, attrs, keys = Object.keys(attrs)) {
17
+ const attributes = {};
18
+ for (const key of keys) {
19
+ const value = attrs[key];
20
+ if (!isSpanAttributeValue(value))
21
+ continue;
22
+ attributes[`cqrs.${prefix}.${String(key)}`] = value;
23
+ }
24
+ return { attributes };
25
+ }
26
+ //# sourceMappingURL=spanAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spanAttributes.js","sourceRoot":"","sources":["../../../src/telemetry/spanAttributes.ts"],"names":[],"mappings":";;AAgBA,wCAiBC;AA/BD,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,SAAgB,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,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.spanContext = spanContext;
4
+ const node_module_1 = require("node:module");
5
+ let _api;
6
+ function getOtelApi() {
7
+ if (!_api) {
8
+ const _require = typeof require !== 'undefined' ? require : (0, node_module_1.createRequire)(`${process.cwd()}/`);
9
+ _api = _require('@opentelemetry/api');
10
+ }
11
+ return _api;
12
+ }
13
+ /**
14
+ * Returns the OTel context to use as the parent for a new span.
15
+ * If `meta.span` is present it is set as the active span on the current context;
16
+ * otherwise the current active context is returned unchanged.
17
+ *
18
+ * Imports `@opentelemetry/api` lazily so the core library has no hard runtime
19
+ * dependency on it — the browser bundle and environments without OTel stay lean.
20
+ */
21
+ function spanContext(meta) {
22
+ const { trace, context } = getOtelApi();
23
+ return meta?.span ? trace.setSpan(context.active(), meta.span) : context.active();
24
+ }
25
+ //# sourceMappingURL=spanContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spanContext.js","sourceRoot":"","sources":["../../../src/telemetry/spanContext.ts"],"names":[],"mappings":";;AAqBA,kCAGC;AAvBD,6CAA4C;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,IAAA,2BAAa,EAAC,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,SAAgB,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"}
@@ -3,15 +3,39 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MapAssertable = void 0;
4
4
  class MapAssertable extends Map {
5
5
  #usageCounter = new Map();
6
+ #factories = new Map();
6
7
  /**
7
8
  * Ensures the key exists in the map, creating it with the factory if needed, and increments its usage counter.
8
9
  */
9
10
  assert(key, factory) {
10
- if (!this.has(key))
11
+ if (!this.has(key) && !this.#factories.has(key))
11
12
  this.set(key, factory());
12
13
  this.#usageCounter.set(key, (this.#usageCounter.get(key) ?? 0) + 1);
14
+ return this.get(key);
15
+ }
16
+ /**
17
+ * Stores a factory that will be called lazily on first `get()`.
18
+ * If the entry is released before being accessed, the factory is never invoked.
19
+ */
20
+ setLazy(key, factory) {
21
+ this.delete(key);
22
+ this.#factories.set(key, factory);
23
+ }
24
+ get(key) {
25
+ const factory = this.#factories.get(key);
26
+ if (factory) {
27
+ this.#factories.delete(key);
28
+ this.set(key, factory());
29
+ }
13
30
  return super.get(key);
14
31
  }
32
+ has(key) {
33
+ return super.has(key) || this.#factories.has(key);
34
+ }
35
+ delete(key) {
36
+ this.#factories.delete(key);
37
+ return super.delete(key);
38
+ }
15
39
  /**
16
40
  * Decrements the usage counter for the key and removes it from the map if no longer used.
17
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MapAssertable.js","sourceRoot":"","sources":["../../../src/utils/MapAssertable.ts"],"names":[],"mappings":";;;AAAA,MAAa,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;AA7BD,sCA6BC"}
1
+ {"version":3,"file":"MapAssertable.js","sourceRoot":"","sources":["../../../src/utils/MapAssertable.ts"],"names":[],"mappings":";;;AAEA,MAAa,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;AAzDD,sCAyDC"}
@@ -1,5 +1,6 @@
1
1
  import { describe } from "./Event.js";
2
2
  import { InMemoryView } from "./in-memory/InMemoryView.js";
3
+ import { recordSpanError, spanAttributes, spanContext } from "./telemetry/index.js";
3
4
  import { isViewLocker, isEventLocker } from "./interfaces/index.js";
4
5
  import { getClassName, validateHandlers, getHandler, subscribe, getMessageHandlerNames, assertFunction } from "./utils/index.js";
5
6
  /**
@@ -17,6 +18,8 @@ export class AbstractProjection {
17
18
  #viewLocker;
18
19
  #eventLocker;
19
20
  _logger;
21
+ #serviceName;
22
+ #tracer;
20
23
  /**
21
24
  * The default view associated with the projection.
22
25
  * Can optionally implement IViewLocker and/or IEventLocker.
@@ -50,11 +53,13 @@ export class AbstractProjection {
50
53
  set _eventLocker(value) {
51
54
  this.#eventLocker = value;
52
55
  }
53
- constructor({ view, viewLocker, eventLocker, logger } = {}) {
56
+ constructor({ view, viewLocker, eventLocker, tracerFactory, logger } = {}) {
54
57
  validateHandlers(this);
55
58
  this.#view = view;
56
59
  this.#viewLocker = viewLocker;
57
60
  this.#eventLocker = eventLocker;
61
+ this.#serviceName = getClassName(this);
62
+ this.#tracer = tracerFactory?.(this.#serviceName);
58
63
  this._logger = logger && 'child' in logger ?
59
64
  logger.child({ service: getClassName(this) }) :
60
65
  logger;
@@ -75,7 +80,17 @@ export class AbstractProjection {
75
80
  await this._viewLocker.once('ready');
76
81
  this._logger?.debug(`view is ready, processing ${describe(event)}`);
77
82
  }
78
- return this._project(event, meta);
83
+ const span = this.#tracer?.startSpan(`${this.#serviceName}.project ${event.type}`, spanAttributes('projection', event, ['type', 'aggregateId']), spanContext(meta));
84
+ try {
85
+ await this._project(event, meta);
86
+ }
87
+ catch (error) {
88
+ recordSpanError(span, error);
89
+ throw error;
90
+ }
91
+ finally {
92
+ span?.end();
93
+ }
79
94
  }
80
95
  /**
81
96
  * Determines whether an event should be recorded as the last projected event (restore checkpoint).
@@ -109,11 +124,21 @@ export class AbstractProjection {
109
124
  * won't be performed by another projection instance.
110
125
  * */
111
126
  async restore(eventStore) {
112
- if (this._viewLocker)
113
- await this._viewLocker.lock();
114
- await this._restore(eventStore);
115
- if (this._viewLocker)
116
- this._viewLocker.unlock();
127
+ const span = this.#tracer?.startSpan(`${this.#serviceName}.restore`);
128
+ try {
129
+ if (this._viewLocker)
130
+ await this._viewLocker.lock();
131
+ await this._restore(eventStore);
132
+ if (this._viewLocker)
133
+ this._viewLocker.unlock();
134
+ }
135
+ catch (error) {
136
+ recordSpanError(span, error);
137
+ throw error;
138
+ }
139
+ finally {
140
+ span?.end();
141
+ }
117
142
  }
118
143
  /** Restore view state from not-yet-projected events */
119
144
  async _restore(eventStore) {