@reventlessdev/reventless-local 3.0.0-alpha.113

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 (334) hide show
  1. package/CHANGELOG.md +1197 -0
  2. package/LICENSE +202 -0
  3. package/__mocks__/emptyModule.js +2 -0
  4. package/__mocks__/nodeSqlite.mjs +6 -0
  5. package/package.json +67 -0
  6. package/rescript.json +39 -0
  7. package/src/Platform.res +2162 -0
  8. package/src/Platform.res.mjs +3389 -0
  9. package/src/adapter/Api/LocalGraphQL_Adapter.res +29 -0
  10. package/src/adapter/Api/LocalGraphQL_Adapter.res.mjs +26 -0
  11. package/src/adapter/Api/LocalGraphQL_SubscriptionResolvers.res +146 -0
  12. package/src/adapter/Api/LocalGraphQL_SubscriptionResolvers.res.mjs +88 -0
  13. package/src/adapter/Auth/Auth_GraphqlContext.res +83 -0
  14. package/src/adapter/Auth/Auth_GraphqlContext.res.mjs +76 -0
  15. package/src/adapter/Auth/LocalAuth.res +239 -0
  16. package/src/adapter/Auth/LocalAuth.res.mjs +247 -0
  17. package/src/adapter/Auth/UserStore.res +134 -0
  18. package/src/adapter/Auth/UserStore.res.mjs +146 -0
  19. package/src/adapter/Backend.res +46 -0
  20. package/src/adapter/Backend.res.mjs +66 -0
  21. package/src/adapter/BackendState.res +34 -0
  22. package/src/adapter/BackendState.res.mjs +42 -0
  23. package/src/adapter/Cloner/LocalClonerRunner.res +13 -0
  24. package/src/adapter/Cloner/LocalClonerRunner.res.mjs +12 -0
  25. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res +329 -0
  26. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res.mjs +301 -0
  27. package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res +76 -0
  28. package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res.mjs +57 -0
  29. package/src/adapter/CommandGenerator/LocalCommandGeneratorResolvers.res +19 -0
  30. package/src/adapter/CommandGenerator/LocalCommandGeneratorResolvers.res.mjs +19 -0
  31. package/src/adapter/CommandTopic/LocalCommandTopicChannel.res +104 -0
  32. package/src/adapter/CommandTopic/LocalCommandTopicChannel.res.mjs +82 -0
  33. package/src/adapter/CommandTopic/LocalCommandTopicRemoteChannel.res +32 -0
  34. package/src/adapter/CommandTopic/LocalCommandTopicRemoteChannel.res.mjs +38 -0
  35. package/src/adapter/Counter/LocalCounterHandler.res +42 -0
  36. package/src/adapter/Counter/LocalCounterHandler.res.mjs +45 -0
  37. package/src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res +131 -0
  38. package/src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res.mjs +140 -0
  39. package/src/adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res +334 -0
  40. package/src/adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs +299 -0
  41. package/src/adapter/DomainGraphQL_Server.res +565 -0
  42. package/src/adapter/DomainGraphQL_Server.res.mjs +576 -0
  43. package/src/adapter/DomainMCP_Server.res +369 -0
  44. package/src/adapter/DomainMCP_Server.res.mjs +358 -0
  45. package/src/adapter/EventCollector/LocalEventCollectorChannel.res +87 -0
  46. package/src/adapter/EventCollector/LocalEventCollectorChannel.res.mjs +45 -0
  47. package/src/adapter/EventLog/EventLogStorage_InMemory.res +105 -0
  48. package/src/adapter/EventLog/EventLogStorage_InMemory.res.mjs +117 -0
  49. package/src/adapter/EventLog/EventLogStorage_Sqlite.res +145 -0
  50. package/src/adapter/EventLog/EventLogStorage_Sqlite.res.mjs +155 -0
  51. package/src/adapter/EventTopic/LocalEventTopicPublisher.res +36 -0
  52. package/src/adapter/EventTopic/LocalEventTopicPublisher.res.mjs +31 -0
  53. package/src/adapter/GraphQL_Server.res +6 -0
  54. package/src/adapter/GraphQL_Server.res.mjs +154 -0
  55. package/src/adapter/GraphQL_ServerInstance.res +310 -0
  56. package/src/adapter/GraphQL_ServerInstance.res.mjs +257 -0
  57. package/src/adapter/Heartbeat/LocalHeartbeatRunner.res +57 -0
  58. package/src/adapter/Heartbeat/LocalHeartbeatRunner.res.mjs +34 -0
  59. package/src/adapter/LocalBus.res +498 -0
  60. package/src/adapter/LocalBus.res.mjs +1011 -0
  61. package/src/adapter/LocalPluginSpec.res +16 -0
  62. package/src/adapter/LocalPluginSpec.res.mjs +33 -0
  63. package/src/adapter/LocalSideEffectHandler.res +44 -0
  64. package/src/adapter/LocalSideEffectHandler.res.mjs +34 -0
  65. package/src/adapter/MCP_Server.res +4 -0
  66. package/src/adapter/MCP_Server.res.mjs +67 -0
  67. package/src/adapter/MCP_ServerInstance.res +362 -0
  68. package/src/adapter/MCP_ServerInstance.res.mjs +313 -0
  69. package/src/adapter/PlatformGraphQL_Server.res +75 -0
  70. package/src/adapter/PlatformGraphQL_Server.res.mjs +84 -0
  71. package/src/adapter/PlatformMCP_Server.res +23 -0
  72. package/src/adapter/PlatformMCP_Server.res.mjs +46 -0
  73. package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res +793 -0
  74. package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res.mjs +569 -0
  75. package/src/adapter/QueryDb/QueryDbStorage_InMemory.res +242 -0
  76. package/src/adapter/QueryDb/QueryDbStorage_InMemory.res.mjs +241 -0
  77. package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res +339 -0
  78. package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res.mjs +318 -0
  79. package/src/adapter/QueryDb/SortKey_Filter.res +48 -0
  80. package/src/adapter/QueryDb/SortKey_Filter.res.mjs +46 -0
  81. package/src/adapter/QueryEngine/LocalQueryEngine.res +57 -0
  82. package/src/adapter/QueryEngine/LocalQueryEngine.res.mjs +56 -0
  83. package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res +91 -0
  84. package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res.mjs +50 -0
  85. package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res +47 -0
  86. package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res.mjs +37 -0
  87. package/src/adapter/Runtime/LocalPluginRuntime_Builder.res +11 -0
  88. package/src/adapter/Runtime/LocalPluginRuntime_Builder.res.mjs +30 -0
  89. package/src/adapter/Runtime/LocalRuntimeEnvironment.res +54 -0
  90. package/src/adapter/Runtime/LocalRuntimeEnvironment.res.mjs +40 -0
  91. package/src/adapter/Scheduler/LocalScheduledPublisher.res +102 -0
  92. package/src/adapter/Scheduler/LocalScheduledPublisher.res.mjs +84 -0
  93. package/src/adapter/SqliteDriver.res +52 -0
  94. package/src/adapter/SqliteDriver.res.mjs +76 -0
  95. package/src/adapter/SqliteDriver.resi +31 -0
  96. package/src/adapter/Task/LocalTaskBucket.res +75 -0
  97. package/src/adapter/Task/LocalTaskBucket.res.mjs +48 -0
  98. package/src/adapter/Task/TaskBucket_Sqlite.res +47 -0
  99. package/src/adapter/Task/TaskBucket_Sqlite.res.mjs +40 -0
  100. package/src/components/Aggregate_Builder.res +55 -0
  101. package/src/components/Aggregate_Builder.res.mjs +140 -0
  102. package/src/components/AutomationSlice_Builder.res +41 -0
  103. package/src/components/AutomationSlice_Builder.res.mjs +57 -0
  104. package/src/components/Counter_Builder.res +14 -0
  105. package/src/components/Counter_Builder.res.mjs +32 -0
  106. package/src/components/DcbEventLog_Builder.res +18 -0
  107. package/src/components/DcbEventLog_Builder.res.mjs +24 -0
  108. package/src/components/ExtensionPoint_Builder.res +25 -0
  109. package/src/components/ExtensionPoint_Builder.res.mjs +44 -0
  110. package/src/components/InboundTranslationSlice_Builder.res +34 -0
  111. package/src/components/InboundTranslationSlice_Builder.res.mjs +45 -0
  112. package/src/components/OutboundTranslationSlice_Builder.res +43 -0
  113. package/src/components/OutboundTranslationSlice_Builder.res.mjs +59 -0
  114. package/src/components/Plugin_Builder.res +37 -0
  115. package/src/components/Plugin_Builder.res.mjs +67 -0
  116. package/src/components/ReadModel_Builder.res +47 -0
  117. package/src/components/ReadModel_Builder.res.mjs +54 -0
  118. package/src/components/StateChangeSlice_Builder.res +19 -0
  119. package/src/components/StateChangeSlice_Builder.res.mjs +21 -0
  120. package/src/components/StateViewSlice_Builder.res +42 -0
  121. package/src/components/StateViewSlice_Builder.res.mjs +58 -0
  122. package/src/components/Task_Builder.res +28 -0
  123. package/src/components/Task_Builder.res.mjs +41 -0
  124. package/src/reexport/CommandTopic.res +3 -0
  125. package/src/reexport/CommandTopic.res.mjs +55 -0
  126. package/src/test/Mocks/MockDcbEventLogStorage.res +136 -0
  127. package/src/test/Mocks/MockDcbEventLogStorage.res.mjs +146 -0
  128. package/src/test/Mocks/MockEventLogStorage.res +57 -0
  129. package/src/test/Mocks/MockEventLogStorage.res.mjs +65 -0
  130. package/src/test/Mocks/MockPublisher.res +29 -0
  131. package/src/test/Mocks/MockPublisher.res.mjs +28 -0
  132. package/src/test/Mocks/MockQueryDbStorage.res +104 -0
  133. package/src/test/Mocks/MockQueryDbStorage.res.mjs +136 -0
  134. package/src/test/TestRunner.res +96 -0
  135. package/src/test/TestRunner.res.mjs +71 -0
  136. package/tests/SplitApiFixtures.res +84 -0
  137. package/tests/SplitApiFixtures.res.mjs +88 -0
  138. package/tests/SplitApiTest.res +102 -0
  139. package/tests/SplitApiTest.res.mjs +82 -0
  140. package/tests/TestFixtures.res +54 -0
  141. package/tests/TestFixtures.res.mjs +65 -0
  142. package/tests/adapter/BackendParityTest.res +94 -0
  143. package/tests/adapter/BackendParityTest.res.mjs +96 -0
  144. package/tests/adapter/CollectNEventsTest.res +82 -0
  145. package/tests/adapter/CollectNEventsTest.res.mjs +83 -0
  146. package/tests/adapter/CommandAuthorizationTest.res +200 -0
  147. package/tests/adapter/CommandAuthorizationTest.res.mjs +190 -0
  148. package/tests/adapter/CommandTopicChannelTest.res +174 -0
  149. package/tests/adapter/CommandTopicChannelTest.res.mjs +170 -0
  150. package/tests/adapter/CounterHandlerTest.res +113 -0
  151. package/tests/adapter/CounterHandlerTest.res.mjs +96 -0
  152. package/tests/adapter/DcbEventLogStorageSqliteTest.res +157 -0
  153. package/tests/adapter/DcbEventLogStorageSqliteTest.res.mjs +165 -0
  154. package/tests/adapter/DcbEventLogStorageTest.res +187 -0
  155. package/tests/adapter/DcbEventLogStorageTest.res.mjs +195 -0
  156. package/tests/adapter/EventCollectorChannelTest.res +166 -0
  157. package/tests/adapter/EventCollectorChannelTest.res.mjs +178 -0
  158. package/tests/adapter/EventLogStorageSqliteTest.res +105 -0
  159. package/tests/adapter/EventLogStorageSqliteTest.res.mjs +116 -0
  160. package/tests/adapter/EventTapTest.res +102 -0
  161. package/tests/adapter/EventTapTest.res.mjs +94 -0
  162. package/tests/adapter/EventTopicPublisherTest.res +76 -0
  163. package/tests/adapter/EventTopicPublisherTest.res.mjs +86 -0
  164. package/tests/adapter/GraphQL_SchemaInspectorTest.res +763 -0
  165. package/tests/adapter/GraphQL_SchemaInspectorTest.res.mjs +578 -0
  166. package/tests/adapter/GraphQL_SubscriptionResolversTest.res +161 -0
  167. package/tests/adapter/GraphQL_SubscriptionResolversTest.res.mjs +134 -0
  168. package/tests/adapter/HeartbeatRunnerTest.res +136 -0
  169. package/tests/adapter/HeartbeatRunnerTest.res.mjs +96 -0
  170. package/tests/adapter/LocalAuthHttpTest.res +224 -0
  171. package/tests/adapter/LocalAuthHttpTest.res.mjs +237 -0
  172. package/tests/adapter/LocalAuthLoginTest.res +180 -0
  173. package/tests/adapter/LocalAuthLoginTest.res.mjs +207 -0
  174. package/tests/adapter/LocalAuthTest.res +106 -0
  175. package/tests/adapter/LocalAuthTest.res.mjs +145 -0
  176. package/tests/adapter/LocalAuthUserStoreTest.res +172 -0
  177. package/tests/adapter/LocalAuthUserStoreTest.res.mjs +208 -0
  178. package/tests/adapter/LocalBusBoundedTest.res +157 -0
  179. package/tests/adapter/LocalBusBoundedTest.res.mjs +168 -0
  180. package/tests/adapter/LocalBusPubSubTest.res +81 -0
  181. package/tests/adapter/LocalBusPubSubTest.res.mjs +81 -0
  182. package/tests/adapter/QueryDbGsiTtlTest.res +268 -0
  183. package/tests/adapter/QueryDbGsiTtlTest.res.mjs +209 -0
  184. package/tests/adapter/QueryDbListResolverTest.res +361 -0
  185. package/tests/adapter/QueryDbListResolverTest.res.mjs +426 -0
  186. package/tests/adapter/QueryDbStorageSqliteTest.res +159 -0
  187. package/tests/adapter/QueryDbStorageSqliteTest.res.mjs +126 -0
  188. package/tests/adapter/QueryDbStorageTest.res +171 -0
  189. package/tests/adapter/QueryDbStorageTest.res.mjs +170 -0
  190. package/tests/adapter/QueryEngineTest.res +152 -0
  191. package/tests/adapter/QueryEngineTest.res.mjs +148 -0
  192. package/tests/adapter/ScheduledPublisherTest.res +199 -0
  193. package/tests/adapter/ScheduledPublisherTest.res.mjs +203 -0
  194. package/tests/adapter/SortKey_FilterTest.res +103 -0
  195. package/tests/adapter/SortKey_FilterTest.res.mjs +135 -0
  196. package/tests/adapter/SqliteDriverTest.res +86 -0
  197. package/tests/adapter/SqliteDriverTest.res.mjs +101 -0
  198. package/tests/adapter/TaskBucketSqliteTest.res +44 -0
  199. package/tests/adapter/TaskBucketSqliteTest.res.mjs +40 -0
  200. package/tests/adapter/TaskBucketTest.res +106 -0
  201. package/tests/adapter/TaskBucketTest.res.mjs +118 -0
  202. package/tests/components/aggregate/AggregateFixtures.res +78 -0
  203. package/tests/components/aggregate/AggregateFixtures.res.mjs +109 -0
  204. package/tests/components/aggregate/AggregateTest.res +129 -0
  205. package/tests/components/aggregate/AggregateTest.res.mjs +129 -0
  206. package/tests/components/automationslice/AutomationSliceCallbackTest.res +212 -0
  207. package/tests/components/automationslice/AutomationSliceCallbackTest.res.mjs +233 -0
  208. package/tests/components/automationslice/AutomationSliceFixtures.res +189 -0
  209. package/tests/components/automationslice/AutomationSliceFixtures.res.mjs +276 -0
  210. package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res +289 -0
  211. package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res.mjs +453 -0
  212. package/tests/components/automationslice/AutomationSliceSelfDeadlockTest.res +47 -0
  213. package/tests/components/automationslice/AutomationSliceSelfDeadlockTest.res.mjs +31 -0
  214. package/tests/components/automationslice/MixedSourceAutomationSliceFixtures.res +213 -0
  215. package/tests/components/automationslice/MixedSourceAutomationSliceFixtures.res.mjs +268 -0
  216. package/tests/components/automationslice/MixedSourceAutomationSliceTest.res +118 -0
  217. package/tests/components/automationslice/MixedSourceAutomationSliceTest.res.mjs +99 -0
  218. package/tests/components/commandgenerator/CommandGeneratorFixtures.res +73 -0
  219. package/tests/components/commandgenerator/CommandGeneratorFixtures.res.mjs +109 -0
  220. package/tests/components/commandgenerator/CommandGeneratorTest.res +43 -0
  221. package/tests/components/commandgenerator/CommandGeneratorTest.res.mjs +46 -0
  222. package/tests/components/commandtopic/CommandTopicFixtures.res +37 -0
  223. package/tests/components/commandtopic/CommandTopicFixtures.res.mjs +68 -0
  224. package/tests/components/commandtopic/CommandTopicStreamFixtures.res +43 -0
  225. package/tests/components/commandtopic/CommandTopicStreamFixtures.res.mjs +91 -0
  226. package/tests/components/commandtopic/CommandTopicStreamTest.res +30 -0
  227. package/tests/components/commandtopic/CommandTopicStreamTest.res.mjs +35 -0
  228. package/tests/components/commandtopic/CommandTopicTest.res +55 -0
  229. package/tests/components/commandtopic/CommandTopicTest.res.mjs +62 -0
  230. package/tests/components/counter/CounterFixtures.res +42 -0
  231. package/tests/components/counter/CounterFixtures.res.mjs +34 -0
  232. package/tests/components/counter/CounterTest.res +46 -0
  233. package/tests/components/counter/CounterTest.res.mjs +61 -0
  234. package/tests/components/dcb/DcbCrossPartitionFixtures.res +170 -0
  235. package/tests/components/dcb/DcbCrossPartitionFixtures.res.mjs +276 -0
  236. package/tests/components/dcb/DcbCrossPartitionReadTest.res +68 -0
  237. package/tests/components/dcb/DcbCrossPartitionReadTest.res.mjs +78 -0
  238. package/tests/components/dcb/DcbEventLogAppendStreamTest.res +72 -0
  239. package/tests/components/dcb/DcbEventLogAppendStreamTest.res.mjs +82 -0
  240. package/tests/components/dcb/DcbEventLogStreamTest.res +103 -0
  241. package/tests/components/dcb/DcbEventLogStreamTest.res.mjs +91 -0
  242. package/tests/components/dcb/DcbFixtures.res +145 -0
  243. package/tests/components/dcb/DcbFixtures.res.mjs +221 -0
  244. package/tests/components/dcb/DcbTest.res +55 -0
  245. package/tests/components/dcb/DcbTest.res.mjs +55 -0
  246. package/tests/components/eventcollector/EventCollectorFixtures.res +42 -0
  247. package/tests/components/eventcollector/EventCollectorFixtures.res.mjs +49 -0
  248. package/tests/components/eventcollector/EventCollectorTest.res +37 -0
  249. package/tests/components/eventcollector/EventCollectorTest.res.mjs +36 -0
  250. package/tests/components/eventlog/EventLogAppendStreamTest.res +93 -0
  251. package/tests/components/eventlog/EventLogAppendStreamTest.res.mjs +113 -0
  252. package/tests/components/eventlog/EventLogConflictTest.res +86 -0
  253. package/tests/components/eventlog/EventLogConflictTest.res.mjs +81 -0
  254. package/tests/components/eventlog/EventLogFixtures.res +52 -0
  255. package/tests/components/eventlog/EventLogFixtures.res.mjs +80 -0
  256. package/tests/components/eventlog/EventLogStreamTest.res +98 -0
  257. package/tests/components/eventlog/EventLogStreamTest.res.mjs +142 -0
  258. package/tests/components/eventlog/EventLogTest.res +53 -0
  259. package/tests/components/eventlog/EventLogTest.res.mjs +74 -0
  260. package/tests/components/eventtopic/EventTopicFixtures.res +47 -0
  261. package/tests/components/eventtopic/EventTopicFixtures.res.mjs +77 -0
  262. package/tests/components/eventtopic/EventTopicStreamFixtures.res +27 -0
  263. package/tests/components/eventtopic/EventTopicStreamFixtures.res.mjs +62 -0
  264. package/tests/components/eventtopic/EventTopicStreamTest.res +35 -0
  265. package/tests/components/eventtopic/EventTopicStreamTest.res.mjs +44 -0
  266. package/tests/components/eventtopic/EventTopicTest.res +35 -0
  267. package/tests/components/eventtopic/EventTopicTest.res.mjs +43 -0
  268. package/tests/components/extensionpoint/ExtensionPointFixtures.res +145 -0
  269. package/tests/components/extensionpoint/ExtensionPointFixtures.res.mjs +188 -0
  270. package/tests/components/extensionpoint/ExtensionPointTest.res +62 -0
  271. package/tests/components/extensionpoint/ExtensionPointTest.res.mjs +55 -0
  272. package/tests/components/heartbeat/HeartbeatFixtures.res +48 -0
  273. package/tests/components/heartbeat/HeartbeatFixtures.res.mjs +46 -0
  274. package/tests/components/heartbeat/HeartbeatTest.res +67 -0
  275. package/tests/components/heartbeat/HeartbeatTest.res.mjs +65 -0
  276. package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res +241 -0
  277. package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res.mjs +239 -0
  278. package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res +36 -0
  279. package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res.mjs +73 -0
  280. package/tests/components/outboundtranslationslice/OutboundTranslationSliceCallbackTest.res +191 -0
  281. package/tests/components/outboundtranslationslice/OutboundTranslationSliceCallbackTest.res.mjs +297 -0
  282. package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res +78 -0
  283. package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res.mjs +137 -0
  284. package/tests/components/querydb/QueryDbFixtures.res +39 -0
  285. package/tests/components/querydb/QueryDbFixtures.res.mjs +73 -0
  286. package/tests/components/querydb/QueryDbSubIdFixtures.res +44 -0
  287. package/tests/components/querydb/QueryDbSubIdFixtures.res.mjs +80 -0
  288. package/tests/components/querydb/QueryDbSubIdTest.res +104 -0
  289. package/tests/components/querydb/QueryDbSubIdTest.res.mjs +104 -0
  290. package/tests/components/querydb/QueryDbTest.res +81 -0
  291. package/tests/components/querydb/QueryDbTest.res.mjs +126 -0
  292. package/tests/components/readmodel/DcbReadModelE2EFixtures.res +215 -0
  293. package/tests/components/readmodel/DcbReadModelE2EFixtures.res.mjs +308 -0
  294. package/tests/components/readmodel/DcbReadModelE2ETest.res +45 -0
  295. package/tests/components/readmodel/DcbReadModelE2ETest.res.mjs +37 -0
  296. package/tests/components/readmodel/DcbReadModelTypoFailFastTest.res +88 -0
  297. package/tests/components/readmodel/DcbReadModelTypoFailFastTest.res.mjs +152 -0
  298. package/tests/components/readmodel/MixedSourceReadModelFixtures.res +181 -0
  299. package/tests/components/readmodel/MixedSourceReadModelFixtures.res.mjs +277 -0
  300. package/tests/components/readmodel/MixedSourceReadModelTest.res +61 -0
  301. package/tests/components/readmodel/MixedSourceReadModelTest.res.mjs +68 -0
  302. package/tests/components/readmodel/ReadModelFixtures.res +138 -0
  303. package/tests/components/readmodel/ReadModelFixtures.res.mjs +169 -0
  304. package/tests/components/readmodel/ReadModelTest.res +46 -0
  305. package/tests/components/readmodel/ReadModelTest.res.mjs +36 -0
  306. package/tests/components/scheduler/SchedulerFixtures.res +59 -0
  307. package/tests/components/scheduler/SchedulerFixtures.res.mjs +63 -0
  308. package/tests/components/scheduler/SchedulerTest.res +76 -0
  309. package/tests/components/scheduler/SchedulerTest.res.mjs +86 -0
  310. package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res +133 -0
  311. package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +149 -0
  312. package/tests/components/sideeffecthandler/SideEffectHandlerTest.res +39 -0
  313. package/tests/components/sideeffecthandler/SideEffectHandlerTest.res.mjs +28 -0
  314. package/tests/components/stateviewslice/StateViewSliceFixtures.res +117 -0
  315. package/tests/components/stateviewslice/StateViewSliceFixtures.res.mjs +188 -0
  316. package/tests/components/stateviewslice/StateViewSliceSubIdFixtures.res +117 -0
  317. package/tests/components/stateviewslice/StateViewSliceSubIdFixtures.res.mjs +183 -0
  318. package/tests/components/stateviewslice/StateViewSliceSubIdTest.res +78 -0
  319. package/tests/components/stateviewslice/StateViewSliceSubIdTest.res.mjs +107 -0
  320. package/tests/components/stateviewslice/StateViewSliceTest.res +59 -0
  321. package/tests/components/stateviewslice/StateViewSliceTest.res.mjs +72 -0
  322. package/tests/components/task/TaskFixtures.res +87 -0
  323. package/tests/components/task/TaskFixtures.res.mjs +82 -0
  324. package/tests/components/task/TaskTest.res +98 -0
  325. package/tests/components/task/TaskTest.res.mjs +46 -0
  326. package/tests/plugin/PluginBehavior_GWT.res +146 -0
  327. package/tests/plugin/PluginBehavior_GWT.res.mjs +281 -0
  328. package/tests/plugin/Plugin_Fixtures.res +61 -0
  329. package/tests/plugin/Plugin_Fixtures.res.mjs +105 -0
  330. package/tests/plugin/PluginsProjection_GWT.res +95 -0
  331. package/tests/plugin/PluginsProjection_GWT.res.mjs +120 -0
  332. package/tests/plugin/UIFragmentRegistryProjection_GWT.res +72 -0
  333. package/tests/plugin/UIFragmentRegistryProjection_GWT.res.mjs +117 -0
  334. package/tests/setup/sqliteGlobal.cjs +12 -0
