@reventlessdev/reventless-core 3.0.0-alpha.170 → 3.0.0-alpha.172

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 (83) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +14 -14
  3. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res +5 -2
  4. package/src/components/ExtensionPoint/ExtensionPoint_Builder.res.mjs +3 -3
  5. package/src/components/Heartbeat/Heartbeat.res +2 -2
  6. package/src/components/Heartbeat/Heartbeat_Builder.res +2 -2
  7. package/src/components/Heartbeat/Heartbeat_Builder.res.mjs +2 -4
  8. package/src/components/Task/Task_Builder.res +6 -4
  9. package/src/components/Task/Task_Builder.res.mjs +4 -4
  10. package/src/plugin/component/Plugin_Builder.res +5 -1
  11. package/src/plugin/component/Plugin_Builder.res.mjs +1 -1
  12. package/src/plugin/component/Plugin_Helpers.res +6 -1
  13. package/src/plugin/connect/PluginExtensionPoint_Builder.res +2 -0
  14. package/src/plugin/connect/PluginExtensionPoint_Builder.res.mjs +3 -3
  15. package/src/plugin/connect/PluginExtensionPoint_Plugin.res +12 -5
  16. package/src/plugin/connect/PluginExtensionPoint_Plugin.res.mjs +8 -2
  17. package/tests/plugin/HeartbeatDisconnectGraceTest.res +98 -0
  18. package/tests/IdentityTest.res.mjs +0 -174
  19. package/tests/adapter/MonitoringTest.res.mjs +0 -82
  20. package/tests/admin/Platform_ComponentDefinitionsApiTest.res.mjs +0 -356
  21. package/tests/admin/Platform_UIFragmentsApiTest.res.mjs +0 -101
  22. package/tests/aggregate/AggregateCacheTest.res.mjs +0 -433
  23. package/tests/aggregate/AggregateCallbackTest.res.mjs +0 -143
  24. package/tests/aggregate/AggregateCausationTest.res.mjs +0 -47
  25. package/tests/aggregate/AggregateConflictTest.res.mjs +0 -386
  26. package/tests/aggregate/AggregateFixtures.res.mjs +0 -308
  27. package/tests/aggregate/AggregateRejectionTest.res.mjs +0 -166
  28. package/tests/aggregate/AggregateSnapshotTest.res.mjs +0 -645
  29. package/tests/api/ApiNoApiTest.res.mjs +0 -90
  30. package/tests/api/GraphQL_StitcherTest.res.mjs +0 -112
  31. package/tests/api/SimpleTest.res.mjs +0 -10
  32. package/tests/api/SuryToJsonSchemaTest.res.mjs +0 -674
  33. package/tests/commandgenerator/CommandGeneratorCallbackTest.res.mjs +0 -160
  34. package/tests/commandgenerator/CommandGeneratorFixtures.res.mjs +0 -197
  35. package/tests/commandtopic/CommandTopicCallbackFixtures.res.mjs +0 -152
  36. package/tests/commandtopic/CommandTopicCallbackTest.res.mjs +0 -106
  37. package/tests/commandtopic/CommandTopicHelpersRejectionTest.res.mjs +0 -109
  38. package/tests/counter/CounterCallbackTest.res.mjs +0 -140
  39. package/tests/counter/CounterFixtures.res.mjs +0 -67
  40. package/tests/dcb/DcbDecodeTest.res.mjs +0 -194
  41. package/tests/dcb/DcbEventLogOperationsTest.res.mjs +0 -268
  42. package/tests/dcb/DcbFixtures.res.mjs +0 -534
  43. package/tests/dcb/DcbScopeInferenceTest.res.mjs +0 -480
  44. package/tests/dcb/DcbStateChangeSliceTest.res.mjs +0 -540
  45. package/tests/dcb/DcbTagTest.res.mjs +0 -867
  46. package/tests/dcb/DcbValidationTest.res.mjs +0 -476
  47. package/tests/eventlog/EventLogFixtures.res.mjs +0 -196
  48. package/tests/eventlog/EventLogOperationsTest.res.mjs +0 -192
  49. package/tests/eventlog/EventLogRetryTest.res.mjs +0 -195
  50. package/tests/eventmapper/EventMapperCallbackTest.res.mjs +0 -141
  51. package/tests/eventmapper/EventMapperFixtures.res.mjs +0 -440
  52. package/tests/eventmapper/EventMapperTest.res.mjs +0 -83
  53. package/tests/eventtopic/EventTopicFixtures.res.mjs +0 -65
  54. package/tests/eventtopic/EventTopicOperationsTest.res.mjs +0 -71
  55. package/tests/extensionpoint/ExtensionPointCallbackTest.res.mjs +0 -94
  56. package/tests/extensionpoint/ExtensionPointFixtures.res.mjs +0 -205
  57. package/tests/extensionpoint/ExtensionPointOperationsTest.res.mjs +0 -304
  58. package/tests/ftp/FTPTest.res.mjs +0 -88
  59. package/tests/logger/LogFormatTest.res.mjs +0 -309
  60. package/tests/logger/LoggerLazyTest.res.mjs +0 -40
  61. package/tests/message/MessageTest.res.mjs +0 -218
  62. package/tests/message/MetaEnvelopeTest.res.mjs +0 -188
  63. package/tests/plugin/ManifestVisibilityTest.res.mjs +0 -215
  64. package/tests/plugin/PluginSpecExperiment.res.mjs +0 -31
  65. package/tests/plugin/PluginStructureTest.res.mjs +0 -419
  66. package/tests/plugin/PluginVersionTest.res.mjs +0 -30
  67. package/tests/plugin/SchemaWalkerTest.res.mjs +0 -160
  68. package/tests/plugin/StateChangeSlice/PsPlaceOrder.res.mjs +0 -62
  69. package/tests/plugin/StateChangeSlice/PsShipOrder.res.mjs +0 -69
  70. package/tests/plugin/StateViewSlice/PsAnnotatedView.res.mjs +0 -95
  71. package/tests/plugin/StateViewSlice/PsAvailableProductsView.res.mjs +0 -69
  72. package/tests/plugin/StateViewSlice/PsCustomersView.res.mjs +0 -69
  73. package/tests/plugin/StateViewSlice/PsOrdersView.res.mjs +0 -81
  74. package/tests/poc/StructuralSubtypingPoc.res.mjs +0 -61
  75. package/tests/projection/ProjectionOptimizeTest.res.mjs +0 -75
  76. package/tests/querydb/QueryDbFixtures.res.mjs +0 -135
  77. package/tests/querydb/QueryDbOperationsTest.res.mjs +0 -168
  78. package/tests/sideeffecthandler/SideEffectHandlerCallbackTest.res.mjs +0 -77
  79. package/tests/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +0 -139
  80. package/tests/util/CommandPublisherTest.res.mjs +0 -78
  81. package/tests/util/CsvStreamTest.res.mjs +0 -51
  82. package/tests/util/LruTest.res.mjs +0 -105
  83. package/tests/util/MetricsTest.res.mjs +0 -53
