@typeonce/effect-machine 0.18.0 → 0.19.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/README.md +54 -16
- package/dist/Machine.d.ts +300 -30
- package/dist/Machine.d.ts.map +1 -1
- package/dist/Machine.js +10 -6
- package/dist/Machine.js.map +1 -1
- package/dist/internal/machine/cluster.d.ts +2 -2
- package/dist/internal/machine/cluster.d.ts.map +1 -1
- package/dist/internal/machine/cluster.js +2 -1
- package/dist/internal/machine/cluster.js.map +1 -1
- package/dist/internal/machine/serialization.d.ts.map +1 -1
- package/dist/internal/machine/serialization.js +75 -18
- package/dist/internal/machine/serialization.js.map +1 -1
- package/dist/internal/testing/machine/verification.d.ts +1 -1
- package/dist/internal/testing/machine/verification.d.ts.map +1 -1
- package/dist/internal/testing/machine/verification.js +9 -6
- package/dist/internal/testing/machine/verification.js.map +1 -1
- package/dist/testing/MachineTest.d.ts +9 -6
- package/dist/testing/MachineTest.d.ts.map +1 -1
- package/dist/testing/MachineTest.js +5 -3
- package/dist/testing/MachineTest.js.map +1 -1
- package/dist/unstable/cluster/ClusterMachine.d.ts +22 -2
- package/dist/unstable/cluster/ClusterMachine.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterMachine.js +4 -0
- package/dist/unstable/cluster/ClusterMachine.js.map +1 -1
- package/docs/agent-guide.md +84 -17
- package/package.json +4 -4
- package/src/Machine.ts +315 -33
- package/src/internal/machine/cluster.ts +4 -1
- package/src/internal/machine/serialization.ts +100 -25
- package/src/internal/testing/machine/verification.ts +15 -10
- package/src/testing/MachineTest.ts +9 -6
- package/src/unstable/cluster/ClusterMachine.ts +51 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MachineTest.js","sourceRoot":"","sources":["../../src/testing/MachineTest.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MachineTest.js","sourceRoot":"","sources":["../../src/testing/MachineTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -133,7 +133,7 @@ export { Accepted };
|
|
|
133
133
|
* @category models
|
|
134
134
|
* @since 0.4.0
|
|
135
135
|
*/
|
|
136
|
-
export declare const RejectionReason: Schema.Literals<readonly ["MachineIdMismatch", "VersionMismatch", "InvalidCheckpoint", "UnsupportedProcessLocal", "TransitionFailure", "PersistenceFailure", "EmissionFailure"]>;
|
|
136
|
+
export declare const RejectionReason: Schema.Literals<readonly ["MachineIdMismatch", "VersionMismatch", "InvalidCheckpoint", "UnsupportedProcessLocal", "TransitionFailure", "SnapshotEncodeFailure", "PersistenceFailure", "EmissionFailure"]>;
|
|
137
137
|
/**
|
|
138
138
|
* Type of {@link RejectionReason}.
|
|
139
139
|
*
|
|
@@ -195,6 +195,23 @@ export interface ClusterMachine<in out Type extends string, in out M extends Mac
|
|
|
195
195
|
}
|
|
196
196
|
type MachineServices<M extends Machine.Machine.Any> = ExcludeCompatibleRuntime<Machine.ExecutionServices<Machine.Machine.Services<M> | Machine.Machine.InitialServices<M>>, Machine.Machine.Event<M>, Machine.Machine.Emit<M>> | Machine.Machine.SnapshotDecodingServices<Machine.Machine.States<M>> | Machine.Machine.SnapshotEncodingServices<Machine.Machine.States<M>>;
|
|
197
197
|
type IsAny<A> = 0 extends (1 & A) ? true : false;
|
|
198
|
+
type IsNever<A> = [A] extends [never] ? true : false;
|
|
199
|
+
type IsUnknown<A> = IsAny<A> extends true ? false : unknown extends A ? true : false;
|
|
200
|
+
type IsJsonEncoded<S extends Schema.Top> = IsAny<S["Encoded"]> extends true ? false : IsNever<S["Encoded"]> extends true ? false : IsUnknown<S["Encoded"]> extends true ? false : [S["Encoded"]] extends [Schema.Json] ? true : false;
|
|
201
|
+
type NonJsonState<States extends Machine.Machine.StateSchemas> = Machine.Machine.ValuedStateIdentifier<States> extends infer StateId ? StateId extends Machine.Machine.ValuedStateIdentifier<States> ? IsJsonEncoded<Machine.Machine.SchemaByIdentifier<States, StateId>> extends true ? never : StateId : never : never;
|
|
202
|
+
type NonJsonOutput<States extends Machine.Machine.StateSchemas> = Machine.Machine.DeclaredOutputState<States> extends infer StateId ? StateId extends Machine.Machine.DeclaredOutputState<States> ? Machine.Machine.NodeByIdentifier<States, StateId> extends {
|
|
203
|
+
readonly output: infer Output extends Schema.Top;
|
|
204
|
+
} ? IsJsonEncoded<Output> extends true ? never : StateId : never : never : never;
|
|
205
|
+
type NonJsonInputEvent<Events extends ReadonlyArray<Machine.Machine.TaggedSchema>> = {
|
|
206
|
+
readonly [Index in keyof Events]: Events[Index] extends infer EventSchema extends Machine.Machine.TaggedSchema ? IsJsonEncoded<EventSchema> extends true ? never : Machine.Machine.TagOf<EventSchema> : never;
|
|
207
|
+
}[number];
|
|
208
|
+
type EnsureJsonEncoded<States extends Machine.Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.Machine.TaggedSchema>> = [NonJsonState<States> | NonJsonOutput<States> | NonJsonInputEvent<InputEvents>] extends [never] ? unknown : {
|
|
209
|
+
readonly "~effect/ClusterMachine/NonJsonEncoded": {
|
|
210
|
+
readonly states: NonJsonState<States>;
|
|
211
|
+
readonly outputs: NonJsonOutput<States>;
|
|
212
|
+
readonly inputEvents: NonJsonInputEvent<InputEvents>;
|
|
213
|
+
};
|
|
214
|
+
};
|
|
198
215
|
type ExcludeCompatibleRuntime<Requirements, Events, Emits> = Requirements extends Machine.Runtime.Requirement<infer RequiredEvents, infer RequiredEmits> ? IsAny<Requirements> extends true ? Requirements : [RequiredEvents] extends [Events] ? [RequiredEmits] extends [Emits] ? never : Requirements : Requirements : Requirements;
|
|
199
216
|
/**
|
|
200
217
|
* Creates an in-memory Cluster machine checkpoint store.
|
|
@@ -243,6 +260,9 @@ export declare const layerMemory: Layer.Layer<Storage>;
|
|
|
243
260
|
* rejected. Planning-time raised events remain part of the current macrostep.
|
|
244
261
|
* Arbitrary action effects may run again after a crash before checkpoint
|
|
245
262
|
* commit, so the bridge does not provide exactly-once external effects.
|
|
263
|
+
* State values, completion outputs, and public input events must declare
|
|
264
|
+
* JSON-compatible encoded representations. Local and internal event protocols
|
|
265
|
+
* remain unrestricted because they do not cross the Cluster boundary.
|
|
246
266
|
*
|
|
247
267
|
* **Example**
|
|
248
268
|
*
|
|
@@ -268,7 +288,7 @@ export declare const layerMemory: Layer.Layer<Storage>;
|
|
|
268
288
|
* @category constructors
|
|
269
289
|
* @since 0.4.0
|
|
270
290
|
*/
|
|
271
|
-
export declare const make: <const Type extends string, States extends Machine.Machine.StateSchemas, Events extends ReadonlyArray<Machine.Machine.TaggedSchema>, Input extends Schema.Top, UnhandledStates extends Machine.Machine.StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends Machine.Machine.StateIdentifier<States>, Output, Emits extends ReadonlyArray<Machine.Machine.TaggedSchema>, OutputStates extends Machine.Machine.StateIdentifier<States>, InputEvents extends ReadonlyArray<Machine.Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.Machine.TaggedSchema> = readonly []>(type: Type, machine: Machine.Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.Machine.RootCompatible<ParentEvents>, options: {
|
|
291
|
+
export declare const make: <const Type extends string, States extends Machine.Machine.StateSchemas, Events extends ReadonlyArray<Machine.Machine.TaggedSchema>, Input extends Schema.Top, UnhandledStates extends Machine.Machine.StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends Machine.Machine.StateIdentifier<States>, Output, Emits extends ReadonlyArray<Machine.Machine.TaggedSchema>, OutputStates extends Machine.Machine.StateIdentifier<States>, InputEvents extends ReadonlyArray<Machine.Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.Machine.TaggedSchema> = readonly []>(type: Type, machine: Machine.Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates> & Machine.Machine.RootCompatible<ParentEvents> & EnsureJsonEncoded<States, InputEvents>, options: {
|
|
272
292
|
readonly version: string;
|
|
273
293
|
}, ...input: [...Machine.Machine.InputArgs<Input>]) => ClusterMachine<Type, Machine.Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, ExcludeCompatibleRuntime<Machine.ExecutionServices<R | InitialR>, Machine.Machine.EventOf<Events>, Machine.Machine.EmitOf<Emits>> | Machine.Machine.SnapshotDecodingServices<States> | Machine.Machine.SnapshotEncodingServices<States>>;
|
|
274
294
|
//# sourceMappingURL=ClusterMachine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusterMachine.d.ts","sourceRoot":"","sources":["../../../src/unstable/cluster/ClusterMachine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,KAAK,QAAQ,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAEhD,KAAK,SAAS,GAAG,SAAS,CAAC,SAAS,CAAA;AAEpC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAE1B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAE7B,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAA;CACnD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAE9C,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,YAAY;qBACR,YAAY,CAAC,SAAS;qBACtB,YAAY,CAAC,SAAS;CACtC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,WAAW,YAAY,CAAC;IACpC;;;;;OAKG;IACH,UAAiB,SAAS;QACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;KAC3B;IAED;;;;;OAKG;IACH,UAAiB,SAAS;QACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;KAC3B;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"ClusterMachine.d.ts","sourceRoot":"","sources":["../../../src/unstable/cluster/ClusterMachine.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,7 @@ export const RejectionReason = Schema.Literals([
|
|
|
53
53
|
"InvalidCheckpoint",
|
|
54
54
|
"UnsupportedProcessLocal",
|
|
55
55
|
"TransitionFailure",
|
|
56
|
+
"SnapshotEncodeFailure",
|
|
56
57
|
"PersistenceFailure",
|
|
57
58
|
"EmissionFailure"
|
|
58
59
|
]);
|
|
@@ -118,6 +119,9 @@ export const layerMemory = internal.layerMemory;
|
|
|
118
119
|
* rejected. Planning-time raised events remain part of the current macrostep.
|
|
119
120
|
* Arbitrary action effects may run again after a crash before checkpoint
|
|
120
121
|
* commit, so the bridge does not provide exactly-once external effects.
|
|
122
|
+
* State values, completion outputs, and public input events must declare
|
|
123
|
+
* JSON-compatible encoded representations. Local and internal event protocols
|
|
124
|
+
* remain unrestricted because they do not cross the Cluster boundary.
|
|
121
125
|
*
|
|
122
126
|
* **Example**
|
|
123
127
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusterMachine.js","sourceRoot":"","sources":["../../../src/unstable/cluster/ClusterMachine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,QAAQ,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AA4D/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,GAA2B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChE,SAAS,EAAE,GAA2B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;CACjE,CAAA;AA8BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7C,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,yBAAyB;IACzB,mBAAmB;IACnB,oBAAoB;IACpB,iBAAiB;CAClB,CAAC,CAAA;AAUF;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"ClusterMachine.js","sourceRoot":"","sources":["../../../src/unstable/cluster/ClusterMachine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,QAAQ,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AA4D/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,GAA2B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChE,SAAS,EAAE,GAA2B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;CACjE,CAAA;AA8BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7C,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,yBAAyB;IACzB,mBAAmB;IACnB,uBAAuB;IACvB,oBAAoB;IACpB,iBAAiB;CAClB,CAAC,CAAA;AAUF;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AAuH5D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsC,QAAQ,CAAC,UAAU,CAAA;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAyB,QAAQ,CAAC,WAAW,CAAA;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,CAAC,MAAM,IAAI,GAmEb,QAAQ,CAAC,IAAI,CAAA"}
|
package/docs/agent-guide.md
CHANGED
|
@@ -54,12 +54,15 @@ testing, or simulation variant.
|
|
|
54
54
|
|
|
55
55
|
```ts
|
|
56
56
|
const State = Schema.TaggedUnion({
|
|
57
|
-
Idle: {},
|
|
58
57
|
Saving: { draft: Draft },
|
|
59
58
|
Failed: { message: Schema.String }
|
|
60
59
|
})
|
|
61
60
|
|
|
62
|
-
const States = Machine.states(
|
|
61
|
+
const States = Machine.states({
|
|
62
|
+
Idle: {},
|
|
63
|
+
Saving: State.cases.Saving,
|
|
64
|
+
Failed: State.cases.Failed
|
|
65
|
+
})
|
|
63
66
|
export const Event = Machine.events(
|
|
64
67
|
Schema.TaggedUnion({
|
|
65
68
|
Save: {}
|
|
@@ -140,6 +143,23 @@ its extra control is required:
|
|
|
140
143
|
|
|
141
144
|
## Atomic, compound, parallel, and history states
|
|
142
145
|
|
|
146
|
+
### Topology is a validity boundary
|
|
147
|
+
|
|
148
|
+
Design the state tree so invalid domain situations cannot be constructed. A
|
|
149
|
+
parallel node is not merely a convenient grouping of related concepts: it
|
|
150
|
+
declares the Cartesian product of its regions. Every combination must be
|
|
151
|
+
meaningful in snapshots, explicit targets, decoding, and resume.
|
|
152
|
+
|
|
153
|
+
If a handler reads a sibling region to decide whether entering its target is
|
|
154
|
+
legal, treat that as a topology smell and try a compound hierarchy first. Do
|
|
155
|
+
not move the same invariant into a disabled UI control, redundant event field,
|
|
156
|
+
or invoked-service failure. Cross-region reads remain useful for coordinating
|
|
157
|
+
genuinely independent regions and for projecting snapshots into views.
|
|
158
|
+
|
|
159
|
+
Place an invoked Effect or resource-dependent state beneath the state that
|
|
160
|
+
guarantees the resource exists. Exiting the owner should structurally exit and
|
|
161
|
+
interrupt all dependent work.
|
|
162
|
+
|
|
143
163
|
### Inline topology by default; extract only repeated states
|
|
144
164
|
|
|
145
165
|
Prefer writing the complete topology inline in `Machine.states`. A one-off
|
|
@@ -234,7 +254,8 @@ machine-bound forms over `.cases.Case.Type`, `typeof States.states`, or
|
|
|
234
254
|
composing `Machine.Machine.States` with raw-tree path extractors.
|
|
235
255
|
|
|
236
256
|
An active state does not need a schema unless it owns data. Omit `schema` for
|
|
237
|
-
control-only atomic, compound, parallel, and final states
|
|
257
|
+
control-only atomic, compound, parallel, and final states. In particular, use
|
|
258
|
+
`{}` instead of an empty tagged-union case or tagged class:
|
|
238
259
|
|
|
239
260
|
```ts
|
|
240
261
|
const States = Machine.states({
|
|
@@ -258,11 +279,7 @@ in snapshots. They do not have a state value:
|
|
|
258
279
|
```ts
|
|
259
280
|
Idle: {
|
|
260
281
|
on: {
|
|
261
|
-
Start: (to) =>
|
|
262
|
-
to.full.Form.initial.resolve(({ state, target }) => {
|
|
263
|
-
// state: undefined
|
|
264
|
-
return target.from((form) => form.Editing.from())
|
|
265
|
-
})
|
|
282
|
+
Start: (to) => to.full.Form.initial
|
|
266
283
|
}
|
|
267
284
|
}
|
|
268
285
|
|
|
@@ -277,6 +294,13 @@ also omitted from `ancestors`; an immediate structural containing state is
|
|
|
277
294
|
typed as `undefined`. Add `schema` when a state begins to own data or needs runtime
|
|
278
295
|
validation and persistence for that data.
|
|
279
296
|
|
|
297
|
+
Declare data-bearing states together with the named
|
|
298
|
+
`const State = Schema.TaggedUnion(...)` pattern, then reference `State.cases`
|
|
299
|
+
from the topology. This keeps the state value protocol visible and reusable.
|
|
300
|
+
Use a named `Schema.TaggedClass` instead when a standalone state benefits from
|
|
301
|
+
class identity. Do not bury one-off tagged schema declarations inside
|
|
302
|
+
`Machine.states`.
|
|
303
|
+
|
|
280
304
|
Use an atomic state when no child phase can be active beneath it.
|
|
281
305
|
|
|
282
306
|
Use a compound state when exactly one child phase is active. It must declare an
|
|
@@ -326,6 +350,11 @@ Every parallel region needs an active state in initial and full snapshot
|
|
|
326
350
|
builders. The same rule applies when a local or branch target enters an
|
|
327
351
|
inactive nested parallel state.
|
|
328
352
|
|
|
353
|
+
This is also a semantic product: `Online + Closed`, `Online + Open`,
|
|
354
|
+
`Offline + Closed`, and `Offline + Open` are all valid configurations in the
|
|
355
|
+
example above. If even one combination must be prevented for correctness, use
|
|
356
|
+
a compound hierarchy or redesign the regions.
|
|
357
|
+
|
|
329
358
|
Use `type: "final"` for a terminal leaf in `Machine.states`. A final
|
|
330
359
|
child completes its compound parent. Put `onDone` on that completed parent,
|
|
331
360
|
never on the final leaf. The definition owns the output schema and the handler
|
|
@@ -343,7 +372,7 @@ const States = Machine.states({
|
|
|
343
372
|
const machine = Machine.make({
|
|
344
373
|
states: States.states,
|
|
345
374
|
events: Machine.events(),
|
|
346
|
-
initial: (to) => to.Done()
|
|
375
|
+
initial: (to) => to.Done()
|
|
347
376
|
}).handle({
|
|
348
377
|
Done: {
|
|
349
378
|
output: () => "done"
|
|
@@ -363,6 +392,20 @@ with `.initial`. This is available on top-level state methods under
|
|
|
363
392
|
Open: (to) => to.full.opened.initial.resolve(({ target }) => target.from({ teamId: "team-1" }))
|
|
364
393
|
```
|
|
365
394
|
|
|
395
|
+
Return the `.initial` transition directly when the selected state owns no data
|
|
396
|
+
and the transition has no commands to enqueue:
|
|
397
|
+
|
|
398
|
+
```ts
|
|
399
|
+
Close: (to) => to.full.closed.initial
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
Do not manually reconstruct the declared initial descendants at ordinary entry
|
|
403
|
+
transitions. Reserve explicit descendant builders for deliberately non-default
|
|
404
|
+
configurations and for replacing an already-active parallel root with one
|
|
405
|
+
complete canonical configuration. `Machine.make({ initial })` still constructs
|
|
406
|
+
the first complete snapshot through its initial selector; that selector
|
|
407
|
+
statically restricts a compound node to its declared initial child.
|
|
408
|
+
|
|
366
409
|
The definition-time `.initial` property is a topology value. The exact
|
|
367
410
|
resolver `target` is still a callable runtime builder.
|
|
368
411
|
|
|
@@ -440,11 +483,11 @@ checkout: {
|
|
|
440
483
|
Target it without a value:
|
|
441
484
|
|
|
442
485
|
```ts
|
|
443
|
-
Resume: (to) => to.history.checkout.exact
|
|
486
|
+
Resume: (to) => to.history.checkout.exact
|
|
444
487
|
```
|
|
445
488
|
|
|
446
|
-
Each declared history leaf is a topology value
|
|
447
|
-
|
|
489
|
+
Each declared history leaf is a topology value and can be returned directly
|
|
490
|
+
when no resolver work is needed.
|
|
448
491
|
|
|
449
492
|
Deep history restores the complete remembered subtree and its decoded values.
|
|
450
493
|
Shallow history restores only parent and direct-child values. If the remembered
|
|
@@ -526,8 +569,11 @@ Refresh: (to) =>
|
|
|
526
569
|
to.full.Ready().resolve(({ state, target }) => target.from({ value: state.value }), { reenter: true })
|
|
527
570
|
```
|
|
528
571
|
|
|
529
|
-
When no resolver is needed
|
|
530
|
-
|
|
572
|
+
When no resolver is needed and the selected builder supports zero-argument
|
|
573
|
+
construction, return the selected target directly. This applies the same
|
|
574
|
+
default construction as `target.from()`; the compiler rejects the shorthand
|
|
575
|
+
when state data or nested configuration is required. Append `.reenter()` only
|
|
576
|
+
when restart semantics are intentional:
|
|
531
577
|
|
|
532
578
|
```ts
|
|
533
579
|
Finish: (to) => to.full.Done()
|
|
@@ -624,6 +670,11 @@ Use the existing `States.matches`, `States.get`, `States.getWithParents`, and
|
|
|
624
670
|
selected in one microstep receive the same capture. Synchronous handlers use
|
|
625
671
|
that captured value and cannot consult live runtime state later.
|
|
626
672
|
|
|
673
|
+
Before using a cross-region read to permit or reject a target, verify that all
|
|
674
|
+
combinations of the parallel regions are valid. If the check excludes an
|
|
675
|
+
invalid combination, move the invariant into a compound hierarchy. Observer,
|
|
676
|
+
view, diagnostic, and test queries do not have this concern.
|
|
677
|
+
|
|
627
678
|
Do not expect `snapshot` in entry, exit, invoke, initializer, history-default,
|
|
628
679
|
or choice contexts. Choice is an important soundness boundary: a startup or
|
|
629
680
|
chained choice can run without a complete stable configuration containing the
|
|
@@ -901,7 +952,7 @@ const definition = Machine.make({
|
|
|
901
952
|
states: States.states,
|
|
902
953
|
events: Events,
|
|
903
954
|
internalEvents: InternalEvents,
|
|
904
|
-
initial: (to) => to.Idle()
|
|
955
|
+
initial: (to) => to.Idle()
|
|
905
956
|
})
|
|
906
957
|
```
|
|
907
958
|
|
|
@@ -1069,7 +1120,7 @@ machine.handle({
|
|
|
1069
1120
|
Waiting: {
|
|
1070
1121
|
invoke: (from) =>
|
|
1071
1122
|
from.timer("clear-status", "3 seconds")
|
|
1072
|
-
.onDone((to) => to.full.Clear()
|
|
1123
|
+
.onDone((to) => to.full.Clear())
|
|
1073
1124
|
}
|
|
1074
1125
|
})
|
|
1075
1126
|
```
|
|
@@ -1228,6 +1279,22 @@ const decoded = yield* Machine.decodeSnapshot(machine, encoded)
|
|
|
1228
1279
|
const ref = yield* Machine.resume(machine, decoded)
|
|
1229
1280
|
```
|
|
1230
1281
|
|
|
1282
|
+
`Machine.Snapshot` is the decoded, process-local representation. It may retain
|
|
1283
|
+
`Schema.Class` instances and capabilities that cannot cross a JSON boundary.
|
|
1284
|
+
`Machine.EncodedSnapshot` is different: successful `encodeSnapshot` calls
|
|
1285
|
+
guarantee canonical `Schema.Json` for every active value, completion output,
|
|
1286
|
+
and history value. Schema codecs convert rich values such as `Date`, `bigint`,
|
|
1287
|
+
and `undefined` to their declared JSON forms. Cycles, functions, symbols, and
|
|
1288
|
+
opaque values without a JSON representation fail with the typed
|
|
1289
|
+
`MachineSchemaEncodeError`; they never become a later `JSON.stringify` defect.
|
|
1290
|
+
|
|
1291
|
+
Keep DOM nodes, open handles, services, and similar capabilities in an Effect
|
|
1292
|
+
service or UI adapter. Local events may carry those values when they stay inside
|
|
1293
|
+
one process. Cluster public input events, persisted state, and completion
|
|
1294
|
+
outputs are transport protocols and must instead declare JSON-compatible
|
|
1295
|
+
encoded forms; use an explicit transform or `Schema.toCodecJson` where the
|
|
1296
|
+
canonical codec is the intended wire contract.
|
|
1297
|
+
|
|
1231
1298
|
Pass only a decoded `Machine.Snapshot` to `resume`; encoded or arbitrary
|
|
1232
1299
|
transport data belongs at `decodeSnapshot`. Resumption validates and normalizes
|
|
1233
1300
|
the logical snapshot again, then publishes it as the fresh runtime's first
|
|
@@ -1421,7 +1488,7 @@ reference model when correctness of the expected behavior matters.
|
|
|
1421
1488
|
Select the initial root separately from constructing its value:
|
|
1422
1489
|
|
|
1423
1490
|
```ts
|
|
1424
|
-
initial: (to) => to.Idle()
|
|
1491
|
+
initial: (to) => to.Idle()
|
|
1425
1492
|
```
|
|
1426
1493
|
|
|
1427
1494
|
### Invoked child expects events not accepted by the parent
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typeonce/effect-machine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Schema-first state machines and statecharts for Effect",
|
|
5
5
|
"author": "Sandro Maglione",
|
|
6
6
|
"repository": {
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
"provenance": true
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"effect": "4.0.0-rc.
|
|
49
|
+
"effect": "4.0.0-rc.110"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@changesets/cli": "2.31.0",
|
|
53
|
-
"@effect/vitest": "4.0.0-rc.
|
|
53
|
+
"@effect/vitest": "4.0.0-rc.110",
|
|
54
54
|
"@types/node": "25.7.0",
|
|
55
55
|
"dprint": "0.55.2",
|
|
56
|
-
"effect": "4.0.0-rc.
|
|
56
|
+
"effect": "4.0.0-rc.110",
|
|
57
57
|
"pagefind": "1.5.2",
|
|
58
58
|
"tinybench": "2.9.0",
|
|
59
59
|
"tstyche": "7.2.1",
|