@reventlessdev/reventless-core 3.0.0-alpha.134
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1355 -0
- package/LICENSE +202 -0
- package/README.md +173 -0
- package/__mocks__/emptyModule.js +2 -0
- package/jest.setup.cjs +5 -0
- package/package.json +73 -0
- package/rescript.json +41 -0
- package/scripts/deploy.sh +6 -0
- package/scripts/post-deploy.sh +5 -0
- package/scripts/pre-deploy.sh +18 -0
- package/scripts/pulumi-up.sh +30 -0
- package/src/Behavior.res +18 -0
- package/src/Behavior.res.mjs +2 -0
- package/src/ComponentType.res +125 -0
- package/src/ComponentType.res.mjs +199 -0
- package/src/Env.res +5 -0
- package/src/Env.res.mjs +2 -0
- package/src/Mapper.res +36 -0
- package/src/Mapper.res.mjs +18 -0
- package/src/Mapper1toN.res +107 -0
- package/src/Mapper1toN.res.mjs +2 -0
- package/src/MapperNto1.res +78 -0
- package/src/MapperNto1.res.mjs +35 -0
- package/src/Message.res +353 -0
- package/src/Message.res.mjs +418 -0
- package/src/PluginRuntimeOperations.res +15 -0
- package/src/PluginRuntimeOperations.res.mjs +2 -0
- package/src/Projection.res +447 -0
- package/src/Projection.res.mjs +712 -0
- package/src/ProjectionMapper.res +44 -0
- package/src/ProjectionMapper.res.mjs +51 -0
- package/src/RequestContext.res +42 -0
- package/src/RequestContext.res.mjs +39 -0
- package/src/adapter/Adapter.res +178 -0
- package/src/adapter/Adapter.res.mjs +201 -0
- package/src/adapter/AdapterDeploytime.res +56 -0
- package/src/adapter/AdapterDeploytime.res.mjs +42 -0
- package/src/adapter/Auth/Auth_Adapter.res +42 -0
- package/src/adapter/Auth/Auth_Adapter.res.mjs +2 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder.res +22 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder.res.mjs +2 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res +259 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Common.res.mjs +190 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +92 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +59 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +52 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +49 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +64 -0
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +59 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder.res +11 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder.res.mjs +2 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +46 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +40 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +204 -0
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +150 -0
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder.res +18 -0
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder.res.mjs +2 -0
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +36 -0
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +28 -0
- package/src/adapter/Runtime/PluginRuntime_Builder.res +23 -0
- package/src/adapter/Runtime/PluginRuntime_Builder.res.mjs +2 -0
- package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res +97 -0
- package/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs +62 -0
- package/src/adapter/Runtime/PluginRuntime_Builder_Single.res +89 -0
- package/src/adapter/Runtime/PluginRuntime_Builder_Single.res.mjs +62 -0
- package/src/adapter/Runtime/Runtime.res +106 -0
- package/src/adapter/Runtime/Runtime.res.mjs +22 -0
- package/src/adapter/Runtime/TaskRuntime_Builder.res +32 -0
- package/src/adapter/Runtime/TaskRuntime_Builder.res.mjs +2 -0
- package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +42 -0
- package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +29 -0
- package/src/admin/AdminApi.res +88 -0
- package/src/admin/AdminApi.res.mjs +89 -0
- package/src/admin/Admin_Callback.res +27 -0
- package/src/admin/Admin_Callback.res.mjs +20 -0
- package/src/admin/Platform_Admin.res +402 -0
- package/src/admin/Platform_Admin.res.mjs +250 -0
- package/src/admin/Platform_Admin_Structure.res +125 -0
- package/src/admin/Platform_Admin_Structure.res.mjs +182 -0
- package/src/admin/Platform_ComponentDefinitionsApi.res +160 -0
- package/src/admin/Platform_ComponentDefinitionsApi.res.mjs +299 -0
- package/src/admin/Platform_UIFragmentsApi.res +55 -0
- package/src/admin/Platform_UIFragmentsApi.res.mjs +124 -0
- package/src/admin/UIFragmentRegistryProjection.res +43 -0
- package/src/admin/UIFragmentRegistryProjection.res.mjs +81 -0
- package/src/admin/UIFragmentRegistryReadModelSpec.res +13 -0
- package/src/admin/UIFragmentRegistryReadModelSpec.res.mjs +40 -0
- package/src/components/Aggregate/Aggregate.res +96 -0
- package/src/components/Aggregate/Aggregate.res.mjs +82 -0
- package/src/components/Aggregate/Aggregate_Builder.res +175 -0
- package/src/components/Aggregate/Aggregate_Builder.res.mjs +119 -0
- package/src/components/Aggregate/Aggregate_Callback.res +273 -0
- package/src/components/Aggregate/Aggregate_Callback.res.mjs +208 -0
- package/src/components/Api/ApiAllowedStatesHelpers.res +19 -0
- package/src/components/Api/ApiAllowedStatesHelpers.res.mjs +16 -0
- package/src/components/Api/ApiNoApiHelpers.res +13 -0
- package/src/components/Api/ApiNoApiHelpers.res.mjs +29 -0
- package/src/components/Api/Api_Builder.res +40 -0
- package/src/components/Api/Api_Builder.res.mjs +33 -0
- package/src/components/Api/Api_Naming.res +92 -0
- package/src/components/Api/Api_Naming.res.mjs +103 -0
- package/src/components/Api/Api_Operations.res +13 -0
- package/src/components/Api/Api_Operations.res.mjs +12 -0
- package/src/components/Api/GraphQL_FragmentGenerator.res +612 -0
- package/src/components/Api/GraphQL_FragmentGenerator.res.mjs +503 -0
- package/src/components/Api/GraphQL_SchemaInspector.res +156 -0
- package/src/components/Api/GraphQL_SchemaInspector.res.mjs +123 -0
- package/src/components/Api/GraphQL_Stitcher.res +271 -0
- package/src/components/Api/GraphQL_Stitcher.res.mjs +229 -0
- package/src/components/Api/MCP_SchemaGenerator.res +185 -0
- package/src/components/Api/MCP_SchemaGenerator.res.mjs +146 -0
- package/src/components/Api/SchemaType.res +126 -0
- package/src/components/Api/SchemaType.res.mjs +143 -0
- package/src/components/Api/SuryToJsonSchema.res +142 -0
- package/src/components/Api/SuryToJsonSchema.res.mjs +210 -0
- package/src/components/AutomationSlice/AutomationSlice.res +39 -0
- package/src/components/AutomationSlice/AutomationSlice.res.mjs +24 -0
- package/src/components/AutomationSlice/AutomationSlice_Builder.res +207 -0
- package/src/components/AutomationSlice/AutomationSlice_Builder.res.mjs +123 -0
- package/src/components/AutomationSlice/AutomationSlice_Callback.res +212 -0
- package/src/components/AutomationSlice/AutomationSlice_Callback.res.mjs +189 -0
- package/src/components/Builder_Helpers.res +196 -0
- package/src/components/Builder_Helpers.res.mjs +142 -0
- package/src/components/Cloner.res +84 -0
- package/src/components/Cloner.res.mjs +88 -0
- package/src/components/CommandGenerator/CommandGenerator.res +54 -0
- package/src/components/CommandGenerator/CommandGenerator.res.mjs +15 -0
- package/src/components/CommandGenerator/CommandGenerator_Adapter.res +22 -0
- package/src/components/CommandGenerator/CommandGenerator_Adapter.res.mjs +2 -0
- package/src/components/CommandGenerator/CommandGenerator_Builder.res +70 -0
- package/src/components/CommandGenerator/CommandGenerator_Builder.res.mjs +68 -0
- package/src/components/CommandGenerator/CommandGenerator_Callback.res +191 -0
- package/src/components/CommandGenerator/CommandGenerator_Callback.res.mjs +161 -0
- package/src/components/CommandTopic/CommandTopic.res +79 -0
- package/src/components/CommandTopic/CommandTopic.res.mjs +68 -0
- package/src/components/CommandTopic/CommandTopic_Adapter.res +53 -0
- package/src/components/CommandTopic/CommandTopic_Adapter.res.mjs +2 -0
- package/src/components/CommandTopic/CommandTopic_Builder.res +146 -0
- package/src/components/CommandTopic/CommandTopic_Builder.res.mjs +127 -0
- package/src/components/CommandTopic/CommandTopic_Callback.res +38 -0
- package/src/components/CommandTopic/CommandTopic_Callback.res.mjs +49 -0
- package/src/components/CommandTopic/CommandTopic_Helpers.res +176 -0
- package/src/components/CommandTopic/CommandTopic_Helpers.res.mjs +195 -0
- package/src/components/CommandTopic/CommandTopic_Operations.res +40 -0
- package/src/components/CommandTopic/CommandTopic_Operations.res.mjs +49 -0
- package/src/components/Component.res +1 -0
- package/src/components/Component.res.mjs +34 -0
- package/src/components/Component.resi +1 -0
- package/src/components/Counter/Counter.res +47 -0
- package/src/components/Counter/Counter.res.mjs +55 -0
- package/src/components/Counter/Counter_Adapter.res +18 -0
- package/src/components/Counter/Counter_Adapter.res.mjs +2 -0
- package/src/components/Counter/Counter_Builder.res +142 -0
- package/src/components/Counter/Counter_Builder.res.mjs +112 -0
- package/src/components/Counter/Counter_Callback.res +94 -0
- package/src/components/Counter/Counter_Callback.res.mjs +70 -0
- package/src/components/Counter/Counter_Operations.res +70 -0
- package/src/components/Counter/Counter_Operations.res.mjs +91 -0
- package/src/components/Dcb/Dcb_Builder.res +971 -0
- package/src/components/Dcb/Dcb_Builder.res.mjs +572 -0
- package/src/components/DcbEventLog/DcbEventLog.res +43 -0
- package/src/components/DcbEventLog/DcbEventLog.res.mjs +24 -0
- package/src/components/DcbEventLog/DcbEventLog_Adapter.res +57 -0
- package/src/components/DcbEventLog/DcbEventLog_Adapter.res.mjs +2 -0
- package/src/components/DcbEventLog/DcbEventLog_Builder.res +72 -0
- package/src/components/DcbEventLog/DcbEventLog_Builder.res.mjs +67 -0
- package/src/components/DcbEventLog/DcbEventLog_Operations.res +160 -0
- package/src/components/DcbEventLog/DcbEventLog_Operations.res.mjs +121 -0
- package/src/components/EventCollector/EventCollector.res +34 -0
- package/src/components/EventCollector/EventCollector.res.mjs +9 -0
- package/src/components/EventCollector/EventCollector_Adapter.res +45 -0
- package/src/components/EventCollector/EventCollector_Adapter.res.mjs +2 -0
- package/src/components/EventCollector/EventCollector_Builder.res +91 -0
- package/src/components/EventCollector/EventCollector_Builder.res.mjs +64 -0
- package/src/components/EventLog/EventLog.res +27 -0
- package/src/components/EventLog/EventLog.res.mjs +13 -0
- package/src/components/EventLog/EventLog_Adapter.res +15 -0
- package/src/components/EventLog/EventLog_Adapter.res.mjs +2 -0
- package/src/components/EventLog/EventLog_Builder.res +65 -0
- package/src/components/EventLog/EventLog_Builder.res.mjs +57 -0
- package/src/components/EventLog/EventLog_Operations.res +209 -0
- package/src/components/EventLog/EventLog_Operations.res.mjs +202 -0
- package/src/components/EventLog/EventPublish_Callback.res +29 -0
- package/src/components/EventLog/EventPublish_Callback.res.mjs +32 -0
- package/src/components/EventMapper/EventMapper.res +72 -0
- package/src/components/EventMapper/EventMapper.res.mjs +54 -0
- package/src/components/EventMapper/EventMapper_Builder.res +128 -0
- package/src/components/EventMapper/EventMapper_Builder.res.mjs +81 -0
- package/src/components/EventMapper/EventMapper_Callback.res +323 -0
- package/src/components/EventMapper/EventMapper_Callback.res.mjs +231 -0
- package/src/components/EventTopic/EventTopic.res +69 -0
- package/src/components/EventTopic/EventTopic.res.mjs +50 -0
- package/src/components/EventTopic/EventTopic_Adapter.res +15 -0
- package/src/components/EventTopic/EventTopic_Adapter.res.mjs +2 -0
- package/src/components/EventTopic/EventTopic_Builder.res +53 -0
- package/src/components/EventTopic/EventTopic_Builder.res.mjs +46 -0
- package/src/components/EventTopic/EventTopic_Operations.res +37 -0
- package/src/components/EventTopic/EventTopic_Operations.res.mjs +39 -0
- package/src/components/Extension/Extension.res +32 -0
- package/src/components/Extension/Extension.res.mjs +9 -0
- package/src/components/Extension/Extension_Builder.res +82 -0
- package/src/components/Extension/Extension_Builder.res.mjs +57 -0
- package/src/components/Extension/Extension_Operations.res +203 -0
- package/src/components/Extension/Extension_Operations.res.mjs +154 -0
- package/src/components/ExtensionPoint/ExtensionPoint.res +49 -0
- package/src/components/ExtensionPoint/ExtensionPoint.res.mjs +25 -0
- package/src/components/ExtensionPoint/ExtensionPoint_Builder.res +163 -0
- package/src/components/ExtensionPoint/ExtensionPoint_Builder.res.mjs +113 -0
- package/src/components/ExtensionPoint/ExtensionPoint_Callback.res +110 -0
- package/src/components/ExtensionPoint/ExtensionPoint_Callback.res.mjs +76 -0
- package/src/components/ExtensionPoint/ExtensionPoint_Operations.res +146 -0
- package/src/components/ExtensionPoint/ExtensionPoint_Operations.res.mjs +122 -0
- package/src/components/Heartbeat/Heartbeat.res +25 -0
- package/src/components/Heartbeat/Heartbeat.res.mjs +9 -0
- package/src/components/Heartbeat/Heartbeat_Adapter.res +14 -0
- package/src/components/Heartbeat/Heartbeat_Adapter.res.mjs +2 -0
- package/src/components/Heartbeat/Heartbeat_Builder.res +43 -0
- package/src/components/Heartbeat/Heartbeat_Builder.res.mjs +47 -0
- package/src/components/Heartbeat/Heartbeat_Callback.res +32 -0
- package/src/components/Heartbeat/Heartbeat_Callback.res.mjs +40 -0
- package/src/components/InboundTranslationSlice/InboundTranslationSlice.res +34 -0
- package/src/components/InboundTranslationSlice/InboundTranslationSlice.res.mjs +24 -0
- package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res +98 -0
- package/src/components/InboundTranslationSlice/InboundTranslationSlice_Builder.res.mjs +87 -0
- package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res +191 -0
- package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res.mjs +175 -0
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice.res +35 -0
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice.res.mjs +24 -0
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res +181 -0
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res.mjs +137 -0
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res +173 -0
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res.mjs +173 -0
- package/src/components/QueryDb/QueryDb.res +74 -0
- package/src/components/QueryDb/QueryDb.res.mjs +37 -0
- package/src/components/QueryDb/QueryDb_Adapter.res +78 -0
- package/src/components/QueryDb/QueryDb_Adapter.res.mjs +17 -0
- package/src/components/QueryDb/QueryDb_Builder.res +76 -0
- package/src/components/QueryDb/QueryDb_Builder.res.mjs +53 -0
- package/src/components/QueryDb/QueryDb_Callback.res +18 -0
- package/src/components/QueryDb/QueryDb_Callback.res.mjs +21 -0
- package/src/components/QueryDb/QueryDb_Operations.res +116 -0
- package/src/components/QueryDb/QueryDb_Operations.res.mjs +165 -0
- package/src/components/ReadModel/ReadModel.res +42 -0
- package/src/components/ReadModel/ReadModel.res.mjs +27 -0
- package/src/components/ReadModel/ReadModel_Builder.res +155 -0
- package/src/components/ReadModel/ReadModel_Builder.res.mjs +101 -0
- package/src/components/ReadModel/ReadModel_Callback.res +48 -0
- package/src/components/ReadModel/ReadModel_Callback.res.mjs +48 -0
- package/src/components/Scheduler/Scheduler.res +13 -0
- package/src/components/Scheduler/Scheduler.res.mjs +9 -0
- package/src/components/Scheduler/Scheduler_Adapter.res +13 -0
- package/src/components/Scheduler/Scheduler_Adapter.res.mjs +2 -0
- package/src/components/Scheduler/Scheduler_Builder.res +19 -0
- package/src/components/Scheduler/Scheduler_Builder.res.mjs +29 -0
- package/src/components/SideEffectHandler/SideEffectHandler.res +30 -0
- package/src/components/SideEffectHandler/SideEffectHandler.res.mjs +12 -0
- package/src/components/SideEffectHandler/SideEffectHandler_Builder.res +117 -0
- package/src/components/SideEffectHandler/SideEffectHandler_Builder.res.mjs +64 -0
- package/src/components/SideEffectHandler/SideEffectHandler_Callback.res +116 -0
- package/src/components/SideEffectHandler/SideEffectHandler_Callback.res.mjs +95 -0
- package/src/components/StateChangeSlice/StateChangeSlice.res +38 -0
- package/src/components/StateChangeSlice/StateChangeSlice.res.mjs +17 -0
- package/src/components/StateChangeSlice/StateChangeSlice_Builder.res +91 -0
- package/src/components/StateChangeSlice/StateChangeSlice_Builder.res.mjs +81 -0
- package/src/components/StateChangeSlice/StateChangeSlice_Callback.res +412 -0
- package/src/components/StateChangeSlice/StateChangeSlice_Callback.res.mjs +299 -0
- package/src/components/StateTopic.res +91 -0
- package/src/components/StateTopic.res.mjs +41 -0
- package/src/components/StateViewSlice/StateViewSlice.res +33 -0
- package/src/components/StateViewSlice/StateViewSlice.res.mjs +24 -0
- package/src/components/StateViewSlice/StateViewSlice_Builder.res +176 -0
- package/src/components/StateViewSlice/StateViewSlice_Builder.res.mjs +134 -0
- package/src/components/StateViewSlice/StateViewSlice_Callback.res +64 -0
- package/src/components/StateViewSlice/StateViewSlice_Callback.res.mjs +56 -0
- package/src/components/Task/Task.res +81 -0
- package/src/components/Task/Task.res.mjs +51 -0
- package/src/components/Task/Task_Adapter.res +31 -0
- package/src/components/Task/Task_Adapter.res.mjs +2 -0
- package/src/components/Task/Task_Builder.res +223 -0
- package/src/components/Task/Task_Builder.res.mjs +115 -0
- package/src/plugin/api/PluginBaseFragment.res +104 -0
- package/src/plugin/api/PluginBaseFragment.res.mjs +64 -0
- package/src/plugin/component/Plugin.res +100 -0
- package/src/plugin/component/Plugin.res.mjs +61 -0
- package/src/plugin/component/Plugin_Builder.res +1017 -0
- package/src/plugin/component/Plugin_Builder.res.mjs +608 -0
- package/src/plugin/component/Plugin_BuiltHook.res +141 -0
- package/src/plugin/component/Plugin_BuiltHook.res.mjs +39 -0
- package/src/plugin/component/Plugin_Callback.res +98 -0
- package/src/plugin/component/Plugin_Callback.res.mjs +55 -0
- package/src/plugin/component/Plugin_Helpers.res +1730 -0
- package/src/plugin/component/Plugin_Helpers.res.mjs +1010 -0
- package/src/plugin/component/Plugin_ResolverError.res +27 -0
- package/src/plugin/component/Plugin_ResolverError.res.mjs +21 -0
- package/src/plugin/component/Plugin_Structure.res +570 -0
- package/src/plugin/component/Plugin_Structure.res.mjs +458 -0
- package/src/plugin/component/Plugin_SubscriptionSchema.res +103 -0
- package/src/plugin/component/Plugin_SubscriptionSchema.res.mjs +71 -0
- package/src/plugin/component/SchemaWalker.res +164 -0
- package/src/plugin/component/SchemaWalker.res.mjs +183 -0
- package/src/plugin/connect/PluginConnectExtension_Builder.res +14 -0
- package/src/plugin/connect/PluginConnectExtension_Builder.res.mjs +36 -0
- package/src/plugin/connect/PluginConnectExtension_Mapping.res +76 -0
- package/src/plugin/connect/PluginConnectExtension_Mapping.res.mjs +89 -0
- package/src/plugin/connect/PluginExtensionPoint_Builder.res +39 -0
- package/src/plugin/connect/PluginExtensionPoint_Builder.res.mjs +33 -0
- package/src/plugin/connect/PluginExtensionPoint_Plugin.res +231 -0
- package/src/plugin/connect/PluginExtensionPoint_Plugin.res.mjs +353 -0
- package/src/plugin/lifecycle/PluginBehavior.res +250 -0
- package/src/plugin/lifecycle/PluginBehavior.res.mjs +391 -0
- package/src/plugin/lifecycle/PluginSpec.res +84 -0
- package/src/plugin/lifecycle/PluginSpec.res.mjs +148 -0
- package/src/plugin/lifecycle/PluginsProjection.res +154 -0
- package/src/plugin/lifecycle/PluginsProjection.res.mjs +230 -0
- package/src/plugin/lifecycle/PluginsReadModelSpec.res +66 -0
- package/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs +58 -0
- package/src/util/AWS.res +7 -0
- package/src/util/AWS.res.mjs +20 -0
- package/src/util/CSV.res +27 -0
- package/src/util/CSV.res.mjs +56 -0
- package/src/util/CommandPublisher.res +133 -0
- package/src/util/CommandPublisher.res.mjs +161 -0
- package/src/util/CsvStream.res +39 -0
- package/src/util/CsvStream.res.mjs +42 -0
- package/src/util/EffectLogger.res +178 -0
- package/src/util/EffectLogger.res.mjs +171 -0
- package/src/util/FTP.res +69 -0
- package/src/util/FTP.res.mjs +101 -0
- package/src/util/FTPHandler.res +142 -0
- package/src/util/FTPHandler.res.mjs +136 -0
- package/src/util/Hash.res +1 -0
- package/src/util/Hash.res.mjs +10 -0
- package/src/util/Interstack.res +74 -0
- package/src/util/Interstack.res.mjs +126 -0
- package/src/util/Interstack.resi +25 -0
- package/src/util/LogFormat.res +222 -0
- package/src/util/LogFormat.res.mjs +257 -0
- package/src/util/Logger.res +196 -0
- package/src/util/Logger.res.mjs +238 -0
- package/src/util/Lru.res +51 -0
- package/src/util/Lru.res.mjs +59 -0
- package/src/util/Lru.resi +32 -0
- package/src/util/Metrics.res +32 -0
- package/src/util/Metrics.res.mjs +42 -0
- package/src/util/OutputFailsafeDeploytime.res +16 -0
- package/src/util/OutputFailsafeDeploytime.res.mjs +20 -0
- package/src/util/OutputFailsafeRuntime.res +6 -0
- package/src/util/OutputFailsafeRuntime.res.mjs +15 -0
- package/src/util/OutputLogger.res +9 -0
- package/src/util/OutputLogger.res.mjs +19 -0
- package/src/util/ResourceQuery.res +14 -0
- package/src/util/ResourceQuery.res.mjs +17 -0
- package/src/util/ResourceQueryRuntime.res +17 -0
- package/src/util/ResourceQueryRuntime.res.mjs +18 -0
- package/src/util/ScheduleOps.res +124 -0
- package/src/util/ScheduleOps.res.mjs +132 -0
- package/src/util/Util.res +12 -0
- package/src/util/Util.res.mjs +42 -0
- package/src/util/Util_Adapter.res +97 -0
- package/src/util/Util_Adapter.res.mjs +82 -0
- package/src/util/Util_AdapterRuntime.res +39 -0
- package/src/util/Util_AdapterRuntime.res.mjs +42 -0
- package/src/util/Util_Array.res +2 -0
- package/src/util/Util_Array.res.mjs +12 -0
- package/src/util/Util_Error.res +16 -0
- package/src/util/Util_Error.res.mjs +19 -0
- package/src/util/Util_Promise.res +67 -0
- package/src/util/Util_Promise.res.mjs +105 -0
- package/src/util/Util_Pulumi.res +35 -0
- package/src/util/Util_Pulumi.res.mjs +55 -0
- package/src/util/Util_Pulumi.resi +21 -0
- package/src/util/Util_QueryDb.res +14 -0
- package/src/util/Util_QueryDb.res.mjs +21 -0
- package/src/util/Util_QueryDbRuntime.res +11 -0
- package/src/util/Util_QueryDbRuntime.res.mjs +19 -0
- package/src/util/Util_ReadModel.res +2 -0
- package/src/util/Util_ReadModel.res.mjs +10 -0
- package/src/util/Util_StackRefs.res +24 -0
- package/src/util/Util_StackRefs.res.mjs +39 -0
- package/src/util/Validation.res +75 -0
- package/src/util/Validation.res.mjs +181 -0
- package/tests/.gitkeep +0 -0
- package/tests/IdentityTest.res +155 -0
- package/tests/IdentityTest.res.mjs +174 -0
- package/tests/admin/Platform_ComponentDefinitionsApiTest.res +237 -0
- package/tests/admin/Platform_ComponentDefinitionsApiTest.res.mjs +298 -0
- package/tests/admin/Platform_UIFragmentsApiTest.res +96 -0
- package/tests/admin/Platform_UIFragmentsApiTest.res.mjs +101 -0
- package/tests/aggregate/AggregateCallbackTest.res +81 -0
- package/tests/aggregate/AggregateCallbackTest.res.mjs +140 -0
- package/tests/aggregate/AggregateCausationTest.res +49 -0
- package/tests/aggregate/AggregateCausationTest.res.mjs +44 -0
- package/tests/aggregate/AggregateConflictTest.res +212 -0
- package/tests/aggregate/AggregateConflictTest.res.mjs +363 -0
- package/tests/aggregate/AggregateFixtures.res +177 -0
- package/tests/aggregate/AggregateFixtures.res.mjs +285 -0
- package/tests/aggregate/AggregateRejectionTest.res +139 -0
- package/tests/aggregate/AggregateRejectionTest.res.mjs +163 -0
- package/tests/api/ApiNoApiTest.res +62 -0
- package/tests/api/ApiNoApiTest.res.mjs +90 -0
- package/tests/api/GraphQL_StitcherTest.res +107 -0
- package/tests/api/GraphQL_StitcherTest.res.mjs +99 -0
- package/tests/api/SimpleTest.res +7 -0
- package/tests/api/SimpleTest.res.mjs +10 -0
- package/tests/api/SuryToJsonSchemaTest.res +405 -0
- package/tests/api/SuryToJsonSchemaTest.res.mjs +623 -0
- package/tests/commandgenerator/CommandGeneratorCallbackTest.res +128 -0
- package/tests/commandgenerator/CommandGeneratorCallbackTest.res.mjs +160 -0
- package/tests/commandgenerator/CommandGeneratorFixtures.res +139 -0
- package/tests/commandgenerator/CommandGeneratorFixtures.res.mjs +197 -0
- package/tests/commandtopic/CommandTopicCallbackFixtures.res +87 -0
- package/tests/commandtopic/CommandTopicCallbackFixtures.res.mjs +152 -0
- package/tests/commandtopic/CommandTopicCallbackTest.res +66 -0
- package/tests/commandtopic/CommandTopicCallbackTest.res.mjs +106 -0
- package/tests/commandtopic/CommandTopicHelpersRejectionTest.res +83 -0
- package/tests/commandtopic/CommandTopicHelpersRejectionTest.res.mjs +109 -0
- package/tests/counter/CounterCallbackTest.res +83 -0
- package/tests/counter/CounterCallbackTest.res.mjs +140 -0
- package/tests/counter/CounterFixtures.res +57 -0
- package/tests/counter/CounterFixtures.res.mjs +67 -0
- package/tests/dcb/DcbDecodeTest.res +122 -0
- package/tests/dcb/DcbDecodeTest.res.mjs +194 -0
- package/tests/dcb/DcbEventLogOperationsTest.res +195 -0
- package/tests/dcb/DcbEventLogOperationsTest.res.mjs +268 -0
- package/tests/dcb/DcbFixtures.res +422 -0
- package/tests/dcb/DcbFixtures.res.mjs +534 -0
- package/tests/dcb/DcbScopeInferenceTest.res +242 -0
- package/tests/dcb/DcbScopeInferenceTest.res.mjs +480 -0
- package/tests/dcb/DcbStateChangeSliceTest.res +362 -0
- package/tests/dcb/DcbStateChangeSliceTest.res.mjs +546 -0
- package/tests/dcb/DcbTagTest.res +978 -0
- package/tests/dcb/DcbTagTest.res.mjs +867 -0
- package/tests/dcb/DcbValidationTest.res +349 -0
- package/tests/dcb/DcbValidationTest.res.mjs +476 -0
- package/tests/eventlog/EventLogFixtures.res +113 -0
- package/tests/eventlog/EventLogFixtures.res.mjs +166 -0
- package/tests/eventlog/EventLogOperationsTest.res +96 -0
- package/tests/eventlog/EventLogOperationsTest.res.mjs +192 -0
- package/tests/eventlog/EventLogRetryTest.res +121 -0
- package/tests/eventlog/EventLogRetryTest.res.mjs +171 -0
- package/tests/eventmapper/EventMapperCallbackTest.res +134 -0
- package/tests/eventmapper/EventMapperCallbackTest.res.mjs +141 -0
- package/tests/eventmapper/EventMapperFixtures.res +255 -0
- package/tests/eventmapper/EventMapperFixtures.res.mjs +440 -0
- package/tests/eventmapper/EventMapperTest.res +53 -0
- package/tests/eventmapper/EventMapperTest.res.mjs +83 -0
- package/tests/eventtopic/EventTopicFixtures.res +36 -0
- package/tests/eventtopic/EventTopicFixtures.res.mjs +65 -0
- package/tests/eventtopic/EventTopicOperationsTest.res +48 -0
- package/tests/eventtopic/EventTopicOperationsTest.res.mjs +71 -0
- package/tests/extensionpoint/ExtensionPointCallbackTest.res +84 -0
- package/tests/extensionpoint/ExtensionPointCallbackTest.res.mjs +94 -0
- package/tests/extensionpoint/ExtensionPointFixtures.res +173 -0
- package/tests/extensionpoint/ExtensionPointFixtures.res.mjs +205 -0
- package/tests/extensionpoint/ExtensionPointOperationsTest.res +261 -0
- package/tests/extensionpoint/ExtensionPointOperationsTest.res.mjs +304 -0
- package/tests/ftp/FTPTest.res +64 -0
- package/tests/ftp/FTPTest.res.mjs +88 -0
- package/tests/logger/LogFormatTest.res +348 -0
- package/tests/logger/LogFormatTest.res.mjs +309 -0
- package/tests/message/MessageTest.res +95 -0
- package/tests/message/MessageTest.res.mjs +93 -0
- package/tests/message/MetaEnvelopeTest.res +200 -0
- package/tests/message/MetaEnvelopeTest.res.mjs +188 -0
- package/tests/plugin/ManifestVisibilityTest.res +137 -0
- package/tests/plugin/ManifestVisibilityTest.res.mjs +205 -0
- package/tests/plugin/PluginSpecExperiment.res +13 -0
- package/tests/plugin/PluginSpecExperiment.res.mjs +31 -0
- package/tests/plugin/PluginStructureTest.res +298 -0
- package/tests/plugin/PluginStructureTest.res.mjs +388 -0
- package/tests/plugin/PluginVersionTest.res +34 -0
- package/tests/plugin/PluginVersionTest.res.mjs +30 -0
- package/tests/plugin/SchemaWalkerTest.res +115 -0
- package/tests/plugin/SchemaWalkerTest.res.mjs +160 -0
- package/tests/plugin/StateChangeSlice/PsPlaceOrder.res +24 -0
- package/tests/plugin/StateChangeSlice/PsPlaceOrder.res.mjs +62 -0
- package/tests/plugin/StateChangeSlice/PsShipOrder.res +29 -0
- package/tests/plugin/StateChangeSlice/PsShipOrder.res.mjs +69 -0
- package/tests/plugin/StateViewSlice/PsAnnotatedView.res +24 -0
- package/tests/plugin/StateViewSlice/PsAnnotatedView.res.mjs +94 -0
- package/tests/plugin/StateViewSlice/PsAvailableProductsView.res +18 -0
- package/tests/plugin/StateViewSlice/PsAvailableProductsView.res.mjs +69 -0
- package/tests/plugin/StateViewSlice/PsCustomersView.res +22 -0
- package/tests/plugin/StateViewSlice/PsCustomersView.res.mjs +69 -0
- package/tests/plugin/StateViewSlice/PsOrdersView.res +20 -0
- package/tests/plugin/StateViewSlice/PsOrdersView.res.mjs +81 -0
- package/tests/poc/StructuralSubtypingPoc.res +211 -0
- package/tests/poc/StructuralSubtypingPoc.res.mjs +61 -0
- package/tests/querydb/QueryDbFixtures.res +65 -0
- package/tests/querydb/QueryDbFixtures.res.mjs +135 -0
- package/tests/querydb/QueryDbOperationsTest.res +94 -0
- package/tests/querydb/QueryDbOperationsTest.res.mjs +168 -0
- package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res +56 -0
- package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res.mjs +77 -0
- package/tests/sideeffecthandler/SideEffectHandlerFixtures.res +96 -0
- package/tests/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +139 -0
- package/tests/util/CsvStreamTest.res +54 -0
- package/tests/util/CsvStreamTest.res.mjs +51 -0
- package/tests/util/LruTest.res +73 -0
- package/tests/util/LruTest.res.mjs +105 -0
- package/tests/util/MetricsTest.res +36 -0
- package/tests/util/MetricsTest.res.mjs +53 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
open ReventlessInfra.Api
|
|
2
|
+
|
|
3
|
+
@schema
|
|
4
|
+
type cloneArgs = {restoreDateTime?: string}
|
|
5
|
+
|
|
6
|
+
let cloneMutationEntry: mutationSchemaEntry = {
|
|
7
|
+
fieldNames: [Api_Naming.adminField(~name="Clone")],
|
|
8
|
+
commandSchema: cloneArgsSchema->S.castToUnknown,
|
|
9
|
+
description: "Clone the system to a specific point in time",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Aggregate-derived admin mutations come from
|
|
13
|
+
// `PluginBaseFragment.pluginAggregateMutationEntries` so they end up in the
|
|
14
|
+
// stitched SDL (the AWS path pushes `AdminApi.baseFragment` directly). The
|
|
15
|
+
// corresponding resolver wiring is fired in parallel by
|
|
16
|
+
// `Plugin_Helpers.registerAdminAggregateMutations` from `Platform_Admin.construct`.
|
|
17
|
+
let mutationEntries = (~cloner: bool) => {
|
|
18
|
+
let base = PluginBaseFragment.pluginAggregateMutationEntries
|
|
19
|
+
if cloner {
|
|
20
|
+
Array.concat(base, [cloneMutationEntry])
|
|
21
|
+
} else {
|
|
22
|
+
base
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
let queryEntries = PluginBaseFragment.queryEntries
|
|
27
|
+
|
|
28
|
+
// UIFragment lifecycle Source C subscriptions.
|
|
29
|
+
// Mutations are called by the backend when UIFragment events occur;
|
|
30
|
+
// AppSync routes via @aws_subscribe to onUIFragmentChange subscribers.
|
|
31
|
+
// manifest is serialised as a JSON string (String scalar, not AWSJSON).
|
|
32
|
+
|
|
33
|
+
let uiFragmentSubscriptionTypes = [
|
|
34
|
+
`enum UIFragmentChangeKind {\n Registered\n Updated\n Deregistered\n}`,
|
|
35
|
+
`type UIFragmentChangeEvent {\n pluginId: ID!\n changeKind: UIFragmentChangeKind!\n manifest: String\n}`,
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
let uiFragmentMutationFields = [
|
|
39
|
+
` Platform_UIFragmentRegistered(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
|
|
40
|
+
` Platform_UIFragmentUpdated(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
|
|
41
|
+
` Platform_UIFragmentDeregistered(pluginId: ID!): UIFragmentChangeEvent`,
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
let uiFragmentSubscriptionField = ` onUIFragmentChange: UIFragmentChangeEvent\n @aws_subscribe(mutations: ["Platform_UIFragmentRegistered", "Platform_UIFragmentUpdated", "Platform_UIFragmentDeregistered"])`
|
|
45
|
+
|
|
46
|
+
// Plugin lifecycle Source C subscription. Mirrors the UIFragment pattern: the
|
|
47
|
+
// platform invokes `Platform_PluginStatusChanged` after writing the new status
|
|
48
|
+
// to the Plugin read model; AppSync routes that mutation via `@aws_subscribe`
|
|
49
|
+
// to live `onPluginStatusChange` subscribers (host shell). The status enum
|
|
50
|
+
// matches `PluginsReadModelSpec.status` so consumers can mirror tier 1 / tier 2
|
|
51
|
+
// transitions exactly.
|
|
52
|
+
let pluginStatusSubscriptionTypes = [
|
|
53
|
+
`enum PluginStatus {\n Connected\n Disconnected\n Inactive\n Retired\n}`,
|
|
54
|
+
`type PluginStatusChangeEvent {\n pluginId: ID!\n status: PluginStatus!\n}`,
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
let pluginStatusMutationFields = [
|
|
58
|
+
` Platform_PluginStatusChanged(pluginId: ID!, status: PluginStatus!): PluginStatusChangeEvent`,
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
let pluginStatusSubscriptionField = ` onPluginStatusChange: PluginStatusChangeEvent\n @aws_subscribe(mutations: ["Platform_PluginStatusChanged"])`
|
|
62
|
+
|
|
63
|
+
let baseFragment = (~cloner: bool) => {
|
|
64
|
+
let base = GraphQL_FragmentGenerator.generate(~mutationEntries=mutationEntries(~cloner), ~queryEntries)
|
|
65
|
+
let parts = GraphQL_Stitcher.decode(base)
|
|
66
|
+
// Source C subscriptions for the admin Plugin aggregate mutations.
|
|
67
|
+
// The standard auto-resolver flow (CommandGeneratorResolvers_AppSync.make)
|
|
68
|
+
// always creates a Subscription.onX resolver per mutation field; without the
|
|
69
|
+
// matching SDL fields, AppSync's CreateResolver fails with "Type not found".
|
|
70
|
+
let pluginAggregateSubscriptionFields =
|
|
71
|
+
Plugin_SubscriptionSchema.sourceCFields(~mutationEntries=PluginBaseFragment.pluginAggregateMutationEntries)
|
|
72
|
+
GraphQL_Stitcher.encode({
|
|
73
|
+
types: parts.types
|
|
74
|
+
->Array.concat(uiFragmentSubscriptionTypes)
|
|
75
|
+
->Array.concat(pluginStatusSubscriptionTypes)
|
|
76
|
+
->Array.concat(Platform_ComponentDefinitionsApi.sdlTypes)
|
|
77
|
+
->Array.concat(Platform_UIFragmentsApi.sdlTypes),
|
|
78
|
+
queries: Array.concat(
|
|
79
|
+
parts.queries,
|
|
80
|
+
[Platform_ComponentDefinitionsApi.sdlQueryField, Platform_UIFragmentsApi.sdlQueryField],
|
|
81
|
+
),
|
|
82
|
+
mutations: parts.mutations
|
|
83
|
+
->Array.concat(uiFragmentMutationFields)
|
|
84
|
+
->Array.concat(pluginStatusMutationFields),
|
|
85
|
+
subscriptions: [uiFragmentSubscriptionField, pluginStatusSubscriptionField]
|
|
86
|
+
->Array.concat(pluginAggregateSubscriptionFields),
|
|
87
|
+
})
|
|
88
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as S from "sury/src/S.res.mjs";
|
|
4
|
+
import * as Api_Naming$ReventlessCore from "../components/Api/Api_Naming.res.mjs";
|
|
5
|
+
import * as GraphQL_Stitcher$ReventlessCore from "../components/Api/GraphQL_Stitcher.res.mjs";
|
|
6
|
+
import * as PluginBaseFragment$ReventlessCore from "../plugin/api/PluginBaseFragment.res.mjs";
|
|
7
|
+
import * as Platform_UIFragmentsApi$ReventlessCore from "./Platform_UIFragmentsApi.res.mjs";
|
|
8
|
+
import * as GraphQL_FragmentGenerator$ReventlessCore from "../components/Api/GraphQL_FragmentGenerator.res.mjs";
|
|
9
|
+
import * as Plugin_SubscriptionSchema$ReventlessCore from "../plugin/component/Plugin_SubscriptionSchema.res.mjs";
|
|
10
|
+
import * as Platform_ComponentDefinitionsApi$ReventlessCore from "./Platform_ComponentDefinitionsApi.res.mjs";
|
|
11
|
+
|
|
12
|
+
let cloneArgsSchema = S.schema(s => ({
|
|
13
|
+
restoreDateTime: s.m(S.option(S.string))
|
|
14
|
+
}));
|
|
15
|
+
|
|
16
|
+
let cloneMutationEntry_fieldNames = [Api_Naming$ReventlessCore.adminField("Clone")];
|
|
17
|
+
|
|
18
|
+
let cloneMutationEntry_description = "Clone the system to a specific point in time";
|
|
19
|
+
|
|
20
|
+
let cloneMutationEntry = {
|
|
21
|
+
fieldNames: cloneMutationEntry_fieldNames,
|
|
22
|
+
commandSchema: cloneArgsSchema,
|
|
23
|
+
description: cloneMutationEntry_description
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
function mutationEntries(cloner) {
|
|
27
|
+
if (cloner) {
|
|
28
|
+
return PluginBaseFragment$ReventlessCore.pluginAggregateMutationEntries.concat([cloneMutationEntry]);
|
|
29
|
+
} else {
|
|
30
|
+
return PluginBaseFragment$ReventlessCore.pluginAggregateMutationEntries;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let uiFragmentSubscriptionTypes = [
|
|
35
|
+
`enum UIFragmentChangeKind {\n Registered\n Updated\n Deregistered\n}`,
|
|
36
|
+
`type UIFragmentChangeEvent {\n pluginId: ID!\n changeKind: UIFragmentChangeKind!\n manifest: String\n}`
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
let uiFragmentMutationFields = [
|
|
40
|
+
` Platform_UIFragmentRegistered(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
|
|
41
|
+
` Platform_UIFragmentUpdated(pluginId: ID!, manifest: String): UIFragmentChangeEvent`,
|
|
42
|
+
` Platform_UIFragmentDeregistered(pluginId: ID!): UIFragmentChangeEvent`
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
let uiFragmentSubscriptionField = ` onUIFragmentChange: UIFragmentChangeEvent\n @aws_subscribe(mutations: ["Platform_UIFragmentRegistered", "Platform_UIFragmentUpdated", "Platform_UIFragmentDeregistered"])`;
|
|
46
|
+
|
|
47
|
+
let pluginStatusSubscriptionTypes = [
|
|
48
|
+
`enum PluginStatus {\n Connected\n Disconnected\n Inactive\n Retired\n}`,
|
|
49
|
+
`type PluginStatusChangeEvent {\n pluginId: ID!\n status: PluginStatus!\n}`
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
let pluginStatusMutationFields = [` Platform_PluginStatusChanged(pluginId: ID!, status: PluginStatus!): PluginStatusChangeEvent`];
|
|
53
|
+
|
|
54
|
+
let pluginStatusSubscriptionField = ` onPluginStatusChange: PluginStatusChangeEvent\n @aws_subscribe(mutations: ["Platform_PluginStatusChanged"])`;
|
|
55
|
+
|
|
56
|
+
function baseFragment(cloner) {
|
|
57
|
+
let base = GraphQL_FragmentGenerator$ReventlessCore.generate(mutationEntries(cloner), PluginBaseFragment$ReventlessCore.queryEntries);
|
|
58
|
+
let parts = GraphQL_Stitcher$ReventlessCore.decode(base);
|
|
59
|
+
let pluginAggregateSubscriptionFields = Plugin_SubscriptionSchema$ReventlessCore.sourceCFields(PluginBaseFragment$ReventlessCore.pluginAggregateMutationEntries);
|
|
60
|
+
return GraphQL_Stitcher$ReventlessCore.encode({
|
|
61
|
+
types: parts.types.concat(uiFragmentSubscriptionTypes).concat(pluginStatusSubscriptionTypes).concat(Platform_ComponentDefinitionsApi$ReventlessCore.sdlTypes).concat(Platform_UIFragmentsApi$ReventlessCore.sdlTypes),
|
|
62
|
+
mutations: parts.mutations.concat(uiFragmentMutationFields).concat(pluginStatusMutationFields),
|
|
63
|
+
queries: parts.queries.concat([
|
|
64
|
+
Platform_ComponentDefinitionsApi$ReventlessCore.sdlQueryField,
|
|
65
|
+
Platform_UIFragmentsApi$ReventlessCore.sdlQueryField
|
|
66
|
+
]),
|
|
67
|
+
subscriptions: [
|
|
68
|
+
uiFragmentSubscriptionField,
|
|
69
|
+
pluginStatusSubscriptionField
|
|
70
|
+
].concat(pluginAggregateSubscriptionFields)
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
let queryEntries = PluginBaseFragment$ReventlessCore.queryEntries;
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
cloneArgsSchema,
|
|
78
|
+
cloneMutationEntry,
|
|
79
|
+
mutationEntries,
|
|
80
|
+
queryEntries,
|
|
81
|
+
uiFragmentSubscriptionTypes,
|
|
82
|
+
uiFragmentMutationFields,
|
|
83
|
+
uiFragmentSubscriptionField,
|
|
84
|
+
pluginStatusSubscriptionTypes,
|
|
85
|
+
pluginStatusMutationFields,
|
|
86
|
+
pluginStatusSubscriptionField,
|
|
87
|
+
baseFragment,
|
|
88
|
+
}
|
|
89
|
+
/* cloneArgsSchema Not a pure module */
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module type Spec = {
|
|
2
|
+
let pluginDefinition: Reventless.Plugin.pluginDefinition
|
|
3
|
+
let outgoingExtensionPointJsonEventsHandlers: array<ExtensionPoint.jsonEventsHandler>
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
module type T = {
|
|
7
|
+
let handleJsonEvents: EventCollector.jsonEventsHandler
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
module Make = (Spec: Spec): T => {
|
|
11
|
+
let handleJsonEvents: EventCollector.jsonEventsHandler = stream =>
|
|
12
|
+
stream
|
|
13
|
+
->Stream.mapEffect(eventJson' =>
|
|
14
|
+
EffectLogger.logInfo(
|
|
15
|
+
~comp="Admin",
|
|
16
|
+
`handleJsonEvents: outgoing event: ${LogFormat.event'JsonToLogMessage(eventJson')}`,
|
|
17
|
+
)->Effect.zipRight(
|
|
18
|
+
Effect.all(
|
|
19
|
+
Spec.outgoingExtensionPointJsonEventsHandlers->Array.map(handleEvent =>
|
|
20
|
+
Effect.promise(() => handleEvent(eventJson', Spec.pluginDefinition))
|
|
21
|
+
),
|
|
22
|
+
{"concurrency": "unbounded"},
|
|
23
|
+
)->Effect.map(_ => ())
|
|
24
|
+
)
|
|
25
|
+
)
|
|
26
|
+
->Stream.runDrain
|
|
27
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Stream from "effect/Stream";
|
|
5
|
+
import * as LogFormat$ReventlessCore from "../util/LogFormat.res.mjs";
|
|
6
|
+
import * as EffectLogger$ReventlessCore from "../util/EffectLogger.res.mjs";
|
|
7
|
+
|
|
8
|
+
function Make(Spec) {
|
|
9
|
+
let handleJsonEvents = stream => Stream.runDrain(Stream.mapEffect(stream, eventJson$p => Effect.zipRight(EffectLogger$ReventlessCore.logInfo("Admin", undefined, `handleJsonEvents: outgoing event: ` + LogFormat$ReventlessCore.event$pJsonToLogMessage(eventJson$p)), Effect.map(Effect.all(Spec.outgoingExtensionPointJsonEventsHandlers.map(handleEvent => Effect.promise(() => handleEvent(eventJson$p, Spec.pluginDefinition))), {
|
|
10
|
+
concurrency: "unbounded"
|
|
11
|
+
}), param => {}))));
|
|
12
|
+
return {
|
|
13
|
+
handleJsonEvents: handleJsonEvents
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
Make,
|
|
19
|
+
}
|
|
20
|
+
/* effect/Effect Not a pure module */
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
module type Config = {
|
|
2
|
+
let silent: bool
|
|
3
|
+
let splitApi: bool
|
|
4
|
+
let cloner: bool
|
|
5
|
+
let hooks: Plugin_Helpers.platformHooks
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
type outputs = {
|
|
9
|
+
adminFragment: ReventlessInfra.Api.schemaFragment,
|
|
10
|
+
dcbMutationEntries: array<ReventlessInfra.Api.mutationSchemaEntry>,
|
|
11
|
+
dcbQueryEntries: array<ReventlessInfra.Api.querySchemaEntry>,
|
|
12
|
+
dcbEventLogEntries: array<ReventlessInfra.Api.eventLogSchemaEntry>,
|
|
13
|
+
extensionPointsOutputs: Pulumi.Output.t<array<ExtensionPoint.outputs>>,
|
|
14
|
+
aggregatesOutputs: dict<Aggregate.outputs>,
|
|
15
|
+
readModelsOutputs: dict<ReadModel.outputs>,
|
|
16
|
+
dcbEventLogOutputs: option<DcbEventLog.outputs>,
|
|
17
|
+
stateChangeSlicesOutputs: dict<StateChangeSlice.outputs>,
|
|
18
|
+
stateViewSlicesOutputs: dict<StateViewSlice.outputs>,
|
|
19
|
+
automationSlicesOutputs: dict<AutomationSlice.outputs>,
|
|
20
|
+
outboundTranslationSlicesOutputs: dict<OutboundTranslationSlice.outputs>,
|
|
21
|
+
inboundTranslationSlicesOutputs: dict<InboundTranslationSlice.outputs>,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module Make = (
|
|
25
|
+
RuntimeEnvironment: Runtime.Environment,
|
|
26
|
+
EventCollectorChannel: EventCollector_Adapter.Channel
|
|
27
|
+
with type runtimeParts = RuntimeEnvironment.parts,
|
|
28
|
+
QueryEngineAdapter: QueryDb_Adapter.QueryEngineAdapter,
|
|
29
|
+
ClonerRunner: Cloner.Adapter.Runner,
|
|
30
|
+
AdminRuntimeBuilder: PluginRuntime_Builder.T
|
|
31
|
+
with module EventCollectorChannel = EventCollectorChannel
|
|
32
|
+
and type runtimeParts = RuntimeEnvironment.parts,
|
|
33
|
+
DcbEventLogStorage: DcbEventLog_Adapter.Storage,
|
|
34
|
+
DcbEventTopicPublisher: EventTopic_Adapter.Publisher,
|
|
35
|
+
DcbCommandTopicChannel: CommandTopic_Adapter.Channel,
|
|
36
|
+
DcbCommandTopicChannelAsync: CommandTopic_Adapter.Channel,
|
|
37
|
+
Config: Config,
|
|
38
|
+
) => {
|
|
39
|
+
include Builder_Helpers
|
|
40
|
+
|
|
41
|
+
module MakeEventCollectorHelper = (
|
|
42
|
+
RE: Runtime.Environment,
|
|
43
|
+
ECC: EventCollector_Adapter.Channel with type runtimeParts = RE.parts,
|
|
44
|
+
RB: PluginRuntime_Builder.T with module EventCollectorChannel = ECC,
|
|
45
|
+
) => {
|
|
46
|
+
module AdminEventCollector = EventCollector_Builder.Make(RE, ECC)
|
|
47
|
+
let make = (~name, ~eventTopics, ~opts) => {
|
|
48
|
+
let eventCollector = AdminEventCollector.make(~name, ~eventTopics, ~opts)
|
|
49
|
+
let eventCollectorOutputs = eventCollector->Component.outputs
|
|
50
|
+
(eventCollector, eventCollectorOutputs)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
let connect = (
|
|
54
|
+
~eventCollector: EventCollector.component,
|
|
55
|
+
~eventTopics: EventTopic.allOutputs,
|
|
56
|
+
~extensionPointsOutputs: array<ExtensionPoint.outputs>,
|
|
57
|
+
~extensionPointsOutgoingJsonEventsHandlers,
|
|
58
|
+
) => {
|
|
59
|
+
let resources =
|
|
60
|
+
extensionPointsOutputs
|
|
61
|
+
->Array.map(extensionPoint => extensionPoint.eventTopic)
|
|
62
|
+
->Pulumi.Output.all
|
|
63
|
+
->Pulumi.Output.apply(eventTopics =>
|
|
64
|
+
eventTopics
|
|
65
|
+
->Array.map(eventTopic => eventTopic.resources)
|
|
66
|
+
->Array.flat
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
resources->Pulumi.Output.apply(resources => {
|
|
70
|
+
let fakePluginDefinition: Reventless.Plugin.pluginDefinition = {
|
|
71
|
+
id: "Admin@INTERNAL",
|
|
72
|
+
name: "Admin",
|
|
73
|
+
version: "INTERNAL",
|
|
74
|
+
extensionPoints: [],
|
|
75
|
+
extensions: [],
|
|
76
|
+
eventCollector: "NOT-SET",
|
|
77
|
+
extensionProtocols: [],
|
|
78
|
+
apiSchemaFragment: None,
|
|
79
|
+
apiTarget: None,
|
|
80
|
+
uiFragments: None,
|
|
81
|
+
structure: None,
|
|
82
|
+
dcbEventLog: None,
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
module Callback = Admin_Callback.Make({
|
|
86
|
+
let pluginDefinition = fakePluginDefinition
|
|
87
|
+
let outgoingExtensionPointJsonEventsHandlers = extensionPointsOutgoingJsonEventsHandlers
|
|
88
|
+
})
|
|
89
|
+
let handler = AdminEventCollector.makeHandler(
|
|
90
|
+
~eventCollector,
|
|
91
|
+
~jsonEventsHandler=Callback.handleJsonEvents,
|
|
92
|
+
)
|
|
93
|
+
eventCollector->RB.forPluginEventCollector(~handler, ~eventTopics, ~resources)
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
type api = ClonerRunner.api
|
|
99
|
+
|
|
100
|
+
let construct = (
|
|
101
|
+
~version as _,
|
|
102
|
+
~extensionPoints: array<module(ReventlessInfra.ExtensionPoint.T)>,
|
|
103
|
+
~aggregates: array<module(ReventlessInfra.Aggregate.T with type api = api)>,
|
|
104
|
+
~readModels: array<module(ReventlessInfra.ReadModel.T with type api = api and type role = 'role)>,
|
|
105
|
+
~scheduler: Pulumi.Output.t<Scheduler.operations>,
|
|
106
|
+
~resourceNaming: ReventlessInfra.ResourceNaming.operations,
|
|
107
|
+
~api: ClonerRunner.api,
|
|
108
|
+
~apiRole: 'role,
|
|
109
|
+
~stateChangeSlices: array<module(ReventlessInfra.StateChangeSlice.T)>,
|
|
110
|
+
~stateViewSlices: array<module(ReventlessInfra.StateViewSlice.T)>,
|
|
111
|
+
~automationSlices: array<module(ReventlessInfra.AutomationSlice.T)>,
|
|
112
|
+
~outboundTranslationSlices: array<module(ReventlessInfra.OutboundTranslationSlice.T)>,
|
|
113
|
+
~inboundTranslationSlices: array<module(ReventlessInfra.InboundTranslationSlice.T)>,
|
|
114
|
+
) => {
|
|
115
|
+
let name = "Admin"
|
|
116
|
+
let opts: Pulumi.ComponentResource.options = {}
|
|
117
|
+
|
|
118
|
+
// Construct DCB components and derive DCB-specific API schema entries
|
|
119
|
+
module DcbBuilder = Dcb_Builder.Make(
|
|
120
|
+
DcbEventLogStorage,
|
|
121
|
+
DcbEventTopicPublisher,
|
|
122
|
+
DcbCommandTopicChannel,
|
|
123
|
+
DcbCommandTopicChannelAsync,
|
|
124
|
+
AdminRuntimeBuilder,
|
|
125
|
+
Config,
|
|
126
|
+
)
|
|
127
|
+
// Aggregates constructed early so multi-source AutomationSlices created
|
|
128
|
+
// inside DcbBuilder can subscribe to Aggregate event topics.
|
|
129
|
+
let aggregatesWithoutEventMappers = aggregates->createAggregatesWithoutEventMappers(~api, opts)
|
|
130
|
+
let aggregateEventTopics = Aggregate.allEventTopics(aggregatesWithoutEventMappers)
|
|
131
|
+
|
|
132
|
+
// Wire CommandGenerator → AppSync / in-memory GraphQL resolvers via
|
|
133
|
+
// `mutationResolverHook` and populate `aggregateMutationFieldsRegistry`.
|
|
134
|
+
// The matching SDL entries are owned by
|
|
135
|
+
// `PluginBaseFragment.pluginAggregateMutationEntries` (picked up via
|
|
136
|
+
// `AdminApi.mutationEntries`) so the AWS path that pushes
|
|
137
|
+
// `AdminApi.baseFragment` directly stays aligned with the in-memory path.
|
|
138
|
+
aggregates->Plugin_Helpers.registerAdminAggregateMutations(~hooks=Config.hooks)
|
|
139
|
+
|
|
140
|
+
let dcbResult = DcbBuilder.construct(
|
|
141
|
+
~name,
|
|
142
|
+
~childName=name,
|
|
143
|
+
~aggregateEventTopics,
|
|
144
|
+
~stateChangeSlices,
|
|
145
|
+
~stateViewSlices,
|
|
146
|
+
~automationSlices,
|
|
147
|
+
~outboundTranslationSlices,
|
|
148
|
+
~inboundTranslationSlices,
|
|
149
|
+
~opts,
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
// Admin schema — composed from actual config. `AdminApi.mutationEntries`
|
|
153
|
+
// already includes the auto-derived `Platform_Plugin_Activate`/`Deactivate`
|
|
154
|
+
// entries (via `PluginBaseFragment.pluginAggregateMutationEntries`) so the
|
|
155
|
+
// SDL stays in sync with the resolver wiring fired above.
|
|
156
|
+
let adminMutationEntries = AdminApi.mutationEntries(~cloner=Config.cloner)
|
|
157
|
+
let allMutationEntries = Array.concat(adminMutationEntries, dcbResult.mutationEntries)
|
|
158
|
+
let allQueryEntries = Array.concat(AdminApi.queryEntries, dcbResult.queryEntries)
|
|
159
|
+
let adminFragment = GraphQL_FragmentGenerator.generate(
|
|
160
|
+
~mutationEntries=allMutationEntries,
|
|
161
|
+
~queryEntries=allQueryEntries,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
// Register DCB schema entries via hooks (same path as plugins)
|
|
165
|
+
if dcbResult.mutationEntries->Array.length > 0 || dcbResult.queryEntries->Array.length > 0 {
|
|
166
|
+
switch Config.hooks.schemaTypeRegistrationHook {
|
|
167
|
+
| Some(registerTypes) =>
|
|
168
|
+
let parts = GraphQL_Stitcher.decode(adminFragment)
|
|
169
|
+
registerTypes(parts.types)
|
|
170
|
+
| None => ()
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
switch Config.hooks.mcpSchemaRegistrationHook {
|
|
174
|
+
| Some(registerMcp) =>
|
|
175
|
+
registerMcp({
|
|
176
|
+
pluginName: "Admin",
|
|
177
|
+
mutationEntries: allMutationEntries,
|
|
178
|
+
queryEntries: allQueryEntries,
|
|
179
|
+
eventLogEntries: dcbResult.eventLogEntries,
|
|
180
|
+
subscriptionFields: GraphQL_Stitcher.decode(adminFragment).subscriptions,
|
|
181
|
+
})
|
|
182
|
+
| None => ()
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Reuse aggregateEventTopics computed above as the base for ReadModels' allEventTopics.
|
|
187
|
+
let allEventTopics = aggregateEventTopics
|
|
188
|
+
switch dcbResult.dcbEventLogOutputs {
|
|
189
|
+
| Some(dcbOutputs) => allEventTopics->Dict.set(name ++ "DcbEventLog", dcbOutputs.eventTopic)
|
|
190
|
+
| None => ()
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Pre-populate the query field names + state schema registries for admin
|
|
194
|
+
// read models. Plugin_Builder does this for plugin-owned read models inside
|
|
195
|
+
// its own loop, but admin RMs are passed in from outside and skip that path.
|
|
196
|
+
// Without these entries, QueryDbResolvers_{AppSync,GraphQL}.make falls back
|
|
197
|
+
// to lowercased Spec.name field names (e.g. `plugin`/`plugins`), which don't
|
|
198
|
+
// match the `Platform_Plugin`/`Platform_Plugins` SDL fields declared by
|
|
199
|
+
// PluginBaseFragment.queryEntries — leaving the SDL fields without a
|
|
200
|
+
// resolver and producing "Cannot return null for non-nullable type" errors.
|
|
201
|
+
AdminApi.queryEntries->Array.forEach(entry => {
|
|
202
|
+
let prefix = "Platform_"
|
|
203
|
+
let entityName = if entry.returnTypeName->String.startsWith(prefix) {
|
|
204
|
+
entry.returnTypeName->String.slice(
|
|
205
|
+
~start=prefix->String.length,
|
|
206
|
+
~end=entry.returnTypeName->String.length,
|
|
207
|
+
)
|
|
208
|
+
} else {
|
|
209
|
+
entry.returnTypeName
|
|
210
|
+
}
|
|
211
|
+
// Registry key MUST match the read-model `Spec.name` because
|
|
212
|
+
// `QueryDbResolvers_{AppSync,GraphQL}.make` looks up the registry by
|
|
213
|
+
// `Spec.name` (which is also what `QueryDb_Builder.Make` passes as the
|
|
214
|
+
// `~name` argument). Prefer `entry.specName` when provided; fall back
|
|
215
|
+
// to the singular form derived from `returnTypeName` for backward
|
|
216
|
+
// compatibility with entries whose Spec.name equals the singular
|
|
217
|
+
// entity name (a read model whose `Spec.name` is already singular). Without this alignment,
|
|
218
|
+
// plural-named read models (e.g. `Plugins`) miss the registry and
|
|
219
|
+
// fall through to `name->uncapitalize` / `name ++ "s"` field names
|
|
220
|
+
// (`plugins`, `Pluginss`, `PluginssByIds`) that don't exist in the
|
|
221
|
+
// pushed SDL — CreateResolver then loops on
|
|
222
|
+
// `NotFoundException: No field named ...`.
|
|
223
|
+
let registryKey = entry.specName->Option.getOr(entityName)
|
|
224
|
+
let (labelField, _searchableFields) = Plugin_Structure.labelFieldsFromStateSchema(
|
|
225
|
+
~entityName,
|
|
226
|
+
entry.stateSchema,
|
|
227
|
+
)
|
|
228
|
+
let qn: Api_Naming.queryNames = {
|
|
229
|
+
singleFieldName: entry.singleFieldName,
|
|
230
|
+
listFieldName: entry.listFieldName,
|
|
231
|
+
returnTypeName: entry.returnTypeName,
|
|
232
|
+
pluralTypeName: entry.listFieldName,
|
|
233
|
+
includeIdParam: entry.includeIdParam->Option.getOr(true),
|
|
234
|
+
connectionSpec: entry.connectionSpec->Option.getOr(true),
|
|
235
|
+
labelField,
|
|
236
|
+
connectionFilterTypeName: entry.returnTypeName ++ "Filter",
|
|
237
|
+
}
|
|
238
|
+
Plugin_Helpers.queryFieldNamesRegistry->Dict.set(registryKey, qn)
|
|
239
|
+
Plugin_Helpers.stateSchemaRegistry->Dict.set(registryKey, entry.stateSchema)
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
let readModelsOutputs = readModels->createReadModels(~api, ~apiRole, allEventTopics, opts)
|
|
243
|
+
|
|
244
|
+
let allQueryDbs = readModelsOutputs->ReadModel.allQueryDbs
|
|
245
|
+
// Merge DCB StateViewSlice / InboundTranslation QueryDbs into allQueryDbs so the
|
|
246
|
+
// resolver-makers wired below also cover admin DCB slice fields (mirrors the
|
|
247
|
+
// plugin-side merge at Plugin_Builder.res).
|
|
248
|
+
dcbResult.stateViewSlicesOutputs
|
|
249
|
+
->Dict.toArray
|
|
250
|
+
->Array.forEach(((k, v)) => allQueryDbs->Dict.set(k, v.queryDb))
|
|
251
|
+
dcbResult.inboundTranslationSlicesOutputs
|
|
252
|
+
->Dict.toArray
|
|
253
|
+
->Array.forEach(((k, v)) => allQueryDbs->Dict.set(k, v.queryDb))
|
|
254
|
+
|
|
255
|
+
// Wire subscription infrastructure (StateTopic) for admin RMs + DCB slices.
|
|
256
|
+
// Mirrors Plugin_Builder's hook fire at Plugin_Builder.res:729 — gives the
|
|
257
|
+
// AWS platform access to admin's allQueryDbs / allEventTopics so the
|
|
258
|
+
// shared StateTopic Lambda's registry sees admin stream-enabled tables.
|
|
259
|
+
let eventLogEntriesFromAggregates =
|
|
260
|
+
aggregates->Array.map((module(M: ReventlessInfra.Aggregate.T with type api = api)) => {
|
|
261
|
+
ReventlessInfra.Api.busKey: M.Spec.name ++ "Aggr" ++ "EventLog",
|
|
262
|
+
displayName: M.Spec.name,
|
|
263
|
+
eventSchema: M.Spec.eventSchema->S.castToUnknown,
|
|
264
|
+
})
|
|
265
|
+
let eventLogEntries = Array.concat(eventLogEntriesFromAggregates, dcbResult.eventLogEntries)
|
|
266
|
+
Config.hooks.subscriptionInfraHook->Option.forEach(hook =>
|
|
267
|
+
hook({allQueryDbs, allEventTopics, eventLogEntries, opts})
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
let queryEngine = QueryEngineAdapter.make(allQueryDbs)
|
|
271
|
+
|
|
272
|
+
// Invoke each QueryDb's deferred resolversMaker so AppSync resolvers are
|
|
273
|
+
// actually attached to the admin-prefixed Connection fields (Platform_Plugins,
|
|
274
|
+
// …). Without this, ReadModel_Builder_Single
|
|
275
|
+
// produces the resolverMaker closure but it is never called, and AppSync
|
|
276
|
+
// returns "Cannot return null for non-nullable type" for the Connection field.
|
|
277
|
+
//
|
|
278
|
+
// Gate the actual CreateResolver SDK calls on the admin schema push (when
|
|
279
|
+
// the platform supplies preAdminResolversSchemaHook). AppSync holds an
|
|
280
|
+
// API-level lock during StartSchemaCreation and rejects concurrent
|
|
281
|
+
// CreateResolver / UpdateResolver / CreateDataSource with
|
|
282
|
+
// ConcurrentModificationException — mirrors Plugin_Builder's schemaPushed
|
|
283
|
+
// pattern at Plugin_Builder.res:452-466. The barrier collects:
|
|
284
|
+
// • the names of all admin read-model DDB resources, AND
|
|
285
|
+
// • each read model's AppSync DataSource name
|
|
286
|
+
// so the schema push waits for the underlying DDB tables *and* their
|
|
287
|
+
// DataSources to be fully created. Including DataSource names is what
|
|
288
|
+
// prevents the schema push from racing CreateDataSource on a freshly
|
|
289
|
+
// renamed read model (e.g. the Plugin → Plugins rename), where the new
|
|
290
|
+
// DataSource is still being created when StartSchemaCreation reports
|
|
291
|
+
// ACTIVE and the next CreateDataSource then hits a busy API with a 409.
|
|
292
|
+
// Platforms with no hook (e.g. in-memory) return an already-resolved
|
|
293
|
+
// Output and createResolvers fires immediately, as before.
|
|
294
|
+
let adminBarrier = {
|
|
295
|
+
let resourceNames =
|
|
296
|
+
readModelsOutputs
|
|
297
|
+
->Dict.valuesToArray
|
|
298
|
+
->Array.flatMap(rm => rm.queryDb.resources->Array.map(r => r.name))
|
|
299
|
+
let dataSourceNames =
|
|
300
|
+
readModelsOutputs
|
|
301
|
+
->Dict.valuesToArray
|
|
302
|
+
->Array.map(rm => rm.queryDb.dataSourceName)
|
|
303
|
+
resourceNames
|
|
304
|
+
->Array.concat(dataSourceNames)
|
|
305
|
+
->Pulumi.Output.all
|
|
306
|
+
->Pulumi.Output.apply(_ => ())
|
|
307
|
+
}
|
|
308
|
+
let adminSchemaPushed = switch Config.hooks.preAdminResolversSchemaHook {
|
|
309
|
+
| Some(push) => push(~adminBarrier)
|
|
310
|
+
| None => Pulumi.Output.make()
|
|
311
|
+
}
|
|
312
|
+
let _resolvers = adminSchemaPushed->Pulumi.Output.apply(() =>
|
|
313
|
+
allQueryDbs->createResolvers
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
let extensionPointsOutputs =
|
|
317
|
+
(
|
|
318
|
+
aggregateResources->Pulumi.Output.allDict,
|
|
319
|
+
publishToAggregates->Pulumi.Output.allDict,
|
|
320
|
+
queryEngine,
|
|
321
|
+
scheduler,
|
|
322
|
+
)
|
|
323
|
+
->Pulumi.Output.all4
|
|
324
|
+
->Pulumi.Output.apply(((aggregateResources, publishToAggregates, queryEngine, scheduler)) => {
|
|
325
|
+
let _aggregatesOutputs = addEventMappers(allEventTopics, queryEngine)
|
|
326
|
+
|
|
327
|
+
let (
|
|
328
|
+
extensionPointsOutputs,
|
|
329
|
+
extensionPointsOutgoingJsonEventsHandlers,
|
|
330
|
+
_extensionPointRegistryInfos,
|
|
331
|
+
) =
|
|
332
|
+
extensionPoints->createExtensionPoints(
|
|
333
|
+
~aggregateResources,
|
|
334
|
+
~publishToAggregates,
|
|
335
|
+
~scheduler,
|
|
336
|
+
~queryEngine,
|
|
337
|
+
~resourceNaming,
|
|
338
|
+
~opts,
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
let aggregateNames =
|
|
342
|
+
extensionPointsOutputs
|
|
343
|
+
->Array.map(extensionPointOutputs =>
|
|
344
|
+
extensionPointOutputs.aggregateNames->Belt.Set.String.fromArray
|
|
345
|
+
)
|
|
346
|
+
->Array.reduce(Belt.Set.String.empty, (acc, names) => acc->Belt.Set.String.union(names))
|
|
347
|
+
|
|
348
|
+
let aggregatesOutputs = addEventMappers(allEventTopics, queryEngine)
|
|
349
|
+
let eventTopics = aggregatesOutputs->Aggregate.filterEventTopics(aggregateNames)
|
|
350
|
+
|
|
351
|
+
module EventCollectorHelper = MakeEventCollectorHelper(
|
|
352
|
+
RuntimeEnvironment,
|
|
353
|
+
EventCollectorChannel,
|
|
354
|
+
AdminRuntimeBuilder,
|
|
355
|
+
)
|
|
356
|
+
let (eventCollector, _eventCollectorOutputs) = EventCollectorHelper.make(
|
|
357
|
+
~name,
|
|
358
|
+
~eventTopics,
|
|
359
|
+
~opts,
|
|
360
|
+
)
|
|
361
|
+
|
|
362
|
+
let _ =
|
|
363
|
+
extensionPointsOutgoingJsonEventsHandlers
|
|
364
|
+
->Pulumi.Output.all
|
|
365
|
+
->Pulumi.Output.flatMap(extensionPointsOutgoingJsonEventsHandlers =>
|
|
366
|
+
EventCollectorHelper.connect(
|
|
367
|
+
~eventCollector,
|
|
368
|
+
~eventTopics,
|
|
369
|
+
~extensionPointsOutputs,
|
|
370
|
+
~extensionPointsOutgoingJsonEventsHandlers,
|
|
371
|
+
)
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
// Connect DCB command topic to its runtime (if DCB is configured)
|
|
375
|
+
dcbResult.dcbRuntimeSetup->Option.forEach(dcbRuntimeSetup => dcbRuntimeSetup())
|
|
376
|
+
|
|
377
|
+
extensionPointsOutputs
|
|
378
|
+
})
|
|
379
|
+
|
|
380
|
+
// Cloner (opt-in)
|
|
381
|
+
if Config.cloner {
|
|
382
|
+
module Cloner = Cloner.Make(ClonerRunner)
|
|
383
|
+
let _cloner = Cloner.make(~api, ~opts)
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
{
|
|
387
|
+
adminFragment,
|
|
388
|
+
dcbMutationEntries: dcbResult.mutationEntries,
|
|
389
|
+
dcbQueryEntries: dcbResult.queryEntries,
|
|
390
|
+
dcbEventLogEntries: dcbResult.eventLogEntries,
|
|
391
|
+
extensionPointsOutputs,
|
|
392
|
+
aggregatesOutputs: aggregatesWithoutEventMappers,
|
|
393
|
+
readModelsOutputs,
|
|
394
|
+
dcbEventLogOutputs: dcbResult.dcbEventLogOutputs,
|
|
395
|
+
stateChangeSlicesOutputs: dcbResult.stateChangeSlicesOutputs,
|
|
396
|
+
stateViewSlicesOutputs: dcbResult.stateViewSlicesOutputs,
|
|
397
|
+
automationSlicesOutputs: dcbResult.automationSlicesOutputs,
|
|
398
|
+
outboundTranslationSlicesOutputs: dcbResult.outboundTranslationSlicesOutputs,
|
|
399
|
+
inboundTranslationSlicesOutputs: dcbResult.inboundTranslationSlicesOutputs,
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|