@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,84 @@
1
+ @@reventless.spec("Plugin")
2
+
3
+ open Reventless.Plugin
4
+
5
+ // The Plugin aggregate is keyed by plugin **name** (not name@version). One
6
+ // instance owns the whole lifecycle of every version of that name, deciding
7
+ // supersession synchronously. Version-scoped commands carry the `version`
8
+ // the transition targets; the ExtensionPoint→Plugin mapping supplies it
9
+ // (translated from the transport-level `name@version` id — Approach 1).
10
+ @schema
11
+ type command =
12
+ | @noApi Heartbeat(version)
13
+ | @noApi Connect(pluginDefinition)
14
+ | @noApi Disconnect(version)
15
+ // Admin lifecycle commands — API-exposed (auto-derived admin mutations,
16
+ // Cognito @aws_auth gated). `version` selects which known version to act on.
17
+ | Activate(version)
18
+ | Deactivate(version)
19
+ // Records a protocol-version incompatibility without changing connection state.
20
+ | @noApi ReportIncompatibility(pluginDefinition)
21
+ // Manual admin retirement of a specific version (archive). Distinct from the
22
+ // automatic `Superseded` transition (which is decided, not commanded).
23
+ | Retire(version)
24
+
25
+ @schema
26
+ type uiFragmentRegisteredData = {pluginId: string, manifest: uiFragmentManifest}
27
+
28
+ @schema
29
+ type uiFragmentUpdatedData = {
30
+ pluginId: string,
31
+ previousManifest: uiFragmentManifest,
32
+ newManifest: uiFragmentManifest,
33
+ }
34
+
35
+ @schema
36
+ type uiFragmentDeregisteredData = {pluginId: string}
37
+
38
+ // Carries both the superseded and the superseding version's full definition —
39
+ // a deterministic trigger for version-to-version schema/data migrations
40
+ // (analysis §6.2.4).
41
+ @schema
42
+ type versionSupersededData = {
43
+ supersededVersion: version,
44
+ supersededDefinition: pluginDefinition,
45
+ newVersion: version,
46
+ newDefinition: pluginDefinition,
47
+ }
48
+
49
+ @schema
50
+ type event =
51
+ // A heartbeat arrived for a version the aggregate has not yet connected —
52
+ // triggers the ConnectPlugin handshake (replaces UnknownPluginDetected). The
53
+ // version lets the EP rebuild the `name@version` id for the handshake.
54
+ | VersionDetected(version)
55
+ // A version completed the connect handshake (replaces Connected/Reconnected).
56
+ | VersionConnected(pluginDefinition)
57
+ // A newer version connected and took over as current.
58
+ | VersionSuperseded(versionSupersededData)
59
+ // An older still-live version became current again (rollback): the current
60
+ // version disconnected/deactivated/retired and a lower live version was promoted.
61
+ | VersionPromoted(pluginDefinition)
62
+ // A version's heartbeats timed out (EP disconnect schedule).
63
+ | VersionDisconnected(pluginDefinition)
64
+ // Admin transitions.
65
+ | VersionActivated(pluginDefinition)
66
+ | VersionDeactivated(pluginDefinition)
67
+ // Manual admin retirement (archive) of a specific version.
68
+ | VersionRetired(pluginDefinition)
69
+ // Protocol incompatibility recorded at connect; connection still proceeds.
70
+ | IncompatiblePluginDetected(pluginDefinition)
71
+ // UI fragment lifecycle events — emitted alongside connect/disconnect/(de)activate
72
+ // when the plugin's pluginDefinition.uiFragments is set.
73
+ | UIFragmentRegistered(uiFragmentRegisteredData)
74
+ | UIFragmentUpdated(uiFragmentUpdatedData)
75
+ | UIFragmentDeregistered(uiFragmentDeregisteredData)
76
+
77
+ @schema
78
+ type error =
79
+ // Targeted version is unknown to this plugin name.
80
+ | UnknownVersion
81
+ // Admin command targets a version not in the state the command requires.
82
+ | AlreadyConnected
83
+ | IsDisconnected
84
+ | IsInactive
@@ -0,0 +1,148 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Plugin$Reventless from "@reventlessdev/reventless-spec/src/components/Plugin.res.mjs";
5
+ import * as Api$ReventlessInfra from "@reventlessdev/reventless-infra/src/components/Api.res.mjs";
6
+
7
+ let commandSchema = S.union([
8
+ S.schema(s => ({
9
+ TAG: "Heartbeat",
10
+ _0: s.m(Plugin$Reventless.versionSchema)
11
+ })),
12
+ S.schema(s => ({
13
+ TAG: "Connect",
14
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
15
+ })),
16
+ S.schema(s => ({
17
+ TAG: "Disconnect",
18
+ _0: s.m(Plugin$Reventless.versionSchema)
19
+ })),
20
+ S.schema(s => ({
21
+ TAG: "Activate",
22
+ _0: s.m(Plugin$Reventless.versionSchema)
23
+ })),
24
+ S.schema(s => ({
25
+ TAG: "Deactivate",
26
+ _0: s.m(Plugin$Reventless.versionSchema)
27
+ })),
28
+ S.schema(s => ({
29
+ TAG: "ReportIncompatibility",
30
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
31
+ })),
32
+ S.schema(s => ({
33
+ TAG: "Retire",
34
+ _0: s.m(Plugin$Reventless.versionSchema)
35
+ }))
36
+ ]);
37
+
38
+ let uiFragmentRegisteredDataSchema = S.schema(s => ({
39
+ pluginId: s.m(S.string),
40
+ manifest: s.m(Plugin$Reventless.uiFragmentManifestSchema)
41
+ }));
42
+
43
+ let uiFragmentUpdatedDataSchema = S.schema(s => ({
44
+ pluginId: s.m(S.string),
45
+ previousManifest: s.m(Plugin$Reventless.uiFragmentManifestSchema),
46
+ newManifest: s.m(Plugin$Reventless.uiFragmentManifestSchema)
47
+ }));
48
+
49
+ let uiFragmentDeregisteredDataSchema = S.schema(s => ({
50
+ pluginId: s.m(S.string)
51
+ }));
52
+
53
+ let versionSupersededDataSchema = S.schema(s => ({
54
+ supersededVersion: s.m(Plugin$Reventless.versionSchema),
55
+ supersededDefinition: s.m(Plugin$Reventless.pluginDefinitionSchema),
56
+ newVersion: s.m(Plugin$Reventless.versionSchema),
57
+ newDefinition: s.m(Plugin$Reventless.pluginDefinitionSchema)
58
+ }));
59
+
60
+ let eventSchema = S.union([
61
+ S.schema(s => ({
62
+ TAG: "VersionDetected",
63
+ _0: s.m(Plugin$Reventless.versionSchema)
64
+ })),
65
+ S.schema(s => ({
66
+ TAG: "VersionConnected",
67
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
68
+ })),
69
+ S.schema(s => ({
70
+ TAG: "VersionSuperseded",
71
+ _0: s.m(versionSupersededDataSchema)
72
+ })),
73
+ S.schema(s => ({
74
+ TAG: "VersionPromoted",
75
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
76
+ })),
77
+ S.schema(s => ({
78
+ TAG: "VersionDisconnected",
79
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
80
+ })),
81
+ S.schema(s => ({
82
+ TAG: "VersionActivated",
83
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
84
+ })),
85
+ S.schema(s => ({
86
+ TAG: "VersionDeactivated",
87
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
88
+ })),
89
+ S.schema(s => ({
90
+ TAG: "VersionRetired",
91
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
92
+ })),
93
+ S.schema(s => ({
94
+ TAG: "IncompatiblePluginDetected",
95
+ _0: s.m(Plugin$Reventless.pluginDefinitionSchema)
96
+ })),
97
+ S.schema(s => ({
98
+ TAG: "UIFragmentRegistered",
99
+ _0: s.m(uiFragmentRegisteredDataSchema)
100
+ })),
101
+ S.schema(s => ({
102
+ TAG: "UIFragmentUpdated",
103
+ _0: s.m(uiFragmentUpdatedDataSchema)
104
+ })),
105
+ S.schema(s => ({
106
+ TAG: "UIFragmentDeregistered",
107
+ _0: s.m(uiFragmentDeregisteredDataSchema)
108
+ }))
109
+ ]);
110
+
111
+ let errorSchema = S.union([
112
+ S.literal("UnknownVersion"),
113
+ S.literal("AlreadyConnected"),
114
+ S.literal("IsDisconnected"),
115
+ S.literal("IsInactive")
116
+ ]);
117
+
118
+ let commandSchema$1 = Api$ReventlessInfra.markNoApiVariants(commandSchema, [
119
+ "Heartbeat",
120
+ "Connect",
121
+ "Disconnect",
122
+ "ReportIncompatibility"
123
+ ]);
124
+
125
+ function commandAuthorization(param) {
126
+ return "AllowAuthenticated";
127
+ }
128
+
129
+ let name = "Plugin";
130
+
131
+ let Id;
132
+
133
+ let moduleUrl = "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginSpec.res.mjs";
134
+
135
+ export {
136
+ name,
137
+ Id,
138
+ uiFragmentRegisteredDataSchema,
139
+ uiFragmentUpdatedDataSchema,
140
+ uiFragmentDeregisteredDataSchema,
141
+ versionSupersededDataSchema,
142
+ eventSchema,
143
+ errorSchema,
144
+ commandSchema$1 as commandSchema,
145
+ moduleUrl,
146
+ commandAuthorization,
147
+ }
148
+ /* commandSchema Not a pure module */
@@ -0,0 +1,154 @@
1
+ open Reventless.Message
2
+
3
+ let moduleUrl: string = %raw(`import.meta.url`)
4
+
5
+ module Util = {
6
+ let extractExtensionPointNames = Array.map(_, (
7
+ extensionPoint: Reventless.Plugin.extensionPointDefinition,
8
+ ) => extensionPoint.name)
9
+ let extractExtensionNames = Array.map(_, (extension: Reventless.Plugin.extensionDefinition) =>
10
+ extension.extensionPointName
11
+ )
12
+
13
+ let isConnected = (status: PluginsReadModelSpec.status) =>
14
+ switch status {
15
+ | Connected => true
16
+ | Disconnected | Inactive | Retired => false
17
+ }
18
+
19
+ let without = (versions: array<Reventless.Plugin.version>, v) =>
20
+ versions->Array.filter(x => x != v)
21
+ let withVersion = (versions: array<Reventless.Plugin.version>, v) =>
22
+ versions->Array.includes(v) ? versions : Array.concat(versions, [v])
23
+
24
+ // Every version this row knows to be currently Connected — the `other` set
25
+ // plus the row's own version when its status is Connected.
26
+ let connectedVersions = (state: PluginsReadModelSpec.state): array<Reventless.Plugin.version> =>
27
+ isConnected(state.status) ? state.otherConnectedVersions->withVersion(state.version) : state.otherConnectedVersions
28
+
29
+ // Highest version (compareVersions) in the set, or None for an empty set.
30
+ let highest = (versions: array<Reventless.Plugin.version>): option<Reventless.Plugin.version> =>
31
+ versions->Array.reduce(None, (acc, v) =>
32
+ switch acc {
33
+ | None => Some(v)
34
+ | Some(cur) => Plugin.compareVersions(v, cur) > 0 ? Some(v) : acc
35
+ }
36
+ )
37
+ }
38
+
39
+ // Build the flattened current-version row from a definition + status + the set
40
+ // of OTHER currently-connected versions (own version excluded).
41
+ let displayState = (
42
+ def: Reventless.Plugin.pluginDefinition,
43
+ status: PluginsReadModelSpec.status,
44
+ statusChange,
45
+ otherConnectedVersions,
46
+ ): PluginsReadModelSpec.state => {
47
+ let base: PluginsReadModelSpec.state = {
48
+ name: def.name,
49
+ version: def.version,
50
+ eventCollector: def.eventCollector,
51
+ extensionPoints: def.extensionPoints,
52
+ extensionPointNames: def.extensionPoints->Util.extractExtensionPointNames,
53
+ extensionNames: def.extensions->Util.extractExtensionNames,
54
+ extensions: def.extensions,
55
+ status,
56
+ statusChange,
57
+ apiSchemaFragment: def.apiSchemaFragment,
58
+ uiFragments: def.uiFragments,
59
+ structure: def.structure,
60
+ dcbEventLog: def.dcbEventLog,
61
+ // The current version is never listed among the "other" connected versions.
62
+ otherConnectedVersions: otherConnectedVersions->Util.without(def.version),
63
+ }
64
+ switch def.apiTarget {
65
+ | Some(target) => {...base, apiTarget: target}
66
+ | None => base
67
+ }
68
+ }
69
+
70
+ module PluginMapping = Reventless.Projection.Mapping.Make(
71
+ PluginSpec,
72
+ PluginsReadModelSpec,
73
+ {
74
+ let project = ({event, id, meta: {time, user: ?user}}) => {
75
+ let statusChange = {at: time, by: user->Option.getOr("")}
76
+ switch event {
77
+ // Handshake trigger, supersession record, incompatibility and UI-fragment
78
+ // events do not change which version is current.
79
+ | PluginSpec.VersionDetected(_)
80
+ | VersionSuperseded(_)
81
+ | IncompatiblePluginDetected(_)
82
+ | UIFragmentRegistered(_)
83
+ | UIFragmentUpdated(_)
84
+ | UIFragmentDeregistered(_) =>
85
+ Reventless.Projection.Ignore
86
+
87
+ // A version became live. It becomes current iff it is the highest
88
+ // Connected version; otherwise the higher version stays current and this
89
+ // one is recorded among the other currently-connected versions.
90
+ | VersionConnected(def) | VersionActivated(def) =>
91
+ Reventless.Projection.UpdateWithDefault(
92
+ id,
93
+ displayState(def, Connected, statusChange, []),
94
+ state => {
95
+ let connectedNow = Util.connectedVersions(state)->Util.withVersion(def.version)
96
+ switch Util.highest(connectedNow) {
97
+ | Some(hc) if hc == def.version =>
98
+ displayState(def, Connected, statusChange, connectedNow)
99
+ | _ => {
100
+ ...state,
101
+ otherConnectedVersions: state.otherConnectedVersions->Util.withVersion(def.version),
102
+ }
103
+ }
104
+ },
105
+ )
106
+
107
+ // Rollback: this (possibly lower) version is explicitly promoted to current.
108
+ // It leaves the "other" set (it is now the row's own version); the version
109
+ // it replaces already left Connected (that is what triggered the promote).
110
+ | VersionPromoted(def) =>
111
+ Reventless.Projection.UpdateWithDefault(
112
+ id,
113
+ displayState(def, Connected, statusChange, []),
114
+ state => displayState(def, Connected, statusChange, state.otherConnectedVersions),
115
+ )
116
+
117
+ // A version dropped out. The current row flips status; any OTHER version is
118
+ // pruned from the connected set. A VersionPromoted (if any) follows and
119
+ // overwrites the display with the rolled-back version.
120
+ | VersionDisconnected(def) =>
121
+ Reventless.Projection.UpdateWithDefault(
122
+ id,
123
+ displayState(def, Disconnected, statusChange, []),
124
+ state =>
125
+ state.version == def.version
126
+ ? {...state, status: Disconnected, statusChange}
127
+ : {...state, otherConnectedVersions: state.otherConnectedVersions->Util.without(def.version)},
128
+ )
129
+ | VersionDeactivated(def) =>
130
+ Reventless.Projection.UpdateWithDefault(
131
+ id,
132
+ displayState(def, Inactive, statusChange, []),
133
+ state =>
134
+ state.version == def.version
135
+ ? {...state, status: Inactive, statusChange}
136
+ : {...state, otherConnectedVersions: state.otherConnectedVersions->Util.without(def.version)},
137
+ )
138
+ | VersionRetired(def) =>
139
+ Reventless.Projection.UpdateWithDefault(
140
+ id,
141
+ displayState(def, Retired, statusChange, []),
142
+ state =>
143
+ state.version == def.version
144
+ ? {...state, status: Retired, statusChange}
145
+ : {...state, otherConnectedVersions: state.otherConnectedVersions->Util.without(def.version)},
146
+ )
147
+ }
148
+ }
149
+ },
150
+ )
151
+
152
+ module Mappings = Reventless.Projection.Mappings.Make(PluginsReadModelSpec)
153
+
154
+ let mappings: array<module(Mappings.Mapping)> = [module(PluginMapping)]
@@ -0,0 +1,230 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
4
+ import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Plugin$ReventlessCore from "../component/Plugin.res.mjs";
7
+ import * as Projection$Reventless from "@reventlessdev/reventless-spec/src/types/Projection.res.mjs";
8
+ import * as PluginSpec$ReventlessCore from "./PluginSpec.res.mjs";
9
+ import * as PluginsReadModelSpec$ReventlessCore from "./PluginsReadModelSpec.res.mjs";
10
+
11
+ let moduleUrl = import.meta.url;
12
+
13
+ function extractExtensionPointNames(__x) {
14
+ return __x.map(extensionPoint => extensionPoint.name);
15
+ }
16
+
17
+ function extractExtensionNames(__x) {
18
+ return __x.map(extension => extension.extensionPointName);
19
+ }
20
+
21
+ function isConnected(status) {
22
+ return status === "Connected";
23
+ }
24
+
25
+ function without(versions, v) {
26
+ return versions.filter(x => x !== v);
27
+ }
28
+
29
+ function withVersion(versions, v) {
30
+ if (versions.includes(v)) {
31
+ return versions;
32
+ } else {
33
+ return versions.concat([v]);
34
+ }
35
+ }
36
+
37
+ function connectedVersions(state) {
38
+ if (isConnected(state.status)) {
39
+ return withVersion(state.otherConnectedVersions, state.version);
40
+ } else {
41
+ return state.otherConnectedVersions;
42
+ }
43
+ }
44
+
45
+ function highest(versions) {
46
+ return Stdlib_Array.reduce(versions, undefined, (acc, v) => {
47
+ if (acc !== undefined && Plugin$ReventlessCore.compareVersions(v, acc) <= 0) {
48
+ return acc;
49
+ } else {
50
+ return v;
51
+ }
52
+ });
53
+ }
54
+
55
+ let Util = {
56
+ extractExtensionPointNames: extractExtensionPointNames,
57
+ extractExtensionNames: extractExtensionNames,
58
+ isConnected: isConnected,
59
+ without: without,
60
+ withVersion: withVersion,
61
+ connectedVersions: connectedVersions,
62
+ highest: highest
63
+ };
64
+
65
+ function displayState(def, status, statusChange, otherConnectedVersions) {
66
+ let base_name = def.name;
67
+ let base_version = def.version;
68
+ let base_eventCollector = def.eventCollector;
69
+ let base_extensionPoints = def.extensionPoints;
70
+ let base_extensionPointNames = def.extensionPoints.map(extensionPoint => extensionPoint.name);
71
+ let base_extensionNames = def.extensions.map(extension => extension.extensionPointName);
72
+ let base_extensions = def.extensions;
73
+ let base_apiSchemaFragment = def.apiSchemaFragment;
74
+ let base_uiFragments = def.uiFragments;
75
+ let base_structure = def.structure;
76
+ let base_dcbEventLog = def.dcbEventLog;
77
+ let base_otherConnectedVersions = without(otherConnectedVersions, def.version);
78
+ let base = {
79
+ name: base_name,
80
+ version: base_version,
81
+ eventCollector: base_eventCollector,
82
+ extensionPoints: base_extensionPoints,
83
+ extensionPointNames: base_extensionPointNames,
84
+ extensionNames: base_extensionNames,
85
+ extensions: base_extensions,
86
+ status: status,
87
+ statusChange: statusChange,
88
+ apiSchemaFragment: base_apiSchemaFragment,
89
+ uiFragments: base_uiFragments,
90
+ structure: base_structure,
91
+ dcbEventLog: base_dcbEventLog,
92
+ otherConnectedVersions: base_otherConnectedVersions
93
+ };
94
+ let target = def.apiTarget;
95
+ if (target === undefined) {
96
+ return base;
97
+ }
98
+ let newrecord = {...base};
99
+ newrecord.apiTarget = target;
100
+ return newrecord;
101
+ }
102
+
103
+ function project(param) {
104
+ let event = param.event;
105
+ let match = param.meta;
106
+ let id = param.id;
107
+ let statusChange_at = match.time;
108
+ let statusChange_by = Stdlib_Option.getOr(match.user, "");
109
+ let statusChange = {
110
+ at: statusChange_at,
111
+ by: statusChange_by
112
+ };
113
+ switch (event.TAG) {
114
+ case "VersionPromoted" :
115
+ let def = event._0;
116
+ return {
117
+ TAG: "UpdateWithDefault",
118
+ _0: id,
119
+ _1: displayState(def, "Connected", statusChange, []),
120
+ _2: state => displayState(def, "Connected", statusChange, state.otherConnectedVersions)
121
+ };
122
+ case "VersionDisconnected" :
123
+ let def$1 = event._0;
124
+ return {
125
+ TAG: "UpdateWithDefault",
126
+ _0: id,
127
+ _1: displayState(def$1, "Disconnected", statusChange, []),
128
+ _2: state => {
129
+ if (state.version === def$1.version) {
130
+ let newrecord = {...state};
131
+ newrecord.statusChange = statusChange;
132
+ newrecord.status = "Disconnected";
133
+ return newrecord;
134
+ }
135
+ let newrecord$1 = {...state};
136
+ newrecord$1.otherConnectedVersions = without(state.otherConnectedVersions, def$1.version);
137
+ return newrecord$1;
138
+ }
139
+ };
140
+ case "VersionConnected" :
141
+ case "VersionActivated" :
142
+ break;
143
+ case "VersionDeactivated" :
144
+ let def$2 = event._0;
145
+ return {
146
+ TAG: "UpdateWithDefault",
147
+ _0: id,
148
+ _1: displayState(def$2, "Inactive", statusChange, []),
149
+ _2: state => {
150
+ if (state.version === def$2.version) {
151
+ let newrecord = {...state};
152
+ newrecord.statusChange = statusChange;
153
+ newrecord.status = "Inactive";
154
+ return newrecord;
155
+ }
156
+ let newrecord$1 = {...state};
157
+ newrecord$1.otherConnectedVersions = without(state.otherConnectedVersions, def$2.version);
158
+ return newrecord$1;
159
+ }
160
+ };
161
+ case "VersionRetired" :
162
+ let def$3 = event._0;
163
+ return {
164
+ TAG: "UpdateWithDefault",
165
+ _0: id,
166
+ _1: displayState(def$3, "Retired", statusChange, []),
167
+ _2: state => {
168
+ if (state.version === def$3.version) {
169
+ let newrecord = {...state};
170
+ newrecord.statusChange = statusChange;
171
+ newrecord.status = "Retired";
172
+ return newrecord;
173
+ }
174
+ let newrecord$1 = {...state};
175
+ newrecord$1.otherConnectedVersions = without(state.otherConnectedVersions, def$3.version);
176
+ return newrecord$1;
177
+ }
178
+ };
179
+ default:
180
+ return "Ignore";
181
+ }
182
+ let def$4 = event._0;
183
+ return {
184
+ TAG: "UpdateWithDefault",
185
+ _0: id,
186
+ _1: displayState(def$4, "Connected", statusChange, []),
187
+ _2: state => {
188
+ let connectedNow = withVersion(connectedVersions(state), def$4.version);
189
+ let hc = highest(connectedNow);
190
+ if (hc !== undefined && hc === def$4.version) {
191
+ return displayState(def$4, "Connected", statusChange, connectedNow);
192
+ }
193
+ let newrecord = {...state};
194
+ newrecord.otherConnectedVersions = withVersion(state.otherConnectedVersions, def$4.version);
195
+ return newrecord;
196
+ }
197
+ };
198
+ }
199
+
200
+ let PluginMapping = Projection$Reventless.Mapping.Make({
201
+ Id: Id$Reventless.$$String,
202
+ name: PluginSpec$ReventlessCore.name,
203
+ eventSchema: PluginSpec$ReventlessCore.eventSchema
204
+ })({
205
+ Id: Id$Reventless.$$String,
206
+ name: PluginsReadModelSpec$ReventlessCore.name,
207
+ stateSchema: PluginsReadModelSpec$ReventlessCore.stateSchema,
208
+ subIdConfig: undefined
209
+ })({
210
+ project: project
211
+ });
212
+
213
+ let Mappings = Projection$Reventless.Mappings.Make({
214
+ Id: Id$Reventless.$$String,
215
+ name: PluginsReadModelSpec$ReventlessCore.name,
216
+ stateSchema: PluginsReadModelSpec$ReventlessCore.stateSchema,
217
+ subIdConfig: undefined
218
+ });
219
+
220
+ let mappings = [PluginMapping];
221
+
222
+ export {
223
+ moduleUrl,
224
+ Util,
225
+ displayState,
226
+ PluginMapping,
227
+ Mappings,
228
+ mappings,
229
+ }
230
+ /* moduleUrl Not a pure module */
@@ -0,0 +1,66 @@
1
+ @@reventless.spec("Plugins")
2
+
3
+ // Current view — one row per plugin **name**, holding the currently-active
4
+ // version's definition. Keyed by the aggregate id (= plugin name). The status
5
+ // here is the *current* version's status; "Superseded" is not represented (a
6
+ // superseded version is simply no longer the current row).
7
+ @schema
8
+ type status =
9
+ | Connected
10
+ | Disconnected
11
+ // Admin suspend (Deactivate).
12
+ | Inactive
13
+ // Manual admin retirement (archive) of the current version.
14
+ | Retired
15
+
16
+ @schema
17
+ type state = {
18
+ name: Reventless.Plugin.name,
19
+ version: Reventless.Plugin.version,
20
+ eventCollector: string,
21
+ extensionPoints: array<Reventless.Plugin.extensionPointDefinition>,
22
+ extensionPointNames: array<string>,
23
+ extensionNames: array<string>,
24
+ extensions: array<Reventless.Plugin.extensionDefinition>,
25
+ status: status,
26
+ statusChange: Message.statusChange,
27
+ apiSchemaFragment: @s.matches(Reventless.Plugin.apiSchemaFragmentOptionSchema) option<Reventless.Plugin.apiSchemaFragment>,
28
+ // API target for split-API schema routing. Absent/None means "Domain" (backward compat).
29
+ // "Platform" → excluded from DomainApi runtime schema stitching in updateApiSchema.
30
+ apiTarget?: string,
31
+ uiFragments: @s.matches(Reventless.Plugin.uiFragmentManifestOptionSchema) option<Reventless.Plugin.uiFragmentManifest>,
32
+ // Plugin structure (component metadata) — surfaced via Platform_ComponentDefinitions.
33
+ // None for older plugins whose protocol version did not carry the field.
34
+ structure: @s.matches(Reventless.Plugin.pluginStructureOptionSchema) option<Reventless.Plugin.pluginStructure>,
35
+ // DCB EventLog definition for plugins that bundle a DcbEventLog component.
36
+ // Admin's manageSubscriptions uses this to wire cross-plugin SNS subscriptions
37
+ // from this plugin's DCB topic → peer EventCollectors (and vice-versa). None
38
+ // for pure-aggregate plugins or for plugins persisted before Phase 4.
39
+ dcbEventLog: @s.matches(Reventless.Plugin.dcbEventLogOptionSchema) option<Reventless.Plugin.dcbEventLogDefinition>,
40
+ // Other versions of this name that are currently **Connected** — excludes this
41
+ // row's own `version` (whose status is the `status` field above). Lets the
42
+ // projection recompute which version is current (highest Connected) during a
43
+ // deploy overlap, and is pruned the moment a version stops being Connected. So
44
+ // it is empty in steady state and holds at most the one-or-two concurrently-live
45
+ // versions of a rolling deploy — never the full history.
46
+ otherConnectedVersions: array<Reventless.Plugin.version>,
47
+ }
48
+
49
+ type queryResult = {
50
+ id: string,
51
+ name: Reventless.Plugin.name,
52
+ version: Reventless.Plugin.version,
53
+ eventCollector: string,
54
+ extensionPoints: array<Reventless.Plugin.extensionPointDefinition>,
55
+ extensionPointNames: array<string>,
56
+ extensionNames: array<string>,
57
+ extensions: array<Reventless.Plugin.extensionDefinition>,
58
+ status: status,
59
+ apiSchemaFragment: option<Reventless.Plugin.apiSchemaFragment>,
60
+ apiTarget?: string,
61
+ uiFragments: option<Reventless.Plugin.uiFragmentManifest>,
62
+ structure: option<Reventless.Plugin.pluginStructure>,
63
+ dcbEventLog: option<Reventless.Plugin.dcbEventLogDefinition>,
64
+ }
65
+
66
+