@reventlessdev/reventless-aws 3.0.0-alpha.344 → 3.0.0-alpha.345

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 (232) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +11 -11
  3. package/scripts/ProvisionIdentity.res +8 -3
  4. package/src/Platform.res +327 -328
  5. package/src/Platform.res.mjs +4 -2
  6. package/src/Platform_Casts.res +13 -4
  7. package/src/adapter/Api/AppSyncEventsSigner_Ops.res +8 -4
  8. package/src/adapter/Api/AppSync_EventsApi.res +12 -14
  9. package/src/adapter/Api/AppSync_Resolver_Native.res +3 -4
  10. package/src/adapter/Api/AppSync_Resolver_Retrying.res +78 -70
  11. package/src/adapter/Api/AppSync_SourceApiAssociation_Retrying.res +11 -8
  12. package/src/adapter/Api/Platform_AdminScan_Ops.res +15 -14
  13. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res +10 -2
  14. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda_Ops.res +40 -50
  15. package/src/adapter/Api/Platform_UIFragments_Lambda.res +39 -32
  16. package/src/adapter/Api/Platform_UIFragments_Lambda_Ops.res +5 -2
  17. package/src/adapter/Auth/Auth_ActiveRolePoolAttachment.res +0 -1
  18. package/src/adapter/Auth/Auth_ActiveRoleStore.res +1 -2
  19. package/src/adapter/Auth/Auth_ActiveRoleStore_Schema.res +1 -4
  20. package/src/adapter/Auth/Auth_ActiveRoleTrigger_Ops.res +5 -2
  21. package/src/adapter/Auth/Auth_Cognito.res +3 -9
  22. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res +1 -4
  23. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res +3 -1
  24. package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res +1 -4
  25. package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res +7 -4
  26. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res +6 -1
  27. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res +7 -4
  28. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res +24 -18
  29. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res +9 -4
  30. package/src/adapter/CommandTopic/CommandTopicRegistry.res +1 -4
  31. package/src/adapter/Counter/CounterHandler_DynamoDbStream.res +15 -15
  32. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +9 -5
  33. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res +179 -213
  34. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res +5 -5
  35. package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res +6 -2
  36. package/src/adapter/EventCollector/EventCollectorChannel_SQS.res +14 -7
  37. package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res +14 -7
  38. package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res +6 -3
  39. package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res +6 -1
  40. package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res +13 -17
  41. package/src/adapter/EventLog/EventLogStorage_Postgres.res +7 -4
  42. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res +12 -7
  43. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync_Ops.res +4 -2
  44. package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res +3 -2
  45. package/src/adapter/EventTopic/EventTopicPublisher_SNS.res +20 -12
  46. package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res +21 -9
  47. package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res +5 -3
  48. package/src/adapter/Geocoder/Geocoder_AwsLocation_Resolver.res +6 -3
  49. package/src/adapter/Mcp/MCP_Lambda.res +31 -46
  50. package/src/adapter/Messaging/Messaging_Ses_Backend.res +11 -7
  51. package/src/adapter/Messaging/Messaging_Ses_Backend.res.mjs +2 -4
  52. package/src/adapter/Monitoring/Monitoring_CloudWatch.res +16 -16
  53. package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res +5 -10
  54. package/src/adapter/Postgres/PgChangeFeedRelay_Runtime.res +4 -2
  55. package/src/adapter/Postgres/PgConnection.res +6 -5
  56. package/src/adapter/Postgres/PgMigration_Builder.res +4 -8
  57. package/src/adapter/Postgres/PgRuntime.res +4 -7
  58. package/src/adapter/QueryDb/PgQueryResolver_Builder.res +9 -11
  59. package/src/adapter/QueryDb/PgQueryResolver_Lambda.res +22 -21
  60. package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res +114 -111
  61. package/src/adapter/QueryDb/QueryDbResolvers_Lambda.res +1 -7
  62. package/src/adapter/QueryDb/QueryDbStorage.res +4 -2
  63. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res +23 -24
  64. package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res +8 -2
  65. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res +71 -73
  66. package/src/adapter/QueryDb/QueryDbStorage_Postgres.res +5 -2
  67. package/src/adapter/QueryDb/QueryInterceptor_Provisioning.res +1 -4
  68. package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res +8 -2
  69. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +73 -81
  70. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res +72 -78
  71. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +44 -67
  72. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res +44 -67
  73. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +53 -82
  74. package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res +47 -77
  75. package/src/adapter/Runtime/AutomationSliceEntryPoint_Ops.res +18 -11
  76. package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res +80 -97
  77. package/src/adapter/Runtime/CounterEntryPoint_Ops.res +2 -7
  78. package/src/adapter/Runtime/DcbCommandTopicEntryPoint_Ops.res +16 -10
  79. package/src/adapter/Runtime/EventCollectorEntryPoint_Ops.res +24 -15
  80. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +17 -37
  81. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +31 -57
  82. package/src/adapter/Runtime/EventMapperEntryPoint_Ops.res +18 -24
  83. package/src/adapter/Runtime/ExtensionPointEntryPoint_Ops.res +1 -5
  84. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +4 -3
  85. package/src/adapter/Runtime/HeartbeatEntryPoint.res +0 -1
  86. package/src/adapter/Runtime/PgChangeFeedRelayEntryPoint.res +4 -2
  87. package/src/adapter/Runtime/PgMigrationEntryPoint.res +0 -1
  88. package/src/adapter/Runtime/PgQueryResolverEntryPoint_Ops.res +3 -2
  89. package/src/adapter/Runtime/PluginExtensionPointEntryPoint.res +1 -2
  90. package/src/adapter/Runtime/ProjectionEntryPoint_Ops.res +4 -5
  91. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +22 -10
  92. package/src/adapter/Runtime/RuntimeExtensionEntryPoint_Ops.res +8 -2
  93. package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +14 -31
  94. package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res +16 -17
  95. package/src/adapter/Runtime/StateViewSliceEntryPoint_Ops.res +10 -9
  96. package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res +46 -52
  97. package/src/adapter/Runtime/StreamRoutedEntryPoint_Ops.res +36 -41
  98. package/src/adapter/Runtime/TaskBucketEntryPoint_Ops.res +31 -37
  99. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +6 -7
  100. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res +4 -6
  101. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res +2 -6
  102. package/src/adapter/StateTopic/StateTopic_AppSync.res +21 -16
  103. package/src/adapter/StateTopic/StateTopic_AppSync_Ops.res +36 -32
  104. package/src/adapter/Task/TaskBucket_S3.res +6 -1
  105. package/src/adapter/Upload/Upload_Claim_S3.res +17 -20
  106. package/src/adapter/Upload/Upload_Claim_S3_Ops.res +5 -2
  107. package/src/adapter/Upload/Upload_Presign_S3.res +51 -49
  108. package/src/capability/Capability_Geocoding_AwsLocation.res +4 -1
  109. package/src/capability/Capability_Messaging.res +4 -5
  110. package/src/capability/Capability_Messaging_Ses.res +3 -1
  111. package/src/capability/Capability_ObjectStore_S3.res +1 -7
  112. package/src/components/Api/AppSync_Adapter.res +28 -41
  113. package/src/components/Api/AppSync_SdlDecorate.res +38 -30
  114. package/src/components/AutomationSlice_Builder.res +6 -4
  115. package/src/components/ExtensionPoint_Builder.res +9 -10
  116. package/src/components/InboundTranslationSlice_Builder.res +7 -8
  117. package/src/components/OutboundTranslationSlice_Builder.res +14 -8
  118. package/src/components/OutboundTranslationSlice_Builder.res.mjs +1 -1
  119. package/src/components/SideEffectHandler_Single.res +4 -4
  120. package/src/components/StateViewSlice_Builder.res +6 -4
  121. package/src/components/StateViewSlice_Builder_Stream.res +6 -4
  122. package/src/components/Task_Builder_PerBucket.res +10 -11
  123. package/src/plugin/cloner/ClonerRunner_Fargate.res +3 -10
  124. package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res +1 -4
  125. package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +5 -5
  126. package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res +19 -21
  127. package/src/plugin/runtime/PluginRuntime_Builder.res +167 -188
  128. package/src/plugin/runtime/Util_PluginMessage_Runtime.res +6 -5
  129. package/src/plugin/stack/Plugin_Stack.res +104 -103
  130. package/src/util/Util_AlarmSpec.res +2 -1
  131. package/src/util/Util_AppSync.res +8 -2
  132. package/src/util/Util_AppSync_Caller.res +15 -14
  133. package/src/util/Util_Bundle.res +46 -42
  134. package/src/util/Util_CognitoGroupUser_Runtime.res +32 -34
  135. package/src/util/Util_Cognito_Runtime.res +11 -7
  136. package/src/util/Util_DeadLetterQueue.res +12 -2
  137. package/src/util/Util_DynamoDb.res +5 -3
  138. package/src/util/Util_DynamoDbStream.res +7 -3
  139. package/src/util/Util_DynamoDbStream_Runtime.res +1 -2
  140. package/src/util/Util_DynamoDb_Runtime.res +23 -41
  141. package/src/util/Util_HostUiDomain.res +6 -1
  142. package/src/util/Util_Kinesis_Runtime.res +10 -11
  143. package/src/util/Util_Lambda.res +12 -5
  144. package/src/util/Util_LambdaEnvBudget.res +5 -5
  145. package/src/util/Util_LambdaLogging.res +1 -2
  146. package/src/util/Util_LogGroup_Adopting.res +1 -4
  147. package/src/util/Util_ResourceNaming.res +1 -2
  148. package/src/util/Util_SNS.res +8 -3
  149. package/src/util/Util_SNS_FIFO.res +1 -1
  150. package/src/util/Util_SNS_Runtime.res +11 -10
  151. package/src/util/Util_SQS.res +4 -2
  152. package/src/util/Util_SQS_FIFO.res +5 -2
  153. package/src/util/Util_SQS_Runtime.res +37 -36
  154. package/src/util/Util_ShellConfig.res +3 -2
  155. package/src/util/Util_StaticBundle.res +1 -3
  156. package/src/util/Util_StoreLayout.res +4 -1
  157. package/tests/AWS_TagsTest.res +16 -5
  158. package/tests/AppSyncEventsSigner_OpsTest.res +11 -2
  159. package/tests/AppSync_AdapterTest.res +203 -224
  160. package/tests/AppSync_Resolver_RetryingTest.res +64 -44
  161. package/tests/AppSync_RetirementNarrowingTest.res +59 -46
  162. package/tests/AppSync_SdlDecorateTest.res +22 -20
  163. package/tests/AppSync_SourceApiAssociation_RetryingTest.res +40 -22
  164. package/tests/Auth_ActiveRolePoolAttachmentTest.res +114 -107
  165. package/tests/Auth_ActiveRoleStoreTest.res +12 -9
  166. package/tests/Auth_ActiveRoleStore_SchemaTest.res +2 -1
  167. package/tests/Auth_ActiveRoleTrigger_OpsTest.res +20 -16
  168. package/tests/Auth_CognitoTest.res +31 -46
  169. package/tests/AutomationSliceEntryPoint_OpsTest.res +69 -67
  170. package/tests/BakeConvergenceTest.res +22 -25
  171. package/tests/Capability_MessagingTest.res +28 -12
  172. package/tests/CommandTopicQueuePolicyTest.res +1 -2
  173. package/tests/CounterEntryPoint_OpsTest.res +3 -7
  174. package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res +306 -210
  175. package/tests/EventCollectorConnectLambdaPreviewTest.res +14 -7
  176. package/tests/EventCollectorEntryPoint_OpsTest.res +12 -4
  177. package/tests/EventCollectorPluginDefinitionAssetTest.res +18 -11
  178. package/tests/EventCollectorReadyGateTest.res +5 -4
  179. package/tests/EventLogStorage_DynamoDb_RuntimeTest.res +1 -2
  180. package/tests/EventMapperEntryPoint_OpsTest.res +1 -3
  181. package/tests/ExtensionPointEntryPoint_OpsTest.res +1 -4
  182. package/tests/HandlerFactoryDispatchTest.res +97 -70
  183. package/tests/MCP_LambdaTest.res +16 -27
  184. package/tests/PgChangeFeedRelay_IntegrationTest.res +123 -93
  185. package/tests/PgChangeFeedRelay_RuntimeTest.res +13 -10
  186. package/tests/PgMigrationEntryPoint_IntegrationTest.res +0 -1
  187. package/tests/PgPipeline_IntegrationTest.res +80 -66
  188. package/tests/PgQueryDbUnion_IntegrationTest.res +1 -2
  189. package/tests/PgQueryResolverEntryPoint_OpsTest.res +2 -6
  190. package/tests/PgQueryResolver_LambdaTest.res +41 -24
  191. package/tests/Platform_AdminScan_OpsTest.res +4 -1
  192. package/tests/Platform_ComponentDefinitions_Lambda_OpsTest.res +137 -129
  193. package/tests/ProjectionEntryPoint_DisplayNameTest.res +7 -3
  194. package/tests/ProjectionEntryPoint_UnionStampTest.res +3 -2
  195. package/tests/ProvisionIdentityTest.res +2 -6
  196. package/tests/QueryDbOwnerIndexTableTest.res +6 -4
  197. package/tests/QueryDbResolvers_AppSyncTest.res +23 -16
  198. package/tests/QueryInterceptor_LambdaTest.res +11 -13
  199. package/tests/ReadModelEntryPoint_OpsTest.res +43 -41
  200. package/tests/RuntimeExtensionEntryPoint_OpsTest.res +4 -3
  201. package/tests/SideEffectEntryPoint_OpsTest.res +23 -18
  202. package/tests/StateChangeDescriptorParityTest.res +28 -26
  203. package/tests/StateTopicKeySchemaTest.res +18 -15
  204. package/tests/StateViewSliceEntryPoint_OpsTest.res +55 -44
  205. package/tests/TaskBucketEntryPoint_OpsTest.res +13 -13
  206. package/tests/Upload_ClaimTest.res +3 -3
  207. package/tests/Util_AwsErrorTest.res +4 -7
  208. package/tests/Util_BundleDependencyClosureTest.res +15 -3
  209. package/tests/Util_BundleEsmLoaderTest.res +3 -3
  210. package/tests/Util_BundleResolveTest.res +4 -6
  211. package/tests/Util_BundleRuntimeExtensionTest.res +17 -18
  212. package/tests/Util_DcbMetricsTest.res +6 -6
  213. package/tests/Util_DynamoDbStreamTest.res +4 -5
  214. package/tests/Util_DynamoDbTest.res +3 -2
  215. package/tests/Util_LambdaEnvBudgetTest.res +22 -18
  216. package/tests/Util_LambdaLoggingTest.res +9 -8
  217. package/tests/Util_LogGroup_AdoptingTest.res +10 -5
  218. package/tests/Util_LogRetentionTest.res +6 -2
  219. package/tests/Util_OwnerScopeEnvTest.res +10 -8
  220. package/tests/Util_SQS_RuntimeTest.res +5 -7
  221. package/tests/Util_ShellConfigTest.res +7 -17
  222. package/tests/Util_StaticBundleTest.res +3 -8
  223. package/tests/Util_StoreLayoutTest.res +17 -12
  224. package/tests/integration/AggregateEntryPoint_IntegrationTest.res +1 -4
  225. package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res +15 -15
  226. package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res +296 -232
  227. package/tests/integration/DcbIntegrationHarness.res +8 -8
  228. package/tests/integration/EpCompositeSlice.res +16 -8
  229. package/tests/integration/QueryDbUnion_DynamoDb_IntegrationTest.res +8 -10
  230. package/tests/integration/StateViewSliceEntryPoint_IntegrationTest.res +10 -10
  231. package/tests/integration/SvsTestSlice_Projection.res +1 -3
  232. package/tests/util/Util_AlarmSpecTest.res +62 -49
