@reventlessdev/reventless-gwt 1.0.0-alpha.100

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 (184) hide show
  1. package/CHANGELOG.md +916 -0
  2. package/LICENSE +202 -0
  3. package/bin/reventless-dev.mjs +21 -0
  4. package/package.json +54 -0
  5. package/rescript.json +36 -0
  6. package/src/.gwtignore +10 -0
  7. package/src/Automation_GWT.res +207 -0
  8. package/src/Automation_GWT.res.mjs +160 -0
  9. package/src/Behavior_GWT.res +569 -0
  10. package/src/Behavior_GWT.res.mjs +523 -0
  11. package/src/Bind.res +29 -0
  12. package/src/Bind.res.mjs +22 -0
  13. package/src/BuildClassifier.res +147 -0
  14. package/src/BuildClassifier.res.mjs +136 -0
  15. package/src/Cancellation.res +37 -0
  16. package/src/Cancellation.res.mjs +46 -0
  17. package/src/ChildProcess.res +102 -0
  18. package/src/ChildProcess.res.mjs +107 -0
  19. package/src/Cli.res +905 -0
  20. package/src/Cli.res.mjs +952 -0
  21. package/src/Collector.res +212 -0
  22. package/src/Collector.res.mjs +218 -0
  23. package/src/ComponentMeta.res +77 -0
  24. package/src/ComponentMeta.res.mjs +91 -0
  25. package/src/ComponentScan.res +103 -0
  26. package/src/ComponentScan.res.mjs +105 -0
  27. package/src/Delegate_GWT.res +303 -0
  28. package/src/Delegate_GWT.res.mjs +372 -0
  29. package/src/Diff.res +91 -0
  30. package/src/Diff.res.mjs +98 -0
  31. package/src/Discovery.res +105 -0
  32. package/src/Discovery.res.mjs +99 -0
  33. package/src/DomainDeadCode.res +98 -0
  34. package/src/DomainDeadCode.res.mjs +72 -0
  35. package/src/DomainGraph.res +0 -0
  36. package/src/DomainGraph.res.mjs +0 -0
  37. package/src/EventMapping_GWT.res +29 -0
  38. package/src/EventMapping_GWT.res.mjs +44 -0
  39. package/src/Filter.res +45 -0
  40. package/src/Filter.res.mjs +47 -0
  41. package/src/Flow_GWT.res +664 -0
  42. package/src/Flow_GWT.res.mjs +604 -0
  43. package/src/FormatterHuman.res +109 -0
  44. package/src/FormatterHuman.res.mjs +115 -0
  45. package/src/FormatterJson.res +264 -0
  46. package/src/FormatterJson.res.mjs +322 -0
  47. package/src/FormatterJunit.res +93 -0
  48. package/src/FormatterJunit.res.mjs +90 -0
  49. package/src/FormatterTap.res +100 -0
  50. package/src/FormatterTap.res.mjs +131 -0
  51. package/src/FormatterVsCode.res +352 -0
  52. package/src/FormatterVsCode.res.mjs +546 -0
  53. package/src/Hint.res +119 -0
  54. package/src/Hint.res.mjs +124 -0
  55. package/src/InboundTranslation_GWT.res +83 -0
  56. package/src/InboundTranslation_GWT.res.mjs +94 -0
  57. package/src/JestBind.res +70 -0
  58. package/src/JestBind.res.mjs +63 -0
  59. package/src/Loader.res +24 -0
  60. package/src/Loader.res.mjs +23 -0
  61. package/src/LocalHost.res +119 -0
  62. package/src/LocalHost.res.mjs +99 -0
  63. package/src/Mapping_GWT.res +474 -0
  64. package/src/Mapping_GWT.res.mjs +322 -0
  65. package/src/MismatchRender.res +72 -0
  66. package/src/MismatchRender.res.mjs +127 -0
  67. package/src/MultiSourceProjection_GWT.res +316 -0
  68. package/src/MultiSourceProjection_GWT.res.mjs +354 -0
  69. package/src/OutboundTranslation_GWT.res +238 -0
  70. package/src/OutboundTranslation_GWT.res.mjs +186 -0
  71. package/src/Outcome.res +97 -0
  72. package/src/Outcome.res.mjs +93 -0
  73. package/src/PackageScan.res +80 -0
  74. package/src/PackageScan.res.mjs +81 -0
  75. package/src/PlatformRunner.res +181 -0
  76. package/src/PlatformRunner.res.mjs +176 -0
  77. package/src/PlatformScan.res +142 -0
  78. package/src/PlatformScan.res.mjs +132 -0
  79. package/src/ProcessManager.res +135 -0
  80. package/src/ProcessManager.res.mjs +119 -0
  81. package/src/Projection_GWT.res +312 -0
  82. package/src/Projection_GWT.res.mjs +332 -0
  83. package/src/Query_GWT.res +379 -0
  84. package/src/Query_GWT.res.mjs +367 -0
  85. package/src/RenderRescript.res +125 -0
  86. package/src/RenderRescript.res.mjs +141 -0
  87. package/src/RunWorker.res +24 -0
  88. package/src/RunWorker.res.mjs +16 -0
  89. package/src/RunnerTypes.res +68 -0
  90. package/src/RunnerTypes.res.mjs +60 -0
  91. package/src/SideEffect_GWT.res +157 -0
  92. package/src/SideEffect_GWT.res.mjs +113 -0
  93. package/src/StateChange/ExternalAddCategorySlice.res +25 -0
  94. package/src/StateChange/ExternalAddCategorySlice.res.mjs +34 -0
  95. package/src/StateChange/ExternalAddCategorySlice_Behavior.res +19 -0
  96. package/src/StateChange/ExternalAddCategorySlice_Behavior.res.mjs +46 -0
  97. package/src/StateChange/WithFixtures.res +22 -0
  98. package/src/StateChange/WithFixtures.res.mjs +31 -0
  99. package/src/StateChange/WithFixtures_Behavior.res +17 -0
  100. package/src/StateChange/WithFixtures_Behavior.res.mjs +37 -0
  101. package/src/StateChange/WithManualOpen.res +23 -0
  102. package/src/StateChange/WithManualOpen.res.mjs +31 -0
  103. package/src/StateChange/WithManualOpen_Behavior.res +17 -0
  104. package/src/StateChange/WithManualOpen_Behavior.res.mjs +37 -0
  105. package/src/StubRuntime.res +54 -0
  106. package/src/StubRuntime.res.mjs +55 -0
  107. package/src/TestFixtures.res +16 -0
  108. package/src/TestFixtures.res.mjs +34 -0
  109. package/src/Watch.res +108 -0
  110. package/src/Watch.res.mjs +85 -0
  111. package/src/WatcherProbe.res +56 -0
  112. package/src/WatcherProbe.res.mjs +59 -0
  113. package/src/Worker.res +24 -0
  114. package/src/Worker.res.mjs +9 -0
  115. package/tests/AutomationGwtTest.res +71 -0
  116. package/tests/AutomationGwtTest.res.mjs +189 -0
  117. package/tests/BuildClassifierTest.res +133 -0
  118. package/tests/BuildClassifierTest.res.mjs +176 -0
  119. package/tests/CliRunEntryTest.res +57 -0
  120. package/tests/CliRunEntryTest.res.mjs +65 -0
  121. package/tests/CliWatchScopeTest.res +62 -0
  122. package/tests/CliWatchScopeTest.res.mjs +95 -0
  123. package/tests/ComponentMetaTest.res +67 -0
  124. package/tests/ComponentMetaTest.res.mjs +71 -0
  125. package/tests/DelegateGwtTest.res +487 -0
  126. package/tests/DelegateGwtTest.res.mjs +891 -0
  127. package/tests/DiscoveryTest.res +42 -0
  128. package/tests/DiscoveryTest.res.mjs +43 -0
  129. package/tests/DomainDeadCodeTest.res +119 -0
  130. package/tests/DomainDeadCodeTest.res.mjs +158 -0
  131. package/tests/DomainGraphTest.res +448 -0
  132. package/tests/DomainGraphTest.res.mjs +505 -0
  133. package/tests/FlowAggregateGwtTest.res +171 -0
  134. package/tests/FlowAggregateGwtTest.res.mjs +273 -0
  135. package/tests/FlowCrossPluginGwtTest.res +340 -0
  136. package/tests/FlowCrossPluginGwtTest.res.mjs +798 -0
  137. package/tests/FlowGwtTest.res +222 -0
  138. package/tests/FlowGwtTest.res.mjs +433 -0
  139. package/tests/FormatterGoldenTest.res +125 -0
  140. package/tests/FormatterGoldenTest.res.mjs +162 -0
  141. package/tests/FormatterVsCodeMessageTest.res +41 -0
  142. package/tests/FormatterVsCodeMessageTest.res.mjs +42 -0
  143. package/tests/InboundTranslationGwtTest.res +34 -0
  144. package/tests/InboundTranslationGwtTest.res.mjs +99 -0
  145. package/tests/LocalHostIntegration.res +70 -0
  146. package/tests/LocalHostIntegration.res.mjs +64 -0
  147. package/tests/LocalHostTest.res +71 -0
  148. package/tests/LocalHostTest.res.mjs +63 -0
  149. package/tests/MappingGwtTest.res +350 -0
  150. package/tests/MappingGwtTest.res.mjs +596 -0
  151. package/tests/OutboundTranslationGwtTest.res +59 -0
  152. package/tests/OutboundTranslationGwtTest.res.mjs +139 -0
  153. package/tests/PlatformRunnerTest.res +66 -0
  154. package/tests/PlatformRunnerTest.res.mjs +85 -0
  155. package/tests/PlatformScanTest.res +61 -0
  156. package/tests/PlatformScanTest.res.mjs +56 -0
  157. package/tests/QueryGwtTest.res +161 -0
  158. package/tests/QueryGwtTest.res.mjs +314 -0
  159. package/tests/QueryResolverGwtTest.res +71 -0
  160. package/tests/QueryResolverGwtTest.res.mjs +136 -0
  161. package/tests/RunnerUnitTest.res +219 -0
  162. package/tests/RunnerUnitTest.res.mjs +244 -0
  163. package/tests/SideEffect/FakeOrderNotification.res +23 -0
  164. package/tests/SideEffect/FakeOrderNotification.res.mjs +36 -0
  165. package/tests/SideEffect/FakeOrderNotificationGwtTest.res +35 -0
  166. package/tests/SideEffect/FakeOrderNotificationGwtTest.res.mjs +73 -0
  167. package/tests/SideEffect/MockEmail.res +18 -0
  168. package/tests/SideEffect/MockEmail.res.mjs +47 -0
  169. package/tests/StateChange/ExternalAddCategorySlice_GWT.res +27 -0
  170. package/tests/StateChange/ExternalAddCategorySlice_GWT.res.mjs +70 -0
  171. package/tests/StateChange/WithFixtures_Fixtures.res +9 -0
  172. package/tests/StateChange/WithFixtures_Fixtures.res.mjs +20 -0
  173. package/tests/StateChange/WithFixtures_GWT.res +23 -0
  174. package/tests/StateChange/WithFixtures_GWT.res.mjs +56 -0
  175. package/tests/StateChange/WithManualOpen_Fixtures.res +7 -0
  176. package/tests/StateChange/WithManualOpen_Fixtures.res.mjs +20 -0
  177. package/tests/StateChange/WithManualOpen_GWT.res +17 -0
  178. package/tests/StateChange/WithManualOpen_GWT.res.mjs +56 -0
  179. package/tests/StateChangeSliceGwtTest.res +160 -0
  180. package/tests/StateChangeSliceGwtTest.res.mjs +280 -0
  181. package/tests/StateViewSliceGwtTest.res +64 -0
  182. package/tests/StateViewSliceGwtTest.res.mjs +161 -0
  183. package/tests/WatchDebounceTest.res +106 -0
  184. package/tests/WatchDebounceTest.res.mjs +128 -0
