@rotorsoft/act 0.14.0 → 0.15.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.
@@ -1,24 +1,27 @@
1
1
  import type { Projection } from "./projection-builder.js";
2
- import type { Committed, Dispatcher, EventRegister, ReactionOptions, ReactionResolver, Schema, SchemaRegister, Schemas, Snapshot, State } from "./types/index.js";
2
+ import type { Actor, Committed, Dispatcher, EventRegister, ReactionOptions, ReactionResolver, Schema, SchemaRegister, Schemas, Snapshot, State } from "./types/index.js";
3
3
  /**
4
4
  * A self-contained functional slice grouping partial states with their
5
5
  * scoped reactions. Slices are composed into an Act orchestrator via
6
6
  * `act().withSlice(slice)`.
7
7
  *
8
- * @template S - Schema register for states
9
- * @template E - Event schemas from this slice's states
10
- * @template A - Action schemas from this slice's states
11
- * @template M - Map of state names to state schemas
8
+ * @template TSchemaReg - Schema register for states
9
+ * @template TEvents - Event schemas from this slice's states
10
+ * @template TActions - Action schemas from this slice's states
11
+ * @template TStateMap - Map of state names to state schemas
12
+ * @template TActor - Actor type extending base Actor
12
13
  */
13
- export type Slice<S extends SchemaRegister<A>, E extends Schemas, A extends Schemas, M extends Record<string, Schema> = {}> = {
14
+ export type Slice<TSchemaReg extends SchemaRegister<TActions>, TEvents extends Schemas, TActions extends Schemas, TStateMap extends Record<string, Schema> = {}, TActor extends Actor = Actor> = {
14
15
  readonly _tag: "Slice";
15
16
  readonly states: Map<string, State<any, any, any>>;
16
- readonly events: EventRegister<E>;
17
+ readonly events: EventRegister<TEvents>;
17
18
  readonly projections: ReadonlyArray<Projection<any>>;
18
19
  /** @internal phantom field for type-level state schema tracking */
19
- readonly _S?: S;
20
+ readonly _S?: TSchemaReg;
20
21
  /** @internal phantom field for type-level state name tracking */
21
- readonly _M?: M;
22
+ readonly _M?: TStateMap;
23
+ /** @internal phantom field for type-level actor tracking */
24
+ readonly _TActor?: TActor;
22
25
  };
23
26
  /**
24
27
  * Fluent builder interface for composing functional slices.
@@ -26,12 +29,13 @@ export type Slice<S extends SchemaRegister<A>, E extends Schemas, A extends Sche
26
29
  * Provides a chainable API for registering states and projections,
27
30
  * and defining reactions scoped to the slice's own events.
28
31
  *
29
- * @template S - Schema register for states
30
- * @template E - Event schemas
31
- * @template A - Action schemas
32
- * @template M - Map of state names to state schemas
32
+ * @template TSchemaReg - Schema register for states
33
+ * @template TEvents - Event schemas
34
+ * @template TActions - Action schemas
35
+ * @template TStateMap - Map of state names to state schemas
36
+ * @template TActor - Actor type extending base Actor
33
37
  */
34
- export type SliceBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends Schemas, M extends Record<string, Schema> = {}> = {
38
+ export type SliceBuilder<TSchemaReg extends SchemaRegister<TActions>, TEvents extends Schemas, TActions extends Schemas, TStateMap extends Record<string, Schema> = {}, TActor extends Actor = Actor> = {
35
39
  /**
36
40
  * Registers a state definition with the slice.
37
41
  *
@@ -39,35 +43,35 @@ export type SliceBuilder<S extends SchemaRegister<A>, E extends Schemas, A exten
39
43
  * dispatch. Duplicate registrations (same state in multiple slices)
40
44
  * are handled automatically at composition time.
41
45
  */
42
- withState: <SX extends Schema, EX extends Schemas, AX extends Schemas, NX extends string = string>(state: State<SX, EX, AX, NX>) => SliceBuilder<S & {
43
- [K in keyof AX]: SX;
44
- }, E & EX, A & AX, M & {
45
- [K in NX]: SX;
46
- }>;
46
+ withState: <TNewState extends Schema, TNewEvents extends Schemas, TNewActions extends Schemas, TNewName extends string = string>(state: State<TNewState, TNewEvents, TNewActions, TNewName>) => SliceBuilder<TSchemaReg & {
47
+ [K in keyof TNewActions]: TNewState;
48
+ }, TEvents & TNewEvents, TActions & TNewActions, TStateMap & {
49
+ [K in TNewName]: TNewState;
50
+ }, TActor>;
47
51
  /**
48
52
  * Embeds a built Projection within this slice. The projection's events
49
53
  * must be a subset of events from states already registered via
50
54
  * `.withState()`. Projection handlers preserve their `(event, stream)`
51
55
  * signature and do not receive a Dispatcher.
52
56
  */
53
- withProjection: <EP extends Schemas>(projection: [Exclude<keyof EP, keyof E>] extends [never] ? Projection<EP> : never) => SliceBuilder<S, E, A, M>;
57
+ withProjection: <TNewEvents extends Schemas>(projection: [Exclude<keyof TNewEvents, keyof TEvents>] extends [never] ? Projection<TNewEvents> : never) => SliceBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
54
58
  /**
55
59
  * Begins defining a reaction scoped to this slice's events.
56
60
  */
57
- on: <K extends keyof E>(event: K) => {
58
- do: (handler: (event: Committed<E, K>, stream: string, app: Dispatcher<A>) => Promise<Snapshot<Schema, E> | void>, options?: Partial<ReactionOptions>) => SliceBuilder<S, E, A, M> & {
59
- to: (resolver: ReactionResolver<E, K> | string) => SliceBuilder<S, E, A, M>;
60
- void: () => SliceBuilder<S, E, A, M>;
61
+ on: <TKey extends keyof TEvents>(event: TKey) => {
62
+ do: (handler: (event: Committed<TEvents, TKey>, stream: string, app: Dispatcher<TActions, TActor>) => Promise<Snapshot<Schema, TEvents> | void>, options?: Partial<ReactionOptions>) => SliceBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor> & {
63
+ to: (resolver: ReactionResolver<TEvents, TKey> | string) => SliceBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
64
+ void: () => SliceBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
61
65
  };
62
66
  };
63
67
  /**
64
68
  * Builds and returns the Slice data structure.
65
69
  */
66
- build: () => Slice<S, E, A, M>;
70
+ build: () => Slice<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
67
71
  /**
68
72
  * The registered event schemas and their reaction maps.
69
73
  */
70
- readonly events: EventRegister<E>;
74
+ readonly events: EventRegister<TEvents>;
71
75
  };
72
76
  /**
73
77
  * Creates a new slice builder for composing partial states with scoped reactions.
@@ -102,5 +106,5 @@ export type SliceBuilder<S extends SchemaRegister<A>, E extends Schemas, A exten
102
106
  * @see {@link SliceBuilder} for builder methods
103
107
  * @see {@link Slice} for the output type
104
108
  */
105
- export declare function slice<S extends SchemaRegister<A> = {}, E extends Schemas = {}, A extends Schemas = {}, M extends Record<string, Schema> = {}>(states?: Map<string, State<any, any, any>>, actions?: Record<string, any>, events?: EventRegister<E>, projections?: Projection<any>[]): SliceBuilder<S, E, A, M>;
109
+ export declare function slice<TSchemaReg extends SchemaRegister<TActions> = {}, TEvents extends Schemas = {}, TActions extends Schemas = {}, TStateMap extends Record<string, Schema> = {}, TActor extends Actor = Actor>(states?: Map<string, State<any, any, any>>, actions?: Record<string, any>, events?: EventRegister<TEvents>, projections?: Projection<any>[]): SliceBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
106
110
  //# sourceMappingURL=slice-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slice-builder.d.ts","sourceRoot":"","sources":["../../src/slice-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slice-builder.d.ts","sourceRoot":"","sources":["../../src/slice-builder.ts"],"names":[],"mappings":"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"}
@@ -12,12 +12,13 @@ import { ActionHandler, Invariant, PatchHandlers, Schema, Schemas, Snapshot, Sta
12
12
  * Provides a fluent API to configure the initial state, event types,
13
13
  * and event handlers (reducers) before moving to action configuration.
14
14
  *
15
- * @template S - State schema type
15
+ * @template TState - State schema type
16
+ * @template TName - State name literal type
16
17
  *
17
18
  * @see {@link state} for usage examples
18
19
  * @see {@link ActionBuilder} for action configuration
19
20
  */
20
- export type StateBuilder<S extends Schema, N extends string = string> = {
21
+ export type StateBuilder<TState extends Schema, TName extends string = string> = {
21
22
  /**
22
23
  * Defines the initial state for new state instances.
23
24
  *
@@ -37,14 +38,14 @@ export type StateBuilder<S extends Schema, N extends string = string> = {
37
38
  * .init((data) => ({ ...data, createdAt: new Date() }))
38
39
  * ```
39
40
  */
40
- init: (init: () => Readonly<S>) => {
41
+ init: (init: () => Readonly<TState>) => {
41
42
  /**
42
43
  * Declares the event types that this state can emit.
43
44
  *
44
45
  * Events represent facts that have happened - they should be named in past tense.
45
46
  * Each event is defined with a Zod schema for type safety and runtime validation.
46
47
  *
47
- * @template E - Event schemas type
48
+ * @template TEvents - Event schemas type
48
49
  * @param events - Object mapping event names to Zod schemas
49
50
  * @returns An ActionBuilder (with optional `.patch()` to override specific reducers)
50
51
  *
@@ -57,7 +58,7 @@ export type StateBuilder<S extends Schema, N extends string = string> = {
57
58
  * })
58
59
  * ```
59
60
  */
60
- emits: <E extends Schemas>(events: ZodTypes<E>) => ActionBuilder<S, E, {}, N> & {
61
+ emits: <TEvents extends Schemas>(events: ZodTypes<TEvents>) => ActionBuilder<TState, TEvents, {}, TName> & {
61
62
  /**
62
63
  * Overrides specific event reducers. Events without a custom patch
63
64
  * default to passthrough: `({ data }) => data` (event data merges
@@ -78,17 +79,17 @@ export type StateBuilder<S extends Schema, N extends string = string> = {
78
79
  * // TicketClosed and TicketResolved use passthrough
79
80
  * ```
80
81
  */
81
- patch: (patch: Partial<PatchHandlers<S, E>>) => ActionBuilder<S, E, {}, N>;
82
+ patch: (patch: Partial<PatchHandlers<TState, TEvents>>) => ActionBuilder<TState, TEvents, {}, TName>;
82
83
  };
83
84
  };
84
85
  };
85
86
  /** Helper: a single-key record mapping a state name to its Zod schema. */
86
- type StateEntry<K extends string = string, S extends Schema = Schema> = {
87
- [P in K]: ZodType<S>;
87
+ type StateEntry<TKey extends string = string, TState extends Schema = Schema> = {
88
+ [P in TKey]: ZodType<TState>;
88
89
  };
89
90
  /** Helper: a single-key record mapping an action name to its Zod schema. */
90
- type ActionEntry<K extends string = string, AX extends Schema = Schema> = {
91
- [P in K]: ZodType<AX>;
91
+ type ActionEntry<TKey extends string = string, TNewActions extends Schema = Schema> = {
92
+ [P in TKey]: ZodType<TNewActions>;
92
93
  };
93
94
  /**
94
95
  * Builder interface for defining actions (commands) on a state.
@@ -96,13 +97,14 @@ type ActionEntry<K extends string = string, AX extends Schema = Schema> = {
96
97
  * Actions represent user/system intents to modify state. Each action is validated
97
98
  * against a schema, can have business rule invariants, and must emit one or more events.
98
99
  *
99
- * @template S - State schema type
100
- * @template E - Event schemas type
101
- * @template A - Action schemas type
100
+ * @template TState - State schema type
101
+ * @template TEvents - Event schemas type
102
+ * @template TActions - Action schemas type
103
+ * @template TName - State name literal type
102
104
  *
103
105
  * @see {@link state} for complete usage examples
104
106
  */
105
- export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas, N extends string = string> = {
107
+ export type ActionBuilder<TState extends Schema, TEvents extends Schemas, TActions extends Schemas, TName extends string = string> = {
106
108
  /**
107
109
  * Defines an action (command) that can be executed on this state.
108
110
  *
@@ -114,8 +116,8 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
114
116
  * when the variable name matches the action name. The key becomes the
115
117
  * action name, the value the Zod schema.
116
118
  *
117
- * @template K - Action name (string literal type)
118
- * @template AX - Action payload schema type
119
+ * @template TKey - Action name (string literal type)
120
+ * @template TNewActions - Action payload schema type
119
121
  * @param entry - Single-key record `{ ActionName: schema }`
120
122
  * @returns An object with `.given()` and `.emit()` for further configuration
121
123
  *
@@ -142,7 +144,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
142
144
  * .emit((action) => ["TicketOpened", { title: action.title }])
143
145
  * ```
144
146
  */
145
- on: <K extends string, AX extends Schema>(entry: ActionEntry<K, AX>) => {
147
+ on: <TKey extends string, TNewActions extends Schema>(entry: ActionEntry<TKey, TNewActions>) => {
146
148
  /**
147
149
  * Adds business rule invariants that must hold before the action can execute.
148
150
  *
@@ -161,7 +163,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
161
163
  * ])
162
164
  * ```
163
165
  */
164
- given: (rules: Invariant<S>[]) => {
166
+ given: (rules: Invariant<TState>[]) => {
165
167
  /**
166
168
  * Defines the action handler that emits events.
167
169
  *
@@ -188,11 +190,11 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
188
190
  * .emit("TicketAssigned")
189
191
  * ```
190
192
  */
191
- emit: (handler: ActionHandler<S, E, {
192
- [P in K]: AX;
193
- }, K> | (keyof E & string)) => ActionBuilder<S, E, A & {
194
- [P in K]: AX;
195
- }, N>;
193
+ emit: (handler: ActionHandler<TState, TEvents, {
194
+ [P in TKey]: TNewActions;
195
+ }, TKey> | (keyof TEvents & string)) => ActionBuilder<TState, TEvents, TActions & {
196
+ [P in TKey]: TNewActions;
197
+ }, TName>;
196
198
  };
197
199
  /**
198
200
  * Defines the action handler that emits events.
@@ -225,11 +227,11 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
225
227
  * ])
226
228
  * ```
227
229
  */
228
- emit: (handler: ActionHandler<S, E, {
229
- [P in K]: AX;
230
- }, K> | (keyof E & string)) => ActionBuilder<S, E, A & {
231
- [P in K]: AX;
232
- }, N>;
230
+ emit: (handler: ActionHandler<TState, TEvents, {
231
+ [P in TKey]: TNewActions;
232
+ }, TKey> | (keyof TEvents & string)) => ActionBuilder<TState, TEvents, TActions & {
233
+ [P in TKey]: TNewActions;
234
+ }, TName>;
233
235
  };
234
236
  /**
235
237
  * Defines a snapshotting strategy to optimize state reconstruction.
@@ -262,7 +264,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
262
264
  * })
263
265
  * ```
264
266
  */
265
- snap: (snap: (snapshot: Snapshot<S, E>) => boolean) => ActionBuilder<S, E, A, N>;
267
+ snap: (snap: (snapshot: Snapshot<TState, TEvents>) => boolean) => ActionBuilder<TState, TEvents, TActions, TName>;
266
268
  /**
267
269
  * Finalizes and builds the state definition.
268
270
  *
@@ -279,10 +281,10 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
279
281
  * .patch({ Incremented: ({ data }, state) => ({ count: state.count + data.amount }) })
280
282
  * .on({ increment: z.object({ by: z.number() }) })
281
283
  * .emit((action) => ["Incremented", { amount: action.by }])
282
- * .build(); // Returns State<S, E, A, N>
284
+ * .build(); // Returns State<TState, TEvents, TActions, TName>
283
285
  * ```
284
286
  */
285
- build: () => State<S, E, A, N>;
287
+ build: () => State<TState, TEvents, TActions, TName>;
286
288
  };
287
289
  /**
288
290
  * Creates a new state definition with event sourcing capabilities.
@@ -300,7 +302,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
300
302
  * 5. Business rules (invariants) via `.given()`
301
303
  * 6. Snapshotting strategy via `.snap()`
302
304
  *
303
- * @template S - Zod schema type defining the shape of the state
305
+ * @template TState - Zod schema type defining the shape of the state
304
306
  * @param entry - Single-key record mapping state name to Zod schema (e.g., `{ Counter: z.object({ count: z.number() }) }`)
305
307
  * @returns A StateBuilder instance for fluent API configuration
306
308
  *
@@ -401,6 +403,6 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
401
403
  * @see {@link https://rotorsoft.github.io/act-root/docs/intro | Getting Started Guide}
402
404
  * @see {@link https://rotorsoft.github.io/act-root/docs/examples/calculator | Calculator Example}
403
405
  */
404
- export declare function state<N extends string, S extends Schema>(entry: StateEntry<N, S>): StateBuilder<S, N>;
406
+ export declare function state<TName extends string, TState extends Schema>(entry: StateEntry<TName, TState>): StateBuilder<TState, TName>;
405
407
  export {};
406
408
  //# sourceMappingURL=state-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-builder.d.ts","sourceRoot":"","sources":["../../src/state-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EACL,aAAa,EAGb,SAAS,EACT,aAAa,EACb,MAAM,EACN,OAAO,EACP,QAAQ,EACR,KAAK,EACL,QAAQ,EACT,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACtE;;;;;;;;;;;;;;;;;;OAkBG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK;QACjC;;;;;;;;;;;;;;;;;;WAkBG;QACH,KAAK,EAAE,CAAC,CAAC,SAAS,OAAO,EACvB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAEhB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG;YAChC;;;;;;;;;;;;;;;;;;;eAmBG;YACH,KAAK,EAAE,CACL,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAEhC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SACjC,CAAC;KACH,CAAC;CACH,CAAC;AAEF,0EAA0E;AAC1E,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;KACrE,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CACrB,CAAC;AAEF,4EAA4E;AAC5E,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI;KACvE,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,aAAa,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,GAAG,MAAM,IACvB;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,EAAE,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,EACtC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,KACtB;QACH;;;;;;;;;;;;;;;;;WAiBG;QACH,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK;YAChC;;;;;;;;;;;;;;;;;;;;;;;;;eAyBG;YACH,IAAI,EAAE,CACJ,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE;iBAAG,CAAC,IAAI,CAAC,GAAG,EAAE;aAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KACnE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;iBAAG,CAAC,IAAI,CAAC,GAAG,EAAE;aAAE,EAAE,CAAC,CAAC,CAAC;SACnD,CAAC;QACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA8BG;QACH,IAAI,EAAE,CACJ,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE;aAAG,CAAC,IAAI,CAAC,GAAG,EAAE;SAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KACnE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;aAAG,CAAC,IAAI,CAAC,GAAG,EAAE;SAAE,EAAE,CAAC,CAAC,CAAC;KACnD,CAAC;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,IAAI,EAAE,CACJ,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,KACxC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAChC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoHG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EACtD,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACtB,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CA8CpB"}
1
+ {"version":3,"file":"state-builder.d.ts","sourceRoot":"","sources":["../../src/state-builder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z, ZodType } from "zod";
2
- import { ActorSchema, CausationEventSchema, CommittedMetaSchema, EventMetaSchema, QuerySchema, TargetSchema } from "./schemas.js";
2
+ import { ActorSchema, CausationEventSchema, CommittedMetaSchema, EventMetaSchema, QuerySchema } from "./schemas.js";
3
3
  /**
4
4
  * @packageDocumentation
5
5
  * @module act/types
@@ -36,6 +36,8 @@ export type Actor = z.infer<typeof ActorSchema>;
36
36
  * and who is performing it. The target combines the stream identifier
37
37
  * with actor context for complete audit trail.
38
38
  *
39
+ * @template TActor - Actor type extending base Actor (default: Actor)
40
+ *
39
41
  * @example Basic target
40
42
  * ```typescript
41
43
  * const target: Target = {
@@ -55,7 +57,11 @@ export type Actor = z.infer<typeof ActorSchema>;
55
57
  * }, userData);
56
58
  * ```
57
59
  */
58
- export type Target = z.infer<typeof TargetSchema>;
60
+ export type Target<TActor extends Actor = Actor> = {
61
+ readonly stream: string;
62
+ readonly actor: TActor;
63
+ readonly expectedVersion?: number;
64
+ };
59
65
  /**
60
66
  * Metadata describing the causation of an event.
61
67
  */
@@ -115,8 +121,8 @@ export type ZodTypes<T extends Schemas> = {
115
121
  * Messages are the basic building blocks of the event log. Each message
116
122
  * has a name (event type) and data (event payload).
117
123
  *
118
- * @template E - Schemas map
119
- * @template K - Event/action name
124
+ * @template TEvents - Schemas map
125
+ * @template TKey - Event/action name
120
126
  *
121
127
  * @example
122
128
  * ```typescript
@@ -126,11 +132,11 @@ export type ZodTypes<T extends Schemas> = {
126
132
  * };
127
133
  * ```
128
134
  */
129
- export type Message<E extends Schemas, K extends keyof E> = {
135
+ export type Message<TEvents extends Schemas, TKey extends keyof TEvents> = {
130
136
  /** The event or action name */
131
- readonly name: K;
137
+ readonly name: TKey;
132
138
  /** The event or action payload */
133
- readonly data: Readonly<E[K]>;
139
+ readonly data: Readonly<TEvents[TKey]>;
134
140
  };
135
141
  /**
136
142
  * A committed event with complete metadata.
@@ -139,8 +145,8 @@ export type Message<E extends Schemas, K extends keyof E> = {
139
145
  * the event was created, including correlation and causation information for
140
146
  * tracing event-driven workflows.
141
147
  *
142
- * @template E - Schemas map
143
- * @template K - Event name
148
+ * @template TEvents - Schemas map
149
+ * @template TKey - Event name
144
150
  *
145
151
  * @example
146
152
  * ```typescript
@@ -164,7 +170,7 @@ export type Message<E extends Schemas, K extends keyof E> = {
164
170
  *
165
171
  * @see {@link CommittedMeta} for metadata structure
166
172
  */
167
- export type Committed<E extends Schemas, K extends keyof E> = Message<E, K> & CommittedMeta;
173
+ export type Committed<TEvents extends Schemas, TKey extends keyof TEvents> = Message<TEvents, TKey> & CommittedMeta;
168
174
  /**
169
175
  * Snapshot of state at a specific point in time.
170
176
  *
@@ -172,8 +178,8 @@ export type Committed<E extends Schemas, K extends keyof E> = Message<E, K> & Co
172
178
  * metadata about how many events have been applied (patches) and how many
173
179
  * snapshots have been taken for optimization.
174
180
  *
175
- * @template S - State schema
176
- * @template E - Event schemas
181
+ * @template TState - State schema
182
+ * @template TEvents - Event schemas
177
183
  *
178
184
  * @example
179
185
  * ```typescript
@@ -195,11 +201,11 @@ export type Committed<E extends Schemas, K extends keyof E> = Message<E, K> & Co
195
201
  * })
196
202
  * ```
197
203
  */
198
- export type Snapshot<S extends Schema, E extends Schemas> = {
204
+ export type Snapshot<TState extends Schema, TEvents extends Schemas> = {
199
205
  /** Current state data */
200
- readonly state: S;
206
+ readonly state: TState;
201
207
  /** Event that created this snapshot (undefined for initial state) */
202
- readonly event?: Committed<E, keyof E>;
208
+ readonly event?: Committed<TEvents, keyof TEvents>;
203
209
  /** Number of patches applied since last snapshot */
204
210
  readonly patches: number;
205
211
  /** Number of snapshots taken for this stream */
@@ -207,91 +213,93 @@ export type Snapshot<S extends Schema, E extends Schemas> = {
207
213
  };
208
214
  /**
209
215
  * An invariant is a condition that must always hold true for a state.
210
- * @template S - State schema.
216
+ * @template TState - State schema.
217
+ * @template TActor - Actor type extending base Actor.
211
218
  */
212
- export type Invariant<S extends Schema> = {
219
+ export type Invariant<TState extends Schema, TActor extends Actor = Actor> = {
213
220
  description: string;
214
- valid: (state: Readonly<S>, actor?: Actor) => boolean;
221
+ valid: (state: Readonly<TState>, actor?: TActor) => boolean;
215
222
  };
216
223
  /**
217
224
  * Represents an emitted event tuple from an action handler.
218
- * @template E - Event schemas.
225
+ * @template TEvents - Event schemas.
219
226
  */
220
- export type Emitted<E extends Schemas> = {
221
- [K in keyof E]: readonly [K, Readonly<E[K]>];
222
- }[keyof E];
227
+ export type Emitted<TEvents extends Schemas> = {
228
+ [TKey in keyof TEvents]: readonly [TKey, Readonly<TEvents[TKey]>];
229
+ }[keyof TEvents];
223
230
  /**
224
231
  * Bundles the Zod types for state, events, and actions.
225
- * @template S - State schema.
226
- * @template E - Event schemas.
227
- * @template A - Action schemas.
232
+ * @template TState - State schema.
233
+ * @template TEvents - Event schemas.
234
+ * @template TActions - Action schemas.
228
235
  */
229
- export type StateSchemas<S extends Schema, E extends Schemas, A extends Schemas> = {
230
- readonly events: ZodTypes<E>;
231
- readonly actions: ZodTypes<A>;
232
- readonly state: ZodType<S>;
236
+ export type StateSchemas<TState extends Schema, TEvents extends Schemas, TActions extends Schemas> = {
237
+ readonly events: ZodTypes<TEvents>;
238
+ readonly actions: ZodTypes<TActions>;
239
+ readonly state: ZodType<TState>;
233
240
  };
234
241
  /**
235
242
  * Handles patching state in response to a committed event.
236
- * @template S - State schema.
237
- * @template E - Event schemas.
238
- * @template K - Event name.
243
+ * @template TState - State schema.
244
+ * @template TEvents - Event schemas.
245
+ * @template TKey - Event name.
239
246
  */
240
- export type PatchHandler<S extends Schema, E extends Schemas, K extends keyof E> = (event: Committed<E, K>, state: Readonly<S>) => Readonly<Patch<S>>;
247
+ export type PatchHandler<TState extends Schema, TEvents extends Schemas, TKey extends keyof TEvents> = (event: Committed<TEvents, TKey>, state: Readonly<TState>) => Readonly<Patch<TState>>;
241
248
  /**
242
249
  * Maps event names to their patch handlers.
243
- * @template S - State schema.
244
- * @template E - Event schemas.
250
+ * @template TState - State schema.
251
+ * @template TEvents - Event schemas.
245
252
  */
246
- export type PatchHandlers<S extends Schema, E extends Schemas> = {
247
- [K in keyof E]: PatchHandler<S, E, K>;
253
+ export type PatchHandlers<TState extends Schema, TEvents extends Schemas> = {
254
+ [TKey in keyof TEvents]: PatchHandler<TState, TEvents, TKey>;
248
255
  };
249
256
  /**
250
257
  * Handles an action, producing one or more emitted events.
251
- * @template S - State schema.
252
- * @template E - Event schemas.
253
- * @template A - Action schemas.
254
- * @template K - Action name.
258
+ * @template TState - State schema.
259
+ * @template TEvents - Event schemas.
260
+ * @template TActions - Action schemas.
261
+ * @template TKey - Action name.
255
262
  */
256
- export type ActionHandler<S extends Schema, E extends Schemas, A extends Schemas, K extends keyof A> = (action: Readonly<A[K]>, snapshot: Readonly<Snapshot<S, E>>, target: Target) => Emitted<E> | Emitted<E>[] | undefined;
263
+ export type ActionHandler<TState extends Schema, TEvents extends Schemas, TActions extends Schemas, TKey extends keyof TActions> = (action: Readonly<TActions[TKey]>, snapshot: Readonly<Snapshot<TState, TEvents>>, target: Target) => Emitted<TEvents> | Emitted<TEvents>[] | undefined;
257
264
  /**
258
265
  * Maps action names to their handlers.
259
- * @template S - State schema.
260
- * @template E - Event schemas.
261
- * @template A - Action schemas.
266
+ * @template TState - State schema.
267
+ * @template TEvents - Event schemas.
268
+ * @template TActions - Action schemas.
262
269
  */
263
- export type ActionHandlers<S extends Schema, E extends Schemas, A extends Schemas> = {
264
- [K in keyof A]: ActionHandler<S, E, A, K>;
270
+ export type ActionHandlers<TState extends Schema, TEvents extends Schemas, TActions extends Schemas> = {
271
+ [TKey in keyof TActions]: ActionHandler<TState, TEvents, TActions, TKey>;
265
272
  };
266
273
  /**
267
274
  * Maps action names to invariants that must hold after the action.
268
- * @template S - State schema.
269
- * @template A - Action schemas.
275
+ * @template TState - State schema.
276
+ * @template TActions - Action schemas.
270
277
  */
271
- export type GivenHandlers<S extends Schema, A extends Schemas> = {
272
- [K in keyof A]?: Invariant<S>[];
278
+ export type GivenHandlers<TState extends Schema, TActions extends Schemas> = {
279
+ [TKey in keyof TActions]?: Invariant<TState>[];
273
280
  };
274
281
  /**
275
282
  * The full state definition, including schemas, handlers, and optional invariants and snapshot logic.
276
- * @template S - State schema.
277
- * @template E - Event schemas.
278
- * @template A - Action schemas.
283
+ * @template TState - State schema.
284
+ * @template TEvents - Event schemas.
285
+ * @template TActions - Action schemas.
286
+ * @template TName - State name literal.
279
287
  */
280
- export type State<S extends Schema, E extends Schemas, A extends Schemas, N extends string = string> = StateSchemas<S, E, A> & {
281
- name: N;
282
- init: () => Readonly<S>;
283
- patch: PatchHandlers<S, E>;
284
- on: ActionHandlers<S, E, A>;
285
- given?: GivenHandlers<S, A>;
286
- snap?: (snapshot: Snapshot<S, E>) => boolean;
288
+ export type State<TState extends Schema, TEvents extends Schemas, TActions extends Schemas, TName extends string = string> = StateSchemas<TState, TEvents, TActions> & {
289
+ name: TName;
290
+ init: () => Readonly<TState>;
291
+ patch: PatchHandlers<TState, TEvents>;
292
+ on: ActionHandlers<TState, TEvents, TActions>;
293
+ given?: GivenHandlers<TState, TActions>;
294
+ snap?: (snapshot: Snapshot<TState, TEvents>) => boolean;
287
295
  };
288
296
  /**
289
297
  * Extracts the raw action schemas from a State definition.
290
298
  *
291
- * Use this to recover the `A` type parameter from a built State object,
299
+ * Use this to recover the `TActions` type parameter from a built State object,
292
300
  * enabling construction of typed dispatchers without circular imports.
293
301
  *
294
- * @template T - A State object (or any object with `readonly actions: ZodTypes<A>`)
302
+ * @template T - A State object (or any object with `readonly actions: ZodTypes<TActions>`)
295
303
  *
296
304
  * @example
297
305
  * ```typescript
@@ -311,7 +319,8 @@ export type InferActions<T extends {
311
319
  * Construct with {@link InferActions} to avoid circular imports between
312
320
  * slice files and the bootstrap module.
313
321
  *
314
- * @template A - Action schemas (maps action names to payload types)
322
+ * @template TActions - Action schemas (maps action names to payload types)
323
+ * @template TActor - Actor type extending base Actor
315
324
  *
316
325
  * @example
317
326
  * ```typescript
@@ -327,7 +336,7 @@ export type InferActions<T extends {
327
336
  * }
328
337
  * ```
329
338
  */
330
- export interface Dispatcher<A extends Schemas> {
331
- do<K extends keyof A & string>(action: K, target: Target, payload: Readonly<A[K]>, reactingTo?: Committed<Schemas, string>, skipValidation?: boolean): Promise<Snapshot<any, any>[]>;
339
+ export interface Dispatcher<TActions extends Schemas, TActor extends Actor = Actor> {
340
+ do<TKey extends keyof TActions & string>(action: TKey, target: Target<TActor>, payload: Readonly<TActions[TKey]>, reactingTo?: Committed<Schemas, string>, skipValidation?: boolean): Promise<Snapshot<any, any>[]>;
332
341
  }
333
342
  //# sourceMappingURL=action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"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"}