@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,242 @@
1
+ // In-memory QueryDb storage.
2
+ // Make(Bus) functor: registers ops and scan function in the Bus so that
3
+ // QueryDbResolvers_GraphQL and LocalQueryEngine can look up data by read model name.
4
+ //
5
+ // Storage model: dict<dict<JSON.t>> — partition key → sub-key → item.
6
+ // When no subIdField is configured, all items are stored under the implicit sub-key "".
7
+ //
8
+ // When BackendState is set to Sqlite, the `Make(Bus)` functor delegates to
9
+ // QueryDbStorage_Sqlite at `make` time so the same builder wiring serves
10
+ // both backends.
11
+
12
+ // Extract sub-key from an item's JSON using the given field name.
13
+ // Returns "" if the field is absent, not an object, or not a string.
14
+ let getSubKey = (item: JSON.t, subIdField: option<string>): string =>
15
+ switch subIdField {
16
+ | None => ""
17
+ | Some(field) =>
18
+ switch item->JSON.Decode.object {
19
+ | Some(obj) =>
20
+ switch obj->Dict.get(field) {
21
+ | Some(v) => v->JSON.Decode.string->Option.getOr("")
22
+ | None => ""
23
+ }
24
+ | None => ""
25
+ }
26
+ }
27
+
28
+ // Return items for a partition key, sorted alphabetically by sub-key.
29
+ let sortedItems = (store: dict<dict<JSON.t>>, partitionKey: string): array<JSON.t> =>
30
+ switch store->Dict.get(partitionKey) {
31
+ | None => []
32
+ | Some(subMap) =>
33
+ subMap
34
+ ->Dict.toArray
35
+ ->Array.toSorted(((a, _), (b, _)) => String.compare(a, b))
36
+ ->Array.map(((_, v)) => v)
37
+ }
38
+
39
+ // Flatten partition → subKey → item store to a flat array.
40
+ // Injects "id" attribute if not already present on each item.
41
+ let flattenStore = (store: dict<dict<JSON.t>>): array<JSON.t> =>
42
+ store
43
+ ->Dict.toArray
44
+ ->Array.flatMap(((id, subMap)) =>
45
+ subMap
46
+ ->Dict.toArray
47
+ ->Array.toSorted(((a, _), (b, _)) => String.compare(a, b))
48
+ ->Array.map(((_, item)) => {
49
+ let obj = item->JSON.Decode.object->Option.getOr(Dict.make())
50
+ if !(obj->Dict.get("id")->Option.isSome) {
51
+ let copy = Dict.make()
52
+ obj->Dict.toArray->Array.forEach(((k, v)) => copy->Dict.set(k, v))
53
+ copy->Dict.set("id", JSON.Encode.string(id))
54
+ JSON.Encode.object(copy)
55
+ } else {
56
+ item
57
+ }
58
+ })
59
+ )
60
+
61
+ module Make = (Bus: LocalBus.T) => {
62
+ open ReventlessCore
63
+
64
+ type api = unit
65
+ type role = unit
66
+
67
+ let sqliteBusCallbacks: QueryDbStorage_Sqlite.busCallbacks = {
68
+ publishStateChange: Bus.publishStateChange,
69
+ registerQueryDb: Bus.registerQueryDb,
70
+ registerQueryDbScan: Bus.registerQueryDbScan,
71
+ registerQueryDbStream: Bus.registerQueryDbStream,
72
+ }
73
+
74
+ let makeMemory: QueryDb_Adapter.storageMaker<unit, unit> = (
75
+ ~name,
76
+ ~indexes as _,
77
+ ~subIdField=?,
78
+ ~ttl as _=?,
79
+ ~api as _,
80
+ ~apiRole as _,
81
+ ~opts as _,
82
+ ) => {
83
+ let store: ref<dict<dict<JSON.t>>> = ref(Dict.make())
84
+ let allItems: ref<array<JSON.t>> = ref([])
85
+
86
+ let syncAll = () => {
87
+ allItems.contents = flattenStore(store.contents)
88
+ }
89
+
90
+ let getOrCreateSubMap = (partitionKey: string): dict<JSON.t> =>
91
+ switch store.contents->Dict.get(partitionKey) {
92
+ | Some(m) => m
93
+ | None =>
94
+ let m = Dict.make()
95
+ store.contents->Dict.set(partitionKey, m)
96
+ m
97
+ }
98
+
99
+ let load: QueryDb.load<string, JSON.t> = async id =>
100
+ Ok(sortedItems(store.contents, id))
101
+
102
+ let loadStream: QueryDb.loadStream<string, JSON.t> = id =>
103
+ sortedItems(store.contents, id)->Stream.fromIterable
104
+
105
+ // Entity key matches the AWS StateTopic Lambda output (Phase 1):
106
+ // single-key tables → partition value; composite tables → `pk-sk`.
107
+ let entityKeyFor = (id: string, subKey: string): string =>
108
+ switch subIdField {
109
+ | Some(_) => id ++ "-" ++ subKey
110
+ | None => id
111
+ }
112
+
113
+ let publishUpdated = (id: string, state: JSON.t) => {
114
+ let subKey = getSubKey(state, subIdField)
115
+ let descriptor = LocalBus.makeStateChangeDescriptor(
116
+ ~changeKind="Updated",
117
+ ~id=entityKeyFor(id, subKey),
118
+ ~state=Some(state),
119
+ )
120
+ Bus.publishStateChange(~name, ~descriptor)
121
+ }
122
+
123
+ let publishRemoved = (id: string, subKey: string) => {
124
+ let descriptor = LocalBus.makeStateChangeDescriptor(
125
+ ~changeKind="Removed",
126
+ ~id=entityKeyFor(id, subKey),
127
+ ~state=None,
128
+ )
129
+ Bus.publishStateChange(~name, ~descriptor)
130
+ }
131
+
132
+ let save: QueryDb.save<string, JSON.t> = async (id, state, _saveMode, _ttl) => {
133
+ let subKey = getSubKey(state, subIdField)
134
+ let subMap = getOrCreateSubMap(id)
135
+ subMap->Dict.set(subKey, state)
136
+ syncAll()
137
+ publishUpdated(id, state)
138
+ Ok()
139
+ }
140
+
141
+ let saveBatch: QueryDb.saveBatch<string, JSON.t> = async batch => {
142
+ batch->Array.forEach(((id, state, _ttl)) => {
143
+ let subKey = getSubKey(state, subIdField)
144
+ let subMap = getOrCreateSubMap(id)
145
+ subMap->Dict.set(subKey, state)
146
+ })
147
+ syncAll()
148
+ // Notify subscribers for each saved item
149
+ batch->Array.forEach(((id, state, _)) => publishUpdated(id, state))
150
+ Ok()
151
+ }
152
+
153
+ let count: QueryDb.count<string> = async (_id, _fieldName, inc) => Ok(inc)
154
+
155
+ let delete: QueryDb.delete<string> = async (id, subIdOpt) => {
156
+ switch subIdOpt {
157
+ | None =>
158
+ let subKeys = switch store.contents->Dict.get(id) {
159
+ | Some(subMap) => subMap->Dict.keysToArray
160
+ | None => []
161
+ }
162
+ store.contents->Dict.delete(id)
163
+ syncAll()
164
+ subKeys->Array.forEach(subKey => publishRemoved(id, subKey))
165
+ | Some((_, subValue)) =>
166
+ switch store.contents->Dict.get(id) {
167
+ | Some(subMap) =>
168
+ let hadIt = subMap->Dict.get(subValue)->Option.isSome
169
+ subMap->Dict.delete(subValue)
170
+ syncAll()
171
+ if hadIt {
172
+ publishRemoved(id, subValue)
173
+ }
174
+ | None => syncAll()
175
+ }
176
+ }
177
+ Ok()
178
+ }
179
+
180
+ let deleteBatch: QueryDb.deleteBatch<string> = async ids => {
181
+ let removed: array<(string, string)> = []
182
+ ids->Array.forEach(((id, subIdOpt)) => {
183
+ switch subIdOpt {
184
+ | None =>
185
+ switch store.contents->Dict.get(id) {
186
+ | Some(subMap) =>
187
+ subMap->Dict.keysToArray->Array.forEach(sk => removed->Array.push((id, sk)))
188
+ | None => ()
189
+ }
190
+ store.contents->Dict.delete(id)
191
+ | Some((_, subValue)) =>
192
+ switch store.contents->Dict.get(id) {
193
+ | Some(subMap) =>
194
+ if subMap->Dict.get(subValue)->Option.isSome {
195
+ removed->Array.push((id, subValue))
196
+ }
197
+ subMap->Dict.delete(subValue)
198
+ | None => ()
199
+ }
200
+ }
201
+ })
202
+ syncAll()
203
+ removed->Array.forEach(((id, subKey)) => publishRemoved(id, subKey))
204
+ Ok()
205
+ }
206
+
207
+ let ops: QueryDb_Adapter.operations = {
208
+ load,
209
+ loadStream,
210
+ save,
211
+ saveBatch,
212
+ count,
213
+ delete,
214
+ deleteBatch,
215
+ }
216
+
217
+ Bus.registerQueryDb(name, ops)
218
+ Bus.registerQueryDbScan(name, () => allItems.contents)
219
+ Bus.registerQueryDbStream(name, () => allItems.contents->Stream.fromIterable)
220
+
221
+ {
222
+ resources: [],
223
+ dataSourceName: ""->Pulumi.Output.make,
224
+ operations: Pulumi.Output.make(ops),
225
+ }
226
+ }
227
+
228
+ let make: QueryDb_Adapter.storageMaker<unit, unit> = (
229
+ ~name,
230
+ ~indexes,
231
+ ~subIdField=?,
232
+ ~ttl=?,
233
+ ~api,
234
+ ~apiRole,
235
+ ~opts,
236
+ ) =>
237
+ switch BackendState.getDb() {
238
+ | Some(db) =>
239
+ QueryDbStorage_Sqlite.makeStorage(~db, ~bus=sqliteBusCallbacks, ~name, ~indexes, ~subIdField)
240
+ | None => makeMemory(~name, ~indexes, ~subIdField?, ~ttl?, ~api, ~apiRole, ~opts)
241
+ }
242
+ }
@@ -0,0 +1,241 @@
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 Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Stream from "effect/Stream";
7
+ import * as Pulumi from "@pulumi/pulumi";
8
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
9
+ import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
10
+ import * as LocalBus$ReventlessLocal from "../LocalBus.res.mjs";
11
+ import * as BackendState$ReventlessLocal from "../BackendState.res.mjs";
12
+ import * as QueryDbStorage_Sqlite$ReventlessLocal from "./QueryDbStorage_Sqlite.res.mjs";
13
+
14
+ function getSubKey(item, subIdField) {
15
+ if (subIdField === undefined) {
16
+ return "";
17
+ }
18
+ let obj = Stdlib_JSON.Decode.object(item);
19
+ if (obj === undefined) {
20
+ return "";
21
+ }
22
+ let v = obj[subIdField];
23
+ if (v !== undefined) {
24
+ return Stdlib_Option.getOr(Stdlib_JSON.Decode.string(v), "");
25
+ } else {
26
+ return "";
27
+ }
28
+ }
29
+
30
+ function sortedItems(store, partitionKey) {
31
+ let subMap = store[partitionKey];
32
+ if (subMap !== undefined) {
33
+ return Object.entries(subMap).toSorted((param, param$1) => Primitive_string.compare(param[0], param$1[0])).map(param => param[1]);
34
+ } else {
35
+ return [];
36
+ }
37
+ }
38
+
39
+ function flattenStore(store) {
40
+ return Object.entries(store).flatMap(param => {
41
+ let id = param[0];
42
+ return Object.entries(param[1]).toSorted((param, param$1) => Primitive_string.compare(param[0], param$1[0])).map(param => {
43
+ let item = param[1];
44
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(item), {});
45
+ if (Stdlib_Option.isSome(obj["id"])) {
46
+ return item;
47
+ }
48
+ let copy = {};
49
+ Object.entries(obj).forEach(param => {
50
+ copy[param[0]] = param[1];
51
+ });
52
+ copy["id"] = id;
53
+ return copy;
54
+ });
55
+ });
56
+ }
57
+
58
+ function Make(Bus) {
59
+ let sqliteBusCallbacks_publishStateChange = Bus.publishStateChange;
60
+ let sqliteBusCallbacks_registerQueryDb = Bus.registerQueryDb;
61
+ let sqliteBusCallbacks_registerQueryDbScan = Bus.registerQueryDbScan;
62
+ let sqliteBusCallbacks_registerQueryDbStream = Bus.registerQueryDbStream;
63
+ let sqliteBusCallbacks = {
64
+ publishStateChange: sqliteBusCallbacks_publishStateChange,
65
+ registerQueryDb: sqliteBusCallbacks_registerQueryDb,
66
+ registerQueryDbScan: sqliteBusCallbacks_registerQueryDbScan,
67
+ registerQueryDbStream: sqliteBusCallbacks_registerQueryDbStream
68
+ };
69
+ let makeMemory = (name, param, subIdField, param$1, param$2, param$3, param$4) => {
70
+ let store = {
71
+ contents: {}
72
+ };
73
+ let allItems = {
74
+ contents: []
75
+ };
76
+ let syncAll = () => {
77
+ allItems.contents = flattenStore(store.contents);
78
+ };
79
+ let getOrCreateSubMap = partitionKey => {
80
+ let m = store.contents[partitionKey];
81
+ if (m !== undefined) {
82
+ return m;
83
+ }
84
+ let m$1 = {};
85
+ store.contents[partitionKey] = m$1;
86
+ return m$1;
87
+ };
88
+ let load = async id => ({
89
+ TAG: "Ok",
90
+ _0: sortedItems(store.contents, id)
91
+ });
92
+ let loadStream = id => Stream.fromIterable(sortedItems(store.contents, id));
93
+ let entityKeyFor = (id, subKey) => {
94
+ if (subIdField !== undefined) {
95
+ return id + "-" + subKey;
96
+ } else {
97
+ return id;
98
+ }
99
+ };
100
+ let publishUpdated = (id, state) => {
101
+ let subKey = getSubKey(state, subIdField);
102
+ let descriptor = LocalBus$ReventlessLocal.makeStateChangeDescriptor("Updated", entityKeyFor(id, subKey), state);
103
+ Bus.publishStateChange(name, descriptor);
104
+ };
105
+ let publishRemoved = (id, subKey) => {
106
+ let descriptor = LocalBus$ReventlessLocal.makeStateChangeDescriptor("Removed", entityKeyFor(id, subKey), undefined);
107
+ Bus.publishStateChange(name, descriptor);
108
+ };
109
+ let save = async (id, state, _saveMode, _ttl) => {
110
+ let subKey = getSubKey(state, subIdField);
111
+ let subMap = getOrCreateSubMap(id);
112
+ subMap[subKey] = state;
113
+ syncAll();
114
+ publishUpdated(id, state);
115
+ return {
116
+ TAG: "Ok",
117
+ _0: undefined
118
+ };
119
+ };
120
+ let saveBatch = async batch => {
121
+ batch.forEach(param => {
122
+ let state = param[1];
123
+ let subKey = getSubKey(state, subIdField);
124
+ let subMap = getOrCreateSubMap(param[0]);
125
+ subMap[subKey] = state;
126
+ });
127
+ syncAll();
128
+ batch.forEach(param => publishUpdated(param[0], param[1]));
129
+ return {
130
+ TAG: "Ok",
131
+ _0: undefined
132
+ };
133
+ };
134
+ let count = async (_id, _fieldName, inc) => ({
135
+ TAG: "Ok",
136
+ _0: inc
137
+ });
138
+ let $$delete = async (id, subIdOpt) => {
139
+ if (subIdOpt !== undefined) {
140
+ let subValue = subIdOpt[1];
141
+ let subMap = store.contents[id];
142
+ if (subMap !== undefined) {
143
+ let hadIt = Stdlib_Option.isSome(subMap[subValue]);
144
+ Stdlib_Dict.$$delete(subMap, subValue);
145
+ syncAll();
146
+ if (hadIt) {
147
+ publishRemoved(id, subValue);
148
+ }
149
+ } else {
150
+ syncAll();
151
+ }
152
+ } else {
153
+ let subMap$1 = store.contents[id];
154
+ let subKeys = subMap$1 !== undefined ? Object.keys(subMap$1) : [];
155
+ Stdlib_Dict.$$delete(store.contents, id);
156
+ syncAll();
157
+ subKeys.forEach(subKey => publishRemoved(id, subKey));
158
+ }
159
+ return {
160
+ TAG: "Ok",
161
+ _0: undefined
162
+ };
163
+ };
164
+ let deleteBatch = async ids => {
165
+ let removed = [];
166
+ ids.forEach(param => {
167
+ let subIdOpt = param[1];
168
+ let id = param[0];
169
+ if (subIdOpt !== undefined) {
170
+ let subValue = subIdOpt[1];
171
+ let subMap = store.contents[id];
172
+ if (subMap !== undefined) {
173
+ if (Stdlib_Option.isSome(subMap[subValue])) {
174
+ removed.push([
175
+ id,
176
+ subValue
177
+ ]);
178
+ }
179
+ return Stdlib_Dict.$$delete(subMap, subValue);
180
+ } else {
181
+ return;
182
+ }
183
+ }
184
+ let subMap$1 = store.contents[id];
185
+ if (subMap$1 !== undefined) {
186
+ Object.keys(subMap$1).forEach(sk => {
187
+ removed.push([
188
+ id,
189
+ sk
190
+ ]);
191
+ });
192
+ }
193
+ Stdlib_Dict.$$delete(store.contents, id);
194
+ });
195
+ syncAll();
196
+ removed.forEach(param => publishRemoved(param[0], param[1]));
197
+ return {
198
+ TAG: "Ok",
199
+ _0: undefined
200
+ };
201
+ };
202
+ let ops = {
203
+ load: load,
204
+ loadStream: loadStream,
205
+ save: save,
206
+ saveBatch: saveBatch,
207
+ count: count,
208
+ delete: $$delete,
209
+ deleteBatch: deleteBatch
210
+ };
211
+ Bus.registerQueryDb(name, ops);
212
+ Bus.registerQueryDbScan(name, () => allItems.contents);
213
+ Bus.registerQueryDbStream(name, () => Stream.fromIterable(allItems.contents));
214
+ return {
215
+ resources: [],
216
+ dataSourceName: Pulumi.output(""),
217
+ operations: Pulumi.output(ops)
218
+ };
219
+ };
220
+ let make = (name, indexes, subIdField, ttl, api, apiRole, opts) => {
221
+ let db = BackendState$ReventlessLocal.getDb();
222
+ if (db !== undefined) {
223
+ return QueryDbStorage_Sqlite$ReventlessLocal.makeStorage(Primitive_option.valFromOption(db), sqliteBusCallbacks, name, indexes, subIdField);
224
+ } else {
225
+ return makeMemory(name, indexes, subIdField, ttl, api, apiRole, opts);
226
+ }
227
+ };
228
+ return {
229
+ sqliteBusCallbacks: sqliteBusCallbacks,
230
+ makeMemory: makeMemory,
231
+ make: make
232
+ };
233
+ }
234
+
235
+ export {
236
+ getSubKey,
237
+ sortedItems,
238
+ flattenStore,
239
+ Make,
240
+ }
241
+ /* effect/Stream Not a pure module */