@reventlessdev/reventless-gwt 1.0.0-alpha.248 → 1.0.0-alpha.250
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +1 -1
- package/package.json +8 -8
- package/src/.gwtignore +1 -1
- package/src/{Behavior_GWT.res → Decision_GWT.res} +25 -25
- package/src/{Behavior_GWT.res.mjs → Decision_GWT.res.mjs} +10 -10
- package/src/Delegate_GWT.res +1 -1
- package/src/EventMapping_GWT.res +7 -7
- package/src/EventMapping_GWT.res.mjs +3 -3
- package/src/Flow_GWT.res +14 -14
- package/src/Flow_GWT.res.mjs +6 -6
- package/src/Hint.res +1 -1
- package/src/Mapping_GWT.res +8 -8
- package/src/Mapping_GWT.res.mjs +6 -6
- package/src/Outcome.res +1 -1
- package/src/Projection_GWT.res +3 -3
- package/src/Projection_GWT.res.mjs +1 -1
- package/src/Query_GWT.res +1 -1
- package/src/RunnerHook.res +1 -1
- package/src/ScenarioRecorder.res +2 -2
- package/src/ScenarioRecorder.res.mjs +1 -1
- package/src/StateChange/ExternalAddCategorySlice.res +1 -1
- package/src/StateChange/WithFixtures.res +1 -1
- package/src/StateChange/WithManualOpen.res +1 -1
- package/tests/CallerTest.res +7 -7
- package/tests/CallerTest.res.mjs +8 -8
- package/tests/FlowAggregateGwtTest.res +6 -6
- package/tests/FlowAggregateGwtTest.res.mjs +6 -6
- package/tests/FlowCrossPluginGwtTest.res +8 -8
- package/tests/FlowCrossPluginGwtTest.res.mjs +8 -8
- package/tests/FlowGwtTest.res +5 -5
- package/tests/FlowGwtTest.res.mjs +6 -6
- package/tests/HintTest.res +3 -3
- package/tests/HintTest.res.mjs +3 -3
- package/tests/LocalHostIntegration.res +3 -3
- package/tests/MappingGwtTest.res +5 -5
- package/tests/MappingGwtTest.res.mjs +6 -6
- package/tests/QueryGwtTest.res +1 -1
- package/tests/QueryGwtTest.res.mjs +2 -2
- package/tests/ScenarioRecorderTest.res +1 -1
- package/tests/StateChange/ExternalAddCategorySlice_GWT.res +3 -3
- package/tests/StateChange/ExternalAddCategorySlice_GWT.res.mjs +5 -5
- package/tests/StateChange/WithFixtures_GWT.res.mjs +5 -5
- package/tests/StateChange/WithManualOpen_GWT.res.mjs +5 -5
- package/tests/StateChangeSliceAuthorizeGwtTest.res +10 -10
- package/tests/StateChangeSliceAuthorizeGwtTest.res.mjs +14 -14
- package/tests/StateChangeSliceGwtTest.res +9 -9
- package/tests/StateChangeSliceGwtTest.res.mjs +12 -12
- package/tests/StateViewSliceGwtTest.res +1 -1
- package/tests/StateViewSliceGwtTest.res.mjs +2 -2
- /package/src/StateChange/{ExternalAddCategorySlice_Behavior.res → ExternalAddCategorySlice_Decision.res} +0 -0
- /package/src/StateChange/{ExternalAddCategorySlice_Behavior.res.mjs → ExternalAddCategorySlice_Decision.res.mjs} +0 -0
- /package/src/StateChange/{WithFixtures_Behavior.res → WithFixtures_Decision.res} +0 -0
- /package/src/StateChange/{WithFixtures_Behavior.res.mjs → WithFixtures_Decision.res.mjs} +0 -0
- /package/src/StateChange/{WithManualOpen_Behavior.res → WithManualOpen_Decision.res} +0 -0
- /package/src/StateChange/{WithManualOpen_Behavior.res.mjs → WithManualOpen_Decision.res.mjs} +0 -0
|
@@ -242,7 +242,7 @@ let subIdConfig = {
|
|
|
242
242
|
let OrdersView = {
|
|
243
243
|
name: name$1,
|
|
244
244
|
moduleUrl: moduleUrl$1,
|
|
245
|
-
|
|
245
|
+
Id: undefined,
|
|
246
246
|
stateSchema: stateSchema$1,
|
|
247
247
|
consumedEventSchema: consumedEventSchema,
|
|
248
248
|
project: project,
|
|
@@ -256,7 +256,7 @@ let OrdersQuery = Query_GWT$ReventlessGwt.Make(Query_GWT$ReventlessGwt.FromState
|
|
|
256
256
|
name: name$1,
|
|
257
257
|
moduleUrl: moduleUrl$1,
|
|
258
258
|
stateSchema: stateSchema$1,
|
|
259
|
-
|
|
259
|
+
Id: {
|
|
260
260
|
schema: Id$Reventless.StringPure.schema,
|
|
261
261
|
make: prim => prim,
|
|
262
262
|
makeFromString: prim => prim,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
open JestGlobals
|
|
2
2
|
|
|
3
|
-
// `ScenarioRecorder` writes what a
|
|
3
|
+
// `ScenarioRecorder` writes what a decision test runs as a sidecar `check-lifecycle` reads, for
|
|
4
4
|
// a suite whose source names nothing (one written against a binding). Each case records into a
|
|
5
5
|
// file of its own under the OS temp folder, named by `setFile` as an external runner would.
|
|
6
6
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// External-Spec verification test for @@reventless.gwt.
|
|
2
2
|
//
|
|
3
3
|
// Zero payload, no local module, no alias. The PPX resolves:
|
|
4
|
-
// - Kind from the folder segment "StateChange" ->
|
|
4
|
+
// - Kind from the folder segment "StateChange" -> Decision
|
|
5
5
|
// - Spec from the filename stem (strip "_GWT") -> ExternalAddCategorySlice
|
|
6
|
-
// - Impl derived as
|
|
6
|
+
// - Impl derived as ExternalAddCategorySlice_Decision
|
|
7
7
|
// - open ExternalAddCategorySlice +
|
|
8
|
-
// include
|
|
8
|
+
// include Decision_GWT.Make(ExternalAddCategorySlice, ExternalAddCategorySlice_Decision)
|
|
9
9
|
//
|
|
10
10
|
// Mirrors the canonical consumer pattern documented in
|
|
11
11
|
// docs/guides/given-when-then.md § 4.10.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as
|
|
3
|
+
import * as Decision_GWT$ReventlessGwt from "../../src/Decision_GWT.res.mjs";
|
|
4
4
|
import * as ExternalAddCategorySlice$ReventlessGwt from "../../src/StateChange/ExternalAddCategorySlice.res.mjs";
|
|
5
|
-
import * as
|
|
5
|
+
import * as ExternalAddCategorySlice_Decision$ReventlessGwt from "../../src/StateChange/ExternalAddCategorySlice_Decision.res.mjs";
|
|
6
6
|
|
|
7
|
-
let include =
|
|
7
|
+
let include = Decision_GWT$ReventlessGwt.Make(ExternalAddCategorySlice$ReventlessGwt)(ExternalAddCategorySlice_Decision$ReventlessGwt);
|
|
8
8
|
|
|
9
9
|
let describe = include.describe;
|
|
10
10
|
|
|
@@ -51,7 +51,7 @@ let thenEventWithError = include.thenEventWithError;
|
|
|
51
51
|
|
|
52
52
|
let thenEventsWithError = include.thenEventsWithError;
|
|
53
53
|
|
|
54
|
-
let
|
|
54
|
+
let thenForbidden = include.thenForbidden;
|
|
55
55
|
|
|
56
56
|
let thenAppendsConditionedOn = include.thenAppendsConditionedOn;
|
|
57
57
|
|
|
@@ -72,7 +72,7 @@ export {
|
|
|
72
72
|
thenEventWithError,
|
|
73
73
|
thenEventsWithError,
|
|
74
74
|
thenError,
|
|
75
|
-
|
|
75
|
+
thenForbidden,
|
|
76
76
|
thenAppendsConditionedOn,
|
|
77
77
|
thenAppendsConditionedOnExactly,
|
|
78
78
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as
|
|
3
|
+
import * as Decision_GWT$ReventlessGwt from "../../src/Decision_GWT.res.mjs";
|
|
4
4
|
import * as WithFixtures$ReventlessGwt from "../../src/StateChange/WithFixtures.res.mjs";
|
|
5
|
-
import * as
|
|
5
|
+
import * as WithFixtures_Decision$ReventlessGwt from "../../src/StateChange/WithFixtures_Decision.res.mjs";
|
|
6
6
|
import * as WithFixtures_Fixtures$ReventlessGwt from "./WithFixtures_Fixtures.res.mjs";
|
|
7
7
|
|
|
8
|
-
let include =
|
|
8
|
+
let include = Decision_GWT$ReventlessGwt.Make(WithFixtures$ReventlessGwt)(WithFixtures_Decision$ReventlessGwt);
|
|
9
9
|
|
|
10
10
|
let describe = include.describe;
|
|
11
11
|
|
|
@@ -37,7 +37,7 @@ let thenEventsWithError = include.thenEventsWithError;
|
|
|
37
37
|
|
|
38
38
|
let thenError = include.thenError;
|
|
39
39
|
|
|
40
|
-
let
|
|
40
|
+
let thenForbidden = include.thenForbidden;
|
|
41
41
|
|
|
42
42
|
let thenAppendsConditionedOn = include.thenAppendsConditionedOn;
|
|
43
43
|
|
|
@@ -58,7 +58,7 @@ export {
|
|
|
58
58
|
thenEventWithError,
|
|
59
59
|
thenEventsWithError,
|
|
60
60
|
thenError,
|
|
61
|
-
|
|
61
|
+
thenForbidden,
|
|
62
62
|
thenAppendsConditionedOn,
|
|
63
63
|
thenAppendsConditionedOnExactly,
|
|
64
64
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as
|
|
3
|
+
import * as Decision_GWT$ReventlessGwt from "../../src/Decision_GWT.res.mjs";
|
|
4
4
|
import * as WithManualOpen$ReventlessGwt from "../../src/StateChange/WithManualOpen.res.mjs";
|
|
5
|
-
import * as
|
|
5
|
+
import * as WithManualOpen_Decision$ReventlessGwt from "../../src/StateChange/WithManualOpen_Decision.res.mjs";
|
|
6
6
|
import * as WithManualOpen_Fixtures$ReventlessGwt from "./WithManualOpen_Fixtures.res.mjs";
|
|
7
7
|
|
|
8
|
-
let include =
|
|
8
|
+
let include = Decision_GWT$ReventlessGwt.Make(WithManualOpen$ReventlessGwt)(WithManualOpen_Decision$ReventlessGwt);
|
|
9
9
|
|
|
10
10
|
let describe = include.describe;
|
|
11
11
|
|
|
@@ -37,7 +37,7 @@ let thenEventsWithError = include.thenEventsWithError;
|
|
|
37
37
|
|
|
38
38
|
let thenError = include.thenError;
|
|
39
39
|
|
|
40
|
-
let
|
|
40
|
+
let thenForbidden = include.thenForbidden;
|
|
41
41
|
|
|
42
42
|
let thenAppendsConditionedOn = include.thenAppendsConditionedOn;
|
|
43
43
|
|
|
@@ -58,7 +58,7 @@ export {
|
|
|
58
58
|
thenEventWithError,
|
|
59
59
|
thenEventsWithError,
|
|
60
60
|
thenError,
|
|
61
|
-
|
|
61
|
+
thenForbidden,
|
|
62
62
|
thenAppendsConditionedOn,
|
|
63
63
|
thenAppendsConditionedOnExactly,
|
|
64
64
|
}
|
|
@@ -8,7 +8,7 @@ module ShelveSlice = {
|
|
|
8
8
|
let name = "Shelve"
|
|
9
9
|
|
|
10
10
|
// Inside the spec, so the zero-argument form still finds the spec and its
|
|
11
|
-
//
|
|
11
|
+
// decision first; the rule's `Roles` resolves by ordinary scoping either way.
|
|
12
12
|
module Roles = {
|
|
13
13
|
type t =
|
|
14
14
|
| Admin
|
|
@@ -35,7 +35,7 @@ module ShelveSlice = {
|
|
|
35
35
|
type event = Done({shelfId: @s.matches(Reventless.DcbTag.string) string})
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
module
|
|
38
|
+
module ShelveSliceDecision = {
|
|
39
39
|
module Spec = ShelveSlice
|
|
40
40
|
open ShelveSlice
|
|
41
41
|
|
|
@@ -67,23 +67,23 @@ describe("a command's rule, checked against the caller's roles", () => {
|
|
|
67
67
|
)
|
|
68
68
|
|
|
69
69
|
test("refused for a signed-in caller holding none of them", () =>
|
|
70
|
-
givenEvents([])->asCaller(Caller.owner("c1"))->whenCmd(Shelve({shelfId: s1}))->
|
|
70
|
+
givenEvents([])->asCaller(Caller.owner("c1"))->whenCmd(Shelve({shelfId: s1}))->thenForbidden
|
|
71
71
|
)
|
|
72
72
|
|
|
73
73
|
test("refused for an anonymous caller", () =>
|
|
74
|
-
givenEvents([])->asCaller(Caller.anonymous)->whenCmd(Shelve({shelfId: s1}))->
|
|
74
|
+
givenEvents([])->asCaller(Caller.anonymous)->whenCmd(Shelve({shelfId: s1}))->thenForbidden
|
|
75
75
|
)
|
|
76
76
|
|
|
77
77
|
// Elevation lifts ownership rules, not rules about who may issue a command.
|
|
78
78
|
test("refused for an operator, who holds no role", () =>
|
|
79
|
-
givenEvents([])->asCaller(Caller.operator)->whenCmd(Shelve({shelfId: s1}))->
|
|
79
|
+
givenEvents([])->asCaller(Caller.operator)->whenCmd(Shelve({shelfId: s1}))->thenForbidden
|
|
80
80
|
)
|
|
81
81
|
|
|
82
82
|
test("DenyAll refuses every caller, Admin included", () =>
|
|
83
83
|
givenEvents([])
|
|
84
84
|
->asCaller(Caller.inRoles([Admin]))
|
|
85
85
|
->whenCmd(Purge({shelfId: s1}))
|
|
86
|
-
->
|
|
86
|
+
->thenForbidden
|
|
87
87
|
)
|
|
88
88
|
|
|
89
89
|
test("AllowAnonymous accepts an anonymous caller", () =>
|
|
@@ -94,7 +94,7 @@ describe("a command's rule, checked against the caller's roles", () => {
|
|
|
94
94
|
)
|
|
95
95
|
|
|
96
96
|
test("the default rule refuses an anonymous caller", () =>
|
|
97
|
-
givenEvents([])->asCaller(Caller.anonymous)->whenCmd(Browse({shelfId: s1}))->
|
|
97
|
+
givenEvents([])->asCaller(Caller.anonymous)->whenCmd(Browse({shelfId: s1}))->thenForbidden
|
|
98
98
|
)
|
|
99
99
|
|
|
100
100
|
test("a scenario without asCaller is checked against no rule", () =>
|
|
@@ -132,7 +132,7 @@ module ClaimSlice = {
|
|
|
132
132
|
type event = Done({shelfId: @s.matches(Reventless.DcbTag.string) string})
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
module Claim =
|
|
135
|
+
module Claim = Decision_GWT.Make(
|
|
136
136
|
ClaimSlice,
|
|
137
137
|
{
|
|
138
138
|
type state = unit
|
|
@@ -162,13 +162,13 @@ describe("the rule, then ownership", () => {
|
|
|
162
162
|
Claim.givenEvents(claimedByC1)
|
|
163
163
|
->Claim.asCaller(Claim.Caller.owner("c2", ~roles=[Merchandiser]))
|
|
164
164
|
->Claim.whenCmd(Shelve({shelfId: s1}))
|
|
165
|
-
->Claim.
|
|
165
|
+
->Claim.thenForbidden
|
|
166
166
|
)
|
|
167
167
|
|
|
168
168
|
Claim.test("owning a thing does not pass a rule the owner fails", () =>
|
|
169
169
|
Claim.givenEvents(claimedByC1)
|
|
170
170
|
->Claim.asCaller(Claim.Caller.owner("c1"))
|
|
171
171
|
->Claim.whenCmd(Shelve({shelfId: s1}))
|
|
172
|
-
->Claim.
|
|
172
|
+
->Claim.thenForbidden
|
|
173
173
|
)
|
|
174
174
|
})
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import * as Sury from "sury";
|
|
4
4
|
import * as Owner$Reventless from "@reventlessdev/reventless-spec/src/components/Owner.res.mjs";
|
|
5
5
|
import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
|
|
6
|
-
import * as
|
|
6
|
+
import * as Decision_GWT$ReventlessGwt from "../src/Decision_GWT.res.mjs";
|
|
7
7
|
|
|
8
8
|
let name = "Shelve";
|
|
9
9
|
|
|
@@ -92,14 +92,14 @@ function decide(_state, command) {
|
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
let
|
|
95
|
+
let ShelveSliceDecision = {
|
|
96
96
|
Spec: undefined,
|
|
97
97
|
initialState: undefined,
|
|
98
98
|
evolve: evolve,
|
|
99
99
|
decide: decide
|
|
100
100
|
};
|
|
101
101
|
|
|
102
|
-
let include =
|
|
102
|
+
let include = Decision_GWT$ReventlessGwt.Make({
|
|
103
103
|
name: name,
|
|
104
104
|
consumedEventSchema: consumedEventSchema,
|
|
105
105
|
commandSchema: commandSchema,
|
|
@@ -126,7 +126,7 @@ let whenCmd = include.whenCmd;
|
|
|
126
126
|
|
|
127
127
|
let thenEvent = include.thenEvent;
|
|
128
128
|
|
|
129
|
-
let
|
|
129
|
+
let thenForbidden = include.thenForbidden;
|
|
130
130
|
|
|
131
131
|
let s1 = "s1";
|
|
132
132
|
|
|
@@ -145,19 +145,19 @@ describe("a command's rule, checked against the caller's roles", () => {
|
|
|
145
145
|
TAG: "Done",
|
|
146
146
|
shelfId: s1
|
|
147
147
|
}));
|
|
148
|
-
test("refused for a signed-in caller holding none of them", () =>
|
|
148
|
+
test("refused for a signed-in caller holding none of them", () => thenForbidden(whenCmd(asCaller(givenEvents([]), Caller.owner("c1", undefined)), {
|
|
149
149
|
TAG: "Shelve",
|
|
150
150
|
shelfId: s1
|
|
151
151
|
})));
|
|
152
|
-
test("refused for an anonymous caller", () =>
|
|
152
|
+
test("refused for an anonymous caller", () => thenForbidden(whenCmd(asCaller(givenEvents([]), Caller.anonymous), {
|
|
153
153
|
TAG: "Shelve",
|
|
154
154
|
shelfId: s1
|
|
155
155
|
})));
|
|
156
|
-
test("refused for an operator, who holds no role", () =>
|
|
156
|
+
test("refused for an operator, who holds no role", () => thenForbidden(whenCmd(asCaller(givenEvents([]), Caller.operator), {
|
|
157
157
|
TAG: "Shelve",
|
|
158
158
|
shelfId: s1
|
|
159
159
|
})));
|
|
160
|
-
test("DenyAll refuses every caller, Admin included", () =>
|
|
160
|
+
test("DenyAll refuses every caller, Admin included", () => thenForbidden(whenCmd(asCaller(givenEvents([]), Caller.inRoles(["Admin"])), {
|
|
161
161
|
TAG: "Purge",
|
|
162
162
|
shelfId: s1
|
|
163
163
|
})));
|
|
@@ -168,7 +168,7 @@ describe("a command's rule, checked against the caller's roles", () => {
|
|
|
168
168
|
TAG: "Done",
|
|
169
169
|
shelfId: s1
|
|
170
170
|
}));
|
|
171
|
-
test("the default rule refuses an anonymous caller", () =>
|
|
171
|
+
test("the default rule refuses an anonymous caller", () => thenForbidden(whenCmd(asCaller(givenEvents([]), Caller.anonymous), {
|
|
172
172
|
TAG: "Browse",
|
|
173
173
|
shelfId: s1
|
|
174
174
|
})));
|
|
@@ -247,7 +247,7 @@ function decide$1(_state, command) {
|
|
|
247
247
|
};
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
let Claim =
|
|
250
|
+
let Claim = Decision_GWT$ReventlessGwt.Make({
|
|
251
251
|
name: name$1,
|
|
252
252
|
consumedEventSchema: consumedEventSchema$1,
|
|
253
253
|
commandSchema: commandSchema$1,
|
|
@@ -274,11 +274,11 @@ describe("the rule, then ownership", () => {
|
|
|
274
274
|
TAG: "Done",
|
|
275
275
|
shelfId: s1
|
|
276
276
|
}));
|
|
277
|
-
Claim.test("passing the rule does not let a caller act on someone else's thing", () => Claim.
|
|
277
|
+
Claim.test("passing the rule does not let a caller act on someone else's thing", () => Claim.thenForbidden(Claim.whenCmd(Claim.asCaller(Claim.givenEvents(claimedByC1), Claim.Caller.owner("c2", ["Merchandiser"])), {
|
|
278
278
|
TAG: "Shelve",
|
|
279
279
|
shelfId: s1
|
|
280
280
|
})));
|
|
281
|
-
Claim.test("owning a thing does not pass a rule the owner fails", () => Claim.
|
|
281
|
+
Claim.test("owning a thing does not pass a rule the owner fails", () => Claim.thenForbidden(Claim.whenCmd(Claim.asCaller(Claim.givenEvents(claimedByC1), Claim.Caller.owner("c1", undefined)), {
|
|
282
282
|
TAG: "Shelve",
|
|
283
283
|
shelfId: s1
|
|
284
284
|
})));
|
|
@@ -304,7 +304,7 @@ let thenAppendsConditionedOnExactly = include.thenAppendsConditionedOnExactly;
|
|
|
304
304
|
|
|
305
305
|
export {
|
|
306
306
|
ShelveSlice,
|
|
307
|
-
|
|
307
|
+
ShelveSliceDecision,
|
|
308
308
|
Spec,
|
|
309
309
|
describe,
|
|
310
310
|
todo,
|
|
@@ -319,7 +319,7 @@ export {
|
|
|
319
319
|
thenEventWithError,
|
|
320
320
|
thenEventsWithError,
|
|
321
321
|
thenError,
|
|
322
|
-
|
|
322
|
+
thenForbidden,
|
|
323
323
|
thenAppendsConditionedOn,
|
|
324
324
|
thenAppendsConditionedOnExactly,
|
|
325
325
|
s1,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
// Worked example for
|
|
1
|
+
// Worked example for Decision_GWT (slice flavor).
|
|
2
2
|
// Uses the canonical "AddCategory" DCB slice shape — payload-less consumed
|
|
3
3
|
// events, decide that appends `CategoryAdded` unless the category already
|
|
4
4
|
// exists. Command carries a `@s.matches(DcbTag.string)` annotated ID so the
|
|
5
5
|
// DCB optimistic-concurrency query resolves to a single-entity read.
|
|
6
6
|
//
|
|
7
|
-
// Plan 02 Phase 6: split-form Spec/
|
|
8
|
-
// folder kind from the test path's "StateChangeSlice" substring →
|
|
9
|
-
// DSL → emits [include
|
|
7
|
+
// Plan 02 Phase 6: split-form Spec/Decision; PPX inference resolves the
|
|
8
|
+
// folder kind from the test path's "StateChangeSlice" substring → Decision
|
|
9
|
+
// DSL → emits [include Decision_GWT.Make(Spec, Decision)].
|
|
10
10
|
|
|
11
11
|
@@reventless.gwt
|
|
12
12
|
|
|
@@ -30,7 +30,7 @@ module AddCategorySlice = {
|
|
|
30
30
|
CategoryAdded({categoryId: @s.matches(Reventless.DcbTag.string) string, name: string})
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
module
|
|
33
|
+
module AddCategorySliceDecision = {
|
|
34
34
|
module Spec = AddCategorySlice
|
|
35
35
|
open AddCategorySlice
|
|
36
36
|
|
|
@@ -107,7 +107,7 @@ module MissingTagSlice = {
|
|
|
107
107
|
type event = Done({id: string})
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
module
|
|
110
|
+
module MissingTagDecision = {
|
|
111
111
|
// Qualify references through [Spec] to avoid shadowing the file-scope
|
|
112
112
|
// [consumedEvent] / [command] / [event] / [error] brought in by the PPX-
|
|
113
113
|
// injected [open AddCategorySlice].
|
|
@@ -124,7 +124,7 @@ module MissingTagBehavior = {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
module MissingTagGwt =
|
|
127
|
+
module MissingTagGwt = Decision_GWT.Make(MissingTagSlice, MissingTagDecision)
|
|
128
128
|
|
|
129
129
|
MissingTagGwt.describe("MissingTag slice implicit check", () => {
|
|
130
130
|
MissingTagGwt.test(
|
|
@@ -192,7 +192,7 @@ module ShipOrderSlice = {
|
|
|
192
192
|
})
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
module
|
|
195
|
+
module ShipOrderDecision = {
|
|
196
196
|
module Spec = ShipOrderSlice
|
|
197
197
|
|
|
198
198
|
type state = {placed: bool, shipped: bool}
|
|
@@ -217,7 +217,7 @@ module ShipOrderBehavior = {
|
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
module ShipOrderGwt =
|
|
220
|
+
module ShipOrderGwt = Decision_GWT.Make(ShipOrderSlice, ShipOrderDecision)
|
|
221
221
|
|
|
222
222
|
ShipOrderGwt.describe("ShipOrder — a command reference no decision reads by", () => {
|
|
223
223
|
ShipOrderGwt.test("reads the order's history without the carrier", () =>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import * as Sury from "sury";
|
|
4
4
|
import * as DcbTag$Reventless from "@reventlessdev/reventless-spec/src/components/DcbTag.res.mjs";
|
|
5
5
|
import * as Outcome$ReventlessGwt from "../src/Outcome.res.mjs";
|
|
6
|
-
import * as
|
|
6
|
+
import * as Decision_GWT$ReventlessGwt from "../src/Decision_GWT.res.mjs";
|
|
7
7
|
|
|
8
8
|
let consumedEventSchema = Sury.union([
|
|
9
9
|
Sury.literal("CategoryAdded"),
|
|
@@ -83,14 +83,14 @@ function decide(state, command) {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
let
|
|
86
|
+
let AddCategorySliceDecision = {
|
|
87
87
|
Spec: undefined,
|
|
88
88
|
initialState: initialState,
|
|
89
89
|
evolve: evolve,
|
|
90
90
|
decide: decide
|
|
91
91
|
};
|
|
92
92
|
|
|
93
|
-
let include =
|
|
93
|
+
let include = Decision_GWT$ReventlessGwt.Make(AddCategorySlice)({
|
|
94
94
|
initialState: initialState,
|
|
95
95
|
evolve: evolve,
|
|
96
96
|
decide: decide
|
|
@@ -209,14 +209,14 @@ function decide$1(_state, cmd) {
|
|
|
209
209
|
};
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
let
|
|
212
|
+
let MissingTagDecision = {
|
|
213
213
|
Spec: undefined,
|
|
214
214
|
initialState: undefined,
|
|
215
215
|
evolve: evolve$1,
|
|
216
216
|
decide: decide$1
|
|
217
217
|
};
|
|
218
218
|
|
|
219
|
-
let MissingTagGwt =
|
|
219
|
+
let MissingTagGwt = Decision_GWT$ReventlessGwt.Make(MissingTagSlice)({
|
|
220
220
|
initialState: undefined,
|
|
221
221
|
evolve: evolve$1,
|
|
222
222
|
decide: decide$1
|
|
@@ -354,14 +354,14 @@ function decide$2(state, cmd) {
|
|
|
354
354
|
}
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
-
let
|
|
357
|
+
let ShipOrderDecision = {
|
|
358
358
|
Spec: undefined,
|
|
359
359
|
initialState: initialState$1,
|
|
360
360
|
evolve: evolve$2,
|
|
361
361
|
decide: decide$2
|
|
362
362
|
};
|
|
363
363
|
|
|
364
|
-
let ShipOrderGwt =
|
|
364
|
+
let ShipOrderGwt = Decision_GWT$ReventlessGwt.Make(ShipOrderSlice)({
|
|
365
365
|
initialState: initialState$1,
|
|
366
366
|
evolve: evolve$2,
|
|
367
367
|
decide: decide$2
|
|
@@ -417,11 +417,11 @@ let thenEventWithError = include.thenEventWithError;
|
|
|
417
417
|
|
|
418
418
|
let thenEventsWithError = include.thenEventsWithError;
|
|
419
419
|
|
|
420
|
-
let
|
|
420
|
+
let thenForbidden = include.thenForbidden;
|
|
421
421
|
|
|
422
422
|
export {
|
|
423
423
|
AddCategorySlice,
|
|
424
|
-
|
|
424
|
+
AddCategorySliceDecision,
|
|
425
425
|
Spec,
|
|
426
426
|
describe,
|
|
427
427
|
todo,
|
|
@@ -436,14 +436,14 @@ export {
|
|
|
436
436
|
thenEventWithError,
|
|
437
437
|
thenEventsWithError,
|
|
438
438
|
thenError,
|
|
439
|
-
|
|
439
|
+
thenForbidden,
|
|
440
440
|
thenAppendsConditionedOn,
|
|
441
441
|
thenAppendsConditionedOnExactly,
|
|
442
442
|
MissingTagSlice,
|
|
443
|
-
|
|
443
|
+
MissingTagDecision,
|
|
444
444
|
MissingTagGwt,
|
|
445
445
|
ShipOrderSlice,
|
|
446
|
-
|
|
446
|
+
ShipOrderDecision,
|
|
447
447
|
ShipOrderGwt,
|
|
448
448
|
}
|
|
449
449
|
/* consumedEventSchema Not a pure module */
|
|
@@ -30,7 +30,7 @@ let consumedEventSchema = Sury.union([
|
|
|
30
30
|
]);
|
|
31
31
|
|
|
32
32
|
let CategoriesView = {
|
|
33
|
-
|
|
33
|
+
Id: undefined,
|
|
34
34
|
name: name,
|
|
35
35
|
stateSchema: stateSchema,
|
|
36
36
|
consumedEventSchema: consumedEventSchema,
|
|
@@ -85,7 +85,7 @@ let CategoriesViewProjection = {
|
|
|
85
85
|
let include = Projection_GWT$ReventlessGwt.Make({
|
|
86
86
|
name: name,
|
|
87
87
|
stateSchema: stateSchema,
|
|
88
|
-
|
|
88
|
+
Id: {
|
|
89
89
|
schema: Id$Reventless.StringPure.schema,
|
|
90
90
|
make: prim => prim,
|
|
91
91
|
makeFromString: prim => prim,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/StateChange/{WithManualOpen_Behavior.res.mjs → WithManualOpen_Decision.res.mjs}
RENAMED
|
File without changes
|