@xmachines/play-xstate 1.0.0-beta.9 → 1.0.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.
Files changed (97) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -338
  3. package/dist/define-player.d.ts +6 -56
  4. package/dist/define-player.d.ts.map +1 -1
  5. package/dist/define-player.js +7 -61
  6. package/dist/define-player.js.map +1 -1
  7. package/dist/define-player.typecheck.js +6 -0
  8. package/dist/define-player.typecheck.js.map +1 -1
  9. package/dist/errors.d.ts +170 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +202 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/guards/compose.d.ts +9 -2
  14. package/dist/guards/compose.d.ts.map +1 -1
  15. package/dist/guards/compose.js +3 -2
  16. package/dist/guards/compose.js.map +1 -1
  17. package/dist/guards/helpers.d.ts +16 -1
  18. package/dist/guards/helpers.d.ts.map +1 -1
  19. package/dist/guards/helpers.js +16 -35
  20. package/dist/guards/helpers.js.map +1 -1
  21. package/dist/guards/index.d.ts +2 -1
  22. package/dist/guards/index.d.ts.map +1 -1
  23. package/dist/guards/index.js +1 -1
  24. package/dist/guards/index.js.map +1 -1
  25. package/dist/guards/types.d.ts +1 -1
  26. package/dist/guards/types.d.ts.map +1 -1
  27. package/dist/index.d.ts +6 -10
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -5
  30. package/dist/index.js.map +1 -1
  31. package/dist/player-actor.d.ts +134 -27
  32. package/dist/player-actor.d.ts.map +1 -1
  33. package/dist/player-actor.js +417 -166
  34. package/dist/player-actor.js.map +1 -1
  35. package/dist/player-actor.typecheck.js +5 -3
  36. package/dist/player-actor.typecheck.js.map +1 -1
  37. package/dist/routing/build-url.d.ts +27 -16
  38. package/dist/routing/build-url.d.ts.map +1 -1
  39. package/dist/routing/build-url.js +48 -25
  40. package/dist/routing/build-url.js.map +1 -1
  41. package/dist/routing/derive-current-route.d.ts +22 -0
  42. package/dist/routing/derive-current-route.d.ts.map +1 -0
  43. package/dist/routing/derive-current-route.js +122 -0
  44. package/dist/routing/derive-current-route.js.map +1 -0
  45. package/dist/routing/derive-initial-route.d.ts +43 -0
  46. package/dist/routing/derive-initial-route.d.ts.map +1 -0
  47. package/dist/routing/derive-initial-route.js +57 -0
  48. package/dist/routing/derive-initial-route.js.map +1 -0
  49. package/dist/routing/derive-route.d.ts +15 -1
  50. package/dist/routing/derive-route.d.ts.map +1 -1
  51. package/dist/routing/derive-route.js +25 -10
  52. package/dist/routing/derive-route.js.map +1 -1
  53. package/dist/routing/format-play-route-transitions.d.ts +29 -2
  54. package/dist/routing/format-play-route-transitions.d.ts.map +1 -1
  55. package/dist/routing/format-play-route-transitions.js +32 -8
  56. package/dist/routing/format-play-route-transitions.js.map +1 -1
  57. package/dist/routing/index.d.ts +3 -1
  58. package/dist/routing/index.d.ts.map +1 -1
  59. package/dist/routing/index.js +2 -0
  60. package/dist/routing/index.js.map +1 -1
  61. package/dist/routing/types.d.ts +11 -4
  62. package/dist/routing/types.d.ts.map +1 -1
  63. package/dist/types.d.ts +12 -16
  64. package/dist/types.d.ts.map +1 -1
  65. package/package.json +34 -11
  66. package/dist/catalog/index.d.ts +0 -13
  67. package/dist/catalog/index.d.ts.map +0 -1
  68. package/dist/catalog/index.js +0 -11
  69. package/dist/catalog/index.js.map +0 -1
  70. package/dist/catalog/types.d.ts +0 -27
  71. package/dist/catalog/types.d.ts.map +0 -1
  72. package/dist/catalog/types.js +0 -2
  73. package/dist/catalog/types.js.map +0 -1
  74. package/dist/catalog/validate-binding.d.ts +0 -22
  75. package/dist/catalog/validate-binding.d.ts.map +0 -1
  76. package/dist/catalog/validate-binding.js +0 -30
  77. package/dist/catalog/validate-binding.js.map +0 -1
  78. package/dist/catalog/validate-props.d.ts +0 -66
  79. package/dist/catalog/validate-props.d.ts.map +0 -1
  80. package/dist/catalog/validate-props.js +0 -135
  81. package/dist/catalog/validate-props.js.map +0 -1
  82. package/dist/catalog/validate-props.typecheck.d.ts +0 -2
  83. package/dist/catalog/validate-props.typecheck.d.ts.map +0 -1
  84. package/dist/catalog/validate-props.typecheck.js +0 -6
  85. package/dist/catalog/validate-props.typecheck.js.map +0 -1
  86. package/dist/signals/debounce.d.ts +0 -18
  87. package/dist/signals/debounce.d.ts.map +0 -1
  88. package/dist/signals/debounce.js +0 -35
  89. package/dist/signals/debounce.js.map +0 -1
  90. package/dist/signals/index.d.ts +0 -2
  91. package/dist/signals/index.d.ts.map +0 -1
  92. package/dist/signals/index.js +0 -2
  93. package/dist/signals/index.js.map +0 -1
  94. package/dist/signals/state-signal.d.ts +0 -33
  95. package/dist/signals/state-signal.d.ts.map +0 -1
  96. package/dist/signals/state-signal.js +0 -41
  97. package/dist/signals/state-signal.js.map +0 -1
