@xmachines/play-actor 1.0.0-beta.16 → 1.0.0-beta.18

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 CHANGED
@@ -28,6 +28,7 @@ npm install @xmachines/play-actor
28
28
  - `AbstractActor`
29
29
  - `Routable` (type)
30
30
  - `Viewable` (type)
31
+ - `ViewMetadata` (type)
31
32
 
32
33
  **Peer dependencies:**
33
34
 
@@ -43,7 +44,7 @@ npm install @xmachines/play-actor
43
44
  import { definePlayer } from "@xmachines/play-xstate";
44
45
 
45
46
  // definePlayer returns PlayerActor (extends AbstractActor)
46
- const createPlayer = definePlayer({ machine, catalog });
47
+ const createPlayer = definePlayer({ machine });
47
48
  const actor = createPlayer();
48
49
  actor.start();
49
50
 
@@ -71,8 +72,7 @@ Implement `Routable` to add routing support:
71
72
 
72
73
  Implement `Viewable` to add view rendering support:
73
74
 
74
- - `currentView: Signal.State<ViewMetadata | null>` - Current UI structure (updated at state entry)
75
- - `catalog: Record<string, unknown>` - Component catalog
75
+ - `currentView: Signal.State<ViewMetadata | null>` - Current view spec (updated on every state transition). `ViewMetadata` has the shape `{ component: string; spec: Spec }` where `spec` is a `@json-render/core` spec object driving the renderer.
76
76
 
77
77
  **Inherited from XState Actor:**
78
78
 
@@ -84,39 +84,39 @@ Implement `Viewable` to add view rendering support:
84
84
  **Example implementation pattern:**
85
85
 
86
86
  ```typescript
87
- import { AbstractActor, type Routable, type Viewable, type ViewMetadata } from "@xmachines/play-actor";
87
+ import {
88
+ AbstractActor,
89
+ type Routable,
90
+ type Viewable,
91
+ type ViewMetadata,
92
+ } from "@xmachines/play-actor";
88
93
  import { Signal } from "@xmachines/play-signals";
89
94
  import type { AnyActorLogic, AnyMachineSnapshot } from "xstate";
90
95
 
91
96
  class PlayerActor<TLogic extends AnyActorLogic>
92
- extends AbstractActor<TLogic>
93
- implements Routable, Viewable
97
+ extends AbstractActor<TLogic>
98
+ implements Routable, Viewable
94
99
  {
95
- // Required: reactive state snapshot
96
- state = new Signal.State<AnyMachineSnapshot>(this.getSnapshot() as AnyMachineSnapshot);
97
-
98
- // Routable: derived navigation path
99
- currentRoute = new Signal.Computed(() => {
100
- return deriveRoute(this.state.get());
101
- });
102
-
103
- // Viewable: current UI structure — Signal.State, updated at state entry (not computed)
104
- currentView = new Signal.State<ViewMetadata | null>(null);
105
-
106
- // Viewable: component catalog
107
- catalog: Record<string, unknown>;
108
-
109
- constructor(logic: TLogic, catalog: Record<string, unknown>) {
110
- super(logic);
111
- this.catalog = catalog;
112
-
113
- // Subscribe to XState transitions and update signals
114
- this.subscribe((snapshot) => {
115
- this.state.set(snapshot as AnyMachineSnapshot);
116
- // Update currentView based on snapshot meta...
117
- });
118
- }
119
- }
100
+ // Required: reactive state snapshot
101
+ state = new Signal.State<AnyMachineSnapshot>(this.getSnapshot() as AnyMachineSnapshot);
102
+
103
+ // Routable: derived navigation path
104
+ currentRoute = new Signal.Computed(() => {
105
+ return deriveRoute(this.state.get());
106
+ });
107
+
108
+ // Viewable: current view spec — Signal.State, updated on every state transition
109
+ currentView = new Signal.State<ViewMetadata | null>(null);
110
+
111
+ constructor(logic: TLogic) {
112
+ super(logic);
113
+
114
+ // Subscribe to XState transitions and update signals
115
+ this.subscribe((snapshot) => {
116
+ this.state.set(snapshot as AnyMachineSnapshot);
117
+ // Derive currentView from snapshot meta and update the signal...
118
+ });
119
+ }
120
120
  }
121
121
  ```