@@ -10,14 +10,8 @@ let globalSecondaryIndexes = (indexes: array<Reventless.ReadModel.indexConfig>)
10
10
  let {index, projectionType} = indexConfig
11
11
  let (projectionType, includes) = switch projectionType {
12
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
- )
13
+ | Reventless.ReadModel.KEYS_ONLY as _projection => (PulumiAws.DynamoDb.Table.KEYS_ONLY, None)
14
+ | Reventless.ReadModel.INCLUDE(includes) => (PulumiAws.DynamoDb.Table.INCLUDE, Some(includes))
21
15
  }
22
16
  {
23
17
  name: index,
@@ -34,20 +28,19 @@ let globalSecondaryIndexes = (indexes: array<Reventless.ReadModel.indexConfig>)
34
28
  // sorts on `id`, and any index may sort on the table's own sort key. First
35
29
  // declaration wins; they agree on the type because both name the same column.
36
30
  let attributes = (sortField, indexes: array<Reventless.ReadModel.indexConfig>) => {
37
- let all =
38
- [
39
- [{name: "id", type_: "S"}],
40
- sortField->Option.mapOr([], sortField => [{name: sortField, type_: "S"}]),
41
- indexes
42
- ->Array.map((indexConfig: Reventless.ReadModel.indexConfig) => {
43
- let {index, type_} = indexConfig
44
- [
45
- [{name: indexConfig.idField->Option.getOr(index), type_}],
46
- indexConfig.subIdField->Option.mapOr([], sortField => [{name: sortField, type_: "S"}]),
47
- ]->Array.flat
48
- })
49
- ->Array.flat,
50
- ]->Array.flat
31
+ let all = [
32
+ [{name: "id", type_: "S"}],
33
+ sortField->Option.mapOr([], sortField => [{name: sortField, type_: "S"}]),
34
+ indexes
35
+ ->Array.map((indexConfig: Reventless.ReadModel.indexConfig) => {
36
+ let {index, type_} = indexConfig
37
+ [
38
+ [{name: indexConfig.idField->Option.getOr(index), type_}],
39
+ indexConfig.subIdField->Option.mapOr([], sortField => [{name: sortField, type_: "S"}]),
40
+ ]->Array.flat
41
+ })
42
+ ->Array.flat,
43
+ ]->Array.flat
51
44
  let seen = Set.make()
52
45
  all->Array.filter(({name}) =>
53
46
  if seen->Set.has(name) {
@@ -111,9 +104,15 @@ let make: ReventlessCore.QueryDb_Adapter.storageMaker<api, role> = (
111
104
  ~ttl=?,
112
105
  ~api,
113
106
  ~apiRole,
114
- ~owner, ~opts,
107
+ ~owner,
108
+ ~opts,
115
109
  ) => {
116
- let tags = AWS.Tags.make(~name, ~kind=ReventlessCore.QueryDb.componentType, ~role=QueryDb, ~owner?)
110
+ let tags = AWS.Tags.make(
111
+ ~name,
112
+ ~kind=ReventlessCore.QueryDb.componentType,
113
+ ~role=QueryDb,
114
+ ~owner?,
115
+ )
117
116
  let table = Util_DynamoDb.makeTable(
118
117
  name,
119
118
  ~attributes=attributes(subIdField, indexes),
@@ -14,10 +14,16 @@ let make: ReventlessCore.QueryDb_Adapter.storageMaker<api, role> = (
14
14
  ~ttl=?,
15
15
  ~api,
16
16
  ~apiRole,
17
- ~owner, ~opts,
17
+ ~owner,
18
+ ~opts,
18
19
  ) => {
19
20
  streamRegistry->Set.add(name)
20
- let tags = AWS.Tags.make(~name, ~kind=ReventlessCore.QueryDb.componentType, ~role=QueryDb, ~owner?)
21
+ let tags = AWS.Tags.make(
22
+ ~name,
23
+ ~kind=ReventlessCore.QueryDb.componentType,
24
+ ~role=QueryDb,
25
+ ~owner?,
26
+ )
21
27
  let table = Util_DynamoDbStream.makeTable(
22
28
  name,
23
29
  ~attributes=attributes(subIdField, indexes),
@@ -14,21 +14,16 @@ let loadStream = table =>
14
14
  expressionAttributeValues: [(":id", id->JSON.Encode.string)]->Dict.fromArray,
15
15
  }
16
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
- )
17
+ Effect.tryPromise(~catch=DynamoDb_Error.classify, () => {
18
+ let params = switch cursor {
19
+ | None => baseParams
20
+ | Some(key) => {...baseParams, exclusiveStartKey: key}
21
+ }
22
+ QueryCommand.send(params->QueryCommand.make)
23
+ })
27
24
  ->Effect.retry(DynamoDb_Error.retrySchedule)
28
25
  ->Effect.catchAll(err =>
29
- Effect.fail(
30
- ReventlessInfra.QueryDb.NotLoadedFromStorage(DynamoDb_Error.message(err)),
31
- )
26
+ Effect.fail(ReventlessInfra.QueryDb.NotLoadedFromStorage(DynamoDb_Error.message(err)))
32
27
  )
33
28
  ->Effect.map(result => (
34
29
  result.items
@@ -51,8 +46,7 @@ let load = table =>
51
46
  ReventlessCore.EffectLogger.logError(
52
47
  ~comp=__MODULE__,
53
48
  `load: Couldn't load state for ${id} from ${tableName}: ${msg}`,
54
- )
55
- ->Effect.map(_ => Error(err))
49
+ )->Effect.map(_ => Error(err))
56
50
  })
57
51
  ->Effect.runPromise
58
52
 
@@ -63,18 +57,20 @@ let save = table =>
63
57
 
64
58
  let effect = switch saveMode {
65
59
  | Init =>
66
- table->putIfNotExistsWithRetries(~idKey=table.hashKey, ~sortKey=?table.rangeKey, id, json)
60
+ table
61
+ ->putIfNotExistsWithRetries(~idKey=table.hashKey, ~sortKey=?table.rangeKey, id, json)
67
62
  ->Effect.flatMap(result =>
68
63
  switch result {
69
64
  | Ok() =>
70
- ReventlessCore.EffectLogger.logInfo(~comp=__MODULE__, `save: saved Init state to ${tableName}: id=${id}`)
71
- ->Effect.map(_ => Ok())
65
+ ReventlessCore.EffectLogger.logInfo(
66
+ ~comp=__MODULE__,
67
+ `save: saved Init state to ${tableName}: id=${id}`,
68
+ )->Effect.map(_ => Ok())
72
69
  | Error(errorMsg) =>
73
70
  ReventlessCore.EffectLogger.logError(
74
71
  ~comp=__MODULE__,
75
72
  `save: Couldn't save Init state to ${tableName}, id=${id}: ${errorMsg}`,
76
- )
77
- ->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotSavedToStorage(errorMsg)))
73
+ )->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotSavedToStorage(errorMsg)))
78
74
  }
79
75
  )
80
76
  | Any
@@ -84,14 +80,15 @@ let save = table =>
84
80
  ->Effect.flatMap(result =>
85
81
  switch result {
86
82
  | Ok() =>
87
- ReventlessCore.EffectLogger.logInfo(~comp=__MODULE__, `save: saved state to ${tableName}: id=${id}`)
88
- ->Effect.map(_ => Ok())
83
+ ReventlessCore.EffectLogger.logInfo(
84
+ ~comp=__MODULE__,
85
+ `save: saved state to ${tableName}: id=${id}`,
86
+ )->Effect.map(_ => Ok())
89
87
  | Error(errorMsg) =>
90
88
  ReventlessCore.EffectLogger.logError(
91
89
  ~comp=__MODULE__,
92
90
  `save: Couldn't save state to ${tableName}, id=${id}: ${errorMsg}`,
93
- )
94
- ->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotSavedToStorage(errorMsg)))
91
+ )->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotSavedToStorage(errorMsg)))
95
92
  }
