@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,419 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
-
3
- import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
4
- import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
5
- import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
- import * as PsShipOrder$ReventlessCore from "./StateChangeSlice/PsShipOrder.res.mjs";
7
- import * as PsOrdersView$ReventlessCore from "./StateViewSlice/PsOrdersView.res.mjs";
8
- import * as PsPlaceOrder$ReventlessCore from "./StateChangeSlice/PsPlaceOrder.res.mjs";
9
- import * as PsAnnotatedView$ReventlessCore from "./StateViewSlice/PsAnnotatedView.res.mjs";
10
- import * as PsCustomersView$ReventlessCore from "./StateViewSlice/PsCustomersView.res.mjs";
11
- import * as Plugin_Structure$ReventlessCore from "../../src/plugin/component/Plugin_Structure.res.mjs";
12
- import * as PsAvailableProductsView$ReventlessCore from "./StateViewSlice/PsAvailableProductsView.res.mjs";
13
-
14
- let Behavior = {
15
- initialState: false,
16
- evolve: PsPlaceOrder$ReventlessCore.evolve,
17
- decide: PsPlaceOrder$ReventlessCore.decide,
18
- moduleUrl: PsPlaceOrder$ReventlessCore.moduleUrl
19
- };
20
-
21
- function make(param, param$1, param$2, param$3, param$4, param$5) {
22
- return 0;
23
- }
24
-
25
- let PsPlaceOrderSlice_Spec = {
26
- name: PsPlaceOrder$ReventlessCore.name,
27
- moduleUrl: PsPlaceOrder$ReventlessCore.moduleUrl,
28
- Id: Id$Reventless.$$String,
29
- consumedEventSchema: PsPlaceOrder$ReventlessCore.consumedEventSchema,
30
- errorSchema: PsPlaceOrder$ReventlessCore.errorSchema,
31
- eventSchema: PsPlaceOrder$ReventlessCore.eventSchema,
32
- commandSchema: PsPlaceOrder$ReventlessCore.commandSchema,
33
- commandAuthorization: PsPlaceOrder$ReventlessCore.commandAuthorization,
34
- readConsistency: PsPlaceOrder$ReventlessCore.readConsistency
35
- };
36
-
37
- let PsPlaceOrderSlice = {
38
- Spec: PsPlaceOrderSlice_Spec,
39
- Behavior: Behavior,
40
- isAsync: false,
41
- make: make
42
- };
43
-
44
- let Behavior$1 = {
45
- initialState: false,
46
- evolve: PsShipOrder$ReventlessCore.evolve,
47
- decide: PsShipOrder$ReventlessCore.decide,
48
- moduleUrl: PsShipOrder$ReventlessCore.moduleUrl
49
- };
50
-
51
- function make$1(param, param$1, param$2, param$3, param$4, param$5) {
52
- return 0;
53
- }
54
-
55
- let PsShipOrderSlice_Spec = {
56
- name: PsShipOrder$ReventlessCore.name,
57
- moduleUrl: PsShipOrder$ReventlessCore.moduleUrl,
58
- Id: Id$Reventless.$$String,
59
- consumedEventSchema: PsShipOrder$ReventlessCore.consumedEventSchema,
60
- errorSchema: PsShipOrder$ReventlessCore.errorSchema,
61
- eventSchema: PsShipOrder$ReventlessCore.eventSchema,
62
- commandSchema: PsShipOrder$ReventlessCore.commandSchema,
63
- commandAuthorization: PsShipOrder$ReventlessCore.commandAuthorization,
64
- readConsistency: PsShipOrder$ReventlessCore.readConsistency
65
- };
66
-
67
- let PsShipOrderSlice = {
68
- Spec: PsShipOrderSlice_Spec,
69
- Behavior: Behavior$1,
70
- isAsync: false,
71
- make: make$1
72
- };
73
-
74
- let Projection = {
75
- project: PsOrdersView$ReventlessCore.project,
76
- moduleUrl: PsOrdersView$ReventlessCore.moduleUrl
77
- };
78
-
79
- function make$2(param, param$1, param$2) {
80
- return 0;
81
- }
82
-
83
- let PsOrdersViewSlice_Spec = {
84
- name: PsOrdersView$ReventlessCore.name,
85
- moduleUrl: PsOrdersView$ReventlessCore.moduleUrl,
86
- stateSchema: PsOrdersView$ReventlessCore.stateSchema,
87
- consumedEventSchema: PsOrdersView$ReventlessCore.consumedEventSchema,
88
- config: PsOrdersView$ReventlessCore.config,
89
- subIdConfig: undefined,
90
- authorization: PsOrdersView$ReventlessCore.authorization,
91
- visibility: PsOrdersView$ReventlessCore.visibility
92
- };
93
-
94
- let PsOrdersViewSlice = {
95
- Spec: PsOrdersViewSlice_Spec,
96
- Projection: Projection,
97
- make: make$2
98
- };
99
-
100
- let Projection$1 = {
101
- project: PsAvailableProductsView$ReventlessCore.project,
102
- moduleUrl: PsAvailableProductsView$ReventlessCore.moduleUrl
103
- };
104
-
105
- function make$3(param, param$1, param$2) {
106
- return 0;
107
- }
108
-
109
- let PsAvailableProductsViewSlice_Spec = {
110
- name: PsAvailableProductsView$ReventlessCore.name,
111
- moduleUrl: PsAvailableProductsView$ReventlessCore.moduleUrl,
112
- stateSchema: PsAvailableProductsView$ReventlessCore.stateSchema,
113
- consumedEventSchema: PsAvailableProductsView$ReventlessCore.consumedEventSchema,
114
- config: PsAvailableProductsView$ReventlessCore.config,
115
- subIdConfig: undefined,
116
- authorization: PsAvailableProductsView$ReventlessCore.authorization,
117
- visibility: PsAvailableProductsView$ReventlessCore.visibility
118
- };
119
-
120
- let PsAvailableProductsViewSlice = {
121
- Spec: PsAvailableProductsViewSlice_Spec,
122
- Projection: Projection$1,
123
- make: make$3
124
- };
125
-
126
- let Projection$2 = {
127
- project: PsCustomersView$ReventlessCore.project,
128
- moduleUrl: PsCustomersView$ReventlessCore.moduleUrl
129
- };
130
-
131
- function make$4(param, param$1, param$2) {
132
- return 0;
133
- }
134
-
135
- let PsCustomersViewSlice_Spec = {
136
- name: PsCustomersView$ReventlessCore.name,
137
- moduleUrl: PsCustomersView$ReventlessCore.moduleUrl,
138
- stateSchema: PsCustomersView$ReventlessCore.stateSchema,
139
- consumedEventSchema: PsCustomersView$ReventlessCore.consumedEventSchema,
140
- config: PsCustomersView$ReventlessCore.config,
141
- subIdConfig: undefined,
142
- authorization: PsCustomersView$ReventlessCore.authorization,
143
- visibility: PsCustomersView$ReventlessCore.visibility
144
- };
145
-
146
- let PsCustomersViewSlice = {
147
- Spec: PsCustomersViewSlice_Spec,
148
- Projection: Projection$2,
149
- make: make$4
150
- };
151
-
152
- let Projection$3 = {
153
- project: PsAnnotatedView$ReventlessCore.project,
154
- moduleUrl: PsAnnotatedView$ReventlessCore.moduleUrl
155
- };
156
-
157
- function make$5(param, param$1, param$2) {
158
- return 0;
159
- }
160
-
161
- let PsAnnotatedViewSlice_Spec = {
162
- name: PsAnnotatedView$ReventlessCore.name,
163
- moduleUrl: PsAnnotatedView$ReventlessCore.moduleUrl,
164
- stateSchema: PsAnnotatedView$ReventlessCore.stateSchema,
165
- consumedEventSchema: PsAnnotatedView$ReventlessCore.consumedEventSchema,
166
- config: PsAnnotatedView$ReventlessCore.config,
167
- subIdConfig: PsAnnotatedView$ReventlessCore.subIdConfig,
168
- authorization: PsAnnotatedView$ReventlessCore.authorization,
169
- visibility: PsAnnotatedView$ReventlessCore.visibility
170
- };
171
-
172
- let PsAnnotatedViewSlice = {
173
- Spec: PsAnnotatedViewSlice_Spec,
174
- Projection: Projection$3,
175
- make: make$5
176
- };
177
-
178
- let structure = Plugin_Structure$ReventlessCore.make("TestPlugin", undefined, undefined, [
179
- PsOrdersViewSlice,
180
- PsAvailableProductsViewSlice,
181
- PsCustomersViewSlice,
182
- PsAnnotatedViewSlice
183
- ], [
184
- PsPlaceOrderSlice,
185
- PsShipOrderSlice
186
- ], undefined, undefined, undefined, undefined, undefined, undefined);
187
-
188
- globalThis.describe("Plugin_Structure.make — Phase 2 graph fields", () => {
189
- globalThis.describe("stateChangeSlices", () => {
190
- globalThis.test("produces two SCS entries in declaration order", () => {
191
- globalThis.expect(structure.stateChangeSlices.length).toBe(2);
192
- });
193
- globalThis.test("PlaceOrder: producedEventTypes contains OrderPlaced (qualified)", () => {
194
- let placeOrder = structure.stateChangeSlices[0];
195
- globalThis.expect(placeOrder.producedEventTypes).toEqual(["TestPlugin.OrderPlaced"]);
196
- });
197
- globalThis.test("PlaceOrder: consumedEventTypes contains CatalogProductSynced qualified (payload-less variants excluded)", () => {
198
- let placeOrder = structure.stateChangeSlices[0];
199
- globalThis.expect(placeOrder.consumedEventTypes).toEqual(["TestPlugin.CatalogProductSynced"]);
200
- });
201
- globalThis.test("PlaceOrder: linkedViews contains Orders (consumes its OrderPlaced)", () => {
202
- let placeOrder = structure.stateChangeSlices[0];
203
- globalThis.expect(placeOrder.linkedViews).toEqual(["Orders"]);
204
- });
205
- globalThis.test("PlaceOrder: consistencyRead is AvailableProducts (only SVS consuming CatalogProductSynced)", () => {
206
- let placeOrder = structure.stateChangeSlices[0];
207
- globalThis.expect(placeOrder.consistencyRead).toEqual("AvailableProducts");
208
- });
209
- globalThis.test("PlaceOrder command: level Collection (creation command), aggregateIdField orderId for UUID injection", () => {
210
- let placeOrder = structure.stateChangeSlices[0];
211
- let cmd = placeOrder.commands[0];
212
- globalThis.expect([
213
- cmd.level,
214
- cmd.aggregateIdField
215
- ]).toEqual([
216
- "Collection",
217
- "orderId"
218
- ]);
219
- });
220
- globalThis.test("ShipOrder: producedEventTypes contains OrderShipped (qualified)", () => {
221
- let shipOrder = structure.stateChangeSlices[1];
222
- globalThis.expect(shipOrder.producedEventTypes).toEqual(["TestPlugin.OrderShipped"]);
223
- });
224
- globalThis.test("ShipOrder: consumedEventTypes is empty (all consumed events are payload-less literals)", () => {
225
- let shipOrder = structure.stateChangeSlices[1];
226
- globalThis.expect(shipOrder.consumedEventTypes).toEqual([]);
227
- });
228
- globalThis.test("ShipOrder: linkedViews contains Orders (consumes its OrderShipped)", () => {
229
- let shipOrder = structure.stateChangeSlices[1];
230
- globalThis.expect(shipOrder.linkedViews).toEqual(["Orders"]);
231
- });
232
- globalThis.test("ShipOrder: consistencyRead is None (empty consumedEventTypes cannot overlap any SVS)", () => {
233
- let shipOrder = structure.stateChangeSlices[1];
234
- globalThis.expect(shipOrder.consistencyRead).toEqual(undefined);
235
- });
236
- globalThis.test("ShipOrder command: level Instance, aggregateIdField orderId", () => {
237
- let shipOrder = structure.stateChangeSlices[1];
238
- let cmd = shipOrder.commands[0];
239
- globalThis.expect([
240
- cmd.level,
241
- cmd.aggregateIdField
242
- ]).toEqual([
243
- "Instance",
244
- "orderId"
245
- ]);
246
- });
247
- globalThis.test("ShipOrder: payload-less command CancelShipment is surfaced in commands", () => {
248
- let shipOrder = structure.stateChangeSlices[1];
249
- globalThis.expect(shipOrder.commands.map(c => c.name)).toEqual([
250
- "ShipOrder",
251
- "CancelShipment"
252
- ]);
253
- });
254
- globalThis.test("ShipOrder: payload-less event ShipmentVoided is surfaced in events", () => {
255
- let shipOrder = structure.stateChangeSlices[1];
256
- globalThis.expect(shipOrder.events.map(e => e.name)).toEqual([
257
- "OrderShipped",
258
- "ShipmentVoided"
259
- ]);
260
- });
261
- globalThis.test("ShipOrder: producedEventTypes still excludes the payload-less ShipmentVoided (DCB filter intact)", () => {
262
- let shipOrder = structure.stateChangeSlices[1];
263
- globalThis.expect(shipOrder.producedEventTypes).toEqual(["TestPlugin.OrderShipped"]);
264
- });
265
- });
266
- globalThis.describe("stateViewSlices", () => {
267
- globalThis.test("produces four SVS entries in declaration order", () => {
268
- globalThis.expect(structure.stateViewSlices.length).toBe(4);
269
- });
270
- globalThis.test("OrdersView: consumedEventTypes contains the three order events (qualified)", () => {
271
- let ordersView = structure.stateViewSlices[0];
272
- globalThis.expect(ordersView.consumedEventTypes).toEqual([
273
- "TestPlugin.OrderPlaced",
274
- "TestPlugin.OrderShipped",
275
- "TestPlugin.OrderCancelled"
276
- ]);
277
- });
278
- globalThis.test("OrdersView: linkedWriteSide contains both SCS producing order events", () => {
279
- let ordersView = structure.stateViewSlices[0];
280
- globalThis.expect(ordersView.linkedWriteSide).toEqual([
281
- "PlaceOrder",
282
- "ShipOrder"
283
- ]);
284
- });
285
- globalThis.test("AvailableProductsView: consumedEventTypes contains catalog events (qualified)", () => {
286
- let apv = structure.stateViewSlices[1];
287
- globalThis.expect(apv.consumedEventTypes).toEqual([
288
- "TestPlugin.CatalogProductSynced",
289
- "TestPlugin.CatalogProductPriceChanged"
290
- ]);
291
- });
292
- globalThis.test("AvailableProductsView: linkedWriteSide is empty (no SCS produces these events)", () => {
293
- let apv = structure.stateViewSlices[1];
294
- globalThis.expect(apv.linkedWriteSide).toEqual([]);
295
- });
296
- });
297
- globalThis.describe("labelField / searchableFields", () => {
298
- globalThis.test("OrdersView: no @displayName → first non-`*Id` string field wins (customerName)", () => {
299
- let ordersView = structure.stateViewSlices[0];
300
- globalThis.expect([
301
- ordersView.labelField,
302
- ordersView.searchableFields
303
- ]).toEqual([
304
- "customerName",
305
- ["customerName"]
306
- ]);
307
- });
308
- globalThis.test("AvailableProductsView: no @displayName → first non-`*Id` string field wins (name)", () => {
309
- let apv = structure.stateViewSlices[1];
310
- globalThis.expect([
311
- apv.labelField,
312
- apv.searchableFields
313
- ]).toEqual([
314
- "name",
315
- ["name"]
316
- ]);
317
- });
318
- globalThis.test("Customers: composite @displayName → labelField=displayName, searchableFields=raw source fields in declaration order", () => {
319
- let customers = structure.stateViewSlices[2];
320
- globalThis.expect([
321
- customers.labelField,
322
- customers.searchableFields
323
- ]).toEqual([
324
- "displayName",
325
- [
326
- "firstName",
327
- "lastName"
328
- ]
329
- ]);
330
- });
331
- });
332
- globalThis.describe("queryableDef.schema propagates x-reventless-* annotations", () => {
333
- let getProperty = (json, key) => {
334
- let obj = Stdlib_JSON.Decode.object(json);
335
- if (obj !== undefined) {
336
- return obj[key];
337
- }
338
- };
339
- let getPropertyOf = (json, fieldName) => {
340
- let props = getProperty(json, "properties");
341
- if (props === undefined) {
342
- return;
343
- }
344
- let obj = Stdlib_JSON.Decode.object(props);
345
- if (obj !== undefined) {
346
- return obj[fieldName];
347
- }
348
- };
349
- let annotatedSchema = JSON.parse(structure.stateViewSlices[3].schema);
350
- globalThis.test("itemId carries x-reventless-id", () => {
351
- globalThis.expect(Stdlib_Option.flatMap(Stdlib_Option.flatMap(getPropertyOf(annotatedSchema, "itemId"), s => getProperty(s, "x-reventless-id")), Stdlib_JSON.Decode.bool)).toBe(true);
352
- });
353
- globalThis.test("version carries x-reventless-subId", () => {
354
- globalThis.expect(Stdlib_Option.flatMap(Stdlib_Option.flatMap(getPropertyOf(annotatedSchema, "version"), s => getProperty(s, "x-reventless-subId")), Stdlib_JSON.Decode.bool)).toBe(true);
355
- });
356
- globalThis.test("ownerId carries x-reventless-index = byOwner", () => {
357
- globalThis.expect(Stdlib_Option.flatMap(Stdlib_Option.flatMap(getPropertyOf(annotatedSchema, "ownerId"), s => getProperty(s, "x-reventless-index")), Stdlib_JSON.Decode.string)).toBe("byOwner");
358
- });
359
- globalThis.test("unannotated field 'name' has no x-reventless-* keys", () => {
360
- let nameField = getPropertyOf(annotatedSchema, "name");
361
- globalThis.expect([
362
- Stdlib_Option.flatMap(nameField, s => getProperty(s, "x-reventless-id")),
363
- Stdlib_Option.flatMap(nameField, s => getProperty(s, "x-reventless-subId")),
364
- Stdlib_Option.flatMap(nameField, s => getProperty(s, "x-reventless-index"))
365
- ]).toEqual([
366
- undefined,
367
- undefined,
368
- undefined
369
- ]);
370
- });
371
- globalThis.test("unannotated state-view slice (Orders) emits no x-reventless-* keys", () => {
372
- let ordersSchema = JSON.parse(structure.stateViewSlices[0].schema);
373
- let orderIdField = getPropertyOf(ordersSchema, "orderId");
374
- globalThis.expect(Stdlib_Option.flatMap(orderIdField, s => getProperty(s, "x-reventless-id"))).toBe(undefined);
375
- });
376
- });
377
- globalThis.describe("componentChapters threading", () => {
378
- let chaptered = Plugin_Structure$ReventlessCore.make("TestPlugin", undefined, undefined, [PsOrdersViewSlice], [
379
- PsPlaceOrderSlice,
380
- PsShipOrderSlice
381
- ], undefined, undefined, undefined, undefined, undefined, Object.fromEntries([
382
- [
383
- "PlaceOrder",
384
- "Order"
385
- ],
386
- [
387
- "Orders",
388
- "Order"
389
- ]
390
- ]));
391
- globalThis.test("a chaptered state-change slice carries Some(chapter)", () => {
392
- let placeOrder = chaptered.stateChangeSlices[0];
393
- globalThis.expect(placeOrder.chapter).toEqual("Order");
394
- });
395
- globalThis.test("a chaptered state-view slice carries Some(chapter)", () => {
396
- let orders = chaptered.stateViewSlices[0];
397
- globalThis.expect(orders.chapter).toEqual("Order");
398
- });
399
- globalThis.test("a component absent from the map carries None", () => {
400
- let shipOrder = chaptered.stateChangeSlices[1];
401
- globalThis.expect(shipOrder.chapter).toEqual(undefined);
402
- });
403
- globalThis.test("no ~componentChapters → every def is chapterless (None)", () => {
404
- let placeOrder = structure.stateChangeSlices[0];
405
- globalThis.expect(placeOrder.chapter).toEqual(undefined);
406
- });
407
- });
408
- });
409
-
410
- export {
411
- PsPlaceOrderSlice,
412
- PsShipOrderSlice,
413
- PsOrdersViewSlice,
414
- PsAvailableProductsViewSlice,
415
- PsCustomersViewSlice,
416
- PsAnnotatedViewSlice,
417
- structure,
418
- }
419
- /* structure Not a pure module */
@@ -1,30 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
-
3
- import * as Plugin$ReventlessCore from "../../src/plugin/component/Plugin.res.mjs";
4
-
5
- globalThis.describe("Plugin.version", () => {
6
- globalThis.test("extracts the version segment from name@version", () => {
7
- globalThis.expect(Plugin$ReventlessCore.version("Catalog@0.10.0-alpha.73")).toBe("0.10.0-alpha.73");
8
- });
9
- globalThis.test("returns empty string when the id carries no @", () => {
10
- globalThis.expect(Plugin$ReventlessCore.version("Platform")).toBe("");
11
- });
12
- });
13
-
14
- globalThis.describe("Plugin.compareVersions", () => {
15
- globalThis.test("equal versions compare as 0", () => {
16
- globalThis.expect(Plugin$ReventlessCore.compareVersions("0.10.0", "0.10.0")).toBe(0);
17
- });
18
- globalThis.test("higher patch is newer", () => {
19
- globalThis.expect(Plugin$ReventlessCore.compareVersions("0.10.1", "0.10.0")).toBe(1);
20
- });
21
- globalThis.test("lower minor is older", () => {
22
- globalThis.expect(Plugin$ReventlessCore.compareVersions("0.9.0", "0.10.0")).toBe(-1);
23
- });
24
- globalThis.test("orders prerelease counters numerically, not lexically", () => {
25
- globalThis.expect(Plugin$ReventlessCore.compareVersions("0.10.0-alpha.9", "0.10.0-alpha.73")).toBe(-1);
26
- globalThis.expect(Plugin$ReventlessCore.compareVersions("0.10.0-alpha.73", "0.10.0-alpha.7")).toBe(1);
27
- });
28
- });
29
-
30
- /* Not a pure module */
@@ -1,160 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
-
3
- import * as S from "sury/src/S.res.mjs";
4
- import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
5
- import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
6
- import * as SchemaWalker$ReventlessCore from "../../src/plugin/component/SchemaWalker.res.mjs";
7
-
8
- S.enableJson();
9
-
10
- let simpleRecordSchema = S.schema(s => ({
11
- label: s.m(S.string),
12
- count: s.m(S.int),
13
- rating: s.m(S.option(S.float))
14
- }));
15
-
16
- let simpleVariantSchema = S.union([
17
- S.schema(s => ({
18
- TAG: "Added",
19
- id: s.m(S.string),
20
- name: s.m(S.string)
21
- })),
22
- S.schema(s => ({
23
- TAG: "Renamed",
24
- id: s.m(S.string),
25
- newName: s.m(S.string)
26
- })),
27
- S.literal("Removed")
28
- ]);
29
-
30
- globalThis.describe("SchemaWalker:", () => {
31
- globalThis.describe("record schema", () => {
32
- let result = SchemaWalker$ReventlessCore.walk("SimpleRecord", simpleRecordSchema);
33
- globalThis.test("kind is record", () => {
34
- globalThis.expect(result.kind).toBe("record");
35
- });
36
- globalThis.test("constructors is absent", () => {
37
- globalThis.expect(result.constructors).toEqual(undefined);
38
- });
39
- globalThis.test("fields are sorted alphabetically", () => {
40
- let names = result.fields.map(f => f.name);
41
- globalThis.expect(names).toEqual([
42
- "count",
43
- "label",
44
- "rating"
45
- ]);
46
- });
47
- globalThis.test("required string field", () => {
48
- let f = result.fields[1];
49
- globalThis.expect([
50
- f.typeDescription,
51
- f.isRequired
52
- ]).toEqual([
53
- "string",
54
- true
55
- ]);
56
- });
57
- globalThis.test("required int field typeDescription is number", () => {
58
- let f = result.fields[0];
59
- globalThis.expect([
60
- f.typeDescription,
61
- f.isRequired
62
- ]).toEqual([
63
- "number",
64
- true
65
- ]);
66
- });
67
- globalThis.test("optional float field", () => {
68
- let f = result.fields[2];
69
- globalThis.expect([
70
- f.typeDescription,
71
- f.isRequired
72
- ]).toEqual([
73
- "option<number>",
74
- false
75
- ]);
76
- });
77
- globalThis.test("structuralHash is non-empty", () => {
78
- globalThis.expect(result.structuralHash.length > 0).toBe(true);
79
- });
80
- });
81
- globalThis.describe("variant schema", () => {
82
- let result = SchemaWalker$ReventlessCore.walk("SimpleVariant", simpleVariantSchema);
83
- globalThis.test("kind is variant", () => {
84
- globalThis.expect(result.kind).toBe("variant");
85
- });
86
- globalThis.test("fields array is empty", () => {
87
- globalThis.expect(result.fields).toEqual([]);
88
- });
89
- globalThis.test("payload-less constructor Removed is excluded", () => {
90
- let ctors = Stdlib_Option.getOr(result.constructors, []);
91
- let names = ctors.map(c => c.name).toSorted(Primitive_string.compare);
92
- globalThis.expect(names).toEqual([
93
- "Added",
94
- "Renamed"
95
- ]);
96
- });
97
- globalThis.test("Added constructor has sorted fields", () => {
98
- let ctors = Stdlib_Option.getOr(result.constructors, []);
99
- let added = Stdlib_Option.getOr(ctors.find(c => c.name === "Added"), {
100
- name: "",
101
- fields: []
102
- });
103
- globalThis.expect(added.fields.map(f => f.name)).toEqual([
104
- "id",
105
- "name"
106
- ]);
107
- });
108
- globalThis.test("Renamed constructor has sorted fields", () => {
109
- let ctors = Stdlib_Option.getOr(result.constructors, []);
110
- let renamed = Stdlib_Option.getOr(ctors.find(c => c.name === "Renamed"), {
111
- name: "",
112
- fields: []
113
- });
114
- globalThis.expect(renamed.fields.map(f => f.name)).toEqual([
115
- "id",
116
- "newName"
117
- ]);
118
- });
119
- globalThis.test("structuralHash is non-empty", () => {
120
- globalThis.expect(result.structuralHash.length > 0).toBe(true);
121
- });
122
- });
123
- globalThis.describe("hash properties", () => {
124
- globalThis.test("same schema produces identical hash on repeated calls", () => {
125
- let h1 = SchemaWalker$ReventlessCore.walk("X", simpleRecordSchema).structuralHash;
126
- let h2 = SchemaWalker$ReventlessCore.walk("X", simpleRecordSchema).structuralHash;
127
- globalThis.expect(h1).toBe(h2);
128
- });
129
- globalThis.test("typeName does not affect structuralHash", () => {
130
- let h1 = SchemaWalker$ReventlessCore.walk("TypeA", simpleRecordSchema).structuralHash;
131
- let h2 = SchemaWalker$ReventlessCore.walk("TypeB", simpleRecordSchema).structuralHash;
132
- globalThis.expect(h1).toBe(h2);
133
- });
134
- globalThis.test("structurally distinct schemas produce different hashes", () => {
135
- let h1 = SchemaWalker$ReventlessCore.walk("R", simpleRecordSchema).structuralHash;
136
- let h2 = SchemaWalker$ReventlessCore.walk("V", simpleVariantSchema).structuralHash;
137
- globalThis.expect(h1 === h2).toBe(false);
138
- });
139
- });
140
- globalThis.describe("scalar / unsupported schema", () => {
141
- globalThis.test("plain string schema → kind unknown", () => {
142
- let result = SchemaWalker$ReventlessCore.walk("Scalar", S.string);
143
- globalThis.expect(result.kind).toBe("unknown");
144
- });
145
- globalThis.test("plain string schema → empty fields", () => {
146
- let result = SchemaWalker$ReventlessCore.walk("Scalar", S.string);
147
- globalThis.expect(result.fields).toEqual([]);
148
- });
149
- globalThis.test("plain string schema → empty structuralHash", () => {
150
- let result = SchemaWalker$ReventlessCore.walk("Scalar", S.string);
151
- globalThis.expect(result.structuralHash).toBe("");
152
- });
153
- });
154
- });
155
-
156
- export {
157
- simpleRecordSchema,
158
- simpleVariantSchema,
159
- }
160
- /* Not a pure module */
@@ -1,62 +0,0 @@
1
- // Generated by ReScript, PLEASE EDIT WITH CARE
2
-
3
- import * as S from "sury/src/S.res.mjs";
4
- import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
5
-
6
- let consumedEventSchema = S.schema(s => ({
7
- TAG: "CatalogProductSynced",
8
- productId: s.m(DcbTag$Reventless.string)
9
- }));
10
-
11
- function evolve(_state, _event) {
12
- return true;
13
- }
14
-
15
- let commandSchema = S.schema(s => ({
16
- TAG: "PlaceOrder",
17
- orderId: s.m(DcbTag$Reventless.string)
18
- }));
19
-
20
- let errorSchema = S.literal("AlreadyPlaced");
21
-
22
- let eventSchema = S.schema(s => ({
23
- TAG: "OrderPlaced",
24
- orderId: s.m(DcbTag$Reventless.string)
25
- }));
26
-
27
- function decide(_state, _command) {
28
- return {
29
- TAG: "Ok",
30
- _0: []
31
- };
32
- }
33
-
34
- function commandAuthorization(param) {
35
- return "AllowAuthenticated";
36
- }
37
-
38
- let name = "PlaceOrder";
39
-
40
- let Id;
41
-
42
- let initialState = false;
43
-
44
- let moduleUrl = "@reventlessdev/reventless-core/tests/plugin/StateChangeSlice/PsPlaceOrder.res.mjs";
45
-
46
- let readConsistency = "EscalateOnRetry";
47
-
48
- export {
49
- name,
50
- Id,
51
- initialState,
52
- consumedEventSchema,
53
- evolve,
54
- commandSchema,
55
- errorSchema,
56
- eventSchema,
57
- decide,
58
- moduleUrl,
59
- commandAuthorization,
60
- readConsistency,
61
- }
62
- /* consumedEventSchema Not a pure module */