@reventlessdev/reventless-core 3.0.0-alpha.180 → 3.0.0-alpha.181

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.
Files changed (115) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +7 -7
  3. package/src/Message.res +2 -1
  4. package/src/Message.res.mjs +5 -1
  5. package/src/admin/Platform_Admin_Structure.res +2 -0
  6. package/src/admin/Platform_Admin_Structure.res.mjs +2 -0
  7. package/src/admin/Platform_ComponentDefinitionsApi.res +2 -1
  8. package/src/admin/Platform_ComponentDefinitionsApi.res.mjs +5 -1
  9. package/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res +1 -1
  10. package/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res.mjs +2 -1
  11. package/src/components/Api/ApiTargetStateHelpers.res +20 -0
  12. package/src/components/Api/ApiTargetStateHelpers.res.mjs +16 -0
  13. package/src/components/Api/GraphQL_FragmentGenerator.res +1 -0
  14. package/src/components/Api/GraphQL_FragmentGenerator.res.mjs +1 -0
  15. package/src/components/Api/SchemaType.res +3 -0
  16. package/src/components/Api/SchemaType.res.mjs +10 -2
  17. package/src/components/Api/SuryToJsonSchema.res +16 -0
  18. package/src/components/Api/SuryToJsonSchema.res.mjs +28 -0
  19. package/src/components/Dcb/Dcb_Builder.res +4 -5
  20. package/src/components/Dcb/Dcb_Builder.res.mjs +3 -5
  21. package/src/components/DcbEventLog/DcbEventLog_Operations.res +6 -1
  22. package/src/components/DcbEventLog/DcbEventLog_Operations.res.mjs +2 -1
  23. package/src/components/InboundTranslationSlice/InboundTranslationSlice.res +25 -0
  24. package/src/components/InboundTranslationSlice/InboundTranslationSlice.res.mjs +31 -0
  25. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res +8 -8
  26. package/src/components/InboundTranslationSlice/InboundTranslationSlice_Callback.res.mjs +26 -6
  27. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res +44 -37
  28. package/src/components/OutboundTranslationSlice/OutboundTranslationSlice_Builder.res.mjs +17 -25
  29. package/src/components/StateChangeSlice/StateChangeSlice_Callback.res +27 -2
  30. package/src/components/StateChangeSlice/StateChangeSlice_Callback.res.mjs +4 -0
  31. package/src/components/StateViewSlice/StateViewSlice_Builder.res +20 -6
  32. package/src/components/StateViewSlice/StateViewSlice_Builder.res.mjs +23 -5
  33. package/src/components/StateViewSlice/StateViewSlice_Callback.res +1 -1
  34. package/src/components/StateViewSlice/StateViewSlice_Callback.res.mjs +5 -1
  35. package/src/plugin/component/Plugin_Helpers.res +4 -1
  36. package/src/plugin/component/Plugin_Structure.res +15 -1
  37. package/src/plugin/component/Plugin_Structure.res.mjs +4 -1
  38. package/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs +2 -0
  39. package/tests/IdentityTest.res.mjs +174 -0
  40. package/tests/ResourceAttributionTest.res.mjs +75 -0
  41. package/tests/adapter/MonitoringTest.res.mjs +116 -0
  42. package/tests/admin/Platform_ComponentDefinitionsApiTest.res +10 -0
  43. package/tests/admin/Platform_ComponentDefinitionsApiTest.res.mjs +365 -0
  44. package/tests/admin/Platform_UIFragmentsApiTest.res.mjs +101 -0
  45. package/tests/aggregate/AggregateCacheTest.res.mjs +433 -0
  46. package/tests/aggregate/AggregateCallbackTest.res.mjs +143 -0
  47. package/tests/aggregate/AggregateCausationTest.res.mjs +47 -0
  48. package/tests/aggregate/AggregateConflictTest.res.mjs +386 -0
  49. package/tests/aggregate/AggregateFixtures.res.mjs +308 -0
  50. package/tests/aggregate/AggregateRejectionTest.res.mjs +166 -0
  51. package/tests/aggregate/AggregateSnapshotTest.res.mjs +645 -0
  52. package/tests/api/ApiNoApiTest.res.mjs +90 -0
  53. package/tests/api/GraphQL_StitcherTest.res.mjs +112 -0
  54. package/tests/api/SimpleTest.res.mjs +10 -0
  55. package/tests/api/SuryToJsonSchemaTest.res +68 -0
  56. package/tests/api/SuryToJsonSchemaTest.res.mjs +843 -0
  57. package/tests/commandgenerator/CommandGeneratorCallbackTest.res.mjs +160 -0
  58. package/tests/commandgenerator/CommandGeneratorFixtures.res.mjs +197 -0
  59. package/tests/commandtopic/CommandTopicCallbackFixtures.res.mjs +152 -0
  60. package/tests/commandtopic/CommandTopicCallbackTest.res.mjs +106 -0
  61. package/tests/commandtopic/CommandTopicHelpersRejectionTest.res.mjs +109 -0
  62. package/tests/counter/CounterCallbackTest.res.mjs +140 -0
  63. package/tests/counter/CounterFixtures.res.mjs +67 -0
  64. package/tests/dcb/DcbDecodeTest.res.mjs +194 -0
  65. package/tests/dcb/DcbEventLogOperationsTest.res.mjs +268 -0
  66. package/tests/dcb/DcbFixtures.res.mjs +534 -0
  67. package/tests/dcb/DcbScopeInferenceTest.res.mjs +480 -0
  68. package/tests/dcb/DcbStateChangeSliceTest.res.mjs +540 -0
  69. package/tests/dcb/DcbTagTest.res.mjs +867 -0
  70. package/tests/dcb/DcbValidationTest.res.mjs +476 -0
  71. package/tests/eventlog/EventLogFixtures.res.mjs +196 -0
  72. package/tests/eventlog/EventLogOperationsTest.res.mjs +192 -0
  73. package/tests/eventlog/EventLogRetryTest.res.mjs +195 -0
  74. package/tests/eventmapper/EventMapperCallbackTest.res.mjs +141 -0
  75. package/tests/eventmapper/EventMapperFixtures.res.mjs +440 -0
  76. package/tests/eventmapper/EventMapperTest.res.mjs +83 -0
  77. package/tests/eventtopic/EventTopicFixtures.res.mjs +65 -0
  78. package/tests/eventtopic/EventTopicOperationsTest.res.mjs +71 -0
  79. package/tests/extensionpoint/ExtensionPointCallbackTest.res.mjs +94 -0
  80. package/tests/extensionpoint/ExtensionPointFixtures.res.mjs +205 -0
  81. package/tests/extensionpoint/ExtensionPointOperationsTest.res.mjs +304 -0
  82. package/tests/extensionpoint/PluginDisconnectScheduleTest.res.mjs +92 -0
  83. package/tests/ftp/FTPTest.res.mjs +88 -0
  84. package/tests/logger/LogFormatTest.res.mjs +329 -0
  85. package/tests/logger/LoggerLazyTest.res.mjs +40 -0
  86. package/tests/message/MessageTest.res.mjs +218 -0
  87. package/tests/message/MetaEnvelopeTest.res.mjs +188 -0
  88. package/tests/plugin/HeartbeatDisconnectGraceTest.res.mjs +91 -0
  89. package/tests/plugin/ManifestVisibilityTest.res.mjs +215 -0
  90. package/tests/plugin/PluginSpecExperiment.res.mjs +31 -0
  91. package/tests/plugin/PluginStructureTest.res +55 -0
  92. package/tests/plugin/PluginStructureTest.res.mjs +467 -0
  93. package/tests/plugin/PluginVersionTest.res.mjs +30 -0
  94. package/tests/plugin/SchemaWalkerTest.res.mjs +160 -0
  95. package/tests/plugin/StateChangeSlice/PsPlaceOrder.res.mjs +62 -0
  96. package/tests/plugin/StateChangeSlice/PsShipOrder.res +4 -1
  97. package/tests/plugin/StateChangeSlice/PsShipOrder.res.mjs +77 -0
  98. package/tests/plugin/StateViewSlice/PsAnnotatedView.res +5 -4
  99. package/tests/plugin/StateViewSlice/PsAnnotatedView.res.mjs +110 -0
  100. package/tests/plugin/StateViewSlice/PsAvailableProductsView.res +1 -1
  101. package/tests/plugin/StateViewSlice/PsAvailableProductsView.res.mjs +70 -0
  102. package/tests/plugin/StateViewSlice/PsCustomersView.res +1 -1
  103. package/tests/plugin/StateViewSlice/PsCustomersView.res.mjs +70 -0
  104. package/tests/plugin/StateViewSlice/PsOrdersView.res +1 -1
  105. package/tests/plugin/StateViewSlice/PsOrdersView.res.mjs +82 -0
  106. package/tests/poc/StructuralSubtypingPoc.res.mjs +61 -0
  107. package/tests/projection/ProjectionOptimizeTest.res.mjs +75 -0
  108. package/tests/querydb/QueryDbFixtures.res.mjs +135 -0
  109. package/tests/querydb/QueryDbOperationsTest.res.mjs +168 -0
  110. package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res.mjs +77 -0
  111. package/tests/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +139 -0
  112. package/tests/util/CommandPublisherTest.res.mjs +78 -0
  113. package/tests/util/CsvStreamTest.res.mjs +51 -0
  114. package/tests/util/LruTest.res.mjs +105 -0
  115. package/tests/util/MetricsTest.res.mjs +53 -0