@@ -0,0 +1,165 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
4
+ import * as LocalBus$ReventlessLocal from "../../src/adapter/LocalBus.res.mjs";
5
+ import * as TestRunner$ReventlessLocal from "../../src/test/TestRunner.res.mjs";
6
+ import * as BackendState$ReventlessLocal from "../../src/adapter/BackendState.res.mjs";
7
+ import * as SqliteDriver$ReventlessLocal from "../../src/adapter/SqliteDriver.res.mjs";
8
+ import * as DcbEventLogStorage_InMemory$ReventlessLocal from "../../src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res.mjs";
9
+
10
+ TestRunner$ReventlessLocal.setup();
11
+
12
+ let opts = {};
13
+
14
+ async function runUnderSqlite(fn) {
15
+ let db = SqliteDriver$ReventlessLocal.openDb(":memory:");
16
+ BackendState$ReventlessLocal.setSqlite(db, ":memory:");
17
+ await fn();
18
+ BackendState$ReventlessLocal.setMemory();
19
+ return SqliteDriver$ReventlessLocal.close(db);
20
+ }
21
+
22
+ function stored(eventType, tags, data) {
23
+ return {
24
+ eventType: eventType,
25
+ data: data,
26
+ tags: tags,
27
+ meta: Message$ReventlessCore.generateMeta("test", undefined, undefined, undefined, undefined, undefined, undefined, undefined)
28
+ };
29
+ }
30
+
31
+ globalThis.describe("DcbEventLogStorage_Sqlite", () => {
32
+ globalThis.test("append + read round-trips events with tags", async () => await runUnderSqlite(async () => {
33
+ let TestBus = LocalBus$ReventlessLocal.Make({});
34
+ let Storage = DcbEventLogStorage_InMemory$ReventlessLocal.Make(TestBus);
35
+ let s = Storage.make("dcb-rt", [], {
36
+ TAG: "Simple",
37
+ _0: {
38
+ key: "k"
39
+ }
40
+ }, undefined, opts);
41
+ let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
42
+ let e1 = stored("ItemAdded", [{
43
+ key: "itemId",
44
+ value: "x1"
45
+ }], Object.fromEntries([[
46
+ "name",
47
+ "widget"
48
+ ]]));
49
+ let result = await ops.append([e1], undefined);
50
+ if (result.TAG === "Ok") {
51
+ globalThis.expect(true).toBe(true);
52
+ } else {
53
+ globalThis.expect(result._0).toBe("Ok");
54
+ }
55
+ let read = await ops.read([], undefined);
56
+ globalThis.expect(read.events.length).toBe(1);
57
+ let first = read.events[0];
58
+ globalThis.expect(first.eventType).toBe("ItemAdded");
59
+ globalThis.expect(first.tags.length).toBe(1);
60
+ globalThis.expect(first.tags[0].key).toBe("itemId");
61
+ globalThis.expect(first.tags[0].value).toBe("x1");
62
+ }));
63
+ globalThis.test("read filters by tag", async () => await runUnderSqlite(async () => {
64
+ let TestBus = LocalBus$ReventlessLocal.Make({});
65
+ let Storage = DcbEventLogStorage_InMemory$ReventlessLocal.Make(TestBus);
66
+ let s = Storage.make("dcb-tagfilter", [], {
67
+ TAG: "Simple",
68
+ _0: {
69
+ key: "k"
70
+ }
71
+ }, undefined, opts);
72
+ let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
73
+ let mk = (id, name) => stored("ItemAdded", [{
74
+ key: "itemId",
75
+ value: id
76
+ }], Object.fromEntries([[
77
+ "name",
78
+ name
79
+ ]]));
80
+ await ops.append([mk("a1", "alpha")], undefined);
81
+ await ops.append([mk("b1", "beta")], undefined);
82
+ await ops.append([mk("a1", "again")], undefined);
83
+ let read = await ops.read([{
84
+ tags: [{
85
+ key: "itemId",
86
+ value: "a1"
87
+ }]
88
+ }], undefined);
89
+ globalThis.expect(read.events.length).toBe(2);
90
+ }));
91
+ globalThis.test("append with conflicting condition returns Error", async () => await runUnderSqlite(async () => {
92
+ let TestBus = LocalBus$ReventlessLocal.Make({});
93
+ let Storage = DcbEventLogStorage_InMemory$ReventlessLocal.Make(TestBus);
94
+ let s = Storage.make("dcb-conflict", [], {
95
+ TAG: "Simple",
96
+ _0: {
97
+ key: "k"
98
+ }
99
+ }, undefined, opts);
100
+ let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
101
+ let e = stored("Created", [{
102
+ key: "id",
103
+ value: "x"
104
+ }], "first");
105
+ await ops.append([e], undefined);
106
+ let cond_query = [{
107
+ tags: [{
108
+ key: "id",
109
+ value: "x"
110
+ }]
111
+ }];
112
+ let cond = {
113
+ query: cond_query
114
+ };
115
+ let result = await ops.append([e], cond);
116
+ if (result.TAG === "Ok") {
117
+ globalThis.expect("expected conflict").toBe("got Ok");
118
+ return;
119
+ }
120
+ globalThis.expect(true).toBe(true);
121
+ }));
122
+ globalThis.test("events persist across a file reopen", async () => {
123
+ let path = `/tmp/reventless-test-dcb-` + Date.now().toString() + `.db`;
124
+ let db = SqliteDriver$ReventlessLocal.openDb(path);
125
+ BackendState$ReventlessLocal.setSqlite(db, path);
126
+ let TestBus = LocalBus$ReventlessLocal.Make({});
127
+ let Storage = DcbEventLogStorage_InMemory$ReventlessLocal.Make(TestBus);
128
+ let s = Storage.make("persist", [], {
129
+ TAG: "Simple",
130
+ _0: {
131
+ key: "k"
132
+ }
133
+ }, undefined, opts);
134
+ let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
135
+ let e = stored("Created", [{
136
+ key: "id",
137
+ value: "p"
138
+ }], 1);
139
+ await ops.append([e], undefined);
140
+ SqliteDriver$ReventlessLocal.close(db);
141
+ BackendState$ReventlessLocal.setMemory();
142
+ let db2 = SqliteDriver$ReventlessLocal.openDb(path);
143
+ BackendState$ReventlessLocal.setSqlite(db2, path);
144
+ let TestBus2 = LocalBus$ReventlessLocal.Make({});
145
+ let Storage2 = DcbEventLogStorage_InMemory$ReventlessLocal.Make(TestBus2);
146
+ let s2 = Storage2.make("persist", [], {
147
+ TAG: "Simple",
148
+ _0: {
149
+ key: "k"
150
+ }
151
+ }, undefined, opts);
152
+ let ops2 = await TestRunner$ReventlessLocal.resolve(s2.operations);
153
+ let read = await ops2.read([], undefined);
154
+ globalThis.expect(read.events.length).toBe(1);
155
+ SqliteDriver$ReventlessLocal.close(db2);
156
+ return BackendState$ReventlessLocal.setMemory();
157
+ });
158
+ });
159
+
160
+ export {
161
+ opts,
162
+ runUnderSqlite,
163
+ stored,
164
+ }
165
+ /* Not a pure module */
@@ -0,0 +1,187 @@
1
+ // Unit tests for DcbEventLogStorage_InMemory.
2
+ // Covers append, read (with filtering), headPosition, and conditional append.
3
+
4
+ open JestGlobals
5
+
6
+ let _ = TestRunner.setup()
7
+
8
+ let opts: Pulumi.CustomResourceOptions.t = {}
9
+
10
+ let makeStorage = () =>
11
+ DcbEventLogStorage_InMemory.make(
12
+ ~name="test-dcb",
13
+ ~indexes=[],
14
+ ~partitionTag=Reventless.DcbTag.Simple({key: "itemId"}),
15
+ ~opts,
16
+ )
17
+
18
+ let makeEvent = (~eventType, ~data, ~tags=[]): ReventlessCore.DcbEventLog_Adapter.rawStoredEvent => {
19
+ eventType,
20
+ data,
21
+ tags,
22
+ meta: ReventlessCore.Message.generateMeta(~service="test"),
23
+ }
24
+
25
+ describe("DcbEventLogStorage_InMemory", () => {
26
+ describe("append", () => {
27
+ testPromise("stores events and returns incrementing position", async () => {
28
+ let storage = makeStorage()
29
+ let ops = await storage.operations->TestRunner.resolve
30
+ let result1 = await ops.append([makeEvent(~eventType="ItemCreated", ~data=JSON.Null)])
31
+ let result2 = await ops.append([makeEvent(~eventType="ItemUpdated", ~data=JSON.Null)])
32
+ expect(result1)->toEqual(Ok("1"))
33
+ expect(result2)->toEqual(Ok("2"))
34
+ })
35
+
36
+ testPromise("appending multiple events at once returns position of last event", async () => {
37
+ let storage = makeStorage()
38
+ let ops = await storage.operations->TestRunner.resolve
39
+ let result = await ops.append([
40
+ makeEvent(~eventType="A", ~data=JSON.Null),
41
+ makeEvent(~eventType="B", ~data=JSON.Null),
42
+ ])
43
+ expect(result)->toEqual(Ok("2"))
44
+ })
45
+ })
46
+
47
+ describe("read", () => {
48
+ testPromise("empty query returns all events", async () => {
49
+ let storage = makeStorage()
50
+ let ops = await storage.operations->TestRunner.resolve
51
+ let _ = await ops.append([
52
+ makeEvent(~eventType="Evt1", ~data=JSON.Null),
53
+ makeEvent(~eventType="Evt2", ~data=JSON.Null),
54
+ ])
55
+ let result = await ops.read(~query=[])
56
+ expect(result.events->Array.length)->toBe(2)
57
+ })
58
+
59
+ testPromise("filters by eventType", async () => {
60
+ let storage = makeStorage()
61
+ let ops = await storage.operations->TestRunner.resolve
62
+ let _ = await ops.append([
63
+ makeEvent(~eventType="Created", ~data=JSON.Null),
64
+ makeEvent(~eventType="Updated", ~data=JSON.Null),
65
+ makeEvent(~eventType="Created", ~data=JSON.Null),
66
+ ])
67
+ // Optional record fields use direct value syntax (not Some(...))
68
+ let result = await ops.read(
69
+ ~query=[{Reventless.DcbTag.eventTypes: ["Created"]}],
70
+ )
71
+ expect(result.events->Array.length)->toBe(2)
72
+ let firstEvent = result.events->Array.getUnsafe(0)
73
+ expect(firstEvent.eventType)->toBe("Created")
74
+ })
75
+
76
+ testPromise("filters by tags", async () => {
77
+ let storage = makeStorage()
78
+ let ops = await storage.operations->TestRunner.resolve
79
+ let _ = await ops.append([
80
+ makeEvent(
81
+ ~eventType="Evt",
82
+ ~data=JSON.Null,
83
+ ~tags=[{Reventless.DcbTag.key: "tenant", value: "acme"}],
84
+ ),
85
+ makeEvent(~eventType="Evt", ~data=JSON.Null, ~tags=[]),
86
+ ])
87
+ let result = await ops.read(
88
+ ~query=[
89
+ {
90
+ Reventless.DcbTag.tags: [{Reventless.DcbTag.key: "tenant", value: "acme"}],
91
+ },
92
+ ],
93
+ )
94
+ expect(result.events->Array.length)->toBe(1)
95
+ let firstEvent = result.events->Array.getUnsafe(0)
96
+ expect(firstEvent.tags->Array.length)->toBe(1)
97
+ })
98
+
99
+ testPromise("after parameter skips events at or before that position", async () => {
100
+ let storage = makeStorage()
101
+ let ops = await storage.operations->TestRunner.resolve
102
+ let _ = await ops.append([
103
+ makeEvent(~eventType="E1", ~data=JSON.Null),
104
+ makeEvent(~eventType="E2", ~data=JSON.Null),
105
+ makeEvent(~eventType="E3", ~data=JSON.Null),
106
+ ])
107
+ let result = await ops.read(~query=[], ~after="1")
108
+ // Events at position > "1" — positions 2 and 3
109
+ expect(result.events->Array.length)->toBe(2)
110
+ let firstEvent = result.events->Array.getUnsafe(0)
111
+ expect(firstEvent.eventType)->toBe("E2")
112
+ })
113
+ })
114
+
115
+ describe("headPosition", () => {
116
+ testPromise("equals the position of the last appended event", async () => {
117
+ let storage = makeStorage()
118
+ let ops = await storage.operations->TestRunner.resolve
119
+ let _ = await ops.append([
120
+ makeEvent(~eventType="E1", ~data=JSON.Null),
121
+ makeEvent(~eventType="E2", ~data=JSON.Null),
122
+ ])
123
+ let result = await ops.read(~query=[])
124
+ expect(result.headPosition)->toEqual(Some("2"))
125
+ })
126
+
127
+ testPromise("headPosition is absent when no events have been stored", async () => {
128
+ let storage = makeStorage()
129
+ let ops = await storage.operations->TestRunner.resolve
130
+ let result = await ops.read(~query=[])
131
+ expect(result.headPosition)->toEqual(None)
132
+ })
133
+ })
134
+
135
+ describe("conditional append", () => {
136
+ testPromise("append with matching condition query returns Error (conflict)", async () => {
137
+ let storage = makeStorage()
138
+ let ops = await storage.operations->TestRunner.resolve
139
+ let _ = await ops.append([makeEvent(~eventType="ItemCreated", ~data=JSON.Null)])
140
+ let condition: Reventless.DcbTag.appendCondition = {
141
+ query: [{Reventless.DcbTag.eventTypes: ["ItemCreated"]}],
142
+ }
143
+ let result = await ops.append(
144
+ [makeEvent(~eventType="ItemUpdated", ~data=JSON.Null)],
145
+ ~condition,
146
+ )
147
+ expect(
148
+ switch result {
149
+ | Error(_) => true
150
+ | Ok(_) => false
151
+ },
152
+ )->toBe(true)
153
+ })
154
+
155
+ testPromise("append with condition that matches no events succeeds", async () => {
156
+ let storage = makeStorage()
157
+ let ops = await storage.operations->TestRunner.resolve
158
+ let _ = await ops.append([makeEvent(~eventType="OtherEvent", ~data=JSON.Null)])
159
+ let condition: Reventless.DcbTag.appendCondition = {
160
+ query: [{Reventless.DcbTag.eventTypes: ["ItemCreated"]}],
161
+ }
162
+ let result = await ops.append(
163
+ [makeEvent(~eventType="ItemCreated", ~data=JSON.Null)],
164
+ ~condition,
165
+ )
166
+ expect(result)->toEqual(Ok("2"))
167
+ })
168
+
169
+ testPromise("condition with after only checks events after that position", async () => {
170
+ let storage = makeStorage()
171
+ let ops = await storage.operations->TestRunner.resolve
172
+ // Position 1: ItemCreated
173
+ let _ = await ops.append([makeEvent(~eventType="ItemCreated", ~data=JSON.Null)])
174
+ // Condition checks for ItemCreated only AFTER position "1" — no such events
175
+ let condition: Reventless.DcbTag.appendCondition = {
176
+ query: [{Reventless.DcbTag.eventTypes: ["ItemCreated"]}],
177
+ after: "1",
178
+ }
179
+ let result = await ops.append(
180
+ [makeEvent(~eventType="ItemUpdated", ~data=JSON.Null)],
181
+ ~condition,
182
+ )
183
+ // No conflict because ItemCreated is at position 1, not > 1
184
+ expect(result)->toEqual(Ok("2"))
185
+ })
186
+ })
187
+ })
@@ -0,0 +1,195 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
4
+ import * as TestRunner$ReventlessLocal from "../../src/test/TestRunner.res.mjs";
5
+ import * as DcbEventLogStorage_InMemory$ReventlessLocal from "../../src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res.mjs";
6
+
7
+ TestRunner$ReventlessLocal.setup();
8
+
9
+ let opts = {};
10
+
11
+ function makeStorage() {
12
+ return DcbEventLogStorage_InMemory$ReventlessLocal.make("test-dcb", [], {
13
+ TAG: "Simple",
14
+ _0: {
15
+ key: "itemId"
16
+ }
17
+ }, undefined, opts);
18
+ }
19
+
20
+ function makeEvent(eventType, data, tagsOpt) {
21
+ let tags = tagsOpt !== undefined ? tagsOpt : [];
22
+ return {
23
+ eventType: eventType,
24
+ data: data,
25
+ tags: tags,
26
+ meta: Message$ReventlessCore.generateMeta("test", undefined, undefined, undefined, undefined, undefined, undefined, undefined)
27
+ };
28
+ }
29
+
30
+ globalThis.describe("DcbEventLogStorage_InMemory", () => {
31
+ globalThis.describe("append", () => {
32
+ globalThis.test("stores events and returns incrementing position", async () => {
33
+ let storage = makeStorage();
34
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
35
+ let result1 = await ops.append([makeEvent("ItemCreated", null, undefined)], undefined);
36
+ let result2 = await ops.append([makeEvent("ItemUpdated", null, undefined)], undefined);
37
+ globalThis.expect(result1).toEqual({
38
+ TAG: "Ok",
39
+ _0: "1"
40
+ });
41
+ globalThis.expect(result2).toEqual({
42
+ TAG: "Ok",
43
+ _0: "2"
44
+ });
45
+ });
46
+ globalThis.test("appending multiple events at once returns position of last event", async () => {
47
+ let storage = makeStorage();
48
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
49
+ let result = await ops.append([
50
+ makeEvent("A", null, undefined),
51
+ makeEvent("B", null, undefined)
52
+ ], undefined);
53
+ globalThis.expect(result).toEqual({
54
+ TAG: "Ok",
55
+ _0: "2"
56
+ });
57
+ });
58
+ });
59
+ globalThis.describe("read", () => {
60
+ globalThis.test("empty query returns all events", async () => {
61
+ let storage = makeStorage();
62
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
63
+ await ops.append([
64
+ makeEvent("Evt1", null, undefined),
65
+ makeEvent("Evt2", null, undefined)
66
+ ], undefined);
67
+ let result = await ops.read([], undefined);
68
+ globalThis.expect(result.events.length).toBe(2);
69
+ });
70
+ globalThis.test("filters by eventType", async () => {
71
+ let storage = makeStorage();
72
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
73
+ await ops.append([
74
+ makeEvent("Created", null, undefined),
75
+ makeEvent("Updated", null, undefined),
76
+ makeEvent("Created", null, undefined)
77
+ ], undefined);
78
+ let result = await ops.read([{
79
+ eventTypes: ["Created"]
80
+ }], undefined);
81
+ globalThis.expect(result.events.length).toBe(2);
82
+ let firstEvent = result.events[0];
83
+ globalThis.expect(firstEvent.eventType).toBe("Created");
84
+ });
85
+ globalThis.test("filters by tags", async () => {
86
+ let storage = makeStorage();
87
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
88
+ await ops.append([
89
+ makeEvent("Evt", null, [{
90
+ key: "tenant",
91
+ value: "acme"
92
+ }]),
93
+ makeEvent("Evt", null, [])
94
+ ], undefined);
95
+ let result = await ops.read([{
96
+ tags: [{
97
+ key: "tenant",
98
+ value: "acme"
99
+ }]
100
+ }], undefined);
101
+ globalThis.expect(result.events.length).toBe(1);
102
+ let firstEvent = result.events[0];
103
+ globalThis.expect(firstEvent.tags.length).toBe(1);
104
+ });
105
+ globalThis.test("after parameter skips events at or before that position", async () => {
106
+ let storage = makeStorage();
107
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
108
+ await ops.append([
109
+ makeEvent("E1", null, undefined),
110
+ makeEvent("E2", null, undefined),
111
+ makeEvent("E3", null, undefined)
112
+ ], undefined);
113
+ let result = await ops.read([], "1");
114
+ globalThis.expect(result.events.length).toBe(2);
115
+ let firstEvent = result.events[0];
116
+ globalThis.expect(firstEvent.eventType).toBe("E2");
117
+ });
118
+ });
119
+ globalThis.describe("headPosition", () => {
120
+ globalThis.test("equals the position of the last appended event", async () => {
121
+ let storage = makeStorage();
122
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
123
+ await ops.append([
124
+ makeEvent("E1", null, undefined),
125
+ makeEvent("E2", null, undefined)
126
+ ], undefined);
127
+ let result = await ops.read([], undefined);
128
+ globalThis.expect(result.headPosition).toEqual("2");
129
+ });
130
+ globalThis.test("headPosition is absent when no events have been stored", async () => {
131
+ let storage = makeStorage();
132
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
133
+ let result = await ops.read([], undefined);
134
+ globalThis.expect(result.headPosition).toEqual(undefined);
135
+ });
136
+ });
137
+ globalThis.describe("conditional append", () => {
138
+ globalThis.test("append with matching condition query returns Error (conflict)", async () => {
139
+ let storage = makeStorage();
140
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
141
+ await ops.append([makeEvent("ItemCreated", null, undefined)], undefined);
142
+ let condition_query = [{
143
+ eventTypes: ["ItemCreated"]
144
+ }];
145
+ let condition = {
146
+ query: condition_query
147
+ };
148
+ let result = await ops.append([makeEvent("ItemUpdated", null, undefined)], condition);
149
+ let tmp;
150
+ tmp = result.TAG !== "Ok";
151
+ globalThis.expect(tmp).toBe(true);
152
+ });
153
+ globalThis.test("append with condition that matches no events succeeds", async () => {
154
+ let storage = makeStorage();
155
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
156
+ await ops.append([makeEvent("OtherEvent", null, undefined)], undefined);
157
+ let condition_query = [{
158
+ eventTypes: ["ItemCreated"]
159
+ }];
160
+ let condition = {
161
+ query: condition_query
162
+ };
163
+ let result = await ops.append([makeEvent("ItemCreated", null, undefined)], condition);
164
+ globalThis.expect(result).toEqual({
165
+ TAG: "Ok",
166
+ _0: "2"
167
+ });
168
+ });
169
+ globalThis.test("condition with after only checks events after that position", async () => {
170
+ let storage = makeStorage();
171
+ let ops = await TestRunner$ReventlessLocal.resolve(storage.operations);
172
+ await ops.append([makeEvent("ItemCreated", null, undefined)], undefined);
173
+ let condition_query = [{
174
+ eventTypes: ["ItemCreated"]
175
+ }];
176
+ let condition_after = "1";
177
+ let condition = {
178
+ query: condition_query,
179
+ after: condition_after
180
+ };
181
+ let result = await ops.append([makeEvent("ItemUpdated", null, undefined)], condition);
182
+ globalThis.expect(result).toEqual({
183
+ TAG: "Ok",
184
+ _0: "2"
185
+ });
186
+ });
187
+ });
188
+ });
189
+
190
+ export {
191
+ opts,
192
+ makeStorage,
193
+ makeEvent,
194
+ }
195
+ /* Not a pure module */