@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,463 @@
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 {
5
+ AutoMap,
6
+ ProjectionOwner
7
+ } from '@cratis/chronicle.contracts';
8
+ import { Constructor } from '@cratis/fundamentals';
9
+ import { IClientArtifactsProvider } from '../artifacts';
10
+ import { ChronicleConnection } from '../connection';
11
+ import { EventSequenceId } from '../EventSequences/EventSequenceId';
12
+ import { getEventTypeFor } from '../Events/eventTypeDecorator';
13
+ import { getReadModelMetadata } from '../ReadModels';
14
+ import { TypeIntrospector } from '../types';
15
+ import { IProjections } from './IProjections';
16
+ import { getProjectionMetadata } from './declarative/projection';
17
+ import { ProjectionBuilderFor } from './declarative/ProjectionBuilderFor';
18
+ import type { IProjectionFor } from './declarative/IProjectionFor';
19
+ import { getAddFromMetadata } from './modelBound/addFrom';
20
+ import { getChildrenFromMetadata } from './modelBound/childrenFrom';
21
+ import { getClearWithClassMetadata, getClearWithPropertyMetadata } from './modelBound/clearWith';
22
+ import { getCountMetadata } from './modelBound/count';
23
+ import { getDecrementMetadata } from './modelBound/decrement';
24
+ import { getFromEveryMetadata } from './modelBound/fromEvery';
25
+ import { getFromEventMetadata, hasFromEventMetadata } from './modelBound/fromEvent';
26
+ import { getIncrementMetadata } from './modelBound/increment';
27
+ import { getJoinMetadata } from './modelBound/join';
28
+ import { ProjectionId } from './ProjectionId';
29
+ import { isNested } from './modelBound/nested';
30
+ import { isNotRewindable } from './modelBound/notRewindable';
31
+ import { getRemovedWithClassMetadata, getRemovedWithPropertyMetadata } from './modelBound/removedWith';
32
+ import { getRemovedWithJoinClassMetadata, getRemovedWithJoinPropertyMetadata } from './modelBound/removedWithJoin';
33
+ import { getSetFromMetadata } from './modelBound/setFrom';
34
+ import { getSetFromContextMetadata } from './modelBound/setFromContext';
35
+ import { getSetValueMetadata } from './modelBound/setValue';
36
+ import { getSubtractFromMetadata } from './modelBound/subtractFrom';
37
+
38
+ type ContractEventType = { Id: string; Generation: number; Tombstone: boolean };
39
+
40
+ interface ResolvedModelBoundMetadata {
41
+ id: ProjectionId;
42
+ eventSequenceId: string | undefined;
43
+ readModelIdentifier: string;
44
+ }
45
+
46
+ /**
47
+ * Implements {@link IProjections}, managing discovery and registration of projections
48
+ * with the Chronicle Kernel.
49
+ */
50
+ export class Projections implements IProjections {
51
+ private readonly _declarative = new Map<string, Constructor>();
52
+ private readonly _modelBound = new Map<string, Constructor>();
53
+
54
+ /**
55
+ * Creates a new {@link Projections} instance.
56
+ * @param _clientArtifacts - Provider for discovered client artifact types.
57
+ */
58
+ constructor(
59
+ private readonly _eventStore: string,
60
+ private readonly _connection: ChronicleConnection,
61
+ private readonly _clientArtifacts: IClientArtifactsProvider
62
+ ) {}
63
+
64
+ /** @inheritdoc */
65
+ async discover(): Promise<void> {
66
+ this._declarative.clear();
67
+ this._modelBound.clear();
68
+
69
+ for (const type of this._clientArtifacts.projections) {
70
+ const metadata = getProjectionMetadata(type);
71
+ if (metadata) {
72
+ this._declarative.set(metadata.id.value, type);
73
+ }
74
+ }
75
+
76
+ for (const type of this._clientArtifacts.readModels) {
77
+ if (!hasFromEventMetadata(type)) {
78
+ continue;
79
+ }
80
+
81
+ const metadata = this.resolveModelBoundMetadata(type);
82
+ if (!metadata) {
83
+ continue;
84
+ }
85
+
86
+ if (!this._modelBound.has(metadata.id.value)) {
87
+ this._modelBound.set(metadata.id.value, type);
88
+ }
89
+ }
90
+ }
91
+
92
+ /** @inheritdoc */
93
+ async register(): Promise<void> {
94
+ if (this._declarative.size === 0 && this._modelBound.size === 0) {
95
+ await this.discover();
96
+ }
97
+
98
+ const projections = [
99
+ ...Array.from(this._declarative.values()).map(type => this.buildDeclarativeDefinition(type)),
100
+ ...Array.from(this._modelBound.values()).map(type => this.buildModelBoundDefinition(type))
101
+ ];
102
+
103
+ if (projections.length === 0) {
104
+ return;
105
+ }
106
+
107
+ const readModels = this.buildReadModelDefinitions(projections);
108
+ if (readModels.length > 0) {
109
+ await this._connection.readModels.registerMany({
110
+ EventStore: this._eventStore,
111
+ Owner: 1,
112
+ ReadModels: readModels,
113
+ Source: 1
114
+ });
115
+ }
116
+
117
+ for (const projection of projections) {
118
+ try {
119
+ await this._connection.projections.register({
120
+ EventStore: this._eventStore,
121
+ Owner: ProjectionOwner.PROJECTION_OWNER_Client,
122
+ Projections: [projection]
123
+ });
124
+ } catch (error) {
125
+ const identifier = String((projection as { Identifier?: unknown }).Identifier ?? '<unknown>');
126
+ throw new Error(`Failed to register projection '${identifier}': ${String(error)}`);
127
+ }
128
+ }
129
+ }
130
+
131
+ private buildReadModelDefinitions(projections: any[]): any[] {
132
+ const byReadModel = new Map<string, any>();
133
+
134
+ for (const projection of projections) {
135
+ const readModelIdentifier = projection.ReadModel;
136
+ if (!readModelIdentifier || byReadModel.has(readModelIdentifier)) {
137
+ continue;
138
+ }
139
+
140
+ byReadModel.set(readModelIdentifier, {
141
+ Type: {
142
+ Identifier: readModelIdentifier,
143
+ Generation: 1
144
+ },
145
+ ContainerName: readModelIdentifier,
146
+ DisplayName: readModelIdentifier,
147
+ Sink: {
148
+ ConfigurationId: this.toContractsGuid('00000000-0000-0000-0000-000000000000'),
149
+ TypeId: this.toContractsGuid('22202c41-2be1-4547-9c00-f0b1f797fd75')
150
+ },
151
+ Schema: this.getReadModelSchema(readModelIdentifier),
152
+ Indexes: [],
153
+ ObserverType: 2,
154
+ ObserverIdentifier: projection.Identifier,
155
+ Owner: 1,
156
+ Source: 1
157
+ });
158
+ }
159
+
160
+ return Array.from(byReadModel.values());
161
+ }
162
+
163
+ private getReadModelSchema(readModelIdentifier: string): string {
164
+ for (const type of this._clientArtifacts.readModels) {
165
+ const metadata = getReadModelMetadata(type);
166
+ if (!metadata) {
167
+ continue;
168
+ }
169
+
170
+ if (metadata.id.value === readModelIdentifier || type.name === readModelIdentifier) {
171
+ return JSON.stringify(metadata.schema);
172
+ }
173
+ }
174
+
175
+ return '{}';
176
+ }
177
+
178
+ private buildDeclarativeDefinition(type: Constructor): any {
179
+ const metadata = getProjectionMetadata(type);
180
+ if (!metadata) {
181
+ throw new Error(`Type '${type.name}' is missing declarative projection metadata.`);
182
+ }
183
+
184
+ const builder = new ProjectionBuilderFor<unknown>();
185
+ const instance = new type() as IProjectionFor<unknown>;
186
+ instance.define(builder);
187
+ const definition = builder.build(metadata.id.value, type.name) as Record<string, unknown>;
188
+
189
+ const explicitReadModelIdentifier = definition.ReadModel as string;
190
+ if (explicitReadModelIdentifier === type.name) {
191
+ const inferredReadModelIdentifier = this.inferReadModelIdentifier(builder.getMappedReadModelProperties());
192
+ if (inferredReadModelIdentifier) {
193
+ definition.ReadModel = inferredReadModelIdentifier;
194
+ }
195
+ }
196
+
197
+ return definition;
198
+ }
199
+
200
+ private inferReadModelIdentifier(mappedProperties: string[]): string | undefined {
201
+ if (mappedProperties.length === 0) {
202
+ return undefined;
203
+ }
204
+
205
+ const matchingReadModels = this._clientArtifacts.readModels
206
+ .map(type => ({ type, metadata: getReadModelMetadata(type) }))
207
+ .filter(candidate => candidate.metadata)
208
+ .filter(candidate => {
209
+ const readModelProperties = Array.from(candidate.metadata!.members.keys());
210
+ return mappedProperties.every(property => readModelProperties.includes(property));
211
+ });
212
+
213
+ if (matchingReadModels.length !== 1) {
214
+ return undefined;
215
+ }
216
+
217
+ return matchingReadModels[0].metadata!.id.value;
218
+ }
219
+
220
+ private buildModelBoundDefinition(type: Constructor): any {
221
+ const metadata = this.resolveModelBoundMetadata(type);
222
+ if (!metadata) {
223
+ throw new Error(`Type '${type.name}' is missing model-bound projection metadata.`);
224
+ }
225
+
226
+ const properties = TypeIntrospector.getTrackedProperties(type);
227
+ const prototype = type.prototype;
228
+
229
+ const fromByEventType = new Map<string, { Key: ContractEventType; Value: { Properties: Record<string, string>; Key: string; ParentKey: string } }>();
230
+ const joinByEventType = new Map<string, { Key: ContractEventType; Value: { On: string; Properties: Record<string, string>; Key: string } }>();
231
+ const removedWithByEventType = new Map<string, { Key: ContractEventType; Value: { Key: string; ParentKey: string } }>();
232
+ const removedWithJoinByEventType = new Map<string, { Key: ContractEventType; Value: { Key: string } }>();
233
+
234
+ const fromEvents = getFromEventMetadata(type);
235
+ for (const fromEvent of fromEvents) {
236
+ const eventType = this.toContractEventType(fromEvent.eventType);
237
+ const eventKey = this.getEventTypeMapKey(eventType);
238
+ fromByEventType.set(eventKey, {
239
+ Key: eventType,
240
+ Value: {
241
+ Properties: {},
242
+ Key: fromEvent.constantKey ?? fromEvent.key ?? '$eventSourceId',
243
+ ParentKey: fromEvent.parentKey ?? ''
244
+ }
245
+ });
246
+ }
247
+
248
+ const clearWithClass = getClearWithClassMetadata(type);
249
+ if (clearWithClass.length > 0) {
250
+ throw new Error(`Model-bound projection '${type.name}' uses @clearWith on class level, which is not implemented yet.`);
251
+ }
252
+
253
+ const removedWithClass = getRemovedWithClassMetadata(type);
254
+ for (const removed of removedWithClass) {
255
+ const eventType = this.toContractEventType(removed.eventType);
256
+ removedWithByEventType.set(this.getEventTypeMapKey(eventType), {
257
+ Key: eventType,
258
+ Value: { Key: removed.key ?? '$eventSourceId', ParentKey: removed.parentKey ?? '' }
259
+ });
260
+ }
261
+
262
+ const removedWithJoinClass = getRemovedWithJoinClassMetadata(type);
263
+ for (const removed of removedWithJoinClass) {
264
+ const eventType = this.toContractEventType(removed.eventType);
265
+ removedWithJoinByEventType.set(this.getEventTypeMapKey(eventType), {
266
+ Key: eventType,
267
+ Value: { Key: removed.key ?? '$eventSourceId' }
268
+ });
269
+ }
270
+
271
+ for (const property of properties) {
272
+ this.throwIfUnsupportedModelBoundDecorators(type.name, prototype, property);
273
+
274
+ for (const mapping of getSetFromMetadata(prototype, property)) {
275
+ const entry = this.ensureFromEntry(fromByEventType, mapping.eventType);
276
+ entry.Value.Properties[property] = mapping.eventPropertyName ?? property;
277
+ }
278
+
279
+ for (const mapping of getSetFromContextMetadata(prototype, property)) {
280
+ const entry = this.ensureFromEntry(fromByEventType, mapping.eventType);
281
+ entry.Value.Properties[property] = mapping.contextPropertyName ?? property;
282
+ }
283
+
284
+ for (const mapping of getSetValueMetadata(prototype, property)) {
285
+ const entry = this.ensureFromEntry(fromByEventType, mapping.eventType);
286
+ entry.Value.Properties[property] = JSON.stringify(mapping.value);
287
+ }
288
+
289
+ for (const mapping of getJoinMetadata(prototype, property)) {
290
+ const entry = this.ensureJoinEntry(joinByEventType, mapping.eventType);
291
+ entry.Value.On = mapping.on ?? entry.Value.On;
292
+ entry.Value.Properties[property] = mapping.eventPropertyName ?? property;
293
+ }
294
+
295
+ const fromEvery = getFromEveryMetadata(prototype, property);
296
+ if (fromEvery) {
297
+ // Applied later to projection.All
298
+ }
299
+
300
+ for (const removed of getRemovedWithPropertyMetadata(prototype, property)) {
301
+ const eventType = this.toContractEventType(removed.eventType);
302
+ removedWithByEventType.set(this.getEventTypeMapKey(eventType), {
303
+ Key: eventType,
304
+ Value: { Key: removed.key ?? '$eventSourceId', ParentKey: removed.parentKey ?? '' }
305
+ });
306
+ }
307
+
308
+ for (const removed of getRemovedWithJoinPropertyMetadata(prototype, property)) {
309
+ const eventType = this.toContractEventType(removed.eventType);
310
+ removedWithJoinByEventType.set(this.getEventTypeMapKey(eventType), {
311
+ Key: eventType,
312
+ Value: { Key: removed.key ?? '$eventSourceId' }
313
+ });
314
+ }
315
+ }
316
+
317
+ const allProperties: Record<string, string> = {};
318
+ for (const property of properties) {
319
+ const fromEvery = getFromEveryMetadata(prototype, property);
320
+ if (fromEvery) {
321
+ allProperties[property] = fromEvery.contextProperty
322
+ ? fromEvery.contextProperty
323
+ : (fromEvery.property ?? property);
324
+ }
325
+ }
326
+
327
+ return {
328
+ EventSequenceId: metadata.eventSequenceId ?? EventSequenceId.eventLog.value,
329
+ Identifier: metadata.id.value,
330
+ ReadModel: metadata.readModelIdentifier,
331
+ IsActive: true,
332
+ IsRewindable: !isNotRewindable(type),
333
+ InitialModelState: '{}',
334
+ From: Array.from(fromByEventType.values()),
335
+ Join: Array.from(joinByEventType.values()),
336
+ Children: {},
337
+ FromEvery: [],
338
+ All: {
339
+ Properties: allProperties,
340
+ IncludeChildren: false,
341
+ AutoMap: AutoMap.Inherit
342
+ },
343
+ FromEventProperty: undefined,
344
+ RemovedWith: Array.from(removedWithByEventType.values()),
345
+ RemovedWithJoin: Array.from(removedWithJoinByEventType.values()),
346
+ LastUpdated: { Value: new Date().toISOString() },
347
+ Tags: [],
348
+ AutoMap: AutoMap.Disabled,
349
+ Nested: {}
350
+ };
351
+ }
352
+
353
+ private resolveModelBoundMetadata(type: Constructor): ResolvedModelBoundMetadata | undefined {
354
+ const readModelMetadata = getReadModelMetadata(type);
355
+
356
+ if (readModelMetadata && hasFromEventMetadata(type)) {
357
+ return {
358
+ id: new ProjectionId(readModelMetadata.id.value),
359
+ eventSequenceId: undefined,
360
+ readModelIdentifier: readModelMetadata.id.value
361
+ };
362
+ }
363
+
364
+ return undefined;
365
+ }
366
+
367
+ private throwIfUnsupportedModelBoundDecorators(typeName: string, prototype: object, property: string): void {
368
+ if (getAddFromMetadata(prototype, property).length > 0) {
369
+ throw new Error(`Model-bound projection '${typeName}' uses @addFrom on '${property}', which is not implemented yet.`);
370
+ }
371
+ if (getSubtractFromMetadata(prototype, property).length > 0) {
372
+ throw new Error(`Model-bound projection '${typeName}' uses @subtractFrom on '${property}', which is not implemented yet.`);
373
+ }
374
+ if (getIncrementMetadata(prototype, property).length > 0) {
375
+ throw new Error(`Model-bound projection '${typeName}' uses @increment on '${property}', which is not implemented yet.`);
376
+ }
377
+ if (getDecrementMetadata(prototype, property).length > 0) {
378
+ throw new Error(`Model-bound projection '${typeName}' uses @decrement on '${property}', which is not implemented yet.`);
379
+ }
380
+ if (getCountMetadata(prototype, property).length > 0) {
381
+ throw new Error(`Model-bound projection '${typeName}' uses @count on '${property}', which is not implemented yet.`);
382
+ }
383
+ if (getChildrenFromMetadata(prototype, property).length > 0) {
384
+ throw new Error(`Model-bound projection '${typeName}' uses @childrenFrom on '${property}', which is not implemented yet.`);
385
+ }
386
+ if (isNested(prototype, property)) {
387
+ throw new Error(`Model-bound projection '${typeName}' uses @nested on '${property}', which is not implemented yet.`);
388
+ }
389
+ if (getClearWithPropertyMetadata(prototype, property).length > 0) {
390
+ throw new Error(`Model-bound projection '${typeName}' uses @clearWith on '${property}', which is not implemented yet.`);
391
+ }
392
+ }
393
+
394
+ private ensureFromEntry(
395
+ fromByEventType: Map<string, { Key: ContractEventType; Value: { Properties: Record<string, string>; Key: string; ParentKey: string } }>,
396
+ eventTypeConstructor: Function
397
+ ): { Key: ContractEventType; Value: { Properties: Record<string, string>; Key: string; ParentKey: string } } {
398
+ const eventType = this.toContractEventType(eventTypeConstructor);
399
+ const key = this.getEventTypeMapKey(eventType);
400
+ const existing = fromByEventType.get(key);
401
+ if (existing) {
402
+ return existing;
403
+ }
404
+
405
+ const created = {
406
+ Key: eventType,
407
+ Value: {
408
+ Properties: {},
409
+ Key: '$eventSourceId',
410
+ ParentKey: ''
411
+ }
412
+ };
413
+ fromByEventType.set(key, created);
414
+ return created;
415
+ }
416
+
417
+ private ensureJoinEntry(
418
+ joinByEventType: Map<string, { Key: ContractEventType; Value: { On: string; Properties: Record<string, string>; Key: string } }>,
419
+ eventTypeConstructor: Function
420
+ ): { Key: ContractEventType; Value: { On: string; Properties: Record<string, string>; Key: string } } {
421
+ const eventType = this.toContractEventType(eventTypeConstructor);
422
+ const key = this.getEventTypeMapKey(eventType);
423
+ const existing = joinByEventType.get(key);
424
+ if (existing) {
425
+ return existing;
426
+ }
427
+
428
+ const created = {
429
+ Key: eventType,
430
+ Value: {
431
+ On: '',
432
+ Properties: {},
433
+ Key: '$eventSourceId'
434
+ }
435
+ };
436
+ joinByEventType.set(key, created);
437
+ return created;
438
+ }
439
+
440
+ private toContractEventType(eventTypeConstructor: Function): ContractEventType {
441
+ const eventType = getEventTypeFor(eventTypeConstructor);
442
+ if (eventType.id.value === '') {
443
+ throw new Error(`Event type '${eventTypeConstructor.name}' is not decorated with @eventType().`);
444
+ }
445
+ return {
446
+ Id: eventType.id.value,
447
+ Generation: eventType.generation.value,
448
+ Tombstone: false
449
+ };
450
+ }
451
+
452
+ private getEventTypeMapKey(eventType: ContractEventType): string {
453
+ return `${eventType.Id}:${eventType.Generation}:${eventType.Tombstone ? '1' : '0'}`;
454
+ }
455
+
456
+ private toContractsGuid(value: string): { lo: number; hi: number } {
457
+ const hex = value.replace(/-/g, '');
458
+ return {
459
+ hi: Number(BigInt(`0x${hex.substring(0, 16)}`)),
460
+ lo: Number(BigInt(`0x${hex.substring(16, 32)}`))
461
+ };
462
+ }
463
+ }
@@ -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 { PropertyAccessor, PropertyPathResolverProxyHandler } from '@cratis/fundamentals';
5
+ import { IAllSetBuilder } from './IAllSetBuilder';
6
+
7
+ /**
8
+ * Concrete implementation of {@link IAllSetBuilder} for fromEvery mappings.
9
+ * @template TReadModel - The read model type.
10
+ * @template TParentBuilder - The parent builder type.
11
+ */
12
+ export class AllSetBuilder<TReadModel, TParentBuilder> implements IAllSetBuilder<TReadModel, TParentBuilder> {
13
+ constructor(
14
+ private readonly _targetProperty: string,
15
+ private readonly _setProperty: (property: string, expression: string) => void,
16
+ private readonly _parent: TParentBuilder
17
+ ) {}
18
+
19
+ /** @inheritdoc */
20
+ to(readModelPropertyAccessor: PropertyAccessor<TReadModel>): TParentBuilder {
21
+ const handler = new PropertyPathResolverProxyHandler();
22
+ const proxy = new Proxy({}, handler);
23
+ readModelPropertyAccessor(proxy as TReadModel);
24
+ this._setProperty(this._targetProperty, handler.property);
25
+ return this._parent;
26
+ }
27
+
28
+ /** @inheritdoc */
29
+ toEventContextProperty(contextPropertyName: string): TParentBuilder {
30
+ this._setProperty(this._targetProperty, `$context.${contextPropertyName}`);
31
+ return this._parent;
32
+ }
33
+
34
+ /** @inheritdoc */
35
+ toEventSourceId(): TParentBuilder {
36
+ this._setProperty(this._targetProperty, '$eventSourceId');
37
+ return this._parent;
38
+ }
39
+ }
@@ -0,0 +1,144 @@
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 { PropertyAccessor, PropertyPathResolverProxyHandler } from '@cratis/fundamentals';
5
+ import { IAddBuilder } from './IAddBuilder';
6
+ import { IAddChildBuilder } from './IAddChildBuilder';
7
+ import { ICompositeKeyBuilder } from './ICompositeKeyBuilder';
8
+ import { IFromBuilder } from './IFromBuilder';
9
+ import { ISetBuilder } from './ISetBuilder';
10
+ import { ISubtractBuilder } from './ISubtractBuilder';
11
+ import { SetBuilder } from './SetBuilder';
12
+
13
+ /**
14
+ * Accumulated property mapping for a from clause.
15
+ */
16
+ export interface FromEntry {
17
+ properties: Record<string, string>;
18
+ key: string;
19
+ parentKey: string;
20
+ }
21
+
22
+ /**
23
+ * Concrete implementation of {@link IFromBuilder}.
24
+ * @template TReadModel - The read model type.
25
+ * @template TEvent - The event type.
26
+ */
27
+ export class FromBuilder<TReadModel, TEvent> implements IFromBuilder<TReadModel, TEvent> {
28
+ readonly entry: FromEntry = {
29
+ properties: {},
30
+ key: '$eventSourceId',
31
+ parentKey: ''
32
+ };
33
+
34
+ /** @inheritdoc */
35
+ set(readModelPropertyAccessor: PropertyAccessor<TReadModel>): ISetBuilder<TEvent, IFromBuilder<TReadModel, TEvent>> {
36
+ const handler = new PropertyPathResolverProxyHandler();
37
+ const proxy = new Proxy({}, handler);
38
+ readModelPropertyAccessor(proxy as TReadModel);
39
+ const rmProp = handler.property;
40
+ return new SetBuilder<TEvent, IFromBuilder<TReadModel, TEvent>>(
41
+ rmProp,
42
+ (rp, expr) => { this.entry.properties[rp] = expr; },
43
+ this
44
+ );
45
+ }
46
+
47
+ /** @inheritdoc */
48
+ usingKey(keyAccessor: PropertyAccessor<TEvent>): this {
49
+ const handler = new PropertyPathResolverProxyHandler();
50
+ const proxy = new Proxy({}, handler);
51
+ keyAccessor(proxy as TEvent);
52
+ this.entry.key = handler.property;
53
+ return this;
54
+ }
55
+
56
+ /** @inheritdoc */
57
+ usingKeyFromContext(contextPropertyName: string): this {
58
+ this.entry.key = `$context.${contextPropertyName}`;
59
+ return this;
60
+ }
61
+
62
+ /** @inheritdoc */
63
+ usingParentKey(keyAccessor: PropertyAccessor<TEvent>): this {
64
+ const handler = new PropertyPathResolverProxyHandler();
65
+ const proxy = new Proxy({}, handler);
66
+ keyAccessor(proxy as TEvent);
67
+ this.entry.parentKey = handler.property;
68
+ return this;
69
+ }
70
+
71
+ /** @inheritdoc */
72
+ usingParentKeyFromContext(contextPropertyName: string): this {
73
+ this.entry.parentKey = `$context.${contextPropertyName}`;
74
+ return this;
75
+ }
76
+
77
+ /** @inheritdoc */
78
+ usingCompositeKey<TKeyType>(_builderCallback: (builder: ICompositeKeyBuilder<TKeyType, TEvent>) => void): this {
79
+ throw new Error('usingCompositeKey is not implemented yet.');
80
+ }
81
+
82
+ /** @inheritdoc */
83
+ usingParentCompositeKey<TKeyType>(_builderCallback: (builder: ICompositeKeyBuilder<TKeyType, TEvent>) => void): this {
84
+ throw new Error('usingParentCompositeKey is not implemented yet.');
85
+ }
86
+
87
+ /** @inheritdoc */
88
+ usingConstantKey(value: string): this {
89
+ this.entry.key = value;
90
+ return this;
91
+ }
92
+
93
+ /** @inheritdoc */
94
+ usingConstantParentKey(value: string): this {
95
+ this.entry.parentKey = value;
96
+ return this;
97
+ }
98
+
99
+ /** @inheritdoc */
100
+ increment(readModelPropertyAccessor: PropertyAccessor<TReadModel>): this {
101
+ const handler = new PropertyPathResolverProxyHandler();
102
+ const proxy = new Proxy({}, handler);
103
+ readModelPropertyAccessor(proxy as TReadModel);
104
+ this.entry.properties[handler.property] = '$increment';
105
+ return this;
106
+ }
107
+
108
+ /** @inheritdoc */
109
+ decrement(readModelPropertyAccessor: PropertyAccessor<TReadModel>): this {
110
+ const handler = new PropertyPathResolverProxyHandler();
111
+ const proxy = new Proxy({}, handler);
112
+ readModelPropertyAccessor(proxy as TReadModel);
113
+ this.entry.properties[handler.property] = '$decrement';
114
+ return this;
115
+ }
116
+
117
+ /** @inheritdoc */
118
+ add(_readModelPropertyAccessor: PropertyAccessor<TReadModel>): IAddBuilder<TEvent, this> {
119
+ throw new Error('add is not implemented yet.');
120
+ }
121
+
122
+ /** @inheritdoc */
123
+ subtract(_readModelPropertyAccessor: PropertyAccessor<TReadModel>): ISubtractBuilder<TEvent, this> {
124
+ throw new Error('subtract is not implemented yet.');
125
+ }
126
+
127
+ /** @inheritdoc */
128
+ count(_readModelPropertyAccessor: PropertyAccessor<TReadModel>): this {
129
+ throw new Error('count is not implemented yet.');
130
+ }
131
+
132
+ /** @inheritdoc */
133
+ addChild<TChildModel>(
134
+ _targetPropertyAccessor: PropertyAccessor<TReadModel>,
135
+ _eventPropertyAccessorOrBuilderCallback: PropertyAccessor<TEvent> | ((builder: IAddChildBuilder<TChildModel, TEvent>) => void)
136
+ ): this {
137
+ throw new Error('addChild is not implemented yet.');
138
+ }
139
+
140
+ /** @inheritdoc */
141
+ setThisValue(): ISetBuilder<TEvent, this> {
142
+ throw new Error('setThisValue is not implemented yet.');
143
+ }
144
+ }
@@ -0,0 +1,46 @@
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 { PropertyAccessor, PropertyPathResolverProxyHandler } from '@cratis/fundamentals';
5
+ import { IAllSetBuilder } from './IAllSetBuilder';
6
+ import { IFromEveryBuilder } from './IFromEveryBuilder';
7
+ import { AllSetBuilder } from './AllSetBuilder';
8
+
9
+ /**
10
+ * Accumulated mapping entry for fromEvery.
11
+ */
12
+ export interface FromEveryEntry {
13
+ properties: Record<string, string>;
14
+ includeChildren: boolean;
15
+ }
16
+
17
+ /**
18
+ * Concrete implementation of {@link IFromEveryBuilder}.
19
+ * @template TReadModel - The read model type.
20
+ */
21
+ export class FromEveryBuilder<TReadModel> implements IFromEveryBuilder<TReadModel> {
22
+ readonly entry: FromEveryEntry = {
23
+ properties: {},
24
+ includeChildren: true
25
+ };
26
+
27
+ /** @inheritdoc */
28
+ set(readModelPropertyAccessor: PropertyAccessor<TReadModel>): IAllSetBuilder<TReadModel, IFromEveryBuilder<TReadModel>> {
29
+ const handler = new PropertyPathResolverProxyHandler();
30
+ const proxy = new Proxy({}, handler);
31
+ readModelPropertyAccessor(proxy as TReadModel);
32
+ const property = handler.property;
33
+
34
+ return new AllSetBuilder<TReadModel, IFromEveryBuilder<TReadModel>>(
35
+ property,
36
+ (targetProperty, expression) => { this.entry.properties[targetProperty] = expression; },
37
+ this
38
+ );
39
+ }
40
+
41
+ /** @inheritdoc */
42
+ excludeChildProjections(): IFromEveryBuilder<TReadModel> {
43
+ this.entry.includeChildren = false;
44
+ return this;
45
+ }
46
+ }