@@ -1,66 +0,0 @@
1
- import type { z } from "zod";
2
- import type { Catalog } from "./types.js";
3
- import type { ViewMetadata } from "@xmachines/play-actor";
4
- export type ViewMergeContext = {
5
- routeParams?: Record<string, unknown>;
6
- queryParams?: Record<string, unknown>;
7
- [key: string]: unknown;
8
- };
9
- export type ValidationResult = {
10
- success: true;
11
- data: Record<string, unknown>;
12
- } | {
13
- success: false;
14
- error: z.ZodError | Error;
15
- };
16
- /**
17
- * Validate view props against Zod schema — generic overload for typed catalogs
18
- *
19
- * When called with a typed catalog, `componentName` is constrained to `keyof TCatalog`.
20
- * Malformed catalog entries or unknown component names produce compile-time errors
21
- * rather than runtime failures.
22
- *
23
- * @typeParam TCatalog - Catalog type (must extend Catalog)
24
- *
25
- * @param componentName - Component name constrained to string keys of TCatalog
26
- * @param props - Props to validate
27
- * @param catalog - Typed component catalog
28
- * @returns Zod parse result
29
- */
30
- export declare function validateViewProps<TCatalog extends Catalog>(componentName: keyof TCatalog & string, props: unknown, catalog: TCatalog): ValidationResult;
31
- /**
32
- * Validate view props against Zod schema — base overload for untyped catalogs
33
- *
34
- * Per CONTEXT.md:
35
- * - "Prop validation: At state entry"
36
- * - "currentView derivation: Merge meta.view with relevant context data"
37
- *
38
- * Per RESEARCH.md Pattern 4: Use safeParse() for validation
39
- *
40
- * @example
41
- * ```typescript
42
- * const props = { userId: '123', stats: { logins: 5 } };
43
- * const result = validateViewProps('Dashboard', props, catalog);
44
- * if (!result.success) {
45
- * console.error(result.error);
46
- * }
47
- * ```
48
- *
49
- * @param componentName - Component name from catalog
50
- * @param props - Props to validate
51
- * @param catalog - Component catalog with schemas
52
- * @returns Zod parse result
53
- */
54
- export declare function validateViewProps(componentName: string, props: unknown, catalog: Catalog): ValidationResult;
55
- /**
56
- * Merge view metadata with context for props
57
- *
58
- * Per CONTEXT.md: "Merge meta.view with relevant context data for component props"
59
- *
60
- * @param view - View metadata from meta.view
61
- * @param context - Machine context
62
- * @returns Merged props object
63
- */
64
- export declare const mergeViewProps: (view: ViewMetadata, context: ViewMergeContext | null | undefined) => Record<string, unknown>;
65
- export declare const createMemoSignature: (value: unknown) => string;
66
- //# sourceMappingURL=validate-props.d.ts.map
@@ -1 +0,0 @@
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;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,SAAS,OAAO,EACzD,aAAa,EAAE,MAAM,QAAQ,GAAG,MAAM,EACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,QAAQ,GACf,gBAAgB,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAChC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACd,gBAAgB,CAAC;AAsCpB;;;;;;;;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"}
@@ -1,135 +0,0 @@
1
- /**
2
- * Implementation — shared by both overloads
3
- */
4
- export function validateViewProps(componentName, props, catalog) {
5
- const entry = catalog[componentName];
6
- if (!entry) {
7
- return {
8
- success: false,
9
- error: new Error(`Component "${componentName}" not found in catalog`),
10
- };
11
- }
12
- // Handle both CatalogEntry format and direct Zod schema
13
- const schema = typeof entry === "object" && "schema" in entry ? entry.schema : entry;
14
- // Use safeParse to avoid throwing
15
- const result = schema.safeParse(props);
16
- if (!result.success) {
17
- return {
18
- success: false,
19
- error: result.error,
20
- };
21
- }
22
- return {
23
- success: true,
24
- data: result.data,
25
- };
26
- }
27
- /**
28
- * Merge view metadata with context for props
29
- *
30
- * Per CONTEXT.md: "Merge meta.view with relevant context data for component props"
31
- *
32
- * @param view - View metadata from meta.view
33
- * @param context - Machine context
34
- * @returns Merged props object
35
- */
36
- export const mergeViewProps = (view, context) => {
37
- const viewRecord = view;
38
- const normalizedContext = context && typeof context === "object" ? context : {};
39
- // Extract component and props from view metadata
40
- const { component: _component, props, ...rest } = viewRecord;
41
- // Determine view props based on structure
42
- let viewProps;
43
- if (typeof props === "function") {
44
- // Case 0: props is a factory function — call it with { context }
45
- // e.g. props: ({ context }) => ({ welcome: true, username: context.username })
46
- const nextProps = props({
47
- context: normalizedContext,
48
- });
49
- viewProps =
50
- nextProps && typeof nextProps === "object" && !Array.isArray(nextProps)
51
- ? nextProps
52
- : {};
53
- }
54
- else if (props && typeof props === "object" && !Array.isArray(props)) {
55
- // Case 1: view has explicit props object: { component: 'X', props: { a: 1 } }
56
- viewProps = props;
57
- }
58
- else if (Object.keys(rest).length > 0) {
59
- // Case 2: props are flat on view: { component: 'X', a: 1, b: 2 }
60
- viewProps = rest;
61
- }
62
- else {
63
- // Case 3: no props at all
64
- viewProps = {};
65
- }
66
- // Extract infrastructure props that should bypass catalog validation
67
- // These are reserved keys that components receive but aren't in catalog schemas
68
- const { routeParams, queryParams, ...catalogContext } = normalizedContext;
69
- // Merge catalog-validated context with viewProps
70
- const mergedProps = {
71
- ...catalogContext,
72
- ...viewProps,
73
- };
74
- // Add infrastructure props back (these bypass Zod validation)
75
- // Spread routeParams so they become top-level props (e.g., section: "profile")
76
- // Components receive route params as direct props, not nested
77
- return {
78
- ...mergedProps,
79
- ...(routeParams && typeof routeParams === "object" ? routeParams : {}),
80
- ...(queryParams && typeof queryParams === "object" ? { queryParams } : {}),
81
- };
82
- };
83
- const stableSerialize = (value, seen) => {
84
- if (value === null) {
85
- return "null";
86
- }
87
- if (value === undefined) {
88
- return "undefined";
89
- }
90
- if (typeof value === "string") {
91
- return JSON.stringify(value);
92
- }
93
- if (typeof value === "number") {
94
- if (Number.isNaN(value)) {
95
- return '"NaN"';
96
- }
97
- if (!Number.isFinite(value)) {
98
- return value > 0 ? '"Infinity"' : '"-Infinity"';
99
- }
100
- return String(value);
101
- }
102
- if (typeof value === "boolean" || typeof value === "bigint") {
103
- return String(value);
104
- }
105
- if (typeof value === "symbol") {
106
- return `"${String(value)}"`;
107
- }
108
- if (typeof value === "function") {
109
- return '"[function]"';
110
- }
111
- if (Array.isArray(value)) {
112
- return `[${value.map((item) => stableSerialize(item, seen)).join(",")}]`;
113
- }
114
- if (value instanceof Date) {
115
- return `"${value.toISOString()}"`;
116
- }
117
- if (typeof value === "object") {
118
- if (seen.has(value)) {
119
- return '"[circular]"';
120
- }
121
- seen.add(value);
122
- const objectValue = value;
123
- const keys = Object.keys(objectValue).sort();
124
- const body = keys
125
- .map((key) => `${JSON.stringify(key)}:${stableSerialize(objectValue[key], seen)}`)
126
- .join(",");
127
- seen.delete(value);
128
- return `{${body}}`;
129
- }
130
- return `"${String(value)}"`;
131
- };
132
- export const createMemoSignature = (value) => {
133
- return stableSerialize(value, new WeakSet());
134
- };
135
- //# sourceMappingURL=validate-props.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-props.js","sourceRoot":"","sources":["../../src/catalog/validate-props.ts"],"names":[],"mappings":"AAqEA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAChC,aAAqB,EACrB,KAAc,EACd,OAAgB;IAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAErC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,cAAc,aAAa,wBAAwB,CAAC;SACrE,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAErF,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,MAAM,CAAC,KAAK;SACnB,CAAC;IACH,CAAC;IAED,OAAO;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,MAAM,CAAC,IAA+B;KAC5C,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,IAAkB,EAClB,OAA4C,EAClB,EAAE;IAC5B,MAAM,UAAU,GAAG,IAAwE,CAAC;IAC5F,MAAM,iBAAiB,GACtB,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAE,OAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7E,iDAAiD;IACjD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC;IAE7D,0CAA0C;IAC1C,IAAI,SAAkC,CAAC;IAEvC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACjC,iEAAiE;QACjE,+EAA+E;QAC/E,MAAM,SAAS,GAAI,KAA0D,CAAC;YAC7E,OAAO,EAAE,iBAAiB;SAC1B,CAAC,CAAC;QACH,SAAS;YACR,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;gBACtE,CAAC,CAAE,SAAqC;gBACxC,CAAC,CAAC,EAAE,CAAC;IACR,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,8EAA8E;QAC9E,SAAS,GAAG,KAAgC,CAAC;IAC9C,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,iEAAiE;QACjE,SAAS,GAAG,IAA+B,CAAC;IAC7C,CAAC;SAAM,CAAC;QACP,0BAA0B;QAC1B,SAAS,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,qEAAqE;IACrE,gFAAgF;IAChF,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,GAAG,iBAAiB,CAAC;IAE1E,iDAAiD;IACjD,MAAM,WAAW,GAAG;QACnB,GAAG,cAAc;QACjB,GAAG,SAAS;KACZ,CAAC;IAEF,8DAA8D;IAC9D,+EAA+E;IAC/E,8DAA8D;IAC9D,OAAO;QACN,GAAG,WAAW;QACd,GAAG,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,IAAqB,EAAU,EAAE;IACzE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1E,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC3B,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,cAAc,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEhB,MAAM,WAAW,GAAG,KAAgC,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI;aACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;aACjF,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,IAAI,GAAG,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC7D,OAAO,eAAe,CAAC,KAAK,EAAE,IAAI,OAAO,EAAU,CAAC,CAAC;AACtD,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=validate-props.typecheck.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-props.typecheck.d.ts","sourceRoot":"","sources":["../../src/catalog/validate-props.typecheck.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- import { mergeViewProps, validateViewProps } from "./validate-props.js";
2
- const mergeContextNotAny = false;
3
- void mergeContextNotAny;
4
- const validateDataNotAny = false;
5
- void validateDataNotAny;
6
- //# sourceMappingURL=validate-props.typecheck.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-props.typecheck.js","sourceRoot":"","sources":["../../src/catalog/validate-props.typecheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxE,MAAM,kBAAkB,GAAmC,KAAK,CAAC;AACjE,KAAK,kBAAkB,CAAC;AAKxB,MAAM,kBAAkB,GAAmC,KAAK,CAAC;AACjE,KAAK,kBAAkB,CAAC"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Microtask debouncing for glitch-free signal updates
3
- *
4
- * Per CONTEXT.md: "Microtask batching for glitch-free guarantee"
5
- * Per RESEARCH.md Pattern 5: Updates batch in microtask queue
6
- *
7
- * Leverages TC39 Signal primitives for proper batching.
8
- */
9
- /**
10
- * Schedule callback in microtask queue
11
- *
12
- * Multiple calls in same tick coalesce into single execution.
13
- *
14
- * @param callback - Function to execute in microtask
15
- * @returns Function to cancel scheduled execution
16
- */
17
- export declare const scheduleMicrotask: (callback: () => void) => (() => void);
18
- //# sourceMappingURL=debounce.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../src/signals/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAoBnE,CAAC"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Microtask debouncing for glitch-free signal updates
3
- *
4
- * Per CONTEXT.md: "Microtask batching for glitch-free guarantee"
5
- * Per RESEARCH.md Pattern 5: Updates batch in microtask queue
6
- *
7
- * Leverages TC39 Signal primitives for proper batching.
8
- */
9
- /**
10
- * Schedule callback in microtask queue
11
- *
12
- * Multiple calls in same tick coalesce into single execution.
13
- *
14
- * @param callback - Function to execute in microtask
15
- * @returns Function to cancel scheduled execution
16
- */
17
- export const scheduleMicrotask = (callback) => {
18
- let scheduled = false;
19
- let cancelled = false;
20
- const execute = () => {
21
- if (!cancelled) {
22
- callback();
23
- }
24
- scheduled = false;
25
- };
26
- if (!scheduled) {
27
- scheduled = true;
28
- queueMicrotask(execute);
29
- }
30
- // Return cancel function
31
- return () => {
32
- cancelled = true;
33
- };
34
- };
35
- //# sourceMappingURL=debounce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../src/signals/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAoB,EAAgB,EAAE;IACvE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,OAAO,GAAG,GAAG,EAAE;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,QAAQ,EAAE,CAAC;QACZ,CAAC;QACD,SAAS,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,SAAS,GAAG,IAAI,CAAC;QACjB,cAAc,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,yBAAyB;IACzB,OAAO,GAAG,EAAE;QACX,SAAS,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC;AACH,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export { StateSignalManager } from "./state-signal.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { StateSignalManager } from "./state-signal.js";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,33 +0,0 @@
1
- import { Signal } from "@xmachines/play-signals";
2
- /**
3
- * Manage state signal with synchronous updates
4
- *
5
- * Per CONTEXT.md: "Update timing: On stable states only"
6
- * Per RESEARCH.md: Only update when snapshot.status === 'active'
7
- *
8
- * Note: Previously used microtask batching, but this broke guard redirects.
9
- * XState already provides coalescence - if multiple transitions occur in a single send(),
10
- * the subscription callback only fires once with the final state.
11
- */
12
- export declare class StateSignalManager<TSnapshot = unknown> {
13
- private _signal;
14
- constructor(initialSnapshot: TSnapshot);
15
- /**
16
- * Get the signal instance
17
- */
18
- get signal(): Signal.State<TSnapshot>;
19
- /**
20
- * Update signal synchronously
21
- *
22
- * Synchronous updates ensure that guard-triggered redirects are immediately
23
- * visible to router bridges, allowing them to sync the browser URL.
24
- *
25
- * @param snapshot - New snapshot to set
26
- */
27
- scheduleUpdate(snapshot: TSnapshot): void;
28
- /**
29
- * Cleanup (no-op since we're synchronous now)
30
- */
31
- dispose(): void;
32
- }
33
- //# sourceMappingURL=state-signal.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,41 +0,0 @@
1
- import { Signal } from "@xmachines/play-signals";
2
- /**
3
- * Manage state signal with synchronous updates
4
- *
5
- * Per CONTEXT.md: "Update timing: On stable states only"
6
- * Per RESEARCH.md: Only update when snapshot.status === 'active'
7
- *
8
- * Note: Previously used microtask batching, but this broke guard redirects.
9
- * XState already provides coalescence - if multiple transitions occur in a single send(),
10
- * the subscription callback only fires once with the final state.
11
- */
12
- export class StateSignalManager {
13
- _signal;
14
- constructor(initialSnapshot) {
15
- this._signal = new Signal.State(initialSnapshot);
16
- }
17
- /**
18
- * Get the signal instance
19
- */
20
- get signal() {
21
- return this._signal;
22
- }
23
- /**
24
- * Update signal synchronously
25
- *
26
- * Synchronous updates ensure that guard-triggered redirects are immediately
27
- * visible to router bridges, allowing them to sync the browser URL.
28
- *
29
- * @param snapshot - New snapshot to set
30
- */
31
- scheduleUpdate(snapshot) {
32
- this._signal.set(snapshot);
33
- }
34
- /**
35
- * Cleanup (no-op since we're synchronous now)
36
- */
37
- dispose() {
38
- // No cleanup needed for synchronous updates
39
- }
40
- }
41
- //# sourceMappingURL=state-signal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-signal.js","sourceRoot":"","sources":["../../src/signals/state-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAkB;IACtB,OAAO,CAA0B;IAEzC,YAAY,eAA0B;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACH,cAAc,CAAC,QAAmB;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,OAAO;QACN,4CAA4C;IAC7C,CAAC;CACD"}