@typeonce/effect-machine-devtools 0.23.0 → 0.25.0
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/NOTICE +4 -0
- package/README.md +14 -8
- package/dist/DevServer.d.ts +2 -1
- package/dist/DevServer.d.ts.map +1 -1
- package/dist/DevServer.js.map +1 -1
- package/dist/DevToolsProtocol.d.ts +167 -17
- package/dist/DevToolsProtocol.d.ts.map +1 -1
- package/dist/DevToolsProtocol.js +1 -1
- package/dist/MachineDocument.d.ts +98 -2
- package/dist/MachineDocument.d.ts.map +1 -1
- package/dist/MachineDocument.js +35 -1
- package/dist/MachineDocument.js.map +1 -1
- package/dist/MachineRegistry.d.ts +56 -6
- package/dist/MachineRegistry.d.ts.map +1 -1
- package/dist/MachineWalkthrough.d.ts +171 -0
- package/dist/MachineWalkthrough.d.ts.map +1 -0
- package/dist/MachineWalkthrough.js +98 -0
- package/dist/MachineWalkthrough.js.map +1 -0
- package/dist/client/assets/index-BTOAhezX.js +37 -0
- package/dist/client/assets/index-Cg7xzSkz.css +1 -0
- package/dist/client/index.html +4 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/devServer.d.ts +2 -1
- package/dist/internal/devServer.d.ts.map +1 -1
- package/dist/internal/devServer.js +4 -3
- package/dist/internal/devServer.js.map +1 -1
- package/dist/internal/evaluationWorker.d.ts.map +1 -1
- package/dist/internal/evaluationWorker.js +28 -9
- package/dist/internal/evaluationWorker.js.map +1 -1
- package/dist/internal/machineDocument.d.ts.map +1 -1
- package/dist/internal/machineDocument.js +65 -2
- package/dist/internal/machineDocument.js.map +1 -1
- package/dist/internal/machineWalkthrough.d.ts +26 -0
- package/dist/internal/machineWalkthrough.d.ts.map +1 -0
- package/dist/internal/machineWalkthrough.js +256 -0
- package/dist/internal/machineWalkthrough.js.map +1 -0
- package/dist/internal/projectInspector.d.ts.map +1 -1
- package/dist/internal/projectInspector.js +15 -9
- package/dist/internal/projectInspector.js.map +1 -1
- package/index.html +2 -2
- package/package.json +4 -3
- package/src/DevServer.ts +6 -2
- package/src/DevToolsProtocol.ts +1 -1
- package/src/MachineDocument.ts +56 -1
- package/src/MachineWalkthrough.ts +199 -0
- package/src/index.ts +2 -2
- package/src/internal/browser/chart-layout.ts +433 -0
- package/src/internal/browser/chart-model.ts +234 -0
- package/src/internal/browser/chart-renderer.ts +661 -0
- package/src/internal/browser/example-machine.ts +15 -6
- package/src/internal/browser/input-form.ts +252 -0
- package/src/internal/browser/invoke-outcomes-example.ts +231 -0
- package/src/internal/browser/parallel-completion-example.ts +199 -0
- package/src/internal/browser/planner-example.ts +145 -0
- package/src/internal/browser/protocol-events-example.ts +200 -0
- package/src/internal/browser/styles.css +959 -185
- package/src/internal/browser/transition-semantics-example.ts +236 -0
- package/src/internal/browser/visualizer-app.ts +818 -389
- package/src/internal/browser/visualizer-model.ts +104 -0
- package/src/internal/browser/visualizer.ts +1 -1
- package/src/internal/devServer.ts +9 -4
- package/src/internal/evaluationWorker.ts +28 -10
- package/src/internal/machineDocument.ts +77 -2
- package/src/internal/machineWalkthrough.ts +355 -0
- package/src/internal/projectInspector.ts +29 -14
- package/dist/MachineSimulator.d.ts +0 -169
- package/dist/MachineSimulator.d.ts.map +0 -1
- package/dist/MachineSimulator.js +0 -98
- package/dist/MachineSimulator.js.map +0 -1
- package/dist/client/assets/index-BGOhE3Ng.css +0 -1
- package/dist/client/assets/index-DiqGhsGR.js +0 -14
- package/dist/internal/machineSimulator.d.ts +0 -5
- package/dist/internal/machineSimulator.d.ts.map +0 -1
- package/dist/internal/machineSimulator.js +0 -156
- package/dist/internal/machineSimulator.js.map +0 -1
- package/src/MachineSimulator.ts +0 -154
- package/src/internal/machineSimulator.ts +0 -199
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { Machine } from "@typeonce/effect-machine"
|
|
2
|
+
import { Schema } from "effect"
|
|
3
|
+
|
|
4
|
+
class Workspace extends Schema.TaggedClass<Workspace>("TransitionWorkspace")("Workspace", {
|
|
5
|
+
revision: Schema.Number,
|
|
6
|
+
preferredRoute: Schema.Literals(["draft", "review"])
|
|
7
|
+
}) {}
|
|
8
|
+
class Draft extends Schema.TaggedClass<Draft>("TransitionDraft")("Draft", {
|
|
9
|
+
text: Schema.String,
|
|
10
|
+
autosaves: Schema.Number
|
|
11
|
+
}) {}
|
|
12
|
+
class AutoSaving extends Schema.TaggedClass<AutoSaving>("TransitionAutoSaving")("AutoSaving", {}) {}
|
|
13
|
+
class Review extends Schema.TaggedClass<Review>("TransitionReview")("Review", {
|
|
14
|
+
requestedBy: Schema.String
|
|
15
|
+
}) {}
|
|
16
|
+
class Checking extends Schema.TaggedClass<Checking>("TransitionChecking")("Checking", {
|
|
17
|
+
checks: Schema.Array(Schema.String)
|
|
18
|
+
}) {}
|
|
19
|
+
class ChangesRequested extends Schema.TaggedClass<ChangesRequested>("TransitionChangesRequested")(
|
|
20
|
+
"ChangesRequested",
|
|
21
|
+
{ reason: Schema.String }
|
|
22
|
+
) {}
|
|
23
|
+
class Approved extends Schema.TaggedClass<Approved>("TransitionApproved")("Approved", {
|
|
24
|
+
reviewer: Schema.String
|
|
25
|
+
}) {}
|
|
26
|
+
class WorkspaceFinished extends Schema.TaggedClass<WorkspaceFinished>("TransitionWorkspaceFinished")(
|
|
27
|
+
"Finished",
|
|
28
|
+
{ result: Schema.String }
|
|
29
|
+
) {}
|
|
30
|
+
class Paused extends Schema.TaggedClass<Paused>("TransitionPaused")("Paused", {
|
|
31
|
+
reason: Schema.String
|
|
32
|
+
}) {}
|
|
33
|
+
class Published extends Schema.TaggedClass<Published>("TransitionPublished")("Published", {
|
|
34
|
+
result: Schema.String
|
|
35
|
+
}) {}
|
|
36
|
+
|
|
37
|
+
class Create extends Schema.TaggedClass<Create>("TransitionCreate")("Create", {
|
|
38
|
+
text: Schema.String,
|
|
39
|
+
route: Schema.Literals(["draft", "review"])
|
|
40
|
+
}) {}
|
|
41
|
+
class Edit extends Schema.TaggedClass<Edit>("TransitionEdit")("Edit", { text: Schema.String }) {}
|
|
42
|
+
class Save extends Schema.TaggedClass<Save>("TransitionSave")("Save", {}) {}
|
|
43
|
+
class Submit extends Schema.TaggedClass<Submit>("TransitionSubmit")("Submit", {
|
|
44
|
+
mode: Schema.Literals(["review", "publish"]),
|
|
45
|
+
requestedBy: Schema.String
|
|
46
|
+
}) {}
|
|
47
|
+
class Approve extends Schema.TaggedClass<Approve>("TransitionApprove")("Approve", {
|
|
48
|
+
reviewer: Schema.String
|
|
49
|
+
}) {}
|
|
50
|
+
class Reject extends Schema.TaggedClass<Reject>("TransitionReject")("Reject", {
|
|
51
|
+
reason: Schema.String
|
|
52
|
+
}) {}
|
|
53
|
+
class Revise extends Schema.TaggedClass<Revise>("TransitionRevise")("Revise", {}) {}
|
|
54
|
+
class Pause extends Schema.TaggedClass<Pause>("TransitionPause")("Pause", { reason: Schema.String }) {}
|
|
55
|
+
class ResumeShallow extends Schema.TaggedClass<ResumeShallow>("TransitionResumeShallow")(
|
|
56
|
+
"ResumeShallow",
|
|
57
|
+
{}
|
|
58
|
+
) {}
|
|
59
|
+
class ResumeDeep extends Schema.TaggedClass<ResumeDeep>("TransitionResumeDeep")("ResumeDeep", {}) {}
|
|
60
|
+
class Restart extends Schema.TaggedClass<Restart>("TransitionRestart")("Restart", {}) {}
|
|
61
|
+
class Refresh extends Schema.TaggedClass<Refresh>("TransitionRefresh")("Refresh", {}) {}
|
|
62
|
+
class Ignore extends Schema.TaggedClass<Ignore>("TransitionIgnore")("Ignore", {}) {}
|
|
63
|
+
class MaybeHandle extends Schema.TaggedClass<MaybeHandle>("TransitionMaybeHandle")("MaybeHandle", {
|
|
64
|
+
accept: Schema.Boolean
|
|
65
|
+
}) {}
|
|
66
|
+
class BumpWorkspace extends Schema.TaggedClass<BumpWorkspace>("TransitionBumpWorkspace")(
|
|
67
|
+
"BumpWorkspace",
|
|
68
|
+
{}
|
|
69
|
+
) {}
|
|
70
|
+
|
|
71
|
+
const TransitionStates = Machine.states({
|
|
72
|
+
Workspace: {
|
|
73
|
+
schema: Workspace,
|
|
74
|
+
initial: "Routing",
|
|
75
|
+
states: {
|
|
76
|
+
Routing: { type: "choice" },
|
|
77
|
+
Draft,
|
|
78
|
+
AutoSaving,
|
|
79
|
+
Review: {
|
|
80
|
+
schema: Review,
|
|
81
|
+
initial: "Checking",
|
|
82
|
+
states: {
|
|
83
|
+
Checking,
|
|
84
|
+
ChangesRequested,
|
|
85
|
+
Approved: { schema: Approved, type: "final" }
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
Finished: { schema: WorkspaceFinished, type: "final" },
|
|
89
|
+
recent: { type: "history" },
|
|
90
|
+
exact: { type: "history", history: "deep" }
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
Paused,
|
|
94
|
+
Published: { schema: Published, type: "final", output: Schema.String }
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
const defaultWorkspaceSnapshot = () => ({
|
|
98
|
+
path: "Workspace" as const,
|
|
99
|
+
value: new Workspace({ revision: 0, preferredRoute: "draft" as const }),
|
|
100
|
+
state: {
|
|
101
|
+
path: "Workspace.Draft" as const,
|
|
102
|
+
value: new Draft({ text: "Recovered draft", autosaves: 0 })
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
export const transitionSemanticsMachine = Machine.make({
|
|
107
|
+
id: "transition-semantics",
|
|
108
|
+
states: TransitionStates.states,
|
|
109
|
+
events: Machine.events(
|
|
110
|
+
Create,
|
|
111
|
+
Edit,
|
|
112
|
+
Save,
|
|
113
|
+
Submit,
|
|
114
|
+
Approve,
|
|
115
|
+
Reject,
|
|
116
|
+
Revise,
|
|
117
|
+
Pause,
|
|
118
|
+
ResumeShallow,
|
|
119
|
+
ResumeDeep,
|
|
120
|
+
Restart,
|
|
121
|
+
Refresh,
|
|
122
|
+
Ignore,
|
|
123
|
+
MaybeHandle,
|
|
124
|
+
BumpWorkspace
|
|
125
|
+
),
|
|
126
|
+
initial: (to) => to.Paused().resolve(({ target }) => target.decoded(new Paused({ reason: "not started" })))
|
|
127
|
+
}).handle({
|
|
128
|
+
Workspace: {
|
|
129
|
+
history: {
|
|
130
|
+
recent: { default: defaultWorkspaceSnapshot },
|
|
131
|
+
exact: { default: defaultWorkspaceSnapshot }
|
|
132
|
+
},
|
|
133
|
+
on: {
|
|
134
|
+
Pause: (to) =>
|
|
135
|
+
to.full.Paused().resolve(({ event, target }) => target.decoded(new Paused({ reason: event.reason }))),
|
|
136
|
+
BumpWorkspace: (to) =>
|
|
137
|
+
to.branch.Workspace.update(({ current, owner }) =>
|
|
138
|
+
owner.decoded(
|
|
139
|
+
new Workspace({
|
|
140
|
+
revision: current.revision + 1,
|
|
141
|
+
preferredRoute: current.preferredRoute
|
|
142
|
+
})
|
|
143
|
+
)
|
|
144
|
+
)
|
|
145
|
+
},
|
|
146
|
+
onDone: (to) =>
|
|
147
|
+
to.full.Published().resolve(({ target }) => target.decoded(new Published({ result: "workspace published" }))),
|
|
148
|
+
states: {
|
|
149
|
+
Routing: {
|
|
150
|
+
choice: (to) =>
|
|
151
|
+
to.branches({
|
|
152
|
+
draft: { title: "Preferred route is draft", target: to.local.Draft() },
|
|
153
|
+
review: { title: "Preferred route is review", target: to.local.Review.initial }
|
|
154
|
+
}).resolve(({ containingState, select }) =>
|
|
155
|
+
containingState.preferredRoute === "review"
|
|
156
|
+
? select.review.decoded(new Review({ requestedBy: "initial route" }))
|
|
157
|
+
: select.draft.decoded(new Draft({ text: "", autosaves: 0 }))
|
|
158
|
+
)
|
|
159
|
+
},
|
|
160
|
+
Draft: {
|
|
161
|
+
on: {
|
|
162
|
+
Edit: (to) =>
|
|
163
|
+
to.local.Draft().resolve(({ event, state, target }) =>
|
|
164
|
+
target.decoded(new Draft({ text: event.text, autosaves: state.autosaves }))
|
|
165
|
+
),
|
|
166
|
+
Save: (to) => to.local.AutoSaving().resolve(({ target }) => target.decoded(new AutoSaving({}))),
|
|
167
|
+
Submit: (to) =>
|
|
168
|
+
to.branches({
|
|
169
|
+
review: { title: "Enter the review flow", target: to.local.Review.initial },
|
|
170
|
+
publish: { title: "Publish without review", target: to.local.Finished() }
|
|
171
|
+
}).resolve(({ event, select }) =>
|
|
172
|
+
event.mode === "publish"
|
|
173
|
+
? select.publish.decoded(new WorkspaceFinished({ result: "published directly" }))
|
|
174
|
+
: select.review.decoded(new Review({ requestedBy: event.requestedBy }))
|
|
175
|
+
),
|
|
176
|
+
Refresh: (to) => to.none.resolve(() => undefined, { reenter: true }),
|
|
177
|
+
Ignore: (to) => to.none,
|
|
178
|
+
MaybeHandle: (to) =>
|
|
179
|
+
to.none.resolve(({ decline, event }) => event.accept ? undefined : decline(), {
|
|
180
|
+
declinable: true
|
|
181
|
+
})
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
AutoSaving: {
|
|
185
|
+
always: (to) =>
|
|
186
|
+
to.local.Draft().resolve(({ target }) => target.decoded(new Draft({ text: "Autosaved draft", autosaves: 1 })))
|
|
187
|
+
},
|
|
188
|
+
Review: {
|
|
189
|
+
initialize: ({ builder }) => builder.decoded(new Checking({ checks: ["types", "tests"] })),
|
|
190
|
+
onDone: (to) =>
|
|
191
|
+
to.branch.Workspace.Finished().resolve(({ target }) =>
|
|
192
|
+
target.decoded(new WorkspaceFinished({ result: "approved review" }))
|
|
193
|
+
),
|
|
194
|
+
states: {
|
|
195
|
+
Checking: {
|
|
196
|
+
on: {
|
|
197
|
+
Approve: (to) =>
|
|
198
|
+
to.local.Approved().resolve(({ event, target }) =>
|
|
199
|
+
target.decoded(new Approved({ reviewer: event.reviewer }))
|
|
200
|
+
),
|
|
201
|
+
Reject: (to) =>
|
|
202
|
+
to.local.ChangesRequested().resolve(({ event, target }) =>
|
|
203
|
+
target.decoded(new ChangesRequested({ reason: event.reason }))
|
|
204
|
+
)
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
ChangesRequested: {
|
|
208
|
+
on: {
|
|
209
|
+
Revise: (to) =>
|
|
210
|
+
to.branch.Workspace.Draft().resolve(({ target }) =>
|
|
211
|
+
target.decoded(new Draft({ text: "Revised draft", autosaves: 0 }))
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
Paused: {
|
|
220
|
+
on: {
|
|
221
|
+
Create: (to) =>
|
|
222
|
+
to.full.Workspace.initial.resolve(({ event, target }) =>
|
|
223
|
+
target.decoded(new Workspace({ revision: 0, preferredRoute: event.route }))
|
|
224
|
+
),
|
|
225
|
+
ResumeShallow: (to) => to.history.Workspace.recent.resolve(({ target }) => target()),
|
|
226
|
+
ResumeDeep: (to) => to.history.Workspace.exact.resolve(({ target }) => target()),
|
|
227
|
+
Restart: (to) =>
|
|
228
|
+
to.full.Workspace.initial.resolve(({ target }) =>
|
|
229
|
+
target.decoded(new Workspace({ revision: 0, preferredRoute: "draft" }))
|
|
230
|
+
)
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
Published: {
|
|
234
|
+
output: ({ state }) => state.result
|
|
235
|
+
}
|
|
236
|
+
})
|