@@ -1,47 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
-
3
- import * as Effect from "effect/Effect";
4
- import * as Stream from "effect/Stream";
5
- import * as AggregateFixtures$ReventlessCore from "./AggregateFixtures.res.mjs";
6
-
7
- globalThis.beforeEach(() => {
8
- AggregateFixtures$ReventlessCore.mock.reset();
9
- AggregateFixtures$ReventlessCore.TestHandler.resetCache();
10
- });
11
-
12
- globalThis.describe("Aggregate_Callback causation propagation:", () => {
13
- globalThis.test("event.meta.causationId = command.meta.msgId", async () => {
14
- await Effect.runPromise(AggregateFixtures$ReventlessCore.TestHandler.handleCommands(Stream.fromIterable([AggregateFixtures$ReventlessCore.makeTopicItem(undefined, "ref-1", {
15
- TAG: "Create",
16
- name: "Widget"
17
- })])));
18
- let stored = AggregateFixtures$ReventlessCore.mock.getAll()[0];
19
- globalThis.expect(stored.meta.causationId).toEqual(AggregateFixtures$ReventlessCore.testMeta.msgId);
20
- });
21
- globalThis.test("event.meta.correlationId = command.meta.correlationId (chain root stable)", async () => {
22
- await Effect.runPromise(AggregateFixtures$ReventlessCore.TestHandler.handleCommands(Stream.fromIterable([AggregateFixtures$ReventlessCore.makeTopicItem(undefined, "ref-1", {
23
- TAG: "Create",
24
- name: "Widget"
25
- })])));
26
- let stored = AggregateFixtures$ReventlessCore.mock.getAll()[0];
27
- globalThis.expect(stored.meta.correlationId).toBe(AggregateFixtures$ReventlessCore.testMeta.correlationId);
28
- });
29
- globalThis.test("event has a fresh msgId distinct from the command's msgId", async () => {
30
- await Effect.runPromise(AggregateFixtures$ReventlessCore.TestHandler.handleCommands(Stream.fromIterable([AggregateFixtures$ReventlessCore.makeTopicItem(undefined, "ref-1", {
31
- TAG: "Create",
32
- name: "Widget"
33
- })])));
34
- let stored = AggregateFixtures$ReventlessCore.mock.getAll()[0];
35
- globalThis.expect(stored.meta.msgId === AggregateFixtures$ReventlessCore.testMeta.msgId).toBe(false);
36
- });
37
- globalThis.test("event inherits ip / user / service from the command's meta", async () => {
38
- await Effect.runPromise(AggregateFixtures$ReventlessCore.TestHandler.handleCommands(Stream.fromIterable([AggregateFixtures$ReventlessCore.makeTopicItem(undefined, "ref-1", {
39
- TAG: "Create",
40
- name: "Widget"
41
- })])));
42
- let stored = AggregateFixtures$ReventlessCore.mock.getAll()[0];
43
- globalThis.expect(stored.meta.service).toBe(AggregateFixtures$ReventlessCore.testMeta.service);
44
- });
45
- });
46
-
47
- /* Not a pure module */
@@ -1,386 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
-
3
- import * as S from "sury/src/S.res.mjs";
4
- import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
- import * as Effect from "effect/Effect";
6
- import * as Stream from "effect/Stream";
7
- import * as Aggregate_Callback$ReventlessCore from "../../src/components/Aggregate/Aggregate_Callback.res.mjs";
8
-
9
- S.enableJson();
10
-
11
- let name = "ConflictTestAggregate";
12
-
13
- let commandSchema = S.schema(s => ({
14
- TAG: "Create",
15
- name: s.m(S.string)
16
- }));
17
-
18
- let eventSchema = S.schema(s => ({
19
- TAG: "Created",
20
- name: s.m(S.string)
21
- }));
22
-
23
- let errorSchema = S.literal("AlreadyExists");
24
-
25
- let moduleUrl = import.meta.url;
26
-
27
- function commandAuthorization(param) {
28
- return "AllowAuthenticated";
29
- }
30
-
31
- let AggSpec = {
32
- Id: undefined,
33
- name: name,
34
- commandSchema: commandSchema,
35
- eventSchema: eventSchema,
36
- errorSchema: errorSchema,
37
- moduleUrl: moduleUrl,
38
- commandAuthorization: commandAuthorization
39
- };
40
-
41
- let initialState = {
42
- name: ""
43
- };
44
-
45
- let moduleUrl$1 = import.meta.url;
46
-
47
- function evolve(_state, event) {
48
- return {
49
- name: event.name
50
- };
51
- }
52
-
53
- function decide(_state, command) {
54
- return {
55
- TAG: "Ok",
56
- _0: [{
57
- TAG: "Created",
58
- name: command.name
59
- }]
60
- };
61
- }
62
-
63
- let TestBehavior = {
64
- Spec: undefined,
65
- initialState: initialState,
66
- snapshot: undefined,
67
- moduleUrl: moduleUrl$1,
68
- evolve: evolve,
69
- decide: decide
70
- };
71
-
72
- function makeMockEL() {
73
- let storedRef = {
74
- contents: []
75
- };
76
- let failConflictRef = {
77
- contents: 0
78
- };
79
- let appendCount = {
80
- contents: 0
81
- };
82
- let replayCount = {
83
- contents: 0
84
- };
85
- let appendFn = async (_seqNr, _id, newEvents) => {
86
- appendCount.contents = appendCount.contents + 1 | 0;
87
- if (failConflictRef.contents > 0) {
88
- failConflictRef.contents = failConflictRef.contents - 1 | 0;
89
- return {
90
- TAG: "Error",
91
- _0: "Conflict"
92
- };
93
- } else {
94
- storedRef.contents = storedRef.contents.concat(newEvents);
95
- return {
96
- TAG: "Ok",
97
- _0: undefined
98
- };
99
- }
100
- };
101
- let replayFn = async id => {
102
- replayCount.contents = replayCount.contents + 1 | 0;
103
- return storedRef.contents.filter(e => e.id === id).map(e => e.event);
104
- };
105
- let replayStreamFn = id => {
106
- replayCount.contents = replayCount.contents + 1 | 0;
107
- return Stream.fromIterable(storedRef.contents.filter(e => e.id === id).map(e => e.event));
108
- };
109
- return {
110
- appendFn: appendFn,
111
- replayFn: replayFn,
112
- replayStreamFn: replayStreamFn,
113
- getAll: () => storedRef.contents,
114
- failNextAppendsWithConflict: failConflictRef,
115
- appendCallCount: appendCount,
116
- replayCallCount: replayCount,
117
- reset: () => {
118
- storedRef.contents = [];
119
- failConflictRef.contents = 0;
120
- appendCount.contents = 0;
121
- replayCount.contents = 0;
122
- }
123
- };
124
- }
125
-
126
- let mock = makeMockEL();
127
-
128
- let name$1 = "ConflictMockEventLog";
129
-
130
- let Spec = {
131
- Id: undefined,
132
- name: name$1,
133
- eventSchema: eventSchema
134
- };
135
-
136
- function make(param, param$1) {
137
- return 0;
138
- }
139
-
140
- let EventLog = {
141
- Spec: Spec,
142
- make: make
143
- };
144
-
145
- let eventLog_append = mock.appendFn;
146
-
147
- let eventLog_replay = mock.replayFn;
148
-
149
- function eventLog_replayStream(id, param) {
150
- return mock.replayStreamFn(id);
151
- }
152
-
153
- function eventLog_appendStream(_startingSeqNr, _id, stream) {
154
- return Stream.runDrain(stream);
155
- }
156
-
157
- async function eventLog_latestSnapshot(param) {
158
- return {
159
- TAG: "Ok",
160
- _0: undefined
161
- };
162
- }
163
-
164
- async function eventLog_writeSnapshot(param, param$1) {
165
- return {
166
- TAG: "Ok",
167
- _0: undefined
168
- };
169
- }
170
-
171
- let eventLog = {
172
- append: eventLog_append,
173
- replay: eventLog_replay,
174
- replayStream: eventLog_replayStream,
175
- appendStream: eventLog_appendStream,
176
- latestSnapshot: eventLog_latestSnapshot,
177
- writeSnapshot: eventLog_writeSnapshot
178
- };
179
-
180
- let TestOps = {
181
- Spec: undefined,
182
- EventLog: EventLog,
183
- eventLog: eventLog
184
- };
185
-
186
- let TestHandler = Aggregate_Callback$ReventlessCore.Make({
187
- Id: {
188
- schema: Id$Reventless.StringPure.schema,
189
- make: prim => prim,
190
- makeFromString: prim => prim,
191
- toString: prim => prim,
192
- cmp: Id$Reventless.StringPure.cmp
193
- },
194
- name: name,
195
- eventSchema: eventSchema,
196
- errorSchema: errorSchema,
197
- commandSchema: commandSchema,
198
- moduleUrl: moduleUrl,
199
- commandAuthorization: commandAuthorization
200
- })({
201
- initialState: initialState,
202
- evolve: evolve,
203
- decide: decide,
204
- snapshot: undefined,
205
- moduleUrl: moduleUrl$1
206
- })({
207
- Spec: {
208
- Id: {
209
- schema: Id$Reventless.StringPure.schema,
210
- make: prim => prim,
211
- makeFromString: prim => prim,
212
- toString: prim => prim,
213
- cmp: Id$Reventless.StringPure.cmp
214
- },
215
- name: name,
216
- eventSchema: eventSchema,
217
- errorSchema: errorSchema,
218
- commandSchema: commandSchema,
219
- moduleUrl: moduleUrl,
220
- commandAuthorization: commandAuthorization
221
- },
222
- EventLog: {
223
- Spec: {
224
- Id: {
225
- schema: Id$Reventless.StringPure.schema,
226
- make: prim => prim,
227
- makeFromString: prim => prim,
228
- toString: prim => prim,
229
- cmp: Id$Reventless.StringPure.cmp
230
- },
231
- name: name$1,
232
- eventSchema: eventSchema
233
- },
234
- make: make
235
- },
236
- eventLog: eventLog
237
- });
238
-
239
- let testMeta = {
240
- service: "ConflictTestAggregate",
241
- time: "2024-01-01T00:00:00Z",
242
- ip: "127.0.0.1",
243
- user: "test-user",
244
- msgId: "msg-1",
245
- correlationId: "corr-1"
246
- };
247
-
248
- function makeTopicItem(reference, command) {
249
- return {
250
- command: {
251
- id: "agg-1",
252
- meta: testMeta,
253
- command: command
254
- },
255
- reference: reference
256
- };
257
- }
258
-
259
- globalThis.beforeEach(() => {
260
- mock.reset();
261
- TestHandler.resetCache();
262
- });
263
-
264
- globalThis.describe("Aggregate_Callback — conflict retry:", () => {
265
- globalThis.test("1 conflict retries and succeeds", async () => {
266
- mock.failNextAppendsWithConflict.contents = 1;
267
- let results = await Effect.runPromise(TestHandler.handleCommands(Stream.fromIterable([{
268
- command: {
269
- id: "agg-1",
270
- meta: testMeta,
271
- command: {
272
- TAG: "Create",
273
- name: "Widget"
274
- }
275
- },
276
- reference: "ref-1"
277
- }])));
278
- globalThis.expect(results).toEqual([{
279
- TAG: "Ok",
280
- _0: "ref-1"
281
- }]);
282
- globalThis.expect(mock.appendCallCount.contents).toBe(2);
283
- });
284
- globalThis.test("conflict triggers re-replay", async () => {
285
- mock.failNextAppendsWithConflict.contents = 1;
286
- await Effect.runPromise(TestHandler.handleCommands(Stream.fromIterable([{
287
- command: {
288
- id: "agg-1",
289
- meta: testMeta,
290
- command: {
291
- TAG: "Create",
292
- name: "Widget"
293
- }
294
- },
295
- reference: "ref-1"
296
- }])));
297
- globalThis.expect(mock.replayCallCount.contents).toBe(2);
298
- });
299
- globalThis.test("2 conflicts retry twice and succeed", async () => {
300
- mock.failNextAppendsWithConflict.contents = 2;
301
- let results = await Effect.runPromise(TestHandler.handleCommands(Stream.fromIterable([{
302
- command: {
303
- id: "agg-1",
304
- meta: testMeta,
305
- command: {
306
- TAG: "Create",
307
- name: "Widget"
308
- }
309
- },
310
- reference: "ref-1"
311
- }])));
312
- globalThis.expect(results).toEqual([{
313
- TAG: "Ok",
314
- _0: "ref-1"
315
- }]);
316
- globalThis.expect(mock.appendCallCount.contents).toBe(3);
317
- });
318
- globalThis.test("max retries exhausted returns Error with detail message", async () => {
319
- mock.failNextAppendsWithConflict.contents = 4;
320
- let results = await Effect.runPromise(TestHandler.handleCommands(Stream.fromIterable([{
321
- command: {
322
- id: "agg-1",
323
- meta: testMeta,
324
- command: {
325
- TAG: "Create",
326
- name: "Widget"
327
- }
328
- },
329
- reference: "ref-1"
330
- }])));
331
- globalThis.expect(results).toEqual([{
332
- TAG: "Error",
333
- _0: "concurrent modification (3 retries exhausted): conflict"
334
- }]);
335
- globalThis.expect(mock.appendCallCount.contents).toBe(4);
336
- });
337
- globalThis.test("successful append after conflict stores event", async () => {
338
- mock.failNextAppendsWithConflict.contents = 1;
339
- await Effect.runPromise(TestHandler.handleCommands(Stream.fromIterable([{
340
- command: {
341
- id: "agg-1",
342
- meta: testMeta,
343
- command: {
344
- TAG: "Create",
345
- name: "Widget"
346
- }
347
- },
348
- reference: "ref-1"
349
- }])));
350
- globalThis.expect(mock.getAll().length).toBe(1);
351
- });
352
- globalThis.test("no conflict does not retry", async () => {
353
- let results = await Effect.runPromise(TestHandler.handleCommands(Stream.fromIterable([{
354
- command: {
355
- id: "agg-1",
356
- meta: testMeta,
357
- command: {
358
- TAG: "Create",
359
- name: "Widget"
360
- }
361
- },
362
- reference: "ref-1"
363
- }])));
364
- globalThis.expect(results).toEqual([{
365
- TAG: "Ok",
366
- _0: "ref-1"
367
- }]);
368
- globalThis.expect(mock.appendCallCount.contents).toBe(1);
369
- globalThis.expect(mock.replayCallCount.contents).toBe(1);
370
- });
371
- });
372
-
373
- let OuterEventLog;
374
-
375
- export {
376
- AggSpec,
377
- TestBehavior,
378
- makeMockEL,
379
- mock,
380
- OuterEventLog,
381
- TestOps,
382
- TestHandler,
383
- testMeta,
384
- makeTopicItem,
385
- }
386
- /* Not a pure module */