@reventlessdev/reventless-core 3.0.0-alpha.238 → 3.0.0-alpha.240
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 +40 -0
- package/package.json +12 -12
- package/src/Message.res +11 -11
- package/src/Message.res.mjs +15 -14
- package/src/Projection.res +2 -2
- package/src/Projection.res.mjs +5 -4
- package/src/adapter/Monitoring/Monitoring.res +24 -2
- package/src/adapter/Monitoring/Monitoring.res.mjs +3 -3
- package/src/admin/Platform_AdminApi.res.mjs +3 -3
- package/src/admin/Platform_Admin_Structure.res +33 -112
- package/src/admin/Platform_Admin_Structure.res.mjs +8 -138
- package/src/admin/Platform_ComponentDefinitionsApi.res +2 -1
- package/src/admin/Platform_ComponentDefinitionsApi.res.mjs +5 -1
- package/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs +12 -12
- package/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs +14 -14
- package/src/components/Aggregate/Aggregate_Callback.res +2 -2
- package/src/components/Aggregate/Aggregate_Callback.res.mjs +4 -4
- package/src/components/Api/ApiAllowedStatesHelpers.res.mjs +3 -3
- package/src/components/Api/ApiNoApiHelpers.res.mjs +5 -5
- package/src/components/Api/ApiTargetStateHelpers.res.mjs +3 -3
- package/src/components/Api/GraphQL_FragmentGenerator.res +140 -24
- package/src/components/Api/GraphQL_FragmentGenerator.res.mjs +48 -21
- package/src/components/Api/GraphQL_SchemaInspector.res +1 -1
- package/src/components/Api/GraphQL_SchemaInspector.res.mjs +1 -1
- package/src/components/Api/MCP_SchemaGenerator.res +1 -1
- package/src/components/Api/MCP_SchemaGenerator.res.mjs +1 -1
- package/src/components/Api/SchemaType.res +6 -10
- package/src/components/Api/SchemaType.res.mjs +4 -4
- package/src/components/Api/StorageRefFields.res +1 -1
- package/src/components/Api/StorageRefFields.res.mjs +1 -1
- package/src/components/Api/SuryToJsonSchema.res +19 -0
- package/src/components/Api/SuryToJsonSchema.res.mjs +10 -5
- package/src/components/AutomationSlice/AutomationSlice_Callback.res +3 -4
- package/src/components/AutomationSlice/AutomationSlice_Callback.res.mjs +22 -23
- package/src/components/CommandTopic/CommandTopic_Callback.res +1 -2
- package/src/components/CommandTopic/CommandTopic_Callback.res.mjs +3 -4
- package/src/components/CommandTopic/CommandTopic_Helpers.res +1 -1
- package/src/components/CommandTopic/CommandTopic_Helpers.res.mjs +3 -3
- package/src/components/Counter/Counter.res.mjs +2 -2
- package/src/components/Counter/Counter_Callback.res.mjs +4 -4
- package/src/components/Counter/Counter_Operations.res.mjs +4 -4
- package/src/components/Dcb/Dcb_Builder.res +1 -1
- package/src/components/Dcb/Dcb_Builder.res.mjs +8 -6
- package/src/components/DcbEventLog/DcbEventLog_Builder.res.mjs +4 -3
- package/src/components/EventCollector/EventCollector_Builder.res +1 -1
- package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res +1 -2
- package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res.mjs +11 -12
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res +3 -4
- package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Callback.res.mjs +24 -25
- package/src/components/SideEffectHandler/SideEffectHandler_Callback.res +1 -1
- package/src/components/SideEffectHandler/SideEffectHandler_Callback.res.mjs +3 -3
- package/src/components/StateChangeSlice/StateChangeSlice_Callback.res +2 -2
- package/src/components/StateChangeSlice/StateChangeSlice_Callback.res.mjs +4 -4
- package/src/components/StateViewSlice/StateViewSlice_Builder.res +1 -1
- package/src/components/StateViewSlice/StateViewSlice_Builder.res.mjs +3 -3
- package/src/plugin/api/PluginBaseFragment.res +12 -29
- package/src/plugin/api/PluginBaseFragment.res.mjs +3 -22
- package/src/plugin/component/Capability_Inference.res +118 -1
- package/src/plugin/component/Capability_Inference.res.mjs +128 -1
- package/src/plugin/component/Plugin_Builder.res +9 -2
- package/src/plugin/component/Plugin_Builder.res.mjs +5 -2
- package/src/plugin/component/Plugin_Helpers.res +11 -11
- package/src/plugin/component/Plugin_Helpers.res.mjs +11 -10
- package/src/plugin/component/Plugin_Structure.res +458 -296
- package/src/plugin/component/Plugin_Structure.res.mjs +259 -182
- package/src/plugin/component/Plugin_SubscriptionSchema.res +1 -1
- package/src/plugin/component/Plugin_SubscriptionSchema.res.mjs +1 -1
- package/src/plugin/component/SchemaWalker.res +11 -11
- package/src/plugin/component/SchemaWalker.res.mjs +8 -9
- package/src/plugin/connect/PluginExtensionPoint_Plugin.res.mjs +15 -15
- package/src/plugin/lifecycle/PluginBehavior.res.mjs +55 -55
- package/src/plugin/lifecycle/PluginSpec.res +22 -7
- package/src/plugin/lifecycle/PluginSpec.res.mjs +91 -36
- package/src/plugin/lifecycle/PluginsReadModelSpec.res +36 -9
- package/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs +33 -22
- package/src/util/Interstack.res +3 -3
- package/src/util/LogFormat.res +1 -2
- package/src/util/LogFormat.res.mjs +2 -2
- package/tests/IdentityTest.res +6 -7
- package/tests/IdentityTest.res.mjs +7 -9
- package/tests/adapter/MonitoringTest.res +30 -3
- package/tests/adapter/MonitoringTest.res.mjs +31 -12
- package/tests/adapter/RuntimeExtensionHookReachTest.res +0 -1
- package/tests/adapter/RuntimeExtensionHookReachTest.res.mjs +5 -7
- package/tests/admin/Platform_Admin_StructureTest.res +254 -0
- package/tests/admin/Platform_Admin_StructureTest.res.mjs +219 -0
- package/tests/admin/Platform_BakedManifestTest.res +1 -0
- package/tests/admin/Platform_BakedManifestTest.res.mjs +1 -0
- package/tests/admin/Platform_ComponentDefinitionsApiTest.res +3 -0
- package/tests/admin/Platform_ComponentDefinitionsApiTest.res.mjs +6 -0
- package/tests/admin/Platform_PluginStructuresApiTest.res +1 -0
- package/tests/admin/Platform_PluginStructuresApiTest.res.mjs +2 -0
- package/tests/aggregate/AggregateCacheTest.res +0 -1
- package/tests/aggregate/AggregateCacheTest.res.mjs +13 -15
- package/tests/aggregate/AggregateConflictTest.res +0 -1
- package/tests/aggregate/AggregateConflictTest.res.mjs +7 -9
- package/tests/aggregate/AggregateFixtures.res +0 -1
- package/tests/aggregate/AggregateFixtures.res.mjs +19 -21
- package/tests/aggregate/AggregateSnapshotTest.res +1 -2
- package/tests/aggregate/AggregateSnapshotTest.res.mjs +15 -16
- package/tests/api/ApiNoApiTest.res.mjs +17 -9
- package/tests/api/GraphQL_FragmentGeneratorTest.res +232 -0
- package/tests/api/GraphQL_FragmentGeneratorTest.res.mjs +207 -55
- package/tests/api/PsInternalFieldsReadModel.res +21 -0
- package/tests/api/PsInternalFieldsReadModel.res.mjs +74 -0
- package/tests/api/StorageRefFieldsTest.res.mjs +13 -13
- package/tests/api/SuryToJsonSchemaTest.res +73 -3
- package/tests/api/SuryToJsonSchemaTest.res.mjs +364 -816
- package/tests/commandgenerator/CommandGeneratorFixtures.res +0 -1
- package/tests/commandgenerator/CommandGeneratorFixtures.res.mjs +19 -21
- package/tests/commandgenerator/OwnerStampingTest.res +0 -1
- package/tests/commandgenerator/OwnerStampingTest.res.mjs +9 -11
- package/tests/commandtopic/CommandTopicCallbackFixtures.res +0 -1
- package/tests/commandtopic/CommandTopicCallbackFixtures.res.mjs +7 -9
- package/tests/counter/CounterFixtures.res +0 -1
- package/tests/counter/CounterFixtures.res.mjs +1 -4
- package/tests/dcb/DcbDecodeTest.res.mjs +24 -24
- package/tests/dcb/DcbEventLogOperationsTest.res +2 -2
- package/tests/dcb/DcbEventLogOperationsTest.res.mjs +3 -3
- package/tests/dcb/DcbEventLogSchemaTest.res.mjs +7 -7
- package/tests/dcb/DcbFixtures.res +0 -1
- package/tests/dcb/DcbFixtures.res.mjs +87 -89
- package/tests/dcb/DcbTagTest.res.mjs +6 -6
- package/tests/dcb/DcbValidationTest.res.mjs +52 -52
- package/tests/eventlog/EventLogFixtures.res +0 -1
- package/tests/eventlog/EventLogFixtures.res.mjs +7 -9
- package/tests/eventmapper/EventMapperFixtures.res +0 -1
- package/tests/eventmapper/EventMapperFixtures.res.mjs +24 -26
- package/tests/eventtopic/EventTopicFixtures.res +0 -1
- package/tests/eventtopic/EventTopicFixtures.res.mjs +7 -9
- package/tests/extensionpoint/ExtensionPointFixtures.res +0 -1
- package/tests/extensionpoint/ExtensionPointFixtures.res.mjs +10 -12
- package/tests/extensionpoint/ExtensionPointOperationsTest.res +1 -2
- package/tests/extensionpoint/ExtensionPointOperationsTest.res.mjs +9 -10
- package/tests/logger/LogFormatTest.res +3 -2
- package/tests/logger/LogFormatTest.res.mjs +7 -9
- package/tests/message/MessageTest.res +2 -2
- package/tests/message/MessageTest.res.mjs +8 -7
- package/tests/message/MetaEnvelopeTest.res +5 -5
- package/tests/message/MetaEnvelopeTest.res.mjs +12 -11
- package/tests/plugin/ManifestVisibilityTest.res.mjs +7 -7
- package/tests/plugin/PluginDefinitionScalars.res +5 -3
- package/tests/plugin/PluginDefinitionScalars.res.mjs +2 -2
- package/tests/plugin/PluginLifecycleCorpusTest.res +4 -3
- package/tests/plugin/PluginLifecycleCorpusTest.res.mjs +3 -6
- package/tests/plugin/PluginSpecExperiment.res +0 -1
- package/tests/plugin/PluginSpecExperiment.res.mjs +12 -14
- package/tests/plugin/PluginStructureTest.res +292 -2
- package/tests/plugin/PluginStructureTest.res.mjs +391 -88
- package/tests/plugin/Plugin_EventQuerySchemaTest.res.mjs +3 -3
- package/tests/plugin/SchemaWalkerTest.res +0 -1
- package/tests/plugin/SchemaWalkerTest.res.mjs +17 -19
- package/tests/plugin/StateChangeSlice/PsAttachInvoice.res.mjs +5 -5
- package/tests/plugin/StateChangeSlice/PsChangePhoto.res.mjs +8 -8
- package/tests/plugin/StateChangeSlice/PsDispatchShipment.res.mjs +5 -5
- package/tests/plugin/StateChangeSlice/PsGatedCommands.res.mjs +9 -9
- package/tests/plugin/StateChangeSlice/PsPlaceOrder.res.mjs +5 -5
- package/tests/plugin/StateChangeSlice/PsReserveStock.res.mjs +8 -8
- package/tests/plugin/StateChangeSlice/PsShipOrder.res.mjs +15 -15
- package/tests/plugin/StateChangeSlice/PsTypoStore.res +31 -0
- package/tests/plugin/StateChangeSlice/PsTypoStore.res.mjs +62 -0
- package/tests/plugin/StateChangeSlice/PsUploadAvatar.res.mjs +8 -8
- package/tests/plugin/StateChangeSlice/PsUploadImages.res +40 -0
- package/tests/plugin/StateChangeSlice/PsUploadImages.res.mjs +66 -0
- package/tests/plugin/StateViewSlice/PsAnnotatedView.res.mjs +13 -12
- package/tests/plugin/StateViewSlice/PsAvailableProductsView.res.mjs +8 -8
- package/tests/plugin/StateViewSlice/PsCategoriesView.res.mjs +6 -6
- package/tests/plugin/StateViewSlice/PsCustomersView.res.mjs +10 -10
- package/tests/plugin/StateViewSlice/PsGatedView.res.mjs +6 -6
- package/tests/plugin/StateViewSlice/PsOrdersView.res.mjs +9 -9
- package/tests/plugin/StateViewSlice/PsShipmentsView.res.mjs +11 -10
- package/tests/plugin/pluginDefinitionRequiredScalars.txt +15 -0
- package/tests/querydb/QueryDbFixtures.res +0 -1
- package/tests/querydb/QueryDbFixtures.res.mjs +5 -7
- package/tests/sideeffecthandler/SideEffectHandlerFixtures.res +0 -1
- package/tests/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +4 -6
- package/tests/util/CommandPublisherTest.res +0 -1
- package/tests/util/CommandPublisherTest.res.mjs +4 -6
|
@@ -65,9 +65,7 @@ let conventionalLabelNames = [
|
|
|
65
65
|
"displayname"
|
|
66
66
|
];
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
return SchemaType$ReventlessCore.fromSury(entityName, item.location, item.schema);
|
|
70
|
-
}
|
|
68
|
+
let shapeOfField = SchemaType$ReventlessCore.fromSury;
|
|
71
69
|
|
|
72
70
|
function lifecycleFieldFromStateSchema(entityName, stateSchema) {
|
|
73
71
|
let spec = StateAnnotations$Reventless.getSpec(stateSchema);
|
|
@@ -75,13 +73,11 @@ function lifecycleFieldFromStateSchema(entityName, stateSchema) {
|
|
|
75
73
|
if (annotated !== undefined) {
|
|
76
74
|
return annotated;
|
|
77
75
|
} else if (stateSchema.type === "object") {
|
|
78
|
-
return Stdlib_Option.
|
|
79
|
-
if (
|
|
80
|
-
return
|
|
81
|
-
} else {
|
|
82
|
-
return false;
|
|
76
|
+
return Stdlib_Option.flatMap(stateSchema.properties["lifecycle"], schema => {
|
|
77
|
+
if (isLifecycleShape(SchemaType$ReventlessCore.fromSury(entityName, "lifecycle", schema))) {
|
|
78
|
+
return "lifecycle";
|
|
83
79
|
}
|
|
84
|
-
})
|
|
80
|
+
});
|
|
85
81
|
} else {
|
|
86
82
|
return;
|
|
87
83
|
}
|
|
@@ -102,14 +98,18 @@ function retiredValuesFromStateSchema(stateSchema) {
|
|
|
102
98
|
return Stdlib_Option.flatMap(retiredFromStateSchema(stateSchema), r => r.values);
|
|
103
99
|
}
|
|
104
100
|
|
|
101
|
+
function namedWhenRetiredFromStateSchema(stateSchema) {
|
|
102
|
+
return Stdlib_Option.mapOr(retiredFromStateSchema(stateSchema), false, r => r.namedWhenRetired);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
105
|
function checkRetiredValue(entityName, stateSchema) {
|
|
106
106
|
let match = retiredFromStateSchema(stateSchema);
|
|
107
107
|
if (match === undefined) {
|
|
108
|
-
return;
|
|
108
|
+
return "NotDeclared";
|
|
109
109
|
}
|
|
110
110
|
let values = match.values;
|
|
111
111
|
if (values === undefined) {
|
|
112
|
-
return;
|
|
112
|
+
return "NotDeclared";
|
|
113
113
|
}
|
|
114
114
|
let field = match.field;
|
|
115
115
|
let named = values.join(", ");
|
|
@@ -118,8 +118,8 @@ function checkRetiredValue(entityName, stateSchema) {
|
|
|
118
118
|
log.warn("Plugin_Structure", undefined, entityName + `: @retired(` + named + `) is on "` + field + `", which is not this record's lifecycle field` + Stdlib_Option.getOr(Stdlib_Option.map(lifecycle, f => ` (that is "` + f + `")`), " (it declares none)") + `. A retirement state no command's @transition can name loses the command filtering the state form exists for.`);
|
|
119
119
|
}
|
|
120
120
|
let declared;
|
|
121
|
-
declared = stateSchema.type === "object" ? Stdlib_Option.getOr(Stdlib_Option.map(stateSchema.
|
|
122
|
-
let match =
|
|
121
|
+
declared = stateSchema.type === "object" ? Stdlib_Option.getOr(Stdlib_Option.map(stateSchema.properties[field], schema => {
|
|
122
|
+
let match = SchemaType$ReventlessCore.fromSury(entityName, field, schema);
|
|
123
123
|
if (typeof match !== "object") {
|
|
124
124
|
return [];
|
|
125
125
|
}
|
|
@@ -139,17 +139,33 @@ function checkRetiredValue(entityName, stateSchema) {
|
|
|
139
139
|
return [];
|
|
140
140
|
}
|
|
141
141
|
}), []) : [];
|
|
142
|
-
if (declared.length
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
if (declared.length === 0) {
|
|
143
|
+
return {
|
|
144
|
+
TAG: "Unchecked",
|
|
145
|
+
_0: entityName + `: @retired(` + named + `) is on "` + field + `", whose shape carries no cases to check the names against.`
|
|
146
|
+
};
|
|
147
|
+
} else {
|
|
148
|
+
return {
|
|
149
|
+
TAG: "Checked",
|
|
150
|
+
_0: values.filter(v => !declared.includes(v)).map(v => entityName + `: @retired(` + v + `) names a state "` + field + `" does not declare — known values: ` + declared.join(", ") + `.`)
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function reportRetiredStates(pluginName, failures, unchecked) {
|
|
156
|
+
if (unchecked.length !== 0) {
|
|
157
|
+
log.warn("Plugin_Structure", undefined, pluginName + `: ` + unchecked.length.toString() + ` @retired declaration(s) could not be checked.\n` + unchecked.join("\n"));
|
|
158
|
+
}
|
|
159
|
+
if (failures.length !== 0) {
|
|
160
|
+
return Stdlib_JsError.throwWithMessage(pluginName + `: @retired names states that do not exist.\n` + failures.join("\n"));
|
|
145
161
|
}
|
|
146
162
|
}
|
|
147
163
|
|
|
148
164
|
function lifecycleStatesFromStateSchema(entityName, stateSchema) {
|
|
149
165
|
return Stdlib_Option.flatMap(lifecycleFieldFromStateSchema(entityName, stateSchema), field => {
|
|
150
166
|
if (stateSchema.type === "object") {
|
|
151
|
-
return Stdlib_Option.map(stateSchema.
|
|
152
|
-
let match =
|
|
167
|
+
return Stdlib_Option.map(stateSchema.properties[field], schema => {
|
|
168
|
+
let match = SchemaType$ReventlessCore.fromSury(entityName, field, schema);
|
|
153
169
|
if (typeof match !== "object") {
|
|
154
170
|
return [];
|
|
155
171
|
}
|
|
@@ -215,29 +231,17 @@ function lifecycleTopologyFindings(writables, lifecycleStatesByView) {
|
|
|
215
231
|
Object.entries(lifecycleStatesByView).forEach(param => {
|
|
216
232
|
let states = param[1];
|
|
217
233
|
let view = param[0];
|
|
218
|
-
let
|
|
234
|
+
let reachable = Stdlib_Array.reduce(writables, [], (acc, w) => {
|
|
219
235
|
if (w.linkedViews.includes(view)) {
|
|
220
|
-
return acc.concat(Stdlib_Array.
|
|
221
|
-
let match = cmd.allowedStates;
|
|
222
|
-
let match$1 = cmd.targetState;
|
|
223
|
-
if (match !== undefined && match$1 !== undefined) {
|
|
224
|
-
return inner.concat(match.map(from => [
|
|
225
|
-
from,
|
|
226
|
-
match$1
|
|
227
|
-
]));
|
|
228
|
-
} else {
|
|
229
|
-
return inner;
|
|
230
|
-
}
|
|
231
|
-
}));
|
|
236
|
+
return acc.concat(Stdlib_Array.filterMap(w.commands, cmd => cmd.targetState));
|
|
232
237
|
} else {
|
|
233
238
|
return acc;
|
|
234
239
|
}
|
|
235
240
|
});
|
|
236
|
-
if (
|
|
241
|
+
if (reachable.length === 0) {
|
|
237
242
|
return;
|
|
238
243
|
}
|
|
239
244
|
let initial = states[0];
|
|
240
|
-
let reachable = edges.map(param => param[1]);
|
|
241
245
|
states.forEach(state => {
|
|
242
246
|
if (!reachable.includes(state) && Primitive_object.notequal(state, initial)) {
|
|
243
247
|
findings.push([
|
|
@@ -278,29 +282,30 @@ function labelFieldsFromStateSchema(entityName, stateSchema) {
|
|
|
278
282
|
};
|
|
279
283
|
}
|
|
280
284
|
let candidates;
|
|
281
|
-
candidates = stateSchema.type === "object" ? stateSchema.
|
|
282
|
-
|
|
283
|
-
|
|
285
|
+
candidates = stateSchema.type === "object" ? Object.entries(stateSchema.properties).filter(param => {
|
|
286
|
+
let name = param[0];
|
|
287
|
+
if (name !== "TAG" && name !== "id") {
|
|
288
|
+
return isLabelShape(SchemaType$ReventlessCore.fromSury(entityName, name, param[1]));
|
|
284
289
|
} else {
|
|
285
290
|
return false;
|
|
286
291
|
}
|
|
287
292
|
}) : [];
|
|
288
|
-
let conventional = candidates.find(
|
|
289
|
-
let lower =
|
|
293
|
+
let conventional = candidates.find(param => {
|
|
294
|
+
let lower = param[0].toLowerCase();
|
|
290
295
|
return conventionalLabelNames.some(n => n === lower);
|
|
291
296
|
});
|
|
292
297
|
let picked = conventional !== undefined ? [
|
|
293
|
-
conventional,
|
|
298
|
+
conventional[0],
|
|
294
299
|
"Convention"
|
|
295
|
-
] : Stdlib_Option.map(candidates[0],
|
|
296
|
-
|
|
300
|
+
] : Stdlib_Option.map(candidates[0], param => [
|
|
301
|
+
param[0],
|
|
297
302
|
"Position"
|
|
298
303
|
]);
|
|
299
304
|
if (picked !== undefined) {
|
|
300
|
-
let
|
|
305
|
+
let name = picked[0];
|
|
301
306
|
return {
|
|
302
|
-
field:
|
|
303
|
-
searchableFields: [
|
|
307
|
+
field: name,
|
|
308
|
+
searchableFields: [name],
|
|
304
309
|
source: picked[1]
|
|
305
310
|
};
|
|
306
311
|
}
|
|
@@ -357,7 +362,7 @@ function toEventDef(v) {
|
|
|
357
362
|
}
|
|
358
363
|
|
|
359
364
|
function extractEventDefs(eventSchema) {
|
|
360
|
-
if (eventSchema.type === "
|
|
365
|
+
if (eventSchema.type === "anyOf") {
|
|
361
366
|
return Stdlib_Array.filterMap(eventSchema.anyOf, toEventDef);
|
|
362
367
|
} else {
|
|
363
368
|
return Stdlib_Option.mapOr(toEventDef(eventSchema), [], def => [def]);
|
|
@@ -372,19 +377,8 @@ function extractErrorDefs(errorSchema) {
|
|
|
372
377
|
}));
|
|
373
378
|
}
|
|
374
379
|
|
|
375
|
-
function
|
|
376
|
-
|
|
377
|
-
let readModels = readModelsOpt !== undefined ? readModelsOpt : [];
|
|
378
|
-
let stateViewSlices = stateViewSlicesOpt !== undefined ? stateViewSlicesOpt : [];
|
|
379
|
-
let stateChangeSlices = stateChangeSlicesOpt !== undefined ? stateChangeSlicesOpt : [];
|
|
380
|
-
let automationSlices = automationSlicesOpt !== undefined ? automationSlicesOpt : [];
|
|
381
|
-
let outboundTranslationSlices = outboundTranslationSlicesOpt !== undefined ? outboundTranslationSlicesOpt : [];
|
|
382
|
-
let inboundTranslationSlices = inboundTranslationSlicesOpt !== undefined ? inboundTranslationSlicesOpt : [];
|
|
383
|
-
let extensions = extensionsOpt !== undefined ? extensionsOpt : [];
|
|
384
|
-
let extensionPoints = extensionPointsOpt !== undefined ? extensionPointsOpt : [];
|
|
385
|
-
let componentChapters = componentChaptersOpt !== undefined ? componentChaptersOpt : ({});
|
|
386
|
-
let qualify = (prefix, names) => names.map(n => prefix + "." + n);
|
|
387
|
-
let isCreateCommandName = name => [
|
|
380
|
+
function isCreateCommandName(name) {
|
|
381
|
+
return [
|
|
388
382
|
"Add",
|
|
389
383
|
"Create",
|
|
390
384
|
"Register",
|
|
@@ -394,135 +388,193 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
394
388
|
"Start",
|
|
395
389
|
"Place"
|
|
396
390
|
].some(p => name.startsWith(p));
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
"Collection",
|
|
402
|
-
undefined
|
|
403
|
-
];
|
|
404
|
-
} else {
|
|
405
|
-
return [
|
|
406
|
-
"Instance",
|
|
407
|
-
undefined
|
|
408
|
-
];
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
let taggedFields = Object.entries(properties).filter(param => {
|
|
412
|
-
let fieldSchema = param[1];
|
|
413
|
-
if (param[0] !== "TAG") {
|
|
414
|
-
if (DcbTag$Reventless.isTagged(fieldSchema)) {
|
|
415
|
-
return true;
|
|
416
|
-
} else {
|
|
417
|
-
return DcbTag$Reventless.isTaggedArray(fieldSchema);
|
|
418
|
-
}
|
|
419
|
-
} else {
|
|
420
|
-
return false;
|
|
421
|
-
}
|
|
422
|
-
});
|
|
423
|
-
let taggedField = Stdlib_Option.orElse(taggedFields.find(param => DcbTag$Reventless.isPartitionTag(param[1])), taggedFields[0]);
|
|
424
|
-
if (taggedField === undefined) {
|
|
425
|
-
return [
|
|
426
|
-
"Collection",
|
|
427
|
-
undefined
|
|
428
|
-
];
|
|
429
|
-
}
|
|
430
|
-
let fieldName = taggedField[0];
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
function commandLevelAndId(isAggregate, variantName, properties) {
|
|
394
|
+
if (isAggregate) {
|
|
431
395
|
if (isCreateCommandName(variantName)) {
|
|
432
396
|
return [
|
|
433
397
|
"Collection",
|
|
434
|
-
|
|
398
|
+
undefined
|
|
435
399
|
];
|
|
436
400
|
} else {
|
|
437
401
|
return [
|
|
438
402
|
"Instance",
|
|
439
|
-
|
|
403
|
+
undefined
|
|
440
404
|
];
|
|
441
405
|
}
|
|
442
|
-
}
|
|
443
|
-
let
|
|
444
|
-
|
|
445
|
-
|
|
406
|
+
}
|
|
407
|
+
let taggedFields = Object.entries(properties).filter(param => {
|
|
408
|
+
let fieldSchema = param[1];
|
|
409
|
+
if (param[0] !== "TAG") {
|
|
410
|
+
if (DcbTag$Reventless.isTagged(fieldSchema)) {
|
|
411
|
+
return true;
|
|
412
|
+
} else {
|
|
413
|
+
return DcbTag$Reventless.isTaggedArray(fieldSchema);
|
|
414
|
+
}
|
|
415
|
+
} else {
|
|
416
|
+
return false;
|
|
446
417
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
418
|
+
});
|
|
419
|
+
let taggedField = Stdlib_Option.orElse(taggedFields.find(param => DcbTag$Reventless.isPartitionTag(param[1])), taggedFields[0]);
|
|
420
|
+
if (taggedField === undefined) {
|
|
421
|
+
return [
|
|
422
|
+
"Collection",
|
|
423
|
+
undefined
|
|
424
|
+
];
|
|
425
|
+
}
|
|
426
|
+
let fieldName = taggedField[0];
|
|
427
|
+
if (isCreateCommandName(variantName)) {
|
|
428
|
+
return [
|
|
429
|
+
"Collection",
|
|
430
|
+
fieldName
|
|
431
|
+
];
|
|
432
|
+
} else {
|
|
433
|
+
return [
|
|
434
|
+
"Instance",
|
|
435
|
+
fieldName
|
|
436
|
+
];
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
function accessKeysFor(rule) {
|
|
441
|
+
if (typeof rule !== "object") {
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
let groups = rule._0;
|
|
445
|
+
if (groups.length !== 0) {
|
|
446
|
+
return groups;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
function annotateArgTypes(schema, argTypes) {
|
|
451
|
+
Stdlib_Option.forEach(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(schema), o => o["properties"]), Stdlib_JSON.Decode.object), props => {
|
|
452
|
+
Object.entries(props).forEach(param => {
|
|
453
|
+
let match = argTypes[param[0]];
|
|
454
|
+
let match$1 = Stdlib_JSON.Decode.object(param[1]);
|
|
455
|
+
if (match !== undefined && match$1 !== undefined) {
|
|
456
|
+
match$1["x-reventless-graphql-type"] = match;
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
return schema;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
function toCommandDef(isAggregate, mutationFieldFor, parentSchema, commandAuthorization, v) {
|
|
465
|
+
let mkDef = (variantName, properties) => {
|
|
466
|
+
let match = commandLevelAndId(isAggregate, variantName, properties);
|
|
467
|
+
let references = extractReferences(properties);
|
|
468
|
+
let allowedStates = ApiAllowedStatesHelpers$ReventlessCore.getAllowedStates(parentSchema, variantName);
|
|
469
|
+
let targetState = ApiTargetStateHelpers$ReventlessCore.getTargetState(parentSchema, variantName);
|
|
470
|
+
let apiExposed = false;
|
|
471
|
+
if (!ApiNoApiHelpers$ReventlessCore.isNoApi(parentSchema)) {
|
|
472
|
+
let excluded = ApiNoApiHelpers$ReventlessCore.getExcludedVariants(parentSchema);
|
|
473
|
+
apiExposed = excluded !== undefined ? !excluded.has(variantName) : true;
|
|
450
474
|
}
|
|
475
|
+
let syntheticCommand = DcbTag$Reventless.isVariantPayloadBearing(parentSchema, variantName) ? ({
|
|
476
|
+
TAG: variantName
|
|
477
|
+
}) : variantName;
|
|
478
|
+
let requiredAccess = accessKeysFor(commandAuthorization(syntheticCommand));
|
|
479
|
+
let mutationField = apiExposed ? mutationFieldFor(variantName) : "";
|
|
480
|
+
let jsonSchema = SuryToJsonSchema$ReventlessCore.deriveObjectSchema(v);
|
|
481
|
+
let annotatedSchema = apiExposed ? Stdlib_Option.mapOr(GraphQL_FragmentGenerator$ReventlessCore.mutationArgTypes(mutationField, v), jsonSchema, __x => annotateArgTypes(jsonSchema, __x)) : jsonSchema;
|
|
482
|
+
return {
|
|
483
|
+
name: variantName,
|
|
484
|
+
schema: JSON.stringify(annotatedSchema),
|
|
485
|
+
level: match[0],
|
|
486
|
+
aggregateIdField: match[1],
|
|
487
|
+
mutationField: mutationField,
|
|
488
|
+
references: references,
|
|
489
|
+
allowedStates: allowedStates,
|
|
490
|
+
targetState: targetState,
|
|
491
|
+
apiExposed: apiExposed,
|
|
492
|
+
requiredAccess: requiredAccess,
|
|
493
|
+
ownerField: Owner$Reventless.fieldNamesOfProperties(properties)[0]
|
|
494
|
+
};
|
|
451
495
|
};
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
let
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
if (!ApiNoApiHelpers$ReventlessCore.isNoApi(parentSchema)) {
|
|
460
|
-
let excluded = ApiNoApiHelpers$ReventlessCore.getExcludedVariants(parentSchema);
|
|
461
|
-
apiExposed = excluded !== undefined ? !excluded.has(variantName) : true;
|
|
496
|
+
switch (v.type) {
|
|
497
|
+
case "string" :
|
|
498
|
+
let variantName = v.const;
|
|
499
|
+
if (variantName !== undefined) {
|
|
500
|
+
return mkDef(variantName, {});
|
|
501
|
+
} else {
|
|
502
|
+
return;
|
|
462
503
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
let mutationField = apiExposed ? mutationFieldFor(variantName) : "";
|
|
468
|
-
let jsonSchema = SuryToJsonSchema$ReventlessCore.deriveObjectSchema(v);
|
|
469
|
-
let annotatedSchema = apiExposed ? Stdlib_Option.mapOr(GraphQL_FragmentGenerator$ReventlessCore.mutationArgTypes(mutationField, v), jsonSchema, __x => {
|
|
470
|
-
Stdlib_Option.forEach(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(jsonSchema), o => o["properties"]), Stdlib_JSON.Decode.object), props => {
|
|
471
|
-
Object.entries(props).forEach(param => {
|
|
472
|
-
let match = __x[param[0]];
|
|
473
|
-
let match$1 = Stdlib_JSON.Decode.object(param[1]);
|
|
474
|
-
if (match !== undefined && match$1 !== undefined) {
|
|
475
|
-
match$1["x-reventless-graphql-type"] = match;
|
|
476
|
-
return;
|
|
477
|
-
}
|
|
478
|
-
});
|
|
479
|
-
});
|
|
480
|
-
return jsonSchema;
|
|
481
|
-
}) : jsonSchema;
|
|
482
|
-
return {
|
|
483
|
-
name: variantName,
|
|
484
|
-
schema: JSON.stringify(annotatedSchema),
|
|
485
|
-
level: match[0],
|
|
486
|
-
aggregateIdField: match[1],
|
|
487
|
-
mutationField: mutationField,
|
|
488
|
-
references: references,
|
|
489
|
-
allowedStates: allowedStates,
|
|
490
|
-
targetState: targetState,
|
|
491
|
-
apiExposed: apiExposed,
|
|
492
|
-
requiredAccess: requiredAccess,
|
|
493
|
-
ownerField: Owner$Reventless.fieldNamesOfProperties(properties)[0]
|
|
494
|
-
};
|
|
495
|
-
};
|
|
496
|
-
switch (v.type) {
|
|
497
|
-
case "string" :
|
|
498
|
-
let variantName = v.const;
|
|
499
|
-
if (variantName !== undefined) {
|
|
500
|
-
return mkDef(variantName, {});
|
|
501
|
-
} else {
|
|
504
|
+
case "object" :
|
|
505
|
+
let properties = v.properties;
|
|
506
|
+
return Stdlib_Option.flatMap(properties["TAG"], tagSchema => {
|
|
507
|
+
if (tagSchema.type !== "string") {
|
|
502
508
|
return;
|
|
503
509
|
}
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
510
|
+
let variantName = tagSchema.const;
|
|
511
|
+
if (variantName !== undefined) {
|
|
512
|
+
return mkDef(variantName, properties);
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
default:
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
function extractCommandDefs(isAggregate, mutationFieldFor, commandAuthorization, commandSchema) {
|
|
521
|
+
if (commandSchema.type === "anyOf") {
|
|
522
|
+
return Stdlib_Array.filterMap(commandSchema.anyOf, v => toCommandDef(isAggregate, mutationFieldFor, commandSchema, commandAuthorization, v));
|
|
523
|
+
} else {
|
|
524
|
+
return Stdlib_Option.mapOr(toCommandDef(isAggregate, mutationFieldFor, commandSchema, commandAuthorization, commandSchema), [], def => [def]);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
function visibilityTag(v) {
|
|
529
|
+
if (v === "Public") {
|
|
530
|
+
return;
|
|
531
|
+
} else {
|
|
532
|
+
return "Internal";
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
function queryableDefFromSpec(plugin, name, stateSchema, authorization, visibilityOpt, consumedEventTypesOpt, linkedWriteSideOpt, chapter) {
|
|
537
|
+
let visibility = visibilityOpt !== undefined ? visibilityOpt : "Public";
|
|
538
|
+
let consumedEventTypes = consumedEventTypesOpt !== undefined ? consumedEventTypesOpt : [];
|
|
539
|
+
let linkedWriteSide = linkedWriteSideOpt !== undefined ? linkedWriteSideOpt : [];
|
|
540
|
+
let qf = Api_Naming$ReventlessCore.queryFieldNamesForReadModel(plugin, name, undefined);
|
|
541
|
+
let label = labelFieldsFromStateSchema(name, stateSchema);
|
|
542
|
+
let keyField = GraphQL_FragmentGenerator$ReventlessCore.resolveKeyField(name, stateSchema);
|
|
543
|
+
return {
|
|
544
|
+
name: name,
|
|
545
|
+
queryField: qf.listFieldName,
|
|
546
|
+
schema: JSON.stringify(SuryToJsonSchema$ReventlessCore.deriveObjectSchema(stateSchema)),
|
|
547
|
+
consumedEventTypes: consumedEventTypes,
|
|
548
|
+
linkedWriteSide: linkedWriteSide,
|
|
549
|
+
labelField: label.field,
|
|
550
|
+
searchableFields: label.searchableFields,
|
|
551
|
+
labelFieldSource: labelFieldSourceToString(label.source),
|
|
552
|
+
lifecycleField: lifecycleFieldFromStateSchema(name, stateSchema),
|
|
553
|
+
ownerField: Owner$Reventless.fieldNames(stateSchema)[0],
|
|
554
|
+
retiredField: retiredFieldFromStateSchema(stateSchema),
|
|
555
|
+
retiredValues: retiredValuesFromStateSchema(stateSchema),
|
|
556
|
+
namedWhenRetired: namedWhenRetiredFromStateSchema(stateSchema),
|
|
557
|
+
visibility: visibilityTag(visibility),
|
|
558
|
+
chapter: chapter,
|
|
559
|
+
singleQueryField: qf.singleFieldName,
|
|
560
|
+
idField: Stdlib_Option.map(keyField, param => param[0]),
|
|
561
|
+
idFieldSource: Stdlib_Option.map(keyField, param => param[1]),
|
|
562
|
+
requiredAccess: accessKeysFor(authorization)
|
|
525
563
|
};
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChangeSlicesOpt, automationSlicesOpt, outboundTranslationSlicesOpt, inboundTranslationSlicesOpt, extensionsOpt, extensionPointsOpt, componentChaptersOpt) {
|
|
567
|
+
let aggregates = aggregatesOpt !== undefined ? aggregatesOpt : [];
|
|
568
|
+
let readModels = readModelsOpt !== undefined ? readModelsOpt : [];
|
|
569
|
+
let stateViewSlices = stateViewSlicesOpt !== undefined ? stateViewSlicesOpt : [];
|
|
570
|
+
let stateChangeSlices = stateChangeSlicesOpt !== undefined ? stateChangeSlicesOpt : [];
|
|
571
|
+
let automationSlices = automationSlicesOpt !== undefined ? automationSlicesOpt : [];
|
|
572
|
+
let outboundTranslationSlices = outboundTranslationSlicesOpt !== undefined ? outboundTranslationSlicesOpt : [];
|
|
573
|
+
let inboundTranslationSlices = inboundTranslationSlicesOpt !== undefined ? inboundTranslationSlicesOpt : [];
|
|
574
|
+
let extensions = extensionsOpt !== undefined ? extensionsOpt : [];
|
|
575
|
+
let extensionPoints = extensionPointsOpt !== undefined ? extensionPointsOpt : [];
|
|
576
|
+
let componentChapters = componentChaptersOpt !== undefined ? componentChaptersOpt : ({});
|
|
577
|
+
let qualify = (prefix, names) => names.map(n => prefix + "." + n);
|
|
526
578
|
let scsProduced = stateChangeSlices.map(SCS => [
|
|
527
579
|
SCS.Spec.name,
|
|
528
580
|
qualify(name, DcbTag$Reventless.extractVariantNames(SCS.Spec.eventSchema))
|
|
@@ -670,7 +722,7 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
670
722
|
return [];
|
|
671
723
|
}
|
|
672
724
|
};
|
|
673
|
-
if (schema.type === "
|
|
725
|
+
if (schema.type === "anyOf") {
|
|
674
726
|
return schema.anyOf.flatMap(fromVariant);
|
|
675
727
|
} else {
|
|
676
728
|
return fromVariant(schema);
|
|
@@ -688,16 +740,13 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
688
740
|
}
|
|
689
741
|
});
|
|
690
742
|
let requiredStores = Belt_SetString.toArray(Belt_SetString.fromArray(requiredStoreDeclarations.map(d => d.store)));
|
|
743
|
+
let found = Capability_Inference$ReventlessCore.collisions(requiredStoreDeclarations);
|
|
744
|
+
if (found.length !== 0) {
|
|
745
|
+
Stdlib_JsError.throwWithMessage(name + `: two declared object stores look like one store misspelled.\n` + found.map(Capability_Inference$ReventlessCore.collisionMessage).join("\n"));
|
|
746
|
+
}
|
|
691
747
|
storeDeclarationSites.forEach(param => {
|
|
692
748
|
Capability_Inference$ReventlessCore.scanSchema(param[0], param[1]).forEach(w => log.warn("Plugin_Structure", undefined, Capability_Inference$ReventlessCore.message(w)));
|
|
693
749
|
});
|
|
694
|
-
let visibilityTag = v => {
|
|
695
|
-
if (v === "Public") {
|
|
696
|
-
return;
|
|
697
|
-
} else {
|
|
698
|
-
return "Internal";
|
|
699
|
-
}
|
|
700
|
-
};
|
|
701
750
|
let lifecycleStatesByView = {};
|
|
702
751
|
let recordLifecycle = (entityName, stateSchema) => {
|
|
703
752
|
let states = lifecycleStatesFromStateSchema(entityName, stateSchema);
|
|
@@ -706,13 +755,28 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
706
755
|
return;
|
|
707
756
|
}
|
|
708
757
|
};
|
|
758
|
+
let retiredFailures = [];
|
|
759
|
+
let retiredUnchecked = [];
|
|
760
|
+
let recordRetired = (entityName, stateSchema) => {
|
|
761
|
+
let why = checkRetiredValue(entityName, stateSchema);
|
|
762
|
+
if (typeof why !== "object") {
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
765
|
+
if (why.TAG === "Unchecked") {
|
|
766
|
+
retiredUnchecked.push(why._0);
|
|
767
|
+
return;
|
|
768
|
+
}
|
|
769
|
+
why._0.forEach(f => {
|
|
770
|
+
retiredFailures.push(f);
|
|
771
|
+
});
|
|
772
|
+
};
|
|
709
773
|
let readModelDefs = readModels.map(R => {
|
|
710
774
|
let qf = Api_Naming$ReventlessCore.queryFieldNamesForReadModel(name, R.Spec.name, undefined);
|
|
711
775
|
let stateSchema = R.Spec.stateSchema;
|
|
712
776
|
let label = labelFieldsFromStateSchema(R.Spec.name, stateSchema);
|
|
713
777
|
let keyField = GraphQL_FragmentGenerator$ReventlessCore.resolveKeyField(R.Spec.name, stateSchema);
|
|
714
778
|
let consumed = qualify(name, R.consumedEventNames);
|
|
715
|
-
|
|
779
|
+
recordRetired(R.Spec.name, stateSchema);
|
|
716
780
|
recordLifecycle(R.Spec.name, stateSchema);
|
|
717
781
|
return {
|
|
718
782
|
name: R.Spec.name,
|
|
@@ -727,6 +791,7 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
727
791
|
ownerField: Owner$Reventless.fieldNames(stateSchema)[0],
|
|
728
792
|
retiredField: retiredFieldFromStateSchema(stateSchema),
|
|
729
793
|
retiredValues: retiredValuesFromStateSchema(stateSchema),
|
|
794
|
+
namedWhenRetired: namedWhenRetiredFromStateSchema(stateSchema),
|
|
730
795
|
visibility: visibilityTag(R.Spec.visibility),
|
|
731
796
|
chapter: componentChapters[R.Spec.name],
|
|
732
797
|
singleQueryField: qf.singleFieldName,
|
|
@@ -742,7 +807,7 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
742
807
|
let stateSchema = SVS.Spec.stateSchema;
|
|
743
808
|
let label = labelFieldsFromStateSchema(SVS.Spec.name, stateSchema);
|
|
744
809
|
let keyField = GraphQL_FragmentGenerator$ReventlessCore.resolveKeyField(SVS.Spec.name, stateSchema);
|
|
745
|
-
|
|
810
|
+
recordRetired(SVS.Spec.name, stateSchema);
|
|
746
811
|
recordLifecycle(SVS.Spec.name, stateSchema);
|
|
747
812
|
return {
|
|
748
813
|
name: SVS.Spec.name,
|
|
@@ -757,6 +822,7 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
757
822
|
ownerField: Owner$Reventless.fieldNames(stateSchema)[0],
|
|
758
823
|
retiredField: retiredFieldFromStateSchema(stateSchema),
|
|
759
824
|
retiredValues: retiredValuesFromStateSchema(stateSchema),
|
|
825
|
+
namedWhenRetired: namedWhenRetiredFromStateSchema(stateSchema),
|
|
760
826
|
visibility: visibilityTag(SVS.Spec.visibility),
|
|
761
827
|
chapter: componentChapters[SVS.Spec.name],
|
|
762
828
|
singleQueryField: qf.singleFieldName,
|
|
@@ -858,6 +924,7 @@ function make(name, aggregatesOpt, readModelsOpt, stateViewSlicesOpt, stateChang
|
|
|
858
924
|
});
|
|
859
925
|
checkDeclaredTransitions(name, stateChangeDefs.concat(aggregateDefs), lifecycleStatesByView);
|
|
860
926
|
checkLifecycleTopology(name, stateChangeDefs.concat(aggregateDefs), lifecycleStatesByView);
|
|
927
|
+
reportRetiredStates(name, retiredFailures, retiredUnchecked);
|
|
861
928
|
return {
|
|
862
929
|
readModels: readModelDefs,
|
|
863
930
|
stateViewSlices: stateViewDefs,
|
|
@@ -878,12 +945,14 @@ export {
|
|
|
878
945
|
isLabelShape,
|
|
879
946
|
isLifecycleShape,
|
|
880
947
|
conventionalLabelNames,
|
|
881
|
-
|
|
948
|
+
shapeOfField,
|
|
882
949
|
lifecycleFieldFromStateSchema,
|
|
883
950
|
retiredFromStateSchema,
|
|
884
951
|
retiredFieldFromStateSchema,
|
|
885
952
|
retiredValuesFromStateSchema,
|
|
953
|
+
namedWhenRetiredFromStateSchema,
|
|
886
954
|
checkRetiredValue,
|
|
955
|
+
reportRetiredStates,
|
|
887
956
|
lifecycleStatesFromStateSchema,
|
|
888
957
|
checkDeclaredTransitions,
|
|
889
958
|
lifecycleTopologyFindings,
|
|
@@ -894,6 +963,14 @@ export {
|
|
|
894
963
|
toEventDef,
|
|
895
964
|
extractEventDefs,
|
|
896
965
|
extractErrorDefs,
|
|
966
|
+
isCreateCommandName,
|
|
967
|
+
commandLevelAndId,
|
|
968
|
+
accessKeysFor,
|
|
969
|
+
annotateArgTypes,
|
|
970
|
+
toCommandDef,
|
|
971
|
+
extractCommandDefs,
|
|
972
|
+
visibilityTag,
|
|
973
|
+
queryableDefFromSpec,
|
|
897
974
|
make,
|
|
898
975
|
}
|
|
899
976
|
/* log Not a pure module */
|
|
@@ -44,7 +44,7 @@ let sourceCFields = (
|
|
|
44
44
|
mutationEntries->Array.forEach(entry => {
|
|
45
45
|
let schema = entry.commandSchema
|
|
46
46
|
switch schema {
|
|
47
|
-
|
|
|
47
|
+
| AnyOf({anyOf}) =>
|
|
48
48
|
anyOf->Array.forEachWithIndex((_, i) => {
|
|
49
49
|
let fieldName = entry.fieldNames->Array.get(i)->Option.getOr("")
|
|
50
50
|
if fieldName->String.length > 0 {
|