@cratis/chronicle 0.0.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 (647) hide show
  1. package/ChronicleClient.ts +453 -0
  2. package/ChronicleOptions.ts +104 -0
  3. package/EventSequences/AppendError.ts +10 -0
  4. package/EventSequences/AppendOptions.ts +15 -0
  5. package/EventSequences/AppendResult.ts +23 -0
  6. package/EventSequences/ConstraintViolation.ts +16 -0
  7. package/EventSequences/EventLog.ts +21 -0
  8. package/EventSequences/EventSequence.ts +372 -0
  9. package/EventSequences/EventSequenceId.ts +17 -0
  10. package/EventSequences/EventSequenceNumber.ts +38 -0
  11. package/EventSequences/IEventLog.ts +10 -0
  12. package/EventSequences/IEventSequence.ts +47 -0
  13. package/EventSequences/index.ts +13 -0
  14. package/EventStore.ts +132 -0
  15. package/EventStoreName.ts +14 -0
  16. package/EventStoreNamespaceName.ts +17 -0
  17. package/Events/AppendedEvent.ts +19 -0
  18. package/Events/CausationEntry.ts +13 -0
  19. package/Events/Constraints/ConstraintBuilder.ts +86 -0
  20. package/Events/Constraints/ConstraintId.ts +14 -0
  21. package/Events/Constraints/Constraints.ts +117 -0
  22. package/Events/Constraints/IConstraint.ts +18 -0
  23. package/Events/Constraints/IConstraintBuilder.ts +44 -0
  24. package/Events/Constraints/IConstraints.ts +28 -0
  25. package/Events/Constraints/IUniqueConstraintBuilder.ts +52 -0
  26. package/Events/Constraints/UniqueConstraintBuilder.ts +97 -0
  27. package/Events/Constraints/constraint.ts +56 -0
  28. package/Events/Constraints/index.ts +15 -0
  29. package/Events/EventContext.ts +28 -0
  30. package/Events/EventType.ts +41 -0
  31. package/Events/EventTypeGeneration.ts +20 -0
  32. package/Events/EventTypeId.ts +19 -0
  33. package/Events/EventTypes.ts +95 -0
  34. package/Events/IEventTypes.ts +39 -0
  35. package/Events/eventTypeDecorator.ts +147 -0
  36. package/Events/index.ts +14 -0
  37. package/IChronicleClient.ts +39 -0
  38. package/IEventStore.ts +56 -0
  39. package/Metrics.ts +109 -0
  40. package/Observation/ObserverId.ts +14 -0
  41. package/Observation/ObserverRunningState.ts +34 -0
  42. package/Observation/index.ts +5 -0
  43. package/Projections/IProjections.ts +19 -0
  44. package/Projections/ProjectionId.ts +14 -0
  45. package/Projections/Projections.ts +463 -0
  46. package/Projections/declarative/AllSetBuilder.ts +39 -0
  47. package/Projections/declarative/FromBuilder.ts +144 -0
  48. package/Projections/declarative/FromEveryBuilder.ts +46 -0
  49. package/Projections/declarative/IAddBuilder.ts +18 -0
  50. package/Projections/declarative/IAddChildBuilder.ts +25 -0
  51. package/Projections/declarative/IAllSetBuilder.ts +31 -0
  52. package/Projections/declarative/IChildrenBuilder.ts +31 -0
  53. package/Projections/declarative/ICompositeKeyBuilder.ts +22 -0
  54. package/Projections/declarative/IFromBuilder.ts +12 -0
  55. package/Projections/declarative/IFromEveryBuilder.ts +24 -0
  56. package/Projections/declarative/IJoinBuilder.ts +20 -0
  57. package/Projections/declarative/INestedBuilder.ts +19 -0
  58. package/Projections/declarative/IProjectionBuilder.ts +98 -0
  59. package/Projections/declarative/IProjectionBuilderFor.ts +38 -0
  60. package/Projections/declarative/IProjectionFor.ts +18 -0
  61. package/Projections/declarative/IReadModelPropertiesBuilder.ts +132 -0
  62. package/Projections/declarative/IRemovedWithBuilder.ts +25 -0
  63. package/Projections/declarative/IRemovedWithJoinBuilder.ts +25 -0
  64. package/Projections/declarative/ISetBuilder.ts +38 -0
  65. package/Projections/declarative/ISubtractBuilder.ts +18 -0
  66. package/Projections/declarative/JoinBuilder.ts +148 -0
  67. package/Projections/declarative/ProjectionBuilderFor.ts +277 -0
  68. package/Projections/declarative/RemovedWithBuilder.ts +40 -0
  69. package/Projections/declarative/RemovedWithJoinBuilder.ts +43 -0
  70. package/Projections/declarative/SetBuilder.ts +46 -0
  71. package/Projections/declarative/index.ts +26 -0
  72. package/Projections/declarative/projection.ts +59 -0
  73. package/Projections/index.ts +8 -0
  74. package/Projections/modelBound/FromEventMetadata.ts +10 -0
  75. package/Projections/modelBound/FromEventOptions.ts +12 -0
  76. package/Projections/modelBound/addFrom.ts +41 -0
  77. package/Projections/modelBound/childrenFrom.ts +52 -0
  78. package/Projections/modelBound/clearWith.ts +54 -0
  79. package/Projections/modelBound/count.ts +41 -0
  80. package/Projections/modelBound/decrement.ts +41 -0
  81. package/Projections/modelBound/fromEvent.ts +40 -0
  82. package/Projections/modelBound/fromEvery.ts +39 -0
  83. package/Projections/modelBound/increment.ts +41 -0
  84. package/Projections/modelBound/index.ts +38 -0
  85. package/Projections/modelBound/join.ts +44 -0
  86. package/Projections/modelBound/modelBound.ts +59 -0
  87. package/Projections/modelBound/nested.ts +29 -0
  88. package/Projections/modelBound/notRewindable.ts +24 -0
  89. package/Projections/modelBound/removedWith.ts +60 -0
  90. package/Projections/modelBound/removedWithJoin.ts +55 -0
  91. package/Projections/modelBound/setFrom.ts +41 -0
  92. package/Projections/modelBound/setFromContext.ts +41 -0
  93. package/Projections/modelBound/setValue.ts +41 -0
  94. package/Projections/modelBound/subtractFrom.ts +41 -0
  95. package/README.md +69 -0
  96. package/Reactors/IReactors.ts +19 -0
  97. package/Reactors/ReactorId.ts +14 -0
  98. package/Reactors/Reactors.ts +320 -0
  99. package/Reactors/index.ts +8 -0
  100. package/Reactors/reactor.ts +75 -0
  101. package/ReadModels/ReadModelId.ts +14 -0
  102. package/ReadModels/index.ts +6 -0
  103. package/ReadModels/readModel.ts +89 -0
  104. package/Reducers/IReducers.ts +19 -0
  105. package/Reducers/ReducerId.ts +14 -0
  106. package/Reducers/Reducers.ts +322 -0
  107. package/Reducers/index.ts +8 -0
  108. package/Reducers/reducer.ts +87 -0
  109. package/Schemas/JsonSchema.ts +18 -0
  110. package/Schemas/JsonSchemaGenerator.ts +107 -0
  111. package/Schemas/index.ts +6 -0
  112. package/Schemas/jsonSchemaProperty.ts +24 -0
  113. package/Tracing.ts +21 -0
  114. package/artifacts/DefaultClientArtifactsProvider.ts +56 -0
  115. package/artifacts/IClientArtifactsProvider.ts +30 -0
  116. package/artifacts/index.ts +5 -0
  117. package/connection/ChronicleConnection.ts +226 -0
  118. package/connection/ChronicleConnectionString.ts +4 -0
  119. package/connection/ChronicleServices.ts +4 -0
  120. package/connection/ConnectionLifecycle.ts +77 -0
  121. package/connection/DateTimeOffset.ts +4 -0
  122. package/connection/Guid.ts +4 -0
  123. package/connection/TokenProvider.ts +13 -0
  124. package/connection/index.ts +9 -0
  125. package/dist/ChronicleClient.d.ts +55 -0
  126. package/dist/ChronicleClient.d.ts.map +1 -0
  127. package/dist/ChronicleClient.js +396 -0
  128. package/dist/ChronicleClient.js.map +1 -0
  129. package/dist/ChronicleOptions.d.ts +54 -0
  130. package/dist/ChronicleOptions.d.ts.map +1 -0
  131. package/dist/ChronicleOptions.js +75 -0
  132. package/dist/ChronicleOptions.js.map +1 -0
  133. package/dist/EventSequences/AppendError.d.ts +8 -0
  134. package/dist/EventSequences/AppendError.d.ts.map +1 -0
  135. package/dist/EventSequences/AppendError.js +4 -0
  136. package/dist/EventSequences/AppendError.js.map +1 -0
  137. package/dist/EventSequences/AppendOptions.d.ts +11 -0
  138. package/dist/EventSequences/AppendOptions.d.ts.map +1 -0
  139. package/dist/EventSequences/AppendOptions.js +4 -0
  140. package/dist/EventSequences/AppendOptions.js.map +1 -0
  141. package/dist/EventSequences/AppendResult.d.ts +17 -0
  142. package/dist/EventSequences/AppendResult.d.ts.map +1 -0
  143. package/dist/EventSequences/AppendResult.js +4 -0
  144. package/dist/EventSequences/AppendResult.js.map +1 -0
  145. package/dist/EventSequences/ConstraintViolation.d.ts +12 -0
  146. package/dist/EventSequences/ConstraintViolation.d.ts.map +1 -0
  147. package/dist/EventSequences/ConstraintViolation.js +4 -0
  148. package/dist/EventSequences/ConstraintViolation.js.map +1 -0
  149. package/dist/EventSequences/EventLog.d.ts +11 -0
  150. package/dist/EventSequences/EventLog.d.ts.map +1 -0
  151. package/dist/EventSequences/EventLog.js +14 -0
  152. package/dist/EventSequences/EventLog.js.map +1 -0
  153. package/dist/EventSequences/EventSequence.d.ts +27 -0
  154. package/dist/EventSequences/EventSequence.d.ts.map +1 -0
  155. package/dist/EventSequences/EventSequence.js +337 -0
  156. package/dist/EventSequences/EventSequence.js.map +1 -0
  157. package/dist/EventSequences/EventSequenceId.d.ts +12 -0
  158. package/dist/EventSequences/EventSequenceId.d.ts.map +1 -0
  159. package/dist/EventSequences/EventSequenceId.js +18 -0
  160. package/dist/EventSequences/EventSequenceId.js.map +1 -0
  161. package/dist/EventSequences/EventSequenceNumber.d.ts +26 -0
  162. package/dist/EventSequences/EventSequenceNumber.d.ts.map +1 -0
  163. package/dist/EventSequences/EventSequenceNumber.js +36 -0
  164. package/dist/EventSequences/EventSequenceNumber.js.map +1 -0
  165. package/dist/EventSequences/IEventLog.d.ts +8 -0
  166. package/dist/EventSequences/IEventLog.d.ts.map +1 -0
  167. package/dist/EventSequences/IEventLog.js +4 -0
  168. package/dist/EventSequences/IEventLog.js.map +1 -0
  169. package/dist/EventSequences/IEventSequence.d.ts +40 -0
  170. package/dist/EventSequences/IEventSequence.d.ts.map +1 -0
  171. package/dist/EventSequences/IEventSequence.js +4 -0
  172. package/dist/EventSequences/IEventSequence.js.map +1 -0
  173. package/dist/EventSequences/index.d.ts +11 -0
  174. package/dist/EventSequences/index.d.ts.map +1 -0
  175. package/dist/EventSequences/index.js +7 -0
  176. package/dist/EventSequences/index.js.map +1 -0
  177. package/dist/EventStore.d.ts +42 -0
  178. package/dist/EventStore.d.ts.map +1 -0
  179. package/dist/EventStore.js +111 -0
  180. package/dist/EventStore.js.map +1 -0
  181. package/dist/EventStoreName.d.ts +10 -0
  182. package/dist/EventStoreName.d.ts.map +1 -0
  183. package/dist/EventStoreName.js +16 -0
  184. package/dist/EventStoreName.js.map +1 -0
  185. package/dist/EventStoreNamespaceName.d.ts +12 -0
  186. package/dist/EventStoreNamespaceName.d.ts.map +1 -0
  187. package/dist/EventStoreNamespaceName.js +18 -0
  188. package/dist/EventStoreNamespaceName.js.map +1 -0
  189. package/dist/Events/AppendedEvent.d.ts +14 -0
  190. package/dist/Events/AppendedEvent.d.ts.map +1 -0
  191. package/dist/Events/AppendedEvent.js +4 -0
  192. package/dist/Events/AppendedEvent.js.map +1 -0
  193. package/dist/Events/CausationEntry.d.ts +10 -0
  194. package/dist/Events/CausationEntry.d.ts.map +1 -0
  195. package/dist/Events/CausationEntry.js +4 -0
  196. package/dist/Events/CausationEntry.js.map +1 -0
  197. package/dist/Events/Constraints/ConstraintBuilder.d.ts +42 -0
  198. package/dist/Events/Constraints/ConstraintBuilder.d.ts.map +1 -0
  199. package/dist/Events/Constraints/ConstraintBuilder.js +55 -0
  200. package/dist/Events/Constraints/ConstraintBuilder.js.map +1 -0
  201. package/dist/Events/Constraints/ConstraintId.d.ts +10 -0
  202. package/dist/Events/Constraints/ConstraintId.d.ts.map +1 -0
  203. package/dist/Events/Constraints/ConstraintId.js +16 -0
  204. package/dist/Events/Constraints/ConstraintId.js.map +1 -0
  205. package/dist/Events/Constraints/Constraints.d.ts +27 -0
  206. package/dist/Events/Constraints/Constraints.d.ts.map +1 -0
  207. package/dist/Events/Constraints/Constraints.js +104 -0
  208. package/dist/Events/Constraints/Constraints.js.map +1 -0
  209. package/dist/Events/Constraints/IConstraint.d.ts +15 -0
  210. package/dist/Events/Constraints/IConstraint.d.ts.map +1 -0
  211. package/dist/Events/Constraints/IConstraint.js +4 -0
  212. package/dist/Events/Constraints/IConstraint.js.map +1 -0
  213. package/dist/Events/Constraints/IConstraintBuilder.d.ts +37 -0
  214. package/dist/Events/Constraints/IConstraintBuilder.d.ts.map +1 -0
  215. package/dist/Events/Constraints/IConstraintBuilder.js +4 -0
  216. package/dist/Events/Constraints/IConstraintBuilder.js.map +1 -0
  217. package/dist/Events/Constraints/IConstraints.d.ts +23 -0
  218. package/dist/Events/Constraints/IConstraints.d.ts.map +1 -0
  219. package/dist/Events/Constraints/IConstraints.js +4 -0
  220. package/dist/Events/Constraints/IConstraints.js.map +1 -0
  221. package/dist/Events/Constraints/IUniqueConstraintBuilder.d.ts +44 -0
  222. package/dist/Events/Constraints/IUniqueConstraintBuilder.d.ts.map +1 -0
  223. package/dist/Events/Constraints/IUniqueConstraintBuilder.js +4 -0
  224. package/dist/Events/Constraints/IUniqueConstraintBuilder.js.map +1 -0
  225. package/dist/Events/Constraints/UniqueConstraintBuilder.d.ts +42 -0
  226. package/dist/Events/Constraints/UniqueConstraintBuilder.d.ts.map +1 -0
  227. package/dist/Events/Constraints/UniqueConstraintBuilder.js +72 -0
  228. package/dist/Events/Constraints/UniqueConstraintBuilder.js.map +1 -0
  229. package/dist/Events/Constraints/constraint.d.ts +29 -0
  230. package/dist/Events/Constraints/constraint.d.ts.map +1 -0
  231. package/dist/Events/Constraints/constraint.js +39 -0
  232. package/dist/Events/Constraints/constraint.js.map +1 -0
  233. package/dist/Events/Constraints/index.d.ts +13 -0
  234. package/dist/Events/Constraints/index.d.ts.map +1 -0
  235. package/dist/Events/Constraints/index.js +8 -0
  236. package/dist/Events/Constraints/index.js.map +1 -0
  237. package/dist/Events/EventContext.d.ts +20 -0
  238. package/dist/Events/EventContext.d.ts.map +1 -0
  239. package/dist/Events/EventContext.js +4 -0
  240. package/dist/Events/EventContext.js.map +1 -0
  241. package/dist/Events/EventType.d.ts +23 -0
  242. package/dist/Events/EventType.d.ts.map +1 -0
  243. package/dist/Events/EventType.js +40 -0
  244. package/dist/Events/EventType.js.map +1 -0
  245. package/dist/Events/EventTypeGeneration.d.ts +14 -0
  246. package/dist/Events/EventTypeGeneration.d.ts.map +1 -0
  247. package/dist/Events/EventTypeGeneration.js +20 -0
  248. package/dist/Events/EventTypeGeneration.js.map +1 -0
  249. package/dist/Events/EventTypeId.d.ts +14 -0
  250. package/dist/Events/EventTypeId.d.ts.map +1 -0
  251. package/dist/Events/EventTypeId.js +20 -0
  252. package/dist/Events/EventTypeId.js.map +1 -0
  253. package/dist/Events/EventTypes.d.ts +33 -0
  254. package/dist/Events/EventTypes.d.ts.map +1 -0
  255. package/dist/Events/EventTypes.js +83 -0
  256. package/dist/Events/EventTypes.js.map +1 -0
  257. package/dist/Events/IEventTypes.d.ts +32 -0
  258. package/dist/Events/IEventTypes.d.ts.map +1 -0
  259. package/dist/Events/IEventTypes.js +4 -0
  260. package/dist/Events/IEventTypes.js.map +1 -0
  261. package/dist/Events/eventTypeDecorator.d.ts +71 -0
  262. package/dist/Events/eventTypeDecorator.d.ts.map +1 -0
  263. package/dist/Events/eventTypeDecorator.js +86 -0
  264. package/dist/Events/eventTypeDecorator.js.map +1 -0
  265. package/dist/Events/index.d.ts +12 -0
  266. package/dist/Events/index.d.ts.map +1 -0
  267. package/dist/Events/index.js +9 -0
  268. package/dist/Events/index.js.map +1 -0
  269. package/dist/Grpc.d.ts +19 -0
  270. package/dist/Grpc.d.ts.map +1 -0
  271. package/dist/Grpc.js +33 -0
  272. package/dist/Grpc.js.map +1 -0
  273. package/dist/IChronicleClient.d.ts +33 -0
  274. package/dist/IChronicleClient.d.ts.map +1 -0
  275. package/dist/IChronicleClient.js +4 -0
  276. package/dist/IChronicleClient.js.map +1 -0
  277. package/dist/IEventStore.d.ts +44 -0
  278. package/dist/IEventStore.d.ts.map +1 -0
  279. package/dist/IEventStore.js +4 -0
  280. package/dist/IEventStore.js.map +1 -0
  281. package/dist/Metrics.d.ts +70 -0
  282. package/dist/Metrics.d.ts.map +1 -0
  283. package/dist/Metrics.js +100 -0
  284. package/dist/Metrics.js.map +1 -0
  285. package/dist/Observation/ObserverId.d.ts +10 -0
  286. package/dist/Observation/ObserverId.d.ts.map +1 -0
  287. package/dist/Observation/ObserverId.js +16 -0
  288. package/dist/Observation/ObserverId.js.map +1 -0
  289. package/dist/Observation/ObserverRunningState.d.ts +24 -0
  290. package/dist/Observation/ObserverRunningState.d.ts.map +1 -0
  291. package/dist/Observation/ObserverRunningState.js +27 -0
  292. package/dist/Observation/ObserverRunningState.js.map +1 -0
  293. package/dist/Observation/index.d.ts +3 -0
  294. package/dist/Observation/index.d.ts.map +1 -0
  295. package/dist/Observation/index.js +5 -0
  296. package/dist/Observation/index.js.map +1 -0
  297. package/dist/Projections/IProjections.d.ts +16 -0
  298. package/dist/Projections/IProjections.d.ts.map +1 -0
  299. package/dist/Projections/IProjections.js +4 -0
  300. package/dist/Projections/IProjections.js.map +1 -0
  301. package/dist/Projections/ProjectionId.d.ts +10 -0
  302. package/dist/Projections/ProjectionId.d.ts.map +1 -0
  303. package/dist/Projections/ProjectionId.js +16 -0
  304. package/dist/Projections/ProjectionId.js.map +1 -0
  305. package/dist/Projections/Projections.d.ts +36 -0
  306. package/dist/Projections/Projections.d.ts.map +1 -0
  307. package/dist/Projections/Projections.js +390 -0
  308. package/dist/Projections/Projections.js.map +1 -0
  309. package/dist/Projections/declarative/AllSetBuilder.d.ts +20 -0
  310. package/dist/Projections/declarative/AllSetBuilder.d.ts.map +1 -0
  311. package/dist/Projections/declarative/AllSetBuilder.js +37 -0
  312. package/dist/Projections/declarative/AllSetBuilder.js.map +1 -0
  313. package/dist/Projections/declarative/FromBuilder.d.ts +56 -0
  314. package/dist/Projections/declarative/FromBuilder.d.ts.map +1 -0
  315. package/dist/Projections/declarative/FromBuilder.js +105 -0
  316. package/dist/Projections/declarative/FromBuilder.js.map +1 -0
  317. package/dist/Projections/declarative/FromEveryBuilder.d.ts +22 -0
  318. package/dist/Projections/declarative/FromEveryBuilder.d.ts.map +1 -0
  319. package/dist/Projections/declarative/FromEveryBuilder.js +28 -0
  320. package/dist/Projections/declarative/FromEveryBuilder.js.map +1 -0
  321. package/dist/Projections/declarative/IAddBuilder.d.ts +15 -0
  322. package/dist/Projections/declarative/IAddBuilder.d.ts.map +1 -0
  323. package/dist/Projections/declarative/IAddBuilder.js +4 -0
  324. package/dist/Projections/declarative/IAddBuilder.js.map +1 -0
  325. package/dist/Projections/declarative/IAddChildBuilder.d.ts +21 -0
  326. package/dist/Projections/declarative/IAddChildBuilder.d.ts.map +1 -0
  327. package/dist/Projections/declarative/IAddChildBuilder.js +4 -0
  328. package/dist/Projections/declarative/IAddChildBuilder.js.map +1 -0
  329. package/dist/Projections/declarative/IAllSetBuilder.d.ts +26 -0
  330. package/dist/Projections/declarative/IAllSetBuilder.d.ts.map +1 -0
  331. package/dist/Projections/declarative/IAllSetBuilder.js +4 -0
  332. package/dist/Projections/declarative/IAllSetBuilder.js.map +1 -0
  333. package/dist/Projections/declarative/IChildrenBuilder.d.ts +22 -0
  334. package/dist/Projections/declarative/IChildrenBuilder.d.ts.map +1 -0
  335. package/dist/Projections/declarative/IChildrenBuilder.js +4 -0
  336. package/dist/Projections/declarative/IChildrenBuilder.js.map +1 -0
  337. package/dist/Projections/declarative/ICompositeKeyBuilder.d.ts +16 -0
  338. package/dist/Projections/declarative/ICompositeKeyBuilder.d.ts.map +1 -0
  339. package/dist/Projections/declarative/ICompositeKeyBuilder.js +4 -0
  340. package/dist/Projections/declarative/ICompositeKeyBuilder.js.map +1 -0
  341. package/dist/Projections/declarative/IFromBuilder.d.ts +9 -0
  342. package/dist/Projections/declarative/IFromBuilder.d.ts.map +1 -0
  343. package/dist/Projections/declarative/IFromBuilder.js +4 -0
  344. package/dist/Projections/declarative/IFromBuilder.js.map +1 -0
  345. package/dist/Projections/declarative/IFromEveryBuilder.d.ts +20 -0
  346. package/dist/Projections/declarative/IFromEveryBuilder.d.ts.map +1 -0
  347. package/dist/Projections/declarative/IFromEveryBuilder.js +4 -0
  348. package/dist/Projections/declarative/IFromEveryBuilder.js.map +1 -0
  349. package/dist/Projections/declarative/IJoinBuilder.d.ts +16 -0
  350. package/dist/Projections/declarative/IJoinBuilder.d.ts.map +1 -0
  351. package/dist/Projections/declarative/IJoinBuilder.js +4 -0
  352. package/dist/Projections/declarative/IJoinBuilder.js.map +1 -0
  353. package/dist/Projections/declarative/INestedBuilder.d.ts +15 -0
  354. package/dist/Projections/declarative/INestedBuilder.d.ts.map +1 -0
  355. package/dist/Projections/declarative/INestedBuilder.js +4 -0
  356. package/dist/Projections/declarative/INestedBuilder.js.map +1 -0
  357. package/dist/Projections/declarative/IProjectionBuilder.d.ts +80 -0
  358. package/dist/Projections/declarative/IProjectionBuilder.d.ts.map +1 -0
  359. package/dist/Projections/declarative/IProjectionBuilder.js +4 -0
  360. package/dist/Projections/declarative/IProjectionBuilder.js.map +1 -0
  361. package/dist/Projections/declarative/IProjectionBuilderFor.d.ts +31 -0
  362. package/dist/Projections/declarative/IProjectionBuilderFor.d.ts.map +1 -0
  363. package/dist/Projections/declarative/IProjectionBuilderFor.js +4 -0
  364. package/dist/Projections/declarative/IProjectionBuilderFor.js.map +1 -0
  365. package/dist/Projections/declarative/IProjectionFor.d.ts +15 -0
  366. package/dist/Projections/declarative/IProjectionFor.d.ts.map +1 -0
  367. package/dist/Projections/declarative/IProjectionFor.js +4 -0
  368. package/dist/Projections/declarative/IProjectionFor.js.map +1 -0
  369. package/dist/Projections/declarative/IReadModelPropertiesBuilder.d.ts +111 -0
  370. package/dist/Projections/declarative/IReadModelPropertiesBuilder.d.ts.map +1 -0
  371. package/dist/Projections/declarative/IReadModelPropertiesBuilder.js +4 -0
  372. package/dist/Projections/declarative/IReadModelPropertiesBuilder.js.map +1 -0
  373. package/dist/Projections/declarative/IRemovedWithBuilder.d.ts +21 -0
  374. package/dist/Projections/declarative/IRemovedWithBuilder.d.ts.map +1 -0
  375. package/dist/Projections/declarative/IRemovedWithBuilder.js +4 -0
  376. package/dist/Projections/declarative/IRemovedWithBuilder.js.map +1 -0
  377. package/dist/Projections/declarative/IRemovedWithJoinBuilder.d.ts +21 -0
  378. package/dist/Projections/declarative/IRemovedWithJoinBuilder.d.ts.map +1 -0
  379. package/dist/Projections/declarative/IRemovedWithJoinBuilder.js +4 -0
  380. package/dist/Projections/declarative/IRemovedWithJoinBuilder.js.map +1 -0
  381. package/dist/Projections/declarative/ISetBuilder.d.ts +32 -0
  382. package/dist/Projections/declarative/ISetBuilder.d.ts.map +1 -0
  383. package/dist/Projections/declarative/ISetBuilder.js +4 -0
  384. package/dist/Projections/declarative/ISetBuilder.js.map +1 -0
  385. package/dist/Projections/declarative/ISubtractBuilder.d.ts +15 -0
  386. package/dist/Projections/declarative/ISubtractBuilder.d.ts.map +1 -0
  387. package/dist/Projections/declarative/ISubtractBuilder.js +4 -0
  388. package/dist/Projections/declarative/ISubtractBuilder.js.map +1 -0
  389. package/dist/Projections/declarative/JoinBuilder.d.ts +58 -0
  390. package/dist/Projections/declarative/JoinBuilder.d.ts.map +1 -0
  391. package/dist/Projections/declarative/JoinBuilder.js +107 -0
  392. package/dist/Projections/declarative/JoinBuilder.js.map +1 -0
  393. package/dist/Projections/declarative/ProjectionBuilderFor.d.ts +68 -0
  394. package/dist/Projections/declarative/ProjectionBuilderFor.d.ts.map +1 -0
  395. package/dist/Projections/declarative/ProjectionBuilderFor.js +207 -0
  396. package/dist/Projections/declarative/ProjectionBuilderFor.js.map +1 -0
  397. package/dist/Projections/declarative/RemovedWithBuilder.d.ts +22 -0
  398. package/dist/Projections/declarative/RemovedWithBuilder.d.ts.map +1 -0
  399. package/dist/Projections/declarative/RemovedWithBuilder.js +28 -0
  400. package/dist/Projections/declarative/RemovedWithBuilder.js.map +1 -0
  401. package/dist/Projections/declarative/RemovedWithJoinBuilder.d.ts +22 -0
  402. package/dist/Projections/declarative/RemovedWithJoinBuilder.d.ts.map +1 -0
  403. package/dist/Projections/declarative/RemovedWithJoinBuilder.js +31 -0
  404. package/dist/Projections/declarative/RemovedWithJoinBuilder.js.map +1 -0
  405. package/dist/Projections/declarative/SetBuilder.d.ts +23 -0
  406. package/dist/Projections/declarative/SetBuilder.d.ts.map +1 -0
  407. package/dist/Projections/declarative/SetBuilder.js +43 -0
  408. package/dist/Projections/declarative/SetBuilder.js.map +1 -0
  409. package/dist/Projections/declarative/index.d.ts +24 -0
  410. package/dist/Projections/declarative/index.d.ts.map +1 -0
  411. package/dist/Projections/declarative/index.js +8 -0
  412. package/dist/Projections/declarative/index.js.map +1 -0
  413. package/dist/Projections/declarative/projection.d.ts +31 -0
  414. package/dist/Projections/declarative/projection.d.ts.map +1 -0
  415. package/dist/Projections/declarative/projection.js +39 -0
  416. package/dist/Projections/declarative/projection.js.map +1 -0
  417. package/dist/Projections/index.d.ts +6 -0
  418. package/dist/Projections/index.d.ts.map +1 -0
  419. package/dist/Projections/index.js +7 -0
  420. package/dist/Projections/index.js.map +1 -0
  421. package/dist/Projections/modelBound/FromEventMetadata.d.ts +7 -0
  422. package/dist/Projections/modelBound/FromEventMetadata.d.ts.map +1 -0
  423. package/dist/Projections/modelBound/FromEventMetadata.js +4 -0
  424. package/dist/Projections/modelBound/FromEventMetadata.js.map +1 -0
  425. package/dist/Projections/modelBound/FromEventOptions.d.ts +10 -0
  426. package/dist/Projections/modelBound/FromEventOptions.d.ts.map +1 -0
  427. package/dist/Projections/modelBound/FromEventOptions.js +4 -0
  428. package/dist/Projections/modelBound/FromEventOptions.js.map +1 -0
  429. package/dist/Projections/modelBound/addFrom.d.ts +23 -0
  430. package/dist/Projections/modelBound/addFrom.d.ts.map +1 -0
  431. package/dist/Projections/modelBound/addFrom.js +30 -0
  432. package/dist/Projections/modelBound/addFrom.js.map +1 -0
  433. package/dist/Projections/modelBound/childrenFrom.d.ts +29 -0
  434. package/dist/Projections/modelBound/childrenFrom.d.ts.map +1 -0
  435. package/dist/Projections/modelBound/childrenFrom.js +32 -0
  436. package/dist/Projections/modelBound/childrenFrom.js.map +1 -0
  437. package/dist/Projections/modelBound/clearWith.d.ts +28 -0
  438. package/dist/Projections/modelBound/clearWith.d.ts.map +1 -0
  439. package/dist/Projections/modelBound/clearWith.js +45 -0
  440. package/dist/Projections/modelBound/clearWith.js.map +1 -0
  441. package/dist/Projections/modelBound/count.d.ts +23 -0
  442. package/dist/Projections/modelBound/count.d.ts.map +1 -0
  443. package/dist/Projections/modelBound/count.js +30 -0
  444. package/dist/Projections/modelBound/count.js.map +1 -0
  445. package/dist/Projections/modelBound/decrement.d.ts +23 -0
  446. package/dist/Projections/modelBound/decrement.d.ts.map +1 -0
  447. package/dist/Projections/modelBound/decrement.js +30 -0
  448. package/dist/Projections/modelBound/decrement.js.map +1 -0
  449. package/dist/Projections/modelBound/fromEvent.d.ts +23 -0
  450. package/dist/Projections/modelBound/fromEvent.d.ts.map +1 -0
  451. package/dist/Projections/modelBound/fromEvent.js +34 -0
  452. package/dist/Projections/modelBound/fromEvent.js.map +1 -0
  453. package/dist/Projections/modelBound/fromEvery.d.ts +23 -0
  454. package/dist/Projections/modelBound/fromEvery.d.ts.map +1 -0
  455. package/dist/Projections/modelBound/fromEvery.js +28 -0
  456. package/dist/Projections/modelBound/fromEvery.js.map +1 -0
  457. package/dist/Projections/modelBound/increment.d.ts +23 -0
  458. package/dist/Projections/modelBound/increment.d.ts.map +1 -0
  459. package/dist/Projections/modelBound/increment.js +30 -0
  460. package/dist/Projections/modelBound/increment.js.map +1 -0
  461. package/dist/Projections/modelBound/index.d.ts +36 -0
  462. package/dist/Projections/modelBound/index.d.ts.map +1 -0
  463. package/dist/Projections/modelBound/index.js +21 -0
  464. package/dist/Projections/modelBound/index.js.map +1 -0
  465. package/dist/Projections/modelBound/join.d.ts +26 -0
  466. package/dist/Projections/modelBound/join.d.ts.map +1 -0
  467. package/dist/Projections/modelBound/join.js +31 -0
  468. package/dist/Projections/modelBound/join.js.map +1 -0
  469. package/dist/Projections/modelBound/modelBound.d.ts +31 -0
  470. package/dist/Projections/modelBound/modelBound.d.ts.map +1 -0
  471. package/dist/Projections/modelBound/modelBound.js +39 -0
  472. package/dist/Projections/modelBound/modelBound.js.map +1 -0
  473. package/dist/Projections/modelBound/nested.d.ts +16 -0
  474. package/dist/Projections/modelBound/nested.d.ts.map +1 -0
  475. package/dist/Projections/modelBound/nested.js +26 -0
  476. package/dist/Projections/modelBound/nested.js.map +1 -0
  477. package/dist/Projections/modelBound/notRewindable.d.ts +14 -0
  478. package/dist/Projections/modelBound/notRewindable.d.ts.map +1 -0
  479. package/dist/Projections/modelBound/notRewindable.js +21 -0
  480. package/dist/Projections/modelBound/notRewindable.js.map +1 -0
  481. package/dist/Projections/modelBound/removedWith.d.ts +34 -0
  482. package/dist/Projections/modelBound/removedWith.d.ts.map +1 -0
  483. package/dist/Projections/modelBound/removedWith.js +47 -0
  484. package/dist/Projections/modelBound/removedWith.js.map +1 -0
  485. package/dist/Projections/modelBound/removedWithJoin.d.ts +29 -0
  486. package/dist/Projections/modelBound/removedWithJoin.d.ts.map +1 -0
  487. package/dist/Projections/modelBound/removedWithJoin.js +44 -0
  488. package/dist/Projections/modelBound/removedWithJoin.js.map +1 -0
  489. package/dist/Projections/modelBound/setFrom.d.ts +23 -0
  490. package/dist/Projections/modelBound/setFrom.d.ts.map +1 -0
  491. package/dist/Projections/modelBound/setFrom.js +30 -0
  492. package/dist/Projections/modelBound/setFrom.js.map +1 -0
  493. package/dist/Projections/modelBound/setFromContext.d.ts +23 -0
  494. package/dist/Projections/modelBound/setFromContext.d.ts.map +1 -0
  495. package/dist/Projections/modelBound/setFromContext.js +30 -0
  496. package/dist/Projections/modelBound/setFromContext.js.map +1 -0
  497. package/dist/Projections/modelBound/setValue.d.ts +23 -0
  498. package/dist/Projections/modelBound/setValue.d.ts.map +1 -0
  499. package/dist/Projections/modelBound/setValue.js +30 -0
  500. package/dist/Projections/modelBound/setValue.js.map +1 -0
  501. package/dist/Projections/modelBound/subtractFrom.d.ts +23 -0
  502. package/dist/Projections/modelBound/subtractFrom.d.ts.map +1 -0
  503. package/dist/Projections/modelBound/subtractFrom.js +30 -0
  504. package/dist/Projections/modelBound/subtractFrom.js.map +1 -0
  505. package/dist/Reactors/IReactors.d.ts +16 -0
  506. package/dist/Reactors/IReactors.d.ts.map +1 -0
  507. package/dist/Reactors/IReactors.js +4 -0
  508. package/dist/Reactors/IReactors.js.map +1 -0
  509. package/dist/Reactors/ReactorId.d.ts +10 -0
  510. package/dist/Reactors/ReactorId.d.ts.map +1 -0
  511. package/dist/Reactors/ReactorId.js +16 -0
  512. package/dist/Reactors/ReactorId.js.map +1 -0
  513. package/dist/Reactors/Reactors.d.ts +38 -0
  514. package/dist/Reactors/Reactors.d.ts.map +1 -0
  515. package/dist/Reactors/Reactors.js +279 -0
  516. package/dist/Reactors/Reactors.js.map +1 -0
  517. package/dist/Reactors/index.d.ts +6 -0
  518. package/dist/Reactors/index.d.ts.map +1 -0
  519. package/dist/Reactors/index.js +6 -0
  520. package/dist/Reactors/index.js.map +1 -0
  521. package/dist/Reactors/reactor.d.ts +47 -0
  522. package/dist/Reactors/reactor.d.ts.map +1 -0
  523. package/dist/Reactors/reactor.js +55 -0
  524. package/dist/Reactors/reactor.js.map +1 -0
  525. package/dist/ReadModels/ReadModelId.d.ts +10 -0
  526. package/dist/ReadModels/ReadModelId.d.ts.map +1 -0
  527. package/dist/ReadModels/ReadModelId.js +16 -0
  528. package/dist/ReadModels/ReadModelId.js.map +1 -0
  529. package/dist/ReadModels/index.d.ts +4 -0
  530. package/dist/ReadModels/index.d.ts.map +1 -0
  531. package/dist/ReadModels/index.js +5 -0
  532. package/dist/ReadModels/index.js.map +1 -0
  533. package/dist/ReadModels/readModel.d.ts +33 -0
  534. package/dist/ReadModels/readModel.d.ts.map +1 -0
  535. package/dist/ReadModels/readModel.js +64 -0
  536. package/dist/ReadModels/readModel.js.map +1 -0
  537. package/dist/Reducers/IReducers.d.ts +16 -0
  538. package/dist/Reducers/IReducers.d.ts.map +1 -0
  539. package/dist/Reducers/IReducers.js +4 -0
  540. package/dist/Reducers/IReducers.js.map +1 -0
  541. package/dist/Reducers/ReducerId.d.ts +10 -0
  542. package/dist/Reducers/ReducerId.d.ts.map +1 -0
  543. package/dist/Reducers/ReducerId.js +16 -0
  544. package/dist/Reducers/ReducerId.js.map +1 -0
  545. package/dist/Reducers/Reducers.d.ts +38 -0
  546. package/dist/Reducers/Reducers.d.ts.map +1 -0
  547. package/dist/Reducers/Reducers.js +279 -0
  548. package/dist/Reducers/Reducers.js.map +1 -0
  549. package/dist/Reducers/index.d.ts +6 -0
  550. package/dist/Reducers/index.d.ts.map +1 -0
  551. package/dist/Reducers/index.js +6 -0
  552. package/dist/Reducers/index.js.map +1 -0
  553. package/dist/Reducers/reducer.d.ts +51 -0
  554. package/dist/Reducers/reducer.d.ts.map +1 -0
  555. package/dist/Reducers/reducer.js +59 -0
  556. package/dist/Reducers/reducer.js.map +1 -0
  557. package/dist/Schemas/JsonSchema.d.ts +16 -0
  558. package/dist/Schemas/JsonSchema.d.ts.map +1 -0
  559. package/dist/Schemas/JsonSchema.js +4 -0
  560. package/dist/Schemas/JsonSchema.js.map +1 -0
  561. package/dist/Schemas/JsonSchemaGenerator.d.ts +26 -0
  562. package/dist/Schemas/JsonSchemaGenerator.d.ts.map +1 -0
  563. package/dist/Schemas/JsonSchemaGenerator.js +90 -0
  564. package/dist/Schemas/JsonSchemaGenerator.js.map +1 -0
  565. package/dist/Schemas/index.d.ts +4 -0
  566. package/dist/Schemas/index.d.ts.map +1 -0
  567. package/dist/Schemas/index.js +5 -0
  568. package/dist/Schemas/index.js.map +1 -0
  569. package/dist/Schemas/jsonSchemaProperty.d.ts +13 -0
  570. package/dist/Schemas/jsonSchemaProperty.d.ts.map +1 -0
  571. package/dist/Schemas/jsonSchemaProperty.js +22 -0
  572. package/dist/Schemas/jsonSchemaProperty.js.map +1 -0
  573. package/dist/Tracing.d.ts +16 -0
  574. package/dist/Tracing.d.ts.map +1 -0
  575. package/dist/Tracing.js +19 -0
  576. package/dist/Tracing.js.map +1 -0
  577. package/dist/artifacts/DefaultClientArtifactsProvider.d.ts +31 -0
  578. package/dist/artifacts/DefaultClientArtifactsProvider.d.ts.map +1 -0
  579. package/dist/artifacts/DefaultClientArtifactsProvider.js +48 -0
  580. package/dist/artifacts/DefaultClientArtifactsProvider.js.map +1 -0
  581. package/dist/artifacts/IClientArtifactsProvider.d.ts +21 -0
  582. package/dist/artifacts/IClientArtifactsProvider.d.ts.map +1 -0
  583. package/dist/artifacts/IClientArtifactsProvider.js +4 -0
  584. package/dist/artifacts/IClientArtifactsProvider.js.map +1 -0
  585. package/dist/artifacts/index.d.ts +3 -0
  586. package/dist/artifacts/index.d.ts.map +1 -0
  587. package/dist/artifacts/index.js +4 -0
  588. package/dist/artifacts/index.js.map +1 -0
  589. package/dist/connection/ChronicleConnection.d.ts +117 -0
  590. package/dist/connection/ChronicleConnection.d.ts.map +1 -0
  591. package/dist/connection/ChronicleConnection.js +194 -0
  592. package/dist/connection/ChronicleConnection.js.map +1 -0
  593. package/dist/connection/ChronicleConnectionString.d.ts +2 -0
  594. package/dist/connection/ChronicleConnectionString.d.ts.map +1 -0
  595. package/dist/connection/ChronicleConnectionString.js +4 -0
  596. package/dist/connection/ChronicleConnectionString.js.map +1 -0
  597. package/dist/connection/ChronicleServices.d.ts +2 -0
  598. package/dist/connection/ChronicleServices.d.ts.map +1 -0
  599. package/dist/connection/ChronicleServices.js +4 -0
  600. package/dist/connection/ChronicleServices.js.map +1 -0
  601. package/dist/connection/ConnectionLifecycle.d.ts +41 -0
  602. package/dist/connection/ConnectionLifecycle.d.ts.map +1 -0
  603. package/dist/connection/ConnectionLifecycle.js +66 -0
  604. package/dist/connection/ConnectionLifecycle.js.map +1 -0
  605. package/dist/connection/DateTimeOffset.d.ts +2 -0
  606. package/dist/connection/DateTimeOffset.d.ts.map +1 -0
  607. package/dist/connection/DateTimeOffset.js +4 -0
  608. package/dist/connection/DateTimeOffset.js.map +1 -0
  609. package/dist/connection/Guid.d.ts +2 -0
  610. package/dist/connection/Guid.d.ts.map +1 -0
  611. package/dist/connection/Guid.js +4 -0
  612. package/dist/connection/Guid.js.map +1 -0
  613. package/dist/connection/TokenProvider.d.ts +5 -0
  614. package/dist/connection/TokenProvider.d.ts.map +1 -0
  615. package/dist/connection/TokenProvider.js +4 -0
  616. package/dist/connection/TokenProvider.js.map +1 -0
  617. package/dist/connection/index.d.ts +7 -0
  618. package/dist/connection/index.d.ts.map +1 -0
  619. package/dist/connection/index.js +7 -0
  620. package/dist/connection/index.js.map +1 -0
  621. package/dist/index.d.ts +21 -0
  622. package/dist/index.d.ts.map +1 -0
  623. package/dist/index.js +21 -0
  624. package/dist/index.js.map +1 -0
  625. package/dist/tsconfig.tsbuildinfo +1 -0
  626. package/dist/types/DecoratorType.d.ts +20 -0
  627. package/dist/types/DecoratorType.d.ts.map +1 -0
  628. package/dist/types/DecoratorType.js +23 -0
  629. package/dist/types/DecoratorType.js.map +1 -0
  630. package/dist/types/TypeDiscoverer.d.ts +54 -0
  631. package/dist/types/TypeDiscoverer.d.ts.map +1 -0
  632. package/dist/types/TypeDiscoverer.js +91 -0
  633. package/dist/types/TypeDiscoverer.js.map +1 -0
  634. package/dist/types/TypeIntrospector.d.ts +30 -0
  635. package/dist/types/TypeIntrospector.d.ts.map +1 -0
  636. package/dist/types/TypeIntrospector.js +154 -0
  637. package/dist/types/TypeIntrospector.js.map +1 -0
  638. package/dist/types/index.d.ts +4 -0
  639. package/dist/types/index.d.ts.map +1 -0
  640. package/dist/types/index.js +6 -0
  641. package/dist/types/index.js.map +1 -0
  642. package/index.ts +24 -0
  643. package/package.json +38 -0
  644. package/types/DecoratorType.ts +28 -0
  645. package/types/TypeDiscoverer.ts +109 -0
  646. package/types/TypeIntrospector.ts +176 -0
  647. package/types/index.ts +6 -0
