@xmachines/play-xstate 1.0.0-beta.6 → 1.0.0-beta.8
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 +6 -3
- package/dist/catalog/index.d.ts +2 -2
- package/dist/catalog/index.d.ts.map +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/catalog/index.js.map +1 -1
- package/dist/catalog/types.d.ts +2 -11
- package/dist/catalog/types.d.ts.map +1 -1
- package/dist/catalog/validate-binding.d.ts +2 -1
- package/dist/catalog/validate-binding.d.ts.map +1 -1
- package/dist/catalog/validate-binding.js.map +1 -1
- package/dist/catalog/validate-props.d.ts +4 -2
- package/dist/catalog/validate-props.d.ts.map +1 -1
- package/dist/catalog/validate-props.js +52 -0
- package/dist/catalog/validate-props.js.map +1 -1
- package/dist/guards/helpers.d.ts +4 -21
- package/dist/guards/helpers.d.ts.map +1 -1
- package/dist/guards/helpers.js +11 -2
- package/dist/guards/helpers.js.map +1 -1
- package/dist/guards/types.d.ts +3 -2
- package/dist/guards/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/player-actor.d.ts +6 -8
- package/dist/player-actor.d.ts.map +1 -1
- package/dist/player-actor.js +36 -15
- package/dist/player-actor.js.map +1 -1
- package/dist/routing/build-url.d.ts.map +1 -1
- package/dist/routing/build-url.js +2 -1
- package/dist/routing/build-url.js.map +1 -1
- package/dist/routing/derive-route.d.ts +1 -1
- package/dist/routing/derive-route.d.ts.map +1 -1
- package/dist/routing/derive-route.js +2 -2
- package/dist/routing/derive-route.js.map +1 -1
- package/dist/routing/format-play-route-transitions.d.ts +7 -6
- package/dist/routing/format-play-route-transitions.d.ts.map +1 -1
- package/dist/routing/format-play-route-transitions.js +19 -21
- package/dist/routing/format-play-route-transitions.js.map +1 -1
- package/dist/routing/types.d.ts +5 -0
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/signals/state-signal.d.ts +1 -1
- package/dist/signals/state-signal.d.ts.map +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -152,9 +152,9 @@ Concrete actor implementing Play signal protocol:
|
|
|
152
152
|
|
|
153
153
|
**Signal Properties:**
|
|
154
154
|
|
|
155
|
-
- `state: Signal.State<
|
|
155
|
+
- `state: Signal.State<AnyMachineSnapshot>` - Reactive snapshot of current state
|
|
156
156
|
- `currentRoute: Signal.Computed<string | null>` - Derived navigation path
|
|
157
|
-
- `currentView: Signal.
|
|
157
|
+
- `currentView: Signal.State<ViewMetadata | null>` - Current UI structure (updated at state entry)
|
|
158
158
|
|
|
159
159
|
**Actor Properties:**
|
|
160
160
|
|
|
@@ -451,4 +451,7 @@ This package implements RFC Play v1 requirements:
|
|
|
451
451
|
|
|
452
452
|
## License
|
|
453
453
|
|
|
454
|
-
|
|
454
|
+
Copyright (c) 2016 [Mikael Karon](mailto:mikael@karon.se). All rights reserved.
|
|
455
|
+
|
|
456
|
+
This work is licensed under the terms of the MIT license.
|
|
457
|
+
For a copy, see <https://opensource.org/licenses/MIT>.
|
package/dist/catalog/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
export { validateComponentBinding } from "./validate-binding.js";
|
|
10
|
-
export { validateViewProps, mergeViewProps } from "./validate-props.js";
|
|
10
|
+
export { validateViewProps, mergeViewProps, createMemoSignature } from "./validate-props.js";
|
|
11
11
|
export type { ValidationResult, ViewMergeContext } from "./validate-props.js";
|
|
12
|
-
export type { Catalog, CatalogEntry
|
|
12
|
+
export type { Catalog, CatalogEntry } from "./types.js";
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/catalog/index.js
CHANGED
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
export { validateComponentBinding } from "./validate-binding.js";
|
|
10
|
-
export { validateViewProps, mergeViewProps } from "./validate-props.js";
|
|
10
|
+
export { validateViewProps, mergeViewProps, createMemoSignature } from "./validate-props.js";
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/catalog/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/catalog/types.d.ts
CHANGED
|
@@ -7,9 +7,9 @@ import type { Catalog as BaseCatalog } from "@xmachines/play-catalog";
|
|
|
7
7
|
*/
|
|
8
8
|
export interface CatalogEntry {
|
|
9
9
|
/** Zod schema for component props */
|
|
10
|
-
schema: z.ZodType<
|
|
10
|
+
schema: z.ZodType<unknown>;
|
|
11
11
|
/** React component (or other framework component) */
|
|
12
|
-
component:
|
|
12
|
+
component: unknown;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Component catalog mapping
|
|
@@ -24,13 +24,4 @@ export interface CatalogEntry {
|
|
|
24
24
|
* otherwise treats as direct Zod schema.
|
|
25
25
|
*/
|
|
26
26
|
export type Catalog = BaseCatalog | Record<string, CatalogEntry>;
|
|
27
|
-
/**
|
|
28
|
-
* View metadata from state machine
|
|
29
|
-
*/
|
|
30
|
-
export interface ViewMetadata {
|
|
31
|
-
/** Component name from catalog */
|
|
32
|
-
component: string;
|
|
33
|
-
/** Additional view props/data */
|
|
34
|
-
[key: string]: any;
|
|
35
|
-
}
|
|
36
27
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalog/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B,qCAAqC;IACrC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalog/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B,qCAAqC;IACrC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,qDAAqD;IACrD,SAAS,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-binding.d.ts","sourceRoot":"","sources":["../../src/catalog/validate-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validate-binding.d.ts","sourceRoot":"","sources":["../../src/catalog/validate-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,wBAAwB,GAAI,MAAM,YAAY,EAAE,SAAS,OAAO,KAAG,IAc/E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-binding.js","sourceRoot":"","sources":["../../src/catalog/validate-binding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-binding.js","sourceRoot":"","sources":["../../src/catalog/validate-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAkB,EAAE,OAAgB,EAAQ,EAAE;IACtF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAE3B,qBAAqB;IACrB,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CACd,cAAc,SAAS,iDAAiD,SAAS,IAAI,QAAQ,EAAE,CAC/F,CAAC;IACH,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
import type { Catalog
|
|
2
|
+
import type { Catalog } from "./types.js";
|
|
3
|
+
import type { ViewMetadata } from "@xmachines/play-actor";
|
|
3
4
|
export type ViewMergeContext = {
|
|
4
5
|
routeParams?: Record<string, unknown>;
|
|
5
6
|
queryParams?: Record<string, unknown>;
|
|
@@ -7,7 +8,7 @@ export type ViewMergeContext = {
|
|
|
7
8
|
};
|
|
8
9
|
export type ValidationResult = {
|
|
9
10
|
success: true;
|
|
10
|
-
data: unknown
|
|
11
|
+
data: Record<string, unknown>;
|
|
11
12
|
} | {
|
|
12
13
|
success: false;
|
|
13
14
|
error: z.ZodError | Error;
|
|
@@ -46,4 +47,5 @@ export declare const validateViewProps: (componentName: string, props: unknown,
|
|
|
46
47
|
* @returns Merged props object
|
|
47
48
|
*/
|
|
48
49
|
export declare const mergeViewProps: (view: ViewMetadata, context: ViewMergeContext | null | undefined) => Record<string, unknown>;
|
|
50
|
+
export declare const createMemoSignature: (value: unknown) => string;
|
|
49
51
|
//# sourceMappingURL=validate-props.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-props.d.ts","sourceRoot":"","sources":["../../src/catalog/validate-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validate-props.d.ts","sourceRoot":"","sources":["../../src/catalog/validate-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACzB;IACA,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B,GACD;IACA,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;CACzB,CAAC;AAEL;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,GAC7B,eAAe,MAAM,EACrB,OAAO,OAAO,EACd,SAAS,OAAO,KACd,gBA2BF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAC1B,MAAM,YAAY,EAClB,SAAS,gBAAgB,GAAG,IAAI,GAAG,SAAS,KAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAkDxB,CAAC;AAiEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,MAEpD,CAAC"}
|
|
@@ -100,4 +100,56 @@ export const mergeViewProps = (view, context) => {
|
|
|
100
100
|
...(queryParams && typeof queryParams === "object" ? { queryParams } : {}),
|
|
101
101
|
};
|
|
102
102
|
};
|
|
103
|
+
const stableSerialize = (value, seen) => {
|
|
104
|
+
if (value === null) {
|
|
105
|
+
return "null";
|
|
106
|
+
}
|
|
107
|
+
if (value === undefined) {
|
|
108
|
+
return "undefined";
|
|
109
|
+
}
|
|
110
|
+
if (typeof value === "string") {
|
|
111
|
+
return JSON.stringify(value);
|
|
112
|
+
}
|
|
113
|
+
if (typeof value === "number") {
|
|
114
|
+
if (Number.isNaN(value)) {
|
|
115
|
+
return '"NaN"';
|
|
116
|
+
}
|
|
117
|
+
if (!Number.isFinite(value)) {
|
|
118
|
+
return value > 0 ? '"Infinity"' : '"-Infinity"';
|
|
119
|
+
}
|
|
120
|
+
return String(value);
|
|
121
|
+
}
|
|
122
|
+
if (typeof value === "boolean" || typeof value === "bigint") {
|
|
123
|
+
return String(value);
|
|
124
|
+
}
|
|
125
|
+
if (typeof value === "symbol") {
|
|
126
|
+
return `"${String(value)}"`;
|
|
127
|
+
}
|
|
128
|
+
if (typeof value === "function") {
|
|
129
|
+
return '"[function]"';
|
|
130
|
+
}
|
|
131
|
+
if (Array.isArray(value)) {
|
|
132
|
+
return `[${value.map((item) => stableSerialize(item, seen)).join(",")}]`;
|
|
133
|
+
}
|
|
134
|
+
if (value instanceof Date) {
|
|
135
|
+
return `"${value.toISOString()}"`;
|
|
136
|
+
}
|
|
137
|
+
if (typeof value === "object") {
|
|
138
|
+
if (seen.has(value)) {
|
|
139
|
+
return '"[circular]"';
|
|
140
|
+
}
|
|
141
|
+
seen.add(value);
|
|
142
|
+
const objectValue = value;
|
|
143
|
+
const keys = Object.keys(objectValue).sort();
|
|
144
|
+
const body = keys
|
|
145
|
+
.map((key) => `${JSON.stringify(key)}:${stableSerialize(objectValue[key], seen)}`)
|
|
146
|
+
.join(",");
|
|
147
|
+
seen.delete(value);
|
|
148
|
+
return `{${body}}`;
|
|
149
|
+
}
|
|
150
|
+
return `"${String(value)}"`;
|
|
151
|
+
};
|
|
152
|
+
export const createMemoSignature = (value) => {
|
|
153
|
+
return stableSerialize(value, new WeakSet());
|
|
154
|
+
};
|
|
103
155
|
//# sourceMappingURL=validate-props.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-props.js","sourceRoot":"","sources":["../../src/catalog/validate-props.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-props.js","sourceRoot":"","sources":["../../src/catalog/validate-props.ts"],"names":[],"mappings":"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"}
|
package/dist/guards/helpers.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Guard } from "./types.js";
|
|
2
|
+
import type { PlayEvent } from "@xmachines/play";
|
|
2
3
|
/**
|
|
3
4
|
* Check if context has a truthy value at path
|
|
4
5
|
*
|
|
@@ -17,7 +18,7 @@ import type { Guard } from "./types.js";
|
|
|
17
18
|
* @param path - Dot-separated path to context property
|
|
18
19
|
* @returns Guard predicate checking if property is truthy
|
|
19
20
|
*/
|
|
20
|
-
export declare const hasContext: <TContext =
|
|
21
|
+
export declare const hasContext: <TContext = Record<string, unknown>>(path: string) => Guard<TContext, PlayEvent>;
|
|
21
22
|
/**
|
|
22
23
|
* Check if event type matches expected type
|
|
23
24
|
*
|
|
@@ -37,24 +38,6 @@ export declare const hasContext: <TContext = any>(path: string) => Guard<TContex
|
|
|
37
38
|
* @param eventType - Expected event type
|
|
38
39
|
* @returns Guard predicate checking event type
|
|
39
40
|
*/
|
|
40
|
-
export declare const eventMatches: <TEvent extends
|
|
41
|
-
|
|
42
|
-
} = any>(eventType: string) => Guard<any, TEvent>;
|
|
43
|
-
/**
|
|
44
|
-
* Check if current state matches expected value
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```typescript
|
|
48
|
-
* const machine = setup({
|
|
49
|
-
* guards: {
|
|
50
|
-
* isLoggedIn: stateMatches('authenticated'),
|
|
51
|
-
* isDashboard: stateMatches('authenticated.dashboard')
|
|
52
|
-
* }
|
|
53
|
-
* });
|
|
54
|
-
* ```
|
|
55
|
-
*
|
|
56
|
-
* @param stateValue - Expected state value (string or object)
|
|
57
|
-
* @returns Guard predicate checking state value
|
|
58
|
-
*/
|
|
59
|
-
export declare const stateMatches: <TContext = any>(stateValue: string) => Guard<TContext, any>;
|
|
41
|
+
export declare const eventMatches: <TEvent extends PlayEvent = PlayEvent>(eventType: string) => Guard<unknown, TEvent>;
|
|
42
|
+
export declare const stateMatches: <TContext = Record<string, unknown>>(stateValue: string) => Guard<TContext, PlayEvent>;
|
|
60
43
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/guards/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/guards/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACrB,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,KAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,CAI5E,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,SAAS,SAAS,GAAG,SAAS,EAAE,WAAW,MAAM,KAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAG/E,CAAC;AAsBH,eAAO,MAAM,YAAY,GACvB,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,MAAM,KAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,CAqBlF,CAAC"}
|
package/dist/guards/helpers.js
CHANGED
|
@@ -58,11 +58,20 @@ export const eventMatches = (eventType) => ({ event }) => {
|
|
|
58
58
|
* @param stateValue - Expected state value (string or object)
|
|
59
59
|
* @returns Guard predicate checking state value
|
|
60
60
|
*/
|
|
61
|
+
const isRecord = (value) => {
|
|
62
|
+
return typeof value === "object" && value !== null;
|
|
63
|
+
};
|
|
61
64
|
export const stateMatches = (stateValue) => ({ context }) => {
|
|
62
65
|
// Note: This helper checks context for state info
|
|
63
66
|
// For actual XState state matching, use machine.matches() in actions
|
|
64
67
|
// This is a simplified version for context-based state checks
|
|
65
|
-
|
|
68
|
+
let currentState;
|
|
69
|
+
if (isRecord(context) && "_state" in context) {
|
|
70
|
+
currentState = context._state;
|
|
71
|
+
}
|
|
72
|
+
else if (isRecord(context) && "state" in context) {
|
|
73
|
+
currentState = context.state;
|
|
74
|
+
}
|
|
66
75
|
if (!currentState)
|
|
67
76
|
return false;
|
|
68
77
|
// Simple string matching (can be enhanced for nested states)
|
|
@@ -81,7 +90,7 @@ const getNestedValue = (obj, path) => {
|
|
|
81
90
|
const keys = path.split(".");
|
|
82
91
|
let value = obj;
|
|
83
92
|
for (const key of keys) {
|
|
84
|
-
if (value === null || value === undefined) {
|
|
93
|
+
if (value === null || value === undefined || typeof value !== "object") {
|
|
85
94
|
return undefined;
|
|
86
95
|
}
|
|
87
96
|
value = value[key];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/guards/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/guards/helpers.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,UAAU,GACtB,CAAqC,IAAY,EAA8B,EAAE,CACjF,CAAC,EAAE,OAAO,EAAyB,EAAE,EAAE;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;AAC9D,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GACxB,CAAuC,SAAiB,EAA0B,EAAE,CACpF,CAAC,EAAE,KAAK,EAAqB,EAAE,EAAE;IAChC,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AACjC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE;IACrE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GACxB,CAAqC,UAAkB,EAA8B,EAAE,CACvF,CAAC,EAAE,OAAO,EAAyB,EAAE,EAAE;IACtC,kDAAkD;IAClD,qEAAqE;IACrE,8DAA8D;IAC9D,IAAI,YAAqB,CAAC;IAC1B,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC9C,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;SAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;QACpD,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAEhC,6DAA6D;IAC7D,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,YAAY,KAAK,UAAU,CAAC;IACpC,CAAC;IAED,wBAAwB;IACxB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC,GAAY,EAAE,IAAY,EAAW,EAAE;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,GAAG,GAAG,CAAC;IAEhB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxE,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
|
package/dist/guards/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PlayEvent } from "@xmachines/play";
|
|
1
2
|
/**
|
|
2
3
|
* Standard XState guard function signature
|
|
3
4
|
*
|
|
@@ -8,7 +9,7 @@
|
|
|
8
9
|
* @param args.event - Event that triggered the guard evaluation
|
|
9
10
|
* @returns boolean indicating if guard passes
|
|
10
11
|
*/
|
|
11
|
-
export type Guard<TContext =
|
|
12
|
+
export type Guard<TContext = Record<string, unknown>, TEvent = PlayEvent> = (args: {
|
|
12
13
|
context: TContext;
|
|
13
14
|
event: TEvent;
|
|
14
15
|
}) => boolean;
|
|
@@ -17,5 +18,5 @@ export type Guard<TContext = any, TEvent = any> = (args: {
|
|
|
17
18
|
*
|
|
18
19
|
* Per CONTEXT.md: Array means AND - all guards must pass
|
|
19
20
|
*/
|
|
20
|
-
export type GuardArray<TContext =
|
|
21
|
+
export type GuardArray<TContext = Record<string, unknown>, TEvent = PlayEvent> = Array<Guard<TContext, TEvent>> | Array<string>;
|
|
21
22
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guards/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,KAAK,CAAC,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guards/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,MAAM,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE;IAClF,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACd,KAAK,OAAO,CAAC;AAEd;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,IAC1E,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAC9B,KAAK,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,5 +20,5 @@ export type { RouteMachineConfig, RouteStateNode } from "./routing/index.js";
|
|
|
20
20
|
export type { RouteContext } from "./routing/types.js";
|
|
21
21
|
export { validateComponentBinding, validateViewProps, mergeViewProps } from "./catalog/index.js";
|
|
22
22
|
export type { ValidationResult, ViewMergeContext } from "./catalog/index.js";
|
|
23
|
-
export type { Catalog, CatalogEntry
|
|
23
|
+
export type { Catalog, CatalogEntry } from "./catalog/types.js";
|
|
24
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EACN,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EACN,WAAW,EACX,eAAe,EACf,aAAa,EACb,0BAA0B,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjG,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EACN,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EACN,WAAW,EACX,eAAe,EACf,aAAa,EACb,0BAA0B,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjG,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/player-actor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type AnyStateMachine, type AnyActorLogic } from "xstate";
|
|
2
|
-
import { AbstractActor, type Routable, type Viewable } from "@xmachines/play-actor";
|
|
1
|
+
import { type AnyStateMachine, type Actor, type AnyActorLogic, type AnyMachineSnapshot } from "xstate";
|
|
2
|
+
import { AbstractActor, type Routable, type Viewable, type ViewMetadata } from "@xmachines/play-actor";
|
|
3
3
|
import { Signal } from "@xmachines/play-signals";
|
|
4
4
|
import type { PlayEvent } from "@xmachines/play";
|
|
5
5
|
import type { PlayerOptions } from "./types.js";
|
|
@@ -86,12 +86,10 @@ export declare class PlayerActor<TMachine extends AnyStateMachine> extends Abstr
|
|
|
86
86
|
private _options;
|
|
87
87
|
private _catalog;
|
|
88
88
|
private _viewSignal;
|
|
89
|
-
|
|
89
|
+
private _lastViewMemo;
|
|
90
|
+
state: Signal.State<AnyMachineSnapshot>;
|
|
90
91
|
currentRoute: Signal.Computed<string | null>;
|
|
91
|
-
currentView: Signal.State<
|
|
92
|
-
component: string;
|
|
93
|
-
props: unknown;
|
|
94
|
-
} | null>;
|
|
92
|
+
currentView: Signal.State<ViewMetadata | null>;
|
|
95
93
|
catalog: Catalog;
|
|
96
94
|
constructor(machine: TMachine, catalog: Catalog | null | undefined, options: PlayerOptions<TMachine>, input?: any);
|
|
97
95
|
/**
|
|
@@ -125,7 +123,7 @@ export declare class PlayerActor<TMachine extends AnyStateMachine> extends Abstr
|
|
|
125
123
|
/**
|
|
126
124
|
* Get current snapshot
|
|
127
125
|
*/
|
|
128
|
-
getSnapshot():
|
|
126
|
+
getSnapshot(): ReturnType<Actor<TMachine>["getSnapshot"]>;
|
|
129
127
|
/**
|
|
130
128
|
* Validate view at state entry and cache result
|
|
131
129
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player-actor.d.ts","sourceRoot":"","sources":["../src/player-actor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"player-actor.d.ts","sourceRoot":"","sources":["../src/player-actor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACN,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAkBlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,qBAAa,WAAW,CAAC,QAAQ,SAAS,eAAe,CACxD,SAAQ,aAAa,CAAC,aAAa,CACnC,YAAW,QAAQ,EAAE,QAAQ;IAE7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvB,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,aAAa,CAKZ;IAGF,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC;gBAGvB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EACnC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,EAChC,KAAK,CAAC,EAAE,GAAG;IAiFZ;;;;OAIG;IACM,KAAK,IAAI,IAAI;IAWtB;;OAEG;IACM,IAAI,IAAI,IAAI;IAYrB;;;;;;;;;;;;;;;;OAgBG;IACM,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAsBrC;;OAEG;IACM,WAAW,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC;IAIlE;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAsG7B;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAGf"}
|
package/dist/player-actor.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { createActor } from "xstate";
|
|
2
|
-
import { AbstractActor } from "@xmachines/play-actor";
|
|
1
|
+
import { createActor, } from "xstate";
|
|
2
|
+
import { AbstractActor, } from "@xmachines/play-actor";
|
|
3
3
|
import { Signal } from "@xmachines/play-signals";
|
|
4
4
|
import { StateSignalManager } from "./signals/state-signal.js";
|
|
5
5
|
import { deriveRoute, buildRouteUrl } from "./routing/index.js";
|
|
6
|
-
import { validateComponentBinding, validateViewProps, mergeViewProps } from "./catalog/index.js";
|
|
6
|
+
import { validateComponentBinding, validateViewProps, mergeViewProps, createMemoSignature, } from "./catalog/index.js";
|
|
7
7
|
const hasSnapshotStatus = (snapshot) => {
|
|
8
8
|
if (!snapshot || typeof snapshot !== "object") {
|
|
9
9
|
return false;
|
|
@@ -97,6 +97,7 @@ export class PlayerActor extends AbstractActor {
|
|
|
97
97
|
_options;
|
|
98
98
|
_catalog;
|
|
99
99
|
_viewSignal;
|
|
100
|
+
_lastViewMemo;
|
|
100
101
|
// AbstractActor protocol requirements
|
|
101
102
|
state;
|
|
102
103
|
currentRoute;
|
|
@@ -124,15 +125,15 @@ export class PlayerActor extends AbstractActor {
|
|
|
124
125
|
this.state = this._stateManager.signal;
|
|
125
126
|
// Initialize view signal
|
|
126
127
|
this._viewSignal = new Signal.State(null);
|
|
128
|
+
this._lastViewMemo = null;
|
|
127
129
|
// Initialize currentRoute computed signal
|
|
128
130
|
this.currentRoute = new Signal.Computed(() => {
|
|
129
131
|
const snapshot = this.state.get();
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (!snapshot || typeof snapshotWithMeta.getMeta !== "function") {
|
|
132
|
+
// Defensive check: Validate snapshot exists and has getMeta
|
|
133
|
+
if (!snapshot || typeof snapshot.getMeta !== "function") {
|
|
133
134
|
return null;
|
|
134
135
|
}
|
|
135
|
-
const meta =
|
|
136
|
+
const meta = snapshot.getMeta();
|
|
136
137
|
// Defensive check: Validate meta is an object
|
|
137
138
|
if (!meta || typeof meta !== "object") {
|
|
138
139
|
return null;
|
|
@@ -144,7 +145,7 @@ export class PlayerActor extends AbstractActor {
|
|
|
144
145
|
}
|
|
145
146
|
// Build full URL with params, query, hash
|
|
146
147
|
// Per CONTEXT.md: "Full URL generation including query params, hash, base path from context"
|
|
147
|
-
return buildRouteUrl(routeTemplate,
|
|
148
|
+
return buildRouteUrl(routeTemplate, snapshot.context ?? {});
|
|
148
149
|
});
|
|
149
150
|
// Expose view signal directly for proper watcher propagation
|
|
150
151
|
this.currentView = this._viewSignal;
|
|
@@ -215,8 +216,8 @@ export class PlayerActor extends AbstractActor {
|
|
|
215
216
|
// Store previous state for onTransition hook
|
|
216
217
|
const prevSnapshot = this._xstateActor.getSnapshot();
|
|
217
218
|
// Send to XState actor
|
|
218
|
-
//
|
|
219
|
-
//
|
|
219
|
+
// EventFromLogic<TMachine> is narrower than PlayEvent at the type level,
|
|
220
|
+
// but at runtime both are plain { type: string, ...fields } objects.
|
|
220
221
|
this._xstateActor.send(event);
|
|
221
222
|
// Call onTransition hook
|
|
222
223
|
if (this._options.onTransition) {
|
|
@@ -239,15 +240,16 @@ export class PlayerActor extends AbstractActor {
|
|
|
239
240
|
* @param snapshot - Current XState snapshot
|
|
240
241
|
*/
|
|
241
242
|
_validateAndCacheView(snapshot) {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
// Defensive check: Validate snapshot exists
|
|
244
|
+
if (!snapshot) {
|
|
245
|
+
this._lastViewMemo = null;
|
|
245
246
|
this._viewSignal.set(null);
|
|
246
247
|
return;
|
|
247
248
|
}
|
|
248
|
-
const meta =
|
|
249
|
+
const meta = snapshot.getMeta();
|
|
249
250
|
// Defensive check: Validate meta is an object
|
|
250
251
|
if (!meta || typeof meta !== "object") {
|
|
252
|
+
this._lastViewMemo = null;
|
|
251
253
|
this._viewSignal.set(null);
|
|
252
254
|
return;
|
|
253
255
|
}
|
|
@@ -263,6 +265,7 @@ export class PlayerActor extends AbstractActor {
|
|
|
263
265
|
}
|
|
264
266
|
}
|
|
265
267
|
if (!viewMeta) {
|
|
268
|
+
this._lastViewMemo = null;
|
|
266
269
|
this._viewSignal.set(null);
|
|
267
270
|
return;
|
|
268
271
|
}
|
|
@@ -280,7 +283,19 @@ export class PlayerActor extends AbstractActor {
|
|
|
280
283
|
return;
|
|
281
284
|
}
|
|
282
285
|
// Merge meta.view with context for props
|
|
283
|
-
const props = mergeViewProps(viewMeta,
|
|
286
|
+
const props = mergeViewProps(viewMeta, snapshot.context);
|
|
287
|
+
const stateSignature = createMemoSignature(snapshot.value);
|
|
288
|
+
const propsSignature = createMemoSignature(props);
|
|
289
|
+
if (this._lastViewMemo &&
|
|
290
|
+
this._lastViewMemo.stateSignature === stateSignature &&
|
|
291
|
+
this._lastViewMemo.component === viewMeta.component &&
|
|
292
|
+
this._lastViewMemo.propsSignature === propsSignature) {
|
|
293
|
+
this._viewSignal.set({
|
|
294
|
+
component: this._lastViewMemo.view.component,
|
|
295
|
+
props: this._lastViewMemo.view.props,
|
|
296
|
+
});
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
284
299
|
// Validate props against Zod schema
|
|
285
300
|
const validation = validateViewProps(viewMeta.component, props, this._catalog);
|
|
286
301
|
if (!validation.success) {
|
|
@@ -297,6 +312,12 @@ export class PlayerActor extends AbstractActor {
|
|
|
297
312
|
component: viewMeta.component,
|
|
298
313
|
props: validation.success ? validation.data : props,
|
|
299
314
|
};
|
|
315
|
+
this._lastViewMemo = {
|
|
316
|
+
stateSignature,
|
|
317
|
+
component: viewMeta.component,
|
|
318
|
+
propsSignature,
|
|
319
|
+
view: newView,
|
|
320
|
+
};
|
|
300
321
|
this._viewSignal.set(newView);
|
|
301
322
|
}
|
|
302
323
|
/**
|
package/dist/player-actor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player-actor.js","sourceRoot":"","sources":["../src/player-actor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"player-actor.js","sourceRoot":"","sources":["../src/player-actor.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,GAKX,MAAM,QAAQ,CAAC;AAChB,OAAO,EACN,aAAa,GAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,iBAAiB,GAAG,CAAC,QAAiB,EAAkC,EAAE;IAC/E,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,OAAQ,QAAgC,CAAC,MAAM,KAAK,QAAQ,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,QAAiB,EAAW,EAAE;IACvD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;AACpE,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,MAAM,OAAO,WACZ,SAAQ,aAA4B;IAK5B,YAAY,CAAkB;IAC9B,aAAa,CAAyC;IACtD,QAAQ,CAA0B;IAClC,QAAQ,CAAU;IAClB,WAAW,CAAoC;IAC/C,aAAa,CAKZ;IAET,sCAAsC;IAC/B,KAAK,CAAmC;IACxC,YAAY,CAAiC;IAC7C,WAAW,CAAoC;IAC/C,OAAO,CAAU;IAExB,YACC,OAAiB,EACjB,OAAmC,EACnC,OAAgC,EAChC,KAAW;QAEX,kEAAkE;QAClE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChE,CAAC;QAED,sBAAsB;QACtB,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAEpD,2DAA2D;QAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACnF,CAAC;QAED,kDAAkD;QAClD,KAAK,CAAC,WAAW,CAAC,KAAsB,CAAC,CAAC;QAE1C,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE7B,kCAAkC;QAClC,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAEvC,yBAAyB;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,KAAK,CAAsB,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,0CAA0C;QAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAElC,4DAA4D;YAC5D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC;YACb,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEhC,8CAA8C;YAC9C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC;YACb,CAAC;YAED,2CAA2C;YAC3C,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAExC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACb,CAAC;YAED,0CAA0C;YAC1C,6FAA6F;YAC7F,OAAO,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,6DAA6D;QAC7D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAEpC,wCAAwC;QACxC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxC,qDAAqD;YACrD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,8CAA8C;gBAC9C,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAE5C,iFAAiF;gBACjF,0DAA0D;gBAC1D,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;gBAErC,0BAA0B;gBAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;oBACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACM,KAAK;QACb,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACM,IAAI;QACZ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAE7B,mBAAmB;QACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACM,IAAI,CAAC,KAAgB;QAC7B,wDAAwD;QACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO;QACR,CAAC;QAED,6CAA6C;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAErD,uBAAuB;QACvB,yEAAyE;QACzE,qEAAqE;QACrE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAqD,CAAC,CAAC;QAE9E,yBAAyB;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED;;OAEG;IACM,WAAW;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAAC,QAA4B;QACzD,4CAA4C;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEhC,8CAA8C;QAC9C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,uCAAuC;QACvC,IAAI,QAAQ,GAAwB,IAAI,CAAC;QAEzC,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,SAAS,GACd,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;gBACzC,CAAC,CAAE,SAAgC,CAAC,IAAI;gBACxC,CAAC,CAAC,SAAS,CAAC;YAEd,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAChD,QAAQ,GAAG,SAAyB,CAAC;gBACrC,MAAM;YACP,CAAC;QACF,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC;YACJ,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,wCAAwC;YACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAc,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,yCAAyC;QACzC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEzD,MAAM,cAAc,GAAG,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAElD,IACC,IAAI,CAAC,aAAa;YAClB,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,cAAc;YACpD,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;YACnD,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,cAAc,EACnD,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;gBACpB,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS;gBAC5C,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK;aACpC,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,oCAAoC;QACpC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE/E,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACzB,6CAA6C;YAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CACpB,IAAI,EACJ,IAAI,KAAK,CACR,gCAAgC,QAAQ,CAAC,SAAS,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CACtG,CACD,CAAC;YACH,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACjE,iFAAiF;YACjF,iFAAiF;QAClF,CAAC;QAED,iEAAiE;QACjE,MAAM,OAAO,GAAG;YACf,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;SACnD,CAAC;QACF,IAAI,CAAC,aAAa,GAAG;YACpB,cAAc;YACd,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,cAAc;YACd,IAAI,EAAE,OAAO;SACb,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,OAAO;QACN,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-url.d.ts","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,aAAa,GAAI,eAAe,MAAM,EAAE,UAAS,YAAiB,KAAG,
|
|
1
|
+
{"version":3,"file":"build-url.d.ts","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,aAAa,GAAI,eAAe,MAAM,EAAE,UAAS,YAAiB,KAAG,MA6BjF,CAAC"}
|
|
@@ -33,7 +33,8 @@ export const buildRouteUrl = (routeTemplate, context = {}) => {
|
|
|
33
33
|
url = substituteParams(url, context);
|
|
34
34
|
// Append query params from context
|
|
35
35
|
if (context.query && typeof context.query === "object") {
|
|
36
|
-
const
|
|
36
|
+
const stringEntries = Object.entries(context.query).map(([k, v]) => [k, String(v)]);
|
|
37
|
+
const params = new URLSearchParams(stringEntries);
|
|
37
38
|
const queryString = params.toString();
|
|
38
39
|
if (queryString) {
|
|
39
40
|
url += `?${queryString}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-url.js","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,aAAqB,EAAE,UAAwB,EAAE,EAAU,EAAE;IAC1F,oCAAoC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAElD,iBAAiB;IACjB,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE1E,qCAAqC;IACrC,GAAG,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAErC,mCAAmC;IACnC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,
|
|
1
|
+
{"version":3,"file":"build-url.js","sourceRoot":"","sources":["../../src/routing/build-url.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
* not all states need routes. For example, intermediate loading states or substates may
|
|
86
86
|
* not correspond to distinct URLs.
|
|
87
87
|
*/
|
|
88
|
-
export declare const deriveRoute: (stateMeta: Record<string,
|
|
88
|
+
export declare const deriveRoute: (stateMeta: Record<string, unknown>) => string | null;
|
|
89
89
|
/**
|
|
90
90
|
* Check if route path is absolute
|
|
91
91
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-route.d.ts","sourceRoot":"","sources":["../../src/routing/derive-route.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AACH,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"derive-route.d.ts","sourceRoot":"","sources":["../../src/routing/derive-route.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AACH,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,GAAG,IAYzE,CAAC;AA2BF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,OAE9C,CAAC"}
|
|
@@ -88,10 +88,10 @@
|
|
|
88
88
|
export const deriveRoute = (stateMeta) => {
|
|
89
89
|
// Iterate through active state nodes to find route information
|
|
90
90
|
for (const [_stateId, meta] of Object.entries(stateMeta)) {
|
|
91
|
-
if (
|
|
91
|
+
if (typeof meta !== "object" || meta === null)
|
|
92
92
|
continue;
|
|
93
93
|
// Check meta.route for routable states
|
|
94
|
-
if (meta.route) {
|
|
94
|
+
if ("route" in meta && meta.route) {
|
|
95
95
|
return normalizeRoute(meta.route);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-route.js","sourceRoot":"","sources":["../../src/routing/derive-route.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"derive-route.js","sourceRoot":"","sources":["../../src/routing/derive-route.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAkC,EAAiB,EAAE;IAChF,+DAA+D;IAC/D,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAExD,uCAAuC;QACvC,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,cAAc,CAAC,IAAI,CAAC,KAAsB,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,cAAc,GAAG,CAAC,KAAoB,EAAU,EAAE;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3D,OAAQ,KAAqB,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,KAAK,CACd,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,uCAAuC,CACvF,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE;IACxD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -7,8 +7,9 @@ export type RouteStateNode = {
|
|
|
7
7
|
[key: string]: unknown;
|
|
8
8
|
};
|
|
9
9
|
export type RouteMachineConfig = {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
context?: unknown;
|
|
11
|
+
states?: Record<string, unknown> | undefined;
|
|
12
|
+
on?: Record<string, unknown> | undefined;
|
|
12
13
|
[key: string]: unknown;
|
|
13
14
|
};
|
|
14
15
|
/**
|
|
@@ -19,7 +20,7 @@ export type RouteMachineConfig = {
|
|
|
19
20
|
*
|
|
20
21
|
* Inspired by XState's internal formatRouteTransitions (stateUtils.ts line 391).
|
|
21
22
|
*
|
|
22
|
-
*
|
|
23
|
+
* @example
|
|
23
24
|
* ```typescript
|
|
24
25
|
* const machineConfig = {
|
|
25
26
|
* id: "myMachine",
|
|
@@ -37,8 +38,8 @@ export type RouteMachineConfig = {
|
|
|
37
38
|
* - Target the appropriate state
|
|
38
39
|
* - Assign routeParams and queryParams from the event to context
|
|
39
40
|
*
|
|
40
|
-
* @param machineConfig - XState machine config (before createMachine)
|
|
41
|
-
* @returns
|
|
41
|
+
* @param machineConfig - XState machine config (before createMachine). Must extend `RouteMachineConfig`.
|
|
42
|
+
* @returns The same machine config with auto-generated `play.route` handlers merged in, preserving the original type `T`.
|
|
42
43
|
*/
|
|
43
|
-
export declare function formatPlayRouteTransitions<
|
|
44
|
+
export declare function formatPlayRouteTransitions<T extends RouteMachineConfig>(machineConfig: T): T;
|
|
44
45
|
//# sourceMappingURL=format-play-route-transitions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-play-route-transitions.d.ts","sourceRoot":"","sources":["../../src/routing/format-play-route-transitions.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AASF,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"format-play-route-transitions.d.ts","sourceRoot":"","sources":["../../src/routing/format-play-route-transitions.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AASF,MAAM,MAAM,kBAAkB,GAAG;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,kBAAkB,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CA+C5F"}
|
|
@@ -7,7 +7,7 @@ import { assign } from "xstate";
|
|
|
7
7
|
*
|
|
8
8
|
* Inspired by XState's internal formatRouteTransitions (stateUtils.ts line 391).
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* @example
|
|
11
11
|
* ```typescript
|
|
12
12
|
* const machineConfig = {
|
|
13
13
|
* id: "myMachine",
|
|
@@ -25,20 +25,20 @@ import { assign } from "xstate";
|
|
|
25
25
|
* - Target the appropriate state
|
|
26
26
|
* - Assign routeParams and queryParams from the event to context
|
|
27
27
|
*
|
|
28
|
-
* @param machineConfig - XState machine config (before createMachine)
|
|
29
|
-
* @returns
|
|
28
|
+
* @param machineConfig - XState machine config (before createMachine). Must extend `RouteMachineConfig`.
|
|
29
|
+
* @returns The same machine config with auto-generated `play.route` handlers merged in, preserving the original type `T`.
|
|
30
30
|
*/
|
|
31
31
|
export function formatPlayRouteTransitions(machineConfig) {
|
|
32
32
|
const routeTransitions = [];
|
|
33
33
|
const collectRoutes = (states, parentPath = "") => {
|
|
34
34
|
Object.entries(states).forEach(([key, stateConfig]) => {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
const node = stateConfig;
|
|
36
|
+
const stateId = node.id || (parentPath ? `${parentPath}.${key}` : key);
|
|
37
|
+
if (node.meta?.route && node.id) {
|
|
38
38
|
const transition = {
|
|
39
|
-
target: `.${key}`,
|
|
40
|
-
guard: ({ event }) => event.to === `#${
|
|
41
|
-
reenter: true,
|
|
39
|
+
target: `.${key}`,
|
|
40
|
+
guard: ({ event }) => event.to === `#${node.id}`,
|
|
41
|
+
reenter: true,
|
|
42
42
|
actions: assign({
|
|
43
43
|
routeParams: ({ event }) => event.params || {},
|
|
44
44
|
queryParams: ({ event }) => event.query || {},
|
|
@@ -46,26 +46,24 @@ export function formatPlayRouteTransitions(machineConfig) {
|
|
|
46
46
|
};
|
|
47
47
|
routeTransitions.push(transition);
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
collectRoutes(stateConfig.states, stateId);
|
|
49
|
+
if (node.states) {
|
|
50
|
+
collectRoutes(node.states, stateId);
|
|
52
51
|
}
|
|
53
52
|
});
|
|
54
53
|
};
|
|
55
|
-
const
|
|
56
|
-
const machineStates = routeConfig.states;
|
|
54
|
+
const machineStates = machineConfig.states;
|
|
57
55
|
if (machineStates) {
|
|
58
56
|
collectRoutes(machineStates);
|
|
59
57
|
}
|
|
60
|
-
// Add play.route handler to root if we found any routes
|
|
61
58
|
if (routeTransitions.length > 0) {
|
|
62
|
-
const existingOn =
|
|
59
|
+
const existingOn = machineConfig.on || {};
|
|
60
|
+
const updatedOn = {
|
|
61
|
+
...existingOn,
|
|
62
|
+
"play.route": routeTransitions,
|
|
63
|
+
};
|
|
63
64
|
return {
|
|
64
|
-
...
|
|
65
|
-
on:
|
|
66
|
-
...existingOn,
|
|
67
|
-
"play.route": routeTransitions,
|
|
68
|
-
},
|
|
65
|
+
...machineConfig,
|
|
66
|
+
on: updatedOn,
|
|
69
67
|
};
|
|
70
68
|
}
|
|
71
69
|
return machineConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-play-route-transitions.js","sourceRoot":"","sources":["../../src/routing/format-play-route-transitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"format-play-route-transitions.js","sourceRoot":"","sources":["../../src/routing/format-play-route-transitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAmChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,0BAA0B,CAA+B,aAAgB;IACxF,MAAM,gBAAgB,GAAsB,EAAE,CAAC;IAE/C,MAAM,aAAa,GAAG,CAAC,MAA+B,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE;QAC1E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,WAA6B,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAEvE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAoB;oBACnC,MAAM,EAAE,IAAI,GAAG,EAAE;oBACjB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE;oBAChD,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,MAAM,CAAC;wBACf,WAAW,EAAE,CAAC,EAAE,KAAK,EAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;wBAC9D,WAAW,EAAE,CAAC,EAAE,KAAK,EAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;qBAC7D,CAAC;iBACF,CAAC;gBAEF,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;IAC3C,IAAI,aAAa,EAAE,CAAC;QACnB,aAAa,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG;YACjB,GAAG,UAAU;YACb,YAAY,EAAE,gBAAgB;SAC9B,CAAC;QAEF,OAAO;YACN,GAAG,aAAa;YAChB,EAAE,EAAE,SAAS;SACR,CAAC;IACR,CAAC;IAED,OAAO,aAAa,CAAC;AACtB,CAAC"}
|
package/dist/routing/types.d.ts
CHANGED
|
@@ -10,6 +10,11 @@ export interface RouteContext {
|
|
|
10
10
|
/** Base path for relative routes */
|
|
11
11
|
basePath?: string;
|
|
12
12
|
/** Route parameters to substitute */
|
|
13
|
+
routeParams?: Record<string, unknown>;
|
|
14
|
+
/** Query parameters */
|
|
15
|
+
query?: Record<string, unknown>;
|
|
16
|
+
/** Hash fragment */
|
|
17
|
+
hash?: string;
|
|
13
18
|
[key: string]: unknown;
|
|
14
19
|
}
|
|
15
20
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/routing/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/routing/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB"}
|
|
@@ -9,7 +9,7 @@ import { Signal } from "@xmachines/play-signals";
|
|
|
9
9
|
* XState already provides coalescence - if multiple transitions occur in a single send(),
|
|
10
10
|
* the subscription callback only fires once with the final state.
|
|
11
11
|
*/
|
|
12
|
-
export declare class StateSignalManager<TSnapshot =
|
|
12
|
+
export declare class StateSignalManager<TSnapshot = unknown> {
|
|
13
13
|
private _signal;
|
|
14
14
|
constructor(initialSnapshot: TSnapshot);
|
|
15
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-signal.d.ts","sourceRoot":"","sources":["../../src/signals/state-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD;;;;;;;;;GASG;AACH,qBAAa,kBAAkB,CAAC,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"state-signal.d.ts","sourceRoot":"","sources":["../../src/signals/state-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD;;;;;;;;;GASG;AACH,qBAAa,kBAAkB,CAAC,SAAS,GAAG,OAAO;IAClD,OAAO,CAAC,OAAO,CAA0B;gBAE7B,eAAe,EAAE,SAAS;IAItC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAEpC;IAED;;;;;;;OAOG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAIzC;;OAEG;IACH,OAAO,IAAI,IAAI;CAGf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xmachines/play-xstate",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.8",
|
|
4
4
|
"description": "XState v5 adapter for Play Architecture",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"actor-model",
|
|
@@ -30,20 +30,20 @@
|
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsc --build",
|
|
33
|
-
"clean": "rm -rf dist *.tsbuildinfo",
|
|
33
|
+
"clean": "rm -rf dist *.tsbuildinfo node_modules/.vite node_modules/.vite-temp",
|
|
34
34
|
"typecheck": "tsc --noEmit",
|
|
35
|
-
"test": "vitest
|
|
35
|
+
"test": "vitest",
|
|
36
36
|
"prepublishOnly": "npm run build"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@xmachines/play": "1.0.0-beta.
|
|
40
|
-
"@xmachines/play-actor": "1.0.0-beta.
|
|
41
|
-
"@xmachines/play-catalog": "1.0.0-beta.
|
|
42
|
-
"@xmachines/play-signals": "1.0.0-beta.
|
|
39
|
+
"@xmachines/play": "1.0.0-beta.8",
|
|
40
|
+
"@xmachines/play-actor": "1.0.0-beta.8",
|
|
41
|
+
"@xmachines/play-catalog": "1.0.0-beta.8",
|
|
42
|
+
"@xmachines/play-signals": "1.0.0-beta.8",
|
|
43
43
|
"zod": "^4.3.6"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@xmachines/shared": "1.0.0-beta.
|
|
46
|
+
"@xmachines/shared": "1.0.0-beta.8"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"xstate": "^5.28.0"
|