@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,137 @@
1
+ // Verifies that ReadModel.Spec.visibility flows through PPX injection, that the
2
+ // filter predicate used by Plugin_Builder.makeAutoUIManifest excludes Internal
3
+ // entries while leaving Public ones intact, and that Plugin_Structure.make
4
+ // CARRIES Internal entries but tags them via `queryableDef.visibility` (the
5
+ // dev-graph contract). Does NOT instantiate the full Plugin_Builder.Make functor
6
+ // — the filter is a pure switch on a Spec field and is therefore testable in
7
+ // isolation via stubbed ReadModel.T modules.
8
+
9
+ open JestGlobals
10
+
11
+ // Public ReadModel — no @@reventless.visibility attribute, PPX defaults to Public.
12
+ module PublicSpec = {
13
+ module Id = Reventless.Id.StringPure
14
+ let name = "PublicView"
15
+ let moduleUrl = ""
16
+
17
+ @schema
18
+ type state = {id: string, name: string}
19
+
20
+ let config = Reventless.ReadModel.config()
21
+ let subIdConfig = None
22
+ // PPX walk_inline_specs injects authorization = AllowAuthenticated
23
+ // visibility = Public
24
+ }
25
+
26
+ // Internal ReadModel — manually setting visibility = Internal here mirrors what
27
+ // @@reventless.visibility(Internal) injects in a real spec file.
28
+ module InternalSpec = {
29
+ module Id = Reventless.Id.StringPure
30
+ let name = "InternalView"
31
+ let moduleUrl = ""
32
+
33
+ @schema
34
+ type state = {id: string, name: string}
35
+
36
+ let config = Reventless.ReadModel.config()
37
+ let subIdConfig = None
38
+ let visibility: Reventless.Visibility.t = Internal
39
+ }
40
+
41
+ module PublicReadModel: ReventlessInfra.ReadModel.T
42
+ with type api = unit and type role = unit = {
43
+ module Spec = PublicSpec
44
+ type api = unit
45
+ type role = unit
46
+ type component
47
+ let sourceNames: array<string> = []
48
+ let make = (~api as _, ~apiRole as _, ~allEventTopics as _, ~opts as _=?): component =>
49
+ Obj.magic(0)
50
+ let outputs = (_: component): ReventlessInfra.ReadModel.outputs => Obj.magic(0)
51
+ let operations = (_: component): Pulumi.Output.t<ReventlessInfra.ReadModel.operations> =>
52
+ Obj.magic(0)
53
+ let finish = () => ()
54
+ }
55
+
56
+ module InternalReadModel: ReventlessInfra.ReadModel.T
57
+ with type api = unit and type role = unit = {
58
+ module Spec = InternalSpec
59
+ type api = unit
60
+ type role = unit
61
+ type component
62
+ let sourceNames: array<string> = []
63
+ let make = (~api as _, ~apiRole as _, ~allEventTopics as _, ~opts as _=?): component =>
64
+ Obj.magic(0)
65
+ let outputs = (_: component): ReventlessInfra.ReadModel.outputs => Obj.magic(0)
66
+ let operations = (_: component): Pulumi.Output.t<ReventlessInfra.ReadModel.operations> =>
67
+ Obj.magic(0)
68
+ let finish = () => ()
69
+ }
70
+
71
+ let isVisible = (
72
+ module(R: ReventlessInfra.ReadModel.T with type api = unit and type role = unit),
73
+ ): bool =>
74
+ switch R.Spec.visibility {
75
+ | Public => true
76
+ | Internal => false
77
+ }
78
+
79
+ let readModels: array<
80
+ module(ReventlessInfra.ReadModel.T with type api = unit and type role = unit),
81
+ > = [module(PublicReadModel), module(InternalReadModel)]
82
+
83
+ describe("ReadModel visibility filter", () => {
84
+ testSync("PPX defaults visibility to Public when no attribute is present", () => {
85
+ expect(PublicSpec.visibility)->toEqual(Reventless.Visibility.Public)
86
+ })
87
+
88
+ testSync("Internal spec retains Internal value", () => {
89
+ expect(InternalSpec.visibility)->toEqual(Reventless.Visibility.Internal)
90
+ })
91
+
92
+ testSync("filter predicate excludes Internal", () => {
93
+ let visible = readModels->Array.filter(isVisible)
94
+ expect(visible->Array.length)->toBe(1)
95
+ })
96
+
97
+ testSync("filter predicate retains Public name", () => {
98
+ let visible = readModels->Array.filter(isVisible)
99
+ let first = visible->Array.getUnsafe(0)
100
+ let module(R) = first
101
+ expect(R.Spec.name)->toEqual("PublicView")
102
+ })
103
+
104
+ testSync("unfiltered list still contains both entries (no over-filtering)", () => {
105
+ expect(readModels->Array.length)->toBe(2)
106
+ })
107
+ })
108
+
109
+ describe("Plugin_Structure.make — visibility tagging", () => {
110
+ // pluginStructure CARRIES Internal read models (so the dev graph / dead-code
111
+ // tools can see them) and tags each via `queryableDef.visibility`
112
+ // (`None` = Public, `Some("Internal")` = Internal). The deployed AutoUI
113
+ // consumers re-filter on that tag — visibility does not remove entries from
114
+ // pluginStructure itself. See Plugin_Structure.res / Visibility.res.
115
+ let structure = Plugin_Structure.make(~name="VisibilityPlugin", ~readModels)
116
+
117
+ testSync("readModels carries both Public and Internal entries", () => {
118
+ expect(structure.readModels->Array.length)->toBe(2)
119
+ })
120
+
121
+ testSync("the Public entry is tagged visibility = None", () => {
122
+ let public = structure.readModels->Array.find(d => d.name == "PublicView")
123
+ expect(public->Option.map(d => d.visibility))->toEqual(Some(None))
124
+ })
125
+
126
+ testSync("the Internal entry is carried and tagged visibility = Some(\"Internal\")", () => {
127
+ let internal = structure.readModels->Array.find(d => d.name == "InternalView")
128
+ expect(internal->Option.map(d => d.visibility))->toEqual(Some(Some("Internal")))
129
+ })
130
+
131
+ testSync("aggregates / stateViewSlices stay empty when none are passed (sanity)", () => {
132
+ expect((
133
+ structure.aggregates->Array.length,
134
+ structure.stateViewSlices->Array.length,
135
+ ))->toEqual((0, 0))
136
+ })
137
+ })
@@ -0,0 +1,205 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
7
+ import * as ReadModel$Reventless from "@reventlessdev/reventless-spec/src/components/ReadModel.res.mjs";
8
+ import * as Plugin_Structure$ReventlessCore from "../../src/plugin/component/Plugin_Structure.res.mjs";
9
+
10
+ let name = "PublicView";
11
+
12
+ let moduleUrl = "";
13
+
14
+ let stateSchema = S.schema(s => ({
15
+ id: s.m(S.string),
16
+ name: s.m(S.string)
17
+ }));
18
+
19
+ let config = ReadModel$Reventless.config(undefined, undefined, undefined);
20
+
21
+ let PublicSpec = {
22
+ Id: undefined,
23
+ name: name,
24
+ moduleUrl: moduleUrl,
25
+ stateSchema: stateSchema,
26
+ config: config,
27
+ subIdConfig: undefined,
28
+ authorization: "AllowAuthenticated",
29
+ visibility: "Public"
30
+ };
31
+
32
+ let name$1 = "InternalView";
33
+
34
+ let moduleUrl$1 = "";
35
+
36
+ let stateSchema$1 = S.schema(s => ({
37
+ id: s.m(S.string),
38
+ name: s.m(S.string)
39
+ }));
40
+
41
+ let config$1 = ReadModel$Reventless.config(undefined, undefined, undefined);
42
+
43
+ let InternalSpec = {
44
+ Id: undefined,
45
+ name: name$1,
46
+ moduleUrl: moduleUrl$1,
47
+ stateSchema: stateSchema$1,
48
+ config: config$1,
49
+ subIdConfig: undefined,
50
+ visibility: "Internal",
51
+ authorization: "AllowAuthenticated"
52
+ };
53
+
54
+ let sourceNames = [];
55
+
56
+ function make(param, param$1, param$2, param$3) {
57
+ return 0;
58
+ }
59
+
60
+ function outputs(param) {
61
+ return 0;
62
+ }
63
+
64
+ function operations(param) {
65
+ return 0;
66
+ }
67
+
68
+ function finish() {
69
+
70
+ }
71
+
72
+ let PublicReadModel_Spec = {
73
+ Id: {
74
+ schema: Id$Reventless.StringPure.schema,
75
+ make: prim => prim,
76
+ makeFromString: prim => prim,
77
+ toString: prim => prim,
78
+ cmp: Id$Reventless.StringPure.cmp
79
+ },
80
+ name: name,
81
+ moduleUrl: moduleUrl,
82
+ stateSchema: stateSchema,
83
+ config: config,
84
+ subIdConfig: undefined,
85
+ authorization: "AllowAuthenticated",
86
+ visibility: "Public"
87
+ };
88
+
89
+ let PublicReadModel = {
90
+ Spec: PublicReadModel_Spec,
91
+ sourceNames: sourceNames,
92
+ make: make,
93
+ outputs: outputs,
94
+ operations: operations,
95
+ finish: finish
96
+ };
97
+
98
+ let sourceNames$1 = [];
99
+
100
+ function make$1(param, param$1, param$2, param$3) {
101
+ return 0;
102
+ }
103
+
104
+ function outputs$1(param) {
105
+ return 0;
106
+ }
107
+
108
+ function operations$1(param) {
109
+ return 0;
110
+ }
111
+
112
+ function finish$1() {
113
+
114
+ }
115
+
116
+ let InternalReadModel_Spec = {
117
+ Id: {
118
+ schema: Id$Reventless.StringPure.schema,
119
+ make: prim => prim,
120
+ makeFromString: prim => prim,
121
+ toString: prim => prim,
122
+ cmp: Id$Reventless.StringPure.cmp
123
+ },
124
+ name: name$1,
125
+ moduleUrl: moduleUrl$1,
126
+ stateSchema: stateSchema$1,
127
+ config: config$1,
128
+ subIdConfig: undefined,
129
+ authorization: "AllowAuthenticated",
130
+ visibility: "Internal"
131
+ };
132
+
133
+ let InternalReadModel = {
134
+ Spec: InternalReadModel_Spec,
135
+ sourceNames: sourceNames$1,
136
+ make: make$1,
137
+ outputs: outputs$1,
138
+ operations: operations$1,
139
+ finish: finish$1
140
+ };
141
+
142
+ function isVisible(R) {
143
+ let match = R.Spec.visibility;
144
+ return match === "Public";
145
+ }
146
+
147
+ let readModels = [
148
+ PublicReadModel,
149
+ InternalReadModel
150
+ ];
151
+
152
+ globalThis.describe("ReadModel visibility filter", () => {
153
+ globalThis.test("PPX defaults visibility to Public when no attribute is present", () => {
154
+ globalThis.expect("Public").toEqual("Public");
155
+ });
156
+ globalThis.test("Internal spec retains Internal value", () => {
157
+ globalThis.expect("Internal").toEqual("Internal");
158
+ });
159
+ globalThis.test("filter predicate excludes Internal", () => {
160
+ let visible = readModels.filter(isVisible);
161
+ globalThis.expect(visible.length).toBe(1);
162
+ });
163
+ globalThis.test("filter predicate retains Public name", () => {
164
+ let visible = readModels.filter(isVisible);
165
+ let first = visible[0];
166
+ globalThis.expect(first.Spec.name).toEqual("PublicView");
167
+ });
168
+ globalThis.test("unfiltered list still contains both entries (no over-filtering)", () => {
169
+ globalThis.expect(readModels.length).toBe(2);
170
+ });
171
+ });
172
+
173
+ globalThis.describe("Plugin_Structure.make — visibility tagging", () => {
174
+ let structure = Plugin_Structure$ReventlessCore.make("VisibilityPlugin", undefined, readModels, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
175
+ globalThis.test("readModels carries both Public and Internal entries", () => {
176
+ globalThis.expect(structure.readModels.length).toBe(2);
177
+ });
178
+ globalThis.test("the Public entry is tagged visibility = None", () => {
179
+ let $$public = structure.readModels.find(d => d.name === "PublicView");
180
+ globalThis.expect(Stdlib_Option.map($$public, d => d.visibility)).toEqual(Primitive_option.some(undefined));
181
+ });
182
+ globalThis.test("the Internal entry is carried and tagged visibility = Some(\"Internal\")", () => {
183
+ let internal = structure.readModels.find(d => d.name === "InternalView");
184
+ globalThis.expect(Stdlib_Option.map(internal, d => d.visibility)).toEqual("Internal");
185
+ });
186
+ globalThis.test("aggregates / stateViewSlices stay empty when none are passed (sanity)", () => {
187
+ globalThis.expect([
188
+ structure.aggregates.length,
189
+ structure.stateViewSlices.length
190
+ ]).toEqual([
191
+ 0,
192
+ 0
193
+ ]);
194
+ });
195
+ });
196
+
197
+ export {
198
+ PublicSpec,
199
+ InternalSpec,
200
+ PublicReadModel,
201
+ InternalReadModel,
202
+ isVisible,
203
+ readModels,
204
+ }
205
+ /* stateSchema Not a pure module */
@@ -0,0 +1,13 @@
1
+ S.enableJson()
2
+
3
+ @schema
4
+ type record = {
5
+ a: @s.meta({description: "aaa"}) string,
6
+ b: string,
7
+ }
8
+
9
+ @schema
10
+ type variant = | @s.meta({description: "QQQ"}) Q(int) | @s.meta({description: "XXX"}) X | Y
11
+
12
+ Console.log2("Record:", recordSchema->S.toJSONSchema->JSON.stringifyAny(~space=2))
13
+ Console.log2("Variant:", variantSchema->S.toJSONSchema->JSON.stringifyAny(~space=2))
@@ -0,0 +1,31 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+
5
+ S.enableJson();
6
+
7
+ let recordSchema = S.schema(s => ({
8
+ a: s.m(S.meta(S.string, {
9
+ description: "aaa"
10
+ })),
11
+ b: s.m(S.string)
12
+ }));
13
+
14
+ let variantSchema = S.union([
15
+ S.schema(s => ({
16
+ TAG: "Q",
17
+ _0: s.m(S.int)
18
+ })),
19
+ S.literal("X"),
20
+ S.literal("Y")
21
+ ]);
22
+
23
+ console.log("Record:", JSON.stringify(S.toJSONSchema(recordSchema), undefined, 2));
24
+
25
+ console.log("Variant:", JSON.stringify(S.toJSONSchema(variantSchema), undefined, 2));
26
+
27
+ export {
28
+ recordSchema,
29
+ variantSchema,
30
+ }
31
+ /* Not a pure module */
@@ -0,0 +1,298 @@
1
+ // Phase 2 validation: Plugin_Structure.make populates all graph fields correctly.
2
+ // Uses simplified test specs (PsPlaceOrder, PsShipOrder, PsOrdersView, PsAvailableProductsView)
3
+ // and calls Plugin_Structure.make directly — no Platform needed.
4
+
5
+ open JestGlobals
6
+
7
+ // Stub T modules — Plugin_Structure.make only reads `Spec` fields; `make` is never called.
8
+ type scsComponent = Component.t<
9
+ ReventlessInfra.StateChangeSlice.t,
10
+ ReventlessInfra.StateChangeSlice.outputs,
11
+ ReventlessInfra.StateChangeSlice.operations,
12
+ >
13
+ type svsComponent = Component.t<
14
+ ReventlessInfra.StateViewSlice.t,
15
+ ReventlessInfra.StateViewSlice.outputs,
16
+ ReventlessInfra.StateViewSlice.operations,
17
+ >
18
+
19
+ module PsPlaceOrderSlice: ReventlessInfra.StateChangeSlice.T = {
20
+ module Spec = PsPlaceOrder
21
+ module Behavior = {
22
+ type state = PsPlaceOrder.state
23
+ let initialState = PsPlaceOrder.initialState
24
+ let evolve = PsPlaceOrder.evolve
25
+ let decide = PsPlaceOrder.decide
26
+ let moduleUrl = PsPlaceOrder.moduleUrl
27
+ }
28
+ let isAsync = false
29
+ type component = scsComponent
30
+ let make = (~dcbEventLog as _, ~publishJsons as _, ~tagKeysByEventType as _=?, ~crossPartitionTagKeys as _=?, ~opts as _=?): component => Obj.magic(0)
31
+ }
32
+ module PsShipOrderSlice: ReventlessInfra.StateChangeSlice.T = {
33
+ module Spec = PsShipOrder
34
+ module Behavior = {
35
+ type state = PsShipOrder.state
36
+ let initialState = PsShipOrder.initialState
37
+ let evolve = PsShipOrder.evolve
38
+ let decide = PsShipOrder.decide
39
+ let moduleUrl = PsShipOrder.moduleUrl
40
+ }
41
+ let isAsync = false
42
+ type component = scsComponent
43
+ let make = (~dcbEventLog as _, ~publishJsons as _, ~tagKeysByEventType as _=?, ~crossPartitionTagKeys as _=?, ~opts as _=?): component => Obj.magic(0)
44
+ }
45
+ module PsOrdersViewSlice: ReventlessInfra.StateViewSlice.T = {
46
+ module Spec = PsOrdersView
47
+ module Projection = {
48
+ let project = PsOrdersView.project
49
+ let moduleUrl = PsOrdersView.moduleUrl
50
+ }
51
+ type component = svsComponent
52
+ let make = (~dcbEventLog as _, ~opts as _=?): component => Obj.magic(0)
53
+ }
54
+ module PsAvailableProductsViewSlice: ReventlessInfra.StateViewSlice.T = {
55
+ module Spec = PsAvailableProductsView
56
+ module Projection = {
57
+ let project = PsAvailableProductsView.project
58
+ let moduleUrl = PsAvailableProductsView.moduleUrl
59
+ }
60
+ type component = svsComponent
61
+ let make = (~dcbEventLog as _, ~opts as _=?): component => Obj.magic(0)
62
+ }
63
+ module PsCustomersViewSlice: ReventlessInfra.StateViewSlice.T = {
64
+ module Spec = PsCustomersView
65
+ module Projection = {
66
+ let project = PsCustomersView.project
67
+ let moduleUrl = PsCustomersView.moduleUrl
68
+ }
69
+ type component = svsComponent
70
+ let make = (~dcbEventLog as _, ~opts as _=?): component => Obj.magic(0)
71
+ }
72
+ module PsAnnotatedViewSlice: ReventlessInfra.StateViewSlice.T = {
73
+ module Spec = PsAnnotatedView
74
+ module Projection = {
75
+ let project = PsAnnotatedView.project
76
+ let moduleUrl = PsAnnotatedView.moduleUrl
77
+ }
78
+ type component = svsComponent
79
+ let make = (~dcbEventLog as _, ~opts as _=?): component => Obj.magic(0)
80
+ }
81
+
82
+ let structure = Plugin_Structure.make(
83
+ ~name="TestPlugin",
84
+ ~stateChangeSlices=[module(PsPlaceOrderSlice), module(PsShipOrderSlice)],
85
+ ~stateViewSlices=[
86
+ module(PsOrdersViewSlice),
87
+ module(PsAvailableProductsViewSlice),
88
+ module(PsCustomersViewSlice),
89
+ module(PsAnnotatedViewSlice),
90
+ ],
91
+ )
92
+
93
+ describe("Plugin_Structure.make — Phase 2 graph fields", () => {
94
+ describe("stateChangeSlices", () => {
95
+ testSync("produces two SCS entries in declaration order", () => {
96
+ expect(structure.stateChangeSlices->Array.length)->toBe(2)
97
+ })
98
+
99
+ testSync("PlaceOrder: producedEventTypes contains OrderPlaced (qualified)", () => {
100
+ let placeOrder = structure.stateChangeSlices->Array.getUnsafe(0)
101
+ expect(placeOrder.producedEventTypes)->toEqual(["TestPlugin.OrderPlaced"])
102
+ })
103
+
104
+ testSync("PlaceOrder: consumedEventTypes contains CatalogProductSynced qualified (payload-less variants excluded)", () => {
105
+ let placeOrder = structure.stateChangeSlices->Array.getUnsafe(0)
106
+ expect(placeOrder.consumedEventTypes)->toEqual(["TestPlugin.CatalogProductSynced"])
107
+ })
108
+
109
+ testSync("PlaceOrder: linkedViews contains Orders (consumes its OrderPlaced)", () => {
110
+ let placeOrder = structure.stateChangeSlices->Array.getUnsafe(0)
111
+ expect(placeOrder.linkedViews)->toEqual(["Orders"])
112
+ })
113
+
114
+ testSync("PlaceOrder: consistencyRead is AvailableProducts (only SVS consuming CatalogProductSynced)", () => {
115
+ let placeOrder = structure.stateChangeSlices->Array.getUnsafe(0)
116
+ expect(placeOrder.consistencyRead)->toEqual(Some("AvailableProducts"))
117
+ })
118
+
119
+ testSync("PlaceOrder command: level Collection (creation command), aggregateIdField orderId for UUID injection", () => {
120
+ let placeOrder = structure.stateChangeSlices->Array.getUnsafe(0)
121
+ let cmd = placeOrder.commands->Array.getUnsafe(0)
122
+ expect((cmd.level, cmd.aggregateIdField))->toEqual((
123
+ Reventless.Plugin.Collection,
124
+ Some("orderId"),
125
+ ))
126
+ })
127
+
128
+ testSync("ShipOrder: producedEventTypes contains OrderShipped (qualified)", () => {
129
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
130
+ expect(shipOrder.producedEventTypes)->toEqual(["TestPlugin.OrderShipped"])
131
+ })
132
+
133
+ testSync("ShipOrder: consumedEventTypes is empty (all consumed events are payload-less literals)", () => {
134
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
135
+ expect(shipOrder.consumedEventTypes)->toEqual([])
136
+ })
137
+
138
+ testSync("ShipOrder: linkedViews contains Orders (consumes its OrderShipped)", () => {
139
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
140
+ expect(shipOrder.linkedViews)->toEqual(["Orders"])
141
+ })
142
+
143
+ testSync("ShipOrder: consistencyRead is None (empty consumedEventTypes cannot overlap any SVS)", () => {
144
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
145
+ expect(shipOrder.consistencyRead)->toEqual(None)
146
+ })
147
+
148
+ testSync("ShipOrder command: level Instance, aggregateIdField orderId", () => {
149
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
150
+ let cmd = shipOrder.commands->Array.getUnsafe(0)
151
+ expect((cmd.level, cmd.aggregateIdField))->toEqual((
152
+ Reventless.Plugin.Instance,
153
+ Some("orderId"),
154
+ ))
155
+ })
156
+
157
+ testSync("ShipOrder: payload-less command CancelShipment is surfaced in commands", () => {
158
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
159
+ expect(shipOrder.commands->Array.map(c => c.name))->toEqual(["ShipOrder", "CancelShipment"])
160
+ })
161
+
162
+ testSync("ShipOrder: payload-less event ShipmentVoided is surfaced in events", () => {
163
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
164
+ expect(shipOrder.events->Array.map(e => e.name))->toEqual(["OrderShipped", "ShipmentVoided"])
165
+ })
166
+
167
+ testSync("ShipOrder: producedEventTypes still excludes the payload-less ShipmentVoided (DCB filter intact)", () => {
168
+ let shipOrder = structure.stateChangeSlices->Array.getUnsafe(1)
169
+ expect(shipOrder.producedEventTypes)->toEqual(["TestPlugin.OrderShipped"])
170
+ })
171
+ })
172
+
173
+ describe("stateViewSlices", () => {
174
+ testSync("produces four SVS entries in declaration order", () => {
175
+ expect(structure.stateViewSlices->Array.length)->toBe(4)
176
+ })
177
+
178
+ testSync("OrdersView: consumedEventTypes contains the three order events (qualified)", () => {
179
+ let ordersView = structure.stateViewSlices->Array.getUnsafe(0)
180
+ expect(ordersView.consumedEventTypes)->toEqual([
181
+ "TestPlugin.OrderPlaced",
182
+ "TestPlugin.OrderShipped",
183
+ "TestPlugin.OrderCancelled",
184
+ ])
185
+ })
186
+
187
+ testSync("OrdersView: linkedWriteSide contains both SCS producing order events", () => {
188
+ let ordersView = structure.stateViewSlices->Array.getUnsafe(0)
189
+ expect(ordersView.linkedWriteSide)->toEqual(["PlaceOrder", "ShipOrder"])
190
+ })
191
+
192
+ testSync("AvailableProductsView: consumedEventTypes contains catalog events (qualified)", () => {
193
+ let apv = structure.stateViewSlices->Array.getUnsafe(1)
194
+ expect(apv.consumedEventTypes)->toEqual([
195
+ "TestPlugin.CatalogProductSynced",
196
+ "TestPlugin.CatalogProductPriceChanged",
197
+ ])
198
+ })
199
+
200
+ testSync("AvailableProductsView: linkedWriteSide is empty (no SCS produces these events)", () => {
201
+ let apv = structure.stateViewSlices->Array.getUnsafe(1)
202
+ expect(apv.linkedWriteSide)->toEqual([])
203
+ })
204
+ })
205
+
206
+ describe("labelField / searchableFields", () => {
207
+ testSync("OrdersView: no @displayName → first non-`*Id` string field wins (customerName)", () => {
208
+ let ordersView = structure.stateViewSlices->Array.getUnsafe(0)
209
+ expect((ordersView.labelField, ordersView.searchableFields))->toEqual((
210
+ "customerName",
211
+ ["customerName"],
212
+ ))
213
+ })
214
+
215
+ testSync("AvailableProductsView: no @displayName → first non-`*Id` string field wins (name)", () => {
216
+ let apv = structure.stateViewSlices->Array.getUnsafe(1)
217
+ expect((apv.labelField, apv.searchableFields))->toEqual(("name", ["name"]))
218
+ })
219
+
220
+ testSync("Customers: composite @displayName → labelField=displayName, searchableFields=raw source fields in declaration order", () => {
221
+ let customers = structure.stateViewSlices->Array.getUnsafe(2)
222
+ expect((customers.labelField, customers.searchableFields))->toEqual((
223
+ "displayName",
224
+ ["firstName", "lastName"],
225
+ ))
226
+ })
227
+ })
228
+
229
+ // Phase 4: queryableDef.schema must carry x-reventless-* extension keys for
230
+ // annotated state types. Plugin_Structure now uses SuryToJsonSchema.deriveObjectSchema
231
+ // (annotation-aware) instead of S.toJSONSchema (metadata-blind).
232
+ describe("queryableDef.schema propagates x-reventless-* annotations", () => {
233
+ let getProperty = (json: JSON.t, key: string): option<JSON.t> =>
234
+ switch json->JSON.Decode.object {
235
+ | Some(obj) => obj->Dict.get(key)
236
+ | None => None
237
+ }
238
+
239
+ let getPropertyOf = (json: JSON.t, fieldName: string): option<JSON.t> =>
240
+ switch getProperty(json, "properties") {
241
+ | Some(props) =>
242
+ switch props->JSON.Decode.object {
243
+ | Some(obj) => obj->Dict.get(fieldName)
244
+ | None => None
245
+ }
246
+ | None => None
247
+ }
248
+
249
+ let parseSchema = (svs: Reventless.Plugin.queryableDef): JSON.t =>
250
+ svs.schema->JSON.parseOrThrow
251
+
252
+ let annotatedSchema = structure.stateViewSlices->Array.getUnsafe(3)->parseSchema
253
+
254
+ testSync("itemId carries x-reventless-id", () => {
255
+ expect(
256
+ annotatedSchema
257
+ ->getPropertyOf("itemId")
258
+ ->Option.flatMap(s => getProperty(s, "x-reventless-id"))
259
+ ->Option.flatMap(JSON.Decode.bool),
260
+ )->toBe(Some(true))
261
+ })
262
+
263
+ testSync("version carries x-reventless-subId", () => {
264
+ expect(
265
+ annotatedSchema
266
+ ->getPropertyOf("version")
267
+ ->Option.flatMap(s => getProperty(s, "x-reventless-subId"))
268
+ ->Option.flatMap(JSON.Decode.bool),
269
+ )->toBe(Some(true))
270
+ })
271
+
272
+ testSync("ownerId carries x-reventless-index = byOwner", () => {
273
+ expect(
274
+ annotatedSchema
275
+ ->getPropertyOf("ownerId")
276
+ ->Option.flatMap(s => getProperty(s, "x-reventless-index"))
277
+ ->Option.flatMap(JSON.Decode.string),
278
+ )->toBe(Some("byOwner"))
279
+ })
280
+
281
+ testSync("unannotated field 'name' has no x-reventless-* keys", () => {
282
+ let nameField = annotatedSchema->getPropertyOf("name")
283
+ expect((
284
+ nameField->Option.flatMap(s => getProperty(s, "x-reventless-id")),
285
+ nameField->Option.flatMap(s => getProperty(s, "x-reventless-subId")),
286
+ nameField->Option.flatMap(s => getProperty(s, "x-reventless-index")),
287
+ ))->toEqual((None, None, None))
288
+ })
289
+
290
+ testSync("unannotated state-view slice (Orders) emits no x-reventless-* keys", () => {
291
+ let ordersSchema = structure.stateViewSlices->Array.getUnsafe(0)->parseSchema
292
+ let orderIdField = ordersSchema->getPropertyOf("orderId")
293
+ expect(
294
+ orderIdField->Option.flatMap(s => getProperty(s, "x-reventless-id")),
295
+ )->toBe(None)
296
+ })
297
+ })
298
+ })