eventmodeler 0.6.2 → 0.6.4
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/README.md +221 -91
- package/dist/index.js +2095 -74
- package/package.json +9 -4
package/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# eventmodeler
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Works with `.eventmodel` files created by the [Event Modeling App](https://www.eventmodeling.app).
|
|
3
|
+
Command line client for Event Modeler cloud models. Use it to inspect a model, place elements on the canvas, maintain fields and scenarios, and drive code generation loops from a terminal or agent.
|
|
6
4
|
|
|
7
5
|
## Installation
|
|
8
6
|
|
|
@@ -10,166 +8,298 @@ Works with `.eventmodel` files created by the [Event Modeling App](https://www.e
|
|
|
10
8
|
npm install -g eventmodeler
|
|
11
9
|
```
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Open Event Modeling app in browser
|
|
17
|
-
eventmodeler
|
|
11
|
+
Requires Node.js 18 or newer.
|
|
18
12
|
|
|
19
|
-
|
|
20
|
-
eventmodeler list slices
|
|
13
|
+
## Setup
|
|
21
14
|
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
```bash
|
|
16
|
+
# Authenticate in the browser
|
|
17
|
+
eventmodeler login
|
|
24
18
|
|
|
25
|
-
#
|
|
26
|
-
eventmodeler
|
|
19
|
+
# Create a cloud model, or use an existing model id from the app
|
|
20
|
+
eventmodeler create model "Ordering"
|
|
27
21
|
|
|
28
|
-
#
|
|
29
|
-
eventmodeler
|
|
22
|
+
# Link the current repo/directory to a model
|
|
23
|
+
eventmodeler init
|
|
30
24
|
```
|
|
31
25
|
|
|
32
|
-
|
|
26
|
+
`eventmodeler init` writes `.eventmodeler.json` in your project. Most commands read the model id from that file. You can also target an element directly with the global `--id <uuid>` option when a command accepts an optional name.
|
|
33
27
|
|
|
34
|
-
|
|
28
|
+
Useful auth commands:
|
|
35
29
|
|
|
36
30
|
```bash
|
|
37
|
-
eventmodeler
|
|
38
|
-
eventmodeler
|
|
39
|
-
eventmodeler list commands # List all commands
|
|
40
|
-
eventmodeler list chapters # List all chapters
|
|
41
|
-
eventmodeler list aggregates # List all aggregates
|
|
42
|
-
eventmodeler list actors # List all actors
|
|
31
|
+
eventmodeler whoami
|
|
32
|
+
eventmodeler logout
|
|
43
33
|
```
|
|
44
34
|
|
|
45
|
-
|
|
35
|
+
## Common Workflow
|
|
46
36
|
|
|
47
37
|
```bash
|
|
48
|
-
|
|
49
|
-
eventmodeler show
|
|
50
|
-
eventmodeler
|
|
51
|
-
eventmodeler show
|
|
52
|
-
eventmodeler
|
|
38
|
+
# Explore the model
|
|
39
|
+
eventmodeler show model
|
|
40
|
+
eventmodeler list slices
|
|
41
|
+
eventmodeler show slice "Place Order"
|
|
42
|
+
eventmodeler search order
|
|
43
|
+
|
|
44
|
+
# Build out the canvas
|
|
45
|
+
eventmodeler create place command PlaceOrder --x 120 --y 200
|
|
46
|
+
eventmodeler create place event OrderPlaced --x 120 --y 360
|
|
47
|
+
eventmodeler create flow --from PlaceOrder --to OrderPlaced
|
|
48
|
+
|
|
49
|
+
# Add fields
|
|
50
|
+
eventmodeler add field PlaceOrder '{"name":"orderId","type":"UUID"}'
|
|
51
|
+
eventmodeler add subfield PlaceOrder --field customer '{"name":"email","type":"String"}'
|
|
52
|
+
|
|
53
|
+
# Create a scenario atomically
|
|
54
|
+
eventmodeler create scenario --slice "Place Order" '{
|
|
55
|
+
"name": "happy path",
|
|
56
|
+
"when": [
|
|
57
|
+
{
|
|
58
|
+
"entryType": "command",
|
|
59
|
+
"elementName": "PlaceOrder",
|
|
60
|
+
"fieldValues": { "orderId": "uuid-1" }
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"then": [
|
|
64
|
+
{
|
|
65
|
+
"entryType": "event",
|
|
66
|
+
"elementName": "OrderPlaced",
|
|
67
|
+
"fieldValues": { "orderId": "uuid-1" }
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}'
|
|
53
71
|
```
|
|
54
72
|
|
|
55
|
-
|
|
73
|
+
## Read Commands
|
|
56
74
|
|
|
57
75
|
```bash
|
|
58
|
-
eventmodeler show
|
|
59
|
-
eventmodeler show
|
|
60
|
-
eventmodeler show
|
|
76
|
+
eventmodeler show model
|
|
77
|
+
eventmodeler show context [name]
|
|
78
|
+
eventmodeler show chapter [name]
|
|
79
|
+
eventmodeler show slice [name]
|
|
80
|
+
eventmodeler show event [name]
|
|
81
|
+
eventmodeler show command [name]
|
|
82
|
+
eventmodeler show readmodel [name]
|
|
83
|
+
eventmodeler show screen [name]
|
|
84
|
+
eventmodeler show processor [name]
|
|
85
|
+
eventmodeler show external-event [name]
|
|
86
|
+
eventmodeler show completeness
|
|
87
|
+
eventmodeler summary
|
|
88
|
+
eventmodeler search <term>
|
|
61
89
|
```
|
|
62
90
|
|
|
63
|
-
|
|
91
|
+
List commands:
|
|
64
92
|
|
|
65
93
|
```bash
|
|
66
|
-
eventmodeler
|
|
94
|
+
eventmodeler list slices [--chapter <name>]
|
|
95
|
+
eventmodeler list events
|
|
96
|
+
eventmodeler list commands
|
|
97
|
+
eventmodeler list readmodels
|
|
98
|
+
eventmodeler list screens
|
|
99
|
+
eventmodeler list processors
|
|
100
|
+
eventmodeler list external-events
|
|
101
|
+
eventmodeler list aggregates
|
|
102
|
+
eventmodeler list actors
|
|
103
|
+
eventmodeler list chapters
|
|
104
|
+
eventmodeler list contexts
|
|
105
|
+
eventmodeler list swimlanes
|
|
106
|
+
eventmodeler list notes
|
|
107
|
+
eventmodeler list scenarios
|
|
67
108
|
```
|
|
68
109
|
|
|
69
|
-
|
|
110
|
+
Output is JSON from the backend SDK. Use `eventmodeler help <topic>` or command-specific `--help` for schema examples.
|
|
111
|
+
|
|
112
|
+
## Canvas And Model Editing
|
|
113
|
+
|
|
114
|
+
Create models, slices, elements, flows, and linked copies:
|
|
70
115
|
|
|
71
116
|
```bash
|
|
72
|
-
|
|
73
|
-
eventmodeler
|
|
74
|
-
eventmodeler
|
|
117
|
+
eventmodeler create model <name>
|
|
118
|
+
eventmodeler create slice '<json>'
|
|
119
|
+
eventmodeler create place <type> <name> --x <n> --y <n>
|
|
120
|
+
eventmodeler create flow --from <source> --to <target>
|
|
121
|
+
eventmodeler create place-copy <type> [originalName] --x <n> --y <n>
|
|
122
|
+
eventmodeler create move-copy <type> [name] --x <n> --y <n>
|
|
123
|
+
eventmodeler create remove-copy <type> [name]
|
|
124
|
+
```
|
|
75
125
|
|
|
76
|
-
|
|
77
|
-
eventmodeler add scenario --slice "Place Order" --json '{"name": "Happy path", ...}'
|
|
126
|
+
Element types for `create place`:
|
|
78
127
|
|
|
79
|
-
|
|
80
|
-
|
|
128
|
+
```text
|
|
129
|
+
command, event, readmodel, screen, processor, external-event,
|
|
130
|
+
aggregate, actor, chapter, context, note, swimlane, slice
|
|
131
|
+
```
|
|
81
132
|
|
|
82
|
-
|
|
83
|
-
eventmodeler remove field --event "OrderPlaced" --field "legacyId"
|
|
133
|
+
Linked copies are supported for:
|
|
84
134
|
|
|
85
|
-
|
|
86
|
-
|
|
135
|
+
```text
|
|
136
|
+
event, readmodel, screen, external-event
|
|
137
|
+
```
|
|
87
138
|
|
|
88
|
-
|
|
89
|
-
|
|
139
|
+
Move, resize, rename, and remove existing elements:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
eventmodeler move <type> [name] --x <n> --y <n>
|
|
143
|
+
eventmodeler resize <type> [name] --width <n> --height <n>
|
|
144
|
+
eventmodeler rename <type> <oldName> <newName>
|
|
145
|
+
eventmodeler remove <type> [name]
|
|
146
|
+
eventmodeler remove flow --from <source> --to <target>
|
|
90
147
|
```
|
|
91
148
|
|
|
92
|
-
|
|
149
|
+
Mark slice status:
|
|
93
150
|
|
|
94
151
|
```bash
|
|
95
|
-
eventmodeler
|
|
96
|
-
eventmodeler
|
|
152
|
+
eventmodeler mark "Place Order" planned
|
|
153
|
+
eventmodeler mark "Place Order" created
|
|
154
|
+
eventmodeler mark "Place Order" in-progress
|
|
155
|
+
eventmodeler mark "Place Order" blocked
|
|
156
|
+
eventmodeler mark "Place Order" done
|
|
97
157
|
```
|
|
98
158
|
|
|
99
|
-
##
|
|
159
|
+
## Fields
|
|
160
|
+
|
|
161
|
+
Fields are supported on commands, events, readmodels, screens, processors, and external events.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
eventmodeler add field [elementName] '{"name":"customerId","type":"UUID"}'
|
|
165
|
+
eventmodeler add subfield [elementName] --field <parentFieldName> '{"name":"email","type":"String"}'
|
|
166
|
+
|
|
167
|
+
eventmodeler update field [elementName] --field <name> --name <newName>
|
|
168
|
+
eventmodeler update field [elementName] --field <name> --type <newType>
|
|
169
|
+
eventmodeler update field [elementName] --field <name> --optional true
|
|
170
|
+
eventmodeler update field [elementName] --field <name> --generated false
|
|
171
|
+
eventmodeler update field [elementName] --field <name> --list true
|
|
172
|
+
eventmodeler update field [elementName] --field <name> --user-input true
|
|
173
|
+
|
|
174
|
+
eventmodeler update subfield [elementName] --subfield <id> --name <newName>
|
|
175
|
+
eventmodeler update subfield [elementName] --subfield <id> --type <newType>
|
|
176
|
+
eventmodeler update reorder [elementName] --field <name> --position <n>
|
|
177
|
+
eventmodeler update reorder-subfield [elementName] --subfield <id> --position <n>
|
|
178
|
+
|
|
179
|
+
eventmodeler remove field [elementName] --field <name>
|
|
180
|
+
eventmodeler remove subfield [elementName] --subfield <id>
|
|
181
|
+
eventmodeler set aggregate-id [aggregateName] --field-name <name> --field-type UUID
|
|
182
|
+
```
|
|
100
183
|
|
|
101
|
-
|
|
184
|
+
For field mappings:
|
|
102
185
|
|
|
103
186
|
```bash
|
|
104
|
-
eventmodeler
|
|
105
|
-
eventmodeler
|
|
187
|
+
eventmodeler map fields '[{"source":"orderId","target":"orderId"}]' --from PlaceOrder --to OrderPlaced
|
|
188
|
+
eventmodeler remove mapping --from PlaceOrder --to OrderPlaced --mapping <mappingId>
|
|
106
189
|
```
|
|
107
190
|
|
|
108
|
-
|
|
191
|
+
## Scenarios
|
|
109
192
|
|
|
110
|
-
|
|
193
|
+
Create a full Given/When/Then scenario in one backend transaction:
|
|
111
194
|
|
|
112
|
-
**Environment variable:**
|
|
113
195
|
```bash
|
|
114
|
-
|
|
196
|
+
eventmodeler add scenario --slice "Place Order" '<scenario-json>'
|
|
197
|
+
eventmodeler create scenario --slice "Place Order" '<scenario-json>'
|
|
115
198
|
```
|
|
116
199
|
|
|
117
|
-
|
|
200
|
+
Scenario JSON shape:
|
|
201
|
+
|
|
118
202
|
```json
|
|
119
203
|
{
|
|
120
|
-
"
|
|
204
|
+
"name": "happy path",
|
|
205
|
+
"description": "optional",
|
|
206
|
+
"given": [
|
|
207
|
+
{ "entryType": "event", "elementName": "OrderPlaced" }
|
|
208
|
+
],
|
|
209
|
+
"when": [
|
|
210
|
+
{ "entryType": "command", "elementName": "PlaceOrder" }
|
|
211
|
+
],
|
|
212
|
+
"then": [
|
|
213
|
+
{ "entryType": "event", "elementName": "OrderPlaced" },
|
|
214
|
+
{ "entryType": "error", "errorType": "Validation", "errorMessage": "Invalid order" }
|
|
215
|
+
]
|
|
121
216
|
}
|
|
122
217
|
```
|
|
123
218
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
## Options
|
|
219
|
+
Allowed entry types:
|
|
127
220
|
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
-v, --version Show version number
|
|
221
|
+
```text
|
|
222
|
+
given: event, readmodel
|
|
223
|
+
when: command, event
|
|
224
|
+
then: event, command, readmodel, error
|
|
133
225
|
```
|
|
134
226
|
|
|
135
|
-
|
|
227
|
+
Example values can be provided in the scenario JSON via `fieldValues`, or edited later:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
eventmodeler add entry --scenario "happy path" --section then --type event --element OrderPlaced
|
|
231
|
+
eventmodeler set example --scenario "happy path" --entry <entryId> --type event --field orderId --value uuid-1
|
|
232
|
+
eventmodeler set example --scenario "happy path" --entry <entryId> --type event --field tags --values vip,web
|
|
233
|
+
eventmodeler set example --scenario "happy path" --entry <entryId> --type event --field address --json '{"city":"NYC"}'
|
|
234
|
+
eventmodeler set description --scenario "happy path" --text "Updated description"
|
|
235
|
+
eventmodeler set position --scenario "happy path" --section then --entry <entryId> --position 0
|
|
236
|
+
eventmodeler remove example --scenario "happy path" --entry <entryId> --type event --field orderId
|
|
237
|
+
eventmodeler remove entry --scenario "happy path" --section then --entry <entryId>
|
|
238
|
+
eventmodeler remove scenario "happy path"
|
|
239
|
+
```
|
|
136
240
|
|
|
137
|
-
|
|
241
|
+
Primitive example values are strings. Custom fields use JSON objects, and Custom list fields use arrays of objects.
|
|
138
242
|
|
|
139
|
-
|
|
243
|
+
## Screen And Note Details
|
|
140
244
|
|
|
141
245
|
```bash
|
|
142
|
-
eventmodeler
|
|
246
|
+
eventmodeler design <screenName> '<excalidraw-json-array>'
|
|
247
|
+
eventmodeler set note-description [noteName] --text "Markdown or plain text"
|
|
143
248
|
```
|
|
144
249
|
|
|
145
|
-
|
|
250
|
+
## Automation Loop
|
|
146
251
|
|
|
147
|
-
|
|
252
|
+
The CLI can poll planned slices and run your generator command for each one.
|
|
148
253
|
|
|
149
254
|
```bash
|
|
150
|
-
eventmodeler
|
|
151
|
-
eventmodeler
|
|
255
|
+
eventmodeler init loop
|
|
256
|
+
eventmodeler loop
|
|
152
257
|
```
|
|
153
258
|
|
|
154
|
-
|
|
259
|
+
`eventmodeler init loop` adds a `loop` block to `.eventmodeler.json` and creates a sample `generate.sh`. The generated script marks a slice in progress, exports slice JSON, runs your codegen placeholder, and marks the slice done or blocked.
|
|
155
260
|
|
|
156
|
-
|
|
261
|
+
## Configuration
|
|
157
262
|
|
|
158
|
-
|
|
159
|
-
|
|
263
|
+
Global config lives at:
|
|
264
|
+
|
|
265
|
+
```text
|
|
266
|
+
~/.eventmodeler/config.json
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Project config lives at:
|
|
270
|
+
|
|
271
|
+
```text
|
|
272
|
+
.eventmodeler.json
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
The production backend is used by default:
|
|
276
|
+
|
|
277
|
+
```text
|
|
278
|
+
https://api.eventmodeler.com
|
|
160
279
|
```
|
|
161
280
|
|
|
162
|
-
|
|
281
|
+
Override endpoints when developing locally:
|
|
163
282
|
|
|
164
|
-
|
|
165
|
-
|
|
283
|
+
```bash
|
|
284
|
+
export EVENTMODELER_BACKEND_URL=http://localhost:8080
|
|
285
|
+
export EVENTMODELER_KEYCLOAK_URL=http://localhost:18180/realms/eventmodeler
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Help Topics
|
|
166
289
|
|
|
167
|
-
|
|
290
|
+
Task-oriented help is built into the CLI:
|
|
168
291
|
|
|
169
|
-
|
|
292
|
+
```bash
|
|
293
|
+
eventmodeler help
|
|
294
|
+
eventmodeler help build-slice
|
|
295
|
+
eventmodeler help write-scenarios
|
|
296
|
+
eventmodeler help manipulate-canvas
|
|
297
|
+
eventmodeler help linked-copies
|
|
298
|
+
eventmodeler help check-completeness
|
|
299
|
+
eventmodeler guide json-reference
|
|
300
|
+
```
|
|
170
301
|
|
|
171
302
|
## Links
|
|
172
303
|
|
|
173
|
-
-
|
|
174
|
-
-
|
|
175
|
-
- [GitHub Repository](https://github.com/theoema/event-modeler)
|
|
304
|
+
- Event Modeling: https://eventmodeling.org
|
|
305
|
+
- GitHub: https://github.com/theoema/event-modeler
|