@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.
@@ -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, Record<string, never>>;
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: string, state: ZodType<S>): StateBuilder<S>;
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":"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"}
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: string;
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":"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"}
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
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
- * Loads the current state snapshot for a specific stream.
881
- *
882
- * Reconstructs the current state by replaying events from the event store.
883
- * Uses snapshots when available to optimize loading performance.
884
- *
885
- * @template SX - State schema type
886
- * @template EX - Event schemas type
887
- * @template AX - Action schemas type
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/act-builder.ts
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
- * Adds a state to the builder. When a state with the same name is already
1390
- * registered, merges the new partial's actions, events, patches, and handlers
1391
- * into the existing state (errors on duplicate action/event names).
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 name of Object.keys(state2.events)) {
1407
- if (registry.events[name])
1408
- throw new Error(`Duplicate event "${name}"`);
1409
- }
1410
- const merged = {
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
- return act(
1446
- states,
1447
- registry
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.set(handler.name, reaction);
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(handler.name, {
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(handler.name, {
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