@rotorsoft/act 0.14.0 → 0.16.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.
@@ -7,7 +7,7 @@
7
7
  import { Act } from "./act.js";
8
8
  import type { Projection } from "./projection-builder.js";
9
9
  import type { Slice } from "./slice-builder.js";
10
- import type { Committed, Dispatcher, EventRegister, ReactionOptions, ReactionResolver, Registry, Schema, SchemaRegister, Schemas, Snapshot, State } from "./types/index.js";
10
+ import type { Actor, Committed, Dispatcher, EventRegister, ReactionOptions, ReactionResolver, Registry, Schema, SchemaRegister, Schemas, Snapshot, State } from "./types/index.js";
11
11
  /**
12
12
  * Fluent builder interface for composing event-sourced applications.
13
13
  *
@@ -15,17 +15,20 @@ import type { Committed, Dispatcher, EventRegister, ReactionOptions, ReactionRes
15
15
  * - Registering states via `.withState()`
16
16
  * - Registering slices via `.withSlice()`
17
17
  * - Registering projections via `.withProjection()`
18
+ * - Locking a custom actor type via `.withActor<TActor>()`
18
19
  * - Defining event reactions via `.on()` → `.do()` → `.to()` or `.void()`
19
20
  * - Building the orchestrator via `.build()`
20
21
  *
21
- * @template S - Schema register for states (maps action names to state schemas)
22
- * @template E - Event schemas (maps event names to event data schemas)
23
- * @template A - Action schemas (maps action names to action payload schemas)
22
+ * @template TSchemaReg - Schema register for states (maps action names to state schemas)
23
+ * @template TEvents - Event schemas (maps event names to event data schemas)
24
+ * @template TActions - Action schemas (maps action names to action payload schemas)
25
+ * @template TStateMap - Map of state names to state schemas
26
+ * @template TActor - Actor type extending base Actor
24
27
  *
25
28
  * @see {@link act} for usage examples
26
29
  * @see {@link Act} for the built orchestrator API
27
30
  */