96
93
  )
97
94
  }
@@ -111,38 +108,34 @@ let writeMultiple = (writeRequests, op, ids, table) => {
111
108
  let size = writeRequests->Array.length
112
109
  let batches = (size->Int.toFloat /. BatchWriteCommand.maxBatchSize->Int.toFloat)->Math.Int.ceil
113
110
 
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
- })
111
+ let logSplitEffect = if batches > 1 {
112
+ ReventlessCore.EffectLogger.logInfo(
113
+ ~comp=__MODULE__,
114
+ `writeBatch: splitting up batch of size ${size->Int.toString} into ${batches->Int.toString} batches`,
140
115
  )
116
+ } else {
117
+ Effect.succeed()
118
+ }
141
119
 
142
- logSplitEffect
143
- ->Effect.flatMap(_ =>
144
- Effect.all(batchEffects, {"concurrency": "unbounded"})
120
+ let batchEffects = Array.fromInitializer(~length=batches, batchNr =>
121
+ writeRequests
122
+ ->sliceBatch(batchNr)
123
+ ->toTable(tableName)
124
+ ->batchWriteWithRetries
125
+ ->Effect.map(result => {
126
+ let batchIds = ids->sliceBatch(batchNr)
127
+ let batchCount = batchIds->Array.length->Int.toString
128
+ let batchIdsStr = batchIds->Array.joinUnsafe(", ")
129
+ switch result {
130
+ | Ok() => None
131
+ | Error(error) =>
132
+ Some(`Batch ${batchNr->Int.toString}: ${batchCount} ids:${batchIdsStr}: ${error}`)
133
+ }
134
+ })
145
135
  )
136
+
137
+ logSplitEffect
138
+ ->Effect.flatMap(_ => Effect.all(batchEffects, {"concurrency": "unbounded"}))
146
139
  ->Effect.map(results => results->Array.filterMap(x => x))
147
140
  ->Effect.flatMap(errors =>
148
141
  switch errors {
@@ -150,20 +143,21 @@ let writeMultiple = (writeRequests, op, ids, table) => {
150
143
  ReventlessCore.EffectLogger.logInfo(
151
144
  ~comp=__MODULE__,
152
145
  `writeBatch: ${op} ${count} states: ${tableName}, ids:${allIdsStr}`,
153
- )
154
- ->Effect.map(_ => Ok())
146
+ )->Effect.map(_ => Ok())
155
147
  | errors =>
156
148
  let errorsStr = errors->Array.joinUnsafe("; ")
157
149
  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)))
