@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.
- package/CHANGELOG.md +1564 -0
- package/README.md +62 -0
- package/__mocks__/emptyModule.js +1 -0
- package/all-licenses.csv +565 -0
- package/docker-compose.dynamodb-local.yml +12 -0
- package/jest.setup.cjs +5 -0
- package/licenses-analysis.ods +0 -0
- package/package.json +73 -0
- package/rescript.json +39 -0
- package/reventless-licenses-analysis.xls +0 -0
- package/scripts/run-integration-tests.sh +43 -0
- package/src/Platform.res +1940 -0
- package/src/Platform.res.mjs +2281 -0
- package/src/Platform_Casts.res +106 -0
- package/src/Platform_Casts.res.mjs +13 -0
- package/src/Platform_Stack.res +153 -0
- package/src/Platform_Stack.res.mjs +121 -0
- package/src/Types.res +39 -0
- package/src/Types.res.mjs +21 -0
- package/src/adapter/AWS.res +96 -0
- package/src/adapter/AWS.res.mjs +186 -0
- package/src/adapter/AWS_Tags.res +16 -0
- package/src/adapter/AWS_Tags.res.mjs +48 -0
- package/src/adapter/Adapter_Helpers.res +19 -0
- package/src/adapter/Adapter_Helpers.res.mjs +37 -0
- package/src/adapter/Api/AppSync_EventsApi.res +172 -0
- package/src/adapter/Api/AppSync_EventsApi.res.mjs +96 -0
- package/src/adapter/Api/AppSync_Resolver_Native.res +93 -0
- package/src/adapter/Api/AppSync_Resolver_Native.res.mjs +67 -0
- package/src/adapter/Api/AppSync_Resolver_Retrying.res +653 -0
- package/src/adapter/Api/AppSync_Resolver_Retrying.res.mjs +462 -0
- package/src/adapter/Api/CommandSubscriptionResolvers_AppSync.res +29 -0
- package/src/adapter/Api/CommandSubscriptionResolvers_AppSync.res.mjs +15 -0
- package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res +238 -0
- package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res.mjs +179 -0
- package/src/adapter/Api/Platform_UIFragments_Lambda.res +229 -0
- package/src/adapter/Api/Platform_UIFragments_Lambda.res.mjs +245 -0
- package/src/adapter/Auth/Auth_Cognito.res +209 -0
- package/src/adapter/Auth/Auth_Cognito.res.mjs +135 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers.res +2 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers.res.mjs +12 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res +251 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res.mjs +126 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res +20 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_NoOp.res.mjs +23 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_Runtime.res +1 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync_Runtime.res.mjs +11 -0
- package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res +95 -0
- package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res.mjs +50 -0
- package/src/adapter/CommandTopic/CommandTopicChannel.res +6 -0
- package/src/adapter/CommandTopic/CommandTopicChannel.res.mjs +21 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_Helpers.res +196 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_Helpers.res.mjs +145 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res +91 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res.mjs +74 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res +69 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res.mjs +62 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res +60 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res.mjs +56 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res +73 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res.mjs +65 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res +88 -0
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res.mjs +76 -0
- package/src/adapter/CommandTopic/CommandTopicRemoteChannel.res +1 -0
- package/src/adapter/CommandTopic/CommandTopicRemoteChannel.res.mjs +9 -0
- package/src/adapter/CommandTopic/CommandTopicRemoteChannel_SQS.res +7 -0
- package/src/adapter/CommandTopic/CommandTopicRemoteChannel_SQS.res.mjs +17 -0
- package/src/adapter/Counter/CounterHandler_DynamoDbStream.res +103 -0
- package/src/adapter/Counter/CounterHandler_DynamoDbStream.res.mjs +68 -0
- package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res +107 -0
- package/src/adapter/Counter/CounterHandler_DynamoDbStream_Runtime.res.mjs +145 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage.res +1 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage.res.mjs +9 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +84 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res.mjs +52 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res +1436 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res.mjs +1143 -0
- package/src/adapter/EventCollector/EventCollectorChannel.res +6 -0
- package/src/adapter/EventCollector/EventCollectorChannel.res.mjs +21 -0
- package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res +63 -0
- package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs +56 -0
- package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res +20 -0
- package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res.mjs +32 -0
- package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res +266 -0
- package/src/adapter/EventCollector/EventCollectorChannel_Helpers.res.mjs +166 -0
- package/src/adapter/EventCollector/EventCollectorChannel_SQS.res +81 -0
- package/src/adapter/EventCollector/EventCollectorChannel_SQS.res.mjs +54 -0
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res +59 -0
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res.mjs +45 -0
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res +91 -0
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res.mjs +89 -0
- package/src/adapter/EventLog/EventLogStorage.res +3 -0
- package/src/adapter/EventLog/EventLogStorage.res.mjs +15 -0
- package/src/adapter/EventLog/EventLogStorage_DynamoDb.res +25 -0
- package/src/adapter/EventLog/EventLogStorage_DynamoDb.res.mjs +34 -0
- package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res +26 -0
- package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res.mjs +35 -0
- package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res +121 -0
- package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res.mjs +137 -0
- package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res +265 -0
- package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res.mjs +185 -0
- package/src/adapter/EventTopic/EventTopicPublisher.res +6 -0
- package/src/adapter/EventTopic/EventTopicPublisher.res.mjs +21 -0
- package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res +25 -0
- package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res.mjs +28 -0
- package/src/adapter/EventTopic/EventTopicPublisher_SNS.res +40 -0
- package/src/adapter/EventTopic/EventTopicPublisher_SNS.res.mjs +39 -0
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res +39 -0
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res.mjs +38 -0
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res +5 -0
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_Runtime.res.mjs +18 -0
- package/src/adapter/Mcp/MCP_Lambda.res +502 -0
- package/src/adapter/Mcp/MCP_Lambda.res.mjs +289 -0
- package/src/adapter/QueryDb/NodeResolver_AppSync.res +71 -0
- package/src/adapter/QueryDb/NodeResolver_AppSync.res.mjs +44 -0
- package/src/adapter/QueryDb/QueryDbResolvers.res +2 -0
- package/src/adapter/QueryDb/QueryDbResolvers.res.mjs +12 -0
- package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res +434 -0
- package/src/adapter/QueryDb/QueryDbResolvers_AppSync.res.mjs +243 -0
- package/src/adapter/QueryDb/QueryDbResolvers_AppSync_NoOp.res +21 -0
- package/src/adapter/QueryDb/QueryDbResolvers_AppSync_NoOp.res.mjs +14 -0
- package/src/adapter/QueryDb/QueryDbResolvers_NoOp.res +21 -0
- package/src/adapter/QueryDb/QueryDbResolvers_NoOp.res.mjs +14 -0
- package/src/adapter/QueryDb/QueryDbStorage.res +5 -0
- package/src/adapter/QueryDb/QueryDbStorage.res.mjs +18 -0
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res +115 -0
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res.mjs +100 -0
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res +52 -0
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res.mjs +38 -0
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res +271 -0
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res.mjs +306 -0
- package/src/adapter/QueryDb/QueryInterceptor_Lambda.res +20 -0
- package/src/adapter/QueryDb/QueryInterceptor_Lambda.res.mjs +22 -0
- package/src/adapter/QueryEngine/QueryEngine.res +3 -0
- package/src/adapter/QueryEngine/QueryEngine.res.mjs +12 -0
- package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res +184 -0
- package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res.mjs +221 -0
- package/src/adapter/Runtime/AdminEventCollectorEntryPoint.mjs +879 -0
- package/src/adapter/Runtime/AggregateEntryPoint.mjs +313 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +327 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +239 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res +331 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res.mjs +240 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +247 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +185 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res +244 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res.mjs +185 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +347 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +244 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res +285 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res.mjs +212 -0
- package/src/adapter/Runtime/AutomationSliceEntryPoint.mjs +124 -0
- package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res +187 -0
- package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res.mjs +147 -0
- package/src/adapter/Runtime/CounterEntryPoint.mjs +91 -0
- package/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs +265 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +122 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +89 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +193 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +137 -0
- package/src/adapter/Runtime/EventMapperEntryPoint.mjs +97 -0
- package/src/adapter/Runtime/ExtensionPointEntryPoint.mjs +101 -0
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +83 -0
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +59 -0
- package/src/adapter/Runtime/HandlerFactoryHelpers.mjs +142 -0
- package/src/adapter/Runtime/HeartbeatEntryPoint.mjs +38 -0
- package/src/adapter/Runtime/PluginExtensionPointEntryPoint.mjs +137 -0
- package/src/adapter/Runtime/ReadModelEntryPoint.mjs +143 -0
- package/src/adapter/Runtime/RuntimeEnvironment.res +1 -0
- package/src/adapter/Runtime/RuntimeEnvironment.res.mjs +9 -0
- package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +254 -0
- package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res.mjs +169 -0
- package/src/adapter/Runtime/SideEffectEntryPoint.mjs +81 -0
- package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +178 -0
- package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res.mjs +129 -0
- package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res +166 -0
- package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res.mjs +87 -0
- package/src/adapter/Runtime/StateViewSliceEntryPoint.mjs +136 -0
- package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res +344 -0
- package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res.mjs +242 -0
- package/src/adapter/Runtime/TaskBucketEntryPoint.mjs +150 -0
- package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +123 -0
- package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +74 -0
- package/src/adapter/ScheduledPublisher/ScheduledPublisher.res +2 -0
- package/src/adapter/ScheduledPublisher/ScheduledPublisher.res.mjs +12 -0
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res +54 -0
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res.mjs +41 -0
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res +97 -0
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents_Runtime.res.mjs +85 -0
- package/src/adapter/StateTopic/StateTopic_AppSync.res +418 -0
- package/src/adapter/StateTopic/StateTopic_AppSync.res.mjs +295 -0
- package/src/adapter/Task/TaskBucket.res +1 -0
- package/src/adapter/Task/TaskBucket.res.mjs +9 -0
- package/src/adapter/Task/TaskBucket_S3.res +157 -0
- package/src/adapter/Task/TaskBucket_S3.res.mjs +108 -0
- package/src/adapter/Task/TaskBucket_S3_Runtime.res +11 -0
- package/src/adapter/Task/TaskBucket_S3_Runtime.res.mjs +15 -0
- package/src/components/Aggregate_Builder.res +1 -0
- package/src/components/Aggregate_Builder.res.mjs +25 -0
- package/src/components/Aggregate_Builder_Micro.res +63 -0
- package/src/components/Aggregate_Builder_Micro.res.mjs +80 -0
- package/src/components/Aggregate_Builder_NoResolver.res +61 -0
- package/src/components/Aggregate_Builder_NoResolver.res.mjs +80 -0
- package/src/components/Aggregate_Builder_PerAggregate.res +57 -0
- package/src/components/Aggregate_Builder_PerAggregate.res.mjs +80 -0
- package/src/components/Aggregate_Builder_Single.res +59 -0
- package/src/components/Aggregate_Builder_Single.res.mjs +80 -0
- package/src/components/Aggregate_Builder_Single_Async.res +59 -0
- package/src/components/Aggregate_Builder_Single_Async.res.mjs +80 -0
- package/src/components/Api/AppSync_Adapter.res +500 -0
- package/src/components/Api/AppSync_Adapter.res.mjs +396 -0
- package/src/components/AutomationSlice_Builder.res +52 -0
- package/src/components/AutomationSlice_Builder.res.mjs +72 -0
- package/src/components/AutomationSlice_Builder_Bundled.res.mjs +70 -0
- package/src/components/Counter_Builder.res +10 -0
- package/src/components/Counter_Builder.res.mjs +16 -0
- package/src/components/DataCleaner.res +170 -0
- package/src/components/DataCleaner.res.mjs +2 -0
- package/src/components/DcbEventLog_Builder.res +8 -0
- package/src/components/DcbEventLog_Builder.res.mjs +14 -0
- package/src/components/ExtensionPoint_Builder.res +16 -0
- package/src/components/ExtensionPoint_Builder.res.mjs +37 -0
- package/src/components/ForeignReadModel_Builder.res +19 -0
- package/src/components/ForeignReadModel_Builder.res.mjs +48 -0
- package/src/components/InboundTranslationSlice_Builder.res +25 -0
- package/src/components/InboundTranslationSlice_Builder.res.mjs +31 -0
- package/src/components/OutboundTranslationSlice_Builder.res +60 -0
- package/src/components/OutboundTranslationSlice_Builder.res.mjs +76 -0
- package/src/components/OutboundTranslationSlice_Builder_Bundled.res.mjs +75 -0
- package/src/components/Plugin.res +29 -0
- package/src/components/Plugin.res.mjs +63 -0
- package/src/components/ReadModel_Builder.res +1 -0
- package/src/components/ReadModel_Builder.res.mjs +19 -0
- package/src/components/ReadModel_Builder_NoResolver.res +55 -0
- package/src/components/ReadModel_Builder_NoResolver.res.mjs +64 -0
- package/src/components/ReadModel_Builder_NoResolver_Stream.res +60 -0
- package/src/components/ReadModel_Builder_NoResolver_Stream.res.mjs +64 -0
- package/src/components/ReadModel_Builder_PerReadModel.res +53 -0
- package/src/components/ReadModel_Builder_PerReadModel.res.mjs +66 -0
- package/src/components/ReadModel_Builder_Single.res +52 -0
- package/src/components/ReadModel_Builder_Single.res.mjs +66 -0
- package/src/components/ReadModel_Builder_Single_Stream.res +60 -0
- package/src/components/ReadModel_Builder_Single_Stream.res.mjs +66 -0
- package/src/components/Scheduler.res +1 -0
- package/src/components/Scheduler.res.mjs +13 -0
- package/src/components/SideEffectHandler.res +1 -0
- package/src/components/SideEffectHandler.res.mjs +19 -0
- package/src/components/SideEffectHandler_PerSideEffectHandler.res +13 -0
- package/src/components/SideEffectHandler_PerSideEffectHandler.res.mjs +52 -0
- package/src/components/SideEffectHandler_Single.res +54 -0
- package/src/components/SideEffectHandler_Single.res.mjs +60 -0
- package/src/components/StateChangeSlice_Builder.res +17 -0
- package/src/components/StateChangeSlice_Builder.res.mjs +23 -0
- package/src/components/StateViewSlice_Builder.res +46 -0
- package/src/components/StateViewSlice_Builder.res.mjs +68 -0
- package/src/components/StateViewSlice_Builder_Bundled.res.mjs +69 -0
- package/src/components/StateViewSlice_Builder_Stream.res +50 -0
- package/src/components/StateViewSlice_Builder_Stream.res.mjs +68 -0
- package/src/components/Task_Builder.res +1 -0
- package/src/components/Task_Builder.res.mjs +28 -0
- package/src/components/Task_Builder_PerBucket.res +22 -0
- package/src/components/Task_Builder_PerBucket.res.mjs +63 -0
- package/src/components/Vpc.res +214 -0
- package/src/components/Vpc.res.mjs +117 -0
- package/src/components/Vpc.resi +22 -0
- package/src/errors/AppSync_Error.res +36 -0
- package/src/errors/AppSync_Error.res.mjs +38 -0
- package/src/errors/Cognito_Error.res +36 -0
- package/src/errors/Cognito_Error.res.mjs +38 -0
- package/src/errors/DynamoDb_Error.res +75 -0
- package/src/errors/DynamoDb_Error.res.mjs +86 -0
- package/src/errors/Kinesis_Error.res +36 -0
- package/src/errors/Kinesis_Error.res.mjs +38 -0
- package/src/errors/SNS_Error.res +34 -0
- package/src/errors/SNS_Error.res.mjs +38 -0
- package/src/errors/SQS_Error.res +40 -0
- package/src/errors/SQS_Error.res.mjs +41 -0
- package/src/plugin/cloner/ClonerRunner.res +1 -0
- package/src/plugin/cloner/ClonerRunner.res.mjs +9 -0
- package/src/plugin/cloner/ClonerRunner_Fargate.res +362 -0
- package/src/plugin/cloner/ClonerRunner_Fargate.res.mjs +246 -0
- package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res +42 -0
- package/src/plugin/cloner/ClonerRunner_Fargate_Runtime.res.mjs +45 -0
- package/src/plugin/heartbeat/HeartbeatRunner.res +1 -0
- package/src/plugin/heartbeat/HeartbeatRunner.res.mjs +9 -0
- package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +96 -0
- package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res.mjs +69 -0
- package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res +115 -0
- package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res.mjs +88 -0
- package/src/plugin/runtime/PluginRuntimeOperations.res +5 -0
- package/src/plugin/runtime/PluginRuntimeOperations.res.mjs +14 -0
- package/src/plugin/runtime/PluginRuntime_Builder.res +769 -0
- package/src/plugin/runtime/PluginRuntime_Builder.res.mjs +464 -0
- package/src/plugin/runtime/Util_PluginMessage_Runtime.res +13 -0
- package/src/plugin/runtime/Util_PluginMessage_Runtime.res.mjs +19 -0
- package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res +28 -0
- package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res.mjs +67 -0
- package/src/plugin/stack/Plugin_Stack.res +439 -0
- package/src/plugin/stack/Plugin_Stack.res.mjs +263 -0
- package/src/util/Util.res +29 -0
- package/src/util/Util.res.mjs +93 -0
- package/src/util/Util_AppSync.res +36 -0
- package/src/util/Util_AppSync.res.mjs +35 -0
- package/src/util/Util_AppSync_Caller.res +213 -0
- package/src/util/Util_AppSync_Caller.res.mjs +170 -0
- package/src/util/Util_Bundle.res +255 -0
- package/src/util/Util_Bundle.res.mjs +179 -0
- package/src/util/Util_Cloudwatch.res +14 -0
- package/src/util/Util_Cloudwatch.res.mjs +19 -0
- package/src/util/Util_CognitoGroupUser.res +39 -0
- package/src/util/Util_CognitoGroupUser.res.mjs +32 -0
- package/src/util/Util_CognitoGroupUser_Runtime.res +65 -0
- package/src/util/Util_CognitoGroupUser_Runtime.res.mjs +50 -0
- package/src/util/Util_Cognito_Runtime.res +52 -0
- package/src/util/Util_Cognito_Runtime.res.mjs +35 -0
- package/src/util/Util_DeadLetterQueue.res +154 -0
- package/src/util/Util_DeadLetterQueue.res.mjs +158 -0
- package/src/util/Util_DynamoDb.res +210 -0
- package/src/util/Util_DynamoDb.res.mjs +218 -0
- package/src/util/Util_DynamoDbStream.res +138 -0
- package/src/util/Util_DynamoDbStream.res.mjs +134 -0
- package/src/util/Util_DynamoDbStream_Runtime.res +94 -0
- package/src/util/Util_DynamoDbStream_Runtime.res.mjs +131 -0
- package/src/util/Util_DynamoDb_Runtime.res +216 -0
- package/src/util/Util_DynamoDb_Runtime.res.mjs +257 -0
- package/src/util/Util_DynamoDb_TableManager.res +23 -0
- package/src/util/Util_DynamoDb_TableManager.res.mjs +35 -0
- package/src/util/Util_DynamoDb_TableManager.resi +3 -0
- package/src/util/Util_Env.res +5 -0
- package/src/util/Util_Env.res.mjs +2 -0
- package/src/util/Util_EventSourceMapping.res +49 -0
- package/src/util/Util_EventSourceMapping.res.mjs +32 -0
- package/src/util/Util_HostUiDomain.res +28 -0
- package/src/util/Util_HostUiDomain.res.mjs +26 -0
- package/src/util/Util_IAM_Role.res +14 -0
- package/src/util/Util_IAM_Role.res.mjs +28 -0
- package/src/util/Util_Kinesis_Runtime.res +20 -0
- package/src/util/Util_Kinesis_Runtime.res.mjs +24 -0
- package/src/util/Util_Lambda.res +39 -0
- package/src/util/Util_Lambda.res.mjs +45 -0
- package/src/util/Util_LocalConfig.res +119 -0
- package/src/util/Util_LocalConfig.res.mjs +112 -0
- package/src/util/Util_ResourceNaming.res +15 -0
- package/src/util/Util_ResourceNaming.res.mjs +26 -0
- package/src/util/Util_S3.res +17 -0
- package/src/util/Util_S3.res.mjs +30 -0
- package/src/util/Util_S3_Runtime.res +11 -0
- package/src/util/Util_S3_Runtime.res.mjs +15 -0
- package/src/util/Util_SNS.res +33 -0
- package/src/util/Util_SNS.res.mjs +50 -0
- package/src/util/Util_SNS_FIFO.res +21 -0
- package/src/util/Util_SNS_FIFO.res.mjs +27 -0
- package/src/util/Util_SNS_Runtime.res +33 -0
- package/src/util/Util_SNS_Runtime.res.mjs +27 -0
- package/src/util/Util_SQS.res +70 -0
- package/src/util/Util_SQS.res.mjs +83 -0
- package/src/util/Util_SQS_FIFO.res +16 -0
- package/src/util/Util_SQS_FIFO.res.mjs +28 -0
- package/src/util/Util_SQS_Runtime.res +169 -0
- package/src/util/Util_SQS_Runtime.res.mjs +150 -0
- package/src/util/Util_SesPolicy_Runtime.res +54 -0
- package/src/util/Util_SesPolicy_Runtime.res.mjs +55 -0
- package/src/util/Util_StaticBundle.res +124 -0
- package/src/util/Util_StaticBundle.res.mjs +132 -0
- package/src/util/Util_Vpc.res +22 -0
- package/src/util/Util_Vpc.res.mjs +27 -0
- package/tests/AppSync_AdapterTest.res +396 -0
- package/tests/AppSync_AdapterTest.res.mjs +326 -0
- package/tests/AppSync_Resolver_RetryingTest.res +59 -0
- package/tests/AppSync_Resolver_RetryingTest.res.mjs +66 -0
- package/tests/Auth_CognitoTest.res +203 -0
- package/tests/Auth_CognitoTest.res.mjs +248 -0
- package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res +602 -0
- package/tests/DcbEventLogStorage_DynamoDb_RuntimeTest.res.mjs +742 -0
- package/tests/EventLogStorage_DynamoDb_RuntimeTest.res +57 -0
- package/tests/EventLogStorage_DynamoDb_RuntimeTest.res.mjs +68 -0
- package/tests/MCP_LambdaTest.res +101 -0
- package/tests/MCP_LambdaTest.res.mjs +56 -0
- package/tests/Util_HostUiDomainTest.res +90 -0
- package/tests/Util_HostUiDomainTest.res.mjs +50 -0
- package/tests/Util_SQS_RuntimeTest.res +46 -0
- package/tests/Util_SQS_RuntimeTest.res.mjs +45 -0
- package/tests/Util_StaticBundleTest.res +136 -0
- package/tests/Util_StaticBundleTest.res.mjs +149 -0
- package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res +101 -0
- package/tests/integration/DcbCommandTopicEntryPoint_IntegrationTest.res.mjs +91 -0
- package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res +315 -0
- package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.res.mjs +435 -0
- package/tests/integration/DcbIntegrationHarness.res +102 -0
- package/tests/integration/DcbIntegrationHarness.res.mjs +163 -0
- package/tests/integration/EpTestSlice.res +28 -0
- package/tests/integration/EpTestSlice.res.mjs +43 -0
- package/tests/integration/EpTestSliceBehavior.res +18 -0
- package/tests/integration/EpTestSliceBehavior.res.mjs +35 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
|
|
4
|
+
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
5
|
+
import * as HashNode from "@smithy/hash-node";
|
|
6
|
+
import * as SignatureV4 from "@smithy/signature-v4";
|
|
7
|
+
import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
|
|
8
|
+
import * as CredentialProviderNode from "@aws-sdk/credential-provider-node";
|
|
9
|
+
|
|
10
|
+
let log = Logger$ReventlessCore.fromEnv();
|
|
11
|
+
|
|
12
|
+
let sha256 = HashNode.Hash.bind(null, "sha256");
|
|
13
|
+
|
|
14
|
+
function graphqlEnum(name) {
|
|
15
|
+
return Object.fromEntries([[
|
|
16
|
+
"__enum",
|
|
17
|
+
name
|
|
18
|
+
]]);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function jsonToLiteral(value) {
|
|
22
|
+
if (value === null) {
|
|
23
|
+
return "null";
|
|
24
|
+
}
|
|
25
|
+
if (Array.isArray(value)) {
|
|
26
|
+
return `[` + value.map(jsonToLiteral).join(", ") + `]`;
|
|
27
|
+
}
|
|
28
|
+
switch (typeof value) {
|
|
29
|
+
case "boolean" :
|
|
30
|
+
if (value) {
|
|
31
|
+
return "true";
|
|
32
|
+
} else {
|
|
33
|
+
return "false";
|
|
34
|
+
}
|
|
35
|
+
case "string" :
|
|
36
|
+
let escaped = value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
|
|
37
|
+
return `"` + escaped + `"`;
|
|
38
|
+
case "number" :
|
|
39
|
+
return value.toString();
|
|
40
|
+
case "object" :
|
|
41
|
+
let match = value["__enum"];
|
|
42
|
+
if (typeof match === "string") {
|
|
43
|
+
return match;
|
|
44
|
+
}
|
|
45
|
+
let pairs = Object.entries(value).map(param => param[0] + `: ` + jsonToLiteral(param[1]));
|
|
46
|
+
return `{` + pairs.join(", ") + `}`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function buildQuery(mutation, variablesDict) {
|
|
51
|
+
let args = Object.entries(variablesDict).map(param => param[0] + `: ` + jsonToLiteral(param[1])).join(", ");
|
|
52
|
+
return `mutation { ` + mutation + `(` + args + `) }`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function sendQuery(endpoint, region, queryString) {
|
|
56
|
+
let url = new URL(endpoint);
|
|
57
|
+
let hostname = url.hostname;
|
|
58
|
+
let path = url.pathname;
|
|
59
|
+
let body = JSON.stringify(Object.fromEntries([[
|
|
60
|
+
"query",
|
|
61
|
+
queryString
|
|
62
|
+
]]));
|
|
63
|
+
let credProvider = CredentialProviderNode.defaultProvider();
|
|
64
|
+
let signer = new SignatureV4.SignatureV4({
|
|
65
|
+
service: "appsync",
|
|
66
|
+
region: region,
|
|
67
|
+
credentials: credProvider,
|
|
68
|
+
sha256: sha256
|
|
69
|
+
});
|
|
70
|
+
let headers = Object.fromEntries([
|
|
71
|
+
[
|
|
72
|
+
"content-type",
|
|
73
|
+
"application/json"
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"host",
|
|
77
|
+
hostname
|
|
78
|
+
]
|
|
79
|
+
]);
|
|
80
|
+
let request = {
|
|
81
|
+
method: "POST",
|
|
82
|
+
hostname: hostname,
|
|
83
|
+
path: path,
|
|
84
|
+
headers: headers,
|
|
85
|
+
body: body
|
|
86
|
+
};
|
|
87
|
+
let signed = await signer.sign(request);
|
|
88
|
+
let response = await fetch(endpoint, {
|
|
89
|
+
method: "POST",
|
|
90
|
+
headers: signed.headers,
|
|
91
|
+
body: signed.body
|
|
92
|
+
});
|
|
93
|
+
let json = await response.json();
|
|
94
|
+
let d = Stdlib_JSON.Decode.object(json);
|
|
95
|
+
if (d === undefined) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
let errors = d["errors"];
|
|
99
|
+
if (errors !== undefined) {
|
|
100
|
+
log.error("Util_AppSync_Caller", errors, "query errors");
|
|
101
|
+
return;
|
|
102
|
+
} else {
|
|
103
|
+
return d["data"];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async function sendMutation(endpoint, region, mutation, variables) {
|
|
108
|
+
let url = new URL(endpoint);
|
|
109
|
+
let hostname = url.hostname;
|
|
110
|
+
let path = url.pathname;
|
|
111
|
+
let str = JSON.stringify(variables);
|
|
112
|
+
let variablesDict;
|
|
113
|
+
if (str !== undefined) {
|
|
114
|
+
let d = JSON.parse(str);
|
|
115
|
+
variablesDict = typeof d === "object" && d !== null && !Array.isArray(d) ? d : ({});
|
|
116
|
+
} else {
|
|
117
|
+
variablesDict = {};
|
|
118
|
+
}
|
|
119
|
+
let query = buildQuery(mutation, variablesDict);
|
|
120
|
+
let body = JSON.stringify(Object.fromEntries([[
|
|
121
|
+
"query",
|
|
122
|
+
query
|
|
123
|
+
]]));
|
|
124
|
+
let credProvider = CredentialProviderNode.defaultProvider();
|
|
125
|
+
let signer = new SignatureV4.SignatureV4({
|
|
126
|
+
service: "appsync",
|
|
127
|
+
region: region,
|
|
128
|
+
credentials: credProvider,
|
|
129
|
+
sha256: sha256
|
|
130
|
+
});
|
|
131
|
+
let headers = Object.fromEntries([
|
|
132
|
+
[
|
|
133
|
+
"content-type",
|
|
134
|
+
"application/json"
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
"host",
|
|
138
|
+
hostname
|
|
139
|
+
]
|
|
140
|
+
]);
|
|
141
|
+
let request = {
|
|
142
|
+
method: "POST",
|
|
143
|
+
hostname: hostname,
|
|
144
|
+
path: path,
|
|
145
|
+
headers: headers,
|
|
146
|
+
body: body
|
|
147
|
+
};
|
|
148
|
+
let signed = await signer.sign(request);
|
|
149
|
+
let response = await fetch(endpoint, {
|
|
150
|
+
method: "POST",
|
|
151
|
+
headers: signed.headers,
|
|
152
|
+
body: signed.body
|
|
153
|
+
});
|
|
154
|
+
let json = await response.json();
|
|
155
|
+
let errors = Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(json), d => d["errors"]);
|
|
156
|
+
if (errors !== undefined) {
|
|
157
|
+
return log.error("Util_AppSync_Caller", errors, mutation + ` errors`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export {
|
|
162
|
+
log,
|
|
163
|
+
sha256,
|
|
164
|
+
graphqlEnum,
|
|
165
|
+
jsonToLiteral,
|
|
166
|
+
buildQuery,
|
|
167
|
+
sendQuery,
|
|
168
|
+
sendMutation,
|
|
169
|
+
}
|
|
170
|
+
/* log Not a pure module */
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// Node.js path bindings
|
|
2
|
+
@module("path") external dirname: string => string = "dirname"
|
|
3
|
+
@module("path") external join2: (string, string) => string = "join"
|
|
4
|
+
@module("path") external relative: (string, string) => string = "relative"
|
|
5
|
+
|
|
6
|
+
// Node.js fs bindings
|
|
7
|
+
@module("fs") external existsSync: string => bool = "existsSync"
|
|
8
|
+
@module("fs") external readFileSync: (string, string) => string = "readFileSync"
|
|
9
|
+
type dirent
|
|
10
|
+
@module("fs") external readdirSync: (string, {"withFileTypes": bool}) => array<dirent> = "readdirSync"
|
|
11
|
+
@send external isDirectory: dirent => bool = "isDirectory"
|
|
12
|
+
@get external direntName: dirent => string = "name"
|
|
13
|
+
|
|
14
|
+
// Node.js crypto bindings
|
|
15
|
+
type hashObj
|
|
16
|
+
@module("crypto") external createHash: string => hashObj = "createHash"
|
|
17
|
+
@send external update: (hashObj, string) => hashObj = "update"
|
|
18
|
+
@send external digest: (hashObj, string) => string = "digest"
|
|
19
|
+
|
|
20
|
+
// URL global
|
|
21
|
+
type urlObj
|
|
22
|
+
@new external newURL: string => urlObj = "URL"
|
|
23
|
+
@get external pathname: urlObj => string = "pathname"
|
|
24
|
+
|
|
25
|
+
// module.createRequire
|
|
26
|
+
type requireFn
|
|
27
|
+
@module("module") external createRequire: string => requireFn = "createRequire"
|
|
28
|
+
@send external requireResolve: (requireFn, string) => string = "resolve"
|
|
29
|
+
|
|
30
|
+
// process.cwd
|
|
31
|
+
@val @scope("process") external cwd: unit => string = "cwd"
|
|
32
|
+
|
|
33
|
+
// Module-level state: cache populated by getModuleSpecifier
|
|
34
|
+
let packageRootCache: dict<string> = Dict.make()
|
|
35
|
+
let localRequire: requireFn = createRequire(%raw("import.meta.url"))
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Convert an import.meta.url file URL to an npm module specifier.
|
|
39
|
+
* Walks up from the file to find the nearest package.json, reads the package name,
|
|
40
|
+
* and constructs the npm specifier from packageName + relative path.
|
|
41
|
+
*/
|
|
42
|
+
let getModuleSpecifier = (importMetaUrl: string): string => {
|
|
43
|
+
if !(importMetaUrl->String.startsWith("file://")) {
|
|
44
|
+
importMetaUrl
|
|
45
|
+
} else {
|
|
46
|
+
let filePath = newURL(importMetaUrl)->pathname
|
|
47
|
+
let dirRef = ref(dirname(filePath))
|
|
48
|
+
let resultRef: ref<option<string>> = ref(None)
|
|
49
|
+
while dirRef.contents != "/" && resultRef.contents->Option.isNone {
|
|
50
|
+
let dir = dirRef.contents
|
|
51
|
+
let pkgPath = join2(dir, "package.json")
|
|
52
|
+
if existsSync(pkgPath) {
|
|
53
|
+
let pkgText = readFileSync(pkgPath, "utf-8")
|
|
54
|
+
switch pkgText->JSON.parseOrThrow->JSON.Decode.object {
|
|
55
|
+
| Some(obj) =>
|
|
56
|
+
switch obj->Dict.get("name")->Option.flatMap(JSON.Decode.string) {
|
|
57
|
+
| Some(pkgName) =>
|
|
58
|
+
packageRootCache->Dict.set(pkgName, dir)
|
|
59
|
+
let relPath = relative(dir, filePath)
|
|
60
|
+
resultRef := Some(pkgName ++ "/" ++ relPath)
|
|
61
|
+
| None => dirRef := dirname(dir)
|
|
62
|
+
}
|
|
63
|
+
| None => dirRef := dirname(dir)
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
dirRef := dirname(dir)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
switch resultRef.contents {
|
|
70
|
+
| Some(specifier) => specifier
|
|
71
|
+
| None => JsError.throwWithMessage(`No package.json found for ${filePath}`)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Extract the npm package name from a module specifier.
|
|
78
|
+
* Handles scoped packages (@scope/pkg/path) and unscoped (pkg/path).
|
|
79
|
+
*/
|
|
80
|
+
let extractPackageName = (specifier: string): string => {
|
|
81
|
+
let parts = specifier->String.split("/")
|
|
82
|
+
if specifier->String.startsWith("@") {
|
|
83
|
+
parts->Array.getUnsafe(0) ++ "/" ++ parts->Array.getUnsafe(1)
|
|
84
|
+
} else {
|
|
85
|
+
parts->Array.getUnsafe(0)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Resolve the root directory of an npm package.
|
|
91
|
+
* Fast path: populated by getModuleSpecifier when it walks the package tree.
|
|
92
|
+
*/
|
|
93
|
+
let resolvePackageRoot = (packageName: string): string => {
|
|
94
|
+
switch packageRootCache->Dict.get(packageName) {
|
|
95
|
+
| Some(cachedRoot) => cachedRoot
|
|
96
|
+
| None =>
|
|
97
|
+
try {
|
|
98
|
+
let pkgJsonPath = localRequire->requireResolve(packageName ++ "/package.json")
|
|
99
|
+
dirname(pkgJsonPath)
|
|
100
|
+
} catch {
|
|
101
|
+
| _ =>
|
|
102
|
+
let cwdRequire = createRequire(cwd() ++ "/index.js")
|
|
103
|
+
let pkgJsonPath = cwdRequire->requireResolve(packageName ++ "/package.json")
|
|
104
|
+
dirname(pkgJsonPath)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Compute a SHA256 hash of a string, returned as base64.
|
|
111
|
+
*/
|
|
112
|
+
let hashString = (str: string): string =>
|
|
113
|
+
createHash("sha256")->update(str)->digest("base64")
|
|
114
|
+
|
|
115
|
+
let isSkippedDir = (n: string) =>
|
|
116
|
+
n == "node_modules" ||
|
|
117
|
+
n == "lib" ||
|
|
118
|
+
n == "cjs" ||
|
|
119
|
+
n == "dts" ||
|
|
120
|
+
n == "tests" ||
|
|
121
|
+
n == "test" ||
|
|
122
|
+
n == "__mocks__" ||
|
|
123
|
+
n == "__tests__" ||
|
|
124
|
+
n == ".git" ||
|
|
125
|
+
n == "coverage"
|
|
126
|
+
|
|
127
|
+
// Reads file as a string for content hashing; Buffer would be slightly more
|
|
128
|
+
// efficient but utf-8 keeps the hash stable across platforms and matches what
|
|
129
|
+
// Lambda will execute.
|
|
130
|
+
@module("fs") external readFileAsString: (string, string) => string = "readFileSync"
|
|
131
|
+
|
|
132
|
+
let rec walkDir = (
|
|
133
|
+
~dir: string,
|
|
134
|
+
~prefix: string,
|
|
135
|
+
~assets: dict<Pulumi.Archive.assetOrArchive>,
|
|
136
|
+
~paths: array<(string, string)>,
|
|
137
|
+
) => {
|
|
138
|
+
let entries = readdirSync(dir, {"withFileTypes": true})
|
|
139
|
+
entries->Array.forEach(entry => {
|
|
140
|
+
let entryName = entry->direntName
|
|
141
|
+
if entry->isDirectory {
|
|
142
|
+
if !isSkippedDir(entryName) {
|
|
143
|
+
let newPrefix = prefix == "" ? entryName : prefix ++ "/" ++ entryName
|
|
144
|
+
walkDir(~dir=join2(dir, entryName), ~prefix=newPrefix, ~assets, ~paths)
|
|
145
|
+
}
|
|
146
|
+
} else if entryName == "package.json" || entryName->String.endsWith(".mjs") || entryName->String.endsWith(".js") {
|
|
147
|
+
let relPath = prefix == "" ? entryName : prefix ++ "/" ++ entryName
|
|
148
|
+
let absPath = join2(dir, entryName)
|
|
149
|
+
assets->Dict.set(
|
|
150
|
+
relPath,
|
|
151
|
+
Pulumi.Asset.fileAsset(absPath)->Pulumi.Archive.assetToAssetOrArchive,
|
|
152
|
+
)
|
|
153
|
+
paths->Array.push((relPath, absPath))
|
|
154
|
+
}
|
|
155
|
+
})
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Create a filtered AssetArchive from a package directory.
|
|
160
|
+
* Only includes *.mjs and package.json; excludes node_modules/, lib/, tests/, etc.
|
|
161
|
+
* Returns both the archive and a content hash covering every bundled file so
|
|
162
|
+
* callers can produce a sourceCodeHash that changes when any source changes.
|
|
163
|
+
*/
|
|
164
|
+
let createFilteredPackageArchive = (packageRoot: string): (Pulumi.Archive.t, string) => {
|
|
165
|
+
let assets: dict<Pulumi.Archive.assetOrArchive> = Dict.make()
|
|
166
|
+
let paths: array<(string, string)> = []
|
|
167
|
+
walkDir(~dir=packageRoot, ~prefix="", ~assets, ~paths)
|
|
168
|
+
// Sort so the hash is stable across filesystem traversal order.
|
|
169
|
+
paths->Array.sort(((a, _), (b, _)) => String.compare(a, b))
|
|
170
|
+
let combined =
|
|
171
|
+
paths
|
|
172
|
+
->Array.map(((relPath, absPath)) => `${relPath}:${readFileAsString(absPath, "utf-8")}`)
|
|
173
|
+
->Array.join("\n---\n")
|
|
174
|
+
(Pulumi.Archive.assetArchive(assets), hashString(combined))
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
type codeArchive = {
|
|
178
|
+
code: Pulumi.Archive.t,
|
|
179
|
+
sourceCodeHash: string,
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Build a Lambda code AssetArchive with a static re-export entry point and optional user packages.
|
|
184
|
+
* Centralises the archive-building pattern used by every runtime builder.
|
|
185
|
+
*
|
|
186
|
+
* When @reventlessdev/reventless-aws is bundled, effect is automatically co-bundled.
|
|
187
|
+
* The entry points in reventless-aws import effect statically, and ESM resolution
|
|
188
|
+
* walks up from /var/task/node_modules/reventless-aws/... — it never reaches the
|
|
189
|
+
* Lambda layer at /opt/nodejs/node_modules. Bundling effect alongside ensures it
|
|
190
|
+
* is found at /var/task/node_modules/effect.
|
|
191
|
+
*/
|
|
192
|
+
let buildCodeArchive = (
|
|
193
|
+
~entryPointModule: string,
|
|
194
|
+
~packageDirs: dict<string>,
|
|
195
|
+
// Extra string-typed assets to drop at the root of the asset zip. Keys are
|
|
196
|
+
// filenames (e.g. "pluginDefinition.json"); values are the file contents.
|
|
197
|
+
// The Lambda runtime extracts the zip to /var/task, so entry-point code can
|
|
198
|
+
// read each file via `readFileSync("/var/task/<filename>", "utf-8")` or
|
|
199
|
+
// (preferred) `readFileSync(new URL("./<filename>", import.meta.url))`.
|
|
200
|
+
// Used to ship payloads that would otherwise blow the 5120-byte
|
|
201
|
+
// UpdateFunctionConfiguration limit when packed into HANDLER_CONFIG.
|
|
202
|
+
~extraStringAssets: dict<string>=Dict.make(),
|
|
203
|
+
): codeArchive => {
|
|
204
|
+
let reExportCode = `export { handler } from "${entryPointModule}";`
|
|
205
|
+
let archiveContents: dict<Pulumi.Archive.assetOrArchive> = Dict.make()
|
|
206
|
+
archiveContents->Dict.set(
|
|
207
|
+
"index.mjs",
|
|
208
|
+
Pulumi.Asset.stringAsset(reExportCode)->Pulumi.Archive.assetToAssetOrArchive,
|
|
209
|
+
)
|
|
210
|
+
extraStringAssets->Dict.forEachWithKey((content, fileName) => {
|
|
211
|
+
archiveContents->Dict.set(
|
|
212
|
+
fileName,
|
|
213
|
+
Pulumi.Asset.stringAsset(content)->Pulumi.Archive.assetToAssetOrArchive,
|
|
214
|
+
)
|
|
215
|
+
})
|
|
216
|
+
// Co-bundle effect whenever reventless-aws is bundled (see comment above).
|
|
217
|
+
let allPackageDirs =
|
|
218
|
+
if packageDirs->Dict.has("@reventlessdev/reventless-aws") &&
|
|
219
|
+
!(packageDirs->Dict.has("effect")) {
|
|
220
|
+
let dirs = packageDirs->Dict.copy
|
|
221
|
+
dirs->Dict.set("effect", resolvePackageRoot("effect"))
|
|
222
|
+
dirs
|
|
223
|
+
} else {
|
|
224
|
+
packageDirs
|
|
225
|
+
}
|
|
226
|
+
let packageContentHashes: ref<array<string>> = ref([])
|
|
227
|
+
allPackageDirs->Dict.forEachWithKey((pkgRoot, pkgName) => {
|
|
228
|
+
let (archive, contentHash) = createFilteredPackageArchive(pkgRoot)
|
|
229
|
+
archiveContents->Dict.set(
|
|
230
|
+
`node_modules/${pkgName}`,
|
|
231
|
+
archive->Pulumi.Archive.archiveToAssetOrArchive,
|
|
232
|
+
)
|
|
233
|
+
packageContentHashes.contents->Array.push(`${pkgName}:${contentHash}`)
|
|
234
|
+
})
|
|
235
|
+
// Extra-asset content participates in the source hash so a change to
|
|
236
|
+
// pluginDefinition.json triggers a Lambda code update.
|
|
237
|
+
let extraHashEntries: array<string> = []
|
|
238
|
+
let extraKeys = extraStringAssets->Dict.keysToArray
|
|
239
|
+
extraKeys->Array.sort(String.compare)
|
|
240
|
+
extraKeys->Array.forEach(k => {
|
|
241
|
+
let v = extraStringAssets->Dict.get(k)->Option.getOr("")
|
|
242
|
+
extraHashEntries->Array.push(`${k}:${v}`)
|
|
243
|
+
})
|
|
244
|
+
let code = Pulumi.Archive.assetArchive(archiveContents)
|
|
245
|
+
packageContentHashes.contents->Array.sort(String.compare)
|
|
246
|
+
let sourceCodeHash =
|
|
247
|
+
hashString(
|
|
248
|
+
reExportCode ++
|
|
249
|
+
"\n---\n" ++
|
|
250
|
+
packageContentHashes.contents->Array.join(",") ++
|
|
251
|
+
"\n---\n" ++
|
|
252
|
+
extraHashEntries->Array.join("\n"),
|
|
253
|
+
)
|
|
254
|
+
{code, sourceCodeHash}
|
|
255
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Fs from "fs";
|
|
4
|
+
import * as Path from "path";
|
|
5
|
+
import * as Crypto from "crypto";
|
|
6
|
+
import * as Module from "module";
|
|
7
|
+
import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
|
|
8
|
+
import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
|
|
9
|
+
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
10
|
+
import * as Pulumi from "@pulumi/pulumi";
|
|
11
|
+
import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
|
|
12
|
+
import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
|
|
13
|
+
|
|
14
|
+
let packageRootCache = {};
|
|
15
|
+
|
|
16
|
+
let localRequire = Module.createRequire(import.meta.url);
|
|
17
|
+
|
|
18
|
+
function getModuleSpecifier(importMetaUrl) {
|
|
19
|
+
if (!importMetaUrl.startsWith("file://")) {
|
|
20
|
+
return importMetaUrl;
|
|
21
|
+
}
|
|
22
|
+
let filePath = new URL(importMetaUrl).pathname;
|
|
23
|
+
let dirRef = Path.dirname(filePath);
|
|
24
|
+
let resultRef;
|
|
25
|
+
while (dirRef !== "/" && Stdlib_Option.isNone(resultRef)) {
|
|
26
|
+
let dir = dirRef;
|
|
27
|
+
let pkgPath = Path.join(dir, "package.json");
|
|
28
|
+
if (Fs.existsSync(pkgPath)) {
|
|
29
|
+
let pkgText = Fs.readFileSync(pkgPath, "utf-8");
|
|
30
|
+
let obj = Stdlib_JSON.Decode.object(JSON.parse(pkgText));
|
|
31
|
+
if (obj !== undefined) {
|
|
32
|
+
let pkgName = Stdlib_Option.flatMap(obj["name"], Stdlib_JSON.Decode.string);
|
|
33
|
+
if (pkgName !== undefined) {
|
|
34
|
+
packageRootCache[pkgName] = dir;
|
|
35
|
+
let relPath = Path.relative(dir, filePath);
|
|
36
|
+
resultRef = pkgName + "/" + relPath;
|
|
37
|
+
} else {
|
|
38
|
+
dirRef = Path.dirname(dir);
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
dirRef = Path.dirname(dir);
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
dirRef = Path.dirname(dir);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
let specifier = resultRef;
|
|
48
|
+
if (specifier !== undefined) {
|
|
49
|
+
return specifier;
|
|
50
|
+
} else {
|
|
51
|
+
return Stdlib_JsError.throwWithMessage(`No package.json found for ` + filePath);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function extractPackageName(specifier) {
|
|
56
|
+
let parts = specifier.split("/");
|
|
57
|
+
if (specifier.startsWith("@")) {
|
|
58
|
+
return parts[0] + "/" + parts[1];
|
|
59
|
+
} else {
|
|
60
|
+
return parts[0];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function resolvePackageRoot(packageName) {
|
|
65
|
+
let cachedRoot = packageRootCache[packageName];
|
|
66
|
+
if (cachedRoot !== undefined) {
|
|
67
|
+
return cachedRoot;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
return Path.dirname(localRequire.resolve(packageName + "/package.json"));
|
|
71
|
+
} catch (exn) {
|
|
72
|
+
let cwdRequire = Module.createRequire(process.cwd() + "/index.js");
|
|
73
|
+
return Path.dirname(cwdRequire.resolve(packageName + "/package.json"));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function hashString(str) {
|
|
78
|
+
return Crypto.createHash("sha256").update(str).digest("base64");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function isSkippedDir(n) {
|
|
82
|
+
if (n === "node_modules" || n === "lib" || n === "cjs" || n === "dts" || n === "tests" || n === "test" || n === "__mocks__" || n === "__tests__" || n === ".git") {
|
|
83
|
+
return true;
|
|
84
|
+
} else {
|
|
85
|
+
return n === "coverage";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function walkDir(dir, prefix, assets, paths) {
|
|
90
|
+
let entries = Fs.readdirSync(dir, {
|
|
91
|
+
withFileTypes: true
|
|
92
|
+
});
|
|
93
|
+
entries.forEach(entry => {
|
|
94
|
+
let entryName = entry.name;
|
|
95
|
+
if (entry.isDirectory()) {
|
|
96
|
+
if (isSkippedDir(entryName)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
let newPrefix = prefix === "" ? entryName : prefix + "/" + entryName;
|
|
100
|
+
return walkDir(Path.join(dir, entryName), newPrefix, assets, paths);
|
|
101
|
+
}
|
|
102
|
+
if (!(entryName === "package.json" || entryName.endsWith(".mjs") || entryName.endsWith(".js"))) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
let relPath = prefix === "" ? entryName : prefix + "/" + entryName;
|
|
106
|
+
let absPath = Path.join(dir, entryName);
|
|
107
|
+
assets[relPath] = new (Pulumi.asset.FileAsset)(absPath);
|
|
108
|
+
paths.push([
|
|
109
|
+
relPath,
|
|
110
|
+
absPath
|
|
111
|
+
]);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function createFilteredPackageArchive(packageRoot) {
|
|
116
|
+
let assets = {};
|
|
117
|
+
let paths = [];
|
|
118
|
+
walkDir(packageRoot, "", assets, paths);
|
|
119
|
+
paths.sort((param, param$1) => Primitive_string.compare(param[0], param$1[0]));
|
|
120
|
+
let combined = paths.map(param => param[0] + `:` + Fs.readFileSync(param[1], "utf-8")).join("\n---\n");
|
|
121
|
+
return [
|
|
122
|
+
new (Pulumi.asset.AssetArchive)(assets),
|
|
123
|
+
hashString(combined)
|
|
124
|
+
];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function buildCodeArchive(entryPointModule, packageDirs, extraStringAssetsOpt) {
|
|
128
|
+
let extraStringAssets = extraStringAssetsOpt !== undefined ? extraStringAssetsOpt : ({});
|
|
129
|
+
let reExportCode = `export { handler } from "` + entryPointModule + `";`;
|
|
130
|
+
let archiveContents = {};
|
|
131
|
+
archiveContents["index.mjs"] = new (Pulumi.asset.StringAsset)(reExportCode);
|
|
132
|
+
Stdlib_Dict.forEachWithKey(extraStringAssets, (content, fileName) => {
|
|
133
|
+
archiveContents[fileName] = new (Pulumi.asset.StringAsset)(content);
|
|
134
|
+
});
|
|
135
|
+
let allPackageDirs;
|
|
136
|
+
if ("@reventlessdev/reventless-aws" in packageDirs && !("effect" in packageDirs)) {
|
|
137
|
+
let dirs = Object.assign({}, packageDirs);
|
|
138
|
+
dirs["effect"] = resolvePackageRoot("effect");
|
|
139
|
+
allPackageDirs = dirs;
|
|
140
|
+
} else {
|
|
141
|
+
allPackageDirs = packageDirs;
|
|
142
|
+
}
|
|
143
|
+
let packageContentHashes = {
|
|
144
|
+
contents: []
|
|
145
|
+
};
|
|
146
|
+
Stdlib_Dict.forEachWithKey(allPackageDirs, (pkgRoot, pkgName) => {
|
|
147
|
+
let match = createFilteredPackageArchive(pkgRoot);
|
|
148
|
+
archiveContents[`node_modules/` + pkgName] = match[0];
|
|
149
|
+
packageContentHashes.contents.push(pkgName + `:` + match[1]);
|
|
150
|
+
});
|
|
151
|
+
let extraHashEntries = [];
|
|
152
|
+
let extraKeys = Object.keys(extraStringAssets);
|
|
153
|
+
extraKeys.sort(Primitive_string.compare);
|
|
154
|
+
extraKeys.forEach(k => {
|
|
155
|
+
let v = Stdlib_Option.getOr(extraStringAssets[k], "");
|
|
156
|
+
extraHashEntries.push(k + `:` + v);
|
|
157
|
+
});
|
|
158
|
+
let code = new (Pulumi.asset.AssetArchive)(archiveContents);
|
|
159
|
+
packageContentHashes.contents.sort(Primitive_string.compare);
|
|
160
|
+
let sourceCodeHash = hashString(reExportCode + "\n---\n" + packageContentHashes.contents.join(",") + "\n---\n" + extraHashEntries.join("\n"));
|
|
161
|
+
return {
|
|
162
|
+
code: code,
|
|
163
|
+
sourceCodeHash: sourceCodeHash
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export {
|
|
168
|
+
packageRootCache,
|
|
169
|
+
localRequire,
|
|
170
|
+
getModuleSpecifier,
|
|
171
|
+
extractPackageName,
|
|
172
|
+
resolvePackageRoot,
|
|
173
|
+
hashString,
|
|
174
|
+
isSkippedDir,
|
|
175
|
+
walkDir,
|
|
176
|
+
createFilteredPackageArchive,
|
|
177
|
+
buildCodeArchive,
|
|
178
|
+
}
|
|
179
|
+
/* localRequire Not a pure module */
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module EventRule = {
|
|
2
|
+
let toResource: PulumiAws.Cloudwatch.EventRule.t => ReventlessInfra.Adapter.resource = ({
|
|
3
|
+
id,
|
|
4
|
+
name,
|
|
5
|
+
arn,
|
|
6
|
+
}) =>
|
|
7
|
+
ReventlessInfra.Adapter.make(
|
|
8
|
+
~name,
|
|
9
|
+
~id,
|
|
10
|
+
~urn=arn,
|
|
11
|
+
~service=name->Pulumi.Output.apply(_ => AWS.CloudwatchEventRule.service),
|
|
12
|
+
~resourceType="aws:cloudwatch:EventRule"->Pulumi.Output.make,
|
|
13
|
+
)
|
|
14
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Pulumi from "@pulumi/pulumi";
|
|
4
|
+
import * as AWS$ReventlessAws from "../adapter/AWS.res.mjs";
|
|
5
|
+
import * as Adapter$ReventlessInfra from "@reventlessdev/reventless-infra/src/adapter/Adapter.res.mjs";
|
|
6
|
+
|
|
7
|
+
function toResource(param) {
|
|
8
|
+
let name = param.name;
|
|
9
|
+
return Adapter$ReventlessInfra.make(name, param.id, param.arn, name.apply(param => AWS$ReventlessAws.CloudwatchEventRule.service), undefined, undefined, undefined, Pulumi.output("aws:cloudwatch:EventRule"), undefined, undefined);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let EventRule = {
|
|
13
|
+
toResource: toResource
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
EventRule,
|
|
18
|
+
}
|
|
19
|
+
/* @pulumi/pulumi Not a pure module */
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
let addUserGroup = (~name: string, ~userPoolId: Pulumi.Output.t<string>) =>
|
|
2
|
+
PulumiAws.Cognito.UserGroup.make(
|
|
3
|
+
~name="UserGroup-" ++ name,
|
|
4
|
+
~args={
|
|
5
|
+
PulumiAws.Cognito.UserGroup.name: name->Pulumi.Input.make,
|
|
6
|
+
userPoolId: userPoolId->Pulumi.Output.asInput,
|
|
7
|
+
},
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
let makeAddRemoveUserToGroupPolicy = (
|
|
11
|
+
~name: string,
|
|
12
|
+
~userPoolArn: Pulumi.Output.t<string>,
|
|
13
|
+
~opts: option<Pulumi.CustomResourceOptions.t>=?,
|
|
14
|
+
) =>
|
|
15
|
+
userPoolArn->Pulumi.Output.apply(userPoolArn => {
|
|
16
|
+
open PulumiAws.PolicyDocument
|
|
17
|
+
PulumiAws.IAM.Policy.make(
|
|
18
|
+
~name=name ++ "AddRemoveUserToGroup",
|
|
19
|
+
~args={
|
|
20
|
+
PulumiAws.IAM.Policy.policy: PulumiAws.PolicyDocument.make(
|
|
21
|
+
~id=name ++ "UserPoolPolicy",
|
|
22
|
+
~statements=[
|
|
23
|
+
{
|
|
24
|
+
sid: "AllowAdminAddRemoveUserToGroup",
|
|
25
|
+
effect: Allow,
|
|
26
|
+
actions: Actions([
|
|
27
|
+
"cognito-idp:AdminAddUserToGroup",
|
|
28
|
+
"cognito-idp:AdminRemoveUserFromGroup",
|
|
29
|
+
]),
|
|
30
|
+
resources: Resource(`${userPoolArn}`),
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
)
|
|
34
|
+
->toJsonString
|
|
35
|
+
->Pulumi.Input.make,
|
|
36
|
+
},
|
|
37
|
+
~opts?,
|
|
38
|
+
)
|
|
39
|
+
})
|