122
122
 
@@ -16,8 +16,9 @@
16
16
  *
17
17
  * @packageDocumentation
18
18
  */
19
- import { Actor, type AnyActorLogic } from "xstate";
19
+ import { Actor, type AnyActorLogic, type EventObject } from "xstate";
20
20
  import type { Signal } from "@xmachines/play-signals";
21
+ import type { Spec } from "@json-render/core";
21
22
  /**
22
23
  * Optional capability: Routing support
23
24
  *
@@ -54,6 +55,18 @@ export interface Routable {
54
55
  * ```
55
56
  */
56
57
  readonly currentRoute: Signal.Computed<string | null>;
58
+ /**
59
+ * The route derived from the machine's **initial** state — fixed at construction
60
+ * and never changes, even after `start()` with a restored snapshot.
61
+ *
62
+ * Router bridges use this to distinguish a deep-link (browser URL differs from
63
+ * the initial route because the user navigated there) from a restore (browser is
64
+ * at the machine's default starting URL while the actor was restored to a
65
+ * different route from a snapshot).
66
+ *
67
+ * `null` when the machine's initial state has no `meta.route`.
68
+ */
69
+ readonly initialRoute: string | null;
57
70
  }
58
71
  /**
59
72
  * Optional capability: View rendering support
@@ -65,41 +78,75 @@ export interface Routable {
65
78
  * ```typescript
66
79
  * class MyActor extends AbstractActor implements Viewable {
67
80
  * currentView = new Signal.State(null);
68
- * catalog = { HomePage: HomeComponent };
69
81
  * }
70
82
  *
71
83
  * // Renderer requires Viewable
72
84
  * function renderView<T extends AbstractActor & Viewable>(actor: T) {
73
85
  * const view = actor.currentView.get();
74
- * return catalog[view.component];
86
+ * // view.component is the component name; view.spec is the json-render spec
87
+ * }
88
+ * ```
89
+ */
90
+ /**
91
+ * XMachines extension of `@json-render/core` `Spec`.
92
+ *
93
+ * Adds `contextProps` — an explicit allowlist of machine context fields that
94
+ * `deriveCurrentView` merges into element props as low-priority slots. Only
95
+ * fields named here are ever exposed to components; nothing leaks from context
96
+ * without an opt-in declaration.
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * spec: {
101
+ * root: "root",
102
+ * contextProps: ["username"], // expose context.username as a prop slot
103
+ * elements: {
104
+ * root: { type: "Dashboard", props: { username: undefined }, children: [] },
105
+ * },
75
106
  * }
76
107
  * ```
77
108
  */
109
+ export interface PlaySpec extends Spec {
110
+ /**
111
+ * Explicit allowlist of machine context field names to expose as prop slots.
112
+ *
113
+ * Each named field is merged into every spec element's `props` at view derivation
114
+ * time, filling any slot whose current value is `undefined`. `null` and
115
+ * `undefined` context values are skipped. URL route params (from `context.routeParams`)
116
+ * take priority over `contextProps` values; explicit non-`undefined` spec props
117
+ * always take priority over both.
118
+ */
119
+ contextProps?: string[];
120
+ }
78
121
  /**
79
122
  * View metadata for rendering
80
123
  *
81
- * Describes the component to be rendered and the props to pass to it.
124
+ * Describes the component to be rendered and the json-render Spec to use.
82
125
  * Used by PlayRenderer to dynamically render UI based on actor state.
83
126
  */
84
127
  export interface ViewMetadata {
85
- /** Name of the component to render from the catalog */
128
+ /** Root element type name (for diagnostics and component resolution) */
86
129
  component: string;
87
- /** Props to pass to the component */
88
- props: Record<string, unknown>;
130
+ /**
131
+ * XMachines view spec — extends `@json-render/core` Spec with `contextProps`
132
+ * for explicit context field exposure.
133
+ */
134
+ spec: PlaySpec;
89
135
  }
