@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.
Files changed (80) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +14 -8
  3. package/dist/DevServer.d.ts +2 -1
  4. package/dist/DevServer.d.ts.map +1 -1
  5. package/dist/DevServer.js.map +1 -1
  6. package/dist/DevToolsProtocol.d.ts +167 -17
  7. package/dist/DevToolsProtocol.d.ts.map +1 -1
  8. package/dist/DevToolsProtocol.js +1 -1
  9. package/dist/MachineDocument.d.ts +98 -2
  10. package/dist/MachineDocument.d.ts.map +1 -1
  11. package/dist/MachineDocument.js +35 -1
  12. package/dist/MachineDocument.js.map +1 -1
  13. package/dist/MachineRegistry.d.ts +56 -6
  14. package/dist/MachineRegistry.d.ts.map +1 -1
  15. package/dist/MachineWalkthrough.d.ts +171 -0
  16. package/dist/MachineWalkthrough.d.ts.map +1 -0
  17. package/dist/MachineWalkthrough.js +98 -0
  18. package/dist/MachineWalkthrough.js.map +1 -0
  19. package/dist/client/assets/index-BTOAhezX.js +37 -0
  20. package/dist/client/assets/index-Cg7xzSkz.css +1 -0
  21. package/dist/client/index.html +4 -4
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/internal/devServer.d.ts +2 -1
  27. package/dist/internal/devServer.d.ts.map +1 -1
  28. package/dist/internal/devServer.js +4 -3
  29. package/dist/internal/devServer.js.map +1 -1
  30. package/dist/internal/evaluationWorker.d.ts.map +1 -1
  31. package/dist/internal/evaluationWorker.js +28 -9
  32. package/dist/internal/evaluationWorker.js.map +1 -1
  33. package/dist/internal/machineDocument.d.ts.map +1 -1
  34. package/dist/internal/machineDocument.js +65 -2
  35. package/dist/internal/machineDocument.js.map +1 -1
  36. package/dist/internal/machineWalkthrough.d.ts +26 -0
  37. package/dist/internal/machineWalkthrough.d.ts.map +1 -0
  38. package/dist/internal/machineWalkthrough.js +256 -0
  39. package/dist/internal/machineWalkthrough.js.map +1 -0
  40. package/dist/internal/projectInspector.d.ts.map +1 -1
  41. package/dist/internal/projectInspector.js +15 -9
  42. package/dist/internal/projectInspector.js.map +1 -1
  43. package/index.html +2 -2
  44. package/package.json +4 -3
  45. package/src/DevServer.ts +6 -2
  46. package/src/DevToolsProtocol.ts +1 -1
  47. package/src/MachineDocument.ts +56 -1
  48. package/src/MachineWalkthrough.ts +199 -0
  49. package/src/index.ts +2 -2
  50. package/src/internal/browser/chart-layout.ts +433 -0
  51. package/src/internal/browser/chart-model.ts +234 -0
  52. package/src/internal/browser/chart-renderer.ts +661 -0
  53. package/src/internal/browser/example-machine.ts +15 -6
  54. package/src/internal/browser/input-form.ts +252 -0
  55. package/src/internal/browser/invoke-outcomes-example.ts +231 -0
  56. package/src/internal/browser/parallel-completion-example.ts +199 -0
  57. package/src/internal/browser/planner-example.ts +145 -0
  58. package/src/internal/browser/protocol-events-example.ts +200 -0
  59. package/src/internal/browser/styles.css +959 -185
  60. package/src/internal/browser/transition-semantics-example.ts +236 -0
  61. package/src/internal/browser/visualizer-app.ts +818 -389
  62. package/src/internal/browser/visualizer-model.ts +104 -0
  63. package/src/internal/browser/visualizer.ts +1 -1
  64. package/src/internal/devServer.ts +9 -4
  65. package/src/internal/evaluationWorker.ts +28 -10
  66. package/src/internal/machineDocument.ts +77 -2
  67. package/src/internal/machineWalkthrough.ts +355 -0
  68. package/src/internal/projectInspector.ts +29 -14
  69. package/dist/MachineSimulator.d.ts +0 -169
  70. package/dist/MachineSimulator.d.ts.map +0 -1
  71. package/dist/MachineSimulator.js +0 -98
  72. package/dist/MachineSimulator.js.map +0 -1
  73. package/dist/client/assets/index-BGOhE3Ng.css +0 -1
  74. package/dist/client/assets/index-DiqGhsGR.js +0 -14
  75. package/dist/internal/machineSimulator.d.ts +0 -5
  76. package/dist/internal/machineSimulator.d.ts.map +0 -1
  77. package/dist/internal/machineSimulator.js +0 -156
  78. package/dist/internal/machineSimulator.js.map +0 -1
  79. package/src/MachineSimulator.ts +0 -154
  80. 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
+ })