@reventlessdev/reventless-aws 3.0.0-alpha.167

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 (394) hide show
  1. package/CHANGELOG.md +1564 -0
  2. package/README.md +62 -0
  3. package/__mocks__/emptyModule.js +1 -0
  4. package/all-licenses.csv +565 -0
  5. package/docker-compose.dynamodb-local.yml +12 -0
  6. package/jest.setup.cjs +5 -0
  7. package/licenses-analysis.ods +0 -0
  8. package/package.json +73 -0
  9. package/rescript.json +39 -0
  10. package/reventless-licenses-analysis.xls +0 -0
  11. package/scripts/run-integration-tests.sh +43 -0
  12. package/src/Platform.res +1940 -0
  13. package/src/Platform.res.mjs +2281 -0
  14. package/src/Platform_Casts.res +106 -0
  15. package/src/Platform_Casts.res.mjs +13 -0
  16. package/src/Platform_Stack.res +153 -0
  17. package/src/Platform_Stack.res.mjs +121 -0
  18. package/src/Types.res +39 -0
  19. package/src/Types.res.mjs +21 -0
  20. package/src/adapter/AWS.res +96 -0
  21. package/src/adapter/AWS.res.mjs +186 -0
  22. package/src/adapter/AWS_Tags.res +16 -0
  23. package/src/adapter/AWS_Tags.res.mjs +48 -0
  24. package/src/adapter/Adapter_Helpers.res +19 -0
  25. package/src/adapter/Adapter_Helpers.res.mjs +37 -0
  26. package/src/adapter/Api/AppSync_EventsApi.res +172 -0
  27. package/src/adapter/Api/AppSync_EventsApi.res.mjs +96 -0
  28. package/src/adapter/Api/AppSync_Resolver_Native.res +93 -0
  29. package/src/adapter/Api/AppSync_Resolver_Native.res.mjs +67 -0
  30. package/src/adapter/Api/AppSync_Resolver_Retrying.res +653 -0
  31. package/src/adapter/Api/AppSync_Resolver_Retrying.res.mjs +462 -0
  32. package/src/adapter/Api/CommandSubscriptionResolvers_AppSync.res +29 -0
  33. package/src/adapter/Api/CommandSubscriptionResolvers_AppSync.res.mjs +15 -0
  34. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res +238 -0
  35. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res.mjs +179 -0
  36. package/src/adapter/Api/Platform_UIFragments_Lambda.res +229 -0
  37. package/src/adapter/Api/Platform_UIFragments_Lambda.res.mjs +245 -0
  38. package/src/adapter/Auth/Auth_Cognito.res +209 -0
  39. package/src/adapter/Auth/Auth_Cognito.res.mjs +135 -0
  40. package/src/adapter/CommandGenerator/CommandGeneratorResolvers.res +2 -0
  41. package/src/adapter/CommandGenerator/CommandGeneratorResolvers.res.mjs +12 -0
  42. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res +251 -0
  43. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res.mjs +126 -0
  44. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res +20 -0
  45. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res.mjs +23 -0
  46. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_Runtime.res +1 -0
  47. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_Runtime.res.mjs +11 -0
  48. package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res +95 -0
  49. package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res.mjs +50 -0
  50. package/src/adapter/CommandTopic/CommandTopicChannel.res +6 -0
  51. package/src/adapter/CommandTopic/CommandTopicChannel.res.mjs +21 -0
  52. package/src/adapter/CommandTopic/CommandTopicChannel_Helpers.res +196 -0
  53. package/src/adapter/CommandTopic/CommandTopicChannel_Helpers.res.mjs +145 -0
  54. package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res +91 -0
  55. package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res.mjs +74 -0
  56. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res +69 -0
  57. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res.mjs +62 -0
  58. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res +60 -0
  59. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res.mjs +56 -0
  60. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res +73 -0
  61. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res.mjs +65 -0
  62. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res +88 -0
  63. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res.mjs +76 -0
  64. package/src/adapter/CommandTopic/CommandTopicRemoteChannel.res +1 -0
  65. package/src/adapter/CommandTopic/CommandTopicRemoteChannel.res.mjs +9 -0
  66. package/src/adapter/CommandTopic/CommandTopicRemoteChannel_SQS.res +7 -0
  67. package/src/adapter/CommandTopic/CommandTopicRemoteChannel_SQS.res.mjs +17 -0
  68. package/src/adapter/Counter/CounterHandler_DynamoDbStream.res +103 -0
  69. package/src/adapter/Counter/CounterHandler_DynamoDbStream.res.mjs +68 -0
  70. package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res +107 -0
  71. package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res.mjs +145 -0
  72. package/src/adapter/DcbEventLog/DcbEventLogStorage.res +1 -0
  73. package/src/adapter/DcbEventLog/DcbEventLogStorage.res.mjs +9 -0
  74. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +84 -0
  75. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res.mjs +52 -0
  76. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res +1436 -0
  77. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res.mjs +1143 -0
  78. package/src/adapter/EventCollector/EventCollectorChannel.res +6 -0
  79. package/src/adapter/EventCollector/EventCollectorChannel.res.mjs +21 -0
  80. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res +63 -0
  81. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs +56 -0
  82. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res +20 -0
  83. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res.mjs +32 -0
  84. package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res +266 -0
  85. package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res.mjs +166 -0
  86. package/src/adapter/EventCollector/EventCollectorChannel_SQS.res +81 -0
  87. package/src/adapter/EventCollector/EventCollectorChannel_SQS.res.mjs +54 -0
  88. package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res +59 -0
  89. package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res.mjs +45 -0
  90. package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res +91 -0
  91. package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res.mjs +89 -0
  92. package/src/adapter/EventLog/EventLogStorage.res +3 -0
  93. package/src/adapter/EventLog/EventLogStorage.res.mjs +15 -0
  94. package/src/adapter/EventLog/EventLogStorage_DynamoDb.res +25 -0
  95. package/src/adapter/EventLog/EventLogStorage_DynamoDb.res.mjs +34 -0
  96. package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res +26 -0
  97. package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res.mjs +35 -0
  98. package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res +121 -0
  99. package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res.mjs +137 -0
  100. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res +265 -0
  101. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res.mjs +185 -0
  102. package/src/adapter/EventTopic/EventTopicPublisher.res +6 -0
  103. package/src/adapter/EventTopic/EventTopicPublisher.res.mjs +21 -0
  104. package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res +25 -0
  105. package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res.mjs +28 -0
  106. package/src/adapter/EventTopic/EventTopicPublisher_SNS.res +40 -0
  107. package/src/adapter/EventTopic/EventTopicPublisher_SNS.res.mjs +39 -0
  108. package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res +39 -0
  109. package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res.mjs +38 -0
  110. package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res +5 -0
  111. package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res.mjs +18 -0
  112. package/src/adapter/Mcp/MCP_Lambda.res +502 -0
  113. package/src/adapter/Mcp/MCP_Lambda.res.mjs +289 -0
  114. package/src/adapter/QueryDb/NodeResolver_AppSync.res +71 -0
  115. package/src/adapter/QueryDb/NodeResolver_AppSync.res.mjs +44 -0
  116. package/src/adapter/QueryDb/QueryDbResolvers.res +2 -0
  117. package/src/adapter/QueryDb/QueryDbResolvers.res.mjs +12 -0
  118. package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res +434 -0
  119. package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res.mjs +243 -0
  120. package/src/adapter/QueryDb/QueryDbResolvers_AppSync_NoOp.res +21 -0
  121. package/src/adapter/QueryDb/QueryDbResolvers_AppSync_NoOp.res.mjs +14 -0
  122. package/src/adapter/QueryDb/QueryDbResolvers_NoOp.res +21 -0
  123. package/src/adapter/QueryDb/QueryDbResolvers_NoOp.res.mjs +14 -0
  124. package/src/adapter/QueryDb/QueryDbStorage.res +5 -0
  125. package/src/adapter/QueryDb/QueryDbStorage.res.mjs +18 -0
  126. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res +115 -0
  127. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res.mjs +100 -0
  128. package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res +52 -0
  129. package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res.mjs +38 -0
  130. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res +271 -0
  131. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res.mjs +306 -0
  132. package/src/adapter/QueryDb/QueryInterceptor_Lambda.res +20 -0
  133. package/src/adapter/QueryDb/QueryInterceptor_Lambda.res.mjs +22 -0
  134. package/src/adapter/QueryEngine/QueryEngine.res +3 -0
  135. package/src/adapter/QueryEngine/QueryEngine.res.mjs +12 -0
  136. package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res +184 -0
  137. package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res.mjs +221 -0
  138. package/src/adapter/Runtime/AdminEventCollectorEntryPoint.mjs +879 -0
  139. package/src/adapter/Runtime/AggregateEntryPoint.mjs +313 -0
  140. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +327 -0
  141. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +239 -0
  142. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res +331 -0
  143. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res.mjs +240 -0
  144. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +247 -0
  145. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +185 -0
  146. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res +244 -0
  147. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res.mjs +185 -0
  148. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +347 -0
  149. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +244 -0
  150. package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res +285 -0
  151. package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res.mjs +212 -0
  152. package/src/adapter/Runtime/AutomationSliceEntryPoint.mjs +124 -0
  153. package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res +187 -0
  154. package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res.mjs +147 -0
  155. package/src/adapter/Runtime/CounterEntryPoint.mjs +91 -0
  156. package/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs +265 -0
  157. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +122 -0
  158. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +89 -0
  159. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +193 -0
  160. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +137 -0
  161. package/src/adapter/Runtime/EventMapperEntryPoint.mjs +97 -0
  162. package/src/adapter/Runtime/ExtensionPointEntryPoint.mjs +101 -0
  163. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +83 -0
  164. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +59 -0
  165. package/src/adapter/Runtime/HandlerFactoryHelpers.mjs +142 -0
  166. package/src/adapter/Runtime/HeartbeatEntryPoint.mjs +38 -0
  167. package/src/adapter/Runtime/PluginExtensionPointEntryPoint.mjs +137 -0
  168. package/src/adapter/Runtime/ReadModelEntryPoint.mjs +143 -0
  169. package/src/adapter/Runtime/RuntimeEnvironment.res +1 -0
  170. package/src/adapter/Runtime/RuntimeEnvironment.res.mjs +9 -0
  171. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +254 -0
  172. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res.mjs +169 -0
  173. package/src/adapter/Runtime/SideEffectEntryPoint.mjs +81 -0
  174. package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +178 -0
  175. package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res.mjs +129 -0
  176. package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res +166 -0
  177. package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res.mjs +87 -0
  178. package/src/adapter/Runtime/StateViewSliceEntryPoint.mjs +136 -0
  179. package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res +344 -0
  180. package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res.mjs +242 -0
  181. package/src/adapter/Runtime/TaskBucketEntryPoint.mjs +150 -0
  182. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +123 -0
  183. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +74 -0
  184. package/src/adapter/ScheduledPublisher/ScheduledPublisher.res +2 -0
  185. package/src/adapter/ScheduledPublisher/ScheduledPublisher.res.mjs +12 -0
  186. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res +54 -0
  187. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res.mjs +41 -0
  188. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res +97 -0
  189. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res.mjs +85 -0
  190. package/src/adapter/StateTopic/StateTopic_AppSync.res +418 -0
  191. package/src/adapter/StateTopic/StateTopic_AppSync.res.mjs +295 -0
  192. package/src/adapter/Task/TaskBucket.res +1 -0
  193. package/src/adapter/Task/TaskBucket.res.mjs +9 -0
  194. package/src/adapter/Task/TaskBucket_S3.res +157 -0
  195. package/src/adapter/Task/TaskBucket_S3.res.mjs +108 -0
  196. package/src/adapter/Task/TaskBucket_S3_Runtime.res +11 -0
  197. package/src/adapter/Task/TaskBucket_S3_Runtime.res.mjs +15 -0
  198. package/src/components/Aggregate_Builder.res +1 -0
  199. package/src/components/Aggregate_Builder.res.mjs +25 -0
  200. package/src/components/Aggregate_Builder_Micro.res +63 -0
  201. package/src/components/Aggregate_Builder_Micro.res.mjs +80 -0
  202. package/src/components/Aggregate_Builder_NoResolver.res +61 -0
  203. package/src/components/Aggregate_Builder_NoResolver.res.mjs +80 -0
  204. package/src/components/Aggregate_Builder_PerAggregate.res +57 -0
  205. package/src/components/Aggregate_Builder_PerAggregate.res.mjs +80 -0
  206. package/src/components/Aggregate_Builder_Single.res +59 -0
  207. package/src/components/Aggregate_Builder_Single.res.mjs +80 -0
  208. package/src/components/Aggregate_Builder_Single_Async.res +59 -0
  209. package/src/components/Aggregate_Builder_Single_Async.res.mjs +80 -0
  210. package/src/components/Api/AppSync_Adapter.res +500 -0
  211. package/src/components/Api/AppSync_Adapter.res.mjs +396 -0
  212. package/src/components/AutomationSlice_Builder.res +52 -0
  213. package/src/components/AutomationSlice_Builder.res.mjs +72 -0
  214. package/src/components/AutomationSlice_Builder_Bundled.res.mjs +70 -0
  215. package/src/components/Counter_Builder.res +10 -0
  216. package/src/components/Counter_Builder.res.mjs +16 -0
  217. package/src/components/DataCleaner.res +170 -0
  218. package/src/components/DataCleaner.res.mjs +2 -0
  219. package/src/components/DcbEventLog_Builder.res +8 -0
  220. package/src/components/DcbEventLog_Builder.res.mjs +14 -0
  221. package/src/components/ExtensionPoint_Builder.res +16 -0
  222. package/src/components/ExtensionPoint_Builder.res.mjs +37 -0
  223. package/src/components/ForeignReadModel_Builder.res +19 -0
  224. package/src/components/ForeignReadModel_Builder.res.mjs +48 -0
  225. package/src/components/InboundTranslationSlice_Builder.res +25 -0
  226. package/src/components/InboundTranslationSlice_Builder.res.mjs +31 -0
  227. package/src/components/OutboundTranslationSlice_Builder.res +60 -0
  228. package/src/components/OutboundTranslationSlice_Builder.res.mjs +76 -0
  229. package/src/components/OutboundTranslationSlice_Builder_Bundled.res.mjs +75 -0
  230. package/src/components/Plugin.res +29 -0
  231. package/src/components/Plugin.res.mjs +63 -0
  232. package/src/components/ReadModel_Builder.res +1 -0
  233. package/src/components/ReadModel_Builder.res.mjs +19 -0
  234. package/src/components/ReadModel_Builder_NoResolver.res +55 -0
  235. package/src/components/ReadModel_Builder_NoResolver.res.mjs +64 -0
  236. package/src/components/ReadModel_Builder_NoResolver_Stream.res +60 -0
  237. package/src/components/ReadModel_Builder_NoResolver_Stream.res.mjs +64 -0
  238. package/src/components/ReadModel_Builder_PerReadModel.res +53 -0
  239. package/src/components/ReadModel_Builder_PerReadModel.res.mjs +66 -0
  240. package/src/components/ReadModel_Builder_Single.res +52 -0
  241. package/src/components/ReadModel_Builder_Single.res.mjs +66 -0
  242. package/src/components/ReadModel_Builder_Single_Stream.res +60 -0
  243. package/src/components/ReadModel_Builder_Single_Stream.res.mjs +66 -0
  244. package/src/components/Scheduler.res +1 -0
  245. package/src/components/Scheduler.res.mjs +13 -0
  246. package/src/components/SideEffectHandler.res +1 -0
  247. package/src/components/SideEffectHandler.res.mjs +19 -0
  248. package/src/components/SideEffectHandler_PerSideEffectHandler.res +13 -0
  249. package/src/components/SideEffectHandler_PerSideEffectHandler.res.mjs +52 -0
  250. package/src/components/SideEffectHandler_Single.res +54 -0
  251. package/src/components/SideEffectHandler_Single.res.mjs +60 -0
  252. package/src/components/StateChangeSlice_Builder.res +17 -0
  253. package/src/components/StateChangeSlice_Builder.res.mjs +23 -0
  254. package/src/components/StateViewSlice_Builder.res +46 -0
  255. package/src/components/StateViewSlice_Builder.res.mjs +68 -0
  256. package/src/components/StateViewSlice_Builder_Bundled.res.mjs +69 -0
  257. package/src/components/StateViewSlice_Builder_Stream.res +50 -0
  258. package/src/components/StateViewSlice_Builder_Stream.res.mjs +68 -0
  259. package/src/components/Task_Builder.res +1 -0
  260. package/src/components/Task_Builder.res.mjs +28 -0
  261. package/src/components/Task_Builder_PerBucket.res +22 -0
  262. package/src/components/Task_Builder_PerBucket.res.mjs +63 -0
  263. package/src/components/Vpc.res +214 -0
  264. package/src/components/Vpc.res.mjs +117 -0
  265. package/src/components/Vpc.resi +22 -0
  266. package/src/errors/AppSync_Error.res +36 -0
  267. package/src/errors/AppSync_Error.res.mjs +38 -0
  268. package/src/errors/Cognito_Error.res +36 -0
  269. package/src/errors/Cognito_Error.res.mjs +38 -0
  270. package/src/errors/DynamoDb_Error.res +75 -0
  271. package/src/errors/DynamoDb_Error.res.mjs +86 -0
  272. package/src/errors/Kinesis_Error.res +36 -0
  273. package/src/errors/Kinesis_Error.res.mjs +38 -0
  274. package/src/errors/SNS_Error.res +34 -0
  275. package/src/errors/SNS_Error.res.mjs +38 -0
  276. package/src/errors/SQS_Error.res +40 -0
  277. package/src/errors/SQS_Error.res.mjs +41 -0
  278. package/src/plugin/cloner/ClonerRunner.res +1 -0
  279. package/src/plugin/cloner/ClonerRunner.res.mjs +9 -0
  280. package/src/plugin/cloner/ClonerRunner_Fargate.res +362 -0
  281. package/src/plugin/cloner/ClonerRunner_Fargate.res.mjs +246 -0
  282. package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res +42 -0
  283. package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res.mjs +45 -0
  284. package/src/plugin/heartbeat/HeartbeatRunner.res +1 -0
  285. package/src/plugin/heartbeat/HeartbeatRunner.res.mjs +9 -0
  286. package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +96 -0
  287. package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res.mjs +69 -0
  288. package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res +115 -0
  289. package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res.mjs +88 -0
  290. package/src/plugin/runtime/PluginRuntimeOperations.res +5 -0
  291. package/src/plugin/runtime/PluginRuntimeOperations.res.mjs +14 -0
  292. package/src/plugin/runtime/PluginRuntime_Builder.res +769 -0
  293. package/src/plugin/runtime/PluginRuntime_Builder.res.mjs +464 -0
  294. package/src/plugin/runtime/Util_PluginMessage_Runtime.res +13 -0
  295. package/src/plugin/runtime/Util_PluginMessage_Runtime.res.mjs +19 -0
  296. package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res +28 -0
  297. package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res.mjs +67 -0
  298. package/src/plugin/stack/Plugin_Stack.res +439 -0
  299. package/src/plugin/stack/Plugin_Stack.res.mjs +263 -0
  300. package/src/util/Util.res +29 -0
  301. package/src/util/Util.res.mjs +93 -0
  302. package/src/util/Util_AppSync.res +36 -0
  303. package/src/util/Util_AppSync.res.mjs +35 -0
  304. package/src/util/Util_AppSync_Caller.res +213 -0
  305. package/src/util/Util_AppSync_Caller.res.mjs +170 -0
  306. package/src/util/Util_Bundle.res +255 -0
  307. package/src/util/Util_Bundle.res.mjs +179 -0
  308. package/src/util/Util_Cloudwatch.res +14 -0
  309. package/src/util/Util_Cloudwatch.res.mjs +19 -0
  310. package/src/util/Util_CognitoGroupUser.res +39 -0
  311. package/src/util/Util_CognitoGroupUser.res.mjs +32 -0
  312. package/src/util/Util_CognitoGroupUser_Runtime.res +65 -0
  313. package/src/util/Util_CognitoGroupUser_Runtime.res.mjs +50 -0
  314. package/src/util/Util_Cognito_Runtime.res +52 -0
  315. package/src/util/Util_Cognito_Runtime.res.mjs +35 -0
  316. package/src/util/Util_DeadLetterQueue.res +154 -0
  317. package/src/util/Util_DeadLetterQueue.res.mjs +158 -0
  318. package/src/util/Util_DynamoDb.res +210 -0
  319. package/src/util/Util_DynamoDb.res.mjs +218 -0
  320. package/src/util/Util_DynamoDbStream.res +138 -0
  321. package/src/util/Util_DynamoDbStream.res.mjs +134 -0
  322. package/src/util/Util_DynamoDbStream_Runtime.res +94 -0
  323. package/src/util/Util_DynamoDbStream_Runtime.res.mjs +131 -0
  324. package/src/util/Util_DynamoDb_Runtime.res +216 -0
  325. package/src/util/Util_DynamoDb_Runtime.res.mjs +257 -0
  326. package/src/util/Util_DynamoDb_TableManager.res +23 -0
  327. package/src/util/Util_DynamoDb_TableManager.res.mjs +35 -0
  328. package/src/util/Util_DynamoDb_TableManager.resi +3 -0
  329. package/src/util/Util_Env.res +5 -0
  330. package/src/util/Util_Env.res.mjs +2 -0
  331. package/src/util/Util_EventSourceMapping.res +49 -0
  332. package/src/util/Util_EventSourceMapping.res.mjs +32 -0
  333. package/src/util/Util_HostUiDomain.res +28 -0
  334. package/src/util/Util_HostUiDomain.res.mjs +26 -0
  335. package/src/util/Util_IAM_Role.res +14 -0
  336. package/src/util/Util_IAM_Role.res.mjs +28 -0
  337. package/src/util/Util_Kinesis_Runtime.res +20 -0
  338. package/src/util/Util_Kinesis_Runtime.res.mjs +24 -0
  339. package/src/util/Util_Lambda.res +39 -0
  340. package/src/util/Util_Lambda.res.mjs +45 -0
  341. package/src/util/Util_LocalConfig.res +119 -0
  342. package/src/util/Util_LocalConfig.res.mjs +112 -0
  343. package/src/util/Util_ResourceNaming.res +15 -0
  344. package/src/util/Util_ResourceNaming.res.mjs +26 -0
  345. package/src/util/Util_S3.res +17 -0
  346. package/src/util/Util_S3.res.mjs +30 -0
  347. package/src/util/Util_S3_Runtime.res +11 -0
  348. package/src/util/Util_S3_Runtime.res.mjs +15 -0
  349. package/src/util/Util_SNS.res +33 -0
  350. package/src/util/Util_SNS.res.mjs +50 -0
  351. package/src/util/Util_SNS_FIFO.res +21 -0
  352. package/src/util/Util_SNS_FIFO.res.mjs +27 -0
  353. package/src/util/Util_SNS_Runtime.res +33 -0
  354. package/src/util/Util_SNS_Runtime.res.mjs +27 -0
  355. package/src/util/Util_SQS.res +70 -0
  356. package/src/util/Util_SQS.res.mjs +83 -0
  357. package/src/util/Util_SQS_FIFO.res +16 -0
  358. package/src/util/Util_SQS_FIFO.res.mjs +28 -0
  359. package/src/util/Util_SQS_Runtime.res +169 -0
  360. package/src/util/Util_SQS_Runtime.res.mjs +150 -0
  361. package/src/util/Util_SesPolicy_Runtime.res +54 -0
  362. package/src/util/Util_SesPolicy_Runtime.res.mjs +55 -0
  363. package/src/util/Util_StaticBundle.res +124 -0
  364. package/src/util/Util_StaticBundle.res.mjs +132 -0
  365. package/src/util/Util_Vpc.res +22 -0
  366. package/src/util/Util_Vpc.res.mjs +27 -0
  367. package/tests/AppSync_AdapterTest.res +396 -0
  368. package/tests/AppSync_AdapterTest.res.mjs +326 -0
  369. package/tests/AppSync_Resolver_RetryingTest.res +59 -0
  370. package/tests/AppSync_Resolver_RetryingTest.res.mjs +66 -0
  371. package/tests/Auth_CognitoTest.res +203 -0
  372. package/tests/Auth_CognitoTest.res.mjs +248 -0
  373. package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res +602 -0
  374. package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res.mjs +742 -0
  375. package/tests/EventLogStorage_DynamoDb_RuntimeTest.res +57 -0
  376. package/tests/EventLogStorage_DynamoDb_RuntimeTest.res.mjs +68 -0
  377. package/tests/MCP_LambdaTest.res +101 -0
  378. package/tests/MCP_LambdaTest.res.mjs +56 -0
  379. package/tests/Util_HostUiDomainTest.res +90 -0
  380. package/tests/Util_HostUiDomainTest.res.mjs +50 -0
  381. package/tests/Util_SQS_RuntimeTest.res +46 -0
  382. package/tests/Util_SQS_RuntimeTest.res.mjs +45 -0
  383. package/tests/Util_StaticBundleTest.res +136 -0
  384. package/tests/Util_StaticBundleTest.res.mjs +149 -0
  385. package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res +101 -0
  386. package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res.mjs +91 -0
  387. package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res +315 -0
  388. package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res.mjs +435 -0
  389. package/tests/integration/DcbIntegrationHarness.res +102 -0
  390. package/tests/integration/DcbIntegrationHarness.res.mjs +163 -0
  391. package/tests/integration/EpTestSlice.res +28 -0
  392. package/tests/integration/EpTestSlice.res.mjs +43 -0
  393. package/tests/integration/EpTestSliceBehavior.res +18 -0
  394. package/tests/integration/EpTestSliceBehavior.res.mjs +35 -0