150
+ ReventlessCore.EffectLogger.logError(~comp=__MODULE__, errorMsg)->Effect.map(_ => Error(
151
+ ReventlessInfra.QueryDb.BatchNotFullyWrittenToStorage(errorMsg),
152
+ ))
160
153
  }
161
154
  )
162
155
  ->Effect.catchAll(err => {
163
156
  let msg = DynamoDb_Error.message(err)
164
157
  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)))
158
+ ReventlessCore.EffectLogger.logError(~comp=__MODULE__, errorMsg)->Effect.map(_ => Error(
159
+ ReventlessInfra.QueryDb.BatchNotFullyWrittenToStorage(errorMsg),
160
+ ))
167
161
  })
168
162
  ->Effect.runPromise
169
163
  }
@@ -199,8 +193,9 @@ let count = table =>
199
193
  key: [("id", id->JSON.Encode.string)]->Dict.fromArray,
200
194
  updateExpression: "ADD #fieldName :inc",
201
195
  expressionAttributeNames: [("#fieldName", fieldName)]->Dict.fromArray,
202
- expressionAttributeValues: [(":inc", inc->Int.toFloat->JSON.Encode.float)]
203
- ->Dict.fromArray,
196
+ expressionAttributeValues: [
197
+ (":inc", inc->Int.toFloat->JSON.Encode.float),
198
+ ]->Dict.fromArray,
204
199
  returnValues: #UPDATED_NEW,
