@reventlessdev/reventless-core 3.0.0-alpha.134

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 (502) hide show
  1. package/CHANGELOG.md +1355 -0
  2. package/LICENSE +202 -0
  3. package/README.md +173 -0
  4. package/__mocks__/emptyModule.js +2 -0
  5. package/jest.setup.cjs +5 -0
  6. package/package.json +73 -0
  7. package/rescript.json +41 -0
  8. package/scripts/deploy.sh +6 -0
  9. package/scripts/post-deploy.sh +5 -0
  10. package/scripts/pre-deploy.sh +18 -0
  11. package/scripts/pulumi-up.sh +30 -0
  12. package/src/Behavior.res +18 -0
  13. package/src/Behavior.res.mjs +2 -0
  14. package/src/ComponentType.res +125 -0
  15. package/src/ComponentType.res.mjs +199 -0
  16. package/src/Env.res +5 -0
  17. package/src/Env.res.mjs +2 -0
  18. package/src/Mapper.res +36 -0
  19. package/src/Mapper.res.mjs +18 -0
  20. package/src/Mapper1toN.res +107 -0
  21. package/src/Mapper1toN.res.mjs +2 -0
  22. package/src/MapperNto1.res +78 -0
  23. package/src/MapperNto1.res.mjs +35 -0
  24. package/src/Message.res +353 -0
  25. package/src/Message.res.mjs +418 -0
  26. package/src/PluginRuntimeOperations.res +15 -0
  27. package/src/PluginRuntimeOperations.res.mjs +2 -0
  28. package/src/Projection.res +447 -0
  29. package/src/Projection.res.mjs +712 -0
  30. package/src/ProjectionMapper.res +44 -0
  31. package/src/ProjectionMapper.res.mjs +51 -0
  32. package/src/RequestContext.res +42 -0
  33. package/src/RequestContext.res.mjs +39 -0
  34. package/src/adapter/Adapter.res +178 -0
  35. package/src/adapter/Adapter.res.mjs +201 -0
  36. package/src/adapter/AdapterDeploytime.res +56 -0
  37. package/src/adapter/AdapterDeploytime.res.mjs +42 -0
  38. package/src/adapter/Auth/Auth_Adapter.res +42 -0
  39. package/src/adapter/Auth/Auth_Adapter.res.mjs +2 -0
  40. package/src/adapter/Runtime/AggregateRuntime_Builder.res +22 -0
  41. package/src/adapter/Runtime/AggregateRuntime_Builder.res.mjs +2 -0
  42. package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res +259 -0
  43. package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res.mjs +190 -0
  44. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +92 -0
  45. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +59 -0
  46. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +52 -0
  47. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +49 -0
  48. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +64 -0
  49. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +59 -0
  50. package/src/adapter/Runtime/EventCollectorRuntime_Builder.res +11 -0
  51. package/src/adapter/Runtime/EventCollectorRuntime_Builder.res.mjs +2 -0
  52. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +46 -0
  53. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +40 -0
  54. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +204 -0
  55. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +150 -0
  56. package/src/adapter/Runtime/ExtensionPointRuntime_Builder.res +18 -0
  57. package/src/adapter/Runtime/ExtensionPointRuntime_Builder.res.mjs +2 -0
  58. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +36 -0
  59. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +28 -0
  60. package/src/adapter/Runtime/PluginRuntime_Builder.res +23 -0
  61. package/src/adapter/Runtime/PluginRuntime_Builder.res.mjs +2 -0
  62. package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res +97 -0
  63. package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs +62 -0
  64. package/src/adapter/Runtime/PluginRuntime_Builder_Single.res +89 -0
  65. package/src/adapter/Runtime/PluginRuntime_Builder_Single.res.mjs +62 -0
  66. package/src/adapter/Runtime/Runtime.res +106 -0
  67. package/src/adapter/Runtime/Runtime.res.mjs +22 -0
  68. package/src/adapter/Runtime/TaskRuntime_Builder.res +32 -0
  69. package/src/adapter/Runtime/TaskRuntime_Builder.res.mjs +2 -0
  70. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +42 -0
  71. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +29 -0
  72. package/src/admin/AdminApi.res +88 -0
  73. package/src/admin/AdminApi.res.mjs +89 -0
  74. package/src/admin/Admin_Callback.res +27 -0
  75. package/src/admin/Admin_Callback.res.mjs +20 -0
  76. package/src/admin/Platform_Admin.res +402 -0
  77. package/src/admin/Platform_Admin.res.mjs +250 -0
  78. package/src/admin/Platform_Admin_Structure.res +125 -0
  79. package/src/admin/Platform_Admin_Structure.res.mjs +182 -0
  80. package/src/admin/Platform_ComponentDefinitionsApi.res +160 -0
  81. package/src/admin/Platform_ComponentDefinitionsApi.res.mjs +299 -0
  82. package/src/admin/Platform_UIFragmentsApi.res +55 -0
  83. package/src/admin/Platform_UIFragmentsApi.res.mjs +124 -0
  84. package/src/admin/UIFragmentRegistryProjection.res +43 -0
  85. package/src/admin/UIFragmentRegistryProjection.res.mjs +81 -0
  86. package/src/admin/UIFragmentRegistryReadModelSpec.res +13 -0
  87. package/src/admin/UIFragmentRegistryReadModelSpec.res.mjs +40 -0
  88. package/src/components/Aggregate/Aggregate.res +96 -0
  89. package/src/components/Aggregate/Aggregate.res.mjs +82 -0
  90. package/src/components/Aggregate/Aggregate_Builder.res +175 -0
  91. package/src/components/Aggregate/Aggregate_Builder.res.mjs +119 -0
  92. package/src/components/Aggregate/Aggregate_Callback.res +273 -0
  93. package/src/components/Aggregate/Aggregate_Callback.res.mjs +208 -0
  94. package/src/components/Api/ApiAllowedStatesHelpers.res +19 -0
  95. package/src/components/Api/ApiAllowedStatesHelpers.res.mjs +16 -0
  96. package/src/components/Api/ApiNoApiHelpers.res +13 -0
  97. package/src/components/Api/ApiNoApiHelpers.res.mjs +29 -0
  98. package/src/components/Api/Api_Builder.res +40 -0
  99. package/src/components/Api/Api_Builder.res.mjs +33 -0
  100. package/src/components/Api/Api_Naming.res +92 -0
  101. package/src/components/Api/Api_Naming.res.mjs +103 -0
  102. package/src/components/Api/Api_Operations.res +13 -0
  103. package/src/components/Api/Api_Operations.res.mjs +12 -0
  104. package/src/components/Api/GraphQL_FragmentGenerator.res +612 -0
  105. package/src/components/Api/GraphQL_FragmentGenerator.res.mjs +503 -0
  106. package/src/components/Api/GraphQL_SchemaInspector.res +156 -0
  107. package/src/components/Api/GraphQL_SchemaInspector.res.mjs +123 -0
  108. package/src/components/Api/GraphQL_Stitcher.res +271 -0
  109. package/src/components/Api/GraphQL_Stitcher.res.mjs +229 -0
  110. package/src/components/Api/MCP_SchemaGenerator.res +185 -0
  111. package/src/components/Api/MCP_SchemaGenerator.res.mjs +146 -0
  112. package/src/components/Api/SchemaType.res +126 -0
  113. package/src/components/Api/SchemaType.res.mjs +143 -0
  114. package/src/components/Api/SuryToJsonSchema.res +142 -0
  115. package/src/components/Api/SuryToJsonSchema.res.mjs +210 -0
  116. package/src/components/AutomationSlice/AutomationSlice.res +39 -0
  117. package/src/components/AutomationSlice/AutomationSlice.res.mjs +24 -0
  118. package/src/components/AutomationSlice/AutomationSlice_Builder.res +207 -0
  119. package/src/components/AutomationSlice/AutomationSlice_Builder.res.mjs +123 -0
  120. package/src/components/AutomationSlice/AutomationSlice_Callback.res +212 -0
  121. package/src/components/AutomationSlice/AutomationSlice_Callback.res.mjs +189 -0
  122. package/src/components/Builder_Helpers.res +196 -0
  123. package/src/components/Builder_Helpers.res.mjs +142 -0
  124. package/src/components/Cloner.res +84 -0
  125. package/src/components/Cloner.res.mjs +88 -0
  126. package/src/components/CommandGenerator/CommandGenerator.res +54 -0
  127. package/src/components/CommandGenerator/CommandGenerator.res.mjs +15 -0
  128. package/src/components/CommandGenerator/CommandGenerator_Adapter.res +22 -0
  129. package/src/components/CommandGenerator/CommandGenerator_Adapter.res.mjs +2 -0
  130. package/src/components/CommandGenerator/CommandGenerator_Builder.res +70 -0
  131. package/src/components/CommandGenerator/CommandGenerator_Builder.res.mjs +68 -0
  132. package/src/components/CommandGenerator/CommandGenerator_Callback.res +191 -0
  133. package/src/components/CommandGenerator/CommandGenerator_Callback.res.mjs +161 -0
  134. package/src/components/CommandTopic/CommandTopic.res +79 -0
  135. package/src/components/CommandTopic/CommandTopic.res.mjs +68 -0
  136. package/src/components/CommandTopic/CommandTopic_Adapter.res +53 -0
  137. package/src/components/CommandTopic/CommandTopic_Adapter.res.mjs +2 -0
  138. package/src/components/CommandTopic/CommandTopic_Builder.res +146 -0
  139. package/src/components/CommandTopic/CommandTopic_Builder.res.mjs +127 -0
  140. package/src/components/CommandTopic/CommandTopic_Callback.res +38 -0
  141. package/src/components/CommandTopic/CommandTopic_Callback.res.mjs +49 -0
  142. package/src/components/CommandTopic/CommandTopic_Helpers.res +176 -0
  143. package/src/components/CommandTopic/CommandTopic_Helpers.res.mjs +195 -0
  144. package/src/components/CommandTopic/CommandTopic_Operations.res +40 -0
  145. package/src/components/CommandTopic/CommandTopic_Operations.res.mjs +49 -0
  146. package/src/components/Component.res +1 -0
  147. package/src/components/Component.res.mjs +34 -0
  148. package/src/components/Component.resi +1 -0
  149. package/src/components/Counter/Counter.res +47 -0
  150. package/src/components/Counter/Counter.res.mjs +55 -0
  151. package/src/components/Counter/Counter_Adapter.res +18 -0
  152. package/src/components/Counter/Counter_Adapter.res.mjs +2 -0
  153. package/src/components/Counter/Counter_Builder.res +142 -0
  154. package/src/components/Counter/Counter_Builder.res.mjs +112 -0
  155. package/src/components/Counter/Counter_Callback.res +94 -0
  156. package/src/components/Counter/Counter_Callback.res.mjs +70 -0
  157. package/src/components/Counter/Counter_Operations.res +70 -0
  158. package/src/components/Counter/Counter_Operations.res.mjs +91 -0
  159. package/src/components/Dcb/Dcb_Builder.res +971 -0
  160. package/src/components/Dcb/Dcb_Builder.res.mjs +572 -0
  161. package/src/components/DcbEventLog/DcbEventLog.res +43 -0
  162. package/src/components/DcbEventLog/DcbEventLog.res.mjs +24 -0
  163. package/src/components/DcbEventLog/DcbEventLog_Adapter.res +57 -0
  164. package/src/components/DcbEventLog/DcbEventLog_Adapter.res.mjs +2 -0
  165. package/src/components/DcbEventLog/DcbEventLog_Builder.res +72 -0
  166. package/src/components/DcbEventLog/DcbEventLog_Builder.res.mjs +67 -0
  167. package/src/components/DcbEventLog/DcbEventLog_Operations.res +160 -0
  168. package/src/components/DcbEventLog/DcbEventLog_Operations.res.mjs +121 -0
  169. package/src/components/EventCollector/EventCollector.res +34 -0
  170. package/src/components/EventCollector/EventCollector.res.mjs +9 -0
  171. package/src/components/EventCollector/EventCollector_Adapter.res +45 -0
  172. package/src/components/EventCollector/EventCollector_Adapter.res.mjs +2 -0
  173. package/src/components/EventCollector/EventCollector_Builder.res +91 -0
  174. package/src/components/EventCollector/EventCollector_Builder.res.mjs +64 -0
  175. package/src/components/EventLog/EventLog.res +27 -0
  176. package/src/components/EventLog/EventLog.res.mjs +13 -0
  177. package/src/components/EventLog/EventLog_Adapter.res +15 -0
  178. package/src/components/EventLog/EventLog_Adapter.res.mjs +2 -0
  179. package/src/components/EventLog/EventLog_Builder.res +65 -0
  180. package/src/components/EventLog/EventLog_Builder.res.mjs +57 -0
  181. package/src/components/EventLog/EventLog_Operations.res +209 -0
  182. package/src/components/EventLog/EventLog_Operations.res.mjs +202 -0
  183. package/src/components/EventLog/EventPublish_Callback.res +29 -0
  184. package/src/components/EventLog/EventPublish_Callback.res.mjs +32 -0
  185. package/src/components/EventMapper/EventMapper.res +72 -0
  186. package/src/components/EventMapper/EventMapper.res.mjs +54 -0
  187. package/src/components/EventMapper/EventMapper_Builder.res +128 -0
  188. package/src/components/EventMapper/EventMapper_Builder.res.mjs +81 -0
  189. package/src/components/EventMapper/EventMapper_Callback.res +323 -0
  190. package/src/components/EventMapper/EventMapper_Callback.res.mjs +231 -0
  191. package/src/components/EventTopic/EventTopic.res +69 -0
  192. package/src/components/EventTopic/EventTopic.res.mjs +50 -0
  193. package/src/components/EventTopic/EventTopic_Adapter.res +15 -0
  194. package/src/components/EventTopic/EventTopic_Adapter.res.mjs +2 -0
  195. package/src/components/EventTopic/EventTopic_Builder.res +53 -0
  196. package/src/components/EventTopic/EventTopic_Builder.res.mjs +46 -0
  197. package/src/components/EventTopic/EventTopic_Operations.res +37 -0
  198. package/src/components/EventTopic/EventTopic_Operations.res.mjs +39 -0
  199. package/src/components/Extension/Extension.res +32 -0
  200. package/src/components/Extension/Extension.res.mjs +9 -0
  201. package/src/components/Extension/Extension_Builder.res +82 -0
  202. package/src/components/Extension/Extension_Builder.res.mjs +57 -0
  203. package/src/components/Extension/Extension_Operations.res +203 -0
  204. package/src/components/Extension/Extension_Operations.res.mjs +154 -0
  205. package/src/components/ExtensionPoint/ExtensionPoint.res +49 -0
  206. package/src/components/ExtensionPoint/ExtensionPoint.res.mjs +25 -0
  207. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res +163 -0
  208. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res.mjs +113 -0
  209. package/src/components/ExtensionPoint/ExtensionPoint_Callback.res +110 -0
  210. package/src/components/ExtensionPoint/ExtensionPoint_Callback.res.mjs +76 -0
  211. package/src/components/ExtensionPoint/ExtensionPoint_Operations.res +146 -0
  212. package/src/components/ExtensionPoint/ExtensionPoint_Operations.res.mjs +122 -0
  213. package/src/components/Heartbeat/Heartbeat.res +25 -0
  214. package/src/components/Heartbeat/Heartbeat.res.mjs +9 -0
  215. package/src/components/Heartbeat/Heartbeat_Adapter.res +14 -0
  216. package/src/components/Heartbeat/Heartbeat_Adapter.res.mjs +2 -0
  217. package/src/components/Heartbeat/Heartbeat_Builder.res +43 -0
  218. package/src/components/Heartbeat/Heartbeat_Builder.res.mjs +47 -0
  219. package/src/components/Heartbeat/Heartbeat_Callback.res +32 -0
  220. package/src/components/Heartbeat/Heartbeat_Callback.res.mjs +40 -0
  221. package/src/components/InboundTranslationSlice/InboundTranslationSlice.res +34 -0
  222. package/src/components/InboundTranslationSlice/InboundTranslationSlice.res.mjs +24 -0
  223. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res +98 -0
  224. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res.mjs +87 -0
  225. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res +191 -0
  226. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res.mjs +175 -0
  227. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice.res +35 -0
  228. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice.res.mjs +24 -0
  229. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res +181 -0
  230. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res.mjs +137 -0
  231. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res +173 -0
  232. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res.mjs +173 -0
  233. package/src/components/QueryDb/QueryDb.res +74 -0
  234. package/src/components/QueryDb/QueryDb.res.mjs +37 -0
  235. package/src/components/QueryDb/QueryDb_Adapter.res +78 -0
  236. package/src/components/QueryDb/QueryDb_Adapter.res.mjs +17 -0
  237. package/src/components/QueryDb/QueryDb_Builder.res +76 -0
  238. package/src/components/QueryDb/QueryDb_Builder.res.mjs +53 -0
  239. package/src/components/QueryDb/QueryDb_Callback.res +18 -0
  240. package/src/components/QueryDb/QueryDb_Callback.res.mjs +21 -0
  241. package/src/components/QueryDb/QueryDb_Operations.res +116 -0
  242. package/src/components/QueryDb/QueryDb_Operations.res.mjs +165 -0
  243. package/src/components/ReadModel/ReadModel.res +42 -0
  244. package/src/components/ReadModel/ReadModel.res.mjs +27 -0
  245. package/src/components/ReadModel/ReadModel_Builder.res +155 -0
  246. package/src/components/ReadModel/ReadModel_Builder.res.mjs +101 -0
  247. package/src/components/ReadModel/ReadModel_Callback.res +48 -0
  248. package/src/components/ReadModel/ReadModel_Callback.res.mjs +48 -0
  249. package/src/components/Scheduler/Scheduler.res +13 -0
  250. package/src/components/Scheduler/Scheduler.res.mjs +9 -0
  251. package/src/components/Scheduler/Scheduler_Adapter.res +13 -0
  252. package/src/components/Scheduler/Scheduler_Adapter.res.mjs +2 -0
  253. package/src/components/Scheduler/Scheduler_Builder.res +19 -0
  254. package/src/components/Scheduler/Scheduler_Builder.res.mjs +29 -0
  255. package/src/components/SideEffectHandler/SideEffectHandler.res +30 -0
  256. package/src/components/SideEffectHandler/SideEffectHandler.res.mjs +12 -0
  257. package/src/components/SideEffectHandler/SideEffectHandler_Builder.res +117 -0
  258. package/src/components/SideEffectHandler/SideEffectHandler_Builder.res.mjs +64 -0
  259. package/src/components/SideEffectHandler/SideEffectHandler_Callback.res +116 -0
  260. package/src/components/SideEffectHandler/SideEffectHandler_Callback.res.mjs +95 -0
  261. package/src/components/StateChangeSlice/StateChangeSlice.res +38 -0
  262. package/src/components/StateChangeSlice/StateChangeSlice.res.mjs +17 -0
  263. package/src/components/StateChangeSlice/StateChangeSlice_Builder.res +91 -0
  264. package/src/components/StateChangeSlice/StateChangeSlice_Builder.res.mjs +81 -0
  265. package/src/components/StateChangeSlice/StateChangeSlice_Callback.res +412 -0
  266. package/src/components/StateChangeSlice/StateChangeSlice_Callback.res.mjs +299 -0
  267. package/src/components/StateTopic.res +91 -0
  268. package/src/components/StateTopic.res.mjs +41 -0
  269. package/src/components/StateViewSlice/StateViewSlice.res +33 -0
  270. package/src/components/StateViewSlice/StateViewSlice.res.mjs +24 -0
  271. package/src/components/StateViewSlice/StateViewSlice_Builder.res +176 -0
  272. package/src/components/StateViewSlice/StateViewSlice_Builder.res.mjs +134 -0
  273. package/src/components/StateViewSlice/StateViewSlice_Callback.res +64 -0
  274. package/src/components/StateViewSlice/StateViewSlice_Callback.res.mjs +56 -0
  275. package/src/components/Task/Task.res +81 -0
  276. package/src/components/Task/Task.res.mjs +51 -0
  277. package/src/components/Task/Task_Adapter.res +31 -0
  278. package/src/components/Task/Task_Adapter.res.mjs +2 -0
  279. package/src/components/Task/Task_Builder.res +223 -0
  280. package/src/components/Task/Task_Builder.res.mjs +115 -0
  281. package/src/plugin/api/PluginBaseFragment.res +104 -0
  282. package/src/plugin/api/PluginBaseFragment.res.mjs +64 -0
  283. package/src/plugin/component/Plugin.res +100 -0
  284. package/src/plugin/component/Plugin.res.mjs +61 -0
  285. package/src/plugin/component/Plugin_Builder.res +1017 -0
  286. package/src/plugin/component/Plugin_Builder.res.mjs +608 -0
  287. package/src/plugin/component/Plugin_BuiltHook.res +141 -0
  288. package/src/plugin/component/Plugin_BuiltHook.res.mjs +39 -0
  289. package/src/plugin/component/Plugin_Callback.res +98 -0
  290. package/src/plugin/component/Plugin_Callback.res.mjs +55 -0
  291. package/src/plugin/component/Plugin_Helpers.res +1730 -0
  292. package/src/plugin/component/Plugin_Helpers.res.mjs +1010 -0
  293. package/src/plugin/component/Plugin_ResolverError.res +27 -0
  294. package/src/plugin/component/Plugin_ResolverError.res.mjs +21 -0
  295. package/src/plugin/component/Plugin_Structure.res +570 -0
  296. package/src/plugin/component/Plugin_Structure.res.mjs +458 -0
  297. package/src/plugin/component/Plugin_SubscriptionSchema.res +103 -0
  298. package/src/plugin/component/Plugin_SubscriptionSchema.res.mjs +71 -0
  299. package/src/plugin/component/SchemaWalker.res +164 -0
  300. package/src/plugin/component/SchemaWalker.res.mjs +183 -0
  301. package/src/plugin/connect/PluginConnectExtension_Builder.res +14 -0
  302. package/src/plugin/connect/PluginConnectExtension_Builder.res.mjs +36 -0
  303. package/src/plugin/connect/PluginConnectExtension_Mapping.res +76 -0
  304. package/src/plugin/connect/PluginConnectExtension_Mapping.res.mjs +89 -0
  305. package/src/plugin/connect/PluginExtensionPoint_Builder.res +39 -0
  306. package/src/plugin/connect/PluginExtensionPoint_Builder.res.mjs +33 -0
  307. package/src/plugin/connect/PluginExtensionPoint_Plugin.res +231 -0
  308. package/src/plugin/connect/PluginExtensionPoint_Plugin.res.mjs +353 -0
  309. package/src/plugin/lifecycle/PluginBehavior.res +250 -0
  310. package/src/plugin/lifecycle/PluginBehavior.res.mjs +391 -0
  311. package/src/plugin/lifecycle/PluginSpec.res +84 -0
  312. package/src/plugin/lifecycle/PluginSpec.res.mjs +148 -0
  313. package/src/plugin/lifecycle/PluginsProjection.res +154 -0
  314. package/src/plugin/lifecycle/PluginsProjection.res.mjs +230 -0
  315. package/src/plugin/lifecycle/PluginsReadModelSpec.res +66 -0
  316. package/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs +58 -0
  317. package/src/util/AWS.res +7 -0
  318. package/src/util/AWS.res.mjs +20 -0
  319. package/src/util/CSV.res +27 -0
  320. package/src/util/CSV.res.mjs +56 -0
  321. package/src/util/CommandPublisher.res +133 -0
  322. package/src/util/CommandPublisher.res.mjs +161 -0
  323. package/src/util/CsvStream.res +39 -0
  324. package/src/util/CsvStream.res.mjs +42 -0
  325. package/src/util/EffectLogger.res +178 -0
  326. package/src/util/EffectLogger.res.mjs +171 -0
  327. package/src/util/FTP.res +69 -0
  328. package/src/util/FTP.res.mjs +101 -0
  329. package/src/util/FTPHandler.res +142 -0
  330. package/src/util/FTPHandler.res.mjs +136 -0
  331. package/src/util/Hash.res +1 -0
  332. package/src/util/Hash.res.mjs +10 -0
  333. package/src/util/Interstack.res +74 -0
  334. package/src/util/Interstack.res.mjs +126 -0
  335. package/src/util/Interstack.resi +25 -0
  336. package/src/util/LogFormat.res +222 -0
  337. package/src/util/LogFormat.res.mjs +257 -0
  338. package/src/util/Logger.res +196 -0
  339. package/src/util/Logger.res.mjs +238 -0
  340. package/src/util/Lru.res +51 -0
  341. package/src/util/Lru.res.mjs +59 -0
  342. package/src/util/Lru.resi +32 -0
  343. package/src/util/Metrics.res +32 -0
  344. package/src/util/Metrics.res.mjs +42 -0
  345. package/src/util/OutputFailsafeDeploytime.res +16 -0
  346. package/src/util/OutputFailsafeDeploytime.res.mjs +20 -0
  347. package/src/util/OutputFailsafeRuntime.res +6 -0
  348. package/src/util/OutputFailsafeRuntime.res.mjs +15 -0
  349. package/src/util/OutputLogger.res +9 -0
  350. package/src/util/OutputLogger.res.mjs +19 -0
  351. package/src/util/ResourceQuery.res +14 -0
  352. package/src/util/ResourceQuery.res.mjs +17 -0
  353. package/src/util/ResourceQueryRuntime.res +17 -0
  354. package/src/util/ResourceQueryRuntime.res.mjs +18 -0
  355. package/src/util/ScheduleOps.res +124 -0
  356. package/src/util/ScheduleOps.res.mjs +132 -0
  357. package/src/util/Util.res +12 -0
  358. package/src/util/Util.res.mjs +42 -0
  359. package/src/util/Util_Adapter.res +97 -0
  360. package/src/util/Util_Adapter.res.mjs +82 -0
  361. package/src/util/Util_AdapterRuntime.res +39 -0
  362. package/src/util/Util_AdapterRuntime.res.mjs +42 -0
  363. package/src/util/Util_Array.res +2 -0
  364. package/src/util/Util_Array.res.mjs +12 -0
  365. package/src/util/Util_Error.res +16 -0
  366. package/src/util/Util_Error.res.mjs +19 -0
  367. package/src/util/Util_Promise.res +67 -0
  368. package/src/util/Util_Promise.res.mjs +105 -0
  369. package/src/util/Util_Pulumi.res +35 -0
  370. package/src/util/Util_Pulumi.res.mjs +55 -0
  371. package/src/util/Util_Pulumi.resi +21 -0
  372. package/src/util/Util_QueryDb.res +14 -0
  373. package/src/util/Util_QueryDb.res.mjs +21 -0
  374. package/src/util/Util_QueryDbRuntime.res +11 -0
  375. package/src/util/Util_QueryDbRuntime.res.mjs +19 -0
  376. package/src/util/Util_ReadModel.res +2 -0
  377. package/src/util/Util_ReadModel.res.mjs +10 -0
  378. package/src/util/Util_StackRefs.res +24 -0
  379. package/src/util/Util_StackRefs.res.mjs +39 -0
  380. package/src/util/Validation.res +75 -0
  381. package/src/util/Validation.res.mjs +181 -0
  382. package/tests/.gitkeep +0 -0
  383. package/tests/IdentityTest.res +155 -0
  384. package/tests/IdentityTest.res.mjs +174 -0
  385. package/tests/admin/Platform_ComponentDefinitionsApiTest.res +237 -0
  386. package/tests/admin/Platform_ComponentDefinitionsApiTest.res.mjs +298 -0
  387. package/tests/admin/Platform_UIFragmentsApiTest.res +96 -0
  388. package/tests/admin/Platform_UIFragmentsApiTest.res.mjs +101 -0
  389. package/tests/aggregate/AggregateCallbackTest.res +81 -0
  390. package/tests/aggregate/AggregateCallbackTest.res.mjs +140 -0
  391. package/tests/aggregate/AggregateCausationTest.res +49 -0
  392. package/tests/aggregate/AggregateCausationTest.res.mjs +44 -0
  393. package/tests/aggregate/AggregateConflictTest.res +212 -0
  394. package/tests/aggregate/AggregateConflictTest.res.mjs +363 -0
  395. package/tests/aggregate/AggregateFixtures.res +177 -0
  396. package/tests/aggregate/AggregateFixtures.res.mjs +285 -0
  397. package/tests/aggregate/AggregateRejectionTest.res +139 -0
  398. package/tests/aggregate/AggregateRejectionTest.res.mjs +163 -0
  399. package/tests/api/ApiNoApiTest.res +62 -0
  400. package/tests/api/ApiNoApiTest.res.mjs +90 -0
  401. package/tests/api/GraphQL_StitcherTest.res +107 -0
  402. package/tests/api/GraphQL_StitcherTest.res.mjs +99 -0
  403. package/tests/api/SimpleTest.res +7 -0
  404. package/tests/api/SimpleTest.res.mjs +10 -0
  405. package/tests/api/SuryToJsonSchemaTest.res +405 -0
  406. package/tests/api/SuryToJsonSchemaTest.res.mjs +623 -0
  407. package/tests/commandgenerator/CommandGeneratorCallbackTest.res +128 -0
  408. package/tests/commandgenerator/CommandGeneratorCallbackTest.res.mjs +160 -0
  409. package/tests/commandgenerator/CommandGeneratorFixtures.res +139 -0
  410. package/tests/commandgenerator/CommandGeneratorFixtures.res.mjs +197 -0
  411. package/tests/commandtopic/CommandTopicCallbackFixtures.res +87 -0
  412. package/tests/commandtopic/CommandTopicCallbackFixtures.res.mjs +152 -0
  413. package/tests/commandtopic/CommandTopicCallbackTest.res +66 -0
  414. package/tests/commandtopic/CommandTopicCallbackTest.res.mjs +106 -0
  415. package/tests/commandtopic/CommandTopicHelpersRejectionTest.res +83 -0
  416. package/tests/commandtopic/CommandTopicHelpersRejectionTest.res.mjs +109 -0
  417. package/tests/counter/CounterCallbackTest.res +83 -0
  418. package/tests/counter/CounterCallbackTest.res.mjs +140 -0
  419. package/tests/counter/CounterFixtures.res +57 -0
  420. package/tests/counter/CounterFixtures.res.mjs +67 -0
  421. package/tests/dcb/DcbDecodeTest.res +122 -0
  422. package/tests/dcb/DcbDecodeTest.res.mjs +194 -0
  423. package/tests/dcb/DcbEventLogOperationsTest.res +195 -0
  424. package/tests/dcb/DcbEventLogOperationsTest.res.mjs +268 -0
  425. package/tests/dcb/DcbFixtures.res +422 -0
  426. package/tests/dcb/DcbFixtures.res.mjs +534 -0
  427. package/tests/dcb/DcbScopeInferenceTest.res +242 -0
  428. package/tests/dcb/DcbScopeInferenceTest.res.mjs +480 -0
  429. package/tests/dcb/DcbStateChangeSliceTest.res +362 -0
  430. package/tests/dcb/DcbStateChangeSliceTest.res.mjs +546 -0
  431. package/tests/dcb/DcbTagTest.res +978 -0
  432. package/tests/dcb/DcbTagTest.res.mjs +867 -0
  433. package/tests/dcb/DcbValidationTest.res +349 -0
  434. package/tests/dcb/DcbValidationTest.res.mjs +476 -0
  435. package/tests/eventlog/EventLogFixtures.res +113 -0
  436. package/tests/eventlog/EventLogFixtures.res.mjs +166 -0
  437. package/tests/eventlog/EventLogOperationsTest.res +96 -0
  438. package/tests/eventlog/EventLogOperationsTest.res.mjs +192 -0
  439. package/tests/eventlog/EventLogRetryTest.res +121 -0
  440. package/tests/eventlog/EventLogRetryTest.res.mjs +171 -0
  441. package/tests/eventmapper/EventMapperCallbackTest.res +134 -0
  442. package/tests/eventmapper/EventMapperCallbackTest.res.mjs +141 -0
  443. package/tests/eventmapper/EventMapperFixtures.res +255 -0
  444. package/tests/eventmapper/EventMapperFixtures.res.mjs +440 -0
  445. package/tests/eventmapper/EventMapperTest.res +53 -0
  446. package/tests/eventmapper/EventMapperTest.res.mjs +83 -0
  447. package/tests/eventtopic/EventTopicFixtures.res +36 -0
  448. package/tests/eventtopic/EventTopicFixtures.res.mjs +65 -0
  449. package/tests/eventtopic/EventTopicOperationsTest.res +48 -0
  450. package/tests/eventtopic/EventTopicOperationsTest.res.mjs +71 -0
  451. package/tests/extensionpoint/ExtensionPointCallbackTest.res +84 -0
  452. package/tests/extensionpoint/ExtensionPointCallbackTest.res.mjs +94 -0
  453. package/tests/extensionpoint/ExtensionPointFixtures.res +173 -0
  454. package/tests/extensionpoint/ExtensionPointFixtures.res.mjs +205 -0
  455. package/tests/extensionpoint/ExtensionPointOperationsTest.res +261 -0
  456. package/tests/extensionpoint/ExtensionPointOperationsTest.res.mjs +304 -0
  457. package/tests/ftp/FTPTest.res +64 -0
  458. package/tests/ftp/FTPTest.res.mjs +88 -0
  459. package/tests/logger/LogFormatTest.res +348 -0
  460. package/tests/logger/LogFormatTest.res.mjs +309 -0
  461. package/tests/message/MessageTest.res +95 -0
  462. package/tests/message/MessageTest.res.mjs +93 -0
  463. package/tests/message/MetaEnvelopeTest.res +200 -0
  464. package/tests/message/MetaEnvelopeTest.res.mjs +188 -0
  465. package/tests/plugin/ManifestVisibilityTest.res +137 -0
  466. package/tests/plugin/ManifestVisibilityTest.res.mjs +205 -0
  467. package/tests/plugin/PluginSpecExperiment.res +13 -0
  468. package/tests/plugin/PluginSpecExperiment.res.mjs +31 -0
  469. package/tests/plugin/PluginStructureTest.res +298 -0
  470. package/tests/plugin/PluginStructureTest.res.mjs +388 -0
  471. package/tests/plugin/PluginVersionTest.res +34 -0
  472. package/tests/plugin/PluginVersionTest.res.mjs +30 -0
  473. package/tests/plugin/SchemaWalkerTest.res +115 -0
  474. package/tests/plugin/SchemaWalkerTest.res.mjs +160 -0
  475. package/tests/plugin/StateChangeSlice/PsPlaceOrder.res +24 -0
  476. package/tests/plugin/StateChangeSlice/PsPlaceOrder.res.mjs +62 -0
  477. package/tests/plugin/StateChangeSlice/PsShipOrder.res +29 -0
  478. package/tests/plugin/StateChangeSlice/PsShipOrder.res.mjs +69 -0
  479. package/tests/plugin/StateViewSlice/PsAnnotatedView.res +24 -0
  480. package/tests/plugin/StateViewSlice/PsAnnotatedView.res.mjs +94 -0
  481. package/tests/plugin/StateViewSlice/PsAvailableProductsView.res +18 -0
  482. package/tests/plugin/StateViewSlice/PsAvailableProductsView.res.mjs +69 -0
  483. package/tests/plugin/StateViewSlice/PsCustomersView.res +22 -0
  484. package/tests/plugin/StateViewSlice/PsCustomersView.res.mjs +69 -0
  485. package/tests/plugin/StateViewSlice/PsOrdersView.res +20 -0
  486. package/tests/plugin/StateViewSlice/PsOrdersView.res.mjs +81 -0
  487. package/tests/poc/StructuralSubtypingPoc.res +211 -0
  488. package/tests/poc/StructuralSubtypingPoc.res.mjs +61 -0
  489. package/tests/querydb/QueryDbFixtures.res +65 -0
  490. package/tests/querydb/QueryDbFixtures.res.mjs +135 -0
  491. package/tests/querydb/QueryDbOperationsTest.res +94 -0
  492. package/tests/querydb/QueryDbOperationsTest.res.mjs +168 -0
  493. package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res +56 -0
  494. package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res.mjs +77 -0
  495. package/tests/sideeffecthandler/SideEffectHandlerFixtures.res +96 -0
  496. package/tests/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +139 -0
  497. package/tests/util/CsvStreamTest.res +54 -0
  498. package/tests/util/CsvStreamTest.res.mjs +51 -0
  499. package/tests/util/LruTest.res +73 -0
  500. package/tests/util/LruTest.res.mjs +105 -0
  501. package/tests/util/MetricsTest.res +36 -0
  502. package/tests/util/MetricsTest.res.mjs +53 -0
