@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,178 @@
1
+ // Compact Effect logger — delegates to Logger.emit for format.
2
+ //
3
+ // Two responsibilities:
4
+ // 1. install() — replaces Effect's default logger (timestamp=/level=/fiber=)
5
+ // with Logger.emit so all Effect.runPromise/runSync calls use the unified format.
6
+ // 2. logInfo/logWarn/logError/logDebug — structured helpers with ~comp and ~detail
7
+ // that return Effect.t<unit> for use in Effect pipelines.
8
+ //
9
+ // ~comp / ~detail and any ambient annotations (e.g. correlationId, requestId set
10
+ // via Effect.annotateLogs at the request boundary) travel as Effect log
11
+ // annotations — NOT baked into the message string. install() reads them off
12
+ // `loggerOptions.annotations` and forwards them to Logger.emit, which promotes
13
+ // them to top-level JSON fields. The message stays clean human text.
14
+ //
15
+ // Usage: import at platform startup (module init calls install()).
16
+ // EffectLogger.logInfo(~comp=`Aggregate(${Spec.name})`, ~detail=eventJson, "replay done")
17
+
18
+ type loggerOptions
19
+ type logLevel
20
+ type annotationsMap
21
+
22
+ @get external _message: loggerOptions => JSON.t = "message"
23
+ @get external _logLevel: loggerOptions => logLevel = "logLevel"
24
+ @get external _ordinal: logLevel => int = "ordinal"
25
+ @get external _annotations: loggerOptions => annotationsMap = "annotations"
26
+
27
+ // Effect stores log annotations as a HashMap<string, unknown>; toEntries gives a
28
+ // plain [key, value] array. Values arrive as raw JS — string annotations decode
29
+ // directly via JSON.Decode.string.
30
+ @module("effect/HashMap")
31
+ external _annotationEntries: annotationsMap => array<(string, JSON.t)> = "toEntries"
32
+
33
+ let _messageToString = (msg: JSON.t): string =>
34
+ switch msg {
35
+ | Array(arr) =>
36
+ arr
37
+ ->Array.map(j =>
38
+ switch j {
39
+ | String(s) => s
40
+ | _ => j->JSON.stringifyAny->Option.getOr("")
41
+ }
42
+ )
43
+ ->Array.join(" ")
44
+ | String(s) => s
45
+ | _ => msg->JSON.stringifyAny->Option.getOr("")
46
+ }
47
+
48
+ type effectLogger = {mutable log: loggerOptions => unit}
49
+
50
+ @module("effect/Logger")
51
+ external _defaultLogger: effectLogger = "defaultLogger"
52
+
53
+ // Effect's runtime gates log effects by a minimum LogLevel BEFORE they reach the
54
+ // installed logger above — so `Effect.logDebug` is dropped unless the threshold is
55
+ // lowered. We set that threshold per log effect from a configurable minimum.
56
+ type effectLogLevel
57
+ @module("effect/LogLevel") external _llDebug: effectLogLevel = "Debug"
58
+ @module("effect/LogLevel") external _llInfo: effectLogLevel = "Info"
59
+ @module("effect/LogLevel") external _llWarning: effectLogLevel = "Warning"
60
+ @module("effect/LogLevel") external _llError: effectLogLevel = "Error"
61
+ @module("effect/LogLevel") external _llNone: effectLogLevel = "None"
62
+
63
+ @module("effect/Logger")
64
+ external _withMinimumLogLevel: (Effect.t<'a, 'e, 'r>, effectLogLevel) => Effect.t<'a, 'e, 'r> =
65
+ "withMinimumLogLevel"
66
+
67
+ @val external _envLogLevel: option<string> = "process.env.LOG_LEVEL"
68
+
69
+ // Minimum level used when LOG_LEVEL is unset. Framework default is Info; a platform
70
+ // may lower it (e.g. the in-memory dev platform sets Debug) via setDefaultMinLevel.
71
+ let _defaultMin = ref(Logger.Info)
72
+ let setDefaultMinLevel = (l: Logger.level) => _defaultMin := l
73
+
74
+ // Resolve the active minimum: explicit LOG_LEVEL wins, else the platform default.
75
+ let _effectMin = (): effectLogLevel =>
76
+ switch _envLogLevel {
77
+ | Some("silent") => _llNone
78
+ | Some("debug") => _llDebug
79
+ | Some("info") => _llInfo
80
+ | Some("warn") => _llWarning
81
+ | Some("error") => _llError
82
+ | _ =>
83
+ switch _defaultMin.contents {
84
+ | Logger.Debug => _llDebug
85
+ | Logger.Info => _llInfo
86
+ | Logger.Warn => _llWarning
87
+ | Logger.Error => _llError
88
+ }
89
+ }
90
+
91
+ let ordinalToLevel = ordinal =>
92
+ if ordinal >= 40000 {
93
+ Logger.Error
94
+ } else if ordinal >= 30000 {
95
+ Logger.Warn
96
+ } else if ordinal >= 20000 {
97
+ Logger.Info
98
+ } else {
99
+ Logger.Debug
100
+ }
101
+
102
+ let install = () =>
103
+ _defaultLogger.log = opts => {
104
+ let msg = opts->_message->_messageToString
105
+ let level = opts->_logLevel->_ordinal->ordinalToLevel
106
+ // Decode log annotations: `comp`, `plugin`, and `detail` get dedicated
107
+ // Logger.emit handling (prefix/plugin resolution, expandable payload);
108
+ // everything else (correlationId, requestId, …) flows through as
109
+ // top-level string fields.
110
+ let comp = ref(None)
111
+ let plugin = ref(None)
112
+ let detail = ref(None)
113
+ let extra = Dict.make()
114
+ opts
115
+ ->_annotations
116
+ ->_annotationEntries
117
+ ->Array.forEach(((k, v)) =>
118
+ switch k {
119
+ | "comp" => comp := v->JSON.Decode.string
120
+ | "plugin" => plugin := v->JSON.Decode.string
121
+ | "detail" =>
122
+ detail :=
123
+ switch v->JSON.Decode.string {
124
+ | Some(s) =>
125
+ try Some(s->JSON.parseOrThrow) catch {
126
+ | _ => Some(JSON.Encode.string(s))
127
+ }
128
+ | None => Some(v)
129
+ }
130
+ | _ =>
131
+ switch v->JSON.Decode.string {
132
+ | Some(s) => extra->Dict.set(k, s)
133
+ | None => extra->Dict.set(k, v->JSON.stringify)
134
+ }
135
+ }
136
+ )
137
+ let annotations = extra->Dict.toArray->Array.length == 0 ? None : Some(extra)
138
+ Logger.emit(
139
+ ~level,
140
+ ~comp=?comp.contents,
141
+ ~plugin=?plugin.contents,
142
+ ~detail=?detail.contents,
143
+ ~annotations?,
144
+ msg,
145
+ )
146
+ }
147
+
148
+ // Self-installing: runs at module initialization time.
149
+ install()
150
+
151
+ // ─── Structured log helpers ──────────────────────────────────────────────────
152
+ // Returns Effect.t<unit> — usable in Effect pipelines or with ->Effect.runSync.
153
+ //
154
+ // ~comp / ~detail attach as Effect log annotations; install() reads them back.
155
+ // ~detail: structured JSON shown only in a JSON sink (expandable on click);
156
+ // the in-memory terminal output shows only the message line.
157
+
158
+ // Attach comp/detail as annotations on the log effect. detail is stringified so
159
+ // it rides through Effect's string-keyed annotation map; install() re-parses it.
160
+ let _annotate = (eff, ~comp=?, ~detail=?) => {
161
+ let eff = switch comp {
162
+ | Some(c) => eff->Effect.annotateLogs("comp", c)
163
+ | None => eff
164
+ }
165
+ switch detail {
166
+ | Some(d) => eff->Effect.annotateLogs("detail", d->JSON.stringify)
167
+ | None => eff
168
+ }
169
+ }
170
+
171
+ let logInfo = (~comp=?, ~detail=?, msg) =>
172
+ Effect.logInfo(msg)->_annotate(~comp?, ~detail?)->_withMinimumLogLevel(_effectMin())
173
+ let logWarn = (~comp=?, ~detail=?, msg) =>
174
+ Effect.logWarning(msg)->_annotate(~comp?, ~detail?)->_withMinimumLogLevel(_effectMin())
175
+ let logError = (~comp=?, ~detail=?, msg) =>
176
+ Effect.logError(msg)->_annotate(~comp?, ~detail?)->_withMinimumLogLevel(_effectMin())
177
+ let logDebug = (~comp=?, ~detail=?, msg) =>
178
+ Effect.logDebug(msg)->_annotate(~comp?, ~detail?)->_withMinimumLogLevel(_effectMin())
@@ -0,0 +1,171 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
4
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Logger from "effect/Logger";
7
+ import * as HashMap from "effect/HashMap";
8
+ import * as LogLevel from "effect/LogLevel";
9
+ import * as Logger$ReventlessCore from "./Logger.res.mjs";
10
+
11
+ function _messageToString(msg) {
12
+ if (Array.isArray(msg)) {
13
+ return msg.map(j => {
14
+ if (typeof j === "string") {
15
+ return j;
16
+ } else {
17
+ return Stdlib_Option.getOr(JSON.stringify(j), "");
18
+ }
19
+ }).join(" ");
20
+ }
21
+ switch (typeof msg) {
22
+ case "string" :
23
+ return msg;
24
+ default:
25
+ return Stdlib_Option.getOr(JSON.stringify(msg), "");
26
+ }
27
+ }
28
+
29
+ let _defaultMin = {
30
+ contents: "Info"
31
+ };
32
+
33
+ function setDefaultMinLevel(l) {
34
+ _defaultMin.contents = l;
35
+ }
36
+
37
+ function _effectMin() {
38
+ let match = process.env.LOG_LEVEL;
39
+ if (match !== undefined) {
40
+ switch (match) {
41
+ case "debug" :
42
+ return LogLevel.Debug;
43
+ case "error" :
44
+ return LogLevel.Error;
45
+ case "info" :
46
+ return LogLevel.Info;
47
+ case "silent" :
48
+ return LogLevel.None;
49
+ case "warn" :
50
+ return LogLevel.Warning;
51
+ }
52
+ }
53
+ let match$1 = _defaultMin.contents;
54
+ switch (match$1) {
55
+ case "Debug" :
56
+ return LogLevel.Debug;
57
+ case "Info" :
58
+ return LogLevel.Info;
59
+ case "Warn" :
60
+ return LogLevel.Warning;
61
+ case "Error" :
62
+ return LogLevel.Error;
63
+ }
64
+ }
65
+
66
+ function ordinalToLevel(ordinal) {
67
+ if (ordinal >= 40000) {
68
+ return "Error";
69
+ } else if (ordinal >= 30000) {
70
+ return "Warn";
71
+ } else if (ordinal >= 20000) {
72
+ return "Info";
73
+ } else {
74
+ return "Debug";
75
+ }
76
+ }
77
+
78
+ function install() {
79
+ Logger.defaultLogger.log = opts => {
80
+ let msg = _messageToString(opts.message);
81
+ let level = ordinalToLevel(opts.logLevel.ordinal);
82
+ let comp = {
83
+ contents: undefined
84
+ };
85
+ let plugin = {
86
+ contents: undefined
87
+ };
88
+ let detail = {
89
+ contents: undefined
90
+ };
91
+ let extra = {};
92
+ HashMap.toEntries(opts.annotations).forEach(param => {
93
+ let v = param[1];
94
+ let k = param[0];
95
+ switch (k) {
96
+ case "comp" :
97
+ comp.contents = Stdlib_JSON.Decode.string(v);
98
+ return;
99
+ case "detail" :
100
+ let s = Stdlib_JSON.Decode.string(v);
101
+ let tmp;
102
+ if (s !== undefined) {
103
+ try {
104
+ tmp = JSON.parse(s);
105
+ } catch (exn) {
106
+ tmp = s;
107
+ }
108
+ } else {
109
+ tmp = v;
110
+ }
111
+ detail.contents = tmp;
112
+ return;
113
+ case "plugin" :
114
+ plugin.contents = Stdlib_JSON.Decode.string(v);
115
+ return;
116
+ default:
117
+ let s$1 = Stdlib_JSON.Decode.string(v);
118
+ if (s$1 !== undefined) {
119
+ extra[k] = s$1;
120
+ } else {
121
+ extra[k] = JSON.stringify(v);
122
+ }
123
+ return;
124
+ }
125
+ });
126
+ let annotations = Object.entries(extra).length === 0 ? undefined : extra;
127
+ Logger$ReventlessCore.emit(level, comp.contents, plugin.contents, detail.contents, annotations, msg);
128
+ };
129
+ }
130
+
131
+ install();
132
+
133
+ function _annotate(eff, comp, detail) {
134
+ let eff$1 = comp !== undefined ? Effect.annotateLogs(eff, "comp", comp) : eff;
135
+ if (detail !== undefined) {
136
+ return Effect.annotateLogs(eff$1, "detail", JSON.stringify(detail));
137
+ } else {
138
+ return eff$1;
139
+ }
140
+ }
141
+
142
+ function logInfo(comp, detail, msg) {
143
+ return Logger.withMinimumLogLevel(_annotate(Effect.logInfo(msg), comp, detail), _effectMin());
144
+ }
145
+
146
+ function logWarn(comp, detail, msg) {
147
+ return Logger.withMinimumLogLevel(_annotate(Effect.logWarning(msg), comp, detail), _effectMin());
148
+ }
149
+
150
+ function logError(comp, detail, msg) {
151
+ return Logger.withMinimumLogLevel(_annotate(Effect.logError(msg), comp, detail), _effectMin());
152
+ }
153
+
154
+ function logDebug(comp, detail, msg) {
155
+ return Logger.withMinimumLogLevel(_annotate(Effect.logDebug(msg), comp, detail), _effectMin());
156
+ }
157
+
158
+ export {
159
+ _messageToString,
160
+ _defaultMin,
161
+ setDefaultMinLevel,
162
+ _effectMin,
163
+ ordinalToLevel,
164
+ install,
165
+ _annotate,
166
+ logInfo,
167
+ logWarn,
168
+ logError,
169
+ logDebug,
170
+ }
171
+ /* Not a pure module */
@@ -0,0 +1,69 @@
1
+ /** SSH2 (FTPS) bindings with added helper function to parseUrl */
2
+ include SSH2
3
+
4
+ /** parses the given url into a tuple of two strings: (host, port, path)
5
+ (ftp://[user[:password]@])
6
+ actually respects: host[:port]/url-path
7
+ */
8
+ let parseUrl: string => (
9
+ /* host */ string,
10
+ /* port */ option<int>,
11
+ /* url-path */ string,
12
+ ) = url => {
13
+ let colonI = url->String.indexOf(":")
14
+ let slashI = url->String.indexOf("/")
15
+ switch (colonI > -1, slashI > -1) {
16
+ | (true, true) =>
17
+ let fst = colonI < slashI ? colonI : slashI
18
+ let port =
19
+ colonI < slashI
20
+ ? url->String.slice(~start=colonI + 1, ~end=slashI)
21
+ : url->String.slice(~start=colonI + 1)
22
+ let path =
23
+ colonI < slashI
24
+ ? url->String.slice(~start=slashI + 1)
25
+ : url->String.slice(~start=slashI + 1, ~end=colonI)
26
+ (url->String.slice(~start=0, ~end=fst), port->Int.fromString, path)
27
+ | (false, true) => (
28
+ url->String.slice(~start=0, ~end=slashI),
29
+ None,
30
+ url->String.slice(~start=slashI + 1),
31
+ )
32
+ | (true, false) => (
33
+ url->String.slice(~start=0, ~end=colonI),
34
+ url->String.slice(~start=colonI + 1)->Int.fromString,
35
+ "",
36
+ )
37
+ | (false, false) => (url, None, "")
38
+ }
39
+ }
40
+
41
+ exception CouldNotEstablishSftpConnection(error)
42
+
43
+ let make: Client.t => promise<t> = client => {
44
+ let (promise, resolve, reject) = Util.Promise.make()
45
+ client
46
+ ->make((readdirError, entities) =>
47
+ switch readdirError {
48
+ | None => resolve(entities)
49
+ | Some(err) => reject(CouldNotEstablishSftpConnection(err->toSftpError))
50
+ }
51
+ )
52
+ ->ignore // ignore bool return value, which states to listen for continue event before sending more data
53
+ promise
54
+ }
55
+
56
+ exception CouldNotReadDirectory(string, error)
57
+
58
+ let readdir: (t, string) => promise<array<entity>> = (client, dirName) => {
59
+ let (promise, resolve, reject) = Util.Promise.make()
60
+ client
61
+ ->readdir(~dirName, (readdirError, entities) =>
62
+ switch readdirError {
63
+ | None => resolve(entities)
64
+ | Some(err) => reject(CouldNotReadDirectory(dirName, err))
65
+ }
66
+ )
67
+ ->ignore // ignore bool return value, which states to listen for continue event before sending more data
68
+ promise
69
+ }
@@ -0,0 +1,101 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as SSH2 from "@reventlessdev/rescript-ssh2/src/SSH2.res.mjs";
4
+ import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
5
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
6
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
7
+ import * as Util_Promise$ReventlessCore from "./Util_Promise.res.mjs";
8
+
9
+ function parseUrl(url) {
10
+ let colonI = url.indexOf(":");
11
+ let slashI = url.indexOf("/");
12
+ let match = colonI > -1;
13
+ let match$1 = slashI > -1;
14
+ if (!match) {
15
+ if (match$1) {
16
+ return [
17
+ url.slice(0, slashI),
18
+ undefined,
19
+ url.slice(slashI + 1 | 0)
20
+ ];
21
+ } else {
22
+ return [
23
+ url,
24
+ undefined,
25
+ ""
26
+ ];
27
+ }
28
+ }
29
+ if (!match$1) {
30
+ return [
31
+ url.slice(0, colonI),
32
+ Stdlib_Int.fromString(url.slice(colonI + 1 | 0), undefined),
33
+ ""
34
+ ];
35
+ }
36
+ let fst = colonI < slashI ? colonI : slashI;
37
+ let port = colonI < slashI ? url.slice(colonI + 1 | 0, slashI) : url.slice(colonI + 1 | 0);
38
+ let path = colonI < slashI ? url.slice(slashI + 1 | 0) : url.slice(slashI + 1 | 0, colonI);
39
+ return [
40
+ url.slice(0, fst),
41
+ Stdlib_Int.fromString(port, undefined),
42
+ path
43
+ ];
44
+ }
45
+
46
+ let CouldNotEstablishSftpConnection = /* @__PURE__ */Primitive_exceptions.create("FTP-ReventlessCore.CouldNotEstablishSftpConnection");
47
+
48
+ function make(client) {
49
+ let match = Util_Promise$ReventlessCore.make();
50
+ let reject = match[2];
51
+ let resolve = match[1];
52
+ client.sftp((readdirError, entities) => {
53
+ if (readdirError !== undefined) {
54
+ return reject({
55
+ RE_EXN_ID: CouldNotEstablishSftpConnection,
56
+ _1: Primitive_option.valFromOption(readdirError)
57
+ });
58
+ } else {
59
+ return resolve(entities);
60
+ }
61
+ });
62
+ return match[0];
63
+ }
64
+
65
+ let CouldNotReadDirectory = /* @__PURE__ */Primitive_exceptions.create("FTP-ReventlessCore.CouldNotReadDirectory");
66
+
67
+ function readdir(client, dirName) {
68
+ let match = Util_Promise$ReventlessCore.make();
69
+ let reject = match[2];
70
+ let resolve = match[1];
71
+ client.readdir(dirName, (readdirError, entities) => {
72
+ if (readdirError !== undefined) {
73
+ return reject({
74
+ RE_EXN_ID: CouldNotReadDirectory,
75
+ _1: dirName,
76
+ _2: Primitive_option.valFromOption(readdirError)
77
+ });
78
+ } else {
79
+ return resolve(entities);
80
+ }
81
+ });
82
+ return match[0];
83
+ }
84
+
85
+ let Client = SSH2.Client;
86
+
87
+ let ReadStreamOptions = SSH2.ReadStreamOptions;
88
+
89
+ let extendedError = SSH2.extendedError;
90
+
91
+ export {
92
+ Client,
93
+ ReadStreamOptions,
94
+ extendedError,
95
+ parseUrl,
96
+ CouldNotEstablishSftpConnection,
97
+ make,
98
+ CouldNotReadDirectory,
99
+ readdir,
100
+ }
101
+ /* Util_Promise-ReventlessCore Not a pure module */
@@ -0,0 +1,142 @@
1
+ // open FTP
2
+ type password = string
3
+ type privateKey = string
4
+ type passphrase = option<string>
5
+
6
+ type secret = Password(password) | Key(privateKey, passphrase)
7
+
8
+ type connectionParams = {
9
+ host: string,
10
+ port: option<int>,
11
+ path: string,
12
+ userName: string,
13
+ secret: secret,
14
+ readyTimeout: option<int>,
15
+ retryCount: int,
16
+ retryInterval: int,
17
+ }
18
+ type getFile = (
19
+ ~remotePath: string,
20
+ ~localPath: string,
21
+ ~options: SSH2.fastOptions=?,
22
+ ~callback: JsExn.t => unit,
23
+ ) => promise<unit>
24
+ type failFn = JsExn.t => unit
25
+ type endFtpFn = unit => unit
26
+
27
+ type downloadAction = (
28
+ ~connectionParams: connectionParams,
29
+ ~entities: array<FTP.entity>,
30
+ ~sftp: FTP.t,
31
+ ~fail: failFn,
32
+ ~endFtp: endFtpFn,
33
+ ) => promise<bool>
34
+
35
+ type ftpAction =
36
+ | Download(downloadAction)
37
+ | Upload(NodeStreams.Readable.t, /* filename on ftp */ string)
38
+
39
+ let ftp = (~connectionParams: connectionParams, ~ftpAction: ftpAction) => {
40
+ let {host, port, userName, secret, path, readyTimeout} = connectionParams
41
+ let (promise, resolve, _reject) = Util.Promise.make()
42
+ let result: ref<result<bool, string>> = ref(Error("Stream ended before action handling!"))
43
+ let client = FTP.Client.make()
44
+
45
+ client
46
+ ->FTP.Client.onEnd(() => {
47
+ EffectLogger.logInfo(~comp=__MODULE__, "Client.onEnd")->Effect.runSync
48
+ resolve(result.contents)
49
+ })
50
+ ->FTP.Client.onError(err => {
51
+ resolve(Error(err->JsExn.message->Option.getOr("Error contains no message.")))
52
+ // client->FTP.Client.end_
53
+ })
54
+ ->FTP.Client.onTimeout(() =>
55
+ client
56
+ ->FTP.Client.error(
57
+ FTP.makeError("SSH-Client Error: Connection timed out")->Message.log("Client.onTimeout"),
58
+ )
59
+ ->ignore
60
+ )
61
+ ->FTP.Client.onReady(client => {
62
+ let _ = Util.Promise.onEndHandler(
63
+ async () =>
64
+ switch await client->FTP.make {
65
+ | sftp =>
66
+ let fail: failFn = err => sftp->FTP.error(err->FTP.toSftpError)->ignore
67
+ let endFtp: endFtpFn = () => client->FTP.Client.end_
68
+
69
+ sftp
70
+ ->FTP.onEnd(() => {
71
+ EffectLogger.logInfo(~comp=__MODULE__, "end sftp stream")->Effect.runSync
72
+ // client->FTP.Client.end_
73
+ })
74
+ ->FTP.onError(err => {
75
+ EffectLogger.logError(
76
+ ~comp=__MODULE__,
77
+ `Error: ${err->JSON.stringifyAny->Option.getOr("unknown")}`,
78
+ )->Effect.runSync
79
+ client->FTP.Client.error(err->FTP.toJsError)->ignore
80
+ endFtp()
81
+ })
82
+ ->ignore
83
+
84
+ switch ftpAction {
85
+ | Download(downloadAction) =>
86
+ switch await sftp->FTP.readdir(path) {
87
+ | entities =>
88
+ result :=
89
+ (await downloadAction(~connectionParams, ~entities, ~sftp, ~fail, ~endFtp))->Ok
90
+ | exception JsExn(e) => result := e->Util.Error.message->Error
91
+ }
92
+ | Upload(readableStream, filename) =>
93
+ let ws =
94
+ (path ++ ("/" ++ filename))
95
+ ->Message.log("FTPHandler: path for write stream")
96
+ ->FTP.createWriteStream(sftp, ~path=_)
97
+ ->NodeStreams.Writable.onFinish(() => {
98
+ result := Ok(true)
99
+ EffectLogger.logInfo(~comp=__MODULE__, "writable ended")->Effect.runSync
100
+ })
101
+ ->NodeStreams.Writable.onClose(() => {
102
+ result := Ok(true) // Workaround: since Node 18 there is no call to onFinish() anymore
103
+ EffectLogger.logInfo(~comp=__MODULE__, "writable closed")->Effect.runSync
104
+ endFtp()
105
+ })
106
+ ->NodeStreams.Writable.onError(err => {
107
+ EffectLogger.logError(
108
+ ~comp=__MODULE__,
109
+ `Error in Write Stream: ${err
110
+ ->JsExn.message
111
+ ->Option.getOr("unknown")}`,
112
+ )->Effect.runSync
113
+ FTP.makeError("FTPHandler: Error in Write Stream")->fail
114
+ })
115
+ await readableStream->NodeStreams.pipeline0(ws)
116
+ }
117
+ | exception FTP.CouldNotEstablishSftpConnection(err) =>
118
+ client
119
+ ->FTP.Client.error(
120
+ err->Message.log("Couldn't establish SFTP connection:")->SSH2.toJsError,
121
+ )
122
+ ->ignore
123
+ },
124
+ _ => (),
125
+ )
126
+ })
127
+ ->FTP.Client.connect(
128
+ switch secret {
129
+ | Password(password) => {SSH2.Client.host, ?port, username: userName, password, ?readyTimeout}
130
+ | Key(privateKey, passphrase) => {
131
+ host,
132
+ ?port,
133
+ username: userName,
134
+ privateKey,
135
+ ?passphrase,
136
+ ?readyTimeout,
137
+ }
138
+ },
139
+ )
140
+
141
+ promise
142
+ }