28
- export type ActBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends Schemas, M extends Record<string, Schema> = {}> = {
31
+ export type ActBuilder<TSchemaReg extends SchemaRegister<TActions>, TEvents extends Schemas, TActions extends Schemas, TStateMap extends Record<string, Schema> = {}, TActor extends Actor = Actor> = {
29
32
  /**
30
33
  * Registers a state definition with the builder.
31
34
  *
@@ -34,11 +37,11 @@ export type ActBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends
34
37
  *
35
38
  * @throws {Error} If duplicate action or event names are detected
36
39
  */
37
- withState: <SX extends Schema, EX extends Schemas, AX extends Schemas, NX extends string = string>(state: State<SX, EX, AX, NX>) => ActBuilder<S & {
38
- [K in keyof AX]: SX;
39
- }, E & EX, A & AX, M & {
40
- [K in NX]: SX;
41
- }>;
40
+ withState: <TNewState extends Schema, TNewEvents extends Schemas, TNewActions extends Schemas, TNewName extends string = string>(state: State<TNewState, TNewEvents, TNewActions, TNewName>) => ActBuilder<TSchemaReg & {
41
+ [K in keyof TNewActions]: TNewState;
42
+ }, TEvents & TNewEvents, TActions & TNewActions, TStateMap & {
43
+ [K in TNewName]: TNewState;
44
+ }, TActor>;
42
45
  /**
43
46
  * Registers a slice with the builder.
44
47
  *
@@ -48,14 +51,41 @@ export type ActBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends
48
51
  *
49
52
  * @throws {Error} If duplicate action or event names are detected
50
53
  */
51
- withSlice: <SX extends SchemaRegister<AX>, EX extends Schemas, AX extends Schemas, MX extends Record<string, Schema>>(slice: Slice<SX, EX, AX, MX>) => ActBuilder<S & SX, E & EX, A & AX, M & MX>;
54
+ withSlice: <TNewSchemaReg extends SchemaRegister<TNewActions>, TNewEvents extends Schemas, TNewActions extends Schemas, TNewMap extends Record<string, Schema>>(slice: Slice<TNewSchemaReg, TNewEvents, TNewActions, TNewMap>) => ActBuilder<TSchemaReg & TNewSchemaReg, TEvents & TNewEvents, TActions & TNewActions, TStateMap & TNewMap, TActor>;
52
55
  /**
53
56
  * Registers a standalone projection with the builder.
54
57
  *
55
58
  * The projection's events must be a subset of events already registered
56
59
  * via `.withState()` or `.withSlice()`.
57
60
  */
58
- withProjection: <EX extends Schemas>(projection: [Exclude<keyof EX, keyof E>] extends [never] ? Projection<EX> : never) => ActBuilder<S, E, A, M>;
61
+ withProjection: <TNewEvents extends Schemas>(projection: [Exclude<keyof TNewEvents, keyof TEvents>] extends [never] ? Projection<TNewEvents> : never) => ActBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
62
+ /**
63
+ * Locks a custom actor type for this application.
64
+ *
65
+ * This is a pure type-level method — it returns the same builder at
66
+ * runtime but narrows the `TActor` generic so that `app.do()` and
67
+ * reaction dispatchers require the richer actor shape.
68
+ *
69
+ * @template TNewActor - Custom actor type extending base Actor
70
+ * @returns The same builder with `TActor` locked to `TNewActor`
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * type MyActor = { id: string; name: string; role: string; tenantId: string };
75
+ *
76
+ * const app = act()
77
+ * .withActor<MyActor>()
78
+ * .withState(Counter)
79
+ * .build();
80
+ *
81
+ * // Now app.do() requires MyActor in the target
82
+ * await app.do("increment", {
83
+ * stream: "counter-1",
84
+ * actor: { id: "1", name: "Alice", role: "admin", tenantId: "t1" }
85
+ * }, { by: 5 });
86
+ * ```
87
+ */
88
+ withActor: <TNewActor extends Actor>() => ActBuilder<TSchemaReg, TEvents, TActions, TStateMap, TNewActor>;
59
89
  /**
60
90
  * Begins defining a reaction to a specific event.
61
91
  *
@@ -63,14 +93,14 @@ export type ActBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends
63
93
  * additional actions, update external systems, or perform side effects. Reactions
64
94
  * are processed asynchronously during drain cycles.
65
95
  *
66
- * @template K - Event name (must be a registered event)
96
+ * @template TKey - Event name (must be a registered event)
67
97
  * @param event - The event name to react to
68
98
  * @returns An object with `.do()` method to define the reaction handler
69
99
  */
70
- on: <K extends keyof E>(event: K) => {
71
- do: (handler: (event: Committed<E, K>, stream: string, app: Dispatcher<A>) => Promise<Snapshot<Schema, E> | void>, options?: Partial<ReactionOptions>) => ActBuilder<S, E, A, M> & {
72
- to: (resolver: ReactionResolver<E, K> | string) => ActBuilder<S, E, A, M>;
73
- void: () => ActBuilder<S, E, A, M>;
100
+ on: <TKey extends keyof TEvents>(event: TKey) => {
101
+ do: (handler: (event: Committed<TEvents, TKey>, stream: string, app: Dispatcher<TActions, TActor>) => Promise<Snapshot<Schema, TEvents> | void>, options?: Partial<ReactionOptions>) => ActBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor> & {
102
+ to: (resolver: ReactionResolver<TEvents, TKey> | string) => ActBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
103
+ void: () => ActBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
74
104
  };
75
105
  };
76
106
  /**
@@ -81,11 +111,11 @@ export type ActBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends
81
111
  *
82
112
  * @see {@link Act} for available orchestrator methods
83
113
  */
84
- build: (drainLimit?: number) => Act<S, E, A, M>;
114
+ build: (drainLimit?: number) => Act<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
85
115
  /**
86
116
  * The registered event schemas and their reaction maps.
87
117
  */
88
- readonly events: EventRegister<E>;
118
+ readonly events: EventRegister<TEvents>;
89
119
  };
90
120
  /**
91
121
  * Creates a new Act orchestrator builder for composing event-sourced applications.
@@ -97,6 +127,16 @@ export type ActBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends
97
127
  * .build();
98
128
  * ```
99
129
  *
130
+ * @example Application with custom actor type
131
+ * ```typescript
132
+ * type MyActor = { id: string; name: string; role: string };
133
+ *
134
+ * const app = act()
135
+ * .withActor<MyActor>()
136
+ * .withState(Counter)
137
+ * .build();
138
+ * ```
139
+ *
100
140
  * @example Application with slices (vertical slice architecture)
101
141
  * ```typescript
102
142
  * const CounterSlice = slice()
@@ -116,5 +156,5 @@ export type ActBuilder<S extends SchemaRegister<A>, E extends Schemas, A extends
116
156
  * @see {@link state} for defining states
117
157
  * @see {@link slice} for defining slices
118
158
  */
119
- export declare function act<S extends SchemaRegister<A> = {}, E extends Schemas = {}, A extends Schemas = {}, M extends Record<string, Schema> = {}>(states?: Map<string, State<any, any, any>>, registry?: Registry<S, E, A>, pendingProjections?: Projection<any>[]): ActBuilder<S, E, A, M>;
159
+ export declare function act<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>>, registry?: Registry<TSchemaReg, TEvents, TActions>, pendingProjections?: Projection<any>[]): ActBuilder<TSchemaReg, TEvents, TActions, TStateMap, TActor>;
120
160
  //# sourceMappingURL=act-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"act-builder.d.ts","sourceRoot":"","sources":["../../src/act-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"act-builder.d.ts","sourceRoot":"","sources":["../../src/act-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EACV,KAAK,EACL,SAAS,EACT,UAAU,EACV,aAAa,EAGb,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,cAAc,EACd,OAAO,EACP,QAAQ,EACR,KAAK,EACN,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,UAAU,CACpB,UAAU,SAAS,cAAc,CAAC,QAAQ,CAAC,EAC3C,OAAO,SAAS,OAAO,EACvB,QAAQ,SAAS,OAAO,EAExB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAC7C,MAAM,SAAS,KAAK,GAAG,KAAK,IAC1B;IACF;;;;;;;OAOG;IACH,SAAS,EAAE,CACT,SAAS,SAAS,MAAM,EACxB,UAAU,SAAS,OAAO,EAC1B,WAAW,SAAS,OAAO,EAC3B,QAAQ,SAAS,MAAM,GAAG,MAAM,EAEhC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,KACvD,UAAU,CACb,UAAU,GAAG;SAAG,CAAC,IAAI,MAAM,WAAW,GAAG,SAAS;KAAE,EACpD,OAAO,GAAG,UAAU,EACpB,QAAQ,GAAG,WAAW,EACtB,SAAS,GAAG;SAAG,CAAC,IAAI,QAAQ,GAAG,SAAS;KAAE,EAC1C,MAAM,CACP,CAAC;IACF;;;;;;;;OAQG;IACH,SAAS,EAAE,CACT,aAAa,SAAS,cAAc,CAAC,WAAW,CAAC,EACjD,UAAU,SAAS,OAAO,EAC1B,WAAW,SAAS,OAAO,EAC3B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAEtC,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,KAC1D,UAAU,CACb,UAAU,GAAG,aAAa,EAC1B,OAAO,GAAG,UAAU,EACpB,QAAQ,GAAG,WAAW,EACtB,SAAS,GAAG,OAAO,EACnB,MAAM,CACP,CAAC;IACF;;;;;OAKG;IACH,cAAc,EAAE,CAAC,UAAU,SAAS,OAAO,EACzC,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClE,UAAU,CAAC,UAAU,CAAC,GACtB,KAAK,KACN,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAClE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,SAAS,EAAE,CAAC,SAAS,SAAS,KAAK,OAAO,UAAU,CAClD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,SAAS,CACV,CAAC;IACF;;;;;;;;;;OAUG;IACH,EAAE,EAAE,CAAC,IAAI,SAAS,MAAM,OAAO,EAC7B,KAAK,EAAE,IAAI,KACR;QACH,EAAE,EAAE,CACF,OAAO,EAAE,CACP,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,KAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAC9C,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KAC/B,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG;YAClE,EAAE,EAAE,CACF,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,MAAM,KAC/C,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAClE,IAAI,EAAE,MAAM,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SAC1E,CAAC;KACH,CAAC;IACF;;;;;;;OAOG;IACH,KAAK,EAAE,CACL,UAAU,CAAC,EAAE,MAAM,KAChB,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACzC,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,GAAG,CAEjB,UAAU,SAAS,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,EAChD,OAAO,SAAS,OAAO,GAAG,EAAE,EAC5B,QAAQ,SAAS,OAAO,GAAG,EAAE,EAC7B,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAC7C,MAAM,SAAS,KAAK,GAAG,KAAK,EAE5B,MAAM,GAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAa,EACrD,QAAQ,GAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAG/C,EACD,kBAAkB,GAAE,UAAU,CAAC,GAAG,CAAC,EAAO,GACzC,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAgJ9D"}
@@ -1,4 +1,4 @@
1
- import type { Committed, Drain, DrainOptions, Lease, Query, Registry, Schema, SchemaRegister, Schemas, Snapshot, State, Target } from "./types/index.js";
1
+ import type { Actor, Committed, Drain, DrainOptions, Lease, Query, Registry, Schema, SchemaRegister, Schemas, SettleOptions, Snapshot, State, Target } from "./types/index.js";
2
2
  /**
3
3
  * @category Orchestrator
4
4
  * @see Store
@@ -19,17 +19,21 @@ import type { Committed, Drain, DrainOptions, Lease, Query, Registry, Schema, Sc
19
19
  * - Register event listeners with `.on("committed", ...)` and `.on("acked", ...)` to react to lifecycle events.
20
20
  * - Use `.query()` to analyze event streams for analytics or debugging.
21
21
  *
22
- * @template S SchemaRegister for state
23
- * @template E Schemas for events
24
- * @template A Schemas for actions
22
+ * @template TSchemaReg SchemaRegister for state
23
+ * @template TEvents Schemas for events
24
+ * @template TActions Schemas for actions
25
+ * @template TStateMap Map of state names to state schemas
26
+ * @template TActor Actor type extending base Actor
25
27
  */
26
- export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A extends Schemas, M extends Record<string, Schema> = Record<string, never>> {
27
- readonly registry: Registry<S, E, A>;
28
+ export declare class Act<TSchemaReg extends SchemaRegister<TActions>, TEvents extends Schemas, TActions extends Schemas, TStateMap extends Record<string, Schema> = Record<string, never>, TActor extends Actor = Actor> {
29
+ readonly registry: Registry<TSchemaReg, TEvents, TActions>;
28
30
  private readonly _states;
29
31
  private _emitter;
30
32
  private _drain_locked;
31
33
  private _drain_lag2lead_ratio;
32
- private _correlation_interval;
34
+ private _correlation_timer;
35
+ private _settle_timer;
36
+ private _settling;
33
37
  /**
34
38
  * Emit a lifecycle event (internal use, but can be used for custom listeners).
35
39
  *
@@ -37,11 +41,12 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
37
41
  * @param args The event payload
38
42
  * @returns true if the event had listeners, false otherwise
39
43
  */
40
- emit(event: "committed", args: Snapshot<S, E>[]): boolean;
44
+ emit(event: "committed", args: Snapshot<TSchemaReg, TEvents>[]): boolean;
41
45
  emit(event: "acked", args: Lease[]): boolean;
42
46
  emit(event: "blocked", args: Array<Lease & {
43
47
  error: string;
44
48
  }>): boolean;
49
+ emit(event: "settled", args: Drain<TEvents>): boolean;
45
50
  /**
46
51
  * Register a listener for a lifecycle event ("committed", "acked", or "blocked").
47
52
  *
@@ -49,11 +54,12 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
49
54
  * @param listener The callback function
50
55
  * @returns this (for chaining)
51
56
  */
52
- on(event: "committed", listener: (args: Snapshot<S, E>[]) => void): this;
57
+ on(event: "committed", listener: (args: Snapshot<TSchemaReg, TEvents>[]) => void): this;
53
58
  on(event: "acked", listener: (args: Lease[]) => void): this;
54
59
  on(event: "blocked", listener: (args: Array<Lease & {
55
60
  error: string;
56
61
  }>) => void): this;
62
+ on(event: "settled", listener: (args: Drain<TEvents>) => void): this;
57
63
  /**
58
64
  * Remove a listener for a lifecycle event.
59
65
  *
@@ -61,18 +67,19 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
61
67
  * @param listener The callback function
62
68
  * @returns this (for chaining)
63
69
  */
64
- off(event: "committed", listener: (args: Snapshot<S, E>[]) => void): this;
70
+ off(event: "committed", listener: (args: Snapshot<TSchemaReg, TEvents>[]) => void): this;
65
71
  off(event: "acked", listener: (args: Lease[]) => void): this;
66
72
  off(event: "blocked", listener: (args: Array<Lease & {
67
73
  error: string;
68
74
  }>) => void): this;
75
+ off(event: "settled", listener: (args: Drain<TEvents>) => void): this;
69
76
  /**
70
77
  * Create a new Act orchestrator.
71
78
  *
72
79
  * @param registry The registry of state, event, and action schemas
73
80
  * @param states Map of state names to their (potentially merged) state definitions
74
81
  */
75
- constructor(registry: Registry<S, E, A>, _states?: Map<string, State<any, any, any>>);
82
+ constructor(registry: Registry<TSchemaReg, TEvents, TActions>, _states?: Map<string, State<any, any, any>>);
76
83
  /**
77
84
  * Executes an action on a state instance, committing resulting events.
78
85
  *
@@ -84,7 +91,7 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
84
91
  * 5. Applies events to create new state
85
92
  * 6. Commits events to the store with optimistic concurrency control
86
93
  *
87
- * @template K - Action name from registered actions
94
+ * @template TKey - Action name from registered actions
88
95
  * @param action - The name of the action to execute
89
96
  * @param target - Target specification with stream ID and actor context
90
97
  * @param payload - Action payload matching the action's schema
@@ -156,7 +163,7 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
156
163
  * @see {@link Snapshot} for return value structure
157
164
  * @see {@link ValidationError}, {@link InvariantError}, {@link ConcurrencyError}
158
165
  */
159
- do<K extends keyof A>(action: K, target: Target, payload: Readonly<A[K]>, reactingTo?: Committed<E, string & keyof E>, skipValidation?: boolean): Promise<Snapshot<S[K], E>[]>;
166
+ do<TKey extends keyof TActions>(action: TKey, target: Target<TActor>, payload: Readonly<TActions[TKey]>, reactingTo?: Committed<TEvents, string & keyof TEvents>, skipValidation?: boolean): Promise<Snapshot<TSchemaReg[TKey], TEvents>[]>;
160
167
  /**
161
168
  * Loads the current state snapshot for a specific stream.
162
169
  *
@@ -167,9 +174,9 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
167
174
  * using a string, the merged state (from partial states registered via
168
175
  * `.withState()`) is resolved by name.
169
176
  *
170
- * @template SX - State schema type
171
- * @template EX - Event schemas type
172
- * @template AX - Action schemas type
177
+ * @template TNewState - State schema type
178
+ * @template TNewEvents - Event schemas type
179
+ * @template TNewActions - Action schemas type
173
180
  * @param state - The state definition or state name to load
174
181
  * @param stream - The stream ID (state instance identifier)
175
182
  * @param callback - Optional callback invoked with the loaded snapshot
@@ -198,8 +205,8 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
198
205
  *
199
206
  * @see {@link Snapshot} for snapshot structure
200
207
  */
201
- load<SX extends Schema, EX extends Schemas, AX extends Schemas>(state: State<SX, EX, AX>, stream: string, callback?: (snapshot: Snapshot<SX, EX>) => void): Promise<Snapshot<SX, EX>>;
202
- load<K extends keyof M & string>(name: K, stream: string, callback?: (snapshot: Snapshot<M[K], E>) => void): Promise<Snapshot<M[K], E>>;
208
+ load<TNewState extends Schema, TNewEvents extends Schemas, TNewActions extends Schemas>(state: State<TNewState, TNewEvents, TNewActions>, stream: string, callback?: (snapshot: Snapshot<TNewState, TNewEvents>) => void): Promise<Snapshot<TNewState, TNewEvents>>;
209
+ load<TKey extends keyof TStateMap & string>(name: TKey, stream: string, callback?: (snapshot: Snapshot<TStateMap[TKey], TEvents>) => void): Promise<Snapshot<TStateMap[TKey], TEvents>>;
203
210
  /**
204
211
  * Queries the event store for events matching a filter.
205
212
  *
@@ -251,9 +258,9 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
251
258
  *
252
259
  * @see {@link query_array} for loading events into memory
253
260
  */
254
- query(query: Query, callback?: (event: Committed<E, keyof E>) => void): Promise<{
255
- first?: Committed<E, keyof E>;
256
- last?: Committed<E, keyof E>;
261
+ query(query: Query, callback?: (event: Committed<TEvents, keyof TEvents>) => void): Promise<{
262
+ first?: Committed<TEvents, keyof TEvents>;
263
+ last?: Committed<TEvents, keyof TEvents>;
257
264
  count: number;
258
265
  }>;
259
266
  /**
@@ -282,7 +289,7 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
282
289
  *
283
290
  * @see {@link query} for large result sets
284
291
  */
285
- query_array(query: Query): Promise<Committed<E, keyof E>[]>;
292
+ query_array(query: Query): Promise<Committed<TEvents, keyof TEvents>[]>;
286
293
  /**
287
294
  * Handles leased reactions.
288
295
  *
@@ -298,7 +305,7 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
298
305
  /**
299
306
  * Processes pending reactions by draining uncommitted events from the event store.
300
307
  *
301
- * The drain process:
308
+ * Runs a single drain cycle:
302
309
  * 1. Polls the store for streams with uncommitted events
303
310
  * 2. Leases streams to prevent concurrent processing
304
311
  * 3. Fetches events for each leased stream
@@ -308,7 +315,8 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
308
315
  * Drain uses a dual-frontier strategy to balance processing of new streams (lagging)
309
316
  * vs active streams (leading). The ratio adapts based on event pressure.
310
317
  *
311
- * Call this method periodically in a background loop, or after committing events.
318
+ * Call `correlate()` before `drain()` to discover target streams. For a higher-level
319
+ * API that handles debouncing, correlation, and signaling automatically, use {@link settle}.
312
320
  *
313
321
  * @param options - Drain configuration options
314
322
  * @param options.streamLimit - Maximum number of streams to process per cycle (default: 10)
@@ -316,50 +324,24 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
316
324
  * @param options.leaseMillis - Lease duration in milliseconds (default: 10000)
317
325
  * @returns Drain statistics with fetched, leased, acked, and blocked counts
318
326
  *
319
- * @example Basic drain loop
327
+ * @example In tests and scripts
320
328
  * ```typescript
321
- * // Process reactions after each action
322
329
  * await app.do("createUser", target, payload);
330
+ * await app.correlate();
323
331
  * await app.drain();
324
332
  * ```
325
333
  *
326
- * @example Background drain worker
327
- * ```typescript
328
- * setInterval(async () => {
329
- * try {
330
- * const result = await app.drain({
331
- * streamLimit: 20,
332
- * eventLimit: 50
333
- * });
334
- * if (result.acked.length) {
335
- * console.log(`Processed ${result.acked.length} streams`);
336
- * }
337
- * } catch (error) {
338
- * console.error("Drain error:", error);
339
- * }
340
- * }, 5000); // Every 5 seconds
341
- * ```
342
- *
343
- * @example With lifecycle listeners
334
+ * @example In production, prefer settle()
344
335
  * ```typescript
345
- * app.on("acked", (leases) => {
346
- * console.log(`Acknowledged ${leases.length} streams`);
347
- * });
348
- *
349
- * app.on("blocked", (blocked) => {
350
- * console.error(`Blocked ${blocked.length} streams due to errors`);
351
- * blocked.forEach(({ stream, error }) => {
352
- * console.error(`Stream ${stream}: ${error}`);
353
- * });
354
- * });
355
- *
356
- * await app.drain();
336
+ * await app.do("CreateItem", target, input);
337
+ * app.settle(); // debounced correlate→drain, emits "settled"
357
338
  * ```
358
339
  *
340
+ * @see {@link settle} for debounced correlate→drain with lifecycle events
359
341
  * @see {@link correlate} for dynamic stream discovery
360
342
  * @see {@link start_correlations} for automatic correlation
361
343
  */
362
- drain({ streamLimit, eventLimit, leaseMillis, }?: DrainOptions): Promise<Drain<E>>;
344
+ drain({ streamLimit, eventLimit, leaseMillis, }?: DrainOptions): Promise<Drain<TEvents>>;
363
345
  /**
364
346
  * Discovers and registers new streams dynamically based on reaction resolvers.
365
347
  *
@@ -483,5 +465,41 @@ export declare class Act<S extends SchemaRegister<A>, E extends Schemas, A exten
483
465
  * @see {@link start_correlations}
484
466
  */
485
467
  stop_correlations(): void;
468
+ /**
469
+ * Cancels any pending or active settle cycle.
470
+ *
471
+ * @see {@link settle}
472
+ */
473
+ stop_settling(): void;
474
+ /**
475
+ * Debounced, non-blocking correlate→drain cycle.
476
+ *
477
+ * Call this after `app.do()` to schedule a background drain. Multiple rapid
478
+ * calls within the debounce window are coalesced into a single cycle. Runs
479
+ * correlate→drain in a loop until the system reaches a consistent state,
480
+ * then emits the `"settled"` lifecycle event.
481
+ *
482
+ * @param options - Settle configuration options
483
+ * @param options.debounceMs - Debounce window in milliseconds (default: 10)
484
+ * @param options.correlate - Query filter for correlation scans (default: `{ after: -1, limit: 100 }`)
485
+ * @param options.maxPasses - Maximum correlate→drain loops (default: 5)
486
+ * @param options.streamLimit - Maximum streams per drain cycle (default: 10)
487
+ * @param options.eventLimit - Maximum events per stream (default: 10)
488
+ * @param options.leaseMillis - Lease duration in milliseconds (default: 10000)
489
+ *
490
+ * @example API mutations
491
+ * ```typescript
492
+ * await app.do("CreateItem", target, input);
493
+ * app.settle(); // non-blocking, returns immediately
494
+ *
495
+ * app.on("settled", (drain) => {
496
+ * // notify SSE clients, invalidate caches, etc.
497
+ * });
498
+ * ```
499
+ *
500
+ * @see {@link drain} for single synchronous drain cycles
501
+ * @see {@link correlate} for manual correlation
502
+ */
503
+ settle(options?: SettleOptions): void;
486
504
  }
487
505
  //# sourceMappingURL=act.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/act.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/act.ts"],"names":[],"mappings":"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"}
@@ -14,21 +14,21 @@ import type { Committed, Schema, Schemas, Snapshot, State, Target } from "./type
14
14
  *
15
15
  * Snapshots are used to optimize state reconstruction for aggregates with long event streams.
16
16
  *
17
- * @template S The type of state
18
- * @template E The type of events
17
+ * @template TState The type of state
18
+ * @template TEvents The type of events
19
19
  * @param snapshot The snapshot to save
20
20
  * @returns Promise that resolves when the snapshot is saved
21
21
  *
22
22
  * @example
23
23
  * await snap(snapshot);
24
24
  */
25
- export declare function snap<S extends Schema, E extends Schemas>(snapshot: Snapshot<S, E>): Promise<void>;
25
+ export declare function snap<TState extends Schema, TEvents extends Schemas>(snapshot: Snapshot<TState, TEvents>): Promise<void>;
26
26
  /**
27
27
  * Loads a snapshot of the state from the store by replaying events and applying patches.
28
28
  *
29
- * @template S The type of state
30
- * @template E The type of events
31
- * @template A The type of actions
29
+ * @template TState The type of state
30
+ * @template TEvents The type of events
31
+ * @template TActions The type of actions
32
32
  * @param me The state machine definition
33
33
  * @param stream The stream (instance) to load
34
34
  * @param callback (Optional) Callback to receive the loaded snapshot as it is built
@@ -37,16 +37,16 @@ export declare function snap<S extends Schema, E extends Schemas>(snapshot: Snap
37
37
  * @example
38
38
  * const snapshot = await load(Counter, "counter1");
39
39
  */
40
- export declare function load<S extends Schema, E extends Schemas, A extends Schemas>(me: State<S, E, A>, stream: string, callback?: (snapshot: Snapshot<S, E>) => void): Promise<Snapshot<S, E>>;
40
+ export declare function load<TState extends Schema, TEvents extends Schemas, TActions extends Schemas>(me: State<TState, TEvents, TActions>, stream: string, callback?: (snapshot: Snapshot<TState, TEvents>) => void): Promise<Snapshot<TState, TEvents>>;
41
41
  /**
42
42
  * Executes an action and emits an event to be committed by the store.
43
43
  *
44
44
  * This function validates the action, applies business invariants, emits events, and commits them to the event store.
45
45
  *
46
- * @template S The type of state
47
- * @template E The type of events
48
- * @template A The type of actionSchemas
49
- * @template K The type of action to execute
46
+ * @template TState The type of state
47
+ * @template TEvents The type of events
48
+ * @template TActions The type of actionSchemas
49
+ * @template TKey The type of action to execute
50
50
  * @param me The state machine definition
51
51
  * @param action The action to execute
52
52
  * @param target The target (stream, actor, etc.)
@@ -58,5 +58,5 @@ export declare function load<S extends Schema, E extends Schemas, A extends Sche
58
58
  * @example
59
59
  * const snapshot = await action(Counter, "increment", { stream: "counter1", actor }, { by: 1 });
60
60
  */
61
- export declare function action<S extends Schema, E extends Schemas, A extends Schemas, K extends keyof A>(me: State<S, E, A>, action: K, target: Target, payload: Readonly<A[K]>, reactingTo?: Committed<Schemas, keyof Schemas>, skipValidation?: boolean): Promise<Snapshot<S, E>[]>;
61
+ export declare function action<TState extends Schema, TEvents extends Schemas, TActions extends Schemas, TKey extends keyof TActions>(me: State<TState, TEvents, TActions>, action: TKey, target: Target, payload: Readonly<TActions[TKey]>, reactingTo?: Committed<Schemas, keyof Schemas>, skipValidation?: boolean): Promise<Snapshot<TState, TEvents>[]>;
62
62
  //# sourceMappingURL=event-sourcing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-sourcing.d.ts","sourceRoot":"","sources":["../../src/event-sourcing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,SAAS,EAGT,MAAM,EACN,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EACP,MAAM,kBAAkB,CAAC;AAG1B;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAC5D,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,IAAI,CACxB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,EAEjB,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,GAC5C,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAsBzB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,MAAM,CAC1B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,EAEjB,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClB,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvB,UAAU,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,EAC9C,cAAc,UAAQ,GACrB,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CA6F3B"}
1
+ {"version":3,"file":"event-sourcing.d.ts","sourceRoot":"","sources":["../../src/event-sourcing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,SAAS,EAGT,MAAM,EACN,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EACP,MAAM,kBAAkB,CAAC;AAG1B;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,IAAI,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,SAAS,OAAO,EACvE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,IAAI,CACxB,MAAM,SAAS,MAAM,EACrB,OAAO,SAAS,OAAO,EACvB,QAAQ,SAAS,OAAO,EAExB,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsBpC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,MAAM,CAC1B,MAAM,SAAS,MAAM,EACrB,OAAO,SAAS,OAAO,EACvB,QAAQ,SAAS,OAAO,EACxB,IAAI,SAAS,MAAM,QAAQ,EAE3B,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EACpC,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EACjC,UAAU,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,EAC9C,cAAc,UAAQ,GACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CA6FtC"}
@@ -23,7 +23,7 @@ export declare function mergeSchemas(existing: ZodType, incoming: ZodType, state
23
23
  * Merges two init functions by spreading both results together.
24
24
  * Each partial only provides its own defaults.
25
25
  */
26
- export declare function mergeInits<S extends Schema>(existing: () => Readonly<S>, incoming: () => Readonly<S>): () => Readonly<S>;
26
+ export declare function mergeInits<TState extends Schema>(existing: () => Readonly<TState>, incoming: () => Readonly<TState>): () => Readonly<TState>;
27
27
  /**
28
28
  * Registers a state into a states map and action/event registries,
29
29
  * merging with existing same-name states (partial state support).
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAMrD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAkBT;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,QAAQ,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,GAC1B,MAAM,QAAQ,CAAC,CAAC,CAAC,CAEnB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,IAAI,CAoDN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,IAAI,CAiBN;AAGD,eAAO,MAAM,MAAM,GAAI,YAAY;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;;;CAGnD,CAAC;AAGH,eAAO,MAAM,MAAM,iBAAkB,CAAC"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAMrD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAkBT;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAS,MAAM,EAC9C,QAAQ,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,GAC/B,MAAM,QAAQ,CAAC,MAAM,CAAC,CAExB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,IAAI,CAoDN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,IAAI,CAiBN;AAGD,eAAO,MAAM,MAAM,GAAI,YAAY;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;;;CAGnD,CAAC;AAGH,eAAO,MAAM,MAAM,iBAAkB,CAAC"}