@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,1011 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
4
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
5
+ import * as Queue from "effect/Queue";
6
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
7
+ import * as Effect from "effect/Effect";
8
+ import * as PubSub from "effect/PubSub";
9
+ import * as Stream from "effect/Stream";
10
+ import * as Deferred from "effect/Deferred";
11
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
12
+
13
+ function pickSortKeyValue(state) {
14
+ let obj = Stdlib_JSON.Decode.object(state);
15
+ if (obj === undefined) {
16
+ return;
17
+ }
18
+ let match = obj["updatedAt"];
19
+ if (typeof match === "string") {
20
+ return match;
21
+ }
22
+ let match$1 = obj["createdAt"];
23
+ if (typeof match$1 === "string") {
24
+ return match$1;
25
+ }
26
+ }
27
+
28
+ function makeStateChangeDescriptor(changeKind, id, state) {
29
+ let descriptor = {};
30
+ descriptor["changeKind"] = changeKind;
31
+ descriptor["id"] = id;
32
+ let v = Stdlib_Option.flatMap(state, pickSortKeyValue);
33
+ if (v !== undefined) {
34
+ descriptor["sortKeyValue"] = v;
35
+ }
36
+ return descriptor;
37
+ }
38
+
39
+ function eventTapEnabled() {
40
+ return Stdlib_Option.isSome(process.env["REVENTLESS_EVENT_TAP"]);
41
+ }
42
+
43
+ let eventTapSeq = {
44
+ contents: 0
45
+ };
46
+
47
+ function seedEventTapSeq(n) {
48
+ eventTapSeq.contents = n;
49
+ }
50
+
51
+ function emitEventTap(topic, service, payload) {
52
+ eventTapSeq.contents = eventTapSeq.contents + 1 | 0;
53
+ let line = Object.fromEntries([
54
+ [
55
+ "event",
56
+ "domainEvent"
57
+ ],
58
+ [
59
+ "seq",
60
+ eventTapSeq.contents
61
+ ],
62
+ [
63
+ "topic",
64
+ topic
65
+ ],
66
+ [
67
+ "service",
68
+ service
69
+ ],
70
+ [
71
+ "payload",
72
+ payload
73
+ ],
74
+ [
75
+ "ts",
76
+ new Date().toISOString()
77
+ ]
78
+ ]);
79
+ console.log("@@RVLESS_EVT@@ " + JSON.stringify(line));
80
+ }
81
+
82
+ function Impl(C) {
83
+ let capacity = C.capacity;
84
+ let eventHubs = {
85
+ contents: {}
86
+ };
87
+ let subscriberCounts = {
88
+ contents: {}
89
+ };
90
+ let commandHandlers = {
91
+ contents: {}
92
+ };
93
+ let pendingCommandQueues = {
94
+ contents: {}
95
+ };
96
+ let queryDbRegistry = {
97
+ contents: {}
98
+ };
99
+ let queryDbScanRegistry = {
100
+ contents: {}
101
+ };
102
+ let queryDbStreamRegistry = {
103
+ contents: {}
104
+ };
105
+ let eventLogReplayRegistry = {
106
+ contents: {}
107
+ };
108
+ let dcbEventLogReadRegistry = {
109
+ contents: {}
110
+ };
111
+ let makeHub = () => {
112
+ if (capacity !== undefined) {
113
+ return Effect.runSync(PubSub.bounded(capacity));
114
+ } else {
115
+ return Effect.runSync(PubSub.unbounded());
116
+ }
117
+ };
118
+ let subscribeToEvents = (topicName, handler) => {
119
+ let h = eventHubs.contents[topicName];
120
+ let hub;
121
+ if (h !== undefined) {
122
+ hub = Primitive_option.valFromOption(h);
123
+ } else {
124
+ let h$1 = makeHub();
125
+ eventHubs.contents[topicName] = h$1;
126
+ hub = h$1;
127
+ }
128
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
129
+ subscriberCounts.contents[topicName] = n + 1 | 0;
130
+ let drainLoop = Effect.scoped(Effect.flatMap(PubSub.subscribe(hub), queue => Stream.runForEach(Stream.fromQueue(queue), msg => Effect.zipRight(Effect.promise(() => handler(msg.service, msg.meta, msg.json)), msg.done_))));
131
+ Effect.runFork(drainLoop);
132
+ };
133
+ let subscribeToEventStream = topicName => {
134
+ let h = eventHubs.contents[topicName];
135
+ let hub;
136
+ if (h !== undefined) {
137
+ hub = Primitive_option.valFromOption(h);
138
+ } else {
139
+ let h$1 = makeHub();
140
+ eventHubs.contents[topicName] = h$1;
141
+ hub = h$1;
142
+ }
143
+ return Effect.map(Effect.acquireRelease(Effect.flatMap(Effect.sync(() => {
144
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
145
+ subscriberCounts.contents[topicName] = n + 1 | 0;
146
+ }), () => PubSub.subscribe(hub)), (queue, _exit) => Effect.zipRight(Effect.sync(() => {
147
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 1);
148
+ subscriberCounts.contents[topicName] = n - 1 | 0;
149
+ }), Queue.shutdown(queue))), queue => Stream.fromQueue(queue));
150
+ };
151
+ let publishEvent = async (topicName, service, meta, json) => {
152
+ if (Stdlib_Option.isSome(process.env["REVENTLESS_EVENT_TAP"])) {
153
+ emitEventTap(topicName, service, json);
154
+ }
155
+ let hub = eventHubs.contents[topicName];
156
+ if (hub === undefined) {
157
+ return;
158
+ }
159
+ let hub$1 = Primitive_option.valFromOption(hub);
160
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
161
+ if (n === 0) {
162
+ return;
163
+ }
164
+ let allDone = Effect.runSync(Deferred.make());
165
+ let remaining = {
166
+ contents: n
167
+ };
168
+ let done_ = Effect.flatMap(Effect.sync(() => {
169
+ remaining.contents = remaining.contents - 1 | 0;
170
+ }), () => {
171
+ if (remaining.contents === 0) {
172
+ return Effect.map(Deferred.succeed(allDone, undefined), param => {});
173
+ } else {
174
+ return Effect.succeed();
175
+ }
176
+ });
177
+ let msg = {
178
+ service: service,
179
+ meta: meta,
180
+ json: json,
181
+ done_: done_
182
+ };
183
+ let publishAndWait = capacity !== undefined ? Effect.flatMap(PubSub.publish(hub$1, msg), param => Deferred.await(allDone)) : Effect.zipRight(Effect.sync(() => {
184
+ Effect.runSync(PubSub.publish(hub$1, msg));
185
+ }), Deferred.await(allDone));
186
+ await Effect.runPromise(publishAndWait);
187
+ };
188
+ let dispatchCommand = async (channelName, json) => {
189
+ let handler = commandHandlers.contents[channelName];
190
+ if (handler !== undefined) {
191
+ return await handler(json, undefined);
192
+ }
193
+ let q = pendingCommandQueues.contents[channelName];
194
+ let queue;
195
+ if (q !== undefined) {
196
+ queue = q;
197
+ } else {
198
+ let q$1 = {
199
+ contents: []
200
+ };
201
+ pendingCommandQueues.contents[channelName] = q$1;
202
+ queue = q$1;
203
+ }
204
+ queue.contents.push(json);
205
+ };
206
+ let registerCommandHandler = (channelName, handler) => {
207
+ commandHandlers.contents[channelName] = handler;
208
+ let queue = pendingCommandQueues.contents[channelName];
209
+ if (queue === undefined) {
210
+ return;
211
+ }
212
+ let pending = queue.contents;
213
+ queue.contents = [];
214
+ pending.forEach(json => {
215
+ handler(json, undefined);
216
+ });
217
+ };
218
+ let registerQueryDb = (name, ops) => {
219
+ queryDbRegistry.contents[name] = ops;
220
+ };
221
+ let getQueryDb = name => queryDbRegistry.contents[name];
222
+ let registerQueryDbScan = (name, scan) => {
223
+ queryDbScanRegistry.contents[name] = scan;
224
+ };
225
+ let getQueryDbScan = name => queryDbScanRegistry.contents[name];
226
+ let registerQueryDbStream = (name, streamFn) => {
227
+ queryDbStreamRegistry.contents[name] = streamFn;
228
+ };
229
+ let getQueryDbStream = name => queryDbStreamRegistry.contents[name];
230
+ let registerEventLogReplay = (name, replay) => {
231
+ eventLogReplayRegistry.contents[name] = replay;
232
+ };
233
+ let getEventLogReplay = name => eventLogReplayRegistry.contents[name];
234
+ let registerDcbEventLogRead = (name, read) => {
235
+ dcbEventLogReadRegistry.contents[name] = read;
236
+ };
237
+ let getDcbEventLogRead = name => dcbEventLogReadRegistry.contents[name];
238
+ let stateChangeListeners = {
239
+ contents: {}
240
+ };
241
+ let subscribeToStateChanges = (name, callback) => {
242
+ let listeners = Stdlib_Option.getOr(stateChangeListeners.contents[name], []);
243
+ stateChangeListeners.contents[name] = listeners.concat([callback]);
244
+ };
245
+ let publishStateChange = (name, descriptor) => {
246
+ Stdlib_Option.getOr(stateChangeListeners.contents[name], []).forEach(cb => cb(descriptor));
247
+ };
248
+ let eventCollectorHandlers = {
249
+ contents: {}
250
+ };
251
+ let eventCollectorPendingTopics = {
252
+ contents: {}
253
+ };
254
+ let makeFireAndForgetHandler = handler => ((param, param$1, json) => {
255
+ handler(json, undefined);
256
+ return Promise.resolve();
257
+ });
258
+ let registerEventCollectorHandler = (ecName, handler) => {
259
+ eventCollectorHandlers.contents[ecName] = handler;
260
+ let topics = eventCollectorPendingTopics.contents[ecName];
261
+ if (topics !== undefined) {
262
+ topics.forEach(topicName => subscribeToEvents(topicName, makeFireAndForgetHandler(handler)));
263
+ return Stdlib_Dict.$$delete(eventCollectorPendingTopics.contents, ecName);
264
+ }
265
+ };
266
+ let subscribeEventCollectorToTopic = (ecName, topicName) => {
267
+ let handler = eventCollectorHandlers.contents[ecName];
268
+ if (handler !== undefined) {
269
+ return subscribeToEvents(topicName, makeFireAndForgetHandler(handler));
270
+ }
271
+ let pending = Stdlib_Option.getOr(eventCollectorPendingTopics.contents[ecName], []);
272
+ pending.push(topicName);
273
+ eventCollectorPendingTopics.contents[ecName] = pending;
274
+ };
275
+ let reset = () => {
276
+ let shutdownAll = Effect.map(Effect.all(Object.values(eventHubs.contents).map(hub => PubSub.shutdown(hub)), {
277
+ concurrency: "unbounded"
278
+ }), param => {});
279
+ Effect.runSync(shutdownAll);
280
+ eventHubs.contents = {};
281
+ subscriberCounts.contents = {};
282
+ commandHandlers.contents = {};
283
+ pendingCommandQueues.contents = {};
284
+ queryDbRegistry.contents = {};
285
+ queryDbScanRegistry.contents = {};
286
+ queryDbStreamRegistry.contents = {};
287
+ eventLogReplayRegistry.contents = {};
288
+ dcbEventLogReadRegistry.contents = {};
289
+ stateChangeListeners.contents = {};
290
+ eventCollectorHandlers.contents = {};
291
+ eventCollectorPendingTopics.contents = {};
292
+ };
293
+ return {
294
+ publishEvent: publishEvent,
295
+ subscribeToEvents: subscribeToEvents,
296
+ subscribeToEventStream: subscribeToEventStream,
297
+ dispatchCommand: dispatchCommand,
298
+ registerCommandHandler: registerCommandHandler,
299
+ registerQueryDb: registerQueryDb,
300
+ getQueryDb: getQueryDb,
301
+ registerQueryDbScan: registerQueryDbScan,
302
+ getQueryDbScan: getQueryDbScan,
303
+ registerQueryDbStream: registerQueryDbStream,
304
+ getQueryDbStream: getQueryDbStream,
305
+ registerEventLogReplay: registerEventLogReplay,
306
+ getEventLogReplay: getEventLogReplay,
307
+ registerDcbEventLogRead: registerDcbEventLogRead,
308
+ getDcbEventLogRead: getDcbEventLogRead,
309
+ publishStateChange: publishStateChange,
310
+ subscribeToStateChanges: subscribeToStateChanges,
311
+ registerEventCollectorHandler: registerEventCollectorHandler,
312
+ subscribeEventCollectorToTopic: subscribeEventCollectorToTopic,
313
+ reset: reset
314
+ };
315
+ }
316
+
317
+ function Make($star) {
318
+ let eventHubs = {
319
+ contents: {}
320
+ };
321
+ let subscriberCounts = {
322
+ contents: {}
323
+ };
324
+ let commandHandlers = {
325
+ contents: {}
326
+ };
327
+ let pendingCommandQueues = {
328
+ contents: {}
329
+ };
330
+ let queryDbRegistry = {
331
+ contents: {}
332
+ };
333
+ let queryDbScanRegistry = {
334
+ contents: {}
335
+ };
336
+ let queryDbStreamRegistry = {
337
+ contents: {}
338
+ };
339
+ let eventLogReplayRegistry = {
340
+ contents: {}
341
+ };
342
+ let dcbEventLogReadRegistry = {
343
+ contents: {}
344
+ };
345
+ let makeHub = () => Effect.runSync(PubSub.unbounded());
346
+ let subscribeToEvents = (topicName, handler) => {
347
+ let h = eventHubs.contents[topicName];
348
+ let hub;
349
+ if (h !== undefined) {
350
+ hub = Primitive_option.valFromOption(h);
351
+ } else {
352
+ let h$1 = makeHub();
353
+ eventHubs.contents[topicName] = h$1;
354
+ hub = h$1;
355
+ }
356
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
357
+ subscriberCounts.contents[topicName] = n + 1 | 0;
358
+ let drainLoop = Effect.scoped(Effect.flatMap(PubSub.subscribe(hub), queue => Stream.runForEach(Stream.fromQueue(queue), msg => Effect.zipRight(Effect.promise(() => handler(msg.service, msg.meta, msg.json)), msg.done_))));
359
+ Effect.runFork(drainLoop);
360
+ };
361
+ let subscribeToEventStream = topicName => {
362
+ let h = eventHubs.contents[topicName];
363
+ let hub;
364
+ if (h !== undefined) {
365
+ hub = Primitive_option.valFromOption(h);
366
+ } else {
367
+ let h$1 = makeHub();
368
+ eventHubs.contents[topicName] = h$1;
369
+ hub = h$1;
370
+ }
371
+ return Effect.map(Effect.acquireRelease(Effect.flatMap(Effect.sync(() => {
372
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
373
+ subscriberCounts.contents[topicName] = n + 1 | 0;
374
+ }), () => PubSub.subscribe(hub)), (queue, _exit) => Effect.zipRight(Effect.sync(() => {
375
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 1);
376
+ subscriberCounts.contents[topicName] = n - 1 | 0;
377
+ }), Queue.shutdown(queue))), queue => Stream.fromQueue(queue));
378
+ };
379
+ let publishEvent = async (topicName, service, meta, json) => {
380
+ if (Stdlib_Option.isSome(process.env["REVENTLESS_EVENT_TAP"])) {
381
+ emitEventTap(topicName, service, json);
382
+ }
383
+ let hub = eventHubs.contents[topicName];
384
+ if (hub === undefined) {
385
+ return;
386
+ }
387
+ let hub$1 = Primitive_option.valFromOption(hub);
388
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
389
+ if (n === 0) {
390
+ return;
391
+ }
392
+ let allDone = Effect.runSync(Deferred.make());
393
+ let remaining = {
394
+ contents: n
395
+ };
396
+ let done_ = Effect.flatMap(Effect.sync(() => {
397
+ remaining.contents = remaining.contents - 1 | 0;
398
+ }), () => {
399
+ if (remaining.contents === 0) {
400
+ return Effect.map(Deferred.succeed(allDone, undefined), param => {});
401
+ } else {
402
+ return Effect.succeed();
403
+ }
404
+ });
405
+ let msg = {
406
+ service: service,
407
+ meta: meta,
408
+ json: json,
409
+ done_: done_
410
+ };
411
+ let publishAndWait = Effect.zipRight(Effect.sync(() => {
412
+ Effect.runSync(PubSub.publish(hub$1, msg));
413
+ }), Deferred.await(allDone));
414
+ await Effect.runPromise(publishAndWait);
415
+ };
416
+ let dispatchCommand = async (channelName, json) => {
417
+ let handler = commandHandlers.contents[channelName];
418
+ if (handler !== undefined) {
419
+ return await handler(json, undefined);
420
+ }
421
+ let q = pendingCommandQueues.contents[channelName];
422
+ let queue;
423
+ if (q !== undefined) {
424
+ queue = q;
425
+ } else {
426
+ let q$1 = {
427
+ contents: []
428
+ };
429
+ pendingCommandQueues.contents[channelName] = q$1;
430
+ queue = q$1;
431
+ }
432
+ queue.contents.push(json);
433
+ };
434
+ let registerCommandHandler = (channelName, handler) => {
435
+ commandHandlers.contents[channelName] = handler;
436
+ let queue = pendingCommandQueues.contents[channelName];
437
+ if (queue === undefined) {
438
+ return;
439
+ }
440
+ let pending = queue.contents;
441
+ queue.contents = [];
442
+ pending.forEach(json => {
443
+ handler(json, undefined);
444
+ });
445
+ };
446
+ let registerQueryDb = (name, ops) => {
447
+ queryDbRegistry.contents[name] = ops;
448
+ };
449
+ let getQueryDb = name => queryDbRegistry.contents[name];
450
+ let registerQueryDbScan = (name, scan) => {
451
+ queryDbScanRegistry.contents[name] = scan;
452
+ };
453
+ let getQueryDbScan = name => queryDbScanRegistry.contents[name];
454
+ let registerQueryDbStream = (name, streamFn) => {
455
+ queryDbStreamRegistry.contents[name] = streamFn;
456
+ };
457
+ let getQueryDbStream = name => queryDbStreamRegistry.contents[name];
458
+ let registerEventLogReplay = (name, replay) => {
459
+ eventLogReplayRegistry.contents[name] = replay;
460
+ };
461
+ let getEventLogReplay = name => eventLogReplayRegistry.contents[name];
462
+ let registerDcbEventLogRead = (name, read) => {
463
+ dcbEventLogReadRegistry.contents[name] = read;
464
+ };
465
+ let getDcbEventLogRead = name => dcbEventLogReadRegistry.contents[name];
466
+ let stateChangeListeners = {
467
+ contents: {}
468
+ };
469
+ let subscribeToStateChanges = (name, callback) => {
470
+ let listeners = Stdlib_Option.getOr(stateChangeListeners.contents[name], []);
471
+ stateChangeListeners.contents[name] = listeners.concat([callback]);
472
+ };
473
+ let publishStateChange = (name, descriptor) => {
474
+ Stdlib_Option.getOr(stateChangeListeners.contents[name], []).forEach(cb => cb(descriptor));
475
+ };
476
+ let eventCollectorHandlers = {
477
+ contents: {}
478
+ };
479
+ let eventCollectorPendingTopics = {
480
+ contents: {}
481
+ };
482
+ let makeFireAndForgetHandler = handler => ((param, param$1, json) => {
483
+ handler(json, undefined);
484
+ return Promise.resolve();
485
+ });
486
+ let registerEventCollectorHandler = (ecName, handler) => {
487
+ eventCollectorHandlers.contents[ecName] = handler;
488
+ let topics = eventCollectorPendingTopics.contents[ecName];
489
+ if (topics !== undefined) {
490
+ topics.forEach(topicName => subscribeToEvents(topicName, makeFireAndForgetHandler(handler)));
491
+ return Stdlib_Dict.$$delete(eventCollectorPendingTopics.contents, ecName);
492
+ }
493
+ };
494
+ let subscribeEventCollectorToTopic = (ecName, topicName) => {
495
+ let handler = eventCollectorHandlers.contents[ecName];
496
+ if (handler !== undefined) {
497
+ return subscribeToEvents(topicName, makeFireAndForgetHandler(handler));
498
+ }
499
+ let pending = Stdlib_Option.getOr(eventCollectorPendingTopics.contents[ecName], []);
500
+ pending.push(topicName);
501
+ eventCollectorPendingTopics.contents[ecName] = pending;
502
+ };
503
+ let reset = () => {
504
+ let shutdownAll = Effect.map(Effect.all(Object.values(eventHubs.contents).map(hub => PubSub.shutdown(hub)), {
505
+ concurrency: "unbounded"
506
+ }), param => {});
507
+ Effect.runSync(shutdownAll);
508
+ eventHubs.contents = {};
509
+ subscriberCounts.contents = {};
510
+ commandHandlers.contents = {};
511
+ pendingCommandQueues.contents = {};
512
+ queryDbRegistry.contents = {};
513
+ queryDbScanRegistry.contents = {};
514
+ queryDbStreamRegistry.contents = {};
515
+ eventLogReplayRegistry.contents = {};
516
+ dcbEventLogReadRegistry.contents = {};
517
+ stateChangeListeners.contents = {};
518
+ eventCollectorHandlers.contents = {};
519
+ eventCollectorPendingTopics.contents = {};
520
+ };
521
+ return {
522
+ publishEvent: publishEvent,
523
+ subscribeToEvents: subscribeToEvents,
524
+ subscribeToEventStream: subscribeToEventStream,
525
+ dispatchCommand: dispatchCommand,
526
+ registerCommandHandler: registerCommandHandler,
527
+ registerQueryDb: registerQueryDb,
528
+ getQueryDb: getQueryDb,
529
+ registerQueryDbScan: registerQueryDbScan,
530
+ getQueryDbScan: getQueryDbScan,
531
+ registerQueryDbStream: registerQueryDbStream,
532
+ getQueryDbStream: getQueryDbStream,
533
+ registerEventLogReplay: registerEventLogReplay,
534
+ getEventLogReplay: getEventLogReplay,
535
+ registerDcbEventLogRead: registerDcbEventLogRead,
536
+ getDcbEventLogRead: getDcbEventLogRead,
537
+ publishStateChange: publishStateChange,
538
+ subscribeToStateChanges: subscribeToStateChanges,
539
+ registerEventCollectorHandler: registerEventCollectorHandler,
540
+ subscribeEventCollectorToTopic: subscribeEventCollectorToTopic,
541
+ reset: reset
542
+ };
543
+ }
544
+
545
+ function MakeSilent($star) {
546
+ let eventHubs = {
547
+ contents: {}
548
+ };
549
+ let subscriberCounts = {
550
+ contents: {}
551
+ };
552
+ let commandHandlers = {
553
+ contents: {}
554
+ };
555
+ let pendingCommandQueues = {
556
+ contents: {}
557
+ };
558
+ let queryDbRegistry = {
559
+ contents: {}
560
+ };
561
+ let queryDbScanRegistry = {
562
+ contents: {}
563
+ };
564
+ let queryDbStreamRegistry = {
565
+ contents: {}
566
+ };
567
+ let eventLogReplayRegistry = {
568
+ contents: {}
569
+ };
570
+ let dcbEventLogReadRegistry = {
571
+ contents: {}
572
+ };
573
+ let makeHub = () => Effect.runSync(PubSub.unbounded());
574
+ let subscribeToEvents = (topicName, handler) => {
575
+ let h = eventHubs.contents[topicName];
576
+ let hub;
577
+ if (h !== undefined) {
578
+ hub = Primitive_option.valFromOption(h);
579
+ } else {
580
+ let h$1 = makeHub();
581
+ eventHubs.contents[topicName] = h$1;
582
+ hub = h$1;
583
+ }
584
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
585
+ subscriberCounts.contents[topicName] = n + 1 | 0;
586
+ let drainLoop = Effect.scoped(Effect.flatMap(PubSub.subscribe(hub), queue => Stream.runForEach(Stream.fromQueue(queue), msg => Effect.zipRight(Effect.promise(() => handler(msg.service, msg.meta, msg.json)), msg.done_))));
587
+ Effect.runFork(drainLoop);
588
+ };
589
+ let subscribeToEventStream = topicName => {
590
+ let h = eventHubs.contents[topicName];
591
+ let hub;
592
+ if (h !== undefined) {
593
+ hub = Primitive_option.valFromOption(h);
594
+ } else {
595
+ let h$1 = makeHub();
596
+ eventHubs.contents[topicName] = h$1;
597
+ hub = h$1;
598
+ }
599
+ return Effect.map(Effect.acquireRelease(Effect.flatMap(Effect.sync(() => {
600
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
601
+ subscriberCounts.contents[topicName] = n + 1 | 0;
602
+ }), () => PubSub.subscribe(hub)), (queue, _exit) => Effect.zipRight(Effect.sync(() => {
603
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 1);
604
+ subscriberCounts.contents[topicName] = n - 1 | 0;
605
+ }), Queue.shutdown(queue))), queue => Stream.fromQueue(queue));
606
+ };
607
+ let publishEvent = async (topicName, service, meta, json) => {
608
+ if (Stdlib_Option.isSome(process.env["REVENTLESS_EVENT_TAP"])) {
609
+ emitEventTap(topicName, service, json);
610
+ }
611
+ let hub = eventHubs.contents[topicName];
612
+ if (hub === undefined) {
613
+ return;
614
+ }
615
+ let hub$1 = Primitive_option.valFromOption(hub);
616
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
617
+ if (n === 0) {
618
+ return;
619
+ }
620
+ let allDone = Effect.runSync(Deferred.make());
621
+ let remaining = {
622
+ contents: n
623
+ };
624
+ let done_ = Effect.flatMap(Effect.sync(() => {
625
+ remaining.contents = remaining.contents - 1 | 0;
626
+ }), () => {
627
+ if (remaining.contents === 0) {
628
+ return Effect.map(Deferred.succeed(allDone, undefined), param => {});
629
+ } else {
630
+ return Effect.succeed();
631
+ }
632
+ });
633
+ let msg = {
634
+ service: service,
635
+ meta: meta,
636
+ json: json,
637
+ done_: done_
638
+ };
639
+ let publishAndWait = Effect.zipRight(Effect.sync(() => {
640
+ Effect.runSync(PubSub.publish(hub$1, msg));
641
+ }), Deferred.await(allDone));
642
+ await Effect.runPromise(publishAndWait);
643
+ };
644
+ let dispatchCommand = async (channelName, json) => {
645
+ let handler = commandHandlers.contents[channelName];
646
+ if (handler !== undefined) {
647
+ return await handler(json, undefined);
648
+ }
649
+ let q = pendingCommandQueues.contents[channelName];
650
+ let queue;
651
+ if (q !== undefined) {
652
+ queue = q;
653
+ } else {
654
+ let q$1 = {
655
+ contents: []
656
+ };
657
+ pendingCommandQueues.contents[channelName] = q$1;
658
+ queue = q$1;
659
+ }
660
+ queue.contents.push(json);
661
+ };
662
+ let registerCommandHandler = (channelName, handler) => {
663
+ commandHandlers.contents[channelName] = handler;
664
+ let queue = pendingCommandQueues.contents[channelName];
665
+ if (queue === undefined) {
666
+ return;
667
+ }
668
+ let pending = queue.contents;
669
+ queue.contents = [];
670
+ pending.forEach(json => {
671
+ handler(json, undefined);
672
+ });
673
+ };
674
+ let registerQueryDb = (name, ops) => {
675
+ queryDbRegistry.contents[name] = ops;
676
+ };
677
+ let getQueryDb = name => queryDbRegistry.contents[name];
678
+ let registerQueryDbScan = (name, scan) => {
679
+ queryDbScanRegistry.contents[name] = scan;
680
+ };
681
+ let getQueryDbScan = name => queryDbScanRegistry.contents[name];
682
+ let registerQueryDbStream = (name, streamFn) => {
683
+ queryDbStreamRegistry.contents[name] = streamFn;
684
+ };
685
+ let getQueryDbStream = name => queryDbStreamRegistry.contents[name];
686
+ let registerEventLogReplay = (name, replay) => {
687
+ eventLogReplayRegistry.contents[name] = replay;
688
+ };
689
+ let getEventLogReplay = name => eventLogReplayRegistry.contents[name];
690
+ let registerDcbEventLogRead = (name, read) => {
691
+ dcbEventLogReadRegistry.contents[name] = read;
692
+ };
693
+ let getDcbEventLogRead = name => dcbEventLogReadRegistry.contents[name];
694
+ let stateChangeListeners = {
695
+ contents: {}
696
+ };
697
+ let subscribeToStateChanges = (name, callback) => {
698
+ let listeners = Stdlib_Option.getOr(stateChangeListeners.contents[name], []);
699
+ stateChangeListeners.contents[name] = listeners.concat([callback]);
700
+ };
701
+ let publishStateChange = (name, descriptor) => {
702
+ Stdlib_Option.getOr(stateChangeListeners.contents[name], []).forEach(cb => cb(descriptor));
703
+ };
704
+ let eventCollectorHandlers = {
705
+ contents: {}
706
+ };
707
+ let eventCollectorPendingTopics = {
708
+ contents: {}
709
+ };
710
+ let makeFireAndForgetHandler = handler => ((param, param$1, json) => {
711
+ handler(json, undefined);
712
+ return Promise.resolve();
713
+ });
714
+ let registerEventCollectorHandler = (ecName, handler) => {
715
+ eventCollectorHandlers.contents[ecName] = handler;
716
+ let topics = eventCollectorPendingTopics.contents[ecName];
717
+ if (topics !== undefined) {
718
+ topics.forEach(topicName => subscribeToEvents(topicName, makeFireAndForgetHandler(handler)));
719
+ return Stdlib_Dict.$$delete(eventCollectorPendingTopics.contents, ecName);
720
+ }
721
+ };
722
+ let subscribeEventCollectorToTopic = (ecName, topicName) => {
723
+ let handler = eventCollectorHandlers.contents[ecName];
724
+ if (handler !== undefined) {
725
+ return subscribeToEvents(topicName, makeFireAndForgetHandler(handler));
726
+ }
727
+ let pending = Stdlib_Option.getOr(eventCollectorPendingTopics.contents[ecName], []);
728
+ pending.push(topicName);
729
+ eventCollectorPendingTopics.contents[ecName] = pending;
730
+ };
731
+ let reset = () => {
732
+ let shutdownAll = Effect.map(Effect.all(Object.values(eventHubs.contents).map(hub => PubSub.shutdown(hub)), {
733
+ concurrency: "unbounded"
734
+ }), param => {});
735
+ Effect.runSync(shutdownAll);
736
+ eventHubs.contents = {};
737
+ subscriberCounts.contents = {};
738
+ commandHandlers.contents = {};
739
+ pendingCommandQueues.contents = {};
740
+ queryDbRegistry.contents = {};
741
+ queryDbScanRegistry.contents = {};
742
+ queryDbStreamRegistry.contents = {};
743
+ eventLogReplayRegistry.contents = {};
744
+ dcbEventLogReadRegistry.contents = {};
745
+ stateChangeListeners.contents = {};
746
+ eventCollectorHandlers.contents = {};
747
+ eventCollectorPendingTopics.contents = {};
748
+ };
749
+ return {
750
+ publishEvent: publishEvent,
751
+ subscribeToEvents: subscribeToEvents,
752
+ subscribeToEventStream: subscribeToEventStream,
753
+ dispatchCommand: dispatchCommand,
754
+ registerCommandHandler: registerCommandHandler,
755
+ registerQueryDb: registerQueryDb,
756
+ getQueryDb: getQueryDb,
757
+ registerQueryDbScan: registerQueryDbScan,
758
+ getQueryDbScan: getQueryDbScan,
759
+ registerQueryDbStream: registerQueryDbStream,
760
+ getQueryDbStream: getQueryDbStream,
761
+ registerEventLogReplay: registerEventLogReplay,
762
+ getEventLogReplay: getEventLogReplay,
763
+ registerDcbEventLogRead: registerDcbEventLogRead,
764
+ getDcbEventLogRead: getDcbEventLogRead,
765
+ publishStateChange: publishStateChange,
766
+ subscribeToStateChanges: subscribeToStateChanges,
767
+ registerEventCollectorHandler: registerEventCollectorHandler,
768
+ subscribeEventCollectorToTopic: subscribeEventCollectorToTopic,
769
+ reset: reset
770
+ };
771
+ }
772
+
773
+ function MakeBounded(C) {
774
+ let capacity = C.capacity;
775
+ let eventHubs = {
776
+ contents: {}
777
+ };
778
+ let subscriberCounts = {
779
+ contents: {}
780
+ };
781
+ let commandHandlers = {
782
+ contents: {}
783
+ };
784
+ let pendingCommandQueues = {
785
+ contents: {}
786
+ };
787
+ let queryDbRegistry = {
788
+ contents: {}
789
+ };
790
+ let queryDbScanRegistry = {
791
+ contents: {}
792
+ };
793
+ let queryDbStreamRegistry = {
794
+ contents: {}
795
+ };
796
+ let eventLogReplayRegistry = {
797
+ contents: {}
798
+ };
799
+ let dcbEventLogReadRegistry = {
800
+ contents: {}
801
+ };
802
+ let makeHub = () => Effect.runSync(PubSub.bounded(capacity));
803
+ let subscribeToEvents = (topicName, handler) => {
804
+ let h = eventHubs.contents[topicName];
805
+ let hub;
806
+ if (h !== undefined) {
807
+ hub = Primitive_option.valFromOption(h);
808
+ } else {
809
+ let h$1 = makeHub();
810
+ eventHubs.contents[topicName] = h$1;
811
+ hub = h$1;
812
+ }
813
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
814
+ subscriberCounts.contents[topicName] = n + 1 | 0;
815
+ let drainLoop = Effect.scoped(Effect.flatMap(PubSub.subscribe(hub), queue => Stream.runForEach(Stream.fromQueue(queue), msg => Effect.zipRight(Effect.promise(() => handler(msg.service, msg.meta, msg.json)), msg.done_))));
816
+ Effect.runFork(drainLoop);
817
+ };
818
+ let subscribeToEventStream = topicName => {
819
+ let h = eventHubs.contents[topicName];
820
+ let hub;
821
+ if (h !== undefined) {
822
+ hub = Primitive_option.valFromOption(h);
823
+ } else {
824
+ let h$1 = makeHub();
825
+ eventHubs.contents[topicName] = h$1;
826
+ hub = h$1;
827
+ }
828
+ return Effect.map(Effect.acquireRelease(Effect.flatMap(Effect.sync(() => {
829
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
830
+ subscriberCounts.contents[topicName] = n + 1 | 0;
831
+ }), () => PubSub.subscribe(hub)), (queue, _exit) => Effect.zipRight(Effect.sync(() => {
832
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 1);
833
+ subscriberCounts.contents[topicName] = n - 1 | 0;
834
+ }), Queue.shutdown(queue))), queue => Stream.fromQueue(queue));
835
+ };
836
+ let publishEvent = async (topicName, service, meta, json) => {
837
+ if (Stdlib_Option.isSome(process.env["REVENTLESS_EVENT_TAP"])) {
838
+ emitEventTap(topicName, service, json);
839
+ }
840
+ let hub = eventHubs.contents[topicName];
841
+ if (hub === undefined) {
842
+ return;
843
+ }
844
+ let n = Stdlib_Option.getOr(subscriberCounts.contents[topicName], 0);
845
+ if (n === 0) {
846
+ return;
847
+ }
848
+ let allDone = Effect.runSync(Deferred.make());
849
+ let remaining = {
850
+ contents: n
851
+ };
852
+ let done_ = Effect.flatMap(Effect.sync(() => {
853
+ remaining.contents = remaining.contents - 1 | 0;
854
+ }), () => {
855
+ if (remaining.contents === 0) {
856
+ return Effect.map(Deferred.succeed(allDone, undefined), param => {});
857
+ } else {
858
+ return Effect.succeed();
859
+ }
860
+ });
861
+ let msg = {
862
+ service: service,
863
+ meta: meta,
864
+ json: json,
865
+ done_: done_
866
+ };
867
+ let publishAndWait = Effect.flatMap(PubSub.publish(Primitive_option.valFromOption(hub), msg), param => Deferred.await(allDone));
868
+ await Effect.runPromise(publishAndWait);
869
+ };
870
+ let dispatchCommand = async (channelName, json) => {
871
+ let handler = commandHandlers.contents[channelName];
872
+ if (handler !== undefined) {
873
+ return await handler(json, undefined);
874
+ }
875
+ let q = pendingCommandQueues.contents[channelName];
876
+ let queue;
877
+ if (q !== undefined) {
878
+ queue = q;
879
+ } else {
880
+ let q$1 = {
881
+ contents: []
882
+ };
883
+ pendingCommandQueues.contents[channelName] = q$1;
884
+ queue = q$1;
885
+ }
886
+ queue.contents.push(json);
887
+ };
888
+ let registerCommandHandler = (channelName, handler) => {
889
+ commandHandlers.contents[channelName] = handler;
890
+ let queue = pendingCommandQueues.contents[channelName];
891
+ if (queue === undefined) {
892
+ return;
893
+ }
894
+ let pending = queue.contents;
895
+ queue.contents = [];
896
+ pending.forEach(json => {
897
+ handler(json, undefined);
898
+ });
899
+ };
900
+ let registerQueryDb = (name, ops) => {
901
+ queryDbRegistry.contents[name] = ops;
902
+ };
903
+ let getQueryDb = name => queryDbRegistry.contents[name];
904
+ let registerQueryDbScan = (name, scan) => {
905
+ queryDbScanRegistry.contents[name] = scan;
906
+ };
907
+ let getQueryDbScan = name => queryDbScanRegistry.contents[name];
908
+ let registerQueryDbStream = (name, streamFn) => {
909
+ queryDbStreamRegistry.contents[name] = streamFn;
910
+ };
911
+ let getQueryDbStream = name => queryDbStreamRegistry.contents[name];
912
+ let registerEventLogReplay = (name, replay) => {
913
+ eventLogReplayRegistry.contents[name] = replay;
914
+ };
915
+ let getEventLogReplay = name => eventLogReplayRegistry.contents[name];
916
+ let registerDcbEventLogRead = (name, read) => {
917
+ dcbEventLogReadRegistry.contents[name] = read;
918
+ };
919
+ let getDcbEventLogRead = name => dcbEventLogReadRegistry.contents[name];
920
+ let stateChangeListeners = {
921
+ contents: {}
922
+ };
923
+ let subscribeToStateChanges = (name, callback) => {
924
+ let listeners = Stdlib_Option.getOr(stateChangeListeners.contents[name], []);
925
+ stateChangeListeners.contents[name] = listeners.concat([callback]);
926
+ };
927
+ let publishStateChange = (name, descriptor) => {
928
+ Stdlib_Option.getOr(stateChangeListeners.contents[name], []).forEach(cb => cb(descriptor));
929
+ };
930
+ let eventCollectorHandlers = {
931
+ contents: {}
932
+ };
933
+ let eventCollectorPendingTopics = {
934
+ contents: {}
935
+ };
936
+ let makeFireAndForgetHandler = handler => ((param, param$1, json) => {
937
+ handler(json, undefined);
938
+ return Promise.resolve();
939
+ });
940
+ let registerEventCollectorHandler = (ecName, handler) => {
941
+ eventCollectorHandlers.contents[ecName] = handler;
942
+ let topics = eventCollectorPendingTopics.contents[ecName];
943
+ if (topics !== undefined) {
944
+ topics.forEach(topicName => subscribeToEvents(topicName, makeFireAndForgetHandler(handler)));
945
+ return Stdlib_Dict.$$delete(eventCollectorPendingTopics.contents, ecName);
946
+ }
947
+ };
948
+ let subscribeEventCollectorToTopic = (ecName, topicName) => {
949
+ let handler = eventCollectorHandlers.contents[ecName];
950
+ if (handler !== undefined) {
951
+ return subscribeToEvents(topicName, makeFireAndForgetHandler(handler));
952
+ }
953
+ let pending = Stdlib_Option.getOr(eventCollectorPendingTopics.contents[ecName], []);
954
+ pending.push(topicName);
955
+ eventCollectorPendingTopics.contents[ecName] = pending;
956
+ };
957
+ let reset = () => {
958
+ let shutdownAll = Effect.map(Effect.all(Object.values(eventHubs.contents).map(hub => PubSub.shutdown(hub)), {
959
+ concurrency: "unbounded"
960
+ }), param => {});
961
+ Effect.runSync(shutdownAll);
962
+ eventHubs.contents = {};
963
+ subscriberCounts.contents = {};
964
+ commandHandlers.contents = {};
965
+ pendingCommandQueues.contents = {};
966
+ queryDbRegistry.contents = {};
967
+ queryDbScanRegistry.contents = {};
968
+ queryDbStreamRegistry.contents = {};
969
+ eventLogReplayRegistry.contents = {};
970
+ dcbEventLogReadRegistry.contents = {};
971
+ stateChangeListeners.contents = {};
972
+ eventCollectorHandlers.contents = {};
973
+ eventCollectorPendingTopics.contents = {};
974
+ };
975
+ return {
976
+ publishEvent: publishEvent,
977
+ subscribeToEvents: subscribeToEvents,
978
+ subscribeToEventStream: subscribeToEventStream,
979
+ dispatchCommand: dispatchCommand,
980
+ registerCommandHandler: registerCommandHandler,
981
+ registerQueryDb: registerQueryDb,
982
+ getQueryDb: getQueryDb,
983
+ registerQueryDbScan: registerQueryDbScan,
984
+ getQueryDbScan: getQueryDbScan,
985
+ registerQueryDbStream: registerQueryDbStream,
986
+ getQueryDbStream: getQueryDbStream,
987
+ registerEventLogReplay: registerEventLogReplay,
988
+ getEventLogReplay: getEventLogReplay,
989
+ registerDcbEventLogRead: registerDcbEventLogRead,
990
+ getDcbEventLogRead: getDcbEventLogRead,
991
+ publishStateChange: publishStateChange,
992
+ subscribeToStateChanges: subscribeToStateChanges,
993
+ registerEventCollectorHandler: registerEventCollectorHandler,
994
+ subscribeEventCollectorToTopic: subscribeEventCollectorToTopic,
995
+ reset: reset
996
+ };
997
+ }
998
+
999
+ export {
1000
+ pickSortKeyValue,
1001
+ makeStateChangeDescriptor,
1002
+ eventTapEnabled,
1003
+ eventTapSeq,
1004
+ seedEventTapSeq,
1005
+ emitEventTap,
1006
+ Impl,
1007
+ Make,
1008
+ MakeSilent,
1009
+ MakeBounded,
1010
+ }
1011
+ /* effect/Queue Not a pure module */