@reventlessdev/reventless-local 3.0.0-alpha.142 → 3.0.0-alpha.143
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 +14 -0
- package/package.json +8 -8
- package/src/Platform.res +252 -110
- package/src/Platform.res.mjs +522 -166
- package/src/adapter/Api/LocalGraphQL_SubscriptionResolvers.res +3 -3
- package/src/components/Aggregate_Builder.res +1 -0
- package/src/components/Aggregate_Builder.res.mjs +5 -0
- package/tests/PluginEventDecodeTest.res +47 -0
- package/tests/PluginEventDecodeTest.res.mjs +33 -0
- package/tests/adapter/GraphQLSubscriptionBridgeTest.res +6 -7
- package/tests/adapter/GraphQLSubscriptionBridgeTest.res.mjs +2 -3
- package/tests/plugin/ApiFragmentRegistry_GWT.res +103 -0
- package/tests/plugin/ApiFragmentRegistry_GWT.res.mjs +196 -0
- package/tests/plugin/ApiFragments_GWT.res +103 -0
- package/tests/plugin/ApiFragments_GWT.res.mjs +170 -0
- package/tests/plugin/PluginBehavior_GWT.res +2 -18
- package/tests/plugin/PluginBehavior_GWT.res.mjs +0 -37
- package/tests/plugin/Plugin_Fixtures.res +0 -7
- package/tests/plugin/Plugin_Fixtures.res.mjs +0 -21
- package/tests/plugin/PluginsProjection_GWT.res +0 -12
- package/tests/plugin/PluginsProjection_GWT.res.mjs +0 -19
- package/tests/plugin/UiFragmentRegistry_GWT.res +53 -0
- package/tests/plugin/UiFragmentRegistry_GWT.res.mjs +92 -0
- package/tests/plugin/UiFragments_GWT.res +55 -0
- package/tests/plugin/UiFragments_GWT.res.mjs +84 -0
- package/tests/plugin/UIFragmentRegistryProjection_GWT.res +0 -72
- package/tests/plugin/UIFragmentRegistryProjection_GWT.res.mjs +0 -117
package/src/Platform.res.mjs
CHANGED
|
@@ -25,9 +25,12 @@ import * as PluginSpec$ReventlessCore from "@reventlessdev/reventless-core/src/p
|
|
|
25
25
|
import * as UserStore$ReventlessLocal from "./adapter/Auth/UserStore.res.mjs";
|
|
26
26
|
import * as Api_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/Api_Builder.res.mjs";
|
|
27
27
|
import * as TestRunner$ReventlessLocal from "./test/TestRunner.res.mjs";
|
|
28
|
+
import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs";
|
|
29
|
+
import * as ApiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments.res.mjs";
|
|
28
30
|
import * as CommandTopic$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic.res.mjs";
|
|
29
31
|
import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src/util/EffectLogger.res.mjs";
|
|
30
32
|
import * as BackendState$ReventlessLocal from "./adapter/BackendState.res.mjs";
|
|
33
|
+
import * as ComponentType$ReventlessCore from "@reventlessdev/reventless-core/src/ComponentType.res.mjs";
|
|
31
34
|
import * as SqliteDriver$ReventlessLocal from "./adapter/SqliteDriver.res.mjs";
|
|
32
35
|
import * as Task_Builder$ReventlessLocal from "./components/Task_Builder.res.mjs";
|
|
33
36
|
import * as Platform_Admin$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin.res.mjs";
|
|
@@ -48,9 +51,10 @@ import * as LocalClonerRunner$ReventlessLocal from "./adapter/Cloner/LocalCloner
|
|
|
48
51
|
import * as PluginBaseFragment$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/api/PluginBaseFragment.res.mjs";
|
|
49
52
|
import * as ProjectionPending$ReventlessLocal from "./adapter/ProjectionPending.res.mjs";
|
|
50
53
|
import * as ReadModel_Builder$ReventlessLocal from "./components/ReadModel_Builder.res.mjs";
|
|
54
|
+
import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs";
|
|
55
|
+
import * as ApiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry.res.mjs";
|
|
51
56
|
import * as PlatformMCP_Server$ReventlessLocal from "./adapter/PlatformMCP_Server.res.mjs";
|
|
52
57
|
import * as Auth_GraphqlContext$ReventlessLocal from "./adapter/Auth/Auth_GraphqlContext.res.mjs";
|
|
53
|
-
import * as LocalQueryDbStorage$ReventlessLocal from "./adapter/QueryDb/LocalQueryDbStorage.res.mjs";
|
|
54
58
|
import * as PgProjectionCatchup$ReventlessLocal from "./adapter/PgProjectionCatchup.res.mjs";
|
|
55
59
|
import * as PluginsReadModelSpec$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs";
|
|
56
60
|
import * as DomainGraphQL_Server$ReventlessLocal from "./adapter/DomainGraphQL_Server.res.mjs";
|
|
@@ -58,6 +62,8 @@ import * as EventPublish_Callback$ReventlessCore from "@reventlessdev/reventless
|
|
|
58
62
|
import * as LocalGraphQL_Adapter$ReventlessLocal from "./adapter/Api/LocalGraphQL_Adapter.res.mjs";
|
|
59
63
|
import * as ProjectionCheckpoint$ReventlessLocal from "./adapter/ProjectionCheckpoint.res.mjs";
|
|
60
64
|
import * as ExtensionPointMapping$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/ExtensionPointMapping.res.mjs";
|
|
65
|
+
import * as UiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res.mjs";
|
|
66
|
+
import * as ApiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments_Projection.res.mjs";
|
|
61
67
|
import * as EventLogStorage_Sqlite$ReventlessLocal from "./adapter/EventLog/EventLogStorage_Sqlite.res.mjs";
|
|
62
68
|
import * as ExtensionPoint_Builder$ReventlessLocal from "./components/ExtensionPoint_Builder.res.mjs";
|
|
63
69
|
import * as PlatformGraphQL_Server$ReventlessLocal from "./adapter/PlatformGraphQL_Server.res.mjs";
|
|
@@ -68,13 +74,15 @@ import * as LocalDcbEventLogStorage$ReventlessLocal from "./adapter/DcbEventLog/
|
|
|
68
74
|
import * as LocalRuntimeEnvironment$ReventlessLocal from "./adapter/Runtime/LocalRuntimeEnvironment.res.mjs";
|
|
69
75
|
import * as LocalScheduledPublisher$ReventlessLocal from "./adapter/Scheduler/LocalScheduledPublisher.res.mjs";
|
|
70
76
|
import * as Platform_Admin_Structure$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin_Structure.res.mjs";
|
|
77
|
+
import * as Platform_ApiFragmentsApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_ApiFragmentsApi.res.mjs";
|
|
71
78
|
import * as LocalCommandTopicChannel$ReventlessLocal from "./adapter/CommandTopic/LocalCommandTopicChannel.res.mjs";
|
|
72
79
|
import * as LocalEventTopicPublisher$ReventlessLocal from "./adapter/EventTopic/LocalEventTopicPublisher.res.mjs";
|
|
73
80
|
import * as StateChangeSlice_Builder$ReventlessLocal from "./components/StateChangeSlice_Builder.res.mjs";
|
|
74
81
|
import * as DcbEventLogStorage_Sqlite$ReventlessLocal from "./adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs";
|
|
75
82
|
import * as LocalEventCollectorChannel$ReventlessLocal from "./adapter/EventCollector/LocalEventCollectorChannel.res.mjs";
|
|
76
83
|
import * as PluginRuntime_Builder_Micro$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs";
|
|
77
|
-
import * as
|
|
84
|
+
import * as UiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry_Behavior.res.mjs";
|
|
85
|
+
import * as ApiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry_Behavior.res.mjs";
|
|
78
86
|
import * as InboundTranslationSlice_Builder$ReventlessLocal from "./components/InboundTranslationSlice_Builder.res.mjs";
|
|
79
87
|
import * as Platform_ComponentDefinitionsApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_ComponentDefinitionsApi.res.mjs";
|
|
80
88
|
import * as OutboundTranslationSlice_Builder$ReventlessLocal from "./components/OutboundTranslationSlice_Builder.res.mjs";
|
|
@@ -106,6 +114,22 @@ function decodePluginEventEnvelope(eventJson) {
|
|
|
106
114
|
}
|
|
107
115
|
}
|
|
108
116
|
|
|
117
|
+
function decodeUiFragmentRegistryEventEnvelope(eventJson) {
|
|
118
|
+
try {
|
|
119
|
+
return Stdlib_Option.map(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(eventJson), d => d["event"]), payload => S.parseJsonOrThrow(payload, UiFragmentRegistry$ReventlessCore.eventSchema));
|
|
120
|
+
} catch (exn) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function decodeApiFragmentRegistryEventEnvelope(eventJson) {
|
|
126
|
+
try {
|
|
127
|
+
return Stdlib_Option.map(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(eventJson), d => d["event"]), payload => S.parseJsonOrThrow(payload, ApiFragmentRegistry$ReventlessCore.eventSchema));
|
|
128
|
+
} catch (exn) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
109
133
|
function MakeWithConfig(Config) {
|
|
110
134
|
TestRunner$ReventlessLocal.setup();
|
|
111
135
|
let match = Config.backend;
|
|
@@ -397,6 +421,9 @@ function MakeWithConfig(Config) {
|
|
|
397
421
|
let hooks_apiRole = {
|
|
398
422
|
contents: undefined
|
|
399
423
|
};
|
|
424
|
+
let hooks_adminApi = {
|
|
425
|
+
contents: undefined
|
|
426
|
+
};
|
|
400
427
|
let hooks_deployTarget = {
|
|
401
428
|
contents: "Domain"
|
|
402
429
|
};
|
|
@@ -412,6 +439,7 @@ function MakeWithConfig(Config) {
|
|
|
412
439
|
schedulerRoleUrn: hooks_schedulerRoleUrn,
|
|
413
440
|
api: hooks_api,
|
|
414
441
|
apiRole: hooks_apiRole,
|
|
442
|
+
adminApi: hooks_adminApi,
|
|
415
443
|
deployTarget: hooks_deployTarget
|
|
416
444
|
};
|
|
417
445
|
let AggregateMaker = Aggregate_Builder$ReventlessLocal.MakeWithHooks(Bus)({
|
|
@@ -578,6 +606,108 @@ function MakeWithConfig(Config) {
|
|
|
578
606
|
let StateViewSlice = {
|
|
579
607
|
Make: Make$7
|
|
580
608
|
};
|
|
609
|
+
let Spec = {
|
|
610
|
+
name: UiFragmentRegistry$ReventlessCore.name,
|
|
611
|
+
moduleUrl: UiFragmentRegistry$ReventlessCore.moduleUrl,
|
|
612
|
+
Id: Id$Reventless.$$String,
|
|
613
|
+
consumedEventSchema: UiFragmentRegistry$ReventlessCore.consumedEventSchema,
|
|
614
|
+
errorSchema: UiFragmentRegistry$ReventlessCore.errorSchema,
|
|
615
|
+
eventSchema: UiFragmentRegistry$ReventlessCore.eventSchema,
|
|
616
|
+
commandSchema: UiFragmentRegistry$ReventlessCore.commandSchema,
|
|
617
|
+
commandAuthorization: UiFragmentRegistry$ReventlessCore.commandAuthorization,
|
|
618
|
+
readConsistency: UiFragmentRegistry$ReventlessCore.readConsistency
|
|
619
|
+
};
|
|
620
|
+
let Behavior = {
|
|
621
|
+
initialState: undefined,
|
|
622
|
+
evolve: UiFragmentRegistry_Behavior$ReventlessCore.evolve,
|
|
623
|
+
decide: UiFragmentRegistry_Behavior$ReventlessCore.decide,
|
|
624
|
+
moduleUrl: UiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
|
|
625
|
+
};
|
|
626
|
+
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
|
|
627
|
+
let UiFragmentRegistrySlice_Spec = $$let.Spec;
|
|
628
|
+
let UiFragmentRegistrySlice_Behavior = $$let.Behavior;
|
|
629
|
+
let UiFragmentRegistrySlice_isAsync = $$let.isAsync;
|
|
630
|
+
let UiFragmentRegistrySlice_make = $$let.make;
|
|
631
|
+
let UiFragmentRegistrySlice = {
|
|
632
|
+
Spec: UiFragmentRegistrySlice_Spec,
|
|
633
|
+
Behavior: UiFragmentRegistrySlice_Behavior,
|
|
634
|
+
isAsync: UiFragmentRegistrySlice_isAsync,
|
|
635
|
+
make: UiFragmentRegistrySlice_make
|
|
636
|
+
};
|
|
637
|
+
let Spec$1 = {
|
|
638
|
+
name: UiFragments$ReventlessCore.name,
|
|
639
|
+
moduleUrl: UiFragments$ReventlessCore.moduleUrl,
|
|
640
|
+
stateSchema: UiFragments$ReventlessCore.stateSchema,
|
|
641
|
+
consumedEventSchema: UiFragments$ReventlessCore.consumedEventSchema,
|
|
642
|
+
config: UiFragments$ReventlessCore.config,
|
|
643
|
+
subIdConfig: undefined,
|
|
644
|
+
authorization: UiFragments$ReventlessCore.authorization,
|
|
645
|
+
visibility: UiFragments$ReventlessCore.visibility
|
|
646
|
+
};
|
|
647
|
+
let Projection = {
|
|
648
|
+
project: UiFragments_Projection$ReventlessCore.project,
|
|
649
|
+
moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
|
|
650
|
+
};
|
|
651
|
+
let $$let$1 = StateViewSliceMaker.Make(Spec$1)(Projection);
|
|
652
|
+
let UiFragmentsViewSlice_Spec = $$let$1.Spec;
|
|
653
|
+
let UiFragmentsViewSlice_Projection = $$let$1.Projection;
|
|
654
|
+
let UiFragmentsViewSlice_make = $$let$1.make;
|
|
655
|
+
let UiFragmentsViewSlice = {
|
|
656
|
+
Spec: UiFragmentsViewSlice_Spec,
|
|
657
|
+
Projection: UiFragmentsViewSlice_Projection,
|
|
658
|
+
make: UiFragmentsViewSlice_make
|
|
659
|
+
};
|
|
660
|
+
let Spec$2 = {
|
|
661
|
+
name: ApiFragmentRegistry$ReventlessCore.name,
|
|
662
|
+
moduleUrl: ApiFragmentRegistry$ReventlessCore.moduleUrl,
|
|
663
|
+
Id: Id$Reventless.$$String,
|
|
664
|
+
consumedEventSchema: ApiFragmentRegistry$ReventlessCore.consumedEventSchema,
|
|
665
|
+
errorSchema: ApiFragmentRegistry$ReventlessCore.errorSchema,
|
|
666
|
+
eventSchema: ApiFragmentRegistry$ReventlessCore.eventSchema,
|
|
667
|
+
commandSchema: ApiFragmentRegistry$ReventlessCore.commandSchema,
|
|
668
|
+
commandAuthorization: ApiFragmentRegistry$ReventlessCore.commandAuthorization,
|
|
669
|
+
readConsistency: ApiFragmentRegistry$ReventlessCore.readConsistency
|
|
670
|
+
};
|
|
671
|
+
let Behavior$1 = {
|
|
672
|
+
initialState: undefined,
|
|
673
|
+
evolve: ApiFragmentRegistry_Behavior$ReventlessCore.evolve,
|
|
674
|
+
decide: ApiFragmentRegistry_Behavior$ReventlessCore.decide,
|
|
675
|
+
moduleUrl: ApiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
|
|
676
|
+
};
|
|
677
|
+
let $$let$2 = StateChangeSlice_Builder$ReventlessLocal.Make(Spec$2)(Behavior$1);
|
|
678
|
+
let ApiFragmentRegistrySlice_Spec = $$let$2.Spec;
|
|
679
|
+
let ApiFragmentRegistrySlice_Behavior = $$let$2.Behavior;
|
|
680
|
+
let ApiFragmentRegistrySlice_isAsync = $$let$2.isAsync;
|
|
681
|
+
let ApiFragmentRegistrySlice_make = $$let$2.make;
|
|
682
|
+
let ApiFragmentRegistrySlice = {
|
|
683
|
+
Spec: ApiFragmentRegistrySlice_Spec,
|
|
684
|
+
Behavior: ApiFragmentRegistrySlice_Behavior,
|
|
685
|
+
isAsync: ApiFragmentRegistrySlice_isAsync,
|
|
686
|
+
make: ApiFragmentRegistrySlice_make
|
|
687
|
+
};
|
|
688
|
+
let Spec$3 = {
|
|
689
|
+
name: ApiFragments$ReventlessCore.name,
|
|
690
|
+
moduleUrl: ApiFragments$ReventlessCore.moduleUrl,
|
|
691
|
+
stateSchema: ApiFragments$ReventlessCore.stateSchema,
|
|
692
|
+
consumedEventSchema: ApiFragments$ReventlessCore.consumedEventSchema,
|
|
693
|
+
config: ApiFragments$ReventlessCore.config,
|
|
694
|
+
subIdConfig: undefined,
|
|
695
|
+
authorization: ApiFragments$ReventlessCore.authorization,
|
|
696
|
+
visibility: ApiFragments$ReventlessCore.visibility
|
|
697
|
+
};
|
|
698
|
+
let Projection$1 = {
|
|
699
|
+
project: ApiFragments_Projection$ReventlessCore.project,
|
|
700
|
+
moduleUrl: ApiFragments_Projection$ReventlessCore.moduleUrl
|
|
701
|
+
};
|
|
702
|
+
let $$let$3 = StateViewSliceMaker.Make(Spec$3)(Projection$1);
|
|
703
|
+
let ApiFragmentsViewSlice_Spec = $$let$3.Spec;
|
|
704
|
+
let ApiFragmentsViewSlice_Projection = $$let$3.Projection;
|
|
705
|
+
let ApiFragmentsViewSlice_make = $$let$3.make;
|
|
706
|
+
let ApiFragmentsViewSlice = {
|
|
707
|
+
Spec: ApiFragmentsViewSlice_Spec,
|
|
708
|
+
Projection: ApiFragmentsViewSlice_Projection,
|
|
709
|
+
make: ApiFragmentsViewSlice_make
|
|
710
|
+
};
|
|
581
711
|
let Make$8 = Spec => (Projection => {
|
|
582
712
|
let $$let = StateViewSliceMaker.Make(Spec)(Projection);
|
|
583
713
|
return {
|
|
@@ -621,7 +751,8 @@ function MakeWithConfig(Config) {
|
|
|
621
751
|
types: [],
|
|
622
752
|
mutations: [],
|
|
623
753
|
queries: [],
|
|
624
|
-
subscriptions: []
|
|
754
|
+
subscriptions: [],
|
|
755
|
+
subscriptionSources: []
|
|
625
756
|
});
|
|
626
757
|
let Make$12 = FragmentConfig => {
|
|
627
758
|
let Builder = Api_Builder$ReventlessCore.Make(LocalGraphQL_Adapter$ReventlessLocal);
|
|
@@ -647,7 +778,7 @@ function MakeWithConfig(Config) {
|
|
|
647
778
|
};
|
|
648
779
|
let EventCollectorChannel = LocalEventCollectorChannel$ReventlessLocal.Make(Bus);
|
|
649
780
|
let QE = LocalQueryEngine$ReventlessLocal.Make(Bus);
|
|
650
|
-
let $$let = AggregateMaker.Make({
|
|
781
|
+
let $$let$4 = AggregateMaker.Make({
|
|
651
782
|
Id: Id$Reventless.$$String,
|
|
652
783
|
name: PluginSpec$ReventlessCore.name,
|
|
653
784
|
eventSchema: PluginSpec$ReventlessCore.eventSchema,
|
|
@@ -666,11 +797,11 @@ function MakeWithConfig(Config) {
|
|
|
666
797
|
Id: Id$Reventless.$$String,
|
|
667
798
|
commandSchema: PluginSpec$ReventlessCore.commandSchema
|
|
668
799
|
}));
|
|
669
|
-
let LocalPluginAggregate_Spec = $$let.Spec;
|
|
670
|
-
let LocalPluginAggregate_make = $$let.make;
|
|
671
|
-
let LocalPluginAggregate_outputs = $$let.outputs;
|
|
672
|
-
let LocalPluginAggregate_operations = $$let.operations;
|
|
673
|
-
let LocalPluginAggregate_finish = $$let.finish;
|
|
800
|
+
let LocalPluginAggregate_Spec = $$let$4.Spec;
|
|
801
|
+
let LocalPluginAggregate_make = $$let$4.make;
|
|
802
|
+
let LocalPluginAggregate_outputs = $$let$4.outputs;
|
|
803
|
+
let LocalPluginAggregate_operations = $$let$4.operations;
|
|
804
|
+
let LocalPluginAggregate_finish = $$let$4.finish;
|
|
674
805
|
let LocalPluginAggregate = {
|
|
675
806
|
Spec: LocalPluginAggregate_Spec,
|
|
676
807
|
make: LocalPluginAggregate_make,
|
|
@@ -692,8 +823,8 @@ function MakeWithConfig(Config) {
|
|
|
692
823
|
authorization: PluginsReadModelSpec$ReventlessCore.authorization,
|
|
693
824
|
visibility: PluginsReadModelSpec$ReventlessCore.visibility
|
|
694
825
|
})(PluginsReadModelMappings);
|
|
695
|
-
let $$let$
|
|
696
|
-
let $$let$
|
|
826
|
+
let $$let$5 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
|
|
827
|
+
let $$let$6 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
|
|
697
828
|
let Admin = Platform_Admin$ReventlessCore.Make({
|
|
698
829
|
make: LocalRuntimeEnvironment$ReventlessLocal.make,
|
|
699
830
|
groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
|
|
@@ -709,9 +840,9 @@ function MakeWithConfig(Config) {
|
|
|
709
840
|
asEventHandler: prim => prim,
|
|
710
841
|
asEffectHandler: prim => prim
|
|
711
842
|
})(EventCollectorChannel))(LocalDcbEventLogStorage$ReventlessLocal.Make(Bus))(LocalEventTopicPublisher$ReventlessLocal.Make(Bus))({
|
|
712
|
-
make: $$let$
|
|
843
|
+
make: $$let$5.make
|
|
713
844
|
})({
|
|
714
|
-
make: $$let$
|
|
845
|
+
make: $$let$6.make
|
|
715
846
|
})({
|
|
716
847
|
silent: Config.silent,
|
|
717
848
|
splitApi: Config.splitApi,
|
|
@@ -731,20 +862,6 @@ function MakeWithConfig(Config) {
|
|
|
731
862
|
let domainMcpPort = resolvePort("REVENTLESS_DOMAIN_MCP_PORT", 3001);
|
|
732
863
|
let platformPort = resolvePort("REVENTLESS_PLATFORM_PORT", 4001);
|
|
733
864
|
let platformMcpPort = resolvePort("REVENTLESS_PLATFORM_MCP_PORT", 3002);
|
|
734
|
-
let uiFragmentQueryDbOpsRef = {
|
|
735
|
-
contents: undefined
|
|
736
|
-
};
|
|
737
|
-
let UIFragmentStorage = LocalQueryDbStorage$ReventlessLocal.Make(Bus);
|
|
738
|
-
let ensureUIFragmentRegistryQueryDbStore = () => {
|
|
739
|
-
let ops = uiFragmentQueryDbOpsRef.contents;
|
|
740
|
-
if (ops !== undefined) {
|
|
741
|
-
return ops;
|
|
742
|
-
}
|
|
743
|
-
UIFragmentStorage.make(UIFragmentRegistryReadModelSpec$ReventlessCore.name, [], undefined, undefined, undefined, undefined, {});
|
|
744
|
-
let ops$1 = Stdlib_Option.getOrThrow(Bus.getQueryDb(UIFragmentRegistryReadModelSpec$ReventlessCore.name), undefined);
|
|
745
|
-
uiFragmentQueryDbOpsRef.contents = ops$1;
|
|
746
|
-
return ops$1;
|
|
747
|
-
};
|
|
748
865
|
let pluginStructuresStore = {
|
|
749
866
|
contents: {}
|
|
750
867
|
};
|
|
@@ -775,8 +892,43 @@ function MakeWithConfig(Config) {
|
|
|
775
892
|
};
|
|
776
893
|
return Bus.dispatchCommand(pluginCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
|
|
777
894
|
};
|
|
895
|
+
let adminDcbCmdTopicKey = ComponentType$ReventlessCore.name("AdminDcb", "CommandTopic");
|
|
896
|
+
let dispatchUiFragmentCommand = (pluginName, command) => {
|
|
897
|
+
let cmdJson_meta = Message$ReventlessCore.generateMeta(UiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
|
|
898
|
+
let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, UiFragmentRegistry$ReventlessCore.commandSchema);
|
|
899
|
+
let cmdJson = {
|
|
900
|
+
id: pluginName,
|
|
901
|
+
meta: cmdJson_meta,
|
|
902
|
+
commandJson: cmdJson_commandJson
|
|
903
|
+
};
|
|
904
|
+
return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
|
|
905
|
+
};
|
|
906
|
+
let dispatchApiFragmentCommand = (pluginName, command) => {
|
|
907
|
+
let cmdJson_meta = Message$ReventlessCore.generateMeta(ApiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
|
|
908
|
+
let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, ApiFragmentRegistry$ReventlessCore.commandSchema);
|
|
909
|
+
let cmdJson = {
|
|
910
|
+
id: pluginName,
|
|
911
|
+
meta: cmdJson_meta,
|
|
912
|
+
commandJson: cmdJson_commandJson
|
|
913
|
+
};
|
|
914
|
+
return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
|
|
915
|
+
};
|
|
916
|
+
let apiFragmentsQueryResolver = async (_root, _args, _ctx) => {
|
|
917
|
+
let scanAll = Bus.getQueryDbScan(ApiFragments$ReventlessCore.name);
|
|
918
|
+
let items = scanAll !== undefined ? scanAll() : [];
|
|
919
|
+
return Stdlib_Array.filterMap(items, item => {
|
|
920
|
+
let state;
|
|
921
|
+
try {
|
|
922
|
+
state = S.parseOrThrow(item, ApiFragments$ReventlessCore.stateSchema);
|
|
923
|
+
} catch (exn) {
|
|
924
|
+
return;
|
|
925
|
+
}
|
|
926
|
+
return Platform_ApiFragmentsApi$ReventlessCore.encodeApiFragmentEntry(state);
|
|
927
|
+
});
|
|
928
|
+
};
|
|
778
929
|
let pluginStatusSubTopic = "onPluginStatusChange";
|
|
779
930
|
let uiFragmentSubTopic = "onUIFragmentChange";
|
|
931
|
+
let adminDcbEventTopicKey = ComponentType$ReventlessCore.name("Admin", "EventTopic");
|
|
780
932
|
let pluginEventsSubscribed = {
|
|
781
933
|
contents: false
|
|
782
934
|
};
|
|
@@ -825,18 +977,49 @@ function MakeWithConfig(Config) {
|
|
|
825
977
|
case "VersionSuperseded" :
|
|
826
978
|
case "IncompatiblePluginDetected" :
|
|
827
979
|
return;
|
|
828
|
-
case "UIFragmentRegistered" :
|
|
829
|
-
let data = match._0;
|
|
830
|
-
return publishUIFragment(Plugin$ReventlessCore.name(data.pluginId), "Registered", S.reverseConvertToJsonOrThrow(data.manifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
831
|
-
case "UIFragmentUpdated" :
|
|
832
|
-
let data$1 = match._0;
|
|
833
|
-
return publishUIFragment(Plugin$ReventlessCore.name(data$1.pluginId), "Updated", S.reverseConvertToJsonOrThrow(data$1.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
834
|
-
case "UIFragmentDeregistered" :
|
|
835
|
-
return publishUIFragment(Plugin$ReventlessCore.name(match._0.pluginId), "Deregistered", null);
|
|
836
980
|
default:
|
|
837
981
|
return publishStatus(match._0.name, "Connected");
|
|
838
982
|
}
|
|
839
983
|
});
|
|
984
|
+
Bus.subscribeToEvents(adminDcbEventTopicKey, async (service, _meta, eventJson) => {
|
|
985
|
+
if (service !== "AdminDcbEventLog") {
|
|
986
|
+
return;
|
|
987
|
+
}
|
|
988
|
+
let match = decodeUiFragmentRegistryEventEnvelope(eventJson);
|
|
989
|
+
if (match !== undefined) {
|
|
990
|
+
switch (match.TAG) {
|
|
991
|
+
case "UiFragmentRegistered" :
|
|
992
|
+
publishUIFragment(match.pluginId, "Registered", S.reverseConvertToJsonOrThrow(match.manifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
993
|
+
break;
|
|
994
|
+
case "UiFragmentUpdated" :
|
|
995
|
+
publishUIFragment(match.pluginId, "Updated", S.reverseConvertToJsonOrThrow(match.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
996
|
+
break;
|
|
997
|
+
case "UiFragmentDeregistered" :
|
|
998
|
+
publishUIFragment(match.pluginId, "Deregistered", null);
|
|
999
|
+
break;
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
let match$1 = decodeApiFragmentRegistryEventEnvelope(eventJson);
|
|
1003
|
+
if (match$1 === undefined) {
|
|
1004
|
+
return;
|
|
1005
|
+
}
|
|
1006
|
+
switch (match$1.TAG) {
|
|
1007
|
+
case "ApiFragmentRegistered" :
|
|
1008
|
+
case "ApiFragmentUpdated" :
|
|
1009
|
+
break;
|
|
1010
|
+
case "ApiFragmentDeregistered" :
|
|
1011
|
+
case "ApiFragmentPushRecorded" :
|
|
1012
|
+
return;
|
|
1013
|
+
}
|
|
1014
|
+
let pluginId = match$1.pluginId;
|
|
1015
|
+
dispatchApiFragmentCommand(pluginId, {
|
|
1016
|
+
TAG: "RecordApiFragmentPush",
|
|
1017
|
+
pluginId: pluginId,
|
|
1018
|
+
ok: true,
|
|
1019
|
+
message: "",
|
|
1020
|
+
at: new Date().toISOString()
|
|
1021
|
+
});
|
|
1022
|
+
});
|
|
840
1023
|
};
|
|
841
1024
|
let connectPlugin = pluginComponents => {
|
|
842
1025
|
pluginComponents.forEach(plugin => {
|
|
@@ -851,6 +1034,8 @@ function MakeWithConfig(Config) {
|
|
|
851
1034
|
outputs.uiFragments,
|
|
852
1035
|
outputs.pluginStructure
|
|
853
1036
|
]).apply(param => {
|
|
1037
|
+
let uiFragments = param[6];
|
|
1038
|
+
let apiSchemaFragment = param[5];
|
|
854
1039
|
let id = param[0];
|
|
855
1040
|
let pluginName = Stdlib_Option.getOr(id.split("@")[0], id);
|
|
856
1041
|
let pluginDefinition = {
|
|
@@ -875,9 +1060,8 @@ function MakeWithConfig(Config) {
|
|
|
875
1060
|
}),
|
|
876
1061
|
eventCollector: param[2].name,
|
|
877
1062
|
extensionProtocols: [],
|
|
878
|
-
apiSchemaFragment:
|
|
1063
|
+
apiSchemaFragment: apiSchemaFragment,
|
|
879
1064
|
apiTarget: undefined,
|
|
880
|
-
uiFragments: param[6],
|
|
881
1065
|
structure: param[7],
|
|
882
1066
|
dcbEventLog: undefined,
|
|
883
1067
|
kind: "Domain"
|
|
@@ -886,37 +1070,24 @@ function MakeWithConfig(Config) {
|
|
|
886
1070
|
TAG: "Connect",
|
|
887
1071
|
_0: pluginDefinition
|
|
888
1072
|
});
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
1073
|
+
if (uiFragments !== undefined) {
|
|
1074
|
+
dispatchUiFragmentCommand(pluginName, {
|
|
1075
|
+
TAG: "RegisterUiFragment",
|
|
1076
|
+
pluginId: pluginName,
|
|
1077
|
+
manifest: uiFragments,
|
|
1078
|
+
at: new Date().toISOString()
|
|
1079
|
+
});
|
|
1080
|
+
}
|
|
1081
|
+
if (apiSchemaFragment !== undefined) {
|
|
1082
|
+
dispatchApiFragmentCommand(pluginName, {
|
|
1083
|
+
TAG: "RegisterApiFragment",
|
|
1084
|
+
pluginId: pluginName,
|
|
1085
|
+
fragment: apiSchemaFragment,
|
|
1086
|
+
apiTarget: "Domain",
|
|
1087
|
+
at: new Date().toISOString()
|
|
1088
|
+
});
|
|
902
1089
|
return;
|
|
903
1090
|
}
|
|
904
|
-
let id = param[0];
|
|
905
|
-
let state_remoteEntryUrl = uiFragments.remoteEntryUrl;
|
|
906
|
-
let state_panels = uiFragments.panels;
|
|
907
|
-
let state_pages = uiFragments.pages;
|
|
908
|
-
let state_registeredAt = new Date().toISOString();
|
|
909
|
-
let state_updatedAt = new Date().toISOString();
|
|
910
|
-
let state = {
|
|
911
|
-
pluginId: id,
|
|
912
|
-
remoteEntryUrl: state_remoteEntryUrl,
|
|
913
|
-
panels: state_panels,
|
|
914
|
-
pages: state_pages,
|
|
915
|
-
registeredAt: state_registeredAt,
|
|
916
|
-
updatedAt: state_updatedAt
|
|
917
|
-
};
|
|
918
|
-
let entry = S.reverseConvertToJsonOrThrow(state, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
|
|
919
|
-
uiFragmentOps.save(id, entry, "Any", undefined);
|
|
920
1091
|
});
|
|
921
1092
|
});
|
|
922
1093
|
};
|
|
@@ -1130,7 +1301,13 @@ function MakeWithConfig(Config) {
|
|
|
1130
1301
|
outputs: PluginsReadModel.outputs,
|
|
1131
1302
|
operations: PluginsReadModel.operations,
|
|
1132
1303
|
finish: PluginsReadModel.finish
|
|
1133
|
-
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
1304
|
+
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
1305
|
+
UiFragmentRegistrySlice,
|
|
1306
|
+
ApiFragmentRegistrySlice
|
|
1307
|
+
], [
|
|
1308
|
+
UiFragmentsViewSlice,
|
|
1309
|
+
ApiFragmentsViewSlice
|
|
1310
|
+
], [], [], []);
|
|
1134
1311
|
hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
|
|
1135
1312
|
ep.name,
|
|
1136
1313
|
ep
|
|
@@ -1172,17 +1349,13 @@ function MakeWithConfig(Config) {
|
|
|
1172
1349
|
adminResources: []
|
|
1173
1350
|
});
|
|
1174
1351
|
subscribeToPluginEvents();
|
|
1175
|
-
let seedAdminStores = () => {
|
|
1176
|
-
connectPlugin(plugins$1);
|
|
1177
|
-
seedUIFragmentRegistryQueryDb(plugins$1);
|
|
1178
|
-
seedPluginStructuresStore(plugins$1);
|
|
1179
|
-
};
|
|
1180
1352
|
if (projectionCatchup !== undefined) {
|
|
1181
1353
|
Stdlib_Promise.$$catch(ProjectionCheckpoint$ReventlessLocal.startupCatchup(projectionCatchup[0], projectionCatchup[1], projectionCatchup[2], () => Bus.projectionCatchupHandlers()), e => {
|
|
1182
1354
|
console.error("[Platform] projection catch-up failed:", e);
|
|
1183
1355
|
return Promise.resolve();
|
|
1184
1356
|
}).then(() => {
|
|
1185
|
-
|
|
1357
|
+
connectPlugin(plugins$1);
|
|
1358
|
+
seedPluginStructuresStore(plugins$1);
|
|
1186
1359
|
return Promise.resolve();
|
|
1187
1360
|
});
|
|
1188
1361
|
} else if (pgProjectionCatchup !== undefined) {
|
|
@@ -1191,11 +1364,13 @@ function MakeWithConfig(Config) {
|
|
|
1191
1364
|
console.error("[Platform] postgres projection catch-up failed:", e);
|
|
1192
1365
|
return Promise.resolve();
|
|
1193
1366
|
}).then(() => {
|
|
1194
|
-
|
|
1367
|
+
connectPlugin(plugins$1);
|
|
1368
|
+
seedPluginStructuresStore(plugins$1);
|
|
1195
1369
|
return Promise.resolve();
|
|
1196
1370
|
});
|
|
1197
1371
|
} else {
|
|
1198
|
-
|
|
1372
|
+
connectPlugin(plugins$1);
|
|
1373
|
+
seedPluginStructuresStore(plugins$1);
|
|
1199
1374
|
}
|
|
1200
1375
|
pluginStructuresStore.contents[Platform_Admin_Structure$ReventlessCore.pluginId] = Platform_Admin_Structure$ReventlessCore.structure;
|
|
1201
1376
|
CommandGeneratorResolvers_GraphQL$ReventlessLocal.setPluginStatusGate(field => {
|
|
@@ -1316,13 +1491,13 @@ function MakeWithConfig(Config) {
|
|
|
1316
1491
|
});
|
|
1317
1492
|
};
|
|
1318
1493
|
queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
|
|
1319
|
-
let scanAll = Bus.getQueryDbScan(
|
|
1494
|
+
let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
|
|
1320
1495
|
let items = scanAll !== undefined ? scanAll() : [];
|
|
1321
1496
|
let latestByName = {};
|
|
1322
1497
|
items.forEach(item => {
|
|
1323
1498
|
let state;
|
|
1324
1499
|
try {
|
|
1325
|
-
state = S.parseOrThrow(item,
|
|
1500
|
+
state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
|
|
1326
1501
|
} catch (exn) {
|
|
1327
1502
|
return;
|
|
1328
1503
|
}
|
|
@@ -1341,6 +1516,7 @@ function MakeWithConfig(Config) {
|
|
|
1341
1516
|
});
|
|
1342
1517
|
return Object.values(latestByName).map(param => Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(param[1]));
|
|
1343
1518
|
};
|
|
1519
|
+
queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
|
|
1344
1520
|
registerAdminItemsAndIndexResolvers(queryResolvers, true);
|
|
1345
1521
|
platformGraphQL.registerQueries(baseParts.queries, queryResolvers);
|
|
1346
1522
|
let argId = args => Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
|
|
@@ -1427,8 +1603,8 @@ function MakeWithConfig(Config) {
|
|
|
1427
1603
|
platformGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
|
|
1428
1604
|
adminRegisteredServers.contents.push(platformGraphQL);
|
|
1429
1605
|
platformGraphQL.registerSubscriptions([
|
|
1430
|
-
|
|
1431
|
-
|
|
1606
|
+
AdminApi$ReventlessCore.uiFragmentSubscriptionField,
|
|
1607
|
+
AdminApi$ReventlessCore.pluginStatusSubscriptionField
|
|
1432
1608
|
], Object.fromEntries([
|
|
1433
1609
|
[
|
|
1434
1610
|
"onUIFragmentChange",
|
|
@@ -1503,7 +1679,13 @@ function MakeWithConfig(Config) {
|
|
|
1503
1679
|
hooks_apiRole.contents = {
|
|
1504
1680
|
val: undefined
|
|
1505
1681
|
};
|
|
1506
|
-
Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
1682
|
+
Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
1683
|
+
UiFragmentRegistrySlice,
|
|
1684
|
+
ApiFragmentRegistrySlice
|
|
1685
|
+
], [
|
|
1686
|
+
UiFragmentsViewSlice,
|
|
1687
|
+
ApiFragmentsViewSlice
|
|
1688
|
+
], [], [], []);
|
|
1507
1689
|
currentDeployTarget.contents = "Platform";
|
|
1508
1690
|
let adminGraphQL = resolveTargetGraphQL();
|
|
1509
1691
|
let adminMCP = resolveTargetMCP();
|
|
@@ -1514,6 +1696,7 @@ function MakeWithConfig(Config) {
|
|
|
1514
1696
|
queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
|
|
1515
1697
|
queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
|
|
1516
1698
|
queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => [];
|
|
1699
|
+
queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
|
|
1517
1700
|
registerAdminItemsAndIndexResolvers(queryResolvers, false);
|
|
1518
1701
|
adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
|
|
1519
1702
|
let mutationResolvers = {};
|
|
@@ -1609,7 +1792,13 @@ function MakeWithConfig(Config) {
|
|
|
1609
1792
|
outputs: PluginsReadModel.outputs,
|
|
1610
1793
|
operations: PluginsReadModel.operations,
|
|
1611
1794
|
finish: PluginsReadModel.finish
|
|
1612
|
-
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
1795
|
+
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
1796
|
+
UiFragmentRegistrySlice,
|
|
1797
|
+
ApiFragmentRegistrySlice
|
|
1798
|
+
], [
|
|
1799
|
+
UiFragmentsViewSlice,
|
|
1800
|
+
ApiFragmentsViewSlice
|
|
1801
|
+
], [], [], []);
|
|
1613
1802
|
hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
|
|
1614
1803
|
ep.name,
|
|
1615
1804
|
ep
|
|
@@ -1633,18 +1822,19 @@ function MakeWithConfig(Config) {
|
|
|
1633
1822
|
queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
|
|
1634
1823
|
queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
|
|
1635
1824
|
queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
|
|
1636
|
-
let scanAll = Bus.getQueryDbScan(
|
|
1825
|
+
let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
|
|
1637
1826
|
let items = scanAll !== undefined ? scanAll() : [];
|
|
1638
1827
|
return Stdlib_Array.filterMap(items, item => {
|
|
1639
1828
|
let state;
|
|
1640
1829
|
try {
|
|
1641
|
-
state = S.parseOrThrow(item,
|
|
1830
|
+
state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
|
|
1642
1831
|
} catch (exn) {
|
|
1643
1832
|
return;
|
|
1644
1833
|
}
|
|
1645
1834
|
return Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(state);
|
|
1646
1835
|
});
|
|
1647
1836
|
};
|
|
1837
|
+
queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
|
|
1648
1838
|
queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => Object.entries(pluginStructuresStore.contents).map(param => Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(param[0], param[1]));
|
|
1649
1839
|
registerAdminItemsAndIndexResolvers(queryResolvers, true);
|
|
1650
1840
|
adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
|
|
@@ -1694,7 +1884,6 @@ function MakeWithConfig(Config) {
|
|
|
1694
1884
|
StateViewSliceMaker.QueryDbResolvers.relayRef.contents = domainRelaySupport;
|
|
1695
1885
|
subscribeToPluginEvents();
|
|
1696
1886
|
connectPlugin([pluginComponent]);
|
|
1697
|
-
seedUIFragmentRegistryQueryDb([pluginComponent]);
|
|
1698
1887
|
seedPluginStructuresStore([pluginComponent]);
|
|
1699
1888
|
let deployedPluginOutputs = [Component$ReventlessCore.outputs(pluginComponent)];
|
|
1700
1889
|
firePluginDeployedHooks(builtInfos.contents, deployedPluginOutputs);
|
|
@@ -2025,6 +2214,9 @@ function Make($star) {
|
|
|
2025
2214
|
let hooks_apiRole = {
|
|
2026
2215
|
contents: undefined
|
|
2027
2216
|
};
|
|
2217
|
+
let hooks_adminApi = {
|
|
2218
|
+
contents: undefined
|
|
2219
|
+
};
|
|
2028
2220
|
let hooks_deployTarget = {
|
|
2029
2221
|
contents: "Domain"
|
|
2030
2222
|
};
|
|
@@ -2040,6 +2232,7 @@ function Make($star) {
|
|
|
2040
2232
|
schedulerRoleUrn: hooks_schedulerRoleUrn,
|
|
2041
2233
|
api: hooks_api,
|
|
2042
2234
|
apiRole: hooks_apiRole,
|
|
2235
|
+
adminApi: hooks_adminApi,
|
|
2043
2236
|
deployTarget: hooks_deployTarget
|
|
2044
2237
|
};
|
|
2045
2238
|
let AggregateMaker = Aggregate_Builder$ReventlessLocal.MakeWithHooks(Bus)({
|
|
@@ -2206,6 +2399,108 @@ function Make($star) {
|
|
|
2206
2399
|
let StateViewSlice = {
|
|
2207
2400
|
Make: Make$8
|
|
2208
2401
|
};
|
|
2402
|
+
let Spec = {
|
|
2403
|
+
name: UiFragmentRegistry$ReventlessCore.name,
|
|
2404
|
+
moduleUrl: UiFragmentRegistry$ReventlessCore.moduleUrl,
|
|
2405
|
+
Id: Id$Reventless.$$String,
|
|
2406
|
+
consumedEventSchema: UiFragmentRegistry$ReventlessCore.consumedEventSchema,
|
|
2407
|
+
errorSchema: UiFragmentRegistry$ReventlessCore.errorSchema,
|
|
2408
|
+
eventSchema: UiFragmentRegistry$ReventlessCore.eventSchema,
|
|
2409
|
+
commandSchema: UiFragmentRegistry$ReventlessCore.commandSchema,
|
|
2410
|
+
commandAuthorization: UiFragmentRegistry$ReventlessCore.commandAuthorization,
|
|
2411
|
+
readConsistency: UiFragmentRegistry$ReventlessCore.readConsistency
|
|
2412
|
+
};
|
|
2413
|
+
let Behavior = {
|
|
2414
|
+
initialState: undefined,
|
|
2415
|
+
evolve: UiFragmentRegistry_Behavior$ReventlessCore.evolve,
|
|
2416
|
+
decide: UiFragmentRegistry_Behavior$ReventlessCore.decide,
|
|
2417
|
+
moduleUrl: UiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
|
|
2418
|
+
};
|
|
2419
|
+
let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
|
|
2420
|
+
let UiFragmentRegistrySlice_Spec = $$let.Spec;
|
|
2421
|
+
let UiFragmentRegistrySlice_Behavior = $$let.Behavior;
|
|
2422
|
+
let UiFragmentRegistrySlice_isAsync = $$let.isAsync;
|
|
2423
|
+
let UiFragmentRegistrySlice_make = $$let.make;
|
|
2424
|
+
let UiFragmentRegistrySlice = {
|
|
2425
|
+
Spec: UiFragmentRegistrySlice_Spec,
|
|
2426
|
+
Behavior: UiFragmentRegistrySlice_Behavior,
|
|
2427
|
+
isAsync: UiFragmentRegistrySlice_isAsync,
|
|
2428
|
+
make: UiFragmentRegistrySlice_make
|
|
2429
|
+
};
|
|
2430
|
+
let Spec$1 = {
|
|
2431
|
+
name: UiFragments$ReventlessCore.name,
|
|
2432
|
+
moduleUrl: UiFragments$ReventlessCore.moduleUrl,
|
|
2433
|
+
stateSchema: UiFragments$ReventlessCore.stateSchema,
|
|
2434
|
+
consumedEventSchema: UiFragments$ReventlessCore.consumedEventSchema,
|
|
2435
|
+
config: UiFragments$ReventlessCore.config,
|
|
2436
|
+
subIdConfig: undefined,
|
|
2437
|
+
authorization: UiFragments$ReventlessCore.authorization,
|
|
2438
|
+
visibility: UiFragments$ReventlessCore.visibility
|
|
2439
|
+
};
|
|
2440
|
+
let Projection = {
|
|
2441
|
+
project: UiFragments_Projection$ReventlessCore.project,
|
|
2442
|
+
moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
|
|
2443
|
+
};
|
|
2444
|
+
let $$let$1 = StateViewSliceMaker.Make(Spec$1)(Projection);
|
|
2445
|
+
let UiFragmentsViewSlice_Spec = $$let$1.Spec;
|
|
2446
|
+
let UiFragmentsViewSlice_Projection = $$let$1.Projection;
|
|
2447
|
+
let UiFragmentsViewSlice_make = $$let$1.make;
|
|
2448
|
+
let UiFragmentsViewSlice = {
|
|
2449
|
+
Spec: UiFragmentsViewSlice_Spec,
|
|
2450
|
+
Projection: UiFragmentsViewSlice_Projection,
|
|
2451
|
+
make: UiFragmentsViewSlice_make
|
|
2452
|
+
};
|
|
2453
|
+
let Spec$2 = {
|
|
2454
|
+
name: ApiFragmentRegistry$ReventlessCore.name,
|
|
2455
|
+
moduleUrl: ApiFragmentRegistry$ReventlessCore.moduleUrl,
|
|
2456
|
+
Id: Id$Reventless.$$String,
|
|
2457
|
+
consumedEventSchema: ApiFragmentRegistry$ReventlessCore.consumedEventSchema,
|
|
2458
|
+
errorSchema: ApiFragmentRegistry$ReventlessCore.errorSchema,
|
|
2459
|
+
eventSchema: ApiFragmentRegistry$ReventlessCore.eventSchema,
|
|
2460
|
+
commandSchema: ApiFragmentRegistry$ReventlessCore.commandSchema,
|
|
2461
|
+
commandAuthorization: ApiFragmentRegistry$ReventlessCore.commandAuthorization,
|
|
2462
|
+
readConsistency: ApiFragmentRegistry$ReventlessCore.readConsistency
|
|
2463
|
+
};
|
|
2464
|
+
let Behavior$1 = {
|
|
2465
|
+
initialState: undefined,
|
|
2466
|
+
evolve: ApiFragmentRegistry_Behavior$ReventlessCore.evolve,
|
|
2467
|
+
decide: ApiFragmentRegistry_Behavior$ReventlessCore.decide,
|
|
2468
|
+
moduleUrl: ApiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
|
|
2469
|
+
};
|
|
2470
|
+
let $$let$2 = StateChangeSlice_Builder$ReventlessLocal.Make(Spec$2)(Behavior$1);
|
|
2471
|
+
let ApiFragmentRegistrySlice_Spec = $$let$2.Spec;
|
|
2472
|
+
let ApiFragmentRegistrySlice_Behavior = $$let$2.Behavior;
|
|
2473
|
+
let ApiFragmentRegistrySlice_isAsync = $$let$2.isAsync;
|
|
2474
|
+
let ApiFragmentRegistrySlice_make = $$let$2.make;
|
|
2475
|
+
let ApiFragmentRegistrySlice = {
|
|
2476
|
+
Spec: ApiFragmentRegistrySlice_Spec,
|
|
2477
|
+
Behavior: ApiFragmentRegistrySlice_Behavior,
|
|
2478
|
+
isAsync: ApiFragmentRegistrySlice_isAsync,
|
|
2479
|
+
make: ApiFragmentRegistrySlice_make
|
|
2480
|
+
};
|
|
2481
|
+
let Spec$3 = {
|
|
2482
|
+
name: ApiFragments$ReventlessCore.name,
|
|
2483
|
+
moduleUrl: ApiFragments$ReventlessCore.moduleUrl,
|
|
2484
|
+
stateSchema: ApiFragments$ReventlessCore.stateSchema,
|
|
2485
|
+
consumedEventSchema: ApiFragments$ReventlessCore.consumedEventSchema,
|
|
2486
|
+
config: ApiFragments$ReventlessCore.config,
|
|
2487
|
+
subIdConfig: undefined,
|
|
2488
|
+
authorization: ApiFragments$ReventlessCore.authorization,
|
|
2489
|
+
visibility: ApiFragments$ReventlessCore.visibility
|
|
2490
|
+
};
|
|
2491
|
+
let Projection$1 = {
|
|
2492
|
+
project: ApiFragments_Projection$ReventlessCore.project,
|
|
2493
|
+
moduleUrl: ApiFragments_Projection$ReventlessCore.moduleUrl
|
|
2494
|
+
};
|
|
2495
|
+
let $$let$3 = StateViewSliceMaker.Make(Spec$3)(Projection$1);
|
|
2496
|
+
let ApiFragmentsViewSlice_Spec = $$let$3.Spec;
|
|
2497
|
+
let ApiFragmentsViewSlice_Projection = $$let$3.Projection;
|
|
2498
|
+
let ApiFragmentsViewSlice_make = $$let$3.make;
|
|
2499
|
+
let ApiFragmentsViewSlice = {
|
|
2500
|
+
Spec: ApiFragmentsViewSlice_Spec,
|
|
2501
|
+
Projection: ApiFragmentsViewSlice_Projection,
|
|
2502
|
+
make: ApiFragmentsViewSlice_make
|
|
2503
|
+
};
|
|
2209
2504
|
let Make$9 = Spec => (Projection => {
|
|
2210
2505
|
let $$let = StateViewSliceMaker.Make(Spec)(Projection);
|
|
2211
2506
|
return {
|
|
@@ -2249,7 +2544,8 @@ function Make($star) {
|
|
|
2249
2544
|
types: [],
|
|
2250
2545
|
mutations: [],
|
|
2251
2546
|
queries: [],
|
|
2252
|
-
subscriptions: []
|
|
2547
|
+
subscriptions: [],
|
|
2548
|
+
subscriptionSources: []
|
|
2253
2549
|
});
|
|
2254
2550
|
let Make$13 = FragmentConfig => {
|
|
2255
2551
|
let Builder = Api_Builder$ReventlessCore.Make(LocalGraphQL_Adapter$ReventlessLocal);
|
|
@@ -2274,7 +2570,7 @@ function Make($star) {
|
|
|
2274
2570
|
};
|
|
2275
2571
|
let EventCollectorChannel = LocalEventCollectorChannel$ReventlessLocal.Make(Bus);
|
|
2276
2572
|
let QE = LocalQueryEngine$ReventlessLocal.Make(Bus);
|
|
2277
|
-
let $$let = AggregateMaker.Make({
|
|
2573
|
+
let $$let$4 = AggregateMaker.Make({
|
|
2278
2574
|
Id: Id$Reventless.$$String,
|
|
2279
2575
|
name: PluginSpec$ReventlessCore.name,
|
|
2280
2576
|
eventSchema: PluginSpec$ReventlessCore.eventSchema,
|
|
@@ -2293,11 +2589,11 @@ function Make($star) {
|
|
|
2293
2589
|
Id: Id$Reventless.$$String,
|
|
2294
2590
|
commandSchema: PluginSpec$ReventlessCore.commandSchema
|
|
2295
2591
|
}));
|
|
2296
|
-
let LocalPluginAggregate_Spec = $$let.Spec;
|
|
2297
|
-
let LocalPluginAggregate_make = $$let.make;
|
|
2298
|
-
let LocalPluginAggregate_outputs = $$let.outputs;
|
|
2299
|
-
let LocalPluginAggregate_operations = $$let.operations;
|
|
2300
|
-
let LocalPluginAggregate_finish = $$let.finish;
|
|
2592
|
+
let LocalPluginAggregate_Spec = $$let$4.Spec;
|
|
2593
|
+
let LocalPluginAggregate_make = $$let$4.make;
|
|
2594
|
+
let LocalPluginAggregate_outputs = $$let$4.outputs;
|
|
2595
|
+
let LocalPluginAggregate_operations = $$let$4.operations;
|
|
2596
|
+
let LocalPluginAggregate_finish = $$let$4.finish;
|
|
2301
2597
|
let LocalPluginAggregate = {
|
|
2302
2598
|
Spec: LocalPluginAggregate_Spec,
|
|
2303
2599
|
make: LocalPluginAggregate_make,
|
|
@@ -2319,8 +2615,8 @@ function Make($star) {
|
|
|
2319
2615
|
authorization: PluginsReadModelSpec$ReventlessCore.authorization,
|
|
2320
2616
|
visibility: PluginsReadModelSpec$ReventlessCore.visibility
|
|
2321
2617
|
})(PluginsReadModelMappings);
|
|
2322
|
-
let $$let$
|
|
2323
|
-
let $$let$
|
|
2618
|
+
let $$let$5 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
|
|
2619
|
+
let $$let$6 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
|
|
2324
2620
|
let Admin = Platform_Admin$ReventlessCore.Make({
|
|
2325
2621
|
make: LocalRuntimeEnvironment$ReventlessLocal.make,
|
|
2326
2622
|
groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
|
|
@@ -2336,9 +2632,9 @@ function Make($star) {
|
|
|
2336
2632
|
asEventHandler: prim => prim,
|
|
2337
2633
|
asEffectHandler: prim => prim
|
|
2338
2634
|
})(EventCollectorChannel))(LocalDcbEventLogStorage$ReventlessLocal.Make(Bus))(LocalEventTopicPublisher$ReventlessLocal.Make(Bus))({
|
|
2339
|
-
make: $$let$
|
|
2635
|
+
make: $$let$5.make
|
|
2340
2636
|
})({
|
|
2341
|
-
make: $$let$
|
|
2637
|
+
make: $$let$6.make
|
|
2342
2638
|
})({
|
|
2343
2639
|
silent: false,
|
|
2344
2640
|
splitApi: true,
|
|
@@ -2358,20 +2654,6 @@ function Make($star) {
|
|
|
2358
2654
|
let domainMcpPort = resolvePort("REVENTLESS_DOMAIN_MCP_PORT", 3001);
|
|
2359
2655
|
let platformPort = resolvePort("REVENTLESS_PLATFORM_PORT", 4001);
|
|
2360
2656
|
let platformMcpPort = resolvePort("REVENTLESS_PLATFORM_MCP_PORT", 3002);
|
|
2361
|
-
let uiFragmentQueryDbOpsRef = {
|
|
2362
|
-
contents: undefined
|
|
2363
|
-
};
|
|
2364
|
-
let UIFragmentStorage = LocalQueryDbStorage$ReventlessLocal.Make(Bus);
|
|
2365
|
-
let ensureUIFragmentRegistryQueryDbStore = () => {
|
|
2366
|
-
let ops = uiFragmentQueryDbOpsRef.contents;
|
|
2367
|
-
if (ops !== undefined) {
|
|
2368
|
-
return ops;
|
|
2369
|
-
}
|
|
2370
|
-
UIFragmentStorage.make(UIFragmentRegistryReadModelSpec$ReventlessCore.name, [], undefined, undefined, undefined, undefined, {});
|
|
2371
|
-
let ops$1 = Stdlib_Option.getOrThrow(Bus.getQueryDb(UIFragmentRegistryReadModelSpec$ReventlessCore.name), undefined);
|
|
2372
|
-
uiFragmentQueryDbOpsRef.contents = ops$1;
|
|
2373
|
-
return ops$1;
|
|
2374
|
-
};
|
|
2375
2657
|
let pluginStructuresStore = {
|
|
2376
2658
|
contents: {}
|
|
2377
2659
|
};
|
|
@@ -2402,8 +2684,43 @@ function Make($star) {
|
|
|
2402
2684
|
};
|
|
2403
2685
|
return Bus.dispatchCommand(pluginCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
|
|
2404
2686
|
};
|
|
2687
|
+
let adminDcbCmdTopicKey = ComponentType$ReventlessCore.name("AdminDcb", "CommandTopic");
|
|
2688
|
+
let dispatchUiFragmentCommand = (pluginName, command) => {
|
|
2689
|
+
let cmdJson_meta = Message$ReventlessCore.generateMeta(UiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
|
|
2690
|
+
let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, UiFragmentRegistry$ReventlessCore.commandSchema);
|
|
2691
|
+
let cmdJson = {
|
|
2692
|
+
id: pluginName,
|
|
2693
|
+
meta: cmdJson_meta,
|
|
2694
|
+
commandJson: cmdJson_commandJson
|
|
2695
|
+
};
|
|
2696
|
+
return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
|
|
2697
|
+
};
|
|
2698
|
+
let dispatchApiFragmentCommand = (pluginName, command) => {
|
|
2699
|
+
let cmdJson_meta = Message$ReventlessCore.generateMeta(ApiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
|
|
2700
|
+
let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, ApiFragmentRegistry$ReventlessCore.commandSchema);
|
|
2701
|
+
let cmdJson = {
|
|
2702
|
+
id: pluginName,
|
|
2703
|
+
meta: cmdJson_meta,
|
|
2704
|
+
commandJson: cmdJson_commandJson
|
|
2705
|
+
};
|
|
2706
|
+
return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
|
|
2707
|
+
};
|
|
2708
|
+
let apiFragmentsQueryResolver = async (_root, _args, _ctx) => {
|
|
2709
|
+
let scanAll = Bus.getQueryDbScan(ApiFragments$ReventlessCore.name);
|
|
2710
|
+
let items = scanAll !== undefined ? scanAll() : [];
|
|
2711
|
+
return Stdlib_Array.filterMap(items, item => {
|
|
2712
|
+
let state;
|
|
2713
|
+
try {
|
|
2714
|
+
state = S.parseOrThrow(item, ApiFragments$ReventlessCore.stateSchema);
|
|
2715
|
+
} catch (exn) {
|
|
2716
|
+
return;
|
|
2717
|
+
}
|
|
2718
|
+
return Platform_ApiFragmentsApi$ReventlessCore.encodeApiFragmentEntry(state);
|
|
2719
|
+
});
|
|
2720
|
+
};
|
|
2405
2721
|
let pluginStatusSubTopic = "onPluginStatusChange";
|
|
2406
2722
|
let uiFragmentSubTopic = "onUIFragmentChange";
|
|
2723
|
+
let adminDcbEventTopicKey = ComponentType$ReventlessCore.name("Admin", "EventTopic");
|
|
2407
2724
|
let pluginEventsSubscribed = {
|
|
2408
2725
|
contents: false
|
|
2409
2726
|
};
|
|
@@ -2452,18 +2769,49 @@ function Make($star) {
|
|
|
2452
2769
|
case "VersionSuperseded" :
|
|
2453
2770
|
case "IncompatiblePluginDetected" :
|
|
2454
2771
|
return;
|
|
2455
|
-
case "UIFragmentRegistered" :
|
|
2456
|
-
let data = match._0;
|
|
2457
|
-
return publishUIFragment(Plugin$ReventlessCore.name(data.pluginId), "Registered", S.reverseConvertToJsonOrThrow(data.manifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
2458
|
-
case "UIFragmentUpdated" :
|
|
2459
|
-
let data$1 = match._0;
|
|
2460
|
-
return publishUIFragment(Plugin$ReventlessCore.name(data$1.pluginId), "Updated", S.reverseConvertToJsonOrThrow(data$1.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
2461
|
-
case "UIFragmentDeregistered" :
|
|
2462
|
-
return publishUIFragment(Plugin$ReventlessCore.name(match._0.pluginId), "Deregistered", null);
|
|
2463
2772
|
default:
|
|
2464
2773
|
return publishStatus(match._0.name, "Connected");
|
|
2465
2774
|
}
|
|
2466
2775
|
});
|
|
2776
|
+
Bus.subscribeToEvents(adminDcbEventTopicKey, async (service, _meta, eventJson) => {
|
|
2777
|
+
if (service !== "AdminDcbEventLog") {
|
|
2778
|
+
return;
|
|
2779
|
+
}
|
|
2780
|
+
let match = decodeUiFragmentRegistryEventEnvelope(eventJson);
|
|
2781
|
+
if (match !== undefined) {
|
|
2782
|
+
switch (match.TAG) {
|
|
2783
|
+
case "UiFragmentRegistered" :
|
|
2784
|
+
publishUIFragment(match.pluginId, "Registered", S.reverseConvertToJsonOrThrow(match.manifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
2785
|
+
break;
|
|
2786
|
+
case "UiFragmentUpdated" :
|
|
2787
|
+
publishUIFragment(match.pluginId, "Updated", S.reverseConvertToJsonOrThrow(match.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
|
|
2788
|
+
break;
|
|
2789
|
+
case "UiFragmentDeregistered" :
|
|
2790
|
+
publishUIFragment(match.pluginId, "Deregistered", null);
|
|
2791
|
+
break;
|
|
2792
|
+
}
|
|
2793
|
+
}
|
|
2794
|
+
let match$1 = decodeApiFragmentRegistryEventEnvelope(eventJson);
|
|
2795
|
+
if (match$1 === undefined) {
|
|
2796
|
+
return;
|
|
2797
|
+
}
|
|
2798
|
+
switch (match$1.TAG) {
|
|
2799
|
+
case "ApiFragmentRegistered" :
|
|
2800
|
+
case "ApiFragmentUpdated" :
|
|
2801
|
+
break;
|
|
2802
|
+
case "ApiFragmentDeregistered" :
|
|
2803
|
+
case "ApiFragmentPushRecorded" :
|
|
2804
|
+
return;
|
|
2805
|
+
}
|
|
2806
|
+
let pluginId = match$1.pluginId;
|
|
2807
|
+
dispatchApiFragmentCommand(pluginId, {
|
|
2808
|
+
TAG: "RecordApiFragmentPush",
|
|
2809
|
+
pluginId: pluginId,
|
|
2810
|
+
ok: true,
|
|
2811
|
+
message: "",
|
|
2812
|
+
at: new Date().toISOString()
|
|
2813
|
+
});
|
|
2814
|
+
});
|
|
2467
2815
|
};
|
|
2468
2816
|
let connectPlugin = pluginComponents => {
|
|
2469
2817
|
pluginComponents.forEach(plugin => {
|
|
@@ -2478,6 +2826,8 @@ function Make($star) {
|
|
|
2478
2826
|
outputs.uiFragments,
|
|
2479
2827
|
outputs.pluginStructure
|
|
2480
2828
|
]).apply(param => {
|
|
2829
|
+
let uiFragments = param[6];
|
|
2830
|
+
let apiSchemaFragment = param[5];
|
|
2481
2831
|
let id = param[0];
|
|
2482
2832
|
let pluginName = Stdlib_Option.getOr(id.split("@")[0], id);
|
|
2483
2833
|
let pluginDefinition = {
|
|
@@ -2502,9 +2852,8 @@ function Make($star) {
|
|
|
2502
2852
|
}),
|
|
2503
2853
|
eventCollector: param[2].name,
|
|
2504
2854
|
extensionProtocols: [],
|
|
2505
|
-
apiSchemaFragment:
|
|
2855
|
+
apiSchemaFragment: apiSchemaFragment,
|
|
2506
2856
|
apiTarget: undefined,
|
|
2507
|
-
uiFragments: param[6],
|
|
2508
2857
|
structure: param[7],
|
|
2509
2858
|
dcbEventLog: undefined,
|
|
2510
2859
|
kind: "Domain"
|
|
@@ -2513,37 +2862,24 @@ function Make($star) {
|
|
|
2513
2862
|
TAG: "Connect",
|
|
2514
2863
|
_0: pluginDefinition
|
|
2515
2864
|
});
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2865
|
+
if (uiFragments !== undefined) {
|
|
2866
|
+
dispatchUiFragmentCommand(pluginName, {
|
|
2867
|
+
TAG: "RegisterUiFragment",
|
|
2868
|
+
pluginId: pluginName,
|
|
2869
|
+
manifest: uiFragments,
|
|
2870
|
+
at: new Date().toISOString()
|
|
2871
|
+
});
|
|
2872
|
+
}
|
|
2873
|
+
if (apiSchemaFragment !== undefined) {
|
|
2874
|
+
dispatchApiFragmentCommand(pluginName, {
|
|
2875
|
+
TAG: "RegisterApiFragment",
|
|
2876
|
+
pluginId: pluginName,
|
|
2877
|
+
fragment: apiSchemaFragment,
|
|
2878
|
+
apiTarget: "Domain",
|
|
2879
|
+
at: new Date().toISOString()
|
|
2880
|
+
});
|
|
2529
2881
|
return;
|
|
2530
2882
|
}
|
|
2531
|
-
let id = param[0];
|
|
2532
|
-
let state_remoteEntryUrl = uiFragments.remoteEntryUrl;
|
|
2533
|
-
let state_panels = uiFragments.panels;
|
|
2534
|
-
let state_pages = uiFragments.pages;
|
|
2535
|
-
let state_registeredAt = new Date().toISOString();
|
|
2536
|
-
let state_updatedAt = new Date().toISOString();
|
|
2537
|
-
let state = {
|
|
2538
|
-
pluginId: id,
|
|
2539
|
-
remoteEntryUrl: state_remoteEntryUrl,
|
|
2540
|
-
panels: state_panels,
|
|
2541
|
-
pages: state_pages,
|
|
2542
|
-
registeredAt: state_registeredAt,
|
|
2543
|
-
updatedAt: state_updatedAt
|
|
2544
|
-
};
|
|
2545
|
-
let entry = S.reverseConvertToJsonOrThrow(state, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
|
|
2546
|
-
uiFragmentOps.save(id, entry, "Any", undefined);
|
|
2547
2883
|
});
|
|
2548
2884
|
});
|
|
2549
2885
|
};
|
|
@@ -2752,7 +3088,13 @@ function Make($star) {
|
|
|
2752
3088
|
outputs: PluginsReadModel.outputs,
|
|
2753
3089
|
operations: PluginsReadModel.operations,
|
|
2754
3090
|
finish: PluginsReadModel.finish
|
|
2755
|
-
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
3091
|
+
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
3092
|
+
UiFragmentRegistrySlice,
|
|
3093
|
+
ApiFragmentRegistrySlice
|
|
3094
|
+
], [
|
|
3095
|
+
UiFragmentsViewSlice,
|
|
3096
|
+
ApiFragmentsViewSlice
|
|
3097
|
+
], [], [], []);
|
|
2756
3098
|
hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
|
|
2757
3099
|
ep.name,
|
|
2758
3100
|
ep
|
|
@@ -2794,17 +3136,13 @@ function Make($star) {
|
|
|
2794
3136
|
adminResources: []
|
|
2795
3137
|
});
|
|
2796
3138
|
subscribeToPluginEvents();
|
|
2797
|
-
let seedAdminStores = () => {
|
|
2798
|
-
connectPlugin(plugins$1);
|
|
2799
|
-
seedUIFragmentRegistryQueryDb(plugins$1);
|
|
2800
|
-
seedPluginStructuresStore(plugins$1);
|
|
2801
|
-
};
|
|
2802
3139
|
if (projectionCatchup !== undefined) {
|
|
2803
3140
|
Stdlib_Promise.$$catch(ProjectionCheckpoint$ReventlessLocal.startupCatchup(projectionCatchup[0], projectionCatchup[1], projectionCatchup[2], () => Bus.projectionCatchupHandlers()), e => {
|
|
2804
3141
|
console.error("[Platform] projection catch-up failed:", e);
|
|
2805
3142
|
return Promise.resolve();
|
|
2806
3143
|
}).then(() => {
|
|
2807
|
-
|
|
3144
|
+
connectPlugin(plugins$1);
|
|
3145
|
+
seedPluginStructuresStore(plugins$1);
|
|
2808
3146
|
return Promise.resolve();
|
|
2809
3147
|
});
|
|
2810
3148
|
} else if (pgProjectionCatchup !== undefined) {
|
|
@@ -2813,11 +3151,13 @@ function Make($star) {
|
|
|
2813
3151
|
console.error("[Platform] postgres projection catch-up failed:", e);
|
|
2814
3152
|
return Promise.resolve();
|
|
2815
3153
|
}).then(() => {
|
|
2816
|
-
|
|
3154
|
+
connectPlugin(plugins$1);
|
|
3155
|
+
seedPluginStructuresStore(plugins$1);
|
|
2817
3156
|
return Promise.resolve();
|
|
2818
3157
|
});
|
|
2819
3158
|
} else {
|
|
2820
|
-
|
|
3159
|
+
connectPlugin(plugins$1);
|
|
3160
|
+
seedPluginStructuresStore(plugins$1);
|
|
2821
3161
|
}
|
|
2822
3162
|
pluginStructuresStore.contents[Platform_Admin_Structure$ReventlessCore.pluginId] = Platform_Admin_Structure$ReventlessCore.structure;
|
|
2823
3163
|
CommandGeneratorResolvers_GraphQL$ReventlessLocal.setPluginStatusGate(field => {
|
|
@@ -2938,13 +3278,13 @@ function Make($star) {
|
|
|
2938
3278
|
});
|
|
2939
3279
|
};
|
|
2940
3280
|
queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
|
|
2941
|
-
let scanAll = Bus.getQueryDbScan(
|
|
3281
|
+
let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
|
|
2942
3282
|
let items = scanAll !== undefined ? scanAll() : [];
|
|
2943
3283
|
let latestByName = {};
|
|
2944
3284
|
items.forEach(item => {
|
|
2945
3285
|
let state;
|
|
2946
3286
|
try {
|
|
2947
|
-
state = S.parseOrThrow(item,
|
|
3287
|
+
state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
|
|
2948
3288
|
} catch (exn) {
|
|
2949
3289
|
return;
|
|
2950
3290
|
}
|
|
@@ -2963,6 +3303,7 @@ function Make($star) {
|
|
|
2963
3303
|
});
|
|
2964
3304
|
return Object.values(latestByName).map(param => Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(param[1]));
|
|
2965
3305
|
};
|
|
3306
|
+
queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
|
|
2966
3307
|
registerAdminItemsAndIndexResolvers(queryResolvers, true);
|
|
2967
3308
|
platformGraphQL.registerQueries(baseParts.queries, queryResolvers);
|
|
2968
3309
|
let argId = args => Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
|
|
@@ -3049,8 +3390,8 @@ function Make($star) {
|
|
|
3049
3390
|
platformGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
|
|
3050
3391
|
adminRegisteredServers.contents.push(platformGraphQL);
|
|
3051
3392
|
platformGraphQL.registerSubscriptions([
|
|
3052
|
-
|
|
3053
|
-
|
|
3393
|
+
AdminApi$ReventlessCore.uiFragmentSubscriptionField,
|
|
3394
|
+
AdminApi$ReventlessCore.pluginStatusSubscriptionField
|
|
3054
3395
|
], Object.fromEntries([
|
|
3055
3396
|
[
|
|
3056
3397
|
"onUIFragmentChange",
|
|
@@ -3118,7 +3459,13 @@ function Make($star) {
|
|
|
3118
3459
|
hooks_apiRole.contents = {
|
|
3119
3460
|
val: undefined
|
|
3120
3461
|
};
|
|
3121
|
-
Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
3462
|
+
Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
3463
|
+
UiFragmentRegistrySlice,
|
|
3464
|
+
ApiFragmentRegistrySlice
|
|
3465
|
+
], [
|
|
3466
|
+
UiFragmentsViewSlice,
|
|
3467
|
+
ApiFragmentsViewSlice
|
|
3468
|
+
], [], [], []);
|
|
3122
3469
|
currentDeployTarget.contents = "Platform";
|
|
3123
3470
|
let adminGraphQL = resolveTargetGraphQL();
|
|
3124
3471
|
let adminMCP = resolveTargetMCP();
|
|
@@ -3129,6 +3476,7 @@ function Make($star) {
|
|
|
3129
3476
|
queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
|
|
3130
3477
|
queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
|
|
3131
3478
|
queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => [];
|
|
3479
|
+
queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
|
|
3132
3480
|
registerAdminItemsAndIndexResolvers(queryResolvers, false);
|
|
3133
3481
|
adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
|
|
3134
3482
|
let mutationResolvers = {};
|
|
@@ -3222,7 +3570,13 @@ function Make($star) {
|
|
|
3222
3570
|
outputs: PluginsReadModel.outputs,
|
|
3223
3571
|
operations: PluginsReadModel.operations,
|
|
3224
3572
|
finish: PluginsReadModel.finish
|
|
3225
|
-
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
3573
|
+
}], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
|
|
3574
|
+
UiFragmentRegistrySlice,
|
|
3575
|
+
ApiFragmentRegistrySlice
|
|
3576
|
+
], [
|
|
3577
|
+
UiFragmentsViewSlice,
|
|
3578
|
+
ApiFragmentsViewSlice
|
|
3579
|
+
], [], [], []);
|
|
3226
3580
|
hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
|
|
3227
3581
|
ep.name,
|
|
3228
3582
|
ep
|
|
@@ -3246,18 +3600,19 @@ function Make($star) {
|
|
|
3246
3600
|
queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
|
|
3247
3601
|
queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
|
|
3248
3602
|
queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
|
|
3249
|
-
let scanAll = Bus.getQueryDbScan(
|
|
3603
|
+
let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
|
|
3250
3604
|
let items = scanAll !== undefined ? scanAll() : [];
|
|
3251
3605
|
return Stdlib_Array.filterMap(items, item => {
|
|
3252
3606
|
let state;
|
|
3253
3607
|
try {
|
|
3254
|
-
state = S.parseOrThrow(item,
|
|
3608
|
+
state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
|
|
3255
3609
|
} catch (exn) {
|
|
3256
3610
|
return;
|
|
3257
3611
|
}
|
|
3258
3612
|
return Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(state);
|
|
3259
3613
|
});
|
|
3260
3614
|
};
|
|
3615
|
+
queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
|
|
3261
3616
|
queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => Object.entries(pluginStructuresStore.contents).map(param => Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(param[0], param[1]));
|
|
3262
3617
|
registerAdminItemsAndIndexResolvers(queryResolvers, true);
|
|
3263
3618
|
adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
|
|
@@ -3307,7 +3662,6 @@ function Make($star) {
|
|
|
3307
3662
|
StateViewSliceMaker.QueryDbResolvers.relayRef.contents = domainRelaySupport;
|
|
3308
3663
|
subscribeToPluginEvents();
|
|
3309
3664
|
connectPlugin([pluginComponent]);
|
|
3310
|
-
seedUIFragmentRegistryQueryDb([pluginComponent]);
|
|
3311
3665
|
seedPluginStructuresStore([pluginComponent]);
|
|
3312
3666
|
let deployedPluginOutputs = [Component$ReventlessCore.outputs(pluginComponent)];
|
|
3313
3667
|
firePluginDeployedHooks(builtInfos.contents, deployedPluginOutputs);
|
|
@@ -3354,6 +3708,8 @@ export {
|
|
|
3354
3708
|
getPlatformGraphQL,
|
|
3355
3709
|
platformMCPRef,
|
|
3356
3710
|
decodePluginEventEnvelope,
|
|
3711
|
+
decodeUiFragmentRegistryEventEnvelope,
|
|
3712
|
+
decodeApiFragmentRegistryEventEnvelope,
|
|
3357
3713
|
MakeWithConfig,
|
|
3358
3714
|
Make,
|
|
3359
3715
|
}
|