@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,73 @@
1
+ // Fixtures for CommandGenerator integration tests.
2
+ // Verifies that makeHandler builds a resolver that publishes the correct commandJson.
3
+
4
+ S.enableJson()
5
+
6
+ // Activate Pulumi mock mode (must be called before any Component.make)
7
+ let _ = TestRunner.setup()
8
+
9
+ // ─────────────────────────────────────────────────────────────
10
+ // Aggregate spec (matches the Behavior used in CommandGenerator_Builder.Make)
11
+ // ─────────────────────────────────────────────────────────────
12
+
13
+ module CGSpec = {
14
+ module Id = Reventless.Id.StringPure
15
+ let name = "TestCGAggregate"
16
+
17
+ @schema
18
+ type command = | CreateCGItem({name: string})
19
+
20
+ @schema
21
+ type event = | CGItemCreated({name: string})
22
+
23
+ @schema
24
+ type error = | CGAlreadyExists
25
+
26
+ let moduleUrl: string = %raw(`import.meta.url`)
27
+ }
28
+
29
+ // ─────────────────────────────────────────────────────────────
30
+ // Behavior
31
+ // ─────────────────────────────────────────────────────────────
32
+
33
+ module CGBehavior = {
34
+ module Spec = CGSpec
35
+ type state = {name: string}
36
+
37
+ let moduleUrl: string = %raw(`import.meta.url`)
38
+
39
+ let initialState = {name: ""}
40
+
41
+ let evolve = (_state: state, event: CGSpec.event): state =>
42
+ switch event {
43
+ | CGItemCreated({name}) => {name: name}
44
+ }
45
+
46
+ let decide = (_state: state, command: CGSpec.command): result<array<CGSpec.event>, CGSpec.error> =>
47
+ switch command {
48
+ | CreateCGItem({name}) => Ok([CGSpec.CGItemCreated({name: name})])
49
+ }
50
+ }
51
+
52
+ // ─────────────────────────────────────────────────────────────
53
+ // CommandGenerator builder (in-memory resolvers = no AppSync)
54
+ // ─────────────────────────────────────────────────────────────
55
+
56
+ module CGMaker = ReventlessCore.CommandGenerator_Builder.Make(
57
+ CGSpec,
58
+ LocalCommandGeneratorResolvers,
59
+ )
60
+
61
+ // ─────────────────────────────────────────────────────────────
62
+ // Captured commands
63
+ // ─────────────────────────────────────────────────────────────
64
+
65
+ let capturedCmds: ref<array<Reventless.Message.commandJson>> = ref([])
66
+
67
+ let mockPublish: ReventlessInfra.CommandTopic.publishJsons = async cmds => {
68
+ capturedCmds := capturedCmds.contents->Array.concat(cmds)
69
+ }
70
+
71
+ let resetMocks = () => {
72
+ capturedCmds := []
73
+ }
@@ -0,0 +1,109 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
+ import * as TestRunner$ReventlessLocal from "../../../src/test/TestRunner.res.mjs";
6
+ import * as CommandGenerator_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandGenerator/CommandGenerator_Builder.res.mjs";
7
+ import * as LocalCommandGeneratorResolvers$ReventlessLocal from "../../../src/adapter/CommandGenerator/LocalCommandGeneratorResolvers.res.mjs";
8
+
9
+ S.enableJson();
10
+
11
+ TestRunner$ReventlessLocal.setup();
12
+
13
+ let name = "TestCGAggregate";
14
+
15
+ let commandSchema = S.schema(s => ({
16
+ TAG: "CreateCGItem",
17
+ name: s.m(S.string)
18
+ }));
19
+
20
+ let eventSchema = S.schema(s => ({
21
+ TAG: "CGItemCreated",
22
+ name: s.m(S.string)
23
+ }));
24
+
25
+ let errorSchema = S.literal("CGAlreadyExists");
26
+
27
+ let moduleUrl = import.meta.url;
28
+
29
+ function commandAuthorization(param) {
30
+ return "AllowAuthenticated";
31
+ }
32
+
33
+ let CGSpec = {
34
+ Id: undefined,
35
+ name: name,
36
+ commandSchema: commandSchema,
37
+ eventSchema: eventSchema,
38
+ errorSchema: errorSchema,
39
+ moduleUrl: moduleUrl,
40
+ commandAuthorization: commandAuthorization
41
+ };
42
+
43
+ let moduleUrl$1 = import.meta.url;
44
+
45
+ function evolve(_state, event) {
46
+ return {
47
+ name: event.name
48
+ };
49
+ }
50
+
51
+ function decide(_state, command) {
52
+ return {
53
+ TAG: "Ok",
54
+ _0: [{
55
+ TAG: "CGItemCreated",
56
+ name: command.name
57
+ }]
58
+ };
59
+ }
60
+
61
+ let CGBehavior_initialState = {
62
+ name: ""
63
+ };
64
+
65
+ let CGBehavior = {
66
+ Spec: undefined,
67
+ moduleUrl: moduleUrl$1,
68
+ initialState: CGBehavior_initialState,
69
+ evolve: evolve,
70
+ decide: decide
71
+ };
72
+
73
+ let CGMaker = CommandGenerator_Builder$ReventlessCore.Make({
74
+ Id: {
75
+ schema: Id$Reventless.StringPure.schema,
76
+ make: prim => prim,
77
+ makeFromString: prim => prim,
78
+ toString: prim => prim,
79
+ cmp: Id$Reventless.StringPure.cmp
80
+ },
81
+ name: name,
82
+ eventSchema: eventSchema,
83
+ errorSchema: errorSchema,
84
+ commandSchema: commandSchema,
85
+ moduleUrl: moduleUrl,
86
+ commandAuthorization: commandAuthorization
87
+ })(LocalCommandGeneratorResolvers$ReventlessLocal);
88
+
89
+ let capturedCmds = {
90
+ contents: []
91
+ };
92
+
93
+ async function mockPublish(cmds) {
94
+ capturedCmds.contents = capturedCmds.contents.concat(cmds);
95
+ }
96
+
97
+ function resetMocks() {
98
+ capturedCmds.contents = [];
99
+ }
100
+
101
+ export {
102
+ CGSpec,
103
+ CGBehavior,
104
+ CGMaker,
105
+ capturedCmds,
106
+ mockPublish,
107
+ resetMocks,
108
+ }
109
+ /* Not a pure module */
@@ -0,0 +1,43 @@
1
+ // Integration tests for CommandGenerator_Builder (in-memory).
2
+ // Verifies that makeHandler returns a resolver that generates and publishes commands.
3
+
4
+ open JestGlobals
5
+ open CommandGeneratorFixtures
6
+
7
+ describe("CommandGenerator_Builder.Make:", () => {
8
+ let _ = beforeEach(() => resetMocks())
9
+
10
+ describe("makeHandler:", () => {
11
+ testPromise("CreateCGItem payload publishes correct commandJson", async () => {
12
+ // Resolve the handler from the Output wrapper
13
+ let handler = await CGMaker.makeHandler(~publishJsons=mockPublish, ~publishJsonsAndWait=None)->TestRunner.resolve
14
+
15
+ // Build payload: arguments must include id AND the command fields (name).
16
+ // generateCommand stringifies arguments, slices off id (index 0), uses the rest as params.
17
+ let payload: ReventlessCore.CommandGenerator.payload = {
18
+ command: "CreateCGItem",
19
+ arguments: {"id": "item-1", "name": "widget"}->Obj.magic,
20
+ meta: {ip: ["127.0.0.1"], user: "testuser", info: ""},
21
+ identity: Reventless.Identity.anonymous,
22
+ }
23
+
24
+ // Call handler — generateCommand is async (awaits publishJsons internally)
25
+ let _ = await handler(payload, ())->Effect.runPromise
26
+
27
+ expect(capturedCmds.contents->Array.length)->toBe(1)
28
+
29
+ let cmd = capturedCmds.contents->Array.getUnsafe(0)
30
+ expect(cmd.id)->toBe("item-1")
31
+
32
+ // commandJson should decode to CreateCGItem({name: "widget"})
33
+ let decoded = cmd.commandJson->S.parseJsonOrThrow(CGSpec.commandSchema)
34
+ expect(decoded)->toEqual(CGSpec.CreateCGItem({name: "widget"}))
35
+ })
36
+
37
+ testPromise("make creates a CommandGenerator component without throwing", async () => {
38
+ let cg = CGMaker.make(~name="test-cg")
39
+ let _ = cg
40
+ expect(true)->toBe(true)
41
+ })
42
+ })
43
+ })
@@ -0,0 +1,46 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Identity$Reventless from "@reventlessdev/reventless-spec/src/types/Identity.res.mjs";
6
+ import * as TestRunner$ReventlessLocal from "../../../src/test/TestRunner.res.mjs";
7
+ import * as CommandGeneratorFixtures$ReventlessLocal from "./CommandGeneratorFixtures.res.mjs";
8
+
9
+ globalThis.describe("CommandGenerator_Builder.Make:", () => {
10
+ globalThis.beforeEach(() => CommandGeneratorFixtures$ReventlessLocal.resetMocks());
11
+ globalThis.describe("makeHandler:", () => {
12
+ globalThis.test("CreateCGItem payload publishes correct commandJson", async () => {
13
+ let handler = await TestRunner$ReventlessLocal.resolve(CommandGeneratorFixtures$ReventlessLocal.CGMaker.makeHandler(CommandGeneratorFixtures$ReventlessLocal.mockPublish, undefined));
14
+ let payload_arguments = {
15
+ id: "item-1",
16
+ name: "widget"
17
+ };
18
+ let payload_meta = {
19
+ ip: ["127.0.0.1"],
20
+ user: "testuser",
21
+ info: ""
22
+ };
23
+ let payload = {
24
+ command: "CreateCGItem",
25
+ arguments: payload_arguments,
26
+ meta: payload_meta,
27
+ identity: Identity$Reventless.anonymous
28
+ };
29
+ await Effect.runPromise(handler(payload, undefined));
30
+ globalThis.expect(CommandGeneratorFixtures$ReventlessLocal.capturedCmds.contents.length).toBe(1);
31
+ let cmd = CommandGeneratorFixtures$ReventlessLocal.capturedCmds.contents[0];
32
+ globalThis.expect(cmd.id).toBe("item-1");
33
+ let decoded = S.parseJsonOrThrow(cmd.commandJson, CommandGeneratorFixtures$ReventlessLocal.CGSpec.commandSchema);
34
+ globalThis.expect(decoded).toEqual({
35
+ TAG: "CreateCGItem",
36
+ name: "widget"
37
+ });
38
+ });
39
+ globalThis.test("make creates a CommandGenerator component without throwing", async () => {
40
+ CommandGeneratorFixtures$ReventlessLocal.CGMaker.make("test-cg", undefined);
41
+ globalThis.expect(true).toBe(true);
42
+ });
43
+ });
44
+ });
45
+
46
+ /* Not a pure module */
@@ -0,0 +1,37 @@
1
+ // Integration test fixtures for CommandTopic builder (in-memory).
2
+
3
+ module ItemSpec = {
4
+ module Id = Reventless.Id.String
5
+ let name = "TestCommandTopicItem"
6
+
7
+ @schema
8
+ type command = | CreateItem({name: string}) | DeleteItem({id: string})
9
+
10
+ @schema
11
+ type event = | ItemCreated({name: string})
12
+
13
+ @schema
14
+ type error = | AlreadyExists
15
+
16
+ let moduleUrl: string = %raw(`import.meta.url`)
17
+ }
18
+
19
+ // ─────────────────────────────────────────────────────────────
20
+ // Bus and Pulumi setup
21
+ // ─────────────────────────────────────────────────────────────
22
+
23
+ module Bus = LocalBus.Make()
24
+
25
+ let _ = TestRunner.setup()
26
+
27
+ // ─────────────────────────────────────────────────────────────
28
+ // Build CommandTopic using in-memory channel
29
+ // ─────────────────────────────────────────────────────────────
30
+
31
+ module CommandTopicMaker = ReventlessCore.CommandTopic_Builder.Make(
32
+ ItemSpec,
33
+ LocalCommandTopicChannel.Make(Bus),
34
+ )
35
+
36
+ let cmdTopic = CommandTopicMaker.make(~name="TestCommandTopic")
37
+
@@ -0,0 +1,68 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
+ import * as LocalBus$ReventlessLocal from "../../../src/adapter/LocalBus.res.mjs";
6
+ import * as TestRunner$ReventlessLocal from "../../../src/test/TestRunner.res.mjs";
7
+ import * as CommandTopic_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic_Builder.res.mjs";
8
+ import * as LocalCommandTopicChannel$ReventlessLocal from "../../../src/adapter/CommandTopic/LocalCommandTopicChannel.res.mjs";
9
+
10
+ let name = "TestCommandTopicItem";
11
+
12
+ let commandSchema = S.union([
13
+ S.schema(s => ({
14
+ TAG: "CreateItem",
15
+ name: s.m(S.string)
16
+ })),
17
+ S.schema(s => ({
18
+ TAG: "DeleteItem",
19
+ id: s.m(S.string)
20
+ }))
21
+ ]);
22
+
23
+ let eventSchema = S.schema(s => ({
24
+ TAG: "ItemCreated",
25
+ name: s.m(S.string)
26
+ }));
27
+
28
+ let errorSchema = S.literal("AlreadyExists");
29
+
30
+ let moduleUrl = import.meta.url;
31
+
32
+ function commandAuthorization(param) {
33
+ return "AllowAuthenticated";
34
+ }
35
+
36
+ let ItemSpec = {
37
+ Id: undefined,
38
+ name: name,
39
+ commandSchema: commandSchema,
40
+ eventSchema: eventSchema,
41
+ errorSchema: errorSchema,
42
+ moduleUrl: moduleUrl,
43
+ commandAuthorization: commandAuthorization
44
+ };
45
+
46
+ let Bus = LocalBus$ReventlessLocal.Make({});
47
+
48
+ TestRunner$ReventlessLocal.setup();
49
+
50
+ let $$let = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
51
+
52
+ let CommandTopicMaker = CommandTopic_Builder$ReventlessCore.Make({
53
+ Id: Id$Reventless.$$String,
54
+ name: name,
55
+ commandSchema: commandSchema
56
+ })({
57
+ make: $$let.make
58
+ });
59
+
60
+ let cmdTopic = CommandTopicMaker.make("TestCommandTopic", undefined);
61
+
62
+ export {
63
+ ItemSpec,
64
+ Bus,
65
+ CommandTopicMaker,
66
+ cmdTopic,
67
+ }
68
+ /* commandSchema Not a pure module */
@@ -0,0 +1,43 @@
1
+ // Fixtures for CommandTopic.publishJsonsStream tests (Phase I).
2
+
3
+ open TestFixtures
4
+
5
+ module ItemSpec = {
6
+ module Id = Reventless.Id.String
7
+ let name = "StreamCmdItem"
8
+
9
+ @schema
10
+ type command = | CreateItem({name: string}) | DeleteItem({id: string})
11
+
12
+ @schema
13
+ type event = | ItemCreated({name: string})
14
+
15
+ @schema
16
+ type error = | AlreadyExists
17
+
18
+ let moduleUrl: string = %raw(`import.meta.url`)
19
+ }
20
+
21
+ module StreamBus = LocalBus.Make()
22
+
23
+ let _ = TestRunner.setup()
24
+
25
+ module StreamCmdTopicMaker = ReventlessCore.CommandTopic_Builder.Make(
26
+ ItemSpec,
27
+ LocalCommandTopicChannel.Make(StreamBus),
28
+ )
29
+
30
+ let cmdTopic = StreamCmdTopicMaker.make(~name="StreamCmdTopic")
31
+
32
+ // Track dispatched commands per test — reset in beforeEach
33
+ let captured: ref<array<JSON.t>> = ref([])
34
+
35
+ let _ = StreamBus.registerCommandHandler("StreamCmdTopicCmdTopic", async (body, _ctx) => {
36
+ captured := captured.contents->Array.concat([body])
37
+ })
38
+
39
+ let makeJson = (id): Reventless.Message.commandJson => {
40
+ Reventless.Message.id: id,
41
+ meta: testMeta,
42
+ commandJson: ItemSpec.CreateItem({name: id})->ReventlessCore.Message.encode(ItemSpec.commandSchema),
43
+ }
@@ -0,0 +1,91 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
+ import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
6
+ import * as LocalBus$ReventlessLocal from "../../../src/adapter/LocalBus.res.mjs";
7
+ import * as TestRunner$ReventlessLocal from "../../../src/test/TestRunner.res.mjs";
8
+ import * as TestFixtures$ReventlessLocal from "../../TestFixtures.res.mjs";
9
+ import * as CommandTopic_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic_Builder.res.mjs";
10
+ import * as LocalCommandTopicChannel$ReventlessLocal from "../../../src/adapter/CommandTopic/LocalCommandTopicChannel.res.mjs";
11
+
12
+ let name = "StreamCmdItem";
13
+
14
+ let commandSchema = S.union([
15
+ S.schema(s => ({
16
+ TAG: "CreateItem",
17
+ name: s.m(S.string)
18
+ })),
19
+ S.schema(s => ({
20
+ TAG: "DeleteItem",
21
+ id: s.m(S.string)
22
+ }))
23
+ ]);
24
+
25
+ let eventSchema = S.schema(s => ({
26
+ TAG: "ItemCreated",
27
+ name: s.m(S.string)
28
+ }));
29
+
30
+ let errorSchema = S.literal("AlreadyExists");
31
+
32
+ let moduleUrl = import.meta.url;
33
+
34
+ function commandAuthorization(param) {
35
+ return "AllowAuthenticated";
36
+ }
37
+
38
+ let ItemSpec = {
39
+ Id: undefined,
40
+ name: name,
41
+ commandSchema: commandSchema,
42
+ eventSchema: eventSchema,
43
+ errorSchema: errorSchema,
44
+ moduleUrl: moduleUrl,
45
+ commandAuthorization: commandAuthorization
46
+ };
47
+
48
+ let StreamBus = LocalBus$ReventlessLocal.Make({});
49
+
50
+ TestRunner$ReventlessLocal.setup();
51
+
52
+ let $$let = LocalCommandTopicChannel$ReventlessLocal.Make(StreamBus);
53
+
54
+ let StreamCmdTopicMaker = CommandTopic_Builder$ReventlessCore.Make({
55
+ Id: Id$Reventless.$$String,
56
+ name: name,
57
+ commandSchema: commandSchema
58
+ })({
59
+ make: $$let.make
60
+ });
61
+
62
+ let cmdTopic = StreamCmdTopicMaker.make("StreamCmdTopic", undefined);
63
+
64
+ let captured = {
65
+ contents: []
66
+ };
67
+
68
+ StreamBus.registerCommandHandler("StreamCmdTopicCmdTopic", async (body, _ctx) => {
69
+ captured.contents = captured.contents.concat([body]);
70
+ });
71
+
72
+ function makeJson(id) {
73
+ return {
74
+ id: id,
75
+ meta: TestFixtures$ReventlessLocal.testMeta,
76
+ commandJson: Message$ReventlessCore.encode({
77
+ TAG: "CreateItem",
78
+ name: id
79
+ }, commandSchema)
80
+ };
81
+ }
82
+
83
+ export {
84
+ ItemSpec,
85
+ StreamBus,
86
+ StreamCmdTopicMaker,
87
+ cmdTopic,
88
+ captured,
89
+ makeJson,
90
+ }
91
+ /* commandSchema Not a pure module */
@@ -0,0 +1,30 @@
1
+ // Tests for CommandTopic.publishJsonsStream (Phase I of effect-stream-integration plan).
2
+ // Verifies that a Stream<commandJson> drives publishing without collecting into an array.
3
+
4
+ open JestGlobals
5
+ open CommandTopicStreamFixtures
6
+
7
+ describe("CommandTopic.publishJsonsStream", () => {
8
+ let _ = beforeAllAsync(async () => {
9
+ let _ = await cmdTopic->ReventlessCore.Component.operations->TestRunner.resolve
10
+ })
11
+
12
+ let _ = beforeEach(() => {
13
+ captured := []
14
+ })
15
+
16
+ testPromise("streams 3 commands to the bus in order", async () => {
17
+ let ops = await cmdTopic->ReventlessCore.Component.operations->TestRunner.resolve
18
+ let stream = [makeJson("cmd-1"), makeJson("cmd-2"), makeJson("cmd-3")]->Stream.fromIterable
19
+ let _ = await ops.publishJsonsStream(stream)->Effect.runPromise
20
+ let _ = await Promise.resolve()
21
+ expect(captured.contents->Array.length)->toBe(3)
22
+ })
23
+
24
+ testPromise("empty stream dispatches nothing", async () => {
25
+ let ops = await cmdTopic->ReventlessCore.Component.operations->TestRunner.resolve
26
+ let _ = await ops.publishJsonsStream(Stream.empty)->Effect.runPromise
27
+ let _ = await Promise.resolve()
28
+ expect(captured.contents->Array.length)->toBe(0)
29
+ })
30
+ })
@@ -0,0 +1,35 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Effect from "effect/Effect";
4
+ import * as Stream from "effect/Stream";
5
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
6
+ import * as TestRunner$ReventlessLocal from "../../../src/test/TestRunner.res.mjs";
7
+ import * as CommandTopicStreamFixtures$ReventlessLocal from "./CommandTopicStreamFixtures.res.mjs";
8
+
9
+ globalThis.describe("CommandTopic.publishJsonsStream", () => {
10
+ globalThis.beforeAll(async () => {
11
+ await TestRunner$ReventlessLocal.resolve(Component$ReventlessCore.operations(CommandTopicStreamFixtures$ReventlessLocal.cmdTopic));
12
+ });
13
+ globalThis.beforeEach(() => {
14
+ CommandTopicStreamFixtures$ReventlessLocal.captured.contents = [];
15
+ });
16
+ globalThis.test("streams 3 commands to the bus in order", async () => {
17
+ let ops = await TestRunner$ReventlessLocal.resolve(Component$ReventlessCore.operations(CommandTopicStreamFixtures$ReventlessLocal.cmdTopic));
18
+ let stream = Stream.fromIterable([
19
+ CommandTopicStreamFixtures$ReventlessLocal.makeJson("cmd-1"),
20
+ CommandTopicStreamFixtures$ReventlessLocal.makeJson("cmd-2"),
21
+ CommandTopicStreamFixtures$ReventlessLocal.makeJson("cmd-3")
22
+ ]);
23
+ await Effect.runPromise(ops.publishJsonsStream(stream));
24
+ await Promise.resolve();
25
+ globalThis.expect(CommandTopicStreamFixtures$ReventlessLocal.captured.contents.length).toBe(3);
26
+ });
27
+ globalThis.test("empty stream dispatches nothing", async () => {
28
+ let ops = await TestRunner$ReventlessLocal.resolve(Component$ReventlessCore.operations(CommandTopicStreamFixtures$ReventlessLocal.cmdTopic));
29
+ await Effect.runPromise(ops.publishJsonsStream(Stream.empty));
30
+ await Promise.resolve();
31
+ globalThis.expect(CommandTopicStreamFixtures$ReventlessLocal.captured.contents.length).toBe(0);
32
+ });
33
+ });
34
+
35
+ /* Not a pure module */
@@ -0,0 +1,55 @@
1
+ // Integration tests for CommandTopic_Builder with in-memory channel.
2
+
3
+ open TestFixtures
4
+ open JestGlobals
5
+ open CommandTopicFixtures
6
+
7
+ describe("CommandTopic (in-memory)", () => {
8
+ let _ = beforeAllAsync(async () => {
9
+ let _ = await cmdTopic->ReventlessCore.Component.operations->TestRunner.resolve
10
+ })
11
+
12
+ testPromise("publishJsons succeeds without throwing", async () => {
13
+ let ops = await cmdTopic->ReventlessCore.Component.operations->TestRunner.resolve
14
+ let commandJson = ItemSpec.CreateItem({name: "Widget"})->ReventlessCore.Message.encode(ItemSpec.commandSchema)
15
+ let didThrow = ref(false)
16
+ try {
17
+ await ops.publishJsons([{
18
+ Reventless.Message.id: "item-1",
19
+ meta: testMeta,
20
+ commandJson,
21
+ }])
22
+ } catch {
23
+ | _ => didThrow := true
24
+ }
25
+ expect(didThrow.contents)->toBe(false)
26
+ })
27
+
28
+ testPromise("publishJsons with empty array succeeds", async () => {
29
+ let ops = await cmdTopic->ReventlessCore.Component.operations->TestRunner.resolve
30
+ let didThrow = ref(false)
31
+ try {
32
+ await ops.publishJsons([])
33
+ } catch {
34
+ | _ => didThrow := true
35
+ }
36
+ expect(didThrow.contents)->toBe(false)
37
+ })
38
+
39
+ testPromise("publishJsons dispatches to bus channel (TestCommandTopicCmdTopic)", async () => {
40
+ let ops = await cmdTopic->ReventlessCore.Component.operations->TestRunner.resolve
41
+ // Verify the bus receives the command on the expected channel.
42
+ // Channel name = make name ++ ComponentType.toName(CommandTopic) = "TestCommandTopic" ++ "CmdTopic"
43
+ let received: ref<bool> = ref(false)
44
+ Bus.registerCommandHandler("TestCommandTopicCmdTopic", async (_json, _ctx) => {
45
+ received := true
46
+ })
47
+ let commandJson = ItemSpec.DeleteItem({id: "item-99"})->ReventlessCore.Message.encode(ItemSpec.commandSchema)
48
+ await ops.publishJsons([{
49
+ Reventless.Message.id: "item-99",
50
+ meta: testMeta,
51
+ commandJson,
52
+ }])
53
+ expect(received.contents)->toBe(true)
54
+ })
55
+ })