90
136
  /**
91
137
  * Actor capability for exposing renderable view state.
92
138
  *
93
- * `Viewable` marks actors that publish a `currentView` signal plus a component
94
- * catalog. Renderers such as `PlayRenderer` consume this contract to resolve the
139
+ * `Viewable` marks actors that publish a `currentView` signal.
140
+ * Renderers such as `PlayRenderer` consume this contract to resolve the
95
141
  * current view description into concrete UI without embedding view logic inside the
96
- * framework adapter.
142
+ * framework adapter. Component lookup is handled by the json-render registry
143
+ * passed to PlayRenderer, not stored on the actor.
97
144
  */
98
145
  export interface Viewable {
99
146
  /**
100
147
  * Current view signal
101
148
  *
102
- * State signal containing UI structure schema from meta.view. Infrastructure renders view.
149
+ * State signal containing view.component and view.spec from meta.view. Infrastructure renders view.
103
150
  *
104
151
  * Invariant: Logic-Driven UI - View structure is defined by business logic, not JSX.
105
152
  *
@@ -107,19 +154,12 @@ export interface Viewable {
107
154
  * ```typescript
108
155
  * const watcher = new Signal.subtle.Watcher(() => {
109
156
  * const view = actor.currentView.get();
110
- * console.log('View changed:', view);
157
+ * console.log('View changed:', view.component, view.spec);
111
158
  * });
112
159
  * watcher.watch(actor.currentView);
113
160
  * ```
114
161
  */
115
162
  readonly currentView: Signal.State<ViewMetadata | null>;
116
- /**
117
- * Component catalog for view resolution
118
- *
119
- * Maps component names to actual component implementations.
120
- * Used by renderers to resolve view.component to actual UI components.
121
- */
122
- readonly catalog: Record<string, unknown>;
123
163
  }
124
164
  /**
125
165
  * Abstract base class for Play Architecture actors.
@@ -138,13 +178,17 @@ export interface Viewable {
138
178
  * Concrete implementations created by @xmachines/play-xstate adapter.
139
179
  *
140
180
  * @typeParam TLogic - XState actor logic type (maintains type safety)
181
+ * @typeParam TEvent - Event type union that this actor's send() accepts.
182
+ * Defaults to `EventObject` (`{ type: string }`) for backward compatibility.
183
+ * Use `EventFromLogic<TMachine>` from xstate to infer the exact event union
184
+ * from a state machine (e.g., in `PlayerActor`).
141
185
  *
142
186
  * Invariant: Actor Authority - Actor is the sole source of truth for state transitions.
143
187
  * Invariant: Signal-Only Reactivity - Infrastructure observes via TC39 Signals.
144
188
  * Invariant: Passive Infrastructure - Infrastructure reflects, never decides.
145
189
  *
146
190
  * @example
147
- * Simple actor (no routing, no view)
191
+ * Simple actor (no routing, no view) - single type param, backward compat
148
192
  * ```typescript
149
193
  * class SimpleActor extends AbstractActor<AnyActorLogic> {
150
194
  * state = new Signal.State({...});
@@ -153,23 +197,23 @@ export interface Viewable {
153
197
  * ```
154
198
  *
155
199
  * @example
156
- * Routable actor
200
+ * Typed event actor - two type params
157
201
  * ```typescript
158
- * class RoutableActor extends AbstractActor<AnyActorLogic> implements Routable {
202
+ * type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
203
+ * class AuthActor extends AbstractActor<AnyActorLogic, AuthEvent> {
159
204
  * state = new Signal.State({...});
160
- * currentRoute = new Signal.Computed(() => deriveRoute(this.state.get()));
161
- * send(event) { ... }
205
+ * send(event: AuthEvent) { ... }
162
206
  * }
163
207
  * ```
164
208
  *
165
209
  * @example
166
210
  * Full-featured actor (routing + view)
167
211
  * ```typescript
168
- * class PlayerActor extends AbstractActor<AnyActorLogic> implements Routable, Viewable {
212
+ * class PlayerActor extends AbstractActor<AnyActorLogic, EventFromLogic<TMachine>>
213
+ * implements Routable, Viewable {
169
214
  * state = new Signal.State({...});
170
215
  * currentRoute = new Signal.Computed(() => deriveRoute(this.state.get()));
171
216
  * currentView = new Signal.State(null);
172
- * catalog = {};
173
217
  * send(event) { ... }
174
218
  * }
175
219
  * ```
@@ -178,7 +222,7 @@ export interface Viewable {
178
222
  * @see {@link Routable} for routing capability
179
223
  * @see {@link Viewable} for view rendering capability
180
224
  */