@@ -0,0 +1,134 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stream from "@reventlessdev/rescript-effect/src/Stream.res.mjs";
4
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
5
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
6
+ import * as Stdlib_JsExn from "@rescript/runtime/lib/es6/Stdlib_JsExn.js";
7
+ import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
8
+ import * as Output$Pulumi from "@reventlessdev/rescript-pulumi-pulumi/src/Output.res.mjs";
9
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
10
+ import * as Effect from "effect/Effect";
11
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
12
+ import * as DcbDecode$Reventless from "@reventlessdev/reventless-spec/src/components/DcbDecode.res.mjs";
13
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
14
+ import * as Message$ReventlessCore from "../../Message.res.mjs";
15
+ import * as Component$ReventlessCore from "../Component.res.mjs";
16
+ import * as LogFormat$ReventlessCore from "../../util/LogFormat.res.mjs";
17
+ import * as Projection$ReventlessCore from "../../Projection.res.mjs";
18
+ import * as EffectLogger$ReventlessCore from "../../util/EffectLogger.res.mjs";
19
+ import * as ComponentType$ReventlessCore from "../../ComponentType.res.mjs";
20
+ import * as StateViewSlice$ReventlessCore from "./StateViewSlice.res.mjs";
21
+ import * as QueryDb_Builder$ReventlessCore from "../QueryDb/QueryDb_Builder.res.mjs";
22
+ import * as EventCollector_Builder$ReventlessCore from "../EventCollector/EventCollector_Builder.res.mjs";
23
+
24
+ function Make(RuntimeEnvironment) {
25
+ return QueryDbStorage => (QueryDbResolvers => (EventCollectorChannel => (EventCollectorRuntimeBuilder => (Api => {
26
+ let Make = Spec => (Projection => {
27
+ let moduleUrl = import.meta.url;
28
+ let SpecificQueryDb = QueryDb_Builder$ReventlessCore.Make({
29
+ Id: Id$Reventless.$$String,
30
+ name: Spec.name,
31
+ moduleUrl: moduleUrl,
32
+ stateSchema: Spec.stateSchema,
33
+ config: Spec.config,
34
+ subIdConfig: Spec.subIdConfig,
35
+ authorization: Spec.authorization,
36
+ visibility: Spec.visibility
37
+ })(QueryDbStorage)(QueryDbResolvers);
38
+ let SpecificEventCollector = EventCollector_Builder$ReventlessCore.Make(RuntimeEnvironment)(EventCollectorChannel);
39
+ let toProjectionOps = ops => ({
40
+ load: id => ops.load(Id$Reventless.$$String.makeFromString(id)),
41
+ loadStream: id => ops.loadStream(Id$Reventless.$$String.makeFromString(id)),
42
+ save: (id, s, sm, ttl) => ops.save(Id$Reventless.$$String.makeFromString(id), s, sm, ttl),
43
+ saveBatch: batch => ops.saveBatch(batch.map(param => [
44
+ Id$Reventless.$$String.makeFromString(param[0]),
45
+ param[1],
46
+ param[2]
47
+ ])),
48
+ count: (id, f, n) => ops.count(Id$Reventless.$$String.makeFromString(id), f, n),
49
+ delete: (id, sub) => ops.delete(Id$Reventless.$$String.makeFromString(id), sub),
50
+ deleteBatch: ids => ops.deleteBatch(ids.map(param => [
51
+ Id$Reventless.$$String.makeFromString(param[0]),
52
+ param[1]
53
+ ]))
54
+ });
55
+ let decoder = DcbDecode$Reventless.makeDecoder(Spec.consumedEventSchema);
56
+ let make = (dcbEventLog, opts) => Component$ReventlessCore.make(ComponentType$ReventlessCore.toString(StateViewSlice$ReventlessCore.componentType), Spec.name, (extra, extra$1) => {
57
+ let opts_parent = Component$ReventlessCore.toPulumiResource(extra);
58
+ let opts = {
59
+ parent: opts_parent
60
+ };
61
+ let queryDb = SpecificQueryDb.make(Api.api(), Api.apiRole(), undefined, opts);
62
+ let dcbEventTopicOutputs = Component$ReventlessCore.outputs(dcbEventLog).eventTopic;
63
+ let allEventTopics = Object.fromEntries([[
64
+ Spec.name,
65
+ dcbEventTopicOutputs
66
+ ]]);
67
+ let eventCollector = Component$ReventlessCore.operations(queryDb).apply(queryDbOps => {
68
+ let projectionOps = toProjectionOps(queryDbOps);
69
+ let ec = SpecificEventCollector.make(Spec.name, allEventTopics, opts);
70
+ let comp = `StateViewSlice(` + Spec.name + `)`;
71
+ let jsonEventsHandler = stream => Effect.flatMap(Stream.runCollect(stream), events => {
72
+ let total = events.length.toString();
73
+ return Stdlib_Array.reduce(events.map((json, i) => {
74
+ let rawEvent = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(json), d => d["event"]), json);
75
+ let match = Message$ReventlessCore.splitMessage(rawEvent);
76
+ let dataDict = match[1];
77
+ let eventType = match[0];
78
+ let event = decoder.decode(eventType, dataDict);
79
+ if (event === undefined) {
80
+ return [];
81
+ }
82
+ let actions;
83
+ try {
84
+ actions = Projection.project(Primitive_option.valFromOption(event));
85
+ } catch (raw_exn) {
86
+ let exn = Primitive_exceptions.internalToException(raw_exn);
87
+ let errMsg = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_JsExn.fromException(exn), Stdlib_JsExn.message), "unknown");
88
+ Effect.runSync(EffectLogger$ReventlessCore.logError(comp, undefined, `project failed for ` + eventType + `: ` + errMsg));
89
+ actions = [];
90
+ }
91
+ let idxStr = (i + 1 | 0).toString();
92
+ let actionsStr = LogFormat$ReventlessCore.actionNames(actions);
93
+ let f = Object.entries(dataDict).map(param => param[0] + `:` + JSON.stringify(param[1])).join(",");
94
+ let fieldsStr = f === "" ? "" : `({` + f + `})`;
95
+ Effect.runSync(EffectLogger$ReventlessCore.logInfo(comp, dataDict, `handling event ` + idxStr + `/` + total + `: ` + LogFormat$ReventlessCore.bold(eventType) + fieldsStr + ` ` + actionsStr));
96
+ return actions;
97
+ }).flat(), Effect.succeed(), (acc, action) => Effect.flatMap(acc, () => Effect.map(Effect.promise(() => Projection$ReventlessCore.handleAction(action, projectionOps, Spec.subIdConfig)), param => {})));
98
+ });
99
+ let handler = SpecificEventCollector.makeHandler(ec, jsonEventsHandler);
100
+ let resources = Component$ReventlessCore.outputs(queryDb).resources;
101
+ EventCollectorRuntimeBuilder.forEventCollector(handler, allEventTopics, resources, undefined, undefined, ec);
102
+ return ec;
103
+ });
104
+ Component$ReventlessCore.setOperations(extra, Output$Pulumi.flatMap(eventCollector, Component$ReventlessCore.operations).apply(param => ({
105
+ enqueueEvent: param.enqueueEvent
106
+ })));
107
+ let outputs_resources = dcbEventTopicOutputs.resources;
108
+ let outputs_queryDb = Component$ReventlessCore.outputs(queryDb);
109
+ let outputs = {
110
+ resources: outputs_resources,
111
+ queryDb: outputs_queryDb
112
+ };
113
+ return Component$ReventlessCore.setOutputs(extra, outputs);
114
+ }, opts);
115
+ return {
116
+ Spec: Spec,
117
+ Projection: Projection,
118
+ make: make
119
+ };
120
+ });
121
+ return {
122
+ finish: EventCollectorRuntimeBuilder.finish,
123
+ Make: Make
124
+ };
125
+ }))));
126
+ }
127
+
128
+ let FrameworkProjection;
129
+
130
+ export {
131
+ FrameworkProjection,
132
+ Make,
133
+ }
134
+ /* Stream Not a pure module */
@@ -0,0 +1,64 @@
1
+ // Capture the framework's Projection module before the functor arg shadows it.
2
+ module FrameworkProjection = Projection
3
+
4
+ module type T = {
5
+ module Spec: Reventless.StateViewSlice.Spec
6
+ module Projection: Reventless.StateViewSlice.Projection with module Spec := Spec
7
+ type queryDbOperations
8
+
9
+ let eventsHandler: (
10
+ queryDbOperations,
11
+ array<ReventlessInfra.DcbEventLog.rawSequencedEvent>,
12
+ ) => promise<unit>
13
+ }
14
+
15
+ module Make = (
16
+ Spec: Reventless.StateViewSlice.Spec,
17
+ Projection: Reventless.StateViewSlice.Projection with module Spec := Spec,
18
+ ): (T with module Spec = Spec and module Projection := Projection) => {
19
+ module Spec = Spec
20
+ module Projection = Projection
21
+
22
+ type queryDbOperations = QueryDb.operations<string, Spec.state>
23
+
24
+ let comp = `StateViewSlice(${Spec.name})`
25
+ let decoder = Reventless.DcbDecode.makeDecoder(Spec.consumedEventSchema)
26
+
27
+ let eventsHandler = async (
28
+ queryDbOps: queryDbOperations,
29
+ rawEvents: array<ReventlessInfra.DcbEventLog.rawSequencedEvent>,
30
+ ) => {
31
+ let count = rawEvents->Array.length->Int.toString
32
+ let idx = ref(0)
33
+ let allActions = []
34
+ let events = rawEvents->Array.filterMap(raw => {
35
+ let decoded = decoder.decode(
36
+ ~eventType=raw.eventType,
37
+ ~data=raw.data->JSON.Decode.object->Option.getOr(Dict.make()),
38
+ )
39
+ switch decoded {
40
+ | Some(event) =>
41
+ idx := idx.contents + 1
42
+ let id = raw.tags->Array.get(0)->Option.map(tag => tag.value)->Option.getOr("?")
43
+ let actions = Projection.project(event)
44
+ let actionsStr = LogFormat.actionNames(actions)
45
+ EffectLogger.logInfo(
46
+ ~comp,
47
+ ~detail=raw.data,
48
+ `handling event ${idx.contents->Int.toString}/${count}: ${LogFormat.bold(raw.eventType)}(${id}) ${actionsStr}`,
49
+ )->Effect.runSync
50
+ allActions->Array.pushMany(actions)
51
+ Some(event)
52
+ | None => None
53
+ }
54
+ })
55
+ let skipped = rawEvents->Array.length - events->Array.length
56
+ if skipped > 0 {
57
+ EffectLogger.logWarn(
58
+ ~comp,
59
+ `skipped=${skipped->Int.toString} events (decode mismatch)`,
60
+ )->Effect.runSync
61
+ }
62
+ await FrameworkProjection.handleActions(allActions, queryDbOps, Spec.subIdConfig)
63
+ }
64
+ }
@@ -0,0 +1,56 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
4
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
8
+ import * as DcbDecode$Reventless from "@reventlessdev/reventless-spec/src/components/DcbDecode.res.mjs";
9
+ import * as LogFormat$ReventlessCore from "../../util/LogFormat.res.mjs";
10
+ import * as Projection$ReventlessCore from "../../Projection.res.mjs";
11
+ import * as EffectLogger$ReventlessCore from "../../util/EffectLogger.res.mjs";
12
+
13
+ function Make(Spec) {
14
+ return Projection => {
15
+ let comp = `StateViewSlice(` + Spec.name + `)`;
16
+ let decoder = DcbDecode$Reventless.makeDecoder(Spec.consumedEventSchema);
17
+ let eventsHandler = async (queryDbOps, rawEvents) => {
18
+ let count = rawEvents.length.toString();
19
+ let idx = {
20
+ contents: 0
21
+ };
22
+ let allActions = [];
23
+ let events = Stdlib_Array.filterMap(rawEvents, raw => {
24
+ let decoded = decoder.decode(raw.eventType, Stdlib_Option.getOr(Stdlib_JSON.Decode.object(raw.data), {}));
25
+ if (decoded === undefined) {
26
+ return;
27
+ }
28
+ let event = Primitive_option.valFromOption(decoded);
29
+ idx.contents = idx.contents + 1 | 0;
30
+ let id = Stdlib_Option.getOr(Stdlib_Option.map(raw.tags[0], tag => tag.value), "?");
31
+ let actions = Projection.project(event);
32
+ let actionsStr = LogFormat$ReventlessCore.actionNames(actions);
33
+ Effect.runSync(EffectLogger$ReventlessCore.logInfo(comp, raw.data, `handling event ` + idx.contents.toString() + `/` + count + `: ` + LogFormat$ReventlessCore.bold(raw.eventType) + `(` + id + `) ` + actionsStr));
34
+ allActions.push(...actions);
35
+ return Primitive_option.some(event);
36
+ });
37
+ let skipped = rawEvents.length - events.length | 0;
38
+ if (skipped > 0) {
39
+ Effect.runSync(EffectLogger$ReventlessCore.logWarn(comp, undefined, `skipped=` + skipped.toString() + ` events (decode mismatch)`));
40
+ }
41
+ return await Projection$ReventlessCore.handleActions(allActions, queryDbOps, Spec.subIdConfig);
42
+ };
43
+ return {
44
+ Spec: Spec,
45
+ eventsHandler: eventsHandler
46
+ };
47
+ };
48
+ }
49
+
50
+ let FrameworkProjection;
51
+
52
+ export {
53
+ FrameworkProjection,
54
+ Make,
55
+ }
56
+ /* effect/Effect Not a pure module */
@@ -0,0 +1,81 @@
1
+ let componentType = ComponentType.Task
2
+
3
+ type t
4
+ type outputs = ReventlessInfra.Task.outputs
5
+
6
+ type publishCommands = (/* ~aggregateName: */ string, array<Message.commandJson>) => promise<unit>
7
+ type queryBucketName = ReventlessInfra.Task.queryBucketName
8
+
9
+ type operations = ReventlessInfra.Task.operations
10
+ type component = Component.t<t, outputs, operations>
11
+
12
+ type taskAction = Reventless.Task.taskAction =
13
+ | PublishCommands(string, array<Message.commandJson>)
14
+ | CreateSchedule(Reventless.Schedule.schedule)
15
+ | DeleteSchedule(string)
16
+ type bucketCallback = Reventless.Task.bucketCallback
17
+ type bucketMode = Reventless.Task.bucketMode = Read | Write | ReadWrite
18
+ type bucketSpec = Reventless.Task.bucketSpec
19
+ type sideEffects = Reventless.Task.sideEffects
20
+ type config = Reventless.Task.config
21
+ type setup = ReventlessInfra.Task.setup
22
+
23
+ module type Spec = ReventlessInfra.Task.Spec
24
+
25
+ type maker = (
26
+ ~queryBucketName: queryBucketName,
27
+ ~scheduler: Scheduler.operations,
28
+ ~schedulerRoleUrn: Pulumi.Output.t<string>,
29
+ ~publishToAggregates: dict<CommandTopic.publishJsons>,
30
+ ~queryEngine: Reventless.QueryEngine.operations,
31
+ ~resourceNaming: ReventlessInfra.ResourceNaming.operations,
32
+ ~allAggregates: dict<Aggregate.outputs>,
33
+ ~opts: option<Pulumi.ComponentResource.options>,
34
+ ) => component
35
+
36
+ let toResolvedOutputs = (
37
+ outputs: outputs,
38
+ ): Pulumi.Output.t<ReventlessInterop.Task.resolvedOutputs> =>
39
+ switch (outputs.bucketNames, outputs.sideEffectSources) {
40
+ | (Some(bucketNames), Some(sideEffectSources)) =>
41
+ bucketNames
42
+ ->Dict.toArray
43
+ ->Array.map(((k, v)) => v->Pulumi.Output.apply(resolved => (k, resolved)))
44
+ ->Pulumi.Output.all
45
+ ->Pulumi.Output.apply(pairs => {
46
+ let resolved: ReventlessInterop.Task.resolvedOutputs = {
47
+ name: outputs.name,
48
+ bucketNames: pairs->Dict.fromArray,
49
+ sideEffectSources,
50
+ }
51
+ resolved
52
+ })
53
+ | (Some(bucketNames), None) =>
54
+ bucketNames
55
+ ->Dict.toArray
56
+ ->Array.map(((k, v)) => v->Pulumi.Output.apply(resolved => (k, resolved)))
57
+ ->Pulumi.Output.all
58
+ ->Pulumi.Output.apply(pairs => {
59
+ let resolved: ReventlessInterop.Task.resolvedOutputs = {
60
+ name: outputs.name,
61
+ bucketNames: pairs->Dict.fromArray,
62
+ }
63
+ resolved
64
+ })
65
+ | (None, Some(sideEffectSources)) =>
66
+ Pulumi.Output.make({
67
+ ReventlessInterop.Task.name: outputs.name,
68
+ sideEffectSources,
69
+ })
70
+ | (None, None) =>
71
+ Pulumi.Output.make({
72
+ ReventlessInterop.Task.name: outputs.name,
73
+ })
74
+ }
75
+
76
+ module type T = {
77
+ module Spec: Spec
78
+ type component = Component.t<t, outputs, operations>
79
+ let make: maker
80
+ let outputs: component => outputs
81
+ }
@@ -0,0 +1,51 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Pulumi from "@pulumi/pulumi";
4
+
5
+ function toResolvedOutputs(outputs) {
6
+ let match = outputs.bucketNames;
7
+ let match$1 = outputs.sideEffectSources;
8
+ if (match !== undefined) {
9
+ if (match$1 !== undefined) {
10
+ return Pulumi.all(Object.entries(match).map(param => {
11
+ let k = param[0];
12
+ return param[1].apply(resolved => [
13
+ k,
14
+ resolved
15
+ ]);
16
+ })).apply(pairs => ({
17
+ name: outputs.name,
18
+ bucketNames: Object.fromEntries(pairs),
19
+ sideEffectSources: match$1
20
+ }));
21
+ } else {
22
+ return Pulumi.all(Object.entries(match).map(param => {
23
+ let k = param[0];
24
+ return param[1].apply(resolved => [
25
+ k,
26
+ resolved
27
+ ]);
28
+ })).apply(pairs => ({
29
+ name: outputs.name,
30
+ bucketNames: Object.fromEntries(pairs)
31
+ }));
32
+ }
33
+ } else if (match$1 !== undefined) {
34
+ return Pulumi.output({
35
+ name: outputs.name,
36
+ sideEffectSources: match$1
37
+ });
38
+ } else {
39
+ return Pulumi.output({
40
+ name: outputs.name
41
+ });
42
+ }
43
+ }
44
+
45
+ let componentType = "Task";
46
+
47
+ export {
48
+ componentType,
49
+ toResolvedOutputs,
50
+ }
51
+ /* @pulumi/pulumi Not a pure module */
@@ -0,0 +1,31 @@
1
+ type bucket<'bucketParts> = {resources: array<ReventlessInfra.Adapter.resource>, parts: 'bucketParts}
2
+
3
+ type connect<'bucketParts, 'runtimeParts> = (
4
+ ~name: string,
5
+ ~bucket: bucket<'bucketParts>,
6
+ ~bucketMode: Task.bucketMode,
7
+ ~commandTopics: Pulumi.Output.t<CommandTopic.allOutputs>,
8
+ ~runtime: Runtime.environment<'runtimeParts>,
9
+ ~opts: Pulumi.ComponentResource.options,
10
+ ) => unit // array<ReventlessInfra.Adapter.resource>
11
+
12
+ type bucketMaker<'parts> = (
13
+ ~name: string,
14
+ ~opts: Pulumi.ComponentResource.options,
15
+ ) => bucket<'parts>
16
+
17
+ module type Bucket = {
18
+ type runtimeParts
19
+ type callbackEvent
20
+ type context
21
+ type bucketParts
22
+
23
+ let connect: connect<bucketParts, runtimeParts>
24
+ let makeHandler: Task.bucketCallback => Runtime.eventHandler<
25
+ callbackEvent,
26
+ context,
27
+ array<Task.taskAction>,
28
+ >
29
+
30
+ let make: bucketMaker<bucketParts>
31
+ }
@@ -0,0 +1,2 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+ /* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
@@ -0,0 +1,223 @@
1
+ let log = Logger.fromEnv()
2
+
3
+ // PascalCase a (possibly kebab/snake-case) bucket id for use as a resource-name
4
+ // segment: "product-imports" -> "ProductImports". The raw id stays the runtime
5
+ // lookup key; only the emitted resource name is sanitized.
6
+ let pascalCase = s =>
7
+ s
8
+ ->String.split("-")
9
+ ->Array.flatMap(p => p->String.split("_"))
10
+ ->Array.filter(p => p->String.length > 0)
11
+ ->Array.map(p =>
12
+ p->String.slice(~start=0, ~end=1)->String.toUpperCase ++
13
+ p->String.slice(~start=1, ~end=p->String.length)
14
+ )
15
+ ->Array.join("")
16
+
17
+ module Make = (
18
+ Spec: Task.Spec,
19
+ RuntimeEnvironment: Runtime.Environment,
20
+ EventCollectorChannel: EventCollector_Adapter.Channel
21
+ with type runtimeParts = RuntimeEnvironment.parts,
22
+ EventCollectorRuntimeBuilder: EventCollectorRuntime_Builder.T
23
+ with module EventCollectorChannel = EventCollectorChannel,
24
+ TaskRuntimeBuilder: TaskRuntime_Builder.T with type runtimeParts = RuntimeEnvironment.parts,
25
+ TaskBucket: Task_Adapter.Bucket
26
+ with type runtimeParts = RuntimeEnvironment.parts
27
+ and type callbackEvent = TaskRuntimeBuilder.callbackEvent
28
+ and type runtimeParts = RuntimeEnvironment.parts
29
+ and type context = TaskRuntimeBuilder.context,
30
+ SpecificSideEffectHandler: SideEffectHandler.T,
31
+ ): Task.T => {
32
+ module Spec = Spec
33
+ type component = Task.component
34
+ // type handler = Runtime.eventHandler<
35
+ // TaskRuntimeBuilder.callbackEvent,
36
+ // TaskRuntimeBuilder.context,
37
+ // array<Task.taskAction>,
38
+ // >
39
+
40
+ let construct = (
41
+ ~queryBucketName,
42
+ ~scheduler,
43
+ ~schedulerRoleUrn,
44
+ ~publishToAggregates,
45
+ ~queryEngine,
46
+ ~resourceNaming: ReventlessInfra.ResourceNaming.operations,
47
+ ~allAggregates,
48
+ self,
49
+ taskName,
50
+ ) => {
51
+ let opts = {Pulumi.ComponentResource.parent: self->Component.toPulumiResource}
52
+ let allCommandTopics = allAggregates->Aggregate.allCommandTopics
53
+
54
+ // Each adapter chooses what string the Task runtime should treat as the
55
+ // publish address for a target aggregate. By convention we expose the
56
+ // first command-topic resource's `id` — bundled adapters interpret it as
57
+ // their channel address; adapters that don't need it (e.g. in-memory)
58
+ // ignore the dict in their TaskRuntime_Builder.
59
+ let publishToAggregatesQueueUrls =
60
+ allAggregates->Dict.mapValues(agg =>
61
+ agg.commandTopic->Pulumi.Output.flatMap(ct =>
62
+ switch ct.resources->Array.get(0) {
63
+ | Some(r) => r.id
64
+ | None => Pulumi.Output.make("")
65
+ }
66
+ )
67
+ )
68
+
69
+ let publishCommands: Task.publishCommands = (aggregateName, cmdJsons) => {
70
+ (publishToAggregates->Dict.get(aggregateName)->Option.getOrThrow)(cmdJsons)
71
+ }
72
+
73
+ let config = Spec.setup(queryEngine, queryBucketName, opts)
74
+
75
+ let sideEffectHandler =
76
+ config.sideEffects->Option.map(sideEffects =>
77
+ SpecificSideEffectHandler.make(
78
+ ~name=taskName,
79
+ ~sideEffects,
80
+ ~allEventTopics=allAggregates->Aggregate.allEventTopics,
81
+ ~allCommandTopics,
82
+ ~queryEngine,
83
+ ~scheduler,
84
+ ~resourceNaming,
85
+ ~opts,
86
+ )
87
+ )
88
+
89
+ let taskActionsHandler = (taskActions, operations: option<SideEffectHandler.operations>) => {
90
+ taskActions
91
+ ->Array.map(async taskAction => {
92
+ switch taskAction {
93
+ | Task.PublishCommands(aggregateName, cmdJsons) =>
94
+ await publishCommands(aggregateName, cmdJsons)
95
+ | CreateSchedule(schedule) =>
96
+ switch operations {
97
+ | Some(operations) => await operations.createSchedule(schedule)
98
+ | None => log.info(~comp="Task", "No SideEffectHandler to create schedule")
99
+ }
100
+ | DeleteSchedule(scheduleId) =>
101
+ switch operations {
102
+ | Some(operations) => await operations.deleteSchedule(scheduleId)
103
+ | None => log.info(~comp="Task", "No SideEffectHandler to delete schedule")
104
+ }
105
+ }
106
+ })
107
+ ->Promise.all
108
+ ->Util.Promise.toUnit
109
+ }
110
+
111
+ let createHandler = (sideEffectHandler, callback) => {
112
+ let handler = callback->TaskBucket.makeHandler
113
+ switch sideEffectHandler {
114
+ | Some(sideEffectHandler) =>
115
+ sideEffectHandler
116
+ ->Component.operations
117
+ ->Pulumi.Output.apply(operations =>
118
+ async (event, context) => {
119
+ let taskActions = await handler(event, context)
120
+ await taskActions->taskActionsHandler(Some(operations))
121
+ }
122
+ )
123
+ | None =>
124
+ (
125
+ async (event, context) => {
126
+ let taskActions = await handler(event, context)
127
+ await taskActions->taskActionsHandler(None)
128
+ }
129
+ )->Pulumi.Output.make
130
+ }
131
+ }
132
+
133
+ // Build schedulerConfig from the side-effect handler's collector channel
134
+ // — the resource scheduled events fire into — paired with the platform
135
+ // scheduler's invoker URN. Bundled adapters thread these into the
136
+ // deployed handler so it can talk to the underlying scheduler service;
137
+ // adapters without a real scheduler ignore the dict.
138
+ let schedulerConfig: option<TaskRuntime_Builder.schedulerConfig> =
139
+ sideEffectHandler->Option.flatMap(seh => {
140
+ let sehOutputs = seh->Component.outputs
141
+ sehOutputs.eventCollector.resources
142
+ ->Array.get(0)
143
+ ->Option.map(r => {
144
+ TaskRuntime_Builder.schedulerRoleUrn: schedulerRoleUrn,
145
+ targetUrn: r.urn,
146
+ targetName: r.name,
147
+ })
148
+ })
149
+
150
+ let bucketNames = config.buckets->Option.map(buckets =>
151
+ buckets
152
+ ->Array.map(bucketSpec => {
153
+ let bucketName = bucketSpec.bucketName->Option.getOr("Bucket")
154
+ // `bucketStem` is the PascalCase resource-name segment (empty for the
155
+ // default unnamed bucket so the name stays `<Task>Bucket`, not
156
+ // `<Task>BucketBucket`). `bucketName` above remains the runtime key.
157
+ let bucketStem = bucketSpec.bucketName->Option.mapOr("", pascalCase)
158
+ let name = taskName ++ bucketStem ++ "Bucket"
159
+ let bucket = TaskBucket.make(~name, ~opts)
160
+ let opts = {Pulumi.ComponentResource.parent: bucket.parts->Pulumi.Resource.makeFromJs}
161
+
162
+ bucketSpec.callback->Option.forEach(
163
+ callback =>
164
+ self->TaskRuntimeBuilder.forBucketCallback(
165
+ ~handler=sideEffectHandler->createHandler(callback),
166
+ ~connect=TaskBucket.connect(
167
+ ~name,
168
+ ~bucket,
169
+ ~bucketMode=bucketSpec.bucketMode,
170
+ ~commandTopics=allCommandTopics,
171
+ ~opts,
172
+ ...
173
+ ),
174
+ ~memorySize=4096,
175
+ ~timeout=600,
176
+ ~name=bucketStem,
177
+ ~callbackModulePath=Spec.moduleUrl,
178
+ ~publishToAggregatesQueueUrls,
179
+ ~schedulerConfig,
180
+ ),
181
+ )
182
+
183
+ (bucketName, (bucket.resources->Array.getUnsafe(0)).id)
184
+ })
185
+ ->Dict.fromArray
186
+ )
187
+
188
+ let sideEffectSources =
189
+ config.sideEffects->Option.map(sideEffect =>
190
+ sideEffect->Array.map((module(SideEffect)) => SideEffect.Source.name)
191
+ )
192
+
193
+ self->Component.setOutputs({name: taskName, ?bucketNames, ?sideEffectSources})
194
+ }
195
+
196
+ let make = (
197
+ ~queryBucketName,
198
+ ~scheduler,
199
+ ~schedulerRoleUrn,
200
+ ~publishToAggregates,
201
+ ~queryEngine,
202
+ ~resourceNaming,
203
+ ~allAggregates,
204
+ ~opts,
205
+ ) =>
206
+ Component.make(
207
+ ~componentType=Task.componentType->ComponentType.toString,
208
+ ~name=Spec.name,
209
+ ~construct=construct(
210
+ ~queryBucketName,
211
+ ~scheduler,
212
+ ~schedulerRoleUrn,
213
+ ~publishToAggregates,
214
+ ~queryEngine,
215
+ ~resourceNaming,
216
+ ~allAggregates,
217
+ ...
218
+ ),
219
+ ~opts,
220
+ )
221
+
222
+ let outputs = Component.outputs
223
+ }