205
200
  })->UpdateCommand.send,
206
201
  )
@@ -212,15 +207,16 @@ let count = table =>
212
207
  ReventlessCore.EffectLogger.logError(
213
208
  ~comp=__MODULE__,
214
209
  `count: Invalid updateOutput in count on ${tableName}`,
215
- )
216
- ->Effect.map(_ =>
217
- Error(ReventlessInfra.QueryDb.NotCountedOnStorage("Invalid updateOutput in count"))
218
- )
210
+ )->Effect.map(_ => Error(
211
+ ReventlessInfra.QueryDb.NotCountedOnStorage("Invalid updateOutput in count"),
212
+ ))
219
213
  }
220
214
  )
221
215
  ->Effect.catchAll(errorMsg =>
222
- ReventlessCore.EffectLogger.logError(~comp=__MODULE__, `count: Couldn't count on ${tableName}: ${errorMsg}`)
223
- ->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotCountedOnStorage(errorMsg)))
216
+ ReventlessCore.EffectLogger.logError(
217
+ ~comp=__MODULE__,
218
+ `count: Couldn't count on ${tableName}: ${errorMsg}`,
219
+ )->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotCountedOnStorage(errorMsg)))
224
220
  )
225
221
  ->Effect.runPromise
226
222
  }
@@ -235,15 +231,17 @@ let delete = table =>
235
231
  | Ok() =>
236
232
  ReventlessCore.EffectLogger.logInfo(
237
233
  ~comp=__MODULE__,
238
- `delete: deleted state from ${tableName}: id=${id}, sort=${sort->JSON.stringifyAny->Option.getOr("None")}`,
239
- )
240
- ->Effect.map(_ => Ok())
234
+ `delete: deleted state from ${tableName}: id=${id}, sort=${sort
235
+ ->JSON.stringifyAny
236
+ ->Option.getOr("None")}`,
237
+ )->Effect.map(_ => Ok())
241
238
  | Error(errorMsg) =>
