@reventlessdev/reventless-core 3.0.0-alpha.155 → 3.0.0-alpha.157
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 +23 -0
- package/README.md +49 -150
- package/package.json +13 -13
- package/src/admin/AdminApi.res +80 -10
- package/src/admin/AdminApi.res.mjs +45 -7
- package/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry.res +65 -0
- package/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry.res.mjs +87 -0
- package/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry_Behavior.res +58 -0
- package/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry_Behavior.res.mjs +135 -0
- package/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments.res +44 -0
- package/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments.res.mjs +74 -0
- package/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments_Projection.res +50 -0
- package/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments_Projection.res.mjs +80 -0
- package/src/admin/Platform_Admin.res +37 -1
- package/src/admin/Platform_Admin.res.mjs +18 -5
- package/src/admin/Platform_ApiFragmentsApi.res +32 -0
- package/src/admin/Platform_ApiFragmentsApi.res.mjs +52 -0
- package/src/admin/Platform_UIFragmentsApi.res +1 -1
- package/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res +50 -0
- package/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs +70 -0
- package/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry_Behavior.res +33 -0
- package/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry_Behavior.res.mjs +80 -0
- package/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res +33 -0
- package/src/admin/{UIFragmentRegistryReadModelSpec.res.mjs → UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs} +24 -2
- package/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res +34 -0
- package/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res.mjs +54 -0
- package/src/components/Api/Api_Naming.res +1 -1
- package/src/components/Api/GraphQL_FragmentGenerator.res +7 -11
- package/src/components/Api/GraphQL_FragmentGenerator.res.mjs +8 -22
- package/src/components/Api/GraphQL_PushPlanner.res +65 -0
- package/src/components/Api/GraphQL_PushPlanner.res.mjs +46 -0
- package/src/components/Api/GraphQL_Stitcher.res +72 -1
- package/src/components/Api/GraphQL_Stitcher.res.mjs +53 -2
- package/src/components/Dcb/Dcb_Builder.res +16 -6
- package/src/components/Dcb/Dcb_Builder.res.mjs +10 -7
- package/src/components/StateChangeSlice/StateChangeSlice_Callback.res +6 -1
- package/src/components/StateChangeSlice/StateChangeSlice_Callback.res.mjs +1 -1
- package/src/plugin/api/PluginBaseFragment.res +5 -6
- package/src/plugin/api/PluginBaseFragment.res.mjs +0 -1
- package/src/plugin/component/Plugin_Builder.res +4 -1
- package/src/plugin/component/Plugin_Builder.res.mjs +7 -6
- package/src/plugin/component/Plugin_Helpers.res +30 -0
- package/src/plugin/component/Plugin_Helpers.res.mjs +13 -3
- package/src/plugin/component/Plugin_SubscriptionSchema.res +19 -9
- package/src/plugin/component/Plugin_SubscriptionSchema.res.mjs +23 -14
- package/src/plugin/connect/PluginConnectExtension_Mapping.res +28 -6
- package/src/plugin/connect/PluginConnectExtension_Mapping.res.mjs +34 -14
- package/src/plugin/connect/PluginExtensionPoint_Builder.res +7 -1
- package/src/plugin/connect/PluginExtensionPoint_Builder.res.mjs +5 -1
- package/src/plugin/connect/PluginExtensionPoint_Plugin.res +3 -1
- package/src/plugin/connect/PluginExtensionPoint_Plugin.res.mjs +4 -2
- package/src/plugin/connect/PluginExtensionPoint_UiFragment.res +52 -0
- package/src/plugin/connect/PluginExtensionPoint_UiFragment.res.mjs +74 -0
- package/src/plugin/lifecycle/PluginBehavior.res +9 -51
- package/src/plugin/lifecycle/PluginBehavior.res.mjs +39 -68
- package/src/plugin/lifecycle/PluginSpec.res +0 -18
- package/src/plugin/lifecycle/PluginSpec.res.mjs +0 -30
- package/src/plugin/lifecycle/PluginsProjection.res +2 -6
- package/src/plugin/lifecycle/PluginsProjection.res.mjs +0 -2
- package/src/plugin/lifecycle/PluginsReadModelSpec.res +0 -2
- package/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs +0 -1
- package/tests/admin/Platform_ApiFragmentsApiTest.res +66 -0
- package/tests/admin/Platform_ApiFragmentsApiTest.res.mjs +68 -0
- package/tests/admin/Platform_UIFragmentsApiTest.res +1 -1
- package/tests/api/GraphQL_PushPlannerTest.res +62 -0
- package/tests/api/GraphQL_PushPlannerTest.res.mjs +80 -0
- package/tests/api/GraphQL_StitcherTest.res +63 -0
- package/tests/api/GraphQL_StitcherTest.res.mjs +75 -0
- package/tests/logger/LogFormatTest.res +1 -2
- package/tests/logger/LogFormatTest.res.mjs +1 -2
- package/tests/message/MessageTest.res +0 -3
- package/tests/message/MessageTest.res.mjs +0 -3
- package/src/admin/UIFragmentRegistryProjection.res +0 -43
- package/src/admin/UIFragmentRegistryProjection.res.mjs +0 -81
- package/src/admin/UIFragmentRegistryReadModelSpec.res +0 -13
|
@@ -198,3 +198,66 @@ type Mutation {
|
|
|
198
198
|
expect(missing->Array.includes("Ordering_placeOrder"))->toBe(true)
|
|
199
199
|
})
|
|
200
200
|
})
|
|
201
|
+
|
|
202
|
+
describe("GraphQL_Stitcher.subscriptionSources", () => {
|
|
203
|
+
testSync("encode/decode round-trips the subscription→mutation source mapping", () => {
|
|
204
|
+
let fragment = encode({
|
|
205
|
+
types: [],
|
|
206
|
+
mutations: [` Catalog_AddProduct(input: AddInput): CommandResult`],
|
|
207
|
+
queries: [],
|
|
208
|
+
subscriptions: [` onCatalog_AddProduct(id: ID): CommandResult`],
|
|
209
|
+
subscriptionSources: [{field: "onCatalog_AddProduct", mutations: ["Catalog_AddProduct"]}],
|
|
210
|
+
})
|
|
211
|
+
let parts = decode(fragment)
|
|
212
|
+
expect(parts.subscriptionSources)->toEqual([
|
|
213
|
+
{field: "onCatalog_AddProduct", mutations: ["Catalog_AddProduct"]},
|
|
214
|
+
])
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
testSync("decode tolerates fragments encoded before the field existed", () => {
|
|
218
|
+
let legacy: Reventless.Plugin.apiSchemaFragment = {
|
|
219
|
+
encoded: `{"types":[],"mutations":[],"queries":[],"subscriptions":[" onX(id: ID): CommandResult"]}`,
|
|
220
|
+
protocol: "graphql",
|
|
221
|
+
}
|
|
222
|
+
expect(decode(legacy).subscriptionSources)->toEqual([])
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
testSync("collectSubscriptionSources unions across fragments, first wins per field", () => {
|
|
226
|
+
let base = encode({
|
|
227
|
+
types: [],
|
|
228
|
+
mutations: [],
|
|
229
|
+
queries: [],
|
|
230
|
+
subscriptions: [` onUIFragmentChange: UIFragmentChangeEvent`],
|
|
231
|
+
subscriptionSources: [
|
|
232
|
+
{field: "onUIFragmentChange", mutations: ["Platform_UIFragmentRegistered"]},
|
|
233
|
+
],
|
|
234
|
+
})
|
|
235
|
+
let pluginA = encode({
|
|
236
|
+
types: [],
|
|
237
|
+
mutations: [],
|
|
238
|
+
queries: [],
|
|
239
|
+
subscriptions: [` onA(id: ID): CommandResult`],
|
|
240
|
+
subscriptionSources: [
|
|
241
|
+
{field: "onA", mutations: ["A"]},
|
|
242
|
+
// Colliding field — the base fragment's mapping must win.
|
|
243
|
+
{field: "onUIFragmentChange", mutations: ["Rogue_Mutation"]},
|
|
244
|
+
],
|
|
245
|
+
})
|
|
246
|
+
let collected = collectSubscriptionSources(~baseFragment=base, ~pluginFragments=[pluginA])
|
|
247
|
+
expect(collected)->toEqual([
|
|
248
|
+
{field: "onUIFragmentChange", mutations: ["Platform_UIFragmentRegistered"]},
|
|
249
|
+
{field: "onA", mutations: ["A"]},
|
|
250
|
+
])
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
testSync("core-emitted admin base fragment carries no provider directives", () => {
|
|
254
|
+
let base = AdminApi.baseFragment(~cloner=true)
|
|
255
|
+
expect(base.encoded->String.includes("@aws_subscribe"))->toBe(false)
|
|
256
|
+
expect(base.encoded->String.includes("@aws_auth"))->toBe(false)
|
|
257
|
+
// The subscription→mutation fan-in rides the structured metadata instead.
|
|
258
|
+
let parts = decode(base)
|
|
259
|
+
let fields = parts.subscriptionSources->Array.map(s => s.field)
|
|
260
|
+
expect(fields->Array.includes("onUIFragmentChange"))->toBe(true)
|
|
261
|
+
expect(fields->Array.includes("onPluginStatusChange"))->toBe(true)
|
|
262
|
+
})
|
|
263
|
+
})
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
+
import * as AdminApi$ReventlessCore from "../../src/admin/AdminApi.res.mjs";
|
|
3
4
|
import * as GraphQL_Stitcher$ReventlessCore from "../../src/components/Api/GraphQL_Stitcher.res.mjs";
|
|
4
5
|
|
|
5
6
|
let fullSchemaSdl = `type Node {
|
|
@@ -165,6 +166,80 @@ type Mutation {
|
|
|
165
166
|
});
|
|
166
167
|
});
|
|
167
168
|
|
|
169
|
+
globalThis.describe("GraphQL_Stitcher.subscriptionSources", () => {
|
|
170
|
+
globalThis.test("encode/decode round-trips the subscription→mutation source mapping", () => {
|
|
171
|
+
let fragment = GraphQL_Stitcher$ReventlessCore.encode({
|
|
172
|
+
types: [],
|
|
173
|
+
mutations: [` Catalog_AddProduct(input: AddInput): CommandResult`],
|
|
174
|
+
queries: [],
|
|
175
|
+
subscriptions: [` onCatalog_AddProduct(id: ID): CommandResult`],
|
|
176
|
+
subscriptionSources: [{
|
|
177
|
+
field: "onCatalog_AddProduct",
|
|
178
|
+
mutations: ["Catalog_AddProduct"]
|
|
179
|
+
}]
|
|
180
|
+
});
|
|
181
|
+
let parts = GraphQL_Stitcher$ReventlessCore.decode(fragment);
|
|
182
|
+
globalThis.expect(parts.subscriptionSources).toEqual([{
|
|
183
|
+
field: "onCatalog_AddProduct",
|
|
184
|
+
mutations: ["Catalog_AddProduct"]
|
|
185
|
+
}]);
|
|
186
|
+
});
|
|
187
|
+
globalThis.test("decode tolerates fragments encoded before the field existed", () => {
|
|
188
|
+
globalThis.expect(GraphQL_Stitcher$ReventlessCore.decode({
|
|
189
|
+
encoded: `{"types":[],"mutations":[],"queries":[],"subscriptions":[" onX(id: ID): CommandResult"]}`,
|
|
190
|
+
protocol: "graphql"
|
|
191
|
+
}).subscriptionSources).toEqual([]);
|
|
192
|
+
});
|
|
193
|
+
globalThis.test("collectSubscriptionSources unions across fragments, first wins per field", () => {
|
|
194
|
+
let base = GraphQL_Stitcher$ReventlessCore.encode({
|
|
195
|
+
types: [],
|
|
196
|
+
mutations: [],
|
|
197
|
+
queries: [],
|
|
198
|
+
subscriptions: [` onUIFragmentChange: UIFragmentChangeEvent`],
|
|
199
|
+
subscriptionSources: [{
|
|
200
|
+
field: "onUIFragmentChange",
|
|
201
|
+
mutations: ["Platform_UIFragmentRegistered"]
|
|
202
|
+
}]
|
|
203
|
+
});
|
|
204
|
+
let pluginA = GraphQL_Stitcher$ReventlessCore.encode({
|
|
205
|
+
types: [],
|
|
206
|
+
mutations: [],
|
|
207
|
+
queries: [],
|
|
208
|
+
subscriptions: [` onA(id: ID): CommandResult`],
|
|
209
|
+
subscriptionSources: [
|
|
210
|
+
{
|
|
211
|
+
field: "onA",
|
|
212
|
+
mutations: ["A"]
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
field: "onUIFragmentChange",
|
|
216
|
+
mutations: ["Rogue_Mutation"]
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
});
|
|
220
|
+
let collected = GraphQL_Stitcher$ReventlessCore.collectSubscriptionSources(base, [pluginA]);
|
|
221
|
+
globalThis.expect(collected).toEqual([
|
|
222
|
+
{
|
|
223
|
+
field: "onUIFragmentChange",
|
|
224
|
+
mutations: ["Platform_UIFragmentRegistered"]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
field: "onA",
|
|
228
|
+
mutations: ["A"]
|
|
229
|
+
}
|
|
230
|
+
]);
|
|
231
|
+
});
|
|
232
|
+
globalThis.test("core-emitted admin base fragment carries no provider directives", () => {
|
|
233
|
+
let base = AdminApi$ReventlessCore.baseFragment(true);
|
|
234
|
+
globalThis.expect(base.encoded.includes("@aws_subscribe")).toBe(false);
|
|
235
|
+
globalThis.expect(base.encoded.includes("@aws_auth")).toBe(false);
|
|
236
|
+
let parts = GraphQL_Stitcher$ReventlessCore.decode(base);
|
|
237
|
+
let fields = parts.subscriptionSources.map(s => s.field);
|
|
238
|
+
globalThis.expect(fields.includes("onUIFragmentChange")).toBe(true);
|
|
239
|
+
globalThis.expect(fields.includes("onPluginStatusChange")).toBe(true);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
|
|
168
243
|
export {
|
|
169
244
|
fullSchemaSdl,
|
|
170
245
|
collapsedSchemaSdl,
|
|
@@ -73,7 +73,6 @@ describe("LogFormat", () => {
|
|
|
73
73
|
extensionProtocols: [],
|
|
74
74
|
apiSchemaFragment: None,
|
|
75
75
|
apiTarget: None,
|
|
76
|
-
uiFragments: None,
|
|
77
76
|
structure: None,
|
|
78
77
|
dcbEventLog: None,
|
|
79
78
|
kind: Domain,
|
|
@@ -98,7 +97,7 @@ describe("LogFormat", () => {
|
|
|
98
97
|
},
|
|
99
98
|
)
|
|
100
99
|
let expected1 = `1/2: \x1b[1mHeartbeat\x1b[0m(0): {"command":{"TAG":"Heartbeat","_0":"0.0.0"},"meta":${metaStr},"id":"0"}`
|
|
101
|
-
let expected2 = `2/2: \x1b[1mConnect\x1b[0m(1): {"command":{"TAG":"Connect","_0":{"id":"id","name":"testName","version":"testVersion","extensionPoints":[{"name":"testExtensionPoint","commandTopic":"testCommandTopic","eventTopic":"testEventTopic"}],"extensions":[{"name":"testExtension","extensionPointName":"testExtensionPoint","dcbSources":[]}],"eventCollector":"testEventCollector","extensionProtocols":[],"apiSchemaFragment":null,"apiTarget":null,"
|
|
100
|
+
let expected2 = `2/2: \x1b[1mConnect\x1b[0m(1): {"command":{"TAG":"Connect","_0":{"id":"id","name":"testName","version":"testVersion","extensionPoints":[{"name":"testExtensionPoint","commandTopic":"testCommandTopic","eventTopic":"testEventTopic"}],"extensions":[{"name":"testExtension","extensionPointName":"testExtensionPoint","dcbSources":[]}],"eventCollector":"testEventCollector","extensionProtocols":[],"apiSchemaFragment":null,"apiTarget":null,"structure":null,"dcbEventLog":null,"kind":"Domain"}},"meta":${metaStr},"id":"1"}`
|
|
102
101
|
expect(commandJsonsToLogMessages(arr))->toEqual([expected1, expected2])
|
|
103
102
|
},
|
|
104
103
|
)
|
|
@@ -74,7 +74,6 @@ globalThis.describe("LogFormat", () => {
|
|
|
74
74
|
extensionProtocols: [],
|
|
75
75
|
apiSchemaFragment: undefined,
|
|
76
76
|
apiTarget: undefined,
|
|
77
|
-
uiFragments: undefined,
|
|
78
77
|
structure: undefined,
|
|
79
78
|
dcbEventLog: undefined,
|
|
80
79
|
kind: "Domain"
|
|
@@ -96,7 +95,7 @@ globalThis.describe("LogFormat", () => {
|
|
|
96
95
|
commandJson: Message$ReventlessCore.encode(command, PluginSpec$ReventlessCore.commandSchema)
|
|
97
96
|
}));
|
|
98
97
|
let expected1 = `1/2: \x1b[1mHeartbeat\x1b[0m(0): {"command":{"TAG":"Heartbeat","_0":"0.0.0"},"meta":` + metaStr + `,"id":"0"}`;
|
|
99
|
-
let expected2 = `2/2: \x1b[1mConnect\x1b[0m(1): {"command":{"TAG":"Connect","_0":{"id":"id","name":"testName","version":"testVersion","extensionPoints":[{"name":"testExtensionPoint","commandTopic":"testCommandTopic","eventTopic":"testEventTopic"}],"extensions":[{"name":"testExtension","extensionPointName":"testExtensionPoint","dcbSources":[]}],"eventCollector":"testEventCollector","extensionProtocols":[],"apiSchemaFragment":null,"apiTarget":null,"
|
|
98
|
+
let expected2 = `2/2: \x1b[1mConnect\x1b[0m(1): {"command":{"TAG":"Connect","_0":{"id":"id","name":"testName","version":"testVersion","extensionPoints":[{"name":"testExtensionPoint","commandTopic":"testCommandTopic","eventTopic":"testEventTopic"}],"extensions":[{"name":"testExtension","extensionPointName":"testExtensionPoint","dcbSources":[]}],"eventCollector":"testEventCollector","extensionProtocols":[],"apiSchemaFragment":null,"apiTarget":null,"structure":null,"dcbEventLog":null,"kind":"Domain"}},"meta":` + metaStr + `,"id":"1"}`;
|
|
100
99
|
globalThis.expect(LogFormat$ReventlessCore.commandJsonsToLogMessages(arr)).toEqual([
|
|
101
100
|
expected1,
|
|
102
101
|
expected2
|
|
@@ -41,7 +41,6 @@ describe("Message should", () => {
|
|
|
41
41
|
extensionProtocols: [],
|
|
42
42
|
apiSchemaFragment: None,
|
|
43
43
|
apiTarget: None,
|
|
44
|
-
uiFragments: None,
|
|
45
44
|
structure: None,
|
|
46
45
|
dcbEventLog: None,
|
|
47
46
|
kind: Domain,
|
|
@@ -110,7 +109,6 @@ describe("Message should", () => {
|
|
|
110
109
|
extensionProtocols: [],
|
|
111
110
|
apiSchemaFragment: None,
|
|
112
111
|
apiTarget: None,
|
|
113
|
-
uiFragments: None,
|
|
114
112
|
structure: Some({
|
|
115
113
|
readModels: [],
|
|
116
114
|
stateViewSlices: [],
|
|
@@ -209,7 +207,6 @@ describe("Message should", () => {
|
|
|
209
207
|
extensionProtocols: [],
|
|
210
208
|
apiSchemaFragment: None,
|
|
211
209
|
apiTarget: None,
|
|
212
|
-
uiFragments: None,
|
|
213
210
|
structure: None,
|
|
214
211
|
dcbEventLog: None,
|
|
215
212
|
kind: Domain,
|
|
@@ -41,7 +41,6 @@ globalThis.describe("Message should", () => {
|
|
|
41
41
|
extensionProtocols: [],
|
|
42
42
|
apiSchemaFragment: undefined,
|
|
43
43
|
apiTarget: undefined,
|
|
44
|
-
uiFragments: undefined,
|
|
45
44
|
structure: undefined,
|
|
46
45
|
dcbEventLog: undefined,
|
|
47
46
|
kind: "Domain"
|
|
@@ -100,7 +99,6 @@ globalThis.describe("Message should", () => {
|
|
|
100
99
|
extensionProtocols: [],
|
|
101
100
|
apiSchemaFragment: undefined,
|
|
102
101
|
apiTarget: undefined,
|
|
103
|
-
uiFragments: undefined,
|
|
104
102
|
structure: {
|
|
105
103
|
readModels: [],
|
|
106
104
|
stateViewSlices: [],
|
|
@@ -188,7 +186,6 @@ globalThis.describe("Message should", () => {
|
|
|
188
186
|
extensionProtocols: [],
|
|
189
187
|
apiSchemaFragment: undefined,
|
|
190
188
|
apiTarget: undefined,
|
|
191
|
-
uiFragments: undefined,
|
|
192
189
|
structure: undefined,
|
|
193
190
|
dcbEventLog: undefined,
|
|
194
191
|
kind: "Domain"
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
open Reventless.Message
|
|
2
|
-
open Reventless.Projection
|
|
3
|
-
|
|
4
|
-
let moduleUrl: string = %raw(`import.meta.url`)
|
|
5
|
-
|
|
6
|
-
module UIFragmentRegistryMapping = Reventless.Projection.Mapping.Make(
|
|
7
|
-
PluginSpec,
|
|
8
|
-
UIFragmentRegistryReadModelSpec,
|
|
9
|
-
{
|
|
10
|
-
let project = ({event, id, meta: {time}}) =>
|
|
11
|
-
switch event {
|
|
12
|
-
| PluginSpec.UIFragmentRegistered({manifest}) =>
|
|
13
|
-
Set(
|
|
14
|
-
id,
|
|
15
|
-
{
|
|
16
|
-
UIFragmentRegistryReadModelSpec.pluginId: id,
|
|
17
|
-
remoteEntryUrl: manifest.remoteEntryUrl,
|
|
18
|
-
panels: manifest.panels,
|
|
19
|
-
pages: manifest.pages,
|
|
20
|
-
registeredAt: time,
|
|
21
|
-
updatedAt: time,
|
|
22
|
-
},
|
|
23
|
-
)
|
|
24
|
-
| UIFragmentUpdated({newManifest}) =>
|
|
25
|
-
Update(
|
|
26
|
-
id,
|
|
27
|
-
state => {
|
|
28
|
-
...state,
|
|
29
|
-
remoteEntryUrl: newManifest.remoteEntryUrl,
|
|
30
|
-
panels: newManifest.panels,
|
|
31
|
-
pages: newManifest.pages,
|
|
32
|
-
updatedAt: time,
|
|
33
|
-
},
|
|
34
|
-
)
|
|
35
|
-
| UIFragmentDeregistered(_) => Delete(id)
|
|
36
|
-
| _ => Ignore
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
module Mappings = Reventless.Projection.Mappings.Make(UIFragmentRegistryReadModelSpec)
|
|
42
|
-
|
|
43
|
-
let mappings: array<module(Mappings.Mapping)> = [module(UIFragmentRegistryMapping)]
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
-
|
|
3
|
-
import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
|
|
4
|
-
import * as Projection$Reventless from "@reventlessdev/reventless-spec/src/types/Projection.res.mjs";
|
|
5
|
-
import * as PluginSpec$ReventlessCore from "../plugin/lifecycle/PluginSpec.res.mjs";
|
|
6
|
-
import * as UIFragmentRegistryReadModelSpec$ReventlessCore from "./UIFragmentRegistryReadModelSpec.res.mjs";
|
|
7
|
-
|
|
8
|
-
let moduleUrl = import.meta.url;
|
|
9
|
-
|
|
10
|
-
function project(param) {
|
|
11
|
-
let event = param.event;
|
|
12
|
-
let time = param.meta.time;
|
|
13
|
-
let id = param.id;
|
|
14
|
-
switch (event.TAG) {
|
|
15
|
-
case "UIFragmentRegistered" :
|
|
16
|
-
let manifest = event._0.manifest;
|
|
17
|
-
return {
|
|
18
|
-
TAG: "Set",
|
|
19
|
-
_0: id,
|
|
20
|
-
_1: {
|
|
21
|
-
pluginId: id,
|
|
22
|
-
remoteEntryUrl: manifest.remoteEntryUrl,
|
|
23
|
-
panels: manifest.panels,
|
|
24
|
-
pages: manifest.pages,
|
|
25
|
-
registeredAt: time,
|
|
26
|
-
updatedAt: time
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
case "UIFragmentUpdated" :
|
|
30
|
-
let newManifest = event._0.newManifest;
|
|
31
|
-
return {
|
|
32
|
-
TAG: "Update",
|
|
33
|
-
_0: id,
|
|
34
|
-
_1: state => ({
|
|
35
|
-
pluginId: state.pluginId,
|
|
36
|
-
remoteEntryUrl: newManifest.remoteEntryUrl,
|
|
37
|
-
panels: newManifest.panels,
|
|
38
|
-
pages: newManifest.pages,
|
|
39
|
-
registeredAt: state.registeredAt,
|
|
40
|
-
updatedAt: time
|
|
41
|
-
})
|
|
42
|
-
};
|
|
43
|
-
case "UIFragmentDeregistered" :
|
|
44
|
-
return {
|
|
45
|
-
TAG: "Delete",
|
|
46
|
-
_0: id
|
|
47
|
-
};
|
|
48
|
-
default:
|
|
49
|
-
return "Ignore";
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
let UIFragmentRegistryMapping = Projection$Reventless.Mapping.Make({
|
|
54
|
-
Id: Id$Reventless.$$String,
|
|
55
|
-
name: PluginSpec$ReventlessCore.name,
|
|
56
|
-
eventSchema: PluginSpec$ReventlessCore.eventSchema
|
|
57
|
-
})({
|
|
58
|
-
Id: Id$Reventless.$$String,
|
|
59
|
-
name: UIFragmentRegistryReadModelSpec$ReventlessCore.name,
|
|
60
|
-
stateSchema: UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema,
|
|
61
|
-
subIdConfig: undefined
|
|
62
|
-
})({
|
|
63
|
-
project: project
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
let Mappings = Projection$Reventless.Mappings.Make({
|
|
67
|
-
Id: Id$Reventless.$$String,
|
|
68
|
-
name: UIFragmentRegistryReadModelSpec$ReventlessCore.name,
|
|
69
|
-
stateSchema: UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema,
|
|
70
|
-
subIdConfig: undefined
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
let mappings = [UIFragmentRegistryMapping];
|
|
74
|
-
|
|
75
|
-
export {
|
|
76
|
-
moduleUrl,
|
|
77
|
-
UIFragmentRegistryMapping,
|
|
78
|
-
Mappings,
|
|
79
|
-
mappings,
|
|
80
|
-
}
|
|
81
|
-
/* moduleUrl Not a pure module */
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
@@reventless.spec("UIFragmentRegistry")
|
|
2
|
-
|
|
3
|
-
open Reventless.Plugin
|
|
4
|
-
|
|
5
|
-
@schema
|
|
6
|
-
type state = {
|
|
7
|
-
pluginId: string,
|
|
8
|
-
remoteEntryUrl: string,
|
|
9
|
-
panels: array<panelManifestEntry>,
|
|
10
|
-
pages: array<pageManifestEntry>,
|
|
11
|
-
registeredAt: string,
|
|
12
|
-
updatedAt: string,
|
|
13
|
-
}
|