effect-machine 0.9.0 → 0.11.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 +118 -55
- package/dist/actor.d.ts +77 -179
- package/dist/actor.js +161 -113
- package/dist/cluster/entity-machine.js +5 -3
- package/dist/errors.d.ts +12 -1
- package/dist/errors.js +8 -1
- package/dist/index.d.ts +4 -8
- package/dist/index.js +2 -7
- package/dist/internal/transition.d.ts +27 -3
- package/dist/internal/transition.js +38 -9
- package/dist/internal/utils.d.ts +7 -2
- package/dist/internal/utils.js +1 -5
- package/dist/machine.d.ts +94 -35
- package/dist/machine.js +128 -13
- package/dist/testing.js +57 -3
- package/package.json +10 -9
- package/v3/dist/actor.d.ts +210 -0
- package/{dist-v3 → v3/dist}/actor.js +198 -117
- package/{dist-v3 → v3/dist}/cluster/entity-machine.d.ts +1 -1
- package/{dist-v3 → v3/dist}/cluster/entity-machine.js +8 -6
- package/{dist-v3 → v3/dist}/cluster/to-entity.d.ts +1 -1
- package/{dist-v3 → v3/dist}/cluster/to-entity.js +1 -1
- package/v3/dist/errors.d.ts +76 -0
- package/{dist-v3 → v3/dist}/errors.js +9 -2
- package/v3/dist/index.d.ts +9 -0
- package/v3/dist/index.js +8 -0
- package/{dist-v3 → v3/dist}/inspection.d.ts +53 -8
- package/v3/dist/inspection.js +156 -0
- package/{dist-v3 → v3/dist}/internal/brands.d.ts +1 -1
- package/{dist-v3 → v3/dist}/internal/inspection.d.ts +1 -1
- package/v3/dist/internal/inspection.js +20 -0
- package/{dist-v3 → v3/dist}/internal/transition.d.ts +35 -11
- package/{dist-v3 → v3/dist}/internal/transition.js +47 -15
- package/{dist-v3 → v3/dist}/internal/utils.d.ts +9 -4
- package/{dist-v3 → v3/dist}/internal/utils.js +2 -6
- package/{dist-v3 → v3/dist}/machine.d.ts +113 -40
- package/{dist-v3 → v3/dist}/machine.js +191 -15
- package/{dist-v3 → v3/dist}/schema.d.ts +1 -1
- package/{dist-v3 → v3/dist}/schema.js +5 -2
- package/{dist-v3 → v3/dist}/slot.d.ts +4 -3
- package/{dist-v3 → v3/dist}/slot.js +1 -1
- package/{dist-v3 → v3/dist}/testing.d.ts +14 -8
- package/{dist-v3 → v3/dist}/testing.js +60 -6
- package/dist/persistence/adapter.d.ts +0 -135
- package/dist/persistence/adapter.js +0 -25
- package/dist/persistence/adapters/in-memory.d.ts +0 -32
- package/dist/persistence/adapters/in-memory.js +0 -174
- package/dist/persistence/index.d.ts +0 -5
- package/dist/persistence/index.js +0 -5
- package/dist/persistence/persistent-actor.d.ts +0 -50
- package/dist/persistence/persistent-actor.js +0 -368
- package/dist/persistence/persistent-machine.d.ts +0 -105
- package/dist/persistence/persistent-machine.js +0 -22
- package/dist-v3/actor.d.ts +0 -291
- package/dist-v3/errors.d.ts +0 -27
- package/dist-v3/index.d.ts +0 -12
- package/dist-v3/index.js +0 -13
- package/dist-v3/inspection.js +0 -48
- package/dist-v3/internal/inspection.js +0 -13
- package/dist-v3/persistence/adapter.d.ts +0 -125
- package/dist-v3/persistence/adapter.js +0 -25
- package/dist-v3/persistence/adapters/in-memory.d.ts +0 -32
- package/dist-v3/persistence/adapters/in-memory.js +0 -174
- package/dist-v3/persistence/index.d.ts +0 -5
- package/dist-v3/persistence/index.js +0 -5
- package/dist-v3/persistence/persistent-actor.d.ts +0 -49
- package/dist-v3/persistence/persistent-actor.js +0 -365
- package/dist-v3/persistence/persistent-machine.d.ts +0 -105
- package/dist-v3/persistence/persistent-machine.js +0 -22
- /package/{dist-v3 → v3/dist}/_virtual/_rolldown/runtime.js +0 -0
- /package/{dist-v3 → v3/dist}/cluster/index.d.ts +0 -0
- /package/{dist-v3 → v3/dist}/cluster/index.js +0 -0
- /package/{dist-v3 → v3/dist}/internal/brands.js +0 -0
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { EventBrand, StateBrand } from "../internal/brands.js";
|
|
2
|
-
import { Machine } from "../machine.js";
|
|
3
|
-
import { Schedule, Schema } from "effect";
|
|
4
|
-
|
|
5
|
-
//#region src-v3/persistence/persistent-machine.d.ts
|
|
6
|
-
type BrandedState = {
|
|
7
|
-
readonly _tag: string;
|
|
8
|
-
} & StateBrand;
|
|
9
|
-
type BrandedEvent = {
|
|
10
|
-
readonly _tag: string;
|
|
11
|
-
} & EventBrand;
|
|
12
|
-
/**
|
|
13
|
-
* Configuration for persistence behavior (after resolution).
|
|
14
|
-
* Schemas are required at runtime - the persist function ensures this.
|
|
15
|
-
*
|
|
16
|
-
* Note: Schema types S and E should match the structural shape of the machine's
|
|
17
|
-
* state and event types (without brands). The schemas don't know about brands.
|
|
18
|
-
*/
|
|
19
|
-
interface PersistenceConfig<S, E, SSI = unknown, ESI = unknown> {
|
|
20
|
-
/**
|
|
21
|
-
* Schedule controlling when snapshots are taken.
|
|
22
|
-
* Input is the new state after each transition.
|
|
23
|
-
*
|
|
24
|
-
* Examples:
|
|
25
|
-
* - Schedule.forever — snapshot every transition
|
|
26
|
-
* - Schedule.spaced("5 seconds") — debounced snapshots
|
|
27
|
-
* - Schedule.recurs(100) — every N transitions
|
|
28
|
-
*/
|
|
29
|
-
readonly snapshotSchedule: Schedule.Schedule<unknown, S>;
|
|
30
|
-
/**
|
|
31
|
-
* Whether to journal events for replay capability.
|
|
32
|
-
* When true, all events are appended to the event log.
|
|
33
|
-
*/
|
|
34
|
-
readonly journalEvents: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Schema for serializing/deserializing state.
|
|
37
|
-
* Always present at runtime (resolved from config or machine).
|
|
38
|
-
*/
|
|
39
|
-
readonly stateSchema: Schema.Schema<S, SSI, never>;
|
|
40
|
-
/**
|
|
41
|
-
* Schema for serializing/deserializing events.
|
|
42
|
-
* Always present at runtime (resolved from config or machine).
|
|
43
|
-
*/
|
|
44
|
-
readonly eventSchema: Schema.Schema<E, ESI, never>;
|
|
45
|
-
/**
|
|
46
|
-
* User-provided identifier for the machine type.
|
|
47
|
-
* Used for filtering actors in restoreAll.
|
|
48
|
-
* Optional — defaults to "unknown" if not provided.
|
|
49
|
-
*/
|
|
50
|
-
readonly machineType?: string;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Machine with persistence configuration attached.
|
|
54
|
-
* Spawn auto-detects this and returns PersistentActorRef.
|
|
55
|
-
*/
|
|
56
|
-
interface PersistentMachine<S extends {
|
|
57
|
-
readonly _tag: string;
|
|
58
|
-
}, E extends {
|
|
59
|
-
readonly _tag: string;
|
|
60
|
-
}, R = never> {
|
|
61
|
-
readonly _tag: "PersistentMachine";
|
|
62
|
-
readonly machine: Machine<S, E, R>;
|
|
63
|
-
readonly persistence: PersistenceConfig<S, E>;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Type guard to check if a value is a PersistentMachine
|
|
67
|
-
*/
|
|
68
|
-
declare const isPersistentMachine: (value: unknown) => value is PersistentMachine<{
|
|
69
|
-
readonly _tag: string;
|
|
70
|
-
}, {
|
|
71
|
-
readonly _tag: string;
|
|
72
|
-
}, unknown>;
|
|
73
|
-
/**
|
|
74
|
-
* Attach persistence configuration to a machine.
|
|
75
|
-
*
|
|
76
|
-
* Schemas are read from the machine - must use `Machine.make({ state, event, initial })`.
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* ```ts
|
|
80
|
-
* const orderMachine = Machine.make({
|
|
81
|
-
* state: OrderState,
|
|
82
|
-
* event: OrderEvent,
|
|
83
|
-
* initial: OrderState.Idle(),
|
|
84
|
-
* }).pipe(
|
|
85
|
-
* Machine.on(OrderState.Idle, OrderEvent.Submit, ({ event }) =>
|
|
86
|
-
* OrderState.Pending({ orderId: event.orderId })
|
|
87
|
-
* ),
|
|
88
|
-
* Machine.final(OrderState.Paid),
|
|
89
|
-
* Machine.persist({
|
|
90
|
-
* snapshotSchedule: Schedule.forever,
|
|
91
|
-
* journalEvents: true,
|
|
92
|
-
* }),
|
|
93
|
-
* );
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
interface WithPersistenceConfig {
|
|
97
|
-
readonly snapshotSchedule: Schedule.Schedule<unknown, {
|
|
98
|
-
readonly _tag: string;
|
|
99
|
-
}>;
|
|
100
|
-
readonly journalEvents: boolean;
|
|
101
|
-
readonly machineType?: string;
|
|
102
|
-
}
|
|
103
|
-
declare const persist: (config: WithPersistenceConfig) => <S extends BrandedState, E extends BrandedEvent, R>(machine: Machine<S, E, R>) => PersistentMachine<S, E, R>;
|
|
104
|
-
//#endregion
|
|
105
|
-
export { PersistenceConfig, PersistentMachine, WithPersistenceConfig, isPersistentMachine, persist };
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { MissingSchemaError } from "../errors.js";
|
|
2
|
-
//#region src-v3/persistence/persistent-machine.ts
|
|
3
|
-
/**
|
|
4
|
-
* Type guard to check if a value is a PersistentMachine
|
|
5
|
-
*/
|
|
6
|
-
const isPersistentMachine = (value) => typeof value === "object" && value !== null && "_tag" in value && value._tag === "PersistentMachine";
|
|
7
|
-
const persist = (config) => (machine) => {
|
|
8
|
-
const stateSchema = machine.stateSchema;
|
|
9
|
-
const eventSchema = machine.eventSchema;
|
|
10
|
-
if (stateSchema === void 0 || eventSchema === void 0) throw new MissingSchemaError({ operation: "persist" });
|
|
11
|
-
return {
|
|
12
|
-
_tag: "PersistentMachine",
|
|
13
|
-
machine,
|
|
14
|
-
persistence: {
|
|
15
|
-
...config,
|
|
16
|
-
stateSchema,
|
|
17
|
-
eventSchema
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
//#endregion
|
|
22
|
-
export { isPersistentMachine, persist };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|