@@ -0,0 +1,21 @@
1
+ // No-op AppSync resolver adapter — creates no resolvers.
2
+ // Used for admin-internal read models (e.g. Plugin) that have a DynamoDB QueryDb
3
+ // but no AppSync query fields (accessed only via queryEngine at runtime).
4
+ type api = Types.AppSync.api
5
+ type role = Types.AppSync.role
6
+
7
+ let make: ReventlessCore.QueryDb_Adapter.resolversMaker<api, role> = (
8
+ ~name as _,
9
+ ~api as _,
10
+ ~apiRole as _,
11
+ ~dataSourceName as _,
12
+ ~indexes as _,
13
+ ~subIdField as _,
14
+ ~idResolverConfigs as _,
15
+ ~idsResolverConfigs as _,
16
+ ~authorization as _: Reventless.Authorization.permission,
17
+ ~opts as _,
18
+ ) => {
19
+ resources: [],
20
+ resourcesMaker: _ => [],
21
+ }
@@ -0,0 +1,14 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+
4
+ function make(param, param$1, param$2, param$3, param$4, param$5, param$6, param$7, param$8, param$9) {
5
+ return {
6
+ resources: [],
7
+ resourcesMaker: param => []
8
+ };
9
+ }
10
+
11
+ export {
12
+ make,
13
+ }
14
+ /* No side effect */
@@ -0,0 +1,21 @@
1
+ open ReventlessCore
2
+ open Reventless.ReadModel
3
+
4
+ type api = unit
5
+ type role = unit
6
+
7
+ let make: QueryDb_Adapter.resolversMaker<api, role> = (
8
+ ~name as _: string,
9
+ ~api as _: api,
10
+ ~apiRole as _: role,
11
+ ~dataSourceName as _,
12
+ ~indexes as _: array<indexConfig>,
13
+ ~subIdField as _,
14
+ ~idResolverConfigs as _: array<idResolverConfig>,
15
+ ~idsResolverConfigs as _: array<idsResolverConfig>,
16
+ ~authorization as _: Reventless.Authorization.permission,
17
+ ~opts as _,
18
+ ) => {
19
+ resources: [],
20
+ resourcesMaker: _ => [],
21
+ }
@@ -0,0 +1,14 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+
4
+ function make(param, param$1, param$2, param$3, param$4, param$5, param$6, param$7, param$8, param$9) {
5
+ return {
6
+ resources: [],
7
+ resourcesMaker: param => []
8
+ };
9
+ }
10
+
11
+ export {
12
+ make,
13
+ }
14
+ /* No side effect */
@@ -0,0 +1,5 @@
1
+ let name = "QueryDbStorage"
2
+
3
+ module DynamoDb = QueryDbStorage_DynamoDb
4
+ module DynamoDbStream = QueryDbStorage_DynamoDbStream
5
+ module DynamoDb_Runtime = QueryDbStorage_DynamoDb_Runtime
@@ -0,0 +1,18 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+
4
+ let name = "QueryDbStorage";
5
+
6
+ let DynamoDb;
7
+
8
+ let DynamoDbStream;
9
+
10
+ let DynamoDb_Runtime;
11
+
12
+ export {
13
+ name,
14
+ DynamoDb,
15
+ DynamoDbStream,
16
+ DynamoDb_Runtime,
17
+ }
18
+ /* No side effect */
@@ -0,0 +1,115 @@
1
+ open PulumiAws
2
+ open DynamoDb.Table
3
+
4
+ type api = Types.AppSync.api
5
+ type role = Types.AppSync.role
6
+
7
+ let globalSecondaryIndexes = (indexes: array<Reventless.ReadModel.indexConfig>) =>
8
+ indexes
9
+ ->Array.map((indexConfig: Reventless.ReadModel.indexConfig) => {
10
+ let {index, projectionType} = indexConfig
11
+ let (projectionType, includes) = switch projectionType {
12
+ | Reventless.ReadModel.ALL as _projection => (PulumiAws.DynamoDb.Table.ALL, None)
13
+ | Reventless.ReadModel.KEYS_ONLY as _projection => (
14
+ PulumiAws.DynamoDb.Table.KEYS_ONLY,
15
+ None,
16
+ )
17
+ | Reventless.ReadModel.INCLUDE(includes) => (
18
+ PulumiAws.DynamoDb.Table.INCLUDE,
19
+ Some(includes),
20
+ )
21
+ }
22
+ {
23
+ name: index,
24
+ hashKey: indexConfig.idField->Option.getOr(index),
25
+ rangeKey: ?indexConfig.subIdField,
26
+ projectionType,
27
+ nonKeyAttributes: ?includes,
28
+ }->Pulumi.Input.make
29
+ })
30
+ ->Pulumi.Input.make
31
+
32
+ let attributes = (sortField, indexes: array<Reventless.ReadModel.indexConfig>) =>
33
+ [
34
+ [{name: "id", type_: "S"}],
35
+ sortField->Option.mapOr([], sortField => [{name: sortField, type_: "S"}]),
36
+ indexes
37
+ ->Array.map((indexConfig: Reventless.ReadModel.indexConfig) => {
38
+ let {index, type_} = indexConfig
39
+ [
40
+ [{name: indexConfig.idField->Option.getOr(index), type_}],
41
+ indexConfig.subIdField->Option.mapOr([], sortField => [{name: sortField, type_: "S"}]),
42
+ ]->Array.flat
43
+ })
44
+ ->Array.flat,
45
+ ]->Array.flat
46
+
47
+ let dataSource = (name, table, api, apiRole, opts) => {
48
+ let _dataSourceRolePolicy = {
49
+ IAM.RolePolicy.make(
50
+ ~name,
51
+ ~args={
52
+ IAM.RolePolicy.policy: table.arn
53
+ ->Pulumi.Output.apply(tableArn => {
54
+ open PolicyDocument
55
+ PolicyDocument.make(
56
+ ~id=name ++ "DataSourcePolicy",
57
+ ~statements=[
58
+ {
59
+ sid: "AllowDynamoDbActions",
60
+ effect: Allow,
61
+ actions: Action("dynamodb:*"),
62
+ resources: Resource(tableArn),
63
+ },
64
+ ],
65
+ )->toJsonString
66
+ })
67
+ ->Pulumi.Output.asInput,
68
+ role: apiRole
69
+ ->Pulumi.Output.flatMap((role: PulumiAws.IAM.Role.t) => role.id)
70
+ ->Pulumi.Output.asInput,
71
+ },
72
+ ~opts,
73
+ )
74
+ }
75
+
76
+ AppSync.DataSource.makeDynamoDBDataSource(~name, ~api, ~table, ~serviceRole=apiRole, ~opts)
77
+ }
78
+
79
+ let make: ReventlessCore.QueryDb_Adapter.storageMaker<api, role> = (
80
+ ~name,
81
+ ~indexes,
82
+ ~subIdField=?,
83
+ ~ttl=?,
84
+ ~api,
85
+ ~apiRole,
86
+ ~opts,
87
+ ) => {
88
+ let tags = AWS.Tags.make(~name, ReventlessCore.QueryDb.componentType)
89
+ let table = Util_DynamoDb.makeTable(
90
+ name,
91
+ ~attributes=attributes(subIdField, indexes),
92
+ ~rangeKey=?subIdField,
93
+ ~globalSecondaryIndexes=indexes->globalSecondaryIndexes,
94
+ ~ttl?,
95
+ ~tags,
96
+ ~opts,
97
+ )
98
+
99
+ open QueryDbStorage_DynamoDb_Runtime
100
+ {
101
+ resources: [table->Util_DynamoDb.toResource(~tags=tags->Pulumi.Output.fromInput)],
102
+ dataSourceName: dataSource(name, table, api, apiRole, opts).name,
103
+ operations: table
104
+ ->Util_DynamoDb.toResolvedTableOutput
105
+ ->Pulumi.Output.apply(resolvedTable => {
106
+ ReventlessCore.QueryDb.load: resolvedTable->load,
107
+ loadStream: resolvedTable->loadStream,
108
+ save: resolvedTable->save,
109
+ saveBatch: resolvedTable->saveBatch,
110
+ count: resolvedTable->count,
111
+ delete: resolvedTable->delete,
112
+ deleteBatch: resolvedTable->deleteBatch,
113
+ }),
114
+ }
115
+ }
@@ -0,0 +1,100 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Aws from "@pulumi/aws";
4
+ import * as Output$Pulumi from "@reventlessdev/rescript-pulumi-pulumi/src/Output.res.mjs";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as AWS_Tags$ReventlessAws from "../AWS_Tags.res.mjs";
7
+ import * as QueryDb$ReventlessCore from "@reventlessdev/reventless-core/src/components/QueryDb/QueryDb.res.mjs";
8
+ import * as PolicyDocument$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/PolicyDocument.res.mjs";
9
+ import * as Util_DynamoDb$ReventlessAws from "../../util/Util_DynamoDb.res.mjs";
10
+ import * as AppSync_DataSource$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/AppSync/AppSync_DataSource.res.mjs";
11
+ import * as QueryDbStorage_DynamoDb_Runtime$ReventlessAws from "./QueryDbStorage_DynamoDb_Runtime.res.mjs";
12
+
13
+ function globalSecondaryIndexes(indexes) {
14
+ return indexes.map(indexConfig => {
15
+ let projectionType = indexConfig.projectionType;
16
+ let index = indexConfig.index;
17
+ let match;
18
+ match = typeof projectionType !== "object" ? (
19
+ projectionType === "KEYS_ONLY" ? [
20
+ "KEYS_ONLY",
21
+ undefined
22
+ ] : [
23
+ "ALL",
24
+ undefined
25
+ ]
26
+ ) : [
27
+ "INCLUDE",
28
+ projectionType._0
29
+ ];
30
+ return {
31
+ hashKey: Stdlib_Option.getOr(indexConfig.idField, index),
32
+ name: index,
33
+ projectionType: match[0],
34
+ nonKeyAttributes: match[1],
35
+ rangeKey: indexConfig.subIdField
36
+ };
37
+ });
38
+ }
39
+
40
+ function attributes(sortField, indexes) {
41
+ return [
42
+ [{
43
+ name: "id",
44
+ type: "S"
45
+ }],
46
+ Stdlib_Option.mapOr(sortField, [], sortField => [{
47
+ name: sortField,
48
+ type: "S"
49
+ }]),
50
+ indexes.map(indexConfig => [
51
+ [{
52
+ name: Stdlib_Option.getOr(indexConfig.idField, indexConfig.index),
53
+ type: indexConfig.type_
54
+ }],
55
+ Stdlib_Option.mapOr(indexConfig.subIdField, [], sortField => [{
56
+ name: sortField,
57
+ type: "S"
58
+ }])
59
+ ].flat()).flat()
60
+ ].flat();
61
+ }
62
+
63
+ function dataSource(name, table, api, apiRole, opts) {
64
+ new (Aws.iam.RolePolicy)(name, {
65
+ policy: table.arn.apply(tableArn => PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, name + "DataSourcePolicy", [{
66
+ Sid: "AllowDynamoDbActions",
67
+ Effect: "Allow",
68
+ Action: "dynamodb:*",
69
+ Resource: tableArn
70
+ }]))),
71
+ role: Output$Pulumi.flatMap(apiRole, role => role.id)
72
+ }, opts);
73
+ return AppSync_DataSource$PulumiAws.makeDynamoDBDataSource(name, api, table, apiRole, opts);
74
+ }
75
+
76
+ function make(name, indexes, subIdField, ttl, api, apiRole, opts) {
77
+ let tags = AWS_Tags$ReventlessAws.make(name, QueryDb$ReventlessCore.componentType);
78
+ let table = Util_DynamoDb$ReventlessAws.makeTable(attributes(subIdField, indexes), globalSecondaryIndexes(indexes), ttl, subIdField, tags, opts, name);
79
+ return {
80
+ resources: [Util_DynamoDb$ReventlessAws.toResource(tags, table)],
81
+ dataSourceName: dataSource(name, table, api, apiRole, opts).name,
82
+ operations: Util_DynamoDb$ReventlessAws.toResolvedTableOutput(table).apply(resolvedTable => ({
83
+ load: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.load(resolvedTable),
84
+ loadStream: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.loadStream(resolvedTable),
85
+ save: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.save(resolvedTable),
86
+ saveBatch: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.saveBatch(resolvedTable),
87
+ count: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.count(resolvedTable),
88
+ delete: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.$$delete(resolvedTable),
89
+ deleteBatch: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.deleteBatch(resolvedTable)
90
+ }))
91
+ };
92
+ }
93
+
94
+ export {
95
+ globalSecondaryIndexes,
96
+ attributes,
97
+ dataSource,
98
+ make,
99
+ }
100
+ /* @pulumi/aws Not a pure module */
@@ -0,0 +1,52 @@
1
+ open QueryDbStorage_DynamoDb
2
+
3
+ type api = Types.AppSync.api
4
+ type role = Types.AppSync.role
5
+
6
+ /** ReadModel Spec.names for which a stream-enabled QueryDb was created in this deploy.
7
+ Read by subscriptionInfraHook to decide which QueryDbs get a StateTopic Lambda. */
8
+ let streamRegistry: Set.t<string> = Set.make()
9
+
10
+ let make: ReventlessCore.QueryDb_Adapter.storageMaker<api, role> = (
11
+ ~name,
12
+ ~indexes,
13
+ ~subIdField=?,
14
+ ~ttl=?,
15
+ ~api,
16
+ ~apiRole,
17
+ ~opts,
18
+ ) => {
19
+ streamRegistry->Set.add(name)
20
+ let tags = AWS.Tags.make(~name, ReventlessCore.QueryDb.componentType)
21
+ let table = Util_DynamoDbStream.makeTable(
22
+ name,
23
+ ~attributes=attributes(subIdField, indexes),
24
+ ~rangeKey=?subIdField,
25
+ ~globalSecondaryIndexes=indexes->globalSecondaryIndexes,
26
+ ~ttl?,
27
+ ~streamViewType=NEW_AND_OLD_IMAGES,
28
+ ~tags,
29
+ ~opts,
30
+ )
31
+ open QueryDbStorage_DynamoDb_Runtime
32
+ {
33
+ resources: [
34
+ // DynamoDb service resource required by QueryEngine_DynamoDb and QueryDbResolvers_AppSync
35
+ table->Util_DynamoDb.toResource(~tags=tags->Pulumi.Output.fromInput),
36
+ // DynamoDbStream service resource required by StateTopic_AppSync (stream ARN in resourceInfo)
37
+ table->Util_DynamoDbStream.toResource(~tags=tags->Pulumi.Output.fromInput),
38
+ ],
39
+ dataSourceName: dataSource(name, table, api, apiRole, opts).name,
40
+ operations: table
41
+ ->Util_DynamoDb.toResolvedTableOutput
42
+ ->Pulumi.Output.apply(resolvedTable => {
43
+ ReventlessCore.QueryDb.load: resolvedTable->load,
44
+ loadStream: resolvedTable->loadStream,
45
+ save: resolvedTable->save,
46
+ saveBatch: resolvedTable->saveBatch,
47
+ count: resolvedTable->count,
48
+ delete: resolvedTable->delete,
49
+ deleteBatch: resolvedTable->deleteBatch,
50
+ }),
51
+ }
52
+ }
@@ -0,0 +1,38 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as AWS_Tags$ReventlessAws from "../AWS_Tags.res.mjs";
4
+ import * as QueryDb$ReventlessCore from "@reventlessdev/reventless-core/src/components/QueryDb/QueryDb.res.mjs";
5
+ import * as Util_DynamoDb$ReventlessAws from "../../util/Util_DynamoDb.res.mjs";
6
+ import * as Util_DynamoDbStream$ReventlessAws from "../../util/Util_DynamoDbStream.res.mjs";
7
+ import * as QueryDbStorage_DynamoDb$ReventlessAws from "./QueryDbStorage_DynamoDb.res.mjs";
8
+ import * as QueryDbStorage_DynamoDb_Runtime$ReventlessAws from "./QueryDbStorage_DynamoDb_Runtime.res.mjs";
9
+
10
+ let streamRegistry = new Set();
11
+
12
+ function make(name, indexes, subIdField, ttl, api, apiRole, opts) {
13
+ streamRegistry.add(name);
14
+ let tags = AWS_Tags$ReventlessAws.make(name, QueryDb$ReventlessCore.componentType);
15
+ let table = Util_DynamoDbStream$ReventlessAws.makeTable(QueryDbStorage_DynamoDb$ReventlessAws.attributes(subIdField, indexes), QueryDbStorage_DynamoDb$ReventlessAws.globalSecondaryIndexes(indexes), ttl, subIdField, "NEW_AND_OLD_IMAGES", tags, opts, name);
16
+ return {
17
+ resources: [
18
+ Util_DynamoDb$ReventlessAws.toResource(tags, table),
19
+ Util_DynamoDbStream$ReventlessAws.toResource(tags, table)
20
+ ],
21
+ dataSourceName: QueryDbStorage_DynamoDb$ReventlessAws.dataSource(name, table, api, apiRole, opts).name,
22
+ operations: Util_DynamoDb$ReventlessAws.toResolvedTableOutput(table).apply(resolvedTable => ({
23
+ load: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.load(resolvedTable),
24
+ loadStream: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.loadStream(resolvedTable),
25
+ save: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.save(resolvedTable),
26
+ saveBatch: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.saveBatch(resolvedTable),
27
+ count: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.count(resolvedTable),
28
+ delete: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.$$delete(resolvedTable),
29
+ deleteBatch: QueryDbStorage_DynamoDb_Runtime$ReventlessAws.deleteBatch(resolvedTable)
30
+ }))
31
+ };
32
+ }
33
+
34
+ export {
35
+ streamRegistry,
36
+ make,
37
+ }
38
+ /* streamRegistry Not a pure module */
@@ -0,0 +1,271 @@
1
+ open AwsSdk.DynamoDb.DocumentClient
2
+ open Util_DynamoDb_Runtime
3
+ // Belt.Result removed — Ok/Error are global in RescriptCore
4
+
5
+ // True lazy pagination: each DynamoDB page is fetched on demand.
6
+ // Per-page retry is handled inside the paginateEffect callback.
7
+ // Stream.take(n) short-circuits pagination once n items are consumed.
8
+ let loadStream = table =>
9
+ id => {
10
+ let baseParams: QueryCommand.input = {
11
+ tableName: table.name,
12
+ consistentRead: true,
13
+ keyConditionExpression: "id=:id",
14
+ expressionAttributeValues: [(":id", id->JSON.Encode.string)]->Dict.fromArray,
15
+ }
16
+ Stream.paginateEffect((None: option<dict<JSON.t>>), cursor =>
17
+ Effect.tryPromise(
18
+ ~catch=DynamoDb_Error.classify,
19
+ () => {
20
+ let params = switch cursor {
21
+ | None => baseParams
22
+ | Some(key) => {...baseParams, exclusiveStartKey: key}
23
+ }
24
+ QueryCommand.send(params->QueryCommand.make)
25
+ },
26
+ )
27
+ ->Effect.retry(DynamoDb_Error.retrySchedule)
28
+ ->Effect.catchAll(err =>
29
+ Effect.fail(
30
+ ReventlessInfra.QueryDb.NotLoadedFromStorage(DynamoDb_Error.message(err)),
31
+ )
32
+ )
33
+ ->Effect.map(result => (
34
+ result.items
35
+ ->Option.getOr([])
36
+ ->Array.map(js => js->JSON.stringifyAny->Option.getOr("")->JSON.parseOrThrow),
37
+ result.lastEvaluatedKey->Option.map(key => Some(key)),
38
+ ))
39
+ )
40
+ }
41
+
42
+ // Eager load derived from loadStream — collects all items into an array.
43
+ let load = table =>
44
+ id =>
45
+ loadStream(table)(id)
46
+ ->Stream.runCollect
47
+ ->Effect.map(arr => arr->Ok)
48
+ ->Effect.catchAll(err => {
49
+ let tableName = table.name
50
+ let msg = ReventlessCore.QueryDb.storageErrorToString(err)
51
+ ReventlessCore.EffectLogger.logError(
52
+ ~comp=__MODULE__,
53
+ `load: Couldn't load state for ${id} from ${tableName}: ${msg}`,
54
+ )
55
+ ->Effect.map(_ => Error(err))
56
+ })
57
+ ->Effect.runPromise
58
+
59
+ let save = table =>
60
+ (id, json, saveMode: ReventlessCore.QueryDb.saveMode, ttl) => {
61
+ let tableName = table.name
62
+ let json = json->insertTtl(ttl)
63
+
64
+ let effect = switch saveMode {
65
+ | Init =>
66
+ table->putIfNotExistsWithRetries(~idKey=table.hashKey, ~sortKey=?table.rangeKey, id, json)
67
+ ->Effect.flatMap(result =>
68
+ switch result {
69
+ | Ok() =>
70
+ ReventlessCore.EffectLogger.logInfo(~comp=__MODULE__, `save: saved Init state to ${tableName}: id=${id}`)
71
+ ->Effect.map(_ => Ok())
72
+ | Error(errorMsg) =>
73
+ ReventlessCore.EffectLogger.logError(
74
+ ~comp=__MODULE__,
75
+ `save: Couldn't save Init state to ${tableName}, id=${id}: ${errorMsg}`,
76
+ )
77
+ ->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotSavedToStorage(errorMsg)))
78
+ }
79
+ )
80
+ | Any
81
+ | Overwrite =>
82
+ table
83
+ ->putWithRetries(id, json)
84
+ ->Effect.flatMap(result =>
85
+ switch result {
86
+ | Ok() =>
87
+ ReventlessCore.EffectLogger.logInfo(~comp=__MODULE__, `save: saved state to ${tableName}: id=${id}`)
88
+ ->Effect.map(_ => Ok())
89
+ | Error(errorMsg) =>
90
+ ReventlessCore.EffectLogger.logError(
91
+ ~comp=__MODULE__,
92
+ `save: Couldn't save state to ${tableName}, id=${id}: ${errorMsg}`,
93
+ )
94
+ ->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotSavedToStorage(errorMsg)))
95
+ }
96
+ )
97
+ }
98
+ effect->Effect.runPromise
99
+ }
100
+
101
+ let sliceBatch = (arr, batchNr) => {
102
+ let start = batchNr * BatchWriteCommand.maxBatchSize
103
+ let end = start + BatchWriteCommand.maxBatchSize
104
+ arr->Array.slice(~start, ~end)
105
+ }
106
+
107
+ let writeMultiple = (writeRequests, op, ids, table) => {
108
+ let tableName = table.name
109
+ let count = ids->Array.length->Int.toString
110
+ let allIdsStr = ids->Array.joinUnsafe(", ")
111
+ let size = writeRequests->Array.length
112
+ let batches = (size->Int.toFloat /. BatchWriteCommand.maxBatchSize->Int.toFloat)->Math.Int.ceil
113
+
114
+ let logSplitEffect =
115
+ if batches > 1 {
116
+ ReventlessCore.EffectLogger.logInfo(
117
+ ~comp=__MODULE__,
118
+ `writeBatch: splitting up batch of size ${size->Int.toString} into ${batches->Int.toString} batches`,
119
+ )
120
+ } else {
121
+ Effect.succeed()
122
+ }
123
+
124
+ let batchEffects =
125
+ Array.fromInitializer(~length=batches, batchNr =>
126
+ writeRequests
127
+ ->sliceBatch(batchNr)
128
+ ->toTable(tableName)
129
+ ->batchWriteWithRetries
130
+ ->Effect.map(result => {
131
+ let batchIds = ids->sliceBatch(batchNr)
132
+ let batchCount = batchIds->Array.length->Int.toString
133
+ let batchIdsStr = batchIds->Array.joinUnsafe(", ")
134
+ switch result {
135
+ | Ok() => None
136
+ | Error(error) =>
137
+ Some(`Batch ${batchNr->Int.toString}: ${batchCount} ids:${batchIdsStr}: ${error}`)
138
+ }
139
+ })
140
+ )
141
+
142
+ logSplitEffect
143
+ ->Effect.flatMap(_ =>
144
+ Effect.all(batchEffects, {"concurrency": "unbounded"})
145
+ )
146
+ ->Effect.map(results => results->Array.filterMap(x => x))
147
+ ->Effect.flatMap(errors =>
148
+ switch errors {
149
+ | [] =>
150
+ ReventlessCore.EffectLogger.logInfo(
151
+ ~comp=__MODULE__,
152
+ `writeBatch: ${op} ${count} states: ${tableName}, ids:${allIdsStr}`,
153
+ )
154
+ ->Effect.map(_ => Ok())
155
+ | errors =>
156
+ let errorsStr = errors->Array.joinUnsafe("; ")
157
+ let errorMsg = `writeBatch: Couldn't save states to ${tableName}: ${errorsStr}`
158
+ ReventlessCore.EffectLogger.logError(~comp=__MODULE__, errorMsg)
159
+ ->Effect.map(_ => Error(ReventlessInfra.QueryDb.BatchNotFullyWrittenToStorage(errorMsg)))
160
+ }
161
+ )
162
+ ->Effect.catchAll(err => {
163
+ let msg = DynamoDb_Error.message(err)
164
+ let errorMsg = `writeBatch: Couldn't save states to ${tableName}, ${count} ids:${allIdsStr}: ${msg}`
165
+ ReventlessCore.EffectLogger.logError(~comp=__MODULE__, errorMsg)
166
+ ->Effect.map(_ => Error(ReventlessInfra.QueryDb.BatchNotFullyWrittenToStorage(errorMsg)))
167
+ })
168
+ ->Effect.runPromise
169
+ }
170
+
171
+ let saveBatch = table =>
172
+ async items =>
173
+ switch items {
174
+ | [] => Ok()
175
+ | [(id, json, ttl)] => await save(table)(id, json, Any, ttl)
176
+ | items =>
177
+ let _tableName = table.name
178
+ let ids = items->Array.map(((id, _, _)) => id)
179
+ await items
180
+ ->Array.map(((id, json, ttl)) => {
181
+ json->Util_DynamoDb_Runtime.injectId(table.hashKey, id)->insertTtl(ttl)->toPutRequest
182
+ })
183
+ ->writeMultiple("finished put", ids, table)
184
+ }
185
+
186
+ let count = table =>
187
+ (id, fieldName, inc) => {
188
+ let tableName = table.name
189
+ ReventlessCore.EffectLogger.logInfo(
190
+ ~comp=__MODULE__,
191
+ `count: ${tableName}, ${id}, ${fieldName}, ${inc->Int.toString}`,
192
+ )
193
+ ->Effect.flatMap(_ =>
194
+ Effect.tryPromise(
195
+ ~catch=err => ReventlessCore.Util.Error.messageFromUnknown(err, "count"),
196
+ () =>
197
+ UpdateCommand.make({
198
+ tableName,
199
+ key: [("id", id->JSON.Encode.string)]->Dict.fromArray,
200
+ updateExpression: "ADD #fieldName :inc",
201
+ expressionAttributeNames: [("#fieldName", fieldName)]->Dict.fromArray,
202
+ expressionAttributeValues: [(":inc", inc->Int.toFloat->JSON.Encode.float)]
203
+ ->Dict.fromArray,
204
+ returnValues: #UPDATED_NEW,
205
+ })->UpdateCommand.send,
206
+ )
207
+ )
208
+ ->Effect.flatMap(updateOutput =>
209
+ switch updateOutput.attributes->AwsSdk.DynamoDb.DocumentClient.getIntAttribute("count") {
210
+ | Some(value) => Effect.succeed(Ok(value))
211
+ | None =>
212
+ ReventlessCore.EffectLogger.logError(
213
+ ~comp=__MODULE__,
214
+ `count: Invalid updateOutput in count on ${tableName}`,
215
+ )
216
+ ->Effect.map(_ =>
217
+ Error(ReventlessInfra.QueryDb.NotCountedOnStorage("Invalid updateOutput in count"))
218
+ )
219
+ }
220
+ )
221
+ ->Effect.catchAll(errorMsg =>
222
+ ReventlessCore.EffectLogger.logError(~comp=__MODULE__, `count: Couldn't count on ${tableName}: ${errorMsg}`)
223
+ ->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotCountedOnStorage(errorMsg)))
224
+ )
225
+ ->Effect.runPromise
226
+ }
227
+
228
+ let delete = table =>
229
+ (id, sort) => {
230
+ let tableName = table.name
231
+ table
232
+ ->deleteWithRetries(id, ~sort?)
233
+ ->Effect.flatMap(result =>
234
+ switch result {
235
+ | Ok() =>
236
+ ReventlessCore.EffectLogger.logInfo(
237
+ ~comp=__MODULE__,
238
+ `delete: deleted state from ${tableName}: id=${id}, sort=${sort->JSON.stringifyAny->Option.getOr("None")}`,
239
+ )
240
+ ->Effect.map(_ => Ok())
241
+ | Error(errorMsg) =>
242
+ ReventlessCore.EffectLogger.logError(
243
+ ~comp=__MODULE__,
244
+ `delete: Couldn't delete state from ${tableName}, id=${id}, sort=${sort->JSON.stringifyAny->Option.getOr("None")}: ${errorMsg}`,
245
+ )
246
+ ->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotDeletedFromStorage(errorMsg)))
247
+ }
248
+ )
249
+ ->Effect.runPromise
250
+ }
251
+
252
+ let deleteBatch = table =>
253
+ async items =>
254
+ switch items {
255
+ | [] => Ok()
256
+ | [(id, sort)] => await delete(table)(id, sort)
257
+ | items =>
258
+ let _tableName = table.name
259
+ let ids = items->Array.map(((id, _)) => id)
260
+ await items
261
+ ->Array.map(((id, sort)) =>
262
+ switch sort {
263
+ | Some((sortField, sortKey)) =>
264
+ [("id", id->JSON.Encode.string), (sortField, sortKey->JSON.Encode.string)]
265
+ ->Dict.fromArray
266
+ ->toDeleteRequest
267
+ | None => [("id", id->JSON.Encode.string)]->Dict.fromArray->toDeleteRequest
268
+ }
269
+ )
270
+ ->writeMultiple("deleted", ids, table)
271
+ }