@@ -0,0 +1,41 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the addFrom property decorator. */
8
+ export interface AddFromMetadata {
9
+ /** The event constructor associated with this annotation. */
10
+ readonly eventType: Function;
11
+ /** The event property name whose value is added to the read model property. Defaults to the decorated property name. */
12
+ readonly eventPropertyName?: string;
13
+ }
14
+
15
+ const METADATA_KEY = 'chronicle:projection:addFrom';
16
+
17
+ /**
18
+ * Property decorator that adds an event property value to the decorated read model property.
19
+ * @param eventType - The event constructor.
20
+ * @param eventPropertyName - Optional event property name. Defaults to the property name.
21
+ * @returns A property decorator.
22
+ */
23
+ export function addFrom(eventType: Function, eventPropertyName?: string): PropertyDecorator {
24
+ return (target: object, propertyKey: string | symbol) => {
25
+ const key = propertyKey.toString();
26
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, key);
27
+ const existing: AddFromMetadata[] = Reflect.getMetadata(METADATA_KEY, target, key) ?? [];
28
+ const metadata: AddFromMetadata = { eventType, eventPropertyName };
29
+ Reflect.defineMetadata(METADATA_KEY, [...existing, metadata], target, key);
30
+ };
31
+ }
32
+
33
+ /**
34
+ * Retrieves all addFrom metadata stored on the given property.
35
+ * @param target - The class prototype.
36
+ * @param propertyKey - The property name.
37
+ * @returns An array of addFrom metadata entries.
38
+ */
39
+ export function getAddFromMetadata(target: object, propertyKey: string): AddFromMetadata[] {
40
+ return Reflect.getMetadata(METADATA_KEY, target, propertyKey) ?? [];
41
+ }
@@ -0,0 +1,52 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the childrenFrom property decorator. */
8
+ export interface ChildrenFromMetadata {
9
+ /** The event constructor that adds children to the collection. */
10
+ readonly eventType: Function;
11
+ /** The event property name used as the key for children. Defaults to the event source identifier. */
12
+ readonly key?: string;
13
+ /** The child model property name used to uniquely identify instances in the collection. */
14
+ readonly identifiedBy?: string;
15
+ /** The event property name used as the parent key. Defaults to the event source identifier. */
16
+ readonly parentKey?: string;
17
+ }
18
+
19
+ const METADATA_KEY = 'chronicle:projection:childrenFrom';
20
+
21
+ /**
22
+ * Property decorator that configures a children collection sub-projection from an event type.
23
+ * @param eventType - The event constructor.
24
+ * @param key - Optional event property name to use as the key for children.
25
+ * @param identifiedBy - Optional child model property name used to identify instances.
26
+ * @param parentKey - Optional event property name used as the parent key.
27
+ * @returns A property decorator.
28
+ */
29
+ export function childrenFrom(
30
+ eventType: Function,
31
+ key?: string,
32
+ identifiedBy?: string,
33
+ parentKey?: string
34
+ ): PropertyDecorator {
35
+ return (target: object, propertyKey: string | symbol) => {
36
+ const propKey = propertyKey.toString();
37
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, propKey);
38
+ const existing: ChildrenFromMetadata[] = Reflect.getMetadata(METADATA_KEY, target, propKey) ?? [];
39
+ const metadata: ChildrenFromMetadata = { eventType, key, identifiedBy, parentKey };
40
+ Reflect.defineMetadata(METADATA_KEY, [...existing, metadata], target, propKey);
41
+ };
42
+ }
43
+
44
+ /**
45
+ * Retrieves all childrenFrom metadata stored on the given property.
46
+ * @param target - The class prototype.
47
+ * @param propertyKey - The property name.
48
+ * @returns An array of childrenFrom metadata entries.
49
+ */
50
+ export function getChildrenFromMetadata(target: object, propertyKey: string): ChildrenFromMetadata[] {
51
+ return Reflect.getMetadata(METADATA_KEY, target, propertyKey) ?? [];
52
+ }
@@ -0,0 +1,54 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the clearWith class or property decorator. */
8
+ export interface ClearWithMetadata {
9
+ /** The event constructor that clears the nested object or projection. */
10
+ readonly eventType: Function;
11
+ }
12
+
13
+ const CLASS_METADATA_KEY = 'chronicle:projection:clearWith:class';
14
+ const PROPERTY_METADATA_KEY = 'chronicle:projection:clearWith:property';
15
+
16
+ /**
17
+ * Class or property decorator that specifies the event type that clears a nested object.
18
+ * When used on a class, it clears the entire nested object.
19
+ * When used on a property, it clears only that property.
20
+ * @param eventType - The event constructor.
21
+ * @returns A class and property decorator.
22
+ */
23
+ export function clearWith(eventType: Function): ClassDecorator & PropertyDecorator {
24
+ return (target: object, propertyKey?: string | symbol) => {
25
+ if (propertyKey !== undefined) {
26
+ const key = propertyKey.toString();
27
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, key);
28
+ const existing: ClearWithMetadata[] = Reflect.getMetadata(PROPERTY_METADATA_KEY, target, key) ?? [];
29
+ Reflect.defineMetadata(PROPERTY_METADATA_KEY, [...existing, { eventType }], target, key);
30
+ } else {
31
+ const existing: ClearWithMetadata[] = Reflect.getMetadata(CLASS_METADATA_KEY, target) ?? [];
32
+ Reflect.defineMetadata(CLASS_METADATA_KEY, [...existing, { eventType }], target);
33
+ }
34
+ };
35
+ }
36
+
37
+ /**
38
+ * Retrieves clearWith metadata stored on the given class constructor.
39
+ * @param target - The class constructor.
40
+ * @returns An array of clearWith metadata entries.
41
+ */
42
+ export function getClearWithClassMetadata(target: Function): ClearWithMetadata[] {
43
+ return Reflect.getMetadata(CLASS_METADATA_KEY, target) ?? [];
44
+ }
45
+
46
+ /**
47
+ * Retrieves clearWith metadata stored on the given property.
48
+ * @param target - The class prototype.
49
+ * @param propertyKey - The property name.
50
+ * @returns An array of clearWith metadata entries.
51
+ */
52
+ export function getClearWithPropertyMetadata(target: object, propertyKey: string): ClearWithMetadata[] {
53
+ return Reflect.getMetadata(PROPERTY_METADATA_KEY, target, propertyKey) ?? [];
54
+ }
@@ -0,0 +1,41 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the count property decorator. */
8
+ export interface CountMetadata {
9
+ /** The event constructor whose occurrences are counted. */
10
+ readonly eventType: Function;
11
+ /** Optional constant key. All events will update the same read model instance. */
12
+ readonly constantKey?: string;
13
+ }
14
+
15
+ const METADATA_KEY = 'chronicle:projection:count';
16
+
17
+ /**
18
+ * Property decorator that counts the occurrences of the specified event into the decorated read model property.
19
+ * @param eventType - The event constructor.
20
+ * @param constantKey - Optional constant key value.
21
+ * @returns A property decorator.
22
+ */
23
+ export function count(eventType: Function, constantKey?: string): PropertyDecorator {
24
+ return (target: object, propertyKey: string | symbol) => {
25
+ const key = propertyKey.toString();
26
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, key);
27
+ const existing: CountMetadata[] = Reflect.getMetadata(METADATA_KEY, target, key) ?? [];
28
+ const metadata: CountMetadata = { eventType, constantKey };
29
+ Reflect.defineMetadata(METADATA_KEY, [...existing, metadata], target, key);
30
+ };
31
+ }
32
+
33
+ /**
34
+ * Retrieves all count metadata stored on the given property.
35
+ * @param target - The class prototype.
36
+ * @param propertyKey - The property name.
37
+ * @returns An array of count metadata entries.
38
+ */
39
+ export function getCountMetadata(target: object, propertyKey: string): CountMetadata[] {
40
+ return Reflect.getMetadata(METADATA_KEY, target, propertyKey) ?? [];
41
+ }
@@ -0,0 +1,41 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the decrement property decorator. */
8
+ export interface DecrementMetadata {
9
+ /** The event constructor that triggers the decrement. */
10
+ readonly eventType: Function;
11
+ /** Optional constant key. All events will update the same read model instance. */
12
+ readonly constantKey?: string;
13
+ }
14
+
15
+ const METADATA_KEY = 'chronicle:projection:decrement';
16
+
17
+ /**
18
+ * Property decorator that decrements the decorated read model property each time the specified event occurs.
19
+ * @param eventType - The event constructor.
20
+ * @param constantKey - Optional constant key value.
21
+ * @returns A property decorator.
22
+ */
23
+ export function decrement(eventType: Function, constantKey?: string): PropertyDecorator {
24
+ return (target: object, propertyKey: string | symbol) => {
25
+ const key = propertyKey.toString();
26
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, key);
27
+ const existing: DecrementMetadata[] = Reflect.getMetadata(METADATA_KEY, target, key) ?? [];
28
+ const metadata: DecrementMetadata = { eventType, constantKey };
29
+ Reflect.defineMetadata(METADATA_KEY, [...existing, metadata], target, key);
30
+ };
31
+ }
32
+
33
+ /**
34
+ * Retrieves all decrement metadata stored on the given property.
35
+ * @param target - The class prototype.
36
+ * @param propertyKey - The property name.
37
+ * @returns An array of decrement metadata entries.
38
+ */
39
+ export function getDecrementMetadata(target: object, propertyKey: string): DecrementMetadata[] {
40
+ return Reflect.getMetadata(METADATA_KEY, target, propertyKey) ?? [];
41
+ }
@@ -0,0 +1,40 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { FromEventMetadata } from './FromEventMetadata';
6
+ import { FromEventOptions } from './FromEventOptions';
7
+
8
+ const METADATA_KEY = 'chronicle:projection:fromEvent';
9
+
10
+ /**
11
+ * Class decorator that declares which event type populates instances of this read model.
12
+ * @param eventType - The event constructor.
13
+ * @param options - Optional key configuration.
14
+ * @returns A class decorator.
15
+ */
16
+ export function fromEvent(eventType: Function, options?: FromEventOptions): ClassDecorator {
17
+ return (target: object) => {
18
+ const existing: FromEventMetadata[] = Reflect.getMetadata(METADATA_KEY, target) ?? [];
19
+ const metadata: FromEventMetadata = { eventType, ...options };
20
+ Reflect.defineMetadata(METADATA_KEY, [...existing, metadata], target);
21
+ };
22
+ }
23
+
24
+ /**
25
+ * Retrieves all fromEvent metadata stored on the given class constructor.
26
+ * @param target - The class constructor.
27
+ * @returns An array of fromEvent metadata entries.
28
+ */
29
+ export function getFromEventMetadata(target: Function): FromEventMetadata[] {
30
+ return Reflect.getMetadata(METADATA_KEY, target) ?? [];
31
+ }
32
+
33
+ /**
34
+ * Checks whether the given class has any fromEvent metadata.
35
+ * @param target - The class constructor.
36
+ * @returns True if the class has fromEvent metadata; false otherwise.
37
+ */
38
+ export function hasFromEventMetadata(target: Function): boolean {
39
+ return Reflect.hasMetadata(METADATA_KEY, target);
40
+ }
@@ -0,0 +1,39 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the fromEvery property decorator. */
8
+ export interface FromEveryMetadata {
9
+ /** The event or event context property name to read the value from. */
10
+ readonly property?: string;
11
+ /** The event context property name to read the value from. */
12
+ readonly contextProperty?: string;
13
+ }
14
+
15
+ const METADATA_KEY = 'chronicle:projection:fromEvery';
16
+
17
+ /**
18
+ * Property decorator that sets the decorated read model property from a property present on every projected event.
19
+ * @param property - Optional event property name. If not specified, uses the model property name.
20
+ * @param contextProperty - Optional event context property name.
21
+ * @returns A property decorator.
22
+ */
23
+ export function fromEvery(property?: string, contextProperty?: string): PropertyDecorator {
24
+ return (target: object, propertyKey: string | symbol) => {
25
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, propertyKey.toString());
26
+ const metadata: FromEveryMetadata = { property, contextProperty };
27
+ Reflect.defineMetadata(METADATA_KEY, metadata, target, propertyKey.toString());
28
+ };
29
+ }
30
+
31
+ /**
32
+ * Retrieves fromEvery metadata stored on the given property.
33
+ * @param target - The class prototype.
34
+ * @param propertyKey - The property name.
35
+ * @returns The fromEvery metadata, or undefined if not decorated.
36
+ */
37
+ export function getFromEveryMetadata(target: object, propertyKey: string): FromEveryMetadata | undefined {
38
+ return Reflect.getMetadata(METADATA_KEY, target, propertyKey);
39
+ }
@@ -0,0 +1,41 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the increment property decorator. */
8
+ export interface IncrementMetadata {
9
+ /** The event constructor that triggers the increment. */
10
+ readonly eventType: Function;
11
+ /** Optional constant key. All events will update the same read model instance. */
12
+ readonly constantKey?: string;
13
+ }
14
+
15
+ const METADATA_KEY = 'chronicle:projection:increment';
16
+
17
+ /**
18
+ * Property decorator that increments the decorated read model property each time the specified event occurs.
19
+ * @param eventType - The event constructor.
20
+ * @param constantKey - Optional constant key value.
21
+ * @returns A property decorator.
22
+ */
23
+ export function increment(eventType: Function, constantKey?: string): PropertyDecorator {
24
+ return (target: object, propertyKey: string | symbol) => {
25
+ const key = propertyKey.toString();
26
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, key);
27
+ const existing: IncrementMetadata[] = Reflect.getMetadata(METADATA_KEY, target, key) ?? [];
28
+ const metadata: IncrementMetadata = { eventType, constantKey };
29
+ Reflect.defineMetadata(METADATA_KEY, [...existing, metadata], target, key);
30
+ };
31
+ }
32
+
33
+ /**
34
+ * Retrieves all increment metadata stored on the given property.
35
+ * @param target - The class prototype.
36
+ * @param propertyKey - The property name.
37
+ * @returns An array of increment metadata entries.
38
+ */
39
+ export function getIncrementMetadata(target: object, propertyKey: string): IncrementMetadata[] {
40
+ return Reflect.getMetadata(METADATA_KEY, target, propertyKey) ?? [];
41
+ }
@@ -0,0 +1,38 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ export { modelBound, getModelBoundMetadata, isModelBound } from './modelBound';
5
+ export type { ModelBoundMetadata } from './modelBound';
6
+ export { fromEvent, getFromEventMetadata, hasFromEventMetadata } from './fromEvent';
7
+ export type { FromEventOptions } from './FromEventOptions';
8
+ export type { FromEventMetadata } from './FromEventMetadata';
9
+ export { setFrom, getSetFromMetadata } from './setFrom';
10
+ export type { SetFromMetadata } from './setFrom';
11
+ export { setFromContext, getSetFromContextMetadata } from './setFromContext';
12
+ export type { SetFromContextMetadata } from './setFromContext';
13
+ export { join, getJoinMetadata } from './join';
14
+ export type { JoinMetadata } from './join';
15
+ export { addFrom, getAddFromMetadata } from './addFrom';
16
+ export type { AddFromMetadata } from './addFrom';
17
+ export { subtractFrom, getSubtractFromMetadata } from './subtractFrom';
18
+ export type { SubtractFromMetadata } from './subtractFrom';
19
+ export { increment, getIncrementMetadata } from './increment';
20
+ export type { IncrementMetadata } from './increment';
21
+ export { decrement, getDecrementMetadata } from './decrement';
22
+ export type { DecrementMetadata } from './decrement';
23
+ export { count, getCountMetadata } from './count';
24
+ export type { CountMetadata } from './count';
25
+ export { childrenFrom, getChildrenFromMetadata } from './childrenFrom';
26
+ export type { ChildrenFromMetadata } from './childrenFrom';
27
+ export { nested, isNested } from './nested';
28
+ export { clearWith, getClearWithClassMetadata, getClearWithPropertyMetadata } from './clearWith';
29
+ export type { ClearWithMetadata } from './clearWith';
30
+ export { removedWith, getRemovedWithClassMetadata, getRemovedWithPropertyMetadata } from './removedWith';
31
+ export type { RemovedWithMetadata } from './removedWith';
32
+ export { removedWithJoin, getRemovedWithJoinClassMetadata, getRemovedWithJoinPropertyMetadata } from './removedWithJoin';
33
+ export type { RemovedWithJoinMetadata } from './removedWithJoin';
34
+ export { notRewindable, isNotRewindable } from './notRewindable';
35
+ export { setValue, getSetValueMetadata } from './setValue';
36
+ export type { SetValueMetadata } from './setValue';
37
+ export { fromEvery, getFromEveryMetadata } from './fromEvery';
38
+ export type { FromEveryMetadata } from './fromEvery';
@@ -0,0 +1,44 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the join property decorator. */
8
+ export interface JoinMetadata {
9
+ /** The event constructor associated with this annotation. */
10
+ readonly eventType: Function;
11
+ /** The read model property name used to form the join relationship. */
12
+ readonly on?: string;
13
+ /** The event property name to read the joined value from. Defaults to the decorated property name. */
14
+ readonly eventPropertyName?: string;
15
+ }
16
+
17
+ const METADATA_KEY = 'chronicle:projection:join';
18
+
19
+ /**
20
+ * Property decorator that configures a join relationship with an event type.
21
+ * @param eventType - The event constructor.
22
+ * @param on - Optional property name on the read model to join on.
23
+ * @param eventPropertyName - Optional event property name. Defaults to the property name.
24
+ * @returns A property decorator.
25
+ */
26
+ export function join(eventType: Function, on?: string, eventPropertyName?: string): PropertyDecorator {
27
+ return (target: object, propertyKey: string | symbol) => {
28
+ const key = propertyKey.toString();
29
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, key);
30
+ const existing: JoinMetadata[] = Reflect.getMetadata(METADATA_KEY, target, key) ?? [];
31
+ const metadata: JoinMetadata = { eventType, on, eventPropertyName };
32
+ Reflect.defineMetadata(METADATA_KEY, [...existing, metadata], target, key);
33
+ };
34
+ }
35
+
36
+ /**
37
+ * Retrieves all join metadata stored on the given property.
38
+ * @param target - The class prototype.
39
+ * @param propertyKey - The property name.
40
+ * @returns An array of join metadata entries.
41
+ */
42
+ export function getJoinMetadata(target: object, propertyKey: string): JoinMetadata[] {
43
+ return Reflect.getMetadata(METADATA_KEY, target, propertyKey) ?? [];
44
+ }
@@ -0,0 +1,59 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { Constructor } from '@cratis/fundamentals';
6
+ import { ProjectionId } from '../ProjectionId';
7
+ import { DecoratorType, TypeDiscoverer } from '../../types';
8
+
9
+ /** Metadata key used to store model-bound projection information on a class. */
10
+ const MODEL_BOUND_METADATA_KEY = 'chronicle:modelBound';
11
+
12
+ /**
13
+ * Metadata stored on a model-bound projection class.
14
+ */
15
+ export interface ModelBoundMetadata {
16
+ /** The unique identifier for the projection. */
17
+ readonly id: ProjectionId;
18
+
19
+ /** The optional explicit event sequence identifier. */
20
+ readonly eventSequenceId: string | undefined;
21
+ }
22
+
23
+ /**
24
+ * TypeScript decorator that marks a class as a model-bound projection.
25
+ * @param id - The unique identifier for the projection. Defaults to the class name if omitted.
26
+ * @param eventSequenceId - Optional explicit event sequence identifier.
27
+ * @returns A class decorator.
28
+ */
29
+ export function modelBound(id: string = '', eventSequenceId?: string): ClassDecorator {
30
+ return (target: object) => {
31
+ const constructor = target as Function;
32
+ const projectionId = new ProjectionId(id || constructor.name);
33
+ const metadata: ModelBoundMetadata = { id: projectionId, eventSequenceId };
34
+ Reflect.defineMetadata(MODEL_BOUND_METADATA_KEY, metadata, target);
35
+ TypeDiscoverer.default.register(
36
+ DecoratorType.ModelBoundProjection,
37
+ constructor as Constructor,
38
+ projectionId.value
39
+ );
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Gets the {@link ModelBoundMetadata} associated with a class decorated with {@link modelBound}.
45
+ * @param target - The class constructor to retrieve metadata for.
46
+ * @returns The associated metadata, or undefined if not decorated.
47
+ */
48
+ export function getModelBoundMetadata(target: Function): ModelBoundMetadata | undefined {
49
+ return Reflect.getMetadata(MODEL_BOUND_METADATA_KEY, target);
50
+ }
51
+
52
+ /**
53
+ * Checks whether a class has been decorated with {@link modelBound}.
54
+ * @param target - The class constructor to check.
55
+ * @returns True if the class has a model-bound decorator; false otherwise.
56
+ */
57
+ export function isModelBound(target: Function): boolean {
58
+ return Reflect.hasMetadata(MODEL_BOUND_METADATA_KEY, target);
59
+ }
@@ -0,0 +1,29 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ const METADATA_KEY = 'chronicle:projection:nested';
8
+
9
+ /**
10
+ * Property decorator that marks a single nullable property as a nested sub-projection object.
11
+ * The nested type should carry its own fromEvent and optionally clearWith decorators.
12
+ * @param target - The class prototype.
13
+ * @param propertyKey - The property name.
14
+ */
15
+ export function nested(target: object, propertyKey: string | symbol): void {
16
+ const key = propertyKey.toString();
17
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, key);
18
+ Reflect.defineMetadata(METADATA_KEY, true, target, key);
19
+ }
20
+
21
+ /**
22
+ * Checks whether the given property is marked as a nested sub-projection.
23
+ * @param target - The class prototype.
24
+ * @param propertyKey - The property name.
25
+ * @returns True if the property is marked as nested; false otherwise.
26
+ */
27
+ export function isNested(target: object, propertyKey: string): boolean {
28
+ return Reflect.hasMetadata(METADATA_KEY, target, propertyKey);
29
+ }
@@ -0,0 +1,24 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+
6
+ const METADATA_KEY = 'chronicle:projection:notRewindable';
7
+
8
+ /**
9
+ * Class decorator that marks a model-bound projection as not rewindable.
10
+ * A not-rewindable projection only processes new events; it cannot replay history.
11
+ * @param target - The class constructor.
12
+ */
13
+ export function notRewindable(target: Function): void {
14
+ Reflect.defineMetadata(METADATA_KEY, true, target);
15
+ }
16
+
17
+ /**
18
+ * Checks whether the given class is marked as not rewindable.
19
+ * @param target - The class constructor.
20
+ * @returns True if the class is marked as not rewindable; false otherwise.
21
+ */
22
+ export function isNotRewindable(target: Function): boolean {
23
+ return Reflect.hasMetadata(METADATA_KEY, target);
24
+ }
@@ -0,0 +1,60 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import 'reflect-metadata';
5
+ import { TypeIntrospector } from '../../types';
6
+
7
+ /** Metadata stored by the removedWith class or property decorator. */
8
+ export interface RemovedWithMetadata {
9
+ /** The event constructor that triggers removal. */
10
+ readonly eventType: Function;
11
+ /** The event property name that identifies the instance to remove. Defaults to the event source identifier. */
12
+ readonly key?: string;
13
+ /** The event property name that identifies the parent instance (for children). Defaults to the event source identifier. */
14
+ readonly parentKey?: string;
15
+ }
16
+
17
+ const CLASS_METADATA_KEY = 'chronicle:projection:removedWith:class';
18
+ const PROPERTY_METADATA_KEY = 'chronicle:projection:removedWith:property';
19
+
20
+ /**
21
+ * Class or property decorator that specifies the event type that removes a read model instance or child.
22
+ * When used on a class, it removes the read model instance.
23
+ * When used on a property, it removes a child from the collection.
24
+ * @param eventType - The event constructor.
25
+ * @param key - Optional event property name used as the key to identify the instance to remove.
26
+ * @param parentKey - Optional event property name used as the parent key (for children only).
27
+ * @returns A class and property decorator.
28
+ */
29
+ export function removedWith(eventType: Function, key?: string, parentKey?: string): ClassDecorator & PropertyDecorator {
30
+ return (target: object, propertyKey?: string | symbol) => {
31
+ if (propertyKey !== undefined) {
32
+ const propKey = propertyKey.toString();
33
+ TypeIntrospector.trackProperty((target as { constructor: Function }).constructor, propKey);
34
+ const existing: RemovedWithMetadata[] = Reflect.getMetadata(PROPERTY_METADATA_KEY, target, propKey) ?? [];
35
+ Reflect.defineMetadata(PROPERTY_METADATA_KEY, [...existing, { eventType, key, parentKey }], target, propKey);
36
+ } else {
37
+ const existing: RemovedWithMetadata[] = Reflect.getMetadata(CLASS_METADATA_KEY, target) ?? [];
38
+ Reflect.defineMetadata(CLASS_METADATA_KEY, [...existing, { eventType, key, parentKey }], target);
39
+ }
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Retrieves removedWith metadata stored on the given class constructor.
45
+ * @param target - The class constructor.
46
+ * @returns An array of removedWith metadata entries.
47
+ */
48
+ export function getRemovedWithClassMetadata(target: Function): RemovedWithMetadata[] {
49
+ return Reflect.getMetadata(CLASS_METADATA_KEY, target) ?? [];
50
+ }
51
+
52
+ /**
53
+ * Retrieves removedWith metadata stored on the given property.
54
+ * @param target - The class prototype.
55
+ * @param propertyKey - The property name.
56
+ * @returns An array of removedWith metadata entries.
57
+ */
58
+ export function getRemovedWithPropertyMetadata(target: object, propertyKey: string): RemovedWithMetadata[] {
59
+ return Reflect.getMetadata(PROPERTY_METADATA_KEY, target, propertyKey) ?? [];
60
+ }