@@ -0,0 +1,322 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
5
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
+ import * as Primitive_object from "@rescript/runtime/lib/es6/Primitive_object.js";
7
+ import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
8
+ import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
9
+ import * as Outcome$ReventlessGwt from "./Outcome.res.mjs";
10
+ import * as JestBind$ReventlessGwt from "./JestBind.res.mjs";
11
+ import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
12
+
13
+ function FromBehavior(Spec) {
14
+ return Behavior => ({
15
+ name: Spec.name,
16
+ Id: Spec.Id,
17
+ initialState: Behavior.initialState,
18
+ consumedEventSchema: Spec.eventSchema,
19
+ evolve: Behavior.evolve,
20
+ commandSchema: Spec.commandSchema,
21
+ eventSchema: Spec.eventSchema,
22
+ errorSchema: Spec.errorSchema,
23
+ decide: Behavior.decide
24
+ });
25
+ }
26
+
27
+ function FromStateChangeSlice(Spec) {
28
+ return {
29
+ name: Spec.name,
30
+ Id: undefined,
31
+ initialState: Spec.initialState,
32
+ consumedEventSchema: Spec.consumedEventSchema,
33
+ evolve: Spec.evolve,
34
+ commandSchema: Spec.commandSchema,
35
+ eventSchema: Spec.eventSchema,
36
+ errorSchema: Spec.errorSchema,
37
+ decide: Spec.decide
38
+ };
39
+ }
40
+
41
+ function Make(M) {
42
+ let Source = M.Source;
43
+ let Target = M.Target;
44
+ S.enableJson();
45
+ let sliceName = Source.name + `→` + Target.name;
46
+ let test = (name, timeout, body) => JestBind$ReventlessGwt.testPromise(sliceName, name, timeout, body);
47
+ let queryEngine_scan = (param, param$1, param$2) => Promise.resolve([]);
48
+ let queryEngine_query = (param, param$1, param$2, param$3, param$4, param$5, param$6) => Promise.resolve([]);
49
+ let queryEngine = {
50
+ scan: queryEngine_scan,
51
+ query: queryEngine_query
52
+ };
53
+ let sourceErrors = {
54
+ contents: []
55
+ };
56
+ let targetErrors = {
57
+ contents: []
58
+ };
59
+ let execSource = (history, cmd) => {
60
+ sourceErrors.contents = [];
61
+ let state = Stdlib_Array.reduce(history, Source.initialState, Source.evolve);
62
+ let events = Source.decide(state, cmd);
63
+ if (events.TAG === "Ok") {
64
+ return events._0;
65
+ }
66
+ sourceErrors.contents = [events._0];
67
+ return [];
68
+ };
69
+ let execTarget = (history, cmd) => {
70
+ let state = Stdlib_Array.reduce(history, Target.initialState, Target.evolve);
71
+ let events = Target.decide(state, cmd);
72
+ if (events.TAG === "Ok") {
73
+ return events._0;
74
+ }
75
+ targetErrors.contents = [events._0];
76
+ return [];
77
+ };
78
+ let givenSourceEvents = sourceHistory => [
79
+ sourceHistory,
80
+ []
81
+ ];
82
+ let andTargetEvents = (param, targetHistory) => [
83
+ param[0],
84
+ targetHistory
85
+ ];
86
+ let whenSourceCmd = async (param, sourceId, cmd) => {
87
+ targetErrors.contents = [];
88
+ let sourceEvents = execSource(param[0], cmd);
89
+ let targetActions = sourceEvents.map(sourceEvent => M.map(Source.Id.makeFromString(sourceId), sourceEvent, queryEngine)).flat();
90
+ let targetHistories = Object.fromEntries(param[1]);
91
+ let commands = (await Promise.all(targetActions.map(async action => {
92
+ switch (action.TAG) {
93
+ case "Publish" :
94
+ case "PublishDelayed" :
95
+ return [[
96
+ action._0,
97
+ action._1
98
+ ]];
99
+ case "PublishAsync" :
100
+ return await action._0;
101
+ default:
102
+ return [];
103
+ }
104
+ }))).flat();
105
+ return Stdlib_Array.reduce(commands, {}, (targetEvents, param) => {
106
+ let idStr = Target.Id.toString(param[0]);
107
+ let hist = Stdlib_Option.getOr(targetHistories[idStr], []);
108
+ let newEvents = execTarget(hist, param[1]);
109
+ targetEvents[idStr] = Stdlib_Option.getOr(targetEvents[idStr], []).concat(newEvents);
110
+ return targetEvents;
111
+ });
112
+ };
113
+ let encTargetEvent = e => Message$ReventlessCore.encode(e, Target.eventSchema);
114
+ let encDict = d => Object.entries(d).toSorted((param, param$1) => Primitive_string.compare(param[0], param$1[0])).map(param => {
115
+ let obj = {};
116
+ obj["id"] = param[0];
117
+ obj["events"] = param[1].map(encTargetEvent);
118
+ return obj;
119
+ });
120
+ let encExpected = pairs => pairs.toSorted((param, param$1) => Primitive_string.compare(param[0], param$1[0])).map(param => {
121
+ let obj = {};
122
+ obj["id"] = param[0];
123
+ obj["events"] = param[1].map(encTargetEvent);
124
+ return obj;
125
+ });
126
+ let unexpectedSideError = actualDict => {
127
+ let actualEvents = encDict(actualDict);
128
+ let srcErr = sourceErrors.contents[0];
129
+ if (srcErr !== undefined) {
130
+ return Outcome$ReventlessGwt.fail({
131
+ TAG: "ErrorMismatch",
132
+ expected: null,
133
+ actual: Message$ReventlessCore.encode(Primitive_option.valFromOption(srcErr), Source.errorSchema),
134
+ actualEvents: actualEvents
135
+ });
136
+ }
137
+ let tgtErr = targetErrors.contents[0];
138
+ if (tgtErr !== undefined) {
139
+ return Outcome$ReventlessGwt.fail({
140
+ TAG: "ErrorMismatch",
141
+ expected: null,
142
+ actual: Message$ReventlessCore.encode(Primitive_option.valFromOption(tgtErr), Target.errorSchema),
143
+ actualEvents: actualEvents
144
+ });
145
+ } else {
146
+ return Outcome$ReventlessGwt.pass;
147
+ }
148
+ };
149
+ let dictPairsEq = (a, b) => {
150
+ let ka = Object.keys(a).toSorted(Primitive_string.compare);
151
+ let kb = Object.keys(b).toSorted(Primitive_string.compare);
152
+ if (Primitive_object.equal(ka, kb)) {
153
+ return ka.every(k => {
154
+ let av = Stdlib_Option.getOr(a[k], []);
155
+ let bv = Stdlib_Option.getOr(b[k], []);
156
+ return Primitive_object.equal(av, bv);
157
+ });
158
+ } else {
159
+ return false;
160
+ }
161
+ };
162
+ let thenTargetEvents = async (targetEvents, expectedTargetEvents) => {
163
+ let actualDict = await targetEvents;
164
+ let out = unexpectedSideError(actualDict);
165
+ if (out.TAG !== "Ok") {
166
+ return out;
167
+ }
168
+ let expectedDict = Object.fromEntries(expectedTargetEvents);
169
+ if (dictPairsEq(actualDict, expectedDict)) {
170
+ return Outcome$ReventlessGwt.pass;
171
+ } else {
172
+ return Outcome$ReventlessGwt.fail({
173
+ TAG: "EventsMismatch",
174
+ expected: encExpected(expectedTargetEvents),
175
+ actual: encDict(actualDict)
176
+ });
177
+ }
178
+ };
179
+ let thenTargetEvent = async (targetEvents, id, expectedTargetEvent) => {
180
+ let actualDict = await targetEvents;
181
+ let out = unexpectedSideError(actualDict);
182
+ if (out.TAG !== "Ok") {
183
+ return out;
184
+ }
185
+ let pairs = Object.entries(actualDict);
186
+ let ok = false;
187
+ if (pairs.length === 1) {
188
+ let match = pairs[0];
189
+ let tmp;
190
+ if (match !== undefined) {
191
+ let match$1 = match[1];
192
+ if (match$1.length !== 1) {
193
+ tmp = false;
194
+ } else {
195
+ let actualEvent = match$1[0];
196
+ tmp = match[0] === id && Primitive_object.equal(actualEvent, expectedTargetEvent);
197
+ }
198
+ } else {
199
+ tmp = false;
200
+ }
201
+ ok = tmp;
202
+ }
203
+ if (ok) {
204
+ return Outcome$ReventlessGwt.pass;
205
+ } else {
206
+ return Outcome$ReventlessGwt.fail({
207
+ TAG: "EventsMismatch",
208
+ expected: encExpected([[
209
+ id,
210
+ [expectedTargetEvent]
211
+ ]]),
212
+ actual: encDict(actualDict)
213
+ });
214
+ }
215
+ };
216
+ let thenNoTargetEvent = targetEvents => thenTargetEvents(targetEvents, []);
217
+ let thenSourceError = async (targetEvents, expectedError) => {
218
+ let actualDict = await targetEvents;
219
+ let actualEvents = encDict(actualDict);
220
+ let expectedJson = Message$ReventlessCore.encode(expectedError, Source.errorSchema);
221
+ let actual = sourceErrors.contents[0];
222
+ if (actual === undefined) {
223
+ return Outcome$ReventlessGwt.fail({
224
+ TAG: "ErrorMismatch",
225
+ expected: expectedJson,
226
+ actual: undefined,
227
+ actualEvents: actualEvents
228
+ });
229
+ }
230
+ let actual$1 = Primitive_option.valFromOption(actual);
231
+ if (Primitive_object.notequal(actual$1, expectedError)) {
232
+ return Outcome$ReventlessGwt.fail({
233
+ TAG: "ErrorMismatch",
234
+ expected: expectedJson,
235
+ actual: Message$ReventlessCore.encode(actual$1, Source.errorSchema),
236
+ actualEvents: actualEvents
237
+ });
238
+ } else {
239
+ return Outcome$ReventlessGwt.pass;
240
+ }
241
+ };
242
+ let thenTargetError = async (targetEvents, expectedError) => {
243
+ let actualDict = await targetEvents;
244
+ let actualEvents = encDict(actualDict);
245
+ let expectedJson = Message$ReventlessCore.encode(expectedError, Target.errorSchema);
246
+ let actual = targetErrors.contents[0];
247
+ if (actual === undefined) {
248
+ return Outcome$ReventlessGwt.fail({
249
+ TAG: "ErrorMismatch",
250
+ expected: expectedJson,
251
+ actual: undefined,
252
+ actualEvents: actualEvents
253
+ });
254
+ }
255
+ let actual$1 = Primitive_option.valFromOption(actual);
256
+ if (Primitive_object.notequal(actual$1, expectedError)) {
257
+ return Outcome$ReventlessGwt.fail({
258
+ TAG: "ErrorMismatch",
259
+ expected: expectedJson,
260
+ actual: Message$ReventlessCore.encode(actual$1, Target.errorSchema),
261
+ actualEvents: actualEvents
262
+ });
263
+ } else {
264
+ return Outcome$ReventlessGwt.pass;
265
+ }
266
+ };
267
+ let thenTargetEventsWithError = async (targetEvents, expectedTargetEvents, expectedError) => {
268
+ let actualDict = await targetEvents;
269
+ let actualEvents = encDict(actualDict);
270
+ let expectedErrorJson = Message$ReventlessCore.encode(expectedError, Target.errorSchema);
271
+ let actual = targetErrors.contents[0];
272
+ if (actual === undefined) {
273
+ return Outcome$ReventlessGwt.fail({
274
+ TAG: "ErrorMismatch",
275
+ expected: expectedErrorJson,
276
+ actual: undefined,
277
+ actualEvents: actualEvents
278
+ });
279
+ }
280
+ let actual$1 = Primitive_option.valFromOption(actual);
281
+ if (Primitive_object.notequal(actual$1, expectedError)) {
282
+ return Outcome$ReventlessGwt.fail({
283
+ TAG: "ErrorMismatch",
284
+ expected: expectedErrorJson,
285
+ actual: Message$ReventlessCore.encode(actual$1, Target.errorSchema),
286
+ actualEvents: actualEvents
287
+ });
288
+ }
289
+ let expectedDict = Object.fromEntries(expectedTargetEvents);
290
+ if (dictPairsEq(actualDict, expectedDict)) {
291
+ return Outcome$ReventlessGwt.pass;
292
+ } else {
293
+ return Outcome$ReventlessGwt.fail({
294
+ TAG: "EventsMismatch",
295
+ expected: encExpected(expectedTargetEvents),
296
+ actual: actualEvents
297
+ });
298
+ }
299
+ };
300
+ return {
301
+ Source: Source,
302
+ Target: Target,
303
+ describe: JestBind$ReventlessGwt.describe,
304
+ test: test,
305
+ givenSourceEvents: givenSourceEvents,
306
+ andTargetEvents: andTargetEvents,
307
+ whenSourceCmd: whenSourceCmd,
308
+ thenTargetEvents: thenTargetEvents,
309
+ thenTargetEvent: thenTargetEvent,
310
+ thenNoTargetEvent: thenNoTargetEvent,
311
+ thenSourceError: thenSourceError,
312
+ thenTargetError: thenTargetError,
313
+ thenTargetEventsWithError: thenTargetEventsWithError
314
+ };
315
+ }
316
+
317
+ export {
318
+ FromBehavior,
319
+ FromStateChangeSlice,
320
+ Make,
321
+ }
322
+ /* S Not a pure module */
@@ -0,0 +1,72 @@
1
+ // Single source for rendering an `Outcome.mismatch`'s expected/actual/extras
2
+ // into RenderRescript strings. The Human and TAP formatters previously each held
3
+ // a full 10-arm switch over the mismatch that computed *identical* rendered
4
+ // values (`RenderRescript.render*`, the `Error()`/`Ok()` wrapping, the Todo
5
+ // `(id, value)` pairs) and differed only in framing — aligned `label: value`
6
+ // lines vs YAML `key: "escaped"` lines. This normalizes the value-rendering once;
7
+ // each formatter interprets the `field` list with its own framing.
8
+ //
9
+ // NOT used by JUnit (renders via the older JSON-based `Outcome.format`) nor
10
+ // FormatterJson/VsCode (they consume the raw JSON values to build a structured
11
+ // `{type, payload, rendered}` + `fieldDiff` payload).
12
+
13
+ // One rendered piece of a mismatch. The constructor carries the *already
14
+ // rendered* string (unescaped — Human uses it raw, TAP yaml-escapes it), except
15
+ // the structural markers `ExpectedNoEvents` (Human prints a literal line; TAP
16
+ // omits it) and `Stack` (Human appends it raw; TAP labels it as a yaml field).
17
+ type field =
18
+ | Expected(string)
19
+ | Actual(string)
20
+ | Key(string)
21
+ | ExpectedNoEvents
22
+ | Error(string)
23
+ | Stack(string)
24
+
25
+ type normalized = {
26
+ kind: string,
27
+ fields: array<field>,
28
+ }
29
+
30
+ let render = RenderRescript.render
31
+ let renderMany = RenderRescript.renderMany
32
+ let renderOption = RenderRescript.renderOption
33
+
34
+ let normalize = (m: Outcome.mismatch): normalized => {
35
+ let fields = switch m {
36
+ | EventsMismatch({expected, actual}) => [Expected(renderMany(expected)), Actual(renderMany(actual))]
37
+ | ErrorMismatch({expected, actual, actualEvents}) => [
38
+ Expected(`Error(${render(expected)})`),
39
+ Actual(
40
+ switch actual {
41
+ | Some(v) => `Error(${render(v)})`
42
+ | None => `Ok(${renderMany(actualEvents)})`
43
+ },
44
+ ),
45
+ ]
46
+ | StateMismatch({key, expected, actual}) => [
47
+ Key(key),
48
+ Expected(renderOption(expected)),
49
+ Actual(renderOption(actual)),
50
+ ]
51
+ | NoEventExpected({actual}) => [ExpectedNoEvents, Actual(renderMany(actual))]
52
+ | TodoMismatch({expected, actual}) =>
53
+ let fmt = (arr: array<(string, JSON.t)>) =>
54
+ "[" ++ arr->Array.map(((id, v)) => `(${id}, ${render(v)})`)->Array.join(", ") ++ "]"
55
+ [Expected(fmt(expected)), Actual(fmt(actual))]
56
+ | AppendConditionMismatch({expected, actual}) => [
57
+ Expected(render(expected)),
58
+ Actual(render(actual)),
59
+ ]
60
+ | TranslateError({expected, actual}) => [
61
+ Expected(expected),
62
+ Actual(actual->Option.getOr("(none)")),
63
+ ]
64
+ | QueryRowsMismatch({expected, actual}) => [Expected(renderMany(expected)), Actual(renderMany(actual))]
65
+ | PublishedActionsMismatch({expected, actual}) => [
66
+ Expected(renderMany(expected)),
67
+ Actual(renderMany(actual)),
68
+ ]
69
+ | Throw({error, stack}) => [Error(error), Stack(stack)]
70
+ }
71
+ {kind: Outcome.kindName(m), fields}
72
+ }
@@ -0,0 +1,127 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
4
+ import * as Outcome$ReventlessGwt from "./Outcome.res.mjs";
5
+ import * as RenderRescript$ReventlessGwt from "./RenderRescript.res.mjs";
6
+
7
+ function normalize(m) {
8
+ let fields;
9
+ switch (m.TAG) {
10
+ case "ErrorMismatch" :
11
+ let actual = m.actual;
12
+ fields = [
13
+ {
14
+ TAG: "Expected",
15
+ _0: `Error(` + RenderRescript$ReventlessGwt.render(undefined, m.expected) + `)`
16
+ },
17
+ {
18
+ TAG: "Actual",
19
+ _0: actual !== undefined ? `Error(` + RenderRescript$ReventlessGwt.render(undefined, actual) + `)` : `Ok(` + RenderRescript$ReventlessGwt.renderMany(m.actualEvents) + `)`
20
+ }
21
+ ];
22
+ break;
23
+ case "StateMismatch" :
24
+ fields = [
25
+ {
26
+ TAG: "Key",
27
+ _0: m.key
28
+ },
29
+ {
30
+ TAG: "Expected",
31
+ _0: RenderRescript$ReventlessGwt.renderOption(m.expected)
32
+ },
33
+ {
34
+ TAG: "Actual",
35
+ _0: RenderRescript$ReventlessGwt.renderOption(m.actual)
36
+ }
37
+ ];
38
+ break;
39
+ case "NoEventExpected" :
40
+ fields = [
41
+ "ExpectedNoEvents",
42
+ {
43
+ TAG: "Actual",
44
+ _0: RenderRescript$ReventlessGwt.renderMany(m.actual)
45
+ }
46
+ ];
47
+ break;
48
+ case "TodoMismatch" :
49
+ let fmt = arr => "[" + arr.map(param => `(` + param[0] + `, ` + RenderRescript$ReventlessGwt.render(undefined, param[1]) + `)`).join(", ") + "]";
50
+ fields = [
51
+ {
52
+ TAG: "Expected",
53
+ _0: fmt(m.expected)
54
+ },
55
+ {
56
+ TAG: "Actual",
57
+ _0: fmt(m.actual)
58
+ }
59
+ ];
60
+ break;
61
+ case "AppendConditionMismatch" :
62
+ fields = [
63
+ {
64
+ TAG: "Expected",
65
+ _0: RenderRescript$ReventlessGwt.render(undefined, m.expected)
66
+ },
67
+ {
68
+ TAG: "Actual",
69
+ _0: RenderRescript$ReventlessGwt.render(undefined, m.actual)
70
+ }
71
+ ];
72
+ break;
73
+ case "TranslateError" :
74
+ fields = [
75
+ {
76
+ TAG: "Expected",
77
+ _0: m.expected
78
+ },
79
+ {
80
+ TAG: "Actual",
81
+ _0: Stdlib_Option.getOr(m.actual, "(none)")
82
+ }
83
+ ];
84
+ break;
85
+ case "Throw" :
86
+ fields = [
87
+ {
88
+ TAG: "Error",
89
+ _0: m.error
90
+ },
91
+ {
92
+ TAG: "Stack",
93
+ _0: m.stack
94
+ }
95
+ ];
96
+ break;
97
+ default:
98
+ fields = [
99
+ {
100
+ TAG: "Expected",
101
+ _0: RenderRescript$ReventlessGwt.renderMany(m.expected)
102
+ },
103
+ {
104
+ TAG: "Actual",
105
+ _0: RenderRescript$ReventlessGwt.renderMany(m.actual)
106
+ }
107
+ ];
108
+ }
109
+ return {
110
+ kind: Outcome$ReventlessGwt.kindName(m),
111
+ fields: fields
112
+ };
113
+ }
114
+
115
+ let render = RenderRescript$ReventlessGwt.render;
116
+
117
+ let renderMany = RenderRescript$ReventlessGwt.renderMany;
118
+
119
+ let renderOption = RenderRescript$ReventlessGwt.renderOption;
120
+
121
+ export {
122
+ render,
123
+ renderMany,
124
+ renderOption,
125
+ normalize,
126
+ }
127
+ /* No side effect */