@@ -0,0 +1,268 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Stdlib_Result from "@rescript/runtime/lib/es6/Stdlib_Result.js";
7
+ import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
8
+ import * as Message$ReventlessCore from "../../src/Message.res.mjs";
9
+ import * as DcbFixtures$ReventlessCore from "./DcbFixtures.res.mjs";
10
+ import * as DcbEventLog_Operations$ReventlessCore from "../../src/components/DcbEventLog/DcbEventLog_Operations.res.mjs";
11
+
12
+ let mock = DcbFixtures$ReventlessCore.makeMockStorage();
13
+
14
+ let storage = mock.operations;
15
+
16
+ let publishJson = mock.mockPublishJson;
17
+
18
+ let TestOps = {
19
+ name: "TestDcbEventLog",
20
+ serviceName: "TestDcbEventLog",
21
+ storage: storage,
22
+ publishJson: publishJson
23
+ };
24
+
25
+ let Ops = DcbEventLog_Operations$ReventlessCore.Make(TestOps);
26
+
27
+ let storage$1 = mock.operations;
28
+
29
+ let publishJson$1 = mock.mockPublishJson;
30
+
31
+ let TestOpsAlt = {
32
+ name: "Catalog",
33
+ serviceName: "CatalogDcbEventLog",
34
+ storage: storage$1,
35
+ publishJson: publishJson$1
36
+ };
37
+
38
+ let OpsAlt = DcbEventLog_Operations$ReventlessCore.Make(TestOpsAlt);
39
+
40
+ globalThis.beforeEach(() => mock.reset());
41
+
42
+ function encodeEvent(event) {
43
+ let json = S.reverseConvertToJsonOrThrow(event, DcbFixtures$ReventlessCore.TestEventLogSpec.eventSchema);
44
+ let match = Message$ReventlessCore.splitMessage(json);
45
+ let tags = DcbTag$Reventless.extractTags(DcbFixtures$ReventlessCore.TestEventLogSpec.eventSchema, event);
46
+ let meta = Message$ReventlessCore.generateMeta("test", undefined, undefined, undefined, undefined, undefined, undefined, undefined);
47
+ return {
48
+ eventType: match[0],
49
+ data: match[1],
50
+ tags: tags,
51
+ meta: meta
52
+ };
53
+ }
54
+
55
+ function decodeEvent(raw) {
56
+ let json = Message$ReventlessCore.combineMessage(raw.eventType, Stdlib_Option.getOr(Stdlib_JSON.Decode.object(raw.data), {}));
57
+ return S.parseJsonOrThrow(json, DcbFixtures$ReventlessCore.TestEventLogSpec.eventSchema);
58
+ }
59
+
60
+ globalThis.describe("DcbEventLog_Operations:", () => {
61
+ globalThis.describe("round-trip (append then read)", () => {
62
+ globalThis.test("ItemCreated preserves through round-trip", async () => {
63
+ let event = {
64
+ TAG: "ItemCreated",
65
+ itemId: "item-1",
66
+ name: "Test"
67
+ };
68
+ let rawEvent = encodeEvent(event);
69
+ await Ops.append([rawEvent], undefined);
70
+ let result = await Ops.read([{}], undefined);
71
+ globalThis.expect([
72
+ result.events.length,
73
+ Stdlib_Option.map(result.events[0], decodeEvent)
74
+ ]).toEqual([
75
+ 1,
76
+ event
77
+ ]);
78
+ });
79
+ globalThis.test("CountUpdated with int tag preserves through round-trip", async () => {
80
+ let event = {
81
+ TAG: "CountUpdated",
82
+ category: "electronics",
83
+ amount: 42
84
+ };
85
+ let rawEvent = encodeEvent(event);
86
+ await Ops.append([rawEvent], undefined);
87
+ let result = await Ops.read([{}], undefined);
88
+ globalThis.expect(Stdlib_Option.map(result.events[0], decodeEvent)).toEqual(event);
89
+ });
90
+ globalThis.test("multiple events in single append all read back", async () => {
91
+ let events = [
92
+ {
93
+ TAG: "ItemCreated",
94
+ itemId: "item-1",
95
+ name: "First"
96
+ },
97
+ {
98
+ TAG: "ItemRenamed",
99
+ itemId: "item-1",
100
+ newName: "Second"
101
+ }
102
+ ];
103
+ let rawEvents = events.map(encodeEvent);
104
+ await Ops.append(rawEvents, undefined);
105
+ let result = await Ops.read([{}], undefined);
106
+ globalThis.expect([
107
+ result.events.length,
108
+ result.events.map(decodeEvent)
109
+ ]).toEqual([
110
+ 2,
111
+ events
112
+ ]);
113
+ });
114
+ });
115
+ globalThis.describe("append", () => {
116
+ globalThis.test("stores events and publishes to event topic", async () => {
117
+ let result = await Ops.append([encodeEvent({
118
+ TAG: "ItemCreated",
119
+ itemId: "item-1",
120
+ name: "Test"
121
+ })], undefined);
122
+ globalThis.expect([
123
+ Stdlib_Result.isOk(result),
124
+ mock.getEvents().length,
125
+ mock.publishedEvents.contents.length
126
+ ]).toEqual([
127
+ true,
128
+ 1,
129
+ 1
130
+ ]);
131
+ });
132
+ globalThis.test("published events have correct service name", async () => {
133
+ await Ops.append([encodeEvent({
134
+ TAG: "ItemCreated",
135
+ itemId: "item-1",
136
+ name: "Test"
137
+ })], undefined);
138
+ globalThis.expect(Stdlib_Option.map(mock.publishedEvents.contents[0], pe => pe.service)).toEqual("TestDcbEventLog");
139
+ });
140
+ globalThis.test("service comes from Ops.serviceName, not Ops.name", async () => {
141
+ await OpsAlt.append([encodeEvent({
142
+ TAG: "ItemCreated",
143
+ itemId: "item-1",
144
+ name: "Test"
145
+ })], undefined);
146
+ globalThis.expect(Stdlib_Option.map(mock.publishedEvents.contents[0], pe => pe.service)).toEqual("CatalogDcbEventLog");
147
+ });
148
+ globalThis.test("error from storage does not publish to event topic", async () => {
149
+ mock.failNextAppends.contents = 1;
150
+ let result = await Ops.append([encodeEvent({
151
+ TAG: "ItemCreated",
152
+ itemId: "item-1",
153
+ name: "Test"
154
+ })], undefined);
155
+ globalThis.expect([
156
+ Stdlib_Result.isError(result),
157
+ mock.publishedEvents.contents.length
158
+ ]).toEqual([
159
+ true,
160
+ 0
161
+ ]);
162
+ });
163
+ globalThis.test("with condition (no conflict) succeeds", async () => {
164
+ await Ops.append([encodeEvent({
165
+ TAG: "ItemCreated",
166
+ itemId: "item-1",
167
+ name: "Test"
168
+ })], undefined);
169
+ let condition_query = [{
170
+ eventTypes: ["ItemCreated"],
171
+ tags: [{
172
+ key: "itemId",
173
+ value: "item-1"
174
+ }]
175
+ }];
176
+ let condition_after = "1";
177
+ let condition = {
178
+ query: condition_query,
179
+ after: condition_after
180
+ };
181
+ let result = await Ops.append([encodeEvent({
182
+ TAG: "ItemRenamed",
183
+ itemId: "item-1",
184
+ newName: "Updated"
185
+ })], condition);
186
+ globalThis.expect(Stdlib_Result.isOk(result)).toBe(true);
187
+ });
188
+ globalThis.test("multiple events all stored and published", async () => {
189
+ let events = [
190
+ {
191
+ TAG: "ItemCreated",
192
+ itemId: "item-1",
193
+ name: "First"
194
+ },
195
+ {
196
+ TAG: "ItemCreated",
197
+ itemId: "item-2",
198
+ name: "Second"
199
+ }
200
+ ];
201
+ await Ops.append(events.map(encodeEvent), undefined);
202
+ globalThis.expect([
203
+ mock.getEvents().length,
204
+ mock.publishedEvents.contents.length
205
+ ]).toEqual([
206
+ 2,
207
+ 2
208
+ ]);
209
+ });
210
+ });
211
+ globalThis.describe("read", () => {
212
+ globalThis.test("returns headPosition from storage", async () => {
213
+ await Ops.append([encodeEvent({
214
+ TAG: "ItemCreated",
215
+ itemId: "item-1",
216
+ name: "Test"
217
+ })], undefined);
218
+ let result = await Ops.read([{}], undefined);
219
+ globalThis.expect(result.headPosition).toEqual("1");
220
+ });
221
+ globalThis.test("with ~after parameter filters out earlier events", async () => {
222
+ await Ops.append([encodeEvent({
223
+ TAG: "ItemCreated",
224
+ itemId: "item-1",
225
+ name: "First"
226
+ })], undefined);
227
+ await Ops.append([encodeEvent({
228
+ TAG: "ItemRenamed",
229
+ itemId: "item-1",
230
+ newName: "Second"
231
+ })], undefined);
232
+ let result = await Ops.read([{}], "1");
233
+ globalThis.expect([
234
+ result.events.length,
235
+ Stdlib_Option.map(result.events[0], decodeEvent)
236
+ ]).toEqual([
237
+ 1,
238
+ {
239
+ TAG: "ItemRenamed",
240
+ itemId: "item-1",
241
+ newName: "Second"
242
+ }
243
+ ]);
244
+ });
245
+ globalThis.test("no matching events returns empty array", async () => {
246
+ await Ops.append([encodeEvent({
247
+ TAG: "ItemCreated",
248
+ itemId: "item-1",
249
+ name: "Test"
250
+ })], undefined);
251
+ let result = await Ops.read([{
252
+ eventTypes: ["NonExistent"]
253
+ }], undefined);
254
+ globalThis.expect(result.events.length).toEqual(0);
255
+ });
256
+ });
257
+ });
258
+
259
+ export {
260
+ mock,
261
+ TestOps,
262
+ Ops,
263
+ TestOpsAlt,
264
+ OpsAlt,
265
+ encodeEvent,
266
+ decodeEvent,
267
+ }
268
+ /* mock Not a pure module */