@rotorsoft/act 0.7.0 → 0.9.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/dist/.tsbuildinfo +1 -1
- package/dist/@types/act-builder.d.ts +35 -223
- package/dist/@types/act-builder.d.ts.map +1 -1
- package/dist/@types/act.d.ts +13 -10
- package/dist/@types/act.d.ts.map +1 -1
- package/dist/@types/index.d.ts +1 -0
- package/dist/@types/index.d.ts.map +1 -1
- package/dist/@types/merge.d.ts +38 -0
- package/dist/@types/merge.d.ts.map +1 -0
- package/dist/@types/slice-builder.d.ts +107 -0
- package/dist/@types/slice-builder.d.ts.map +1 -0
- package/dist/@types/state-builder.d.ts +9 -9
- package/dist/@types/state-builder.d.ts.map +1 -1
- package/dist/@types/types/action.d.ts +47 -2
- package/dist/@types/types/action.d.ts.map +1 -1
- package/dist/@types/types/reaction.d.ts +1 -1
- package/dist/@types/types/reaction.d.ts.map +1 -1
- package/dist/index.cjs +165 -108
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +163 -108
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -17,7 +17,7 @@ import { ActionHandler, Invariant, PatchHandlers, Schema, Schemas, Snapshot, Sta
|
|
|
17
17
|
* @see {@link state} for usage examples
|
|
18
18
|
* @see {@link ActionBuilder} for action configuration
|
|
19
19
|
*/
|
|
20
|
-
export type StateBuilder<S extends Schema> = {
|
|
20
|
+
export type StateBuilder<S extends Schema, N extends string = string> = {
|
|
21
21
|
/**
|
|
22
22
|
* Defines the initial state for new state instances.
|
|
23
23
|
*
|
|
@@ -77,7 +77,7 @@ export type StateBuilder<S extends Schema> = {
|
|
|
77
77
|
* })
|
|
78
78
|
* ```
|
|
79
79
|
*/
|
|
80
|
-
patch: (patch: PatchHandlers<S, E>) => ActionBuilder<S, E,
|
|
80
|
+
patch: (patch: PatchHandlers<S, E>) => ActionBuilder<S, E, {}, N>;
|
|
81
81
|
};
|
|
82
82
|
};
|
|
83
83
|
};
|
|
@@ -93,7 +93,7 @@ export type StateBuilder<S extends Schema> = {
|
|
|
93
93
|
*
|
|
94
94
|
* @see {@link state} for complete usage examples
|
|
95
95
|
*/
|
|
96
|
-
export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas> = {
|
|
96
|
+
export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas, N extends string = string> = {
|
|
97
97
|
/**
|
|
98
98
|
* Defines an action (command) that can be executed on this state.
|
|
99
99
|
*
|
|
@@ -175,7 +175,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
175
175
|
[P in K]: AX;
|
|
176
176
|
}, K>) => ActionBuilder<S, E, A & {
|
|
177
177
|
[P in K]: AX;
|
|
178
|
-
}>;
|
|
178
|
+
}, N>;
|
|
179
179
|
};
|
|
180
180
|
/**
|
|
181
181
|
* Defines the action handler that emits events.
|
|
@@ -217,7 +217,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
217
217
|
[P in K]: AX;
|
|
218
218
|
}, K>) => ActionBuilder<S, E, A & {
|
|
219
219
|
[P in K]: AX;
|
|
220
|
-
}>;
|
|
220
|
+
}, N>;
|
|
221
221
|
};
|
|
222
222
|
/**
|
|
223
223
|
* Defines a snapshotting strategy to optimize state reconstruction.
|
|
@@ -250,7 +250,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
250
250
|
* })
|
|
251
251
|
* ```
|
|
252
252
|
*/
|
|
253
|
-
snap: (snap: (snapshot: Snapshot<S, E>) => boolean) => ActionBuilder<S, E, A>;
|
|
253
|
+
snap: (snap: (snapshot: Snapshot<S, E>) => boolean) => ActionBuilder<S, E, A, N>;
|
|
254
254
|
/**
|
|
255
255
|
* Finalizes and builds the state definition.
|
|
256
256
|
*
|
|
@@ -267,10 +267,10 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
267
267
|
* .patch({ Incremented: (event, state) => ({ count: state.count + event.data.amount }) })
|
|
268
268
|
* .on("increment", z.object({ by: z.number() }))
|
|
269
269
|
* .emit((action) => ["Incremented", { amount: action.by }])
|
|
270
|
-
* .build(); // Returns State<S, E, A>
|
|
270
|
+
* .build(); // Returns State<S, E, A, N>
|
|
271
271
|
* ```
|
|
272
272
|
*/
|
|
273
|
-
build: () => State<S, E, A>;
|
|
273
|
+
build: () => State<S, E, A, N>;
|
|
274
274
|
};
|
|
275
275
|
/**
|
|
276
276
|
* Creates a new state definition with event sourcing capabilities.
|
|
@@ -379,5 +379,5 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
379
379
|
* @see {@link https://rotorsoft.github.io/act-root/docs/intro | Getting Started Guide}
|
|
380
380
|
* @see {@link https://rotorsoft.github.io/act-root/docs/examples/calculator | Calculator Example}
|
|
381
381
|
*/
|
|
382
|
-
export declare function state<S extends Schema>(name:
|
|
382
|
+
export declare function state<N extends string, S extends Schema>(name: N, state: ZodType<S>): StateBuilder<S, N>;
|
|
383
383
|
//# 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,IAAI;
|
|
1
|
+
{"version":3,"file":"state-builder.d.ts","sourceRoot":"","sources":["../../src/state-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -277,12 +277,57 @@ export type GivenHandlers<S extends Schema, A extends Schemas> = {
|
|
|
277
277
|
* @template E - Event schemas.
|
|
278
278
|
* @template A - Action schemas.
|
|
279
279
|
*/
|
|
280
|
-
export type State<S extends Schema, E extends Schemas, A extends Schemas> = StateSchemas<S, E, A> & {
|
|
281
|
-
name:
|
|
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
282
|
init: () => Readonly<S>;
|
|
283
283
|
patch: PatchHandlers<S, E>;
|
|
284
284
|
on: ActionHandlers<S, E, A>;
|
|
285
285
|
given?: GivenHandlers<S, A>;
|
|
286
286
|
snap?: (snapshot: Snapshot<S, E>) => boolean;
|
|
287
287
|
};
|
|
288
|
+
/**
|
|
289
|
+
* Extracts the raw action schemas from a State definition.
|
|
290
|
+
*
|
|
291
|
+
* Use this to recover the `A` type parameter from a built State object,
|
|
292
|
+
* enabling construction of typed dispatchers without circular imports.
|
|
293
|
+
*
|
|
294
|
+
* @template T - A State object (or any object with `readonly actions: ZodTypes<A>`)
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* ```typescript
|
|
298
|
+
* type Actions = InferActions<typeof Counter>;
|
|
299
|
+
* // => { increment: { by: number } }
|
|
300
|
+
* ```
|
|
301
|
+
*/
|
|
302
|
+
export type InferActions<T extends {
|
|
303
|
+
readonly actions: Record<string, ZodType>;
|
|
304
|
+
}> = {
|
|
305
|
+
[K in keyof T["actions"]]: T["actions"][K] extends ZodType<infer V> ? V : never;
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* Typed interface for the `app.do()` method, enabling reaction handlers
|
|
309
|
+
* to dispatch actions with full autocomplete.
|
|
310
|
+
*
|
|
311
|
+
* Construct with {@link InferActions} to avoid circular imports between
|
|
312
|
+
* slice files and the bootstrap module.
|
|
313
|
+
*
|
|
314
|
+
* @template A - Action schemas (maps action names to payload types)
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* ```typescript
|
|
318
|
+
* import type { Dispatcher, InferActions } from "@rotorsoft/act";
|
|
319
|
+
*
|
|
320
|
+
* type App = Dispatcher<
|
|
321
|
+
* InferActions<typeof StateA> &
|
|
322
|
+
* InferActions<typeof StateB>
|
|
323
|
+
* >;
|
|
324
|
+
*
|
|
325
|
+
* async function myReaction(event: ..., stream: string, app: App) {
|
|
326
|
+
* await app.do("someAction", target, payload, event);
|
|
327
|
+
* }
|
|
328
|
+
* ```
|
|
329
|
+
*/
|
|
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<any>;
|
|
332
|
+
}
|
|
288
333
|
//# sourceMappingURL=action.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACb,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;KACpB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,OAAO,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;IAC1D,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GACzE,aAAa,CAAC;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,IAAI;IAC1D,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,OAAO,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7C,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,IACf;IACF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,IACf,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,IAAI;KAC9D,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACtC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,IACf,CACF,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAClC,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CACxB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,IACf;KACD,CAAC,IAAI,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,IAAI;KAC9D,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE;CAChC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,CACf,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACb,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;KACpB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,OAAO,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;IAC1D,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GACzE,aAAa,CAAC;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,IAAI;IAC1D,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,OAAO,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7C,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,IACf;IACF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,IACf,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,IAAI;KAC9D,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACtC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,CAAC,IACf,CACF,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAClC,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CACxB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,IACf;KACD,CAAC,IAAI,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,IAAI;KAC9D,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE;CAChC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,CACf,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,MAAM,GAAG,MAAM,IACvB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IAC1B,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,EAAE,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC;CAC9C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,IACrD;KACD,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAC/D,CAAC,GACD,KAAK;CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,OAAO;IAC3C,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC3B,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,CAAC,EACvC,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,GAAG,CAAC,CAAC;CACjB"}
|
|
@@ -38,7 +38,7 @@ import type { Committed, Schema, Schemas, Snapshot } from "./action.js";
|
|
|
38
38
|
*
|
|
39
39
|
* @see {@link Reaction} for complete reaction configuration
|
|
40
40
|
*/
|
|
41
|
-
export type ReactionHandler<E extends Schemas, K extends keyof E> = (event: Committed<E, K>, stream: string) => Promise<Snapshot<E, Schema> | void>;
|
|
41
|
+
export type ReactionHandler<E extends Schemas, K extends keyof E> = (event: Committed<E, K>, stream: string, app: any) => Promise<Snapshot<E, Schema> | void>;
|
|
42
42
|
/**
|
|
43
43
|
* Resolver for determining which stream a reaction should target.
|
|
44
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAClE,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -53,10 +53,12 @@ __export(index_exports, {
|
|
|
53
53
|
dispose: () => dispose,
|
|
54
54
|
disposeAndExit: () => disposeAndExit,
|
|
55
55
|
extend: () => extend,
|
|
56
|
+
isSlice: () => isSlice,
|
|
56
57
|
logger: () => logger,
|
|
57
58
|
patch: () => patch,
|
|
58
59
|
port: () => port,
|
|
59
60
|
sleep: () => sleep,
|
|
61
|
+
slice: () => slice,
|
|
60
62
|
state: () => state,
|
|
61
63
|
store: () => store,
|
|
62
64
|
validate: () => validate
|
|
@@ -869,54 +871,21 @@ var Act = class {
|
|
|
869
871
|
action2,
|
|
870
872
|
target,
|
|
871
873
|
payload,
|
|
872
|
-
// @ts-expect-error type lost
|
|
873
874
|
reactingTo,
|
|
874
875
|
skipValidation
|
|
875
876
|
);
|
|
876
877
|
this.emit("committed", snapshots);
|
|
877
878
|
return snapshots;
|
|
878
879
|
}
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
* @param state - The state definition to load
|
|
889
|
-
* @param stream - The stream ID (state instance identifier)
|
|
890
|
-
* @param callback - Optional callback invoked with the loaded snapshot
|
|
891
|
-
* @returns The current state snapshot for the stream
|
|
892
|
-
*
|
|
893
|
-
* @example Load current state
|
|
894
|
-
* ```typescript
|
|
895
|
-
* const snapshot = await app.load(Counter, "counter-1");
|
|
896
|
-
* console.log(snapshot.state.count); // Current count
|
|
897
|
-
* console.log(snapshot.version); // Number of events applied
|
|
898
|
-
* console.log(snapshot.patches); // Events since last snapshot
|
|
899
|
-
* ```
|
|
900
|
-
*
|
|
901
|
-
* @example With callback
|
|
902
|
-
* ```typescript
|
|
903
|
-
* const snapshot = await app.load(User, "user-123", (snap) => {
|
|
904
|
-
* console.log("Loaded user:", snap.state.name);
|
|
905
|
-
* });
|
|
906
|
-
* ```
|
|
907
|
-
*
|
|
908
|
-
* @example Load multiple states
|
|
909
|
-
* ```typescript
|
|
910
|
-
* const [user, account] = await Promise.all([
|
|
911
|
-
* app.load(User, "user-123"),
|
|
912
|
-
* app.load(BankAccount, "account-456")
|
|
913
|
-
* ]);
|
|
914
|
-
* ```
|
|
915
|
-
*
|
|
916
|
-
* @see {@link Snapshot} for snapshot structure
|
|
917
|
-
*/
|
|
918
|
-
async load(state2, stream, callback) {
|
|
919
|
-
const merged = this._states.get(state2.name) || state2;
|
|
880
|
+
async load(stateOrName, stream, callback) {
|
|
881
|
+
let merged;
|
|
882
|
+
if (typeof stateOrName === "string") {
|
|
883
|
+
const found = this._states.get(stateOrName);
|
|
884
|
+
if (!found) throw new Error(`State "${stateOrName}" not found`);
|
|
885
|
+
merged = found;
|
|
886
|
+
} else {
|
|
887
|
+
merged = this._states.get(stateOrName.name) || stateOrName;
|
|
888
|
+
}
|
|
920
889
|
return await load(merged, stream, callback);
|
|
921
890
|
}
|
|
922
891
|
/**
|
|
@@ -1029,7 +998,7 @@ var Act = class {
|
|
|
1029
998
|
for (const payload of payloads) {
|
|
1030
999
|
const { event, handler, options } = payload;
|
|
1031
1000
|
try {
|
|
1032
|
-
await handler(event, stream);
|
|
1001
|
+
await handler(event, stream, this);
|
|
1033
1002
|
at = event.id;
|
|
1034
1003
|
handled++;
|
|
1035
1004
|
} catch (error) {
|
|
@@ -1142,7 +1111,8 @@ var Act = class {
|
|
|
1142
1111
|
);
|
|
1143
1112
|
fetched.forEach(({ stream, lagging: lagging2, events }) => {
|
|
1144
1113
|
const payloads = events.flatMap((event) => {
|
|
1145
|
-
const register = this.registry.events[event.name]
|
|
1114
|
+
const register = this.registry.events[event.name];
|
|
1115
|
+
if (!register) return [];
|
|
1146
1116
|
return [...register.reactions.values()].filter((reaction) => {
|
|
1147
1117
|
const resolved = typeof reaction.resolver === "function" ? reaction.resolver(event) : reaction.resolver;
|
|
1148
1118
|
return resolved && resolved.target === stream;
|
|
@@ -1157,7 +1127,6 @@ var Act = class {
|
|
|
1157
1127
|
retry: 0,
|
|
1158
1128
|
lagging: lagging2
|
|
1159
1129
|
},
|
|
1160
|
-
// @ts-expect-error indexed by key
|
|
1161
1130
|
payloads
|
|
1162
1131
|
});
|
|
1163
1132
|
});
|
|
@@ -1374,79 +1343,164 @@ var Act = class {
|
|
|
1374
1343
|
}
|
|
1375
1344
|
};
|
|
1376
1345
|
|
|
1377
|
-
// src/
|
|
1346
|
+
// src/merge.ts
|
|
1347
|
+
var import_zod4 = require("zod");
|
|
1348
|
+
function baseTypeName(zodType) {
|
|
1349
|
+
let t = zodType;
|
|
1350
|
+
while (typeof t.unwrap === "function") {
|
|
1351
|
+
t = t.unwrap();
|
|
1352
|
+
}
|
|
1353
|
+
return t.constructor.name;
|
|
1354
|
+
}
|
|
1355
|
+
function mergeSchemas(existing, incoming, stateName) {
|
|
1356
|
+
if (existing instanceof import_zod4.ZodObject && incoming instanceof import_zod4.ZodObject) {
|
|
1357
|
+
const existingShape = existing.shape;
|
|
1358
|
+
const incomingShape = incoming.shape;
|
|
1359
|
+
for (const key of Object.keys(incomingShape)) {
|
|
1360
|
+
if (key in existingShape) {
|
|
1361
|
+
const existingBase = baseTypeName(existingShape[key]);
|
|
1362
|
+
const incomingBase = baseTypeName(incomingShape[key]);
|
|
1363
|
+
if (existingBase !== incomingBase) {
|
|
1364
|
+
throw new Error(
|
|
1365
|
+
`Schema conflict in "${stateName}": key "${key}" has type "${existingBase}" but incoming partial declares "${incomingBase}"`
|
|
1366
|
+
);
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
return existing.extend(incomingShape);
|
|
1371
|
+
}
|
|
1372
|
+
return existing;
|
|
1373
|
+
}
|
|
1374
|
+
function mergeInits(existing, incoming) {
|
|
1375
|
+
return () => ({ ...existing(), ...incoming() });
|
|
1376
|
+
}
|
|
1377
|
+
function registerState(state2, states, actions, events) {
|
|
1378
|
+
if (states.has(state2.name)) {
|
|
1379
|
+
const existing = states.get(state2.name);
|
|
1380
|
+
for (const name of Object.keys(state2.actions)) {
|
|
1381
|
+
if (existing.actions[name] === state2.actions[name]) continue;
|
|
1382
|
+
if (actions[name]) throw new Error(`Duplicate action "${name}"`);
|
|
1383
|
+
}
|
|
1384
|
+
for (const name of Object.keys(state2.events)) {
|
|
1385
|
+
if (existing.events[name] === state2.events[name]) continue;
|
|
1386
|
+
if (events[name]) throw new Error(`Duplicate event "${name}"`);
|
|
1387
|
+
}
|
|
1388
|
+
const merged = {
|
|
1389
|
+
...existing,
|
|
1390
|
+
state: mergeSchemas(existing.state, state2.state, state2.name),
|
|
1391
|
+
init: mergeInits(existing.init, state2.init),
|
|
1392
|
+
events: { ...existing.events, ...state2.events },
|
|
1393
|
+
actions: { ...existing.actions, ...state2.actions },
|
|
1394
|
+
patch: { ...existing.patch, ...state2.patch },
|
|
1395
|
+
on: { ...existing.on, ...state2.on },
|
|
1396
|
+
given: { ...existing.given, ...state2.given },
|
|
1397
|
+
snap: state2.snap || existing.snap
|
|
1398
|
+
};
|
|
1399
|
+
states.set(state2.name, merged);
|
|
1400
|
+
for (const name of Object.keys(merged.actions)) {
|
|
1401
|
+
actions[name] = merged;
|
|
1402
|
+
}
|
|
1403
|
+
for (const name of Object.keys(state2.events)) {
|
|
1404
|
+
if (events[name]) continue;
|
|
1405
|
+
events[name] = {
|
|
1406
|
+
schema: state2.events[name],
|
|
1407
|
+
reactions: /* @__PURE__ */ new Map()
|
|
1408
|
+
};
|
|
1409
|
+
}
|
|
1410
|
+
} else {
|
|
1411
|
+
states.set(state2.name, state2);
|
|
1412
|
+
for (const name of Object.keys(state2.actions)) {
|
|
1413
|
+
if (actions[name]) throw new Error(`Duplicate action "${name}"`);
|
|
1414
|
+
actions[name] = state2;
|
|
1415
|
+
}
|
|
1416
|
+
for (const name of Object.keys(state2.events)) {
|
|
1417
|
+
if (events[name]) throw new Error(`Duplicate event "${name}"`);
|
|
1418
|
+
events[name] = {
|
|
1419
|
+
schema: state2.events[name],
|
|
1420
|
+
reactions: /* @__PURE__ */ new Map()
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1378
1425
|
var _this_ = ({ stream }) => ({
|
|
1379
1426
|
source: stream,
|
|
1380
1427
|
target: stream
|
|
1381
1428
|
});
|
|
1382
1429
|
var _void_ = () => void 0;
|
|
1430
|
+
|
|
1431
|
+
// src/slice-builder.ts
|
|
1432
|
+
function isSlice(x) {
|
|
1433
|
+
return x != null && x._tag === "Slice";
|
|
1434
|
+
}
|
|
1435
|
+
function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}) {
|
|
1436
|
+
const builder = {
|
|
1437
|
+
with: (state2) => {
|
|
1438
|
+
registerState(state2, states, actions, events);
|
|
1439
|
+
return slice(states, actions, events);
|
|
1440
|
+
},
|
|
1441
|
+
on: (event) => ({
|
|
1442
|
+
do: (handler, options) => {
|
|
1443
|
+
const reaction = {
|
|
1444
|
+
handler,
|
|
1445
|
+
resolver: _this_,
|
|
1446
|
+
options: {
|
|
1447
|
+
blockOnError: options?.blockOnError ?? true,
|
|
1448
|
+
maxRetries: options?.maxRetries ?? 3
|
|
1449
|
+
}
|
|
1450
|
+
};
|
|
1451
|
+
const name = handler.name || `${String(event)}_${events[event].reactions.size}`;
|
|
1452
|
+
events[event].reactions.set(name, reaction);
|
|
1453
|
+
return {
|
|
1454
|
+
...builder,
|
|
1455
|
+
to(resolver) {
|
|
1456
|
+
events[event].reactions.set(name, {
|
|
1457
|
+
...reaction,
|
|
1458
|
+
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1459
|
+
});
|
|
1460
|
+
return builder;
|
|
1461
|
+
},
|
|
1462
|
+
void() {
|
|
1463
|
+
events[event].reactions.set(name, {
|
|
1464
|
+
...reaction,
|
|
1465
|
+
resolver: _void_
|
|
1466
|
+
});
|
|
1467
|
+
return builder;
|
|
1468
|
+
}
|
|
1469
|
+
};
|
|
1470
|
+
}
|
|
1471
|
+
}),
|
|
1472
|
+
build: () => ({
|
|
1473
|
+
_tag: "Slice",
|
|
1474
|
+
states,
|
|
1475
|
+
events
|
|
1476
|
+
}),
|
|
1477
|
+
events
|
|
1478
|
+
};
|
|
1479
|
+
return builder;
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
// src/act-builder.ts
|
|
1383
1483
|
function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
1384
1484
|
actions: {},
|
|
1385
1485
|
events: {}
|
|
1386
1486
|
}) {
|
|
1387
1487
|
const builder = {
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
*
|
|
1393
|
-
* @template SX The type of state
|
|
1394
|
-
* @template EX The type of events
|
|
1395
|
-
* @template AX The type of actions
|
|
1396
|
-
* @param state The state to add
|
|
1397
|
-
* @returns The builder
|
|
1398
|
-
*/
|
|
1399
|
-
with: (state2) => {
|
|
1400
|
-
if (states.has(state2.name)) {
|
|
1401
|
-
const existing = states.get(state2.name);
|
|
1402
|
-
for (const name of Object.keys(state2.actions)) {
|
|
1403
|
-
if (registry.actions[name])
|
|
1404
|
-
throw new Error(`Duplicate action "${name}"`);
|
|
1488
|
+
with: ((input) => {
|
|
1489
|
+
if (isSlice(input)) {
|
|
1490
|
+
for (const s of input.states.values()) {
|
|
1491
|
+
registerState(s, states, registry.actions, registry.events);
|
|
1405
1492
|
}
|
|
1406
|
-
for (const
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
...existing,
|
|
1412
|
-
events: { ...existing.events, ...state2.events },
|
|
1413
|
-
actions: { ...existing.actions, ...state2.actions },
|
|
1414
|
-
patch: { ...existing.patch, ...state2.patch },
|
|
1415
|
-
on: { ...existing.on, ...state2.on },
|
|
1416
|
-
given: { ...existing.given, ...state2.given },
|
|
1417
|
-
snap: state2.snap || existing.snap
|
|
1418
|
-
};
|
|
1419
|
-
states.set(state2.name, merged);
|
|
1420
|
-
for (const name of Object.keys(merged.actions)) {
|
|
1421
|
-
registry.actions[name] = merged;
|
|
1422
|
-
}
|
|
1423
|
-
for (const name of Object.keys(state2.events)) {
|
|
1424
|
-
registry.events[name] = {
|
|
1425
|
-
schema: state2.events[name],
|
|
1426
|
-
reactions: /* @__PURE__ */ new Map()
|
|
1427
|
-
};
|
|
1428
|
-
}
|
|
1429
|
-
} else {
|
|
1430
|
-
states.set(state2.name, state2);
|
|
1431
|
-
for (const name of Object.keys(state2.actions)) {
|
|
1432
|
-
if (registry.actions[name])
|
|
1433
|
-
throw new Error(`Duplicate action "${name}"`);
|
|
1434
|
-
registry.actions[name] = state2;
|
|
1435
|
-
}
|
|
1436
|
-
for (const name of Object.keys(state2.events)) {
|
|
1437
|
-
if (registry.events[name])
|
|
1438
|
-
throw new Error(`Duplicate event "${name}"`);
|
|
1439
|
-
registry.events[name] = {
|
|
1440
|
-
schema: state2.events[name],
|
|
1441
|
-
reactions: /* @__PURE__ */ new Map()
|
|
1442
|
-
};
|
|
1493
|
+
for (const eventName of Object.keys(input.events)) {
|
|
1494
|
+
const sliceRegister = input.events[eventName];
|
|
1495
|
+
for (const [name, reaction] of sliceRegister.reactions) {
|
|
1496
|
+
registry.events[eventName].reactions.set(name, reaction);
|
|
1497
|
+
}
|
|
1443
1498
|
}
|
|
1499
|
+
return act(states, registry);
|
|
1444
1500
|
}
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
);
|
|
1449
|
-
},
|
|
1501
|
+
registerState(input, states, registry.actions, registry.events);
|
|
1502
|
+
return act(states, registry);
|
|
1503
|
+
}),
|
|
1450
1504
|
/**
|
|
1451
1505
|
* Adds a reaction to an event.
|
|
1452
1506
|
*
|
|
@@ -1464,18 +1518,19 @@ function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
|
1464
1518
|
maxRetries: options?.maxRetries ?? 3
|
|
1465
1519
|
}
|
|
1466
1520
|
};
|
|
1467
|
-
registry.events[event].reactions.
|
|
1521
|
+
const name = handler.name || `${String(event)}_${registry.events[event].reactions.size}`;
|
|
1522
|
+
registry.events[event].reactions.set(name, reaction);
|
|
1468
1523
|
return {
|
|
1469
1524
|
...builder,
|
|
1470
1525
|
to(resolver) {
|
|
1471
|
-
registry.events[event].reactions.set(
|
|
1526
|
+
registry.events[event].reactions.set(name, {
|
|
1472
1527
|
...reaction,
|
|
1473
1528
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1474
1529
|
});
|
|
1475
1530
|
return builder;
|
|
1476
1531
|
},
|
|
1477
1532
|
void() {
|
|
1478
|
-
registry.events[event].reactions.set(
|
|
1533
|
+
registry.events[event].reactions.set(name, {
|
|
1479
1534
|
...reaction,
|
|
1480
1535
|
resolver: _void_
|
|
1481
1536
|
});
|
|
@@ -1570,10 +1625,12 @@ function action_builder(state2) {
|
|
|
1570
1625
|
dispose,
|
|
1571
1626
|
disposeAndExit,
|
|
1572
1627
|
extend,
|
|
1628
|
+
isSlice,
|
|
1573
1629
|
logger,
|
|
1574
1630
|
patch,
|
|
1575
1631
|
port,
|
|
1576
1632
|
sleep,
|
|
1633
|
+
slice,
|
|
1577
1634
|
state,
|
|
1578
1635
|
store,
|
|
1579
1636
|
validate
|