@typeonce/effect-machine 0.3.0 → 0.4.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 (149) hide show
  1. package/README.md +203 -16
  2. package/dist/Machine.d.ts +784 -289
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +158 -528
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/activities.d.ts +57 -0
  7. package/dist/internal/machine/activities.d.ts.map +1 -0
  8. package/dist/internal/machine/activities.js +49 -0
  9. package/dist/internal/machine/activities.js.map +1 -0
  10. package/dist/internal/machine/atom.d.ts +69 -0
  11. package/dist/internal/machine/atom.d.ts.map +1 -0
  12. package/dist/{AtomMachine.js → internal/machine/atom.js} +19 -94
  13. package/dist/internal/machine/atom.js.map +1 -0
  14. package/dist/internal/machine/cluster.d.ts +63 -0
  15. package/dist/internal/machine/cluster.d.ts.map +1 -0
  16. package/dist/{ClusterMachine.js → internal/machine/cluster.js} +14 -118
  17. package/dist/internal/machine/cluster.js.map +1 -0
  18. package/dist/internal/machine/command.d.ts +16 -0
  19. package/dist/internal/machine/command.d.ts.map +1 -0
  20. package/dist/internal/machine/command.js +45 -0
  21. package/dist/internal/machine/command.js.map +1 -0
  22. package/dist/internal/machine/commandRuntime.d.ts +13 -0
  23. package/dist/internal/machine/commandRuntime.d.ts.map +1 -0
  24. package/dist/internal/machine/commandRuntime.js +16 -0
  25. package/dist/internal/machine/commandRuntime.js.map +1 -0
  26. package/dist/internal/{machineModel.d.ts → machine/configuration.d.ts} +11 -60
  27. package/dist/internal/machine/configuration.d.ts.map +1 -0
  28. package/dist/internal/{machineModel.js → machine/configuration.js} +249 -544
  29. package/dist/internal/machine/configuration.js.map +1 -0
  30. package/dist/internal/{machineErrors.d.ts → machine/errors.d.ts} +1 -1
  31. package/dist/internal/machine/errors.d.ts.map +1 -0
  32. package/dist/internal/{machineErrors.js → machine/errors.js} +1 -1
  33. package/dist/internal/machine/errors.js.map +1 -0
  34. package/dist/internal/machine/executionPlan.d.ts +49 -0
  35. package/dist/internal/machine/executionPlan.d.ts.map +1 -0
  36. package/dist/internal/machine/executionPlan.js +667 -0
  37. package/dist/internal/machine/executionPlan.js.map +1 -0
  38. package/dist/internal/machine/invocation.d.ts +23 -0
  39. package/dist/internal/machine/invocation.d.ts.map +1 -0
  40. package/dist/internal/machine/invocation.js +77 -0
  41. package/dist/internal/machine/invocation.js.map +1 -0
  42. package/dist/internal/machine/machine.d.ts +183 -0
  43. package/dist/internal/machine/machine.d.ts.map +1 -0
  44. package/dist/internal/machine/machine.js +552 -0
  45. package/dist/internal/machine/machine.js.map +1 -0
  46. package/dist/internal/machine/planner.d.ts +182 -0
  47. package/dist/internal/machine/planner.d.ts.map +1 -0
  48. package/dist/internal/machine/planner.js +1082 -0
  49. package/dist/internal/machine/planner.js.map +1 -0
  50. package/dist/internal/{machineProcess.d.ts → machine/process.d.ts} +10 -4
  51. package/dist/internal/machine/process.d.ts.map +1 -0
  52. package/dist/internal/machine/process.js +446 -0
  53. package/dist/internal/machine/process.js.map +1 -0
  54. package/dist/internal/machine/protocol.d.ts +34 -0
  55. package/dist/internal/machine/protocol.d.ts.map +1 -0
  56. package/dist/internal/machine/protocol.js +182 -0
  57. package/dist/internal/machine/protocol.js.map +1 -0
  58. package/dist/internal/machine/readiness.d.ts +4 -0
  59. package/dist/internal/machine/readiness.d.ts.map +1 -0
  60. package/dist/internal/machine/readiness.js +2 -0
  61. package/dist/internal/machine/readiness.js.map +1 -0
  62. package/dist/internal/{machineRuntime.d.ts → machine/runtime.d.ts} +104 -2
  63. package/dist/internal/machine/runtime.d.ts.map +1 -0
  64. package/dist/internal/machine/runtime.js +1381 -0
  65. package/dist/internal/machine/runtime.js.map +1 -0
  66. package/dist/internal/machine/serialization.d.ts +14 -0
  67. package/dist/internal/machine/serialization.d.ts.map +1 -0
  68. package/dist/internal/machine/serialization.js +338 -0
  69. package/dist/internal/machine/serialization.js.map +1 -0
  70. package/dist/internal/machine/stateDefinition.d.ts +15 -0
  71. package/dist/internal/machine/stateDefinition.d.ts.map +1 -0
  72. package/dist/internal/machine/stateDefinition.js +210 -0
  73. package/dist/internal/machine/stateDefinition.js.map +1 -0
  74. package/dist/internal/machine/symbols.d.ts +3 -0
  75. package/dist/internal/machine/symbols.d.ts.map +1 -0
  76. package/dist/internal/machine/symbols.js +3 -0
  77. package/dist/internal/machine/symbols.js.map +1 -0
  78. package/dist/internal/machine/topology.d.ts +98 -0
  79. package/dist/internal/machine/topology.d.ts.map +1 -0
  80. package/dist/internal/machine/topology.js +347 -0
  81. package/dist/internal/machine/topology.js.map +1 -0
  82. package/dist/internal/testing/machine/arbitrary.d.ts +36 -0
  83. package/dist/internal/testing/machine/arbitrary.d.ts.map +1 -0
  84. package/dist/internal/testing/machine/arbitrary.js +68 -0
  85. package/dist/internal/testing/machine/arbitrary.js.map +1 -0
  86. package/dist/internal/testing/machine/finiteModel.d.ts +322 -0
  87. package/dist/internal/testing/machine/finiteModel.d.ts.map +1 -0
  88. package/dist/internal/testing/machine/finiteModel.js +976 -0
  89. package/dist/internal/testing/machine/finiteModel.js.map +1 -0
  90. package/dist/internal/testing/machine/referenceModel.d.ts +203 -0
  91. package/dist/internal/testing/machine/referenceModel.d.ts.map +1 -0
  92. package/dist/internal/testing/machine/referenceModel.js +1012 -0
  93. package/dist/internal/testing/machine/referenceModel.js.map +1 -0
  94. package/dist/internal/testing/machine/runtime.d.ts +328 -0
  95. package/dist/internal/testing/machine/runtime.d.ts.map +1 -0
  96. package/dist/internal/testing/machine/runtime.js +437 -0
  97. package/dist/internal/testing/machine/runtime.js.map +1 -0
  98. package/dist/internal/testing/machine/verification.d.ts +33 -0
  99. package/dist/internal/testing/machine/verification.d.ts.map +1 -0
  100. package/dist/internal/testing/machine/verification.js +1446 -0
  101. package/dist/internal/testing/machine/verification.js.map +1 -0
  102. package/dist/testing/MachineTest.d.ts +606 -0
  103. package/dist/testing/MachineTest.d.ts.map +1 -0
  104. package/dist/testing/MachineTest.js +102 -0
  105. package/dist/testing/MachineTest.js.map +1 -0
  106. package/dist/testing/index.d.ts +7 -0
  107. package/dist/testing/index.d.ts.map +1 -0
  108. package/dist/testing/index.js +7 -0
  109. package/dist/testing/index.js.map +1 -0
  110. package/dist/{ClusterMachine.d.ts → unstable/cluster/ClusterMachine.d.ts} +19 -27
  111. package/dist/unstable/cluster/ClusterMachine.d.ts.map +1 -0
  112. package/dist/unstable/cluster/ClusterMachine.js +126 -0
  113. package/dist/unstable/cluster/ClusterMachine.js.map +1 -0
  114. package/dist/{cluster.js → unstable/cluster/index.d.ts} +1 -1
  115. package/dist/unstable/cluster/index.d.ts.map +1 -0
  116. package/dist/{cluster.d.ts → unstable/cluster/index.js} +1 -1
  117. package/dist/unstable/cluster/index.js.map +1 -0
  118. package/dist/{AtomMachine.d.ts → unstable/reactivity/AtomMachine.d.ts} +35 -20
  119. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -0
  120. package/dist/unstable/reactivity/AtomMachine.js +113 -0
  121. package/dist/unstable/reactivity/AtomMachine.js.map +1 -0
  122. package/dist/{reactivity.js → unstable/reactivity/index.d.ts} +1 -1
  123. package/dist/unstable/reactivity/index.d.ts.map +1 -0
  124. package/dist/{reactivity.d.ts → unstable/reactivity/index.js} +1 -1
  125. package/dist/unstable/reactivity/index.js.map +1 -0
  126. package/docs/agent-guide.md +169 -31
  127. package/package.json +19 -10
  128. package/dist/AtomMachine.d.ts.map +0 -1
  129. package/dist/AtomMachine.js.map +0 -1
  130. package/dist/ClusterMachine.d.ts.map +0 -1
  131. package/dist/ClusterMachine.js.map +0 -1
  132. package/dist/cluster.d.ts.map +0 -1
  133. package/dist/cluster.js.map +0 -1
  134. package/dist/internal/machineErrors.d.ts.map +0 -1
  135. package/dist/internal/machineErrors.js.map +0 -1
  136. package/dist/internal/machineModel.d.ts.map +0 -1
  137. package/dist/internal/machineModel.js.map +0 -1
  138. package/dist/internal/machinePlanner.d.ts +0 -74
  139. package/dist/internal/machinePlanner.d.ts.map +0 -1
  140. package/dist/internal/machinePlanner.js +0 -797
  141. package/dist/internal/machinePlanner.js.map +0 -1
  142. package/dist/internal/machineProcess.d.ts.map +0 -1
  143. package/dist/internal/machineProcess.js +0 -181
  144. package/dist/internal/machineProcess.js.map +0 -1
  145. package/dist/internal/machineRuntime.d.ts.map +0 -1
  146. package/dist/internal/machineRuntime.js +0 -365
  147. package/dist/internal/machineRuntime.js.map +0 -1
  148. package/dist/reactivity.d.ts.map +0 -1
  149. package/dist/reactivity.js.map +0 -1
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Effect-native command-model testing for live machine references.
3
+ *
4
+ * @since 4.0.0
5
+ */
6
+ import * as Cause from "effect/Cause";
7
+ import * as Data from "effect/Data";
8
+ import * as Deferred from "effect/Deferred";
9
+ import * as Duration from "effect/Duration";
10
+ import * as Effect from "effect/Effect";
11
+ import * as Inspectable from "effect/Inspectable";
12
+ import * as Queue from "effect/Queue";
13
+ import * as Stream from "effect/Stream";
14
+ import { FastCheck, TestClock } from "effect/testing";
15
+ import * as Machine from "../../../Machine.js";
16
+ import { toArbitraryWithReport } from "./arbitrary.js";
17
+ /**
18
+ * Constructs a command that sends one public event.
19
+ *
20
+ * @category constructors
21
+ * @since 4.0.0
22
+ */
23
+ export const sendCommand = (event) => ({
24
+ _tag: "Send",
25
+ event
26
+ });
27
+ /**
28
+ * Constructs a command that advances Effect's `TestClock`.
29
+ *
30
+ * @category constructors
31
+ * @since 4.0.0
32
+ */
33
+ export const advanceCommand = (duration) => ({
34
+ _tag: "Advance",
35
+ duration
36
+ });
37
+ /**
38
+ * Constructs an idempotent command that stops the machine.
39
+ *
40
+ * @category constructors
41
+ * @since 4.0.0
42
+ */
43
+ export const stopCommand = () => ({ _tag: "Stop" });
44
+ /**
45
+ * Constructs a no-op command used to synchronize with work enqueued by earlier
46
+ * commands. Its behavior is selected by the reference-model step.
47
+ *
48
+ * @category constructors
49
+ * @since 4.0.0
50
+ */
51
+ export const checkpointCommand = (label) => ({
52
+ _tag: "Checkpoint",
53
+ label
54
+ });
55
+ /**
56
+ * Constructors for runtime synchronization policies.
57
+ *
58
+ * @category constructors
59
+ * @since 4.0.0
60
+ */
61
+ export const RuntimeSynchronization = {
62
+ none: { _tag: "None" },
63
+ current: { _tag: "Current" },
64
+ next: { _tag: "Next" },
65
+ until: (predicate) => ({ _tag: "Until", predicate })
66
+ };
67
+ /**
68
+ * Failure raised when an expected public change stream observation is absent.
69
+ *
70
+ * @category errors
71
+ * @since 4.0.0
72
+ */
73
+ export class RuntimeObservationError extends Data.TaggedError("MachineTestRuntimeObservationError") {
74
+ }
75
+ /**
76
+ * A typed command-model failure retaining the successfully checked prefix.
77
+ *
78
+ * @category errors
79
+ * @since 4.0.0
80
+ */
81
+ export class RuntimeCommandFailure extends Data.TaggedError("MachineTestRuntimeCommandFailure") {
82
+ }
83
+ const makeFailure = (options) => new RuntimeCommandFailure({
84
+ ...options,
85
+ prefix: options.prefix.slice(),
86
+ attempted: options.attempted
87
+ });
88
+ const executeCommand = (ref, command) => {
89
+ switch (command._tag) {
90
+ case "Send":
91
+ return ref.send(command.event).pipe(Effect.match({
92
+ onFailure: (error) => ({ _tag: "SendRejected", error }),
93
+ onSuccess: () => ({ _tag: "SendAccepted" })
94
+ }));
95
+ case "Advance":
96
+ return TestClock.adjust(command.duration).pipe(Effect.as({ _tag: "ClockAdvanced" }));
97
+ case "Stop":
98
+ return ref.stop.pipe(Effect.as({ _tag: "Stopped" }));
99
+ case "Checkpoint":
100
+ return Effect.succeed({ _tag: "Checkpoint" });
101
+ }
102
+ };
103
+ const synchronize = (ref, queue, policy, index, timeout) => {
104
+ const wait = (synchronization, effect) => TestClock.withLive(effect.pipe(Effect.timeout(timeout))).pipe(Effect.mapError((cause) => cause instanceof RuntimeObservationError
105
+ ? cause
106
+ : new RuntimeObservationError({
107
+ index,
108
+ synchronization,
109
+ reason: "timeout",
110
+ message: `timed out after ${Duration.toMillis(timeout)}ms waiting for the expected published snapshot`
111
+ })));
112
+ switch (policy._tag) {
113
+ case "None":
114
+ return Effect.succeed({ snapshot: undefined, published: [] });
115
+ case "Current":
116
+ return ref.snapshot.pipe(Effect.map((snapshot) => ({ snapshot, published: [] })));
117
+ case "Next":
118
+ return wait("Next", Queue.take(queue).pipe(Effect.flatMap((entry) => entry._tag === "Snapshot"
119
+ ? Effect.succeed({ snapshot: entry.snapshot, published: [entry.snapshot] })
120
+ : Effect.fail(new RuntimeObservationError({
121
+ index,
122
+ synchronization: "Next",
123
+ reason: "ended",
124
+ message: "the machine changes stream ended before publishing the expected snapshot"
125
+ })))));
126
+ case "Until":
127
+ return wait("Until", Effect.gen(function* () {
128
+ const published = [];
129
+ while (true) {
130
+ const entry = yield* Queue.take(queue);
131
+ if (entry._tag === "End") {
132
+ return yield* Effect.fail(new RuntimeObservationError({
133
+ index,
134
+ synchronization: "Until",
135
+ reason: "ended",
136
+ message: "the machine changes stream ended before a published snapshot matched the predicate"
137
+ }));
138
+ }
139
+ published.push(entry.snapshot);
140
+ if (policy.predicate(entry.snapshot)) {
141
+ return { snapshot: entry.snapshot, published };
142
+ }
143
+ }
144
+ }));
145
+ }
146
+ };
147
+ /**
148
+ * Runs typed commands against a live `MachineRef` and checks them against a
149
+ * supplied Effect-native reference model.
150
+ *
151
+ * The runner observes only public `MachineRef` behavior. In particular, a
152
+ * successful send means enqueue acceptance, not completed processing. A model
153
+ * must request `Next`/`Until` only when it predicts a publication, or use an
154
+ * explicit checkpoint to drain previously enqueued work. Machine emissions can
155
+ * be captured by the runtime service used by the machine and returned from the
156
+ * optional `inspect` effect.
157
+ *
158
+ * Typed failures and defects from model transitions, command execution,
159
+ * inspection, and assertions are retained as full `Cause` values. A cause
160
+ * containing only interruption is propagated as interruption so cancelling a
161
+ * property run cannot be mistaken for a machine counterexample.
162
+ *
163
+ * @category constructors
164
+ * @since 4.0.0
165
+ */
166
+ export const runRuntimeCommands = (ref, commands, options) => Effect.scoped(Effect.gen(function* () {
167
+ const sequence = Array.from(commands);
168
+ const observationTimeout = options.observationTimeout ?? "1 second";
169
+ const observationTimeoutMillis = Duration.toMillis(observationTimeout);
170
+ if (!Number.isFinite(observationTimeoutMillis) || observationTimeoutMillis < 0) {
171
+ return yield* Effect.die(new Error("MachineTest.runRuntimeCommands expected observationTimeout to be a finite non-negative duration"));
172
+ }
173
+ const changes = yield* Queue.unbounded();
174
+ const ready = yield* Deferred.make();
175
+ yield* ref.changes.pipe(Stream.runForEach((snapshot) => Queue.offer(changes, { _tag: "Snapshot", snapshot }).pipe(Effect.andThen(Deferred.succeed(ready, undefined)), Effect.asVoid)), Effect.ensuring(Deferred.succeed(ready, undefined).pipe(Effect.andThen(Queue.offer(changes, { _tag: "End" })), Effect.asVoid)), Effect.forkScoped({ startImmediately: true }));
176
+ yield* Deferred.await(ready);
177
+ const initialEntry = yield* Queue.take(changes);
178
+ const initial = initialEntry._tag === "Snapshot" ? initialEntry.snapshot : yield* ref.snapshot;
179
+ const records = [];
180
+ let model = options.initialModel;
181
+ let lastSynchronized = initial;
182
+ let outstandingWorkUnknown = false;
183
+ const capture = (options) => Effect.catchCause(Effect.suspend(options.effect), (cause) => Cause.hasInterruptsOnly(cause)
184
+ ? Effect.failCause(cause)
185
+ : Effect.fail(makeFailure({
186
+ phase: options.phase,
187
+ index: options.index,
188
+ command: options.command,
189
+ cause,
190
+ prefix: records,
191
+ ...(options.attempted === undefined ? {} : { attempted: options.attempted })
192
+ })));
193
+ for (let index = 0; index < sequence.length; index++) {
194
+ const command = sequence[index];
195
+ const step = yield* capture({
196
+ phase: "model",
197
+ index,
198
+ command,
199
+ effect: () => options.transition(model, command, index)
200
+ });
201
+ model = step.model;
202
+ const result = yield* capture({
203
+ phase: "execution",
204
+ index,
205
+ command,
206
+ effect: () => executeCommand(ref, command)
207
+ });
208
+ const attemptedBeforeObservation = {
209
+ index,
210
+ command,
211
+ model,
212
+ expected: step.expected,
213
+ actual: {
214
+ result,
215
+ snapshot: undefined,
216
+ published: [],
217
+ inspected: undefined
218
+ }
219
+ };
220
+ const synchronized = yield* capture({
221
+ phase: "observation",
222
+ index,
223
+ command,
224
+ effect: () => synchronize(ref, changes, step.synchronize, index, observationTimeout),
225
+ attempted: attemptedBeforeObservation
226
+ });
227
+ const terminal = synchronized.snapshot !== undefined && synchronized.snapshot.status !== "active";
228
+ const previouslyOutstanding = outstandingWorkUnknown;
229
+ switch (step.synchronize._tag) {
230
+ case "None":
231
+ if (command._tag === "Advance" || command._tag === "Stop" ||
232
+ (command._tag === "Send" && result._tag === "SendAccepted"))
233
+ outstandingWorkUnknown = true;
234
+ break;
235
+ case "Next":
236
+ if (synchronized.snapshot !== undefined)
237
+ lastSynchronized = synchronized.snapshot;
238
+ outstandingWorkUnknown = terminal
239
+ ? false
240
+ : previouslyOutstanding || command._tag === "Advance" ||
241
+ (command._tag === "Send" && result._tag === "SendAccepted");
242
+ break;
243
+ case "Until":
244
+ if (synchronized.snapshot !== undefined)
245
+ lastSynchronized = synchronized.snapshot;
246
+ outstandingWorkUnknown = false;
247
+ break;
248
+ case "Current":
249
+ if (terminal)
250
+ outstandingWorkUnknown = false;
251
+ if (!outstandingWorkUnknown && synchronized.snapshot !== undefined)
252
+ lastSynchronized = synchronized.snapshot;
253
+ break;
254
+ }
255
+ const inspectionContext = {
256
+ index,
257
+ command,
258
+ result,
259
+ ref,
260
+ snapshot: synchronized.snapshot,
261
+ published: synchronized.published
262
+ };
263
+ const attemptedBeforeInspection = {
264
+ ...attemptedBeforeObservation,
265
+ actual: {
266
+ result,
267
+ snapshot: synchronized.snapshot,
268
+ published: synchronized.published,
269
+ inspected: undefined
270
+ }
271
+ };
272
+ const inspected = options.inspect === undefined
273
+ ? undefined
274
+ : yield* capture({
275
+ phase: "inspection",
276
+ index,
277
+ command,
278
+ effect: () => options.inspect(inspectionContext),
279
+ attempted: attemptedBeforeInspection
280
+ });
281
+ const actual = {
282
+ result,
283
+ snapshot: synchronized.snapshot,
284
+ published: synchronized.published,
285
+ inspected
286
+ };
287
+ const record = {
288
+ index,
289
+ command,
290
+ model,
291
+ expected: step.expected,
292
+ actual
293
+ };
294
+ yield* capture({
295
+ phase: "assertion",
296
+ index,
297
+ command,
298
+ effect: () => options.assert({
299
+ ...inspectionContext,
300
+ model,
301
+ expected: step.expected,
302
+ actual
303
+ }),
304
+ attempted: record
305
+ });
306
+ records.push(record);
307
+ }
308
+ return {
309
+ commands: sequence,
310
+ initial,
311
+ records,
312
+ finalModel: model,
313
+ final: lastSynchronized,
314
+ synchronized: !outstandingWorkUnknown
315
+ };
316
+ }));
317
+ const validateCommandLength = (name, value) => {
318
+ if (!Number.isSafeInteger(value) || value < 0) {
319
+ throw new Error(`MachineTest.runtimeCommands expected ${name} to be a non-negative safe integer`);
320
+ }
321
+ };
322
+ /**
323
+ * Derives a shrinkable command sequence from public event schemas and explicit
324
+ * clock/stop/checkpoint command choices.
325
+ *
326
+ * This deliberately returns ordinary Effect FastCheck arbitraries instead of
327
+ * adapting the runner through `asyncModelRun`: the latter requires Promise
328
+ * callbacks and would erase Effect error and service channels.
329
+ *
330
+ * @category constructors
331
+ * @since 4.0.0
332
+ */
333
+ export const runtimeCommands = (machine, options = {}) => {
334
+ const minCommands = options.minCommands ?? 0;
335
+ const maxCommands = options.maxCommands ?? 50;
336
+ validateCommandLength("minCommands", minCommands);
337
+ validateCommandLength("maxCommands", maxCommands);
338
+ if (minCommands > maxCommands) {
339
+ throw new Error("MachineTest.runtimeCommands expected minCommands to be less than or equal to maxCommands");
340
+ }
341
+ const reports = [];
342
+ const eventArbitraries = options.eventArbitrary === undefined
343
+ ? machine.events.map((schema) => {
344
+ const derived = toArbitraryWithReport(schema);
345
+ reports.push(derived.report);
346
+ return derived.value;
347
+ })
348
+ : [];
349
+ const eventArbitrary = options.eventArbitrary ?? (eventArbitraries.length === 0
350
+ ? undefined
351
+ : FastCheck.oneof(...eventArbitraries));
352
+ const commandArbitraries = [];
353
+ if (eventArbitrary !== undefined)
354
+ commandArbitraries.push(eventArbitrary.map(sendCommand));
355
+ if (options.includeAdvance !== false) {
356
+ const advanceArbitrary = options.advanceArbitrary ?? FastCheck.nat({ max: 60_000 });
357
+ commandArbitraries.push(advanceArbitrary.map(advanceCommand));
358
+ }
359
+ if (options.includeStop !== false)
360
+ commandArbitraries.push(FastCheck.constant(stopCommand()));
361
+ if (options.includeCheckpoint !== false)
362
+ commandArbitraries.push(FastCheck.constant(checkpointCommand()));
363
+ commandArbitraries.push(...options.additionalCommands ?? []);
364
+ if (commandArbitraries.length === 0) {
365
+ if (minCommands > 0) {
366
+ throw new Error("MachineTest.runtimeCommands cannot generate a non-empty command sequence without commands");
367
+ }
368
+ return {
369
+ arbitrary: FastCheck.constant([]),
370
+ diagnostics: {
371
+ events: options.eventArbitrary !== undefined ? "override" : eventArbitraries.length === 0 ? "none" : "schema",
372
+ schemaReports: reports,
373
+ includesAdvance: false,
374
+ includesStop: false,
375
+ includesCheckpoint: false
376
+ }
377
+ };
378
+ }
379
+ return {
380
+ arbitrary: FastCheck.array(FastCheck.oneof(...commandArbitraries), {
381
+ minLength: minCommands,
382
+ maxLength: maxCommands
383
+ }),
384
+ diagnostics: {
385
+ events: options.eventArbitrary !== undefined ? "override" : eventArbitraries.length === 0 ? "none" : "schema",
386
+ schemaReports: reports,
387
+ includesAdvance: options.includeAdvance !== false,
388
+ includesStop: options.includeStop !== false,
389
+ includesCheckpoint: options.includeCheckpoint !== false
390
+ }
391
+ };
392
+ };
393
+ /**
394
+ * Formats a runtime transcript or failure as replayable line-oriented evidence.
395
+ *
396
+ * @category formatting
397
+ * @since 4.0.0
398
+ */
399
+ export const formatRuntimeTranscript = (value) => {
400
+ const failure = value instanceof RuntimeCommandFailure;
401
+ const records = failure ? value.prefix : value.records;
402
+ const lines = [
403
+ `commands: ${Inspectable.toStringUnknown(failure ?
404
+ [
405
+ ...value.prefix.map((record) => record.command),
406
+ value.command
407
+ ] :
408
+ value.commands, 0)}`
409
+ ];
410
+ for (const record of records) {
411
+ lines.push(`command ${record.index}: command=${Inspectable.toStringUnknown(record.command, 0)} ` +
412
+ `model=${Inspectable.toStringUnknown(record.model, 0)} ` +
413
+ `expected=${Inspectable.toStringUnknown(record.expected, 0)} ` +
414
+ `result=${Inspectable.toStringUnknown(record.actual.result, 0)} ` +
415
+ `snapshot=${Inspectable.toStringUnknown(record.actual.snapshot, 0)} ` +
416
+ `published=${Inspectable.toStringUnknown(record.actual.published, 0)} ` +
417
+ `inspected=${Inspectable.toStringUnknown(record.actual.inspected, 0)}`);
418
+ }
419
+ if (failure) {
420
+ if (value.attempted !== undefined) {
421
+ lines.push(`attempted ${value.attempted.index}: command=${Inspectable.toStringUnknown(value.attempted.command, 0)} ` +
422
+ `model=${Inspectable.toStringUnknown(value.attempted.model, 0)} ` +
423
+ `expected=${Inspectable.toStringUnknown(value.attempted.expected, 0)} ` +
424
+ `result=${Inspectable.toStringUnknown(value.attempted.actual.result, 0)} ` +
425
+ `snapshot=${Inspectable.toStringUnknown(value.attempted.actual.snapshot, 0)} ` +
426
+ `published=${Inspectable.toStringUnknown(value.attempted.actual.published, 0)} ` +
427
+ `inspected=${Inspectable.toStringUnknown(value.attempted.actual.inspected, 0)}`);
428
+ }
429
+ lines.push(`failure: phase=${value.phase} index=${value.index} command=${Inspectable.toStringUnknown(value.command, 0)} ` +
430
+ `cause=${Inspectable.toStringUnknown(value.cause, 0)}`);
431
+ }
432
+ else {
433
+ lines.push(`final: synchronized=${String(value.synchronized)} snapshot=${Inspectable.toStringUnknown(value.final, 0)}`);
434
+ }
435
+ return lines.join("\n");
436
+ };
437
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/internal/testing/machine/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Property-based scenario generation and planner trace utilities.
3
+ *
4
+ * @since 4.0.0
5
+ */
6
+ import * as Effect from "effect/Effect";
7
+ import * as Machine from "../../../Machine.js";
8
+ import type { Coverage, ObservedGraph, RunError, RunFailure, RunServices, Scenario, ScenarioOptions, Scenarios, Trace, VerificationViolation, VerifyOptions } from "../../../testing/MachineTest.js";
9
+ import type { EnsureExecutable } from "../../machine/readiness.js";
10
+ import type { FiniteModel } from "./finiteModel.js";
11
+ import * as ReferenceModel from "./referenceModel.js";
12
+ export { advanceCommand, checkpointCommand, formatRuntimeTranscript, runRuntimeCommands, type RuntimeAssertionContext, type RuntimeCommand, type RuntimeCommandActual, RuntimeCommandFailure, type RuntimeCommandRecord, type RuntimeCommandResult, type RuntimeCommands, runtimeCommands, type RuntimeCommandsDiagnostics, type RuntimeCommandsOptions, type RuntimeInspectionContext, type RuntimeModelOptions, type RuntimeModelStep, RuntimeObservationError, RuntimeSynchronization, type RuntimeTranscript, sendCommand, stopCommand } from "./runtime.js";
13
+ export type { SchemaArbitraryOpaqueFilterWarning, SchemaArbitraryReport, SchemaArbitraryWarning } from "./arbitrary.js";
14
+ export { compileModel, type FiniteAtomicState, type FiniteAutomaticTransition, type FiniteCompoundState, type FiniteEventTransition, type FiniteFinalState, type FiniteHistoryMutation, type FiniteHistoryScenario, type FiniteHistoryState, type FiniteHistoryTransfer, type FiniteModel, type FiniteModelDiagnostics, type FiniteModelOptions, type FiniteModels, finiteModels, type FiniteParallelState, type FiniteState, type FiniteTransition, type FiniteTransitionTrigger } from "./finiteModel.js";
15
+ export { ModelVerificationError, type ModelVerificationField, type ModelVerificationLocation, type ModelVerificationMismatch, type ReferenceCompletion, type ReferenceHistoryRecord, type ReferenceInitialStep, type ReferenceMicrostep, type ReferenceState, type ReferenceStateValue, type ReferenceStep, type ReferenceTrace, type ReferenceTransition } from "./referenceModel.js";
16
+ export declare const interpretModel: (model: FiniteModel, events: ReadonlyArray<string>) => ReferenceModel.ReferenceTrace;
17
+ type AnyMachine = Machine.Machine.Any;
18
+ type ReadyMachine<M extends AnyMachine> = M & EnsureExecutable<Machine.Machine.States<M>, Machine.Machine.UnhandledStates<M>, Machine.Machine.OutputStates<M>>;
19
+ export declare const scenarios: <M extends AnyMachine>(machine: M, options?: ScenarioOptions<M>) => Scenarios<M>;
20
+ export declare const verifyModel: <M extends AnyMachine>(model: FiniteModel, actualTrace: Trace<M>) => Effect.Effect<void, ReferenceModel.ModelVerificationError>;
21
+ export declare const run: <M extends AnyMachine>(machine: ReadyMachine<M>, scenario: Scenario<M>) => Effect.Effect<Trace<M>, RunFailure<RunError<M>, M>, RunServices<M>>;
22
+ export declare const coverage: <M extends AnyMachine>(machine: M, traceOrTraces: Trace<M> | ReadonlyArray<Trace<M>>) => Coverage<M>;
23
+ export declare const observedGraph: <M extends AnyMachine>(machine: M, traceOrTraces: Trace<M> | ReadonlyArray<Trace<M>>) => Effect.Effect<ObservedGraph<M>, Machine.MachineSchemaEncodeError, Machine.Machine.SnapshotEncodingServices<Machine.Machine.States<M>>>;
24
+ declare const VerificationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
25
+ readonly _tag: "MachineTestVerificationError";
26
+ } & Readonly<A>;
27
+ export declare class VerificationError extends VerificationError_base<{
28
+ readonly violations: ReadonlyArray<VerificationViolation>;
29
+ }> {
30
+ }
31
+ export declare const verify: <M extends AnyMachine>(machine: M, trace: Trace<M>, options?: VerifyOptions) => Effect.Effect<void, VerificationError>;
32
+ export declare const formatTrace: <M extends AnyMachine, Cause>(trace: Trace<M> | RunFailure<Cause, M>) => string;
33
+ //# sourceMappingURL=verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../../src/internal/testing/machine/verification.ts"],"names":[],"mappings":"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"}