@rotorsoft/act 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/act-builder.d.ts +1 -1
- package/dist/@types/state-builder.d.ts +12 -9
- package/dist/@types/state-builder.d.ts.map +1 -1
- package/dist/@types/utils.d.ts +2 -2
- package/dist/index.cjs +6 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -81,6 +81,10 @@ export type StateBuilder<S extends Schema, N extends string = string> = {
|
|
|
81
81
|
};
|
|
82
82
|
};
|
|
83
83
|
};
|
|
84
|
+
/** Helper: a single-key record mapping a state name to its Zod schema. */
|
|
85
|
+
type StateEntry<K extends string = string, S extends Schema = Schema> = {
|
|
86
|
+
[P in K]: ZodType<S>;
|
|
87
|
+
};
|
|
84
88
|
/** Helper: a single-key record mapping an action name to its Zod schema. */
|
|
85
89
|
type ActionEntry<K extends string = string, AX extends Schema = Schema> = {
|
|
86
90
|
[P in K]: ZodType<AX>;
|
|
@@ -265,7 +269,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
265
269
|
*
|
|
266
270
|
* @example
|
|
267
271
|
* ```typescript
|
|
268
|
-
* const Counter = state(
|
|
272
|
+
* const Counter = state({ Counter: schema })
|
|
269
273
|
* .init(() => ({ count: 0 }))
|
|
270
274
|
* .emits({ Incremented: z.object({ amount: z.number() }) })
|
|
271
275
|
* .patch({ Incremented: (event, state) => ({ count: state.count + event.data.amount }) })
|
|
@@ -293,8 +297,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
293
297
|
* 6. Snapshotting strategy via `.snap()`
|
|
294
298
|
*
|
|
295
299
|
* @template S - Zod schema type defining the shape of the state
|
|
296
|
-
* @param
|
|
297
|
-
* @param state - Zod schema defining the structure of the state
|
|
300
|
+
* @param entry - Single-key record mapping state name to Zod schema (e.g., `{ Counter: z.object({ count: z.number() }) }`)
|
|
298
301
|
* @returns A StateBuilder instance for fluent API configuration
|
|
299
302
|
*
|
|
300
303
|
* @example Basic counter state
|
|
@@ -302,7 +305,7 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
302
305
|
* import { state } from "@rotorsoft/act";
|
|
303
306
|
* import { z } from "zod";
|
|
304
307
|
*
|
|
305
|
-
* const Counter = state(
|
|
308
|
+
* const Counter = state({ Counter: z.object({ count: z.number() }) })
|
|
306
309
|
* .init(() => ({ count: 0 }))
|
|
307
310
|
* .emits({
|
|
308
311
|
* Incremented: z.object({ amount: z.number() })
|
|
@@ -317,11 +320,11 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
317
320
|
*
|
|
318
321
|
* @example State with multiple events and invariants
|
|
319
322
|
* ```typescript
|
|
320
|
-
* const BankAccount = state(
|
|
323
|
+
* const BankAccount = state({ BankAccount: z.object({
|
|
321
324
|
* balance: z.number(),
|
|
322
325
|
* currency: z.string(),
|
|
323
326
|
* status: z.enum(["open", "closed"])
|
|
324
|
-
* }))
|
|
327
|
+
* }) })
|
|
325
328
|
* .init(() => ({ balance: 0, currency: "USD", status: "open" }))
|
|
326
329
|
* .emits({
|
|
327
330
|
* Deposited: z.object({ amount: z.number() }),
|
|
@@ -356,11 +359,11 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
356
359
|
*
|
|
357
360
|
* @example State with snapshotting
|
|
358
361
|
* ```typescript
|
|
359
|
-
* const User = state(
|
|
362
|
+
* const User = state({ User: z.object({
|
|
360
363
|
* name: z.string(),
|
|
361
364
|
* email: z.string(),
|
|
362
365
|
* loginCount: z.number()
|
|
363
|
-
* }))
|
|
366
|
+
* }) })
|
|
364
367
|
* .init((data) => ({ ...data, loginCount: 0 }))
|
|
365
368
|
* .emits({
|
|
366
369
|
* UserCreated: z.object({ name: z.string(), email: z.string() }),
|
|
@@ -383,6 +386,6 @@ export type ActionBuilder<S extends Schema, E extends Schemas, A extends Schemas
|
|
|
383
386
|
* @see {@link https://rotorsoft.github.io/act-root/docs/intro | Getting Started Guide}
|
|
384
387
|
* @see {@link https://rotorsoft.github.io/act-root/docs/examples/calculator | Calculator Example}
|
|
385
388
|
*/
|
|
386
|
-
export declare function state<N extends string, S extends Schema>(
|
|
389
|
+
export declare function state<N extends string, S extends Schema>(entry: StateEntry<N, S>): StateBuilder<S, N>;
|
|
387
390
|
export {};
|
|
388
391
|
//# 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,KAChB;YACH;;;;;;;;;;;;;;;;;;eAkBG;YACH,KAAK,EAAE,CACL,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,KAEvB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SACjC,CAAC;KACH,CAAC;CACH,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;;;;;;;;;;;;;;;;;eAiBG;YACH,IAAI,EAAE,CACJ,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE;iBAAG,CAAC,IAAI,CAAC,GAAG,EAAE;aAAE,EAAE,CAAC,CAAC,KAC9C,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;iBAAG,CAAC,IAAI,CAAC,GAAG,EAAE;aAAE,EAAE,CAAC,CAAC,CAAC;SACnD,CAAC;QACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmCG;QACH,IAAI,EAAE,CACJ,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE;aAAG,CAAC,IAAI,CAAC,GAAG,EAAE;SAAE,EAAE,CAAC,CAAC,KAC9C,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
|
|
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,KAChB;YACH;;;;;;;;;;;;;;;;;;eAkBG;YACH,KAAK,EAAE,CACL,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,KAEvB,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;;;;;;;;;;;;;;;;;eAiBG;YACH,IAAI,EAAE,CACJ,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE;iBAAG,CAAC,IAAI,CAAC,GAAG,EAAE;aAAE,EAAE,CAAC,CAAC,KAC9C,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;iBAAG,CAAC,IAAI,CAAC,GAAG,EAAE;aAAE,EAAE,CAAC,CAAC,CAAC;SACnD,CAAC;QACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmCG;QACH,IAAI,EAAE,CACJ,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE;aAAG,CAAC,IAAI,CAAC,GAAG,EAAE;SAAE,EAAE,CAAC,CAAC,KAC9C,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG;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,CA2BpB"}
|
package/dist/@types/utils.d.ts
CHANGED
|
@@ -83,7 +83,7 @@ import type { Patch, Schema } from "./types/index.js";
|
|
|
83
83
|
* import { state } from "@rotorsoft/act";
|
|
84
84
|
* import { z } from "zod";
|
|
85
85
|
*
|
|
86
|
-
* const Counter = state(
|
|
86
|
+
* const Counter = state({ Counter: z.object({ count: z.number() }) })
|
|
87
87
|
* .init(() => ({ count: 0 }))
|
|
88
88
|
* .emits({ Incremented: z.object({ by: z.number() }) })
|
|
89
89
|
* .patch({
|
|
@@ -166,7 +166,7 @@ export declare const patch: <S extends Schema>(original: Readonly<S>, patches: R
|
|
|
166
166
|
* import { state } from "@rotorsoft/act";
|
|
167
167
|
* import { z } from "zod";
|
|
168
168
|
*
|
|
169
|
-
* const Counter = state(
|
|
169
|
+
* const Counter = state({ Counter: z.object({ count: z.number() }) })
|
|
170
170
|
* .init(() => ({ count: 0 }))
|
|
171
171
|
* .emits({ Incremented: z.object({ by: z.number().positive() }) })
|
|
172
172
|
* .on({ increment: z.object({ by: z.number() }) })
|
package/dist/index.cjs
CHANGED
|
@@ -1631,7 +1631,11 @@ function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
|
1631
1631
|
}
|
|
1632
1632
|
|
|
1633
1633
|
// src/state-builder.ts
|
|
1634
|
-
function state(
|
|
1634
|
+
function state(entry) {
|
|
1635
|
+
const keys = Object.keys(entry);
|
|
1636
|
+
if (keys.length !== 1) throw new Error("state() requires exactly one key");
|
|
1637
|
+
const name = keys[0];
|
|
1638
|
+
const stateSchema = entry[name];
|
|
1635
1639
|
return {
|
|
1636
1640
|
init(init) {
|
|
1637
1641
|
return {
|
|
@@ -1641,7 +1645,7 @@ function state(name, state2) {
|
|
|
1641
1645
|
return action_builder({
|
|
1642
1646
|
events,
|
|
1643
1647
|
actions: {},
|
|
1644
|
-
state:
|
|
1648
|
+
state: stateSchema,
|
|
1645
1649
|
name,
|
|
1646
1650
|
init,
|
|
1647
1651
|
patch: patch2,
|