242
239
  ReventlessCore.EffectLogger.logError(
243
240
  ~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)))
241
+ `delete: Couldn't delete state from ${tableName}, id=${id}, sort=${sort
242
+ ->JSON.stringifyAny
243
+ ->Option.getOr("None")}: ${errorMsg}`,
244
+ )->Effect.map(_ => Error(ReventlessInfra.QueryDb.NotDeletedFromStorage(errorMsg)))
247
245
  }
248
246
  )
249
247
  ->Effect.runPromise
@@ -24,7 +24,8 @@ let make: ReventlessCore.QueryDb_Adapter.storageMaker<api, role> = (
24
24
  ~ttl as _=?,
25
25
  ~api as _,
26
26
  ~apiRole as _,
27
- ~owner as _, ~opts as _,
27
+ ~owner as _,
28
+ ~opts as _,
28
29
  ) => {
29
30
  let operations = switch QueryDbBackend.get() {
30
31
  | Some({connectionConfig}) =>
@@ -33,7 +34,9 @@ let make: ReventlessCore.QueryDb_Adapter.storageMaker<api, role> = (
33
34
  )
34
35
  | None =>
35
36
  // Selectable only routes here when a selection is set; guard defensively.
36
- JsError.throwWithMessage("QueryDbStorage_Postgres.make called without a QueryDbBackend selection")
37
+ JsError.throwWithMessage(
38
+ "QueryDbStorage_Postgres.make called without a QueryDbBackend selection",
39
+ )
37
40
  }
38
41
  {
39
42
  ReventlessCore.QueryDb_Adapter.resources: [],
@@ -28,7 +28,6 @@
28
28
  compose: that path bundles registered runtime extensions into the archive and
29
29
  writes `RUNTIME_EXTENSIONS`, so an extension registering its interceptor in
30
30
  `onColdStart` reaches this runtime without a second registration. */
31
-
32
31
  open PulumiAws
33
32
 
34
33
  // Memoised on the api handle itself — see the module docstring for why identity
@@ -46,9 +45,7 @@ let nameFor = () => {
46
45
  let owner = ReventlessCore.ResourceAttribution.current.contents.plugin->Option.getOr("Platform")
47
46
  let used = namesUsed->Dict.get(owner)->Option.getOr(0)
48
47
  namesUsed->Dict.set(owner, used + 1)
49
- used == 0
50
- ? owner ++ "QueryInterceptor"
51
- : owner ++ "QueryInterceptor" ++ (used + 1)->Int.toString
48
+ used == 0 ? owner ++ "QueryInterceptor" : owner ++ "QueryInterceptor" ++ (used + 1)->Int.toString
52
49
  }
53
50
 
54
51
  let buildInterceptor = (~api: Types.AppSync.api, ~opts) => {
@@ -109,7 +109,10 @@ let queryByTableName = (
109
109
  ->Effect.map(items => items->Array.map(js => js->JSON.stringify->JSON.parseOrThrow))
110
110
  ->Effect.catchAll(err => {
111
111
  let msg = DynamoDb_Error.message(err)
112
- ReventlessCore.EffectLogger.logError(~comp=__MODULE__, "queryByTableName: " ++ msg)->Effect.map(_ => [])
112
+ ReventlessCore.EffectLogger.logError(
113
+ ~comp=__MODULE__,
114
+ "queryByTableName: " ++ msg,
115
+ )->Effect.map(_ => [])
113
116
  })
114
117
  )
115
118
  ->Effect.runPromise
@@ -145,7 +148,10 @@ let scanByTableName = (~tableName, ~filterConfigs, ~limit) => {
145
148
  ->Effect.map(items => items->Array.map(js => js->JSON.stringify->JSON.parseOrThrow))
146
149
  ->Effect.catchAll(err => {
147
150
  let msg = DynamoDb_Error.message(err)
148
- ReventlessCore.EffectLogger.logError(~comp=__MODULE__, "scanByTableName: " ++ msg)->Effect.map(_ => [])
151
+ ReventlessCore.EffectLogger.logError(
152
+ ~comp=__MODULE__,
153
+ "scanByTableName: " ++ msg,
154
+ )->Effect.map(_ => [])
149
155
  })
150
156
  )
151
157
  ->Effect.runPromise
@@ -75,44 +75,30 @@ let forCommandGenerator: ReventlessCore.Runtime.forComponent<
75
75
  ReventlessCore.CommandGenerator.effectEventHandler<context>,
76
76
  runtimeParts,
77
77
  ReventlessCore.CommandGenerator.component,
78
- > = (
79
- ~handler as _,
80
- ~connect,
81
- ~memorySize=1024,
82
- ~timeout=30,
83
- commandGenerator,
84
- ) => {
78
+ > = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandGenerator) => {
85
79
  let resource = commandGenerator->ReventlessCore.Component.toPulumiResource
86
80
  switch resource.parent {
87
81
  | Some(aggregateResource) =>
88
82
  let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
89
83
  let spec = getStoredSpec(aggregateName, aggregateResource)
90
- storedSpecs->Dict.set(aggregateName, {
91
- ...spec,
92
- commandGeneratorConnects: spec.commandGeneratorConnects->Array.concat([connect]),
93
- commandGeneratorMemorySize: Math.Int.max(spec.commandGeneratorMemorySize, memorySize),
94
- commandGeneratorTimeout: Math.Int.max(spec.commandGeneratorTimeout, timeout),
95
- })
84
+ storedSpecs->Dict.set(
85
+ aggregateName,
86
+ {
87
+ ...spec,
88
+ commandGeneratorConnects: spec.commandGeneratorConnects->Array.concat([connect]),
89
+ commandGeneratorMemorySize: Math.Int.max(spec.commandGeneratorMemorySize, memorySize),
90
+ commandGeneratorTimeout: Math.Int.max(spec.commandGeneratorTimeout, timeout),
91
+ },
92
+ )
96
93
  | None => ()
97
94
  }
98
95
  }
99
96
 
100
97
  let forCommandTopic: ReventlessCore.Runtime.forComponent<
101
- ReventlessCore.Runtime.effectHandler<
102
- CommandTopicChannel.callbackEvent,
103
- context,
104
- unit,
105
- string,
106
- >,
98
+ ReventlessCore.Runtime.effectHandler<CommandTopicChannel.callbackEvent, context, unit, string>,
107
99
  runtimeParts,
108
100
  ReventlessCore.CommandTopic.component<'op>,
109
- > = (
110
- ~handler as _,
111
- ~connect,
112
- ~memorySize=1024,
113
- ~timeout=30,
114
- commandTopic,
115
- ) => {
101
+ > = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandTopic) => {
116
102
  let commandTopicResource = commandTopic->ReventlessCore.Component.toPulumiResource
117
103
  switch commandTopicResource.parent {
118
104
  | Some(aggregateResource) =>
@@ -122,50 +108,42 @@ let forCommandTopic: ReventlessCore.Runtime.forComponent<
122
108
  let queue = channelParts.queue
123
109
 
124
110
  let spec = getStoredSpec(aggregateName, aggregateResource)
125
- storedSpecs->Dict.set(aggregateName, {
126
- ...spec,
127
- queueUrl: queue.id,
128
- queueArn: queue.arn,
129
- commandTopicConnects: spec.commandTopicConnects->Array.concat([connect]),
130
- commandTopicMemorySize: Math.Int.max(spec.commandTopicMemorySize, memorySize),
131
- commandTopicTimeout: Math.Int.max(spec.commandTopicTimeout, timeout),
132
- })
111
+ storedSpecs->Dict.set(
112
+ aggregateName,
113
+ {
114
+ ...spec,
115
+ queueUrl: queue.id,
116
+ queueArn: queue.arn,
117
+ commandTopicConnects: spec.commandTopicConnects->Array.concat([connect]),
118
+ commandTopicMemorySize: Math.Int.max(spec.commandTopicMemorySize, memorySize),
119
+ commandTopicTimeout: Math.Int.max(spec.commandTopicTimeout, timeout),
120
+ },
121
+ )
133
122
  | None =>
134
123
  let name = commandTopicResource.name->Option.getOr("Unnamed")
135
- JsError.throwWithMessage(
136
- `forCommandTopic(micro): commandTopic ${name} has no Aggregate parent`,
137
- )
124
+ JsError.throwWithMessage(`forCommandTopic(micro): commandTopic ${name} has no Aggregate parent`)
138
125
  }
139
126
  }
140
127
 
141
128
  let forEventCollector: ReventlessCore.Runtime.forEventCollector<
142
- ReventlessCore.Runtime.effectHandler<
143
- EventCollectorChannel.callbackEvent,
144
- context,
145
- unit,
146
- string,
147
- >,
129
+ ReventlessCore.Runtime.effectHandler<EventCollectorChannel.callbackEvent, context, unit, string>,
148
130
  ReventlessCore.EventCollector.component,
149
- > = (
150
- ~handler as _,
151
- ~eventTopics,
152
- ~resources,
153
- ~memorySize=2048,
154
- ~timeout=180,
155
- eventCollector,
156
- ) => {
131
+ > = (~handler as _, ~eventTopics, ~resources, ~memorySize=2048, ~timeout=180, eventCollector) => {
157
132
  let eventCollectorResource = eventCollector->ReventlessCore.Component.toPulumiResource
158
133
  let channel = eventCollector->ReventlessCore.EventCollector_Adapter.channel
159
134
  switch eventCollectorResource.parent->Option.flatMap(parent => parent.parent) {
160
135
  | Some(aggregateResource) =>
161
136
  let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
162
137
  let spec = getStoredSpec(aggregateName, aggregateResource)
163
- storedSpecs->Dict.set(aggregateName, {
164
- ...spec,
165
- eventCollectorChannelSpec: Some({channel, eventTopics, resources}),
166
- eventCollectorMemorySize: Math.Int.max(spec.eventCollectorMemorySize, memorySize),
167
- eventCollectorTimeout: Math.Int.max(spec.eventCollectorTimeout, timeout),
168
- })
138
+ storedSpecs->Dict.set(
139
+ aggregateName,
140
+ {
141
+ ...spec,
142
+ eventCollectorChannelSpec: Some({channel, eventTopics, resources}),
143
+ eventCollectorMemorySize: Math.Int.max(spec.eventCollectorMemorySize, memorySize),
144
+ eventCollectorTimeout: Math.Int.max(spec.eventCollectorTimeout, timeout),
145
+ },
146
+ )
169
147
  | None =>
170
148
  let name = eventCollectorResource.name->Option.getOr("Unnamed")
171
149
  JsError.throwWithMessage(
@@ -198,13 +176,11 @@ let finish = () =>
198
176
  packageDirs->Dict.set(specPkg, Util_Bundle.resolvePackageRoot(specPkg))
199
177
  packageDirs->Dict.set(behaviorPkg, Util_Bundle.resolvePackageRoot(behaviorPkg))
200
178
 
201
- let specModule =
202
- info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
203
- let behaviorModule =
204
- info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
179
+ let specModule = info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
180
+ let behaviorModule = info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
205
181
 
206
182
  // --- CommandTopic Lambda ---
207
- // `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
183
+ // `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
208
184
  // deploy-time structure, and the Lambda-name fallback yields nothing for a
209
185
  // shared or per-aggregate command handler. Resolve it here; the shell still
210
186
  // derives `comp` itself from the spec name.
@@ -212,15 +188,24 @@ let finish = () =>
212
188
  ~comp=`AggregateRuntime(${spec.aggregateName})`,
213
189
  )
214
190
  let cmdTopicHandlerConfigOutput =
215
- Pulumi.Output.all3((info.eventLogTableName, spec.queueUrl, spec.queueArn))
216
- ->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
191
+ Pulumi.Output.all3((
192
+ info.eventLogTableName,
193
+ spec.queueUrl,
194
+ spec.queueArn,
195
+ ))->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
217
196
  `{"handlers":[{"specModule":${specModule},"behaviorModule":${behaviorModule},"eventLogTable":"${table}","queueUrl":"${queueUrl}","queueArn":"${queueArn}"${pluginFragment}}]}`
218
197
  )
219
198
 
220
199
  let cmdTopicEnvVars: dict<Pulumi.Input.t<string>> = Dict.make()
221
- cmdTopicEnvVars->Dict.set("HANDLER_CONFIG", cmdTopicHandlerConfigOutput->Pulumi.Output.asInput)
200
+ cmdTopicEnvVars->Dict.set(
201
+ "HANDLER_CONFIG",
202
+ cmdTopicHandlerConfigOutput->Pulumi.Output.asInput,
203
+ )
222
204
 
223
- let {code: cmdTopicCode, sourceCodeHash: cmdTopicSourceCodeHash} = Util_Bundle.buildCodeArchive(
205
+ let {
206
+ code: cmdTopicCode,
207
+ sourceCodeHash: cmdTopicSourceCodeHash,
208
+ } = Util_Bundle.buildCodeArchive(
224
209
  ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/AggregateEntryPoint.mjs",
225
210
  ~packageDirs,
226
211
  )
@@ -242,7 +227,7 @@ let finish = () =>
242
227
 
243
228
  // --- CommandGenerator Lambda ---
244
229
  if spec.commandGeneratorConnects->Array.length > 0 {
245
- // `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
230
+ // `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
246
231
  // deploy-time structure, and the Lambda-name fallback yields nothing for a
247
232
  // shared or per-aggregate command handler. Resolve it here; the shell still
248
233
  // derives `comp` itself from the spec name.
@@ -250,15 +235,24 @@ let finish = () =>
250
235
  ~comp=`AggregateRuntime(${spec.aggregateName})`,
251
236
  )
252
237
  let cmdGenHandlerConfigOutput =
253
- Pulumi.Output.all3((info.eventLogTableName, spec.queueUrl, spec.queueArn))
254
- ->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
238
+ Pulumi.Output.all3((
239
+ info.eventLogTableName,
240
+ spec.queueUrl,
241
+ spec.queueArn,
242
+ ))->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
255
243
  `{"handlers":[{"specModule":${specModule},"behaviorModule":${behaviorModule},"eventLogTable":"${table}","queueUrl":"${queueUrl}","queueArn":"${queueArn}"${pluginFragment}}]}`
256
244
  )
257
245
 
258
246
  let cmdGenEnvVars: dict<Pulumi.Input.t<string>> = Dict.make()
259
- cmdGenEnvVars->Dict.set("HANDLER_CONFIG", cmdGenHandlerConfigOutput->Pulumi.Output.asInput)
247
+ cmdGenEnvVars->Dict.set(
248
+ "HANDLER_CONFIG",
249
+ cmdGenHandlerConfigOutput->Pulumi.Output.asInput,
250
+ )
260
251
 
261
- let {code: cmdGenCode, sourceCodeHash: cmdGenSourceCodeHash} = Util_Bundle.buildCodeArchive(
252
+ let {
253
+ code: cmdGenCode,
254
+ sourceCodeHash: cmdGenSourceCodeHash,
255
+ } = Util_Bundle.buildCodeArchive(
262
256
  ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/AggregateEntryPoint.mjs",
263
257
  ~packageDirs,
264
258
  )
@@ -276,9 +270,7 @@ let finish = () =>
276
270
  ~opts=aggregateOpts,
277
271
  )
278
272
 
279
- spec.commandGeneratorConnects->Array.forEach(connect =>
280
- connect(~runtime=cmdGenRuntime)
281
- )
273
+ spec.commandGeneratorConnects->Array.forEach(connect => connect(~runtime=cmdGenRuntime))
282
274
  }
283
275
 
284
276
  // --- EventMapper Lambda ---
@@ -286,14 +278,11 @@ let finish = () =>
286
278
  | (Some(channelSpec), Some(mappingsModulePath)) =>
287
279
  let evtMapperEnvVars: dict<Pulumi.Input.t<string>> = Dict.make()
288
280
 
289
- let targetSpecModule =
290
- info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
291
- let mappingsModuleJson =
292
- mappingsModulePath->JSON.stringifyAny->Option.getOr(`""`)
281
+ let targetSpecModule = info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
282
+ let mappingsModuleJson = mappingsModulePath->JSON.stringifyAny->Option.getOr(`""`)
293
283
 
294
284
  let handlerConfigJson =
295
- spec.queueUrl
296
- ->Pulumi.Output.apply(queueUrl =>
285
+ spec.queueUrl->Pulumi.Output.apply(queueUrl =>
297
286
  `{"targetSpecModule":${targetSpecModule},"mappingsModule":${mappingsModuleJson},"queueUrl":"${queueUrl}"}`
298
287
  )
299
288
  evtMapperEnvVars->Dict.set("HANDLER_CONFIG", handlerConfigJson->Pulumi.Output.asInput)
@@ -304,7 +293,10 @@ let finish = () =>
304
293
  evtMapperPackageDirs->Dict.set(specPkg, Util_Bundle.resolvePackageRoot(specPkg))
305
294
  evtMapperPackageDirs->Dict.set(mappingsPkg, Util_Bundle.resolvePackageRoot(mappingsPkg))
306
295
 
307
- let {code: evtMapperCode, sourceCodeHash: evtMapperSourceCodeHash} = Util_Bundle.buildCodeArchive(
296
+ let {
297
+ code: evtMapperCode,
298
+ sourceCodeHash: evtMapperSourceCodeHash,
299
+ } = Util_Bundle.buildCodeArchive(
308
300
  ~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/EventMapperEntryPoint.mjs",
309
301
  ~packageDirs=evtMapperPackageDirs,
310
302
  )