@reventlessdev/reventless-aws 3.0.0-alpha.343 → 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.
- package/CHANGELOG.md +15 -0
- package/package.json +11 -11
- package/scripts/ProvisionIdentity.res +8 -3
- package/src/Platform.res +327 -328
- package/src/Platform.res.mjs +4 -2
- package/src/Platform_Casts.res +13 -4
- package/src/adapter/Api/AppSyncEventsSigner_Ops.res +8 -4
- package/src/adapter/Api/AppSync_EventsApi.res +12 -14
- package/src/adapter/Api/AppSync_Resolver_Native.res +3 -4
- package/src/adapter/Api/AppSync_Resolver_Retrying.res +78 -70
- package/src/adapter/Api/AppSync_SourceApiAssociation_Retrying.res +11 -8
- package/src/adapter/Api/Platform_AdminScan_Ops.res +15 -14
- package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res +10 -2
- package/src/adapter/Api/Platform_ComponentDefinitions_Lambda_Ops.res +40 -50
- package/src/adapter/Api/Platform_UIFragments_Lambda.res +39 -32
- package/src/adapter/Api/Platform_UIFragments_Lambda_Ops.res +5 -2
- package/src/adapter/Auth/Auth_ActiveRolePoolAttachment.res +0 -1
- package/src/adapter/Auth/Auth_ActiveRoleStore.res +1 -2
- package/src/adapter/Auth/Auth_ActiveRoleStore_Schema.res +1 -4
- package/src/adapter/Auth/Auth_ActiveRoleTrigger_Ops.res +5 -2
- package/src/adapter/Auth/Auth_Cognito.res +3 -9
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res +1 -4
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res +3 -1
- package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res +1 -4
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res +7 -4
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res +6 -1
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res +7 -4
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res +24 -18
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res +9 -4
- package/src/adapter/CommandTopic/CommandTopicRegistry.res +1 -4
- package/src/adapter/Counter/CounterHandler_DynamoDbStream.res +15 -15
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +9 -5
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res +179 -213
- package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res +5 -5
- package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res +6 -2
- package/src/adapter/EventCollector/EventCollectorChannel_SQS.res +14 -7
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res +14 -7
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res +6 -3
- package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res +6 -1
- package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res +13 -17
- package/src/adapter/EventLog/EventLogStorage_Postgres.res +7 -4
- package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res +12 -7
- package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync_Ops.res +4 -2
- package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res +3 -2
- package/src/adapter/EventTopic/EventTopicPublisher_SNS.res +20 -12
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res +21 -9
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res +5 -3
- package/src/adapter/Geocoder/Geocoder_AwsLocation_Resolver.res +6 -3
- package/src/adapter/Mcp/MCP_Lambda.res +31 -46
- package/src/adapter/Messaging/Messaging_Ses_Backend.res +11 -7
- package/src/adapter/Messaging/Messaging_Ses_Backend.res.mjs +2 -4
- package/src/adapter/Monitoring/Monitoring_CloudWatch.res +16 -16
- package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res +5 -10
- package/src/adapter/Postgres/PgChangeFeedRelay_Runtime.res +4 -2
- package/src/adapter/Postgres/PgConnection.res +6 -5
- package/src/adapter/Postgres/PgMigration_Builder.res +4 -8
- package/src/adapter/Postgres/PgRuntime.res +4 -7
- package/src/adapter/QueryDb/PgQueryResolver_Builder.res +9 -11
- package/src/adapter/QueryDb/PgQueryResolver_Lambda.res +22 -21
- package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res +114 -111
- package/src/adapter/QueryDb/QueryDbResolvers_Lambda.res +1 -7
- package/src/adapter/QueryDb/QueryDbStorage.res +4 -2
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res +23 -24
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res +8 -2
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res +71 -73
- package/src/adapter/QueryDb/QueryDbStorage_Postgres.res +5 -2
- package/src/adapter/QueryDb/QueryInterceptor_Provisioning.res +1 -4
- package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res +8 -2
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +73 -81
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res +72 -78
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +44 -67
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res +44 -67
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +53 -82
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res +47 -77
- package/src/adapter/Runtime/AutomationSliceEntryPoint_Ops.res +18 -11
- package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res +80 -97
- package/src/adapter/Runtime/CounterEntryPoint_Ops.res +2 -7
- package/src/adapter/Runtime/DcbCommandTopicEntryPoint_Ops.res +16 -10
- package/src/adapter/Runtime/EventCollectorEntryPoint_Ops.res +24 -15
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +17 -37
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +31 -57
- package/src/adapter/Runtime/EventMapperEntryPoint_Ops.res +18 -24
- package/src/adapter/Runtime/ExtensionPointEntryPoint_Ops.res +1 -5
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +4 -3
- package/src/adapter/Runtime/HeartbeatEntryPoint.res +0 -1
- package/src/adapter/Runtime/PgChangeFeedRelayEntryPoint.res +4 -2
- package/src/adapter/Runtime/PgMigrationEntryPoint.res +0 -1
- package/src/adapter/Runtime/PgQueryResolverEntryPoint_Ops.res +3 -2
- package/src/adapter/Runtime/PluginExtensionPointEntryPoint.res +1 -2
- package/src/adapter/Runtime/ProjectionEntryPoint_Ops.res +4 -5
- package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +22 -10
- package/src/adapter/Runtime/RuntimeExtensionEntryPoint_Ops.res +8 -2
- package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +14 -31
- package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res +16 -17
- package/src/adapter/Runtime/StateViewSliceEntryPoint_Ops.res +10 -9
- package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res +46 -52
- package/src/adapter/Runtime/StreamRoutedEntryPoint_Ops.res +36 -41
- package/src/adapter/Runtime/TaskBucketEntryPoint_Ops.res +31 -37
- package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +6 -7
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res +4 -6
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res +2 -6
- package/src/adapter/StateTopic/StateTopic_AppSync.res +21 -16
- package/src/adapter/StateTopic/StateTopic_AppSync_Ops.res +36 -32
- package/src/adapter/Task/TaskBucket_S3.res +6 -1
- package/src/adapter/Upload/Upload_Claim_S3.res +17 -20
- package/src/adapter/Upload/Upload_Claim_S3_Ops.res +5 -2
- package/src/adapter/Upload/Upload_Presign_S3.res +51 -49
- package/src/capability/Capability_Geocoding_AwsLocation.res +4 -1
- package/src/capability/Capability_Messaging.res +4 -5
- package/src/capability/Capability_Messaging_Ses.res +3 -1
- package/src/capability/Capability_ObjectStore_S3.res +1 -7
- package/src/components/Api/AppSync_Adapter.res +28 -41
- package/src/components/Api/AppSync_SdlDecorate.res +38 -30
- package/src/components/AutomationSlice_Builder.res +6 -4
- package/src/components/ExtensionPoint_Builder.res +9 -10
- package/src/components/InboundTranslationSlice_Builder.res +7 -8
- package/src/components/OutboundTranslationSlice_Builder.res +14 -8
- package/src/components/OutboundTranslationSlice_Builder.res.mjs +1 -1
- package/src/components/SideEffectHandler_Single.res +4 -4
- package/src/components/StateViewSlice_Builder.res +6 -4
- package/src/components/StateViewSlice_Builder_Stream.res +6 -4
- package/src/components/Task_Builder_PerBucket.res +10 -11
- package/src/plugin/cloner/ClonerRunner_Fargate.res +3 -10
- package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res +1 -4
- package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +5 -5
- package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res +19 -21
- package/src/plugin/runtime/PluginRuntime_Builder.res +167 -188
- package/src/plugin/runtime/Util_PluginMessage_Runtime.res +6 -5
- package/src/plugin/stack/Plugin_Stack.res +104 -103
- package/src/util/Util_AlarmSpec.res +2 -1
- package/src/util/Util_AppSync.res +8 -2
- package/src/util/Util_AppSync_Caller.res +15 -14
- package/src/util/Util_Bundle.res +144 -67
- package/src/util/Util_Bundle.res.mjs +64 -13
- package/src/util/Util_CognitoGroupUser_Runtime.res +32 -34
- package/src/util/Util_Cognito_Runtime.res +11 -7
- package/src/util/Util_DeadLetterQueue.res +12 -2
- package/src/util/Util_DynamoDb.res +5 -3
- package/src/util/Util_DynamoDbStream.res +7 -3
- package/src/util/Util_DynamoDbStream_Runtime.res +1 -2
- package/src/util/Util_DynamoDb_Runtime.res +23 -41
- package/src/util/Util_HostUiDomain.res +6 -1
- package/src/util/Util_Kinesis_Runtime.res +10 -11
- package/src/util/Util_Lambda.res +12 -5
- package/src/util/Util_LambdaEnvBudget.res +5 -5
- package/src/util/Util_LambdaLogging.res +1 -2
- package/src/util/Util_LogGroup_Adopting.res +1 -4
- package/src/util/Util_ResourceNaming.res +1 -2
- package/src/util/Util_SNS.res +8 -3
- package/src/util/Util_SNS_FIFO.res +1 -1
- package/src/util/Util_SNS_Runtime.res +11 -10
- package/src/util/Util_SQS.res +4 -2
- package/src/util/Util_SQS_FIFO.res +5 -2
- package/src/util/Util_SQS_Runtime.res +37 -36
- package/src/util/Util_ShellConfig.res +3 -2
- package/src/util/Util_StaticBundle.res +1 -3
- package/src/util/Util_StoreLayout.res +4 -1
- package/tests/AWS_TagsTest.res +16 -5
- package/tests/AppSyncEventsSigner_OpsTest.res +11 -2
- package/tests/AppSync_AdapterTest.res +203 -224
- package/tests/AppSync_Resolver_RetryingTest.res +64 -44
- package/tests/AppSync_RetirementNarrowingTest.res +59 -46
- package/tests/AppSync_SdlDecorateTest.res +22 -20
- package/tests/AppSync_SourceApiAssociation_RetryingTest.res +40 -22
- package/tests/Auth_ActiveRolePoolAttachmentTest.res +114 -107
- package/tests/Auth_ActiveRoleStoreTest.res +12 -9
- package/tests/Auth_ActiveRoleStore_SchemaTest.res +2 -1
- package/tests/Auth_ActiveRoleTrigger_OpsTest.res +20 -16
- package/tests/Auth_CognitoTest.res +31 -46
- package/tests/AutomationSliceEntryPoint_OpsTest.res +69 -67
- package/tests/BakeConvergenceTest.res +22 -25
- package/tests/Capability_MessagingTest.res +28 -12
- package/tests/CommandTopicQueuePolicyTest.res +1 -2
- package/tests/CounterEntryPoint_OpsTest.res +3 -7
- package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res +306 -210
- package/tests/EventCollectorConnectLambdaPreviewTest.res +14 -7
- package/tests/EventCollectorEntryPoint_OpsTest.res +12 -4
- package/tests/EventCollectorPluginDefinitionAssetTest.res +18 -11
- package/tests/EventCollectorReadyGateTest.res +5 -4
- package/tests/EventLogStorage_DynamoDb_RuntimeTest.res +1 -2
- package/tests/EventMapperEntryPoint_OpsTest.res +1 -3
- package/tests/ExtensionPointEntryPoint_OpsTest.res +1 -4
- package/tests/HandlerFactoryDispatchTest.res +97 -70
- package/tests/MCP_LambdaTest.res +16 -27
- package/tests/PgChangeFeedRelay_IntegrationTest.res +123 -93
- package/tests/PgChangeFeedRelay_RuntimeTest.res +13 -10
- package/tests/PgMigrationEntryPoint_IntegrationTest.res +0 -1
- package/tests/PgPipeline_IntegrationTest.res +80 -66
- package/tests/PgQueryDbUnion_IntegrationTest.res +1 -2
- package/tests/PgQueryResolverEntryPoint_OpsTest.res +2 -6
- package/tests/PgQueryResolver_LambdaTest.res +41 -24
- package/tests/Platform_AdminScan_OpsTest.res +4 -1
- package/tests/Platform_ComponentDefinitions_Lambda_OpsTest.res +137 -129
- package/tests/ProjectionEntryPoint_DisplayNameTest.res +7 -3
- package/tests/ProjectionEntryPoint_UnionStampTest.res +3 -2
- package/tests/ProvisionIdentityTest.res +2 -6
- package/tests/QueryDbOwnerIndexTableTest.res +6 -4
- package/tests/QueryDbResolvers_AppSyncTest.res +23 -16
- package/tests/QueryInterceptor_LambdaTest.res +11 -13
- package/tests/ReadModelEntryPoint_OpsTest.res +43 -41
- package/tests/RuntimeExtensionEntryPoint_OpsTest.res +4 -3
- package/tests/SideEffectEntryPoint_OpsTest.res +23 -18
- package/tests/StateChangeDescriptorParityTest.res +28 -26
- package/tests/StateTopicKeySchemaTest.res +18 -15
- package/tests/StateViewSliceEntryPoint_OpsTest.res +55 -44
- package/tests/TaskBucketEntryPoint_OpsTest.res +13 -13
- package/tests/Upload_ClaimTest.res +3 -3
- package/tests/Util_AwsErrorTest.res +4 -7
- package/tests/Util_BundleDependencyClosureTest.res +41 -3
- package/tests/Util_BundleDependencyClosureTest.res.mjs +11 -0
- package/tests/Util_BundleEsmLoaderTest.res +3 -3
- package/tests/Util_BundleResolveTest.res +4 -6
- package/tests/Util_BundleRuntimeExtensionTest.res +17 -18
- package/tests/Util_DcbMetricsTest.res +6 -6
- package/tests/Util_DynamoDbStreamTest.res +4 -5
- package/tests/Util_DynamoDbTest.res +3 -2
- package/tests/Util_LambdaEnvBudgetTest.res +22 -18
- package/tests/Util_LambdaLoggingTest.res +9 -8
- package/tests/Util_LogGroup_AdoptingTest.res +10 -5
- package/tests/Util_LogRetentionTest.res +6 -2
- package/tests/Util_OwnerScopeEnvTest.res +10 -8
- package/tests/Util_SQS_RuntimeTest.res +5 -7
- package/tests/Util_ShellConfigTest.res +7 -17
- package/tests/Util_StaticBundleTest.res +3 -8
- package/tests/Util_StoreLayoutTest.res +17 -12
- package/tests/integration/AggregateEntryPoint_IntegrationTest.res +1 -4
- package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res +15 -15
- package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res +296 -232
- package/tests/integration/DcbIntegrationHarness.res +8 -8
- package/tests/integration/EpCompositeSlice.res +16 -8
- package/tests/integration/QueryDbUnion_DynamoDb_IntegrationTest.res +8 -10
- package/tests/integration/StateViewSliceEntryPoint_IntegrationTest.res +10 -10
- package/tests/integration/SvsTestSlice_Projection.res +1 -3
- package/tests/util/Util_AlarmSpecTest.res +62 -49
|
@@ -79,44 +79,30 @@ let forCommandGenerator: ReventlessCore.Runtime.forComponent<
|
|
|
79
79
|
ReventlessCore.CommandGenerator.effectEventHandler<context>,
|
|
80
80
|
runtimeParts,
|
|
81
81
|
ReventlessCore.CommandGenerator.component,
|
|
82
|
-
> = (
|
|
83
|
-
~handler as _,
|
|
84
|
-
~connect,
|
|
85
|
-
~memorySize=1024,
|
|
86
|
-
~timeout=30,
|
|
87
|
-
commandGenerator,
|
|
88
|
-
) => {
|
|
82
|
+
> = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandGenerator) => {
|
|
89
83
|
let resource = commandGenerator->ReventlessCore.Component.toPulumiResource
|
|
90
84
|
switch resource.parent {
|
|
91
85
|
| Some(aggregateResource) =>
|
|
92
86
|
let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
|
|
93
87
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
94
|
-
storedSpecs->Dict.set(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
88
|
+
storedSpecs->Dict.set(
|
|
89
|
+
aggregateName,
|
|
90
|
+
{
|
|
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
|
+
},
|
|
96
|
+
)
|
|
100
97
|
| None => ()
|
|
101
98
|
}
|
|
102
99
|
}
|
|
103
100
|
|
|
104
101
|
let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
105
|
-
ReventlessCore.Runtime.effectHandler<
|
|
106
|
-
CommandTopicChannel.callbackEvent,
|
|
107
|
-
context,
|
|
108
|
-
unit,
|
|
109
|
-
string,
|
|
110
|
-
>,
|
|
102
|
+
ReventlessCore.Runtime.effectHandler<CommandTopicChannel.callbackEvent, context, unit, string>,
|
|
111
103
|
runtimeParts,
|
|
112
104
|
ReventlessCore.CommandTopic.component<'op>,
|
|
113
|
-
> = (
|
|
114
|
-
~handler as _,
|
|
115
|
-
~connect,
|
|
116
|
-
~memorySize=1024,
|
|
117
|
-
~timeout=30,
|
|
118
|
-
commandTopic,
|
|
119
|
-
) => {
|
|
105
|
+
> = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandTopic) => {
|
|
120
106
|
let commandTopicResource = commandTopic->ReventlessCore.Component.toPulumiResource
|
|
121
107
|
switch commandTopicResource.parent {
|
|
122
108
|
| Some(aggregateResource) =>
|
|
@@ -126,14 +112,17 @@ let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
|
126
112
|
let queue = channelParts.queue
|
|
127
113
|
|
|
128
114
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
129
|
-
storedSpecs->Dict.set(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
115
|
+
storedSpecs->Dict.set(
|
|
116
|
+
aggregateName,
|
|
117
|
+
{
|
|
118
|
+
...spec,
|
|
119
|
+
queueUrl: queue.id,
|
|
120
|
+
queueArn: queue.arn,
|
|
121
|
+
commandTopicConnects: spec.commandTopicConnects->Array.concat([connect]),
|
|
122
|
+
commandTopicMemorySize: Math.Int.max(spec.commandTopicMemorySize, memorySize),
|
|
123
|
+
commandTopicTimeout: Math.Int.max(spec.commandTopicTimeout, timeout),
|
|
124
|
+
},
|
|
125
|
+
)
|
|
137
126
|
| None =>
|
|
138
127
|
let name = commandTopicResource.name->Option.getOr("Unnamed")
|
|
139
128
|
JsError.throwWithMessage(
|
|
@@ -143,33 +132,24 @@ let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
|
143
132
|
}
|
|
144
133
|
|
|
145
134
|
let forEventCollector: ReventlessCore.Runtime.forEventCollector<
|
|
146
|
-
ReventlessCore.Runtime.effectHandler<
|
|
147
|
-
EventCollectorChannel.callbackEvent,
|
|
148
|
-
context,
|
|
149
|
-
unit,
|
|
150
|
-
string,
|
|
151
|
-
>,
|
|
135
|
+
ReventlessCore.Runtime.effectHandler<EventCollectorChannel.callbackEvent, context, unit, string>,
|
|
152
136
|
ReventlessCore.EventCollector.component,
|
|
153
|
-
> = (
|
|
154
|
-
~handler as _,
|
|
155
|
-
~eventTopics,
|
|
156
|
-
~resources,
|
|
157
|
-
~memorySize=2048,
|
|
158
|
-
~timeout=180,
|
|
159
|
-
eventCollector,
|
|
160
|
-
) => {
|
|
137
|
+
> = (~handler as _, ~eventTopics, ~resources, ~memorySize=2048, ~timeout=180, eventCollector) => {
|
|
161
138
|
let eventCollectorResource = eventCollector->ReventlessCore.Component.toPulumiResource
|
|
162
139
|
let channel = eventCollector->ReventlessCore.EventCollector_Adapter.channel
|
|
163
140
|
switch eventCollectorResource.parent->Option.flatMap(parent => parent.parent) {
|
|
164
141
|
| Some(aggregateResource) =>
|
|
165
142
|
let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
|
|
166
143
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
167
|
-
storedSpecs->Dict.set(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
144
|
+
storedSpecs->Dict.set(
|
|
145
|
+
aggregateName,
|
|
146
|
+
{
|
|
147
|
+
...spec,
|
|
148
|
+
eventCollectorChannelSpec: Some({channel, eventTopics, resources}),
|
|
149
|
+
eventCollectorMemorySize: Math.Int.max(spec.eventCollectorMemorySize, memorySize),
|
|
150
|
+
eventCollectorTimeout: Math.Int.max(spec.eventCollectorTimeout, timeout),
|
|
151
|
+
},
|
|
152
|
+
)
|
|
173
153
|
| None =>
|
|
174
154
|
let name = eventCollectorResource.name->Option.getOr("Unnamed")
|
|
175
155
|
JsError.throwWithMessage(
|
|
@@ -201,13 +181,11 @@ let finish = () =>
|
|
|
201
181
|
packageDirs->Dict.set(specPkg, Util_Bundle.resolvePackageRoot(specPkg))
|
|
202
182
|
packageDirs->Dict.set(behaviorPkg, Util_Bundle.resolvePackageRoot(behaviorPkg))
|
|
203
183
|
|
|
204
|
-
let specModule =
|
|
205
|
-
|
|
206
|
-
let behaviorModule =
|
|
207
|
-
info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
184
|
+
let specModule = info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
185
|
+
let behaviorModule = info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
208
186
|
|
|
209
187
|
// --- CommandTopic Lambda ---
|
|
210
|
-
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
188
|
+
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
211
189
|
// deploy-time structure, and the Lambda-name fallback yields nothing for a
|
|
212
190
|
// shared or per-aggregate command handler. Resolve it here; the shell still
|
|
213
191
|
// derives `comp` itself from the spec name.
|
|
@@ -215,15 +193,24 @@ let finish = () =>
|
|
|
215
193
|
~comp=`AggregateRuntime(${spec.aggregateName})`,
|
|
216
194
|
)
|
|
217
195
|
let cmdTopicHandlerConfigOutput =
|
|
218
|
-
Pulumi.Output.all3((
|
|
219
|
-
|
|
196
|
+
Pulumi.Output.all3((
|
|
197
|
+
info.eventLogTableName,
|
|
198
|
+
spec.queueUrl,
|
|
199
|
+
spec.queueArn,
|
|
200
|
+
))->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
|
|
220
201
|
`{"handlers":[{"specModule":${specModule},"behaviorModule":${behaviorModule},"eventLogTable":"${table}","queueUrl":"${queueUrl}","queueArn":"${queueArn}"${pluginFragment}}]}`
|
|
221
202
|
)
|
|
222
203
|
|
|
223
204
|
let cmdTopicEnvVars: dict<Pulumi.Input.t<string>> = Dict.make()
|
|
224
|
-
cmdTopicEnvVars->Dict.set(
|
|
205
|
+
cmdTopicEnvVars->Dict.set(
|
|
206
|
+
"HANDLER_CONFIG",
|
|
207
|
+
cmdTopicHandlerConfigOutput->Pulumi.Output.asInput,
|
|
208
|
+
)
|
|
225
209
|
|
|
226
|
-
let {
|
|
210
|
+
let {
|
|
211
|
+
code: cmdTopicCode,
|
|
212
|
+
sourceCodeHash: cmdTopicSourceCodeHash,
|
|
213
|
+
} = Util_Bundle.buildCodeArchive(
|
|
227
214
|
~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/AggregateEntryPoint.mjs",
|
|
228
215
|
~packageDirs,
|
|
229
216
|
)
|
|
@@ -245,7 +232,7 @@ let finish = () =>
|
|
|
245
232
|
|
|
246
233
|
// --- CommandGenerator Lambda ---
|
|
247
234
|
if spec.commandGeneratorConnects->Array.length > 0 {
|
|
248
|
-
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
235
|
+
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
249
236
|
// deploy-time structure, and the Lambda-name fallback yields nothing for a
|
|
250
237
|
// shared or per-aggregate command handler. Resolve it here; the shell still
|
|
251
238
|
// derives `comp` itself from the spec name.
|
|
@@ -253,16 +240,25 @@ let finish = () =>
|
|
|
253
240
|
~comp=`AggregateRuntime(${spec.aggregateName})`,
|
|
254
241
|
)
|
|
255
242
|
let cmdGenHandlerConfigOutput =
|
|
256
|
-
Pulumi.Output.all3((
|
|
257
|
-
|
|
243
|
+
Pulumi.Output.all3((
|
|
244
|
+
info.eventLogTableName,
|
|
245
|
+
spec.queueUrl,
|
|
246
|
+
spec.queueArn,
|
|
247
|
+
))->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
|
|
258
248
|
`{"handlers":[{"specModule":${specModule},"behaviorModule":${behaviorModule},"eventLogTable":"${table}","queueUrl":"${queueUrl}","queueArn":"${queueArn}"${pluginFragment}}]}`
|
|
259
249
|
)
|
|
260
250
|
|
|
261
251
|
let cmdGenEnvVars: dict<Pulumi.Input.t<string>> = Dict.make()
|
|
262
|
-
cmdGenEnvVars->Dict.set(
|
|
252
|
+
cmdGenEnvVars->Dict.set(
|
|
253
|
+
"HANDLER_CONFIG",
|
|
254
|
+
cmdGenHandlerConfigOutput->Pulumi.Output.asInput,
|
|
255
|
+
)
|
|
263
256
|
cmdGenEnvVars->Dict.set("DISPATCH_MODE", "async"->Pulumi.Input.make)
|
|
264
257
|
|
|
265
|
-
let {
|
|
258
|
+
let {
|
|
259
|
+
code: cmdGenCode,
|
|
260
|
+
sourceCodeHash: cmdGenSourceCodeHash,
|
|
261
|
+
} = Util_Bundle.buildCodeArchive(
|
|
266
262
|
~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/AggregateEntryPoint.mjs",
|
|
267
263
|
~packageDirs,
|
|
268
264
|
)
|
|
@@ -280,9 +276,7 @@ let finish = () =>
|
|
|
280
276
|
~opts=aggregateOpts,
|
|
281
277
|
)
|
|
282
278
|
|
|
283
|
-
spec.commandGeneratorConnects->Array.forEach(connect =>
|
|
284
|
-
connect(~runtime=cmdGenRuntime)
|
|
285
|
-
)
|
|
279
|
+
spec.commandGeneratorConnects->Array.forEach(connect => connect(~runtime=cmdGenRuntime))
|
|
286
280
|
}
|
|
287
281
|
|
|
288
282
|
// --- EventMapper Lambda ---
|
|
@@ -290,14 +284,11 @@ let finish = () =>
|
|
|
290
284
|
| (Some(channelSpec), Some(mappingsModulePath)) =>
|
|
291
285
|
let evtMapperEnvVars: dict<Pulumi.Input.t<string>> = Dict.make()
|
|
292
286
|
|
|
293
|
-
let targetSpecModule =
|
|
294
|
-
|
|
295
|
-
let mappingsModuleJson =
|
|
296
|
-
mappingsModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
287
|
+
let targetSpecModule = info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
288
|
+
let mappingsModuleJson = mappingsModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
297
289
|
|
|
298
290
|
let handlerConfigJson =
|
|
299
|
-
spec.queueUrl
|
|
300
|
-
->Pulumi.Output.apply(queueUrl =>
|
|
291
|
+
spec.queueUrl->Pulumi.Output.apply(queueUrl =>
|
|
301
292
|
`{"targetSpecModule":${targetSpecModule},"mappingsModule":${mappingsModuleJson},"queueUrl":"${queueUrl}"}`
|
|
302
293
|
)
|
|
303
294
|
evtMapperEnvVars->Dict.set("HANDLER_CONFIG", handlerConfigJson->Pulumi.Output.asInput)
|
|
@@ -308,7 +299,10 @@ let finish = () =>
|
|
|
308
299
|
evtMapperPackageDirs->Dict.set(specPkg, Util_Bundle.resolvePackageRoot(specPkg))
|
|
309
300
|
evtMapperPackageDirs->Dict.set(mappingsPkg, Util_Bundle.resolvePackageRoot(mappingsPkg))
|
|
310
301
|
|
|
311
|
-
let {
|
|
302
|
+
let {
|
|
303
|
+
code: evtMapperCode,
|
|
304
|
+
sourceCodeHash: evtMapperSourceCodeHash,
|
|
305
|
+
} = Util_Bundle.buildCodeArchive(
|
|
312
306
|
~entryPointModule="@reventlessdev/reventless-aws/src/adapter/Runtime/EventMapperEntryPoint.mjs",
|
|
313
307
|
~packageDirs=evtMapperPackageDirs,
|
|
314
308
|
)
|
|
@@ -21,10 +21,7 @@ let registerAggregate = (
|
|
|
21
21
|
~behaviorModulePath,
|
|
22
22
|
~eventLogTableName,
|
|
23
23
|
) =>
|
|
24
|
-
aggregateInfos->Dict.set(
|
|
25
|
-
aggregateName,
|
|
26
|
-
{specModulePath, behaviorModulePath, eventLogTableName},
|
|
27
|
-
)
|
|
24
|
+
aggregateInfos->Dict.set(aggregateName, {specModulePath, behaviorModulePath, eventLogTableName})
|
|
28
25
|
|
|
29
26
|
type storedSpec = {
|
|
30
27
|
aggregateName: string,
|
|
@@ -63,44 +60,30 @@ let forCommandGenerator: ReventlessCore.Runtime.forComponent<
|
|
|
63
60
|
ReventlessCore.CommandGenerator.effectEventHandler<context>,
|
|
64
61
|
runtimeParts,
|
|
65
62
|
ReventlessCore.CommandGenerator.component,
|
|
66
|
-
> = (
|
|
67
|
-
~handler as _,
|
|
68
|
-
~connect,
|
|
69
|
-
~memorySize=1024,
|
|
70
|
-
~timeout=30,
|
|
71
|
-
commandGenerator,
|
|
72
|
-
) => {
|
|
63
|
+
> = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandGenerator) => {
|
|
73
64
|
let resource = commandGenerator->ReventlessCore.Component.toPulumiResource
|
|
74
65
|
switch resource.parent {
|
|
75
66
|
| Some(aggregateResource) =>
|
|
76
67
|
let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
|
|
77
68
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
78
|
-
storedSpecs->Dict.set(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
storedSpecs->Dict.set(
|
|
70
|
+
aggregateName,
|
|
71
|
+
{
|
|
72
|
+
...spec,
|
|
73
|
+
connects: spec.connects->Array.concat([connect]),
|
|
74
|
+
memorySize: Math.Int.max(spec.memorySize, memorySize),
|
|
75
|
+
timeout: Math.Int.max(spec.timeout, timeout),
|
|
76
|
+
},
|
|
77
|
+
)
|
|
84
78
|
| None => ()
|
|
85
79
|
}
|
|
86
80
|
}
|
|
87
81
|
|
|
88
82
|
let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
89
|
-
ReventlessCore.Runtime.effectHandler<
|
|
90
|
-
CommandTopicChannel.callbackEvent,
|
|
91
|
-
context,
|
|
92
|
-
unit,
|
|
93
|
-
string,
|
|
94
|
-
>,
|
|
83
|
+
ReventlessCore.Runtime.effectHandler<CommandTopicChannel.callbackEvent, context, unit, string>,
|
|
95
84
|
runtimeParts,
|
|
96
85
|
ReventlessCore.CommandTopic.component<'op>,
|
|
97
|
-
> = (
|
|
98
|
-
~handler as _,
|
|
99
|
-
~connect,
|
|
100
|
-
~memorySize=1024,
|
|
101
|
-
~timeout=30,
|
|
102
|
-
commandTopic,
|
|
103
|
-
) => {
|
|
86
|
+
> = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandTopic) => {
|
|
104
87
|
let commandTopicResource = commandTopic->ReventlessCore.Component.toPulumiResource
|
|
105
88
|
switch commandTopicResource.parent {
|
|
106
89
|
| Some(aggregateResource) =>
|
|
@@ -110,14 +93,17 @@ let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
|
110
93
|
let queue = channelParts.queue
|
|
111
94
|
|
|
112
95
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
113
|
-
storedSpecs->Dict.set(
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
96
|
+
storedSpecs->Dict.set(
|
|
97
|
+
aggregateName,
|
|
98
|
+
{
|
|
99
|
+
...spec,
|
|
100
|
+
queueUrl: queue.id,
|
|
101
|
+
queueArn: queue.arn,
|
|
102
|
+
connects: spec.connects->Array.concat([connect]),
|
|
103
|
+
memorySize: Math.Int.max(spec.memorySize, memorySize),
|
|
104
|
+
timeout: Math.Int.max(spec.timeout, timeout),
|
|
105
|
+
},
|
|
106
|
+
)
|
|
121
107
|
| None =>
|
|
122
108
|
let name = commandTopicResource.name->Option.getOr("Unnamed")
|
|
123
109
|
JsError.throwWithMessage(
|
|
@@ -127,33 +113,24 @@ let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
|
127
113
|
}
|
|
128
114
|
|
|
129
115
|
let forEventCollector: ReventlessCore.Runtime.forEventCollector<
|
|
130
|
-
ReventlessCore.Runtime.effectHandler<
|
|
131
|
-
EventCollectorChannel.callbackEvent,
|
|
132
|
-
context,
|
|
133
|
-
unit,
|
|
134
|
-
string,
|
|
135
|
-
>,
|
|
116
|
+
ReventlessCore.Runtime.effectHandler<EventCollectorChannel.callbackEvent, context, unit, string>,
|
|
136
117
|
ReventlessCore.EventCollector.component,
|
|
137
|
-
> = (
|
|
138
|
-
~handler as _,
|
|
139
|
-
~eventTopics,
|
|
140
|
-
~resources,
|
|
141
|
-
~memorySize=1024,
|
|
142
|
-
~timeout=30,
|
|
143
|
-
eventCollector,
|
|
144
|
-
) => {
|
|
118
|
+
> = (~handler as _, ~eventTopics, ~resources, ~memorySize=1024, ~timeout=30, eventCollector) => {
|
|
145
119
|
let eventCollectorResource = eventCollector->ReventlessCore.Component.toPulumiResource
|
|
146
120
|
let channel = eventCollector->ReventlessCore.EventCollector_Adapter.channel
|
|
147
121
|
switch eventCollectorResource.parent->Option.flatMap(parent => parent.parent) {
|
|
148
122
|
| Some(aggregateResource) =>
|
|
149
123
|
let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
|
|
150
124
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
151
|
-
storedSpecs->Dict.set(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
125
|
+
storedSpecs->Dict.set(
|
|
126
|
+
aggregateName,
|
|
127
|
+
{
|
|
128
|
+
...spec,
|
|
129
|
+
eventCollectorChannelSpec: Some({channel, eventTopics, resources}),
|
|
130
|
+
memorySize: Math.Int.max(spec.memorySize, memorySize),
|
|
131
|
+
timeout: Math.Int.max(spec.timeout, timeout),
|
|
132
|
+
},
|
|
133
|
+
)
|
|
157
134
|
| None =>
|
|
158
135
|
let name = eventCollectorResource.name->Option.getOr("Unnamed")
|
|
159
136
|
JsError.throwWithMessage(
|
|
@@ -188,12 +165,10 @@ let finish = () =>
|
|
|
188
165
|
let lambdaName = name ++ "CmdHandler"
|
|
189
166
|
|
|
190
167
|
// Build HANDLER_CONFIG with single handler
|
|
191
|
-
let specModule =
|
|
192
|
-
|
|
193
|
-
let behaviorModule =
|
|
194
|
-
info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
168
|
+
let specModule = info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
169
|
+
let behaviorModule = info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
195
170
|
|
|
196
|
-
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
171
|
+
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
197
172
|
// deploy-time structure, and the Lambda-name fallback yields nothing for a
|
|
198
173
|
// shared or per-aggregate command handler. Resolve it here; the shell still
|
|
199
174
|
// derives `comp` itself from the spec name.
|
|
@@ -201,8 +176,11 @@ let finish = () =>
|
|
|
201
176
|
~comp=`AggregateRuntime(${spec.aggregateName})`,
|
|
202
177
|
)
|
|
203
178
|
let handlerConfigOutput =
|
|
204
|
-
Pulumi.Output.all3((
|
|
205
|
-
|
|
179
|
+
Pulumi.Output.all3((
|
|
180
|
+
info.eventLogTableName,
|
|
181
|
+
spec.queueUrl,
|
|
182
|
+
spec.queueArn,
|
|
183
|
+
))->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
|
|
206
184
|
`{"handlers":[{"specModule":${specModule},"behaviorModule":${behaviorModule},"eventLogTable":"${table}","queueUrl":"${queueUrl}","queueArn":"${queueArn}"${pluginFragment}}]}`
|
|
207
185
|
)
|
|
208
186
|
|
|
@@ -236,8 +214,7 @@ let finish = () =>
|
|
|
236
214
|
|
|
237
215
|
spec.connects->Array.forEach(connect => connect(~runtime))
|
|
238
216
|
|
|
239
|
-
let channelSpecs =
|
|
240
|
-
spec.eventCollectorChannelSpec->Option.mapOr([], cs => [cs])
|
|
217
|
+
let channelSpecs = spec.eventCollectorChannelSpec->Option.mapOr([], cs => [cs])
|
|
241
218
|
let _connectResources = EventCollectorChannel.connect(
|
|
242
219
|
~name,
|
|
243
220
|
~channelSpecs,
|
|
@@ -25,10 +25,7 @@ let registerAggregate = (
|
|
|
25
25
|
~behaviorModulePath,
|
|
26
26
|
~eventLogTableName,
|
|
27
27
|
) =>
|
|
28
|
-
aggregateInfos->Dict.set(
|
|
29
|
-
aggregateName,
|
|
30
|
-
{specModulePath, behaviorModulePath, eventLogTableName},
|
|
31
|
-
)
|
|
28
|
+
aggregateInfos->Dict.set(aggregateName, {specModulePath, behaviorModulePath, eventLogTableName})
|
|
32
29
|
|
|
33
30
|
type storedSpec = {
|
|
34
31
|
aggregateName: string,
|
|
@@ -67,44 +64,30 @@ let forCommandGenerator: ReventlessCore.Runtime.forComponent<
|
|
|
67
64
|
ReventlessCore.CommandGenerator.effectEventHandler<context>,
|
|
68
65
|
runtimeParts,
|
|
69
66
|
ReventlessCore.CommandGenerator.component,
|
|
70
|
-
> = (
|
|
71
|
-
~handler as _,
|
|
72
|
-
~connect,
|
|
73
|
-
~memorySize=1024,
|
|
74
|
-
~timeout=30,
|
|
75
|
-
commandGenerator,
|
|
76
|
-
) => {
|
|
67
|
+
> = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandGenerator) => {
|
|
77
68
|
let resource = commandGenerator->ReventlessCore.Component.toPulumiResource
|
|
78
69
|
switch resource.parent {
|
|
79
70
|
| Some(aggregateResource) =>
|
|
80
71
|
let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
|
|
81
72
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
82
|
-
storedSpecs->Dict.set(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
73
|
+
storedSpecs->Dict.set(
|
|
74
|
+
aggregateName,
|
|
75
|
+
{
|
|
76
|
+
...spec,
|
|
77
|
+
connects: spec.connects->Array.concat([connect]),
|
|
78
|
+
memorySize: Math.Int.max(spec.memorySize, memorySize),
|
|
79
|
+
timeout: Math.Int.max(spec.timeout, timeout),
|
|
80
|
+
},
|
|
81
|
+
)
|
|
88
82
|
| None => ()
|
|
89
83
|
}
|
|
90
84
|
}
|
|
91
85
|
|
|
92
86
|
let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
93
|
-
ReventlessCore.Runtime.effectHandler<
|
|
94
|
-
CommandTopicChannel.callbackEvent,
|
|
95
|
-
context,
|
|
96
|
-
unit,
|
|
97
|
-
string,
|
|
98
|
-
>,
|
|
87
|
+
ReventlessCore.Runtime.effectHandler<CommandTopicChannel.callbackEvent, context, unit, string>,
|
|
99
88
|
runtimeParts,
|
|
100
89
|
ReventlessCore.CommandTopic.component<'op>,
|
|
101
|
-
> = (
|
|
102
|
-
~handler as _,
|
|
103
|
-
~connect,
|
|
104
|
-
~memorySize=1024,
|
|
105
|
-
~timeout=30,
|
|
106
|
-
commandTopic,
|
|
107
|
-
) => {
|
|
90
|
+
> = (~handler as _, ~connect, ~memorySize=1024, ~timeout=30, commandTopic) => {
|
|
108
91
|
let commandTopicResource = commandTopic->ReventlessCore.Component.toPulumiResource
|
|
109
92
|
switch commandTopicResource.parent {
|
|
110
93
|
| Some(aggregateResource) =>
|
|
@@ -114,14 +97,17 @@ let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
|
114
97
|
let queue = channelParts.queue
|
|
115
98
|
|
|
116
99
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
117
|
-
storedSpecs->Dict.set(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
100
|
+
storedSpecs->Dict.set(
|
|
101
|
+
aggregateName,
|
|
102
|
+
{
|
|
103
|
+
...spec,
|
|
104
|
+
queueUrl: queue.id,
|
|
105
|
+
queueArn: queue.arn,
|
|
106
|
+
connects: spec.connects->Array.concat([connect]),
|
|
107
|
+
memorySize: Math.Int.max(spec.memorySize, memorySize),
|
|
108
|
+
timeout: Math.Int.max(spec.timeout, timeout),
|
|
109
|
+
},
|
|
110
|
+
)
|
|
125
111
|
| None =>
|
|
126
112
|
let name = commandTopicResource.name->Option.getOr("Unnamed")
|
|
127
113
|
JsError.throwWithMessage(
|
|
@@ -131,33 +117,24 @@ let forCommandTopic: ReventlessCore.Runtime.forComponent<
|
|
|
131
117
|
}
|
|
132
118
|
|
|
133
119
|
let forEventCollector: ReventlessCore.Runtime.forEventCollector<
|
|
134
|
-
ReventlessCore.Runtime.effectHandler<
|
|
135
|
-
EventCollectorChannel.callbackEvent,
|
|
136
|
-
context,
|
|
137
|
-
unit,
|
|
138
|
-
string,
|
|
139
|
-
>,
|
|
120
|
+
ReventlessCore.Runtime.effectHandler<EventCollectorChannel.callbackEvent, context, unit, string>,
|
|
140
121
|
ReventlessCore.EventCollector.component,
|
|
141
|
-
> = (
|
|
142
|
-
~handler as _,
|
|
143
|
-
~eventTopics,
|
|
144
|
-
~resources,
|
|
145
|
-
~memorySize=1024,
|
|
146
|
-
~timeout=30,
|
|
147
|
-
eventCollector,
|
|
148
|
-
) => {
|
|
122
|
+
> = (~handler as _, ~eventTopics, ~resources, ~memorySize=1024, ~timeout=30, eventCollector) => {
|
|
149
123
|
let eventCollectorResource = eventCollector->ReventlessCore.Component.toPulumiResource
|
|
150
124
|
let channel = eventCollector->ReventlessCore.EventCollector_Adapter.channel
|
|
151
125
|
switch eventCollectorResource.parent->Option.flatMap(parent => parent.parent) {
|
|
152
126
|
| Some(aggregateResource) =>
|
|
153
127
|
let aggregateName = aggregateResource.name->Option.getOr("Unnamed")
|
|
154
128
|
let spec = getStoredSpec(aggregateName, aggregateResource)
|
|
155
|
-
storedSpecs->Dict.set(
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
129
|
+
storedSpecs->Dict.set(
|
|
130
|
+
aggregateName,
|
|
131
|
+
{
|
|
132
|
+
...spec,
|
|
133
|
+
eventCollectorChannelSpec: Some({channel, eventTopics, resources}),
|
|
134
|
+
memorySize: Math.Int.max(spec.memorySize, memorySize),
|
|
135
|
+
timeout: Math.Int.max(spec.timeout, timeout),
|
|
136
|
+
},
|
|
137
|
+
)
|
|
161
138
|
| None =>
|
|
162
139
|
let name = eventCollectorResource.name->Option.getOr("Unnamed")
|
|
163
140
|
JsError.throwWithMessage(
|
|
@@ -186,12 +163,10 @@ let finish = () =>
|
|
|
186
163
|
ReventlessCore.Aggregate.componentType,
|
|
187
164
|
)
|
|
188
165
|
|
|
189
|
-
let specModule =
|
|
190
|
-
|
|
191
|
-
let behaviorModule =
|
|
192
|
-
info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
166
|
+
let specModule = info.specModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
167
|
+
let behaviorModule = info.behaviorModulePath->JSON.stringifyAny->Option.getOr(`""`)
|
|
193
168
|
|
|
194
|
-
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
169
|
+
// `plugin` cannot be resolved inside the Lambda — LogPrefix's registry is a
|
|
195
170
|
// deploy-time structure, and the Lambda-name fallback yields nothing for a
|
|
196
171
|
// shared or per-aggregate command handler. Resolve it here; the shell still
|
|
197
172
|
// derives `comp` itself from the spec name.
|
|
@@ -199,8 +174,11 @@ let finish = () =>
|
|
|
199
174
|
~comp=`AggregateRuntime(${spec.aggregateName})`,
|
|
200
175
|
)
|
|
201
176
|
let handlerConfigOutput =
|
|
202
|
-
Pulumi.Output.all3((
|
|
203
|
-
|
|
177
|
+
Pulumi.Output.all3((
|
|
178
|
+
info.eventLogTableName,
|
|
179
|
+
spec.queueUrl,
|
|
180
|
+
spec.queueArn,
|
|
181
|
+
))->Pulumi.Output.apply(((table, queueUrl, queueArn)) =>
|
|
204
182
|
`{"handlers":[{"specModule":${specModule},"behaviorModule":${behaviorModule},"eventLogTable":"${table}","queueUrl":"${queueUrl}","queueArn":"${queueArn}"${pluginFragment}}]}`
|
|
205
183
|
)
|
|
206
184
|
|
|
@@ -233,8 +211,7 @@ let finish = () =>
|
|
|
233
211
|
|
|
234
212
|
spec.connects->Array.forEach(connect => connect(~runtime))
|
|
235
213
|
|
|
236
|
-
let channelSpecs =
|
|
237
|
-
spec.eventCollectorChannelSpec->Option.mapOr([], cs => [cs])
|
|
214
|
+
let channelSpecs = spec.eventCollectorChannelSpec->Option.mapOr([], cs => [cs])
|
|
238
215
|
let _connectResources = EventCollectorChannel.connect(
|
|
239
216
|
~name,
|
|
240
217
|
~channelSpecs,
|