181
- export declare abstract class AbstractActor<TLogic extends AnyActorLogic> extends Actor<TLogic> {
225
+ export declare abstract class AbstractActor<TLogic extends AnyActorLogic, TEvent extends EventObject = EventObject> extends Actor<TLogic> {
182
226
  /**
183
227
  * Reactive snapshot of current actor state.
184
228
  *
@@ -221,8 +265,6 @@ export declare abstract class AbstractActor<TLogic extends AnyActorLogic> extend
221
265
  * Accepts any event object with a type property. Core events (PlayEvent) are in
222
266
  * @xmachines/play, routing events (PlayRouteEvent) are in @xmachines/play-router.
223
267
  */
224
- abstract send(event: {
225
- readonly type: string;
226
- } & Record<string, unknown>): void;
268
+ abstract send(event: TEvent): void;
227
269
  }
228
270
  //# sourceMappingURL=abstract-actor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-actor.d.ts","sourceRoot":"","sources":["../src/abstract-actor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,QAAQ;IACxB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC5B,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACxB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAExD;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,8BAAsB,aAAa,CAAC,MAAM,SAAS,aAAa,CAAE,SAAQ,KAAK,CAAC,MAAM,CAAC;IACtF;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAgB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7C;;;;;;;;;;;;;;;;;;;;;OAqBG;aACsB,IAAI,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAC/F"}
1
+ {"version":3,"file":"abstract-actor.d.ts","sourceRoot":"","sources":["../src/abstract-actor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,QAAQ;IACxB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,QAAS,SAAQ,IAAI;IACrC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC5B,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,IAAI,EAAE,QAAQ,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ;IACxB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,8BAAsB,aAAa,CAClC,MAAM,SAAS,aAAa,EAC5B,MAAM,SAAS,WAAW,GAAG,WAAW,CACvC,SAAQ,KAAK,CAAC,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAgB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7C;;;;;;;;;;;;;;;;;;;;;OAqBG;aACsB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAClD"}
@@ -34,13 +34,17 @@ import { Actor } from "xstate";
34
34
  * Concrete implementations created by @xmachines/play-xstate adapter.
35
35
  *
36
36
  * @typeParam TLogic - XState actor logic type (maintains type safety)
37
+ * @typeParam TEvent - Event type union that this actor's send() accepts.
38
+ * Defaults to `EventObject` (`{ type: string }`) for backward compatibility.
39
+ * Use `EventFromLogic<TMachine>` from xstate to infer the exact event union
40
+ * from a state machine (e.g., in `PlayerActor`).
37
41
  *
38
42
  * Invariant: Actor Authority - Actor is the sole source of truth for state transitions.
39
43
  * Invariant: Signal-Only Reactivity - Infrastructure observes via TC39 Signals.
40
44
  * Invariant: Passive Infrastructure - Infrastructure reflects, never decides.
41
45
  *
42
46
  * @example
43
- * Simple actor (no routing, no view)
47
+ * Simple actor (no routing, no view) - single type param, backward compat
44
48
  * ```typescript
45
49
  * class SimpleActor extends AbstractActor<AnyActorLogic> {
46
50
  * state = new Signal.State({...});
@@ -49,23 +53,23 @@ import { Actor } from "xstate";
49
53
  * ```
50
54
  *
51
55
  * @example
52
- * Routable actor
56
+ * Typed event actor - two type params
53
57
  * ```typescript
54
- * class RoutableActor extends AbstractActor<AnyActorLogic> implements Routable {
58
+ * type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
59
+ * class AuthActor extends AbstractActor<AnyActorLogic, AuthEvent> {
55
60
  * state = new Signal.State({...});
56
- * currentRoute = new Signal.Computed(() => deriveRoute(this.state.get()));
57
- * send(event) { ... }
61
+ * send(event: AuthEvent) { ... }
58
62
  * }
59
63
  * ```
60
64
  *
61
65
  * @example
62
66
  * Full-featured actor (routing + view)
63
67
  * ```typescript
64
- * class PlayerActor extends AbstractActor<AnyActorLogic> implements Routable, Viewable {
68
+ * class PlayerActor extends AbstractActor<AnyActorLogic, EventFromLogic<TMachine>>
69
+ * implements Routable, Viewable {
65
70
  * state = new Signal.State({...});
66
71
  * currentRoute = new Signal.Computed(() => deriveRoute(this.state.get()));
67
72
  * currentView = new Signal.State(null);
68
- * catalog = {};
69
73
  * send(event) { ... }
70
74
  * }
71
75
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-actor.js","sourceRoot":"","sources":["../src/abstract-actor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAsB,MAAM,QAAQ,CAAC;AA8GnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,MAAM,OAAgB,aAA4C,SAAQ,KAAa;CA6CtF"}
1
+ {"version":3,"file":"abstract-actor.js","sourceRoot":"","sources":["../src/abstract-actor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAwC,MAAM,QAAQ,CAAC;AAsJrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,MAAM,OAAgB,aAGpB,SAAQ,KAAa;CA6CtB"}
package/dist/index.d.ts CHANGED
@@ -15,5 +15,5 @@
15
15
  * @packageDocumentation
16
16
  * @see {@link https://gitlab.com/xmachin-es/rfc/-/blob/main/src/play-v1.md#53-actor-protocol | RFC Play v1 Section 5.3}
17
17
  */
18
- export { AbstractActor, type Routable, type Viewable, type ViewMetadata, } from "./abstract-actor.js";
18
+ export { AbstractActor, type Routable, type Viewable, type ViewMetadata, type PlaySpec, } from "./abstract-actor.js";
19
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACN,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,YAAY,GACjB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACN,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,QAAQ,GACb,MAAM,qBAAqB,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACN,aAAa,GAIb,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACN,aAAa,GAKb,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmachines/play-actor",
3
- "version": "1.0.0-beta.16",
3
+ "version": "1.0.0-beta.18",
4
4
  "private": false,
5
5
  "description": "Abstract Actor base class for XMachines Play Architecture",
6
6
  "keywords": [
@@ -31,6 +31,7 @@
31
31
  "build": "tsc --build",
32
32
  "clean": "rm -rf dist *.tsbuildinfo node_modules/.vite node_modules/.vite-temp",
33
33
  "typecheck": "tsc --noEmit",
34
+ "typecheck:test": "tsc --noEmit -p tsconfig.test.json",
34
35
  "test": "vitest",
35
36
  "lint": "oxlint .",
36
37
  "lint:fix": "oxlint --fix .",
@@ -38,15 +39,18 @@
38
39
  "format:check": "oxfmt --check .",
39
40
  "prepublishOnly": "npm run build"
40
41
  },
42
+ "dependencies": {
43
+ "@json-render/core": "^0.16.0"
44
+ },
41
45
  "devDependencies": {
42
46
  "@types/node": "^25.5.0",
43
- "@xmachines/shared": "1.0.0-beta.16",
47
+ "@xmachines/shared": "1.0.0-beta.18",
44
48
  "vitest": "^4.1.2",
45
49
  "xstate": "^5.30.0"
46
50
  },
47
51
  "peerDependencies": {
48
- "@xmachines/play": "1.0.0-beta.16",
49
- "@xmachines/play-signals": "1.0.0-beta.16",
52
+ "@xmachines/play": "1.0.0-beta.18",
53
+ "@xmachines/play-signals": "1.0.0-beta.18",
50
54
  "xstate": "^5.30.0"
51
55
  },
52
56
  "engines": {