@xmachines/play-vue 1.0.0-beta.1
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 +137 -0
- package/dist/PlayRenderer.vue.js +8 -0
- package/dist/PlayRenderer.vue.js.map +1 -0
- package/dist/PlayRenderer.vue2.js +48 -0
- package/dist/PlayRenderer.vue2.js.map +1 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
- package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +54 -0
- package/src/PlayRenderer.vue +150 -0
- package/src/index.ts +9 -0
- package/src/types.ts +23 -0
- package/src/vue-shim.d.ts +5 -0
- package/test/PlayRenderer.test.ts +209 -0
- package/tsconfig.json +15 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vite.config.ts +23 -0
- package/vitest.config.ts +19 -0
package/README.md
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# @xmachines/play-vue
|
|
2
|
+
|
|
3
|
+
Vue renderer component for XMachines Play architecture.
|
|
4
|
+
|
|
5
|
+
This package keeps Vue as passive infrastructure: it observes actor signals and forwards events, but does not enforce business policy.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @xmachines/play-vue vue
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Current Exports
|
|
14
|
+
|
|
15
|
+
- `PlayRenderer` (Vue component)
|
|
16
|
+
- `PlayRendererProps` (type)
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```vue
|
|
21
|
+
<script setup lang="ts">
|
|
22
|
+
import { PlayRenderer } from "@xmachines/play-vue";
|
|
23
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
24
|
+
import { defineCatalog } from "@xmachines/play-catalog";
|
|
25
|
+
|
|
26
|
+
// Define catalog
|
|
27
|
+
const catalog = defineCatalog({
|
|
28
|
+
home: { component: "Home", props: { title: "string" } },
|
|
29
|
+
login: { component: "Login", props: { error: "string?" } },
|
|
30
|
+
dashboard: { component: "Dashboard", props: { userId: "string" } },
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Create actor
|
|
34
|
+
const actor = definePlayer({ machine: authMachine, catalog })();
|
|
35
|
+
actor.start();
|
|
36
|
+
|
|
37
|
+
// Define component map
|
|
38
|
+
const components = {
|
|
39
|
+
Home: HomeComponent,
|
|
40
|
+
Login: LoginComponent,
|
|
41
|
+
Dashboard: DashboardComponent,
|
|
42
|
+
};
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
<PlayRenderer :actor="actor" :components="components">
|
|
47
|
+
<template #fallback>
|
|
48
|
+
<div>Loading...</div>
|
|
49
|
+
</template>
|
|
50
|
+
</PlayRenderer>
|
|
51
|
+
</template>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## API
|
|
55
|
+
|
|
56
|
+
### PlayRenderer
|
|
57
|
+
|
|
58
|
+
Main renderer component that observes `actor.currentView` signal and dynamically renders catalog components.
|
|
59
|
+
|
|
60
|
+
**Props:**
|
|
61
|
+
|
|
62
|
+
- `actor` (required) - Actor instance with `currentView` signal
|
|
63
|
+
- `components` (required) - Map of component names to Vue components
|
|
64
|
+
- `fallback` (optional) - Slot shown when `currentView` is null
|
|
65
|
+
|
|
66
|
+
**Component Props:**
|
|
67
|
+
|
|
68
|
+
Each rendered component receives:
|
|
69
|
+
|
|
70
|
+
- All props from `view.props` (spread via `v-bind`)
|
|
71
|
+
- `send` function for sending events to actor
|
|
72
|
+
|
|
73
|
+
**Example Component:**
|
|
74
|
+
|
|
75
|
+
```vue
|
|
76
|
+
<script setup lang="ts">
|
|
77
|
+
import type { AbstractActor } from "@xmachines/play-actor";
|
|
78
|
+
|
|
79
|
+
defineProps<{
|
|
80
|
+
userId: string;
|
|
81
|
+
send: AbstractActor<any>["send"];
|
|
82
|
+
}>();
|
|
83
|
+
|
|
84
|
+
function handleClick() {
|
|
85
|
+
send({ type: "user.click", payload: { action: "details" } });
|
|
86
|
+
}
|
|
87
|
+
</script>
|
|
88
|
+
|
|
89
|
+
<template>
|
|
90
|
+
<div>
|
|
91
|
+
<h1>User: {{ userId }}</h1>
|
|
92
|
+
<button @click="handleClick">View Details</button>
|
|
93
|
+
</div>
|
|
94
|
+
</template>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Features
|
|
98
|
+
|
|
99
|
+
- **Signal Bridge:** Uses TC39 Signal.subtle.Watcher to bridge actor signals to Vue reactivity
|
|
100
|
+
- **Dynamic Rendering:** Renders components based on `actor.currentView.component` string
|
|
101
|
+
- **Type Safe:** Full TypeScript support with generic type inference
|
|
102
|
+
- **Error Handling:** Gracefully handles missing components and null catalogs
|
|
103
|
+
- **One-Shot Re-Watch:** Implements proper signal watcher pattern with microtask batching
|
|
104
|
+
|
|
105
|
+
## Canonical Watcher Lifecycle
|
|
106
|
+
|
|
107
|
+
Use the same watcher flow as other adapters/packages:
|
|
108
|
+
|
|
109
|
+
1. `notify`
|
|
110
|
+
2. `queueMicrotask`
|
|
111
|
+
3. `getPending()`
|
|
112
|
+
4. read actor signals and update framework-local state
|
|
113
|
+
5. re-arm with `watch(...)` or `watch()`
|
|
114
|
+
|
|
115
|
+
Watcher notify is one-shot. Re-arm is required for continuous observation.
|
|
116
|
+
|
|
117
|
+
## Cleanup Contract
|
|
118
|
+
|
|
119
|
+
Cleanup must be explicit:
|
|
120
|
+
|
|
121
|
+
- Call `unwatch(...)` during Vue lifecycle teardown (`onUnmounted`).
|
|
122
|
+
- Treat renderer/provider disposal as deterministic teardown, not GC-only cleanup.
|
|
123
|
+
- Keep actor-driven routing and view decisions in the actor layer.
|
|
124
|
+
|
|
125
|
+
## Architecture
|
|
126
|
+
|
|
127
|
+
PlayRenderer follows the XMachines Play architecture principles:
|
|
128
|
+
|
|
129
|
+
1. **Actor Authority:** Actor decides all state transitions
|
|
130
|
+
2. **Passive Infrastructure:** Renderer observes signals, sends events
|
|
131
|
+
3. **Signal-Only Reactivity:** Business logic state lives in actor signals
|
|
132
|
+
|
|
133
|
+
Signals are reactivity substrate only. They are not a business mutation channel.
|
|
134
|
+
|
|
135
|
+
## License
|
|
136
|
+
|
|
137
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayRenderer.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { defineComponent as m, toRaw as a, ref as d, onUnmounted as p, computed as f, h as l } from "vue";
|
|
2
|
+
import { Signal as v } from "@xmachines/play-signals";
|
|
3
|
+
const g = m({
|
|
4
|
+
name: "PlayRenderer",
|
|
5
|
+
props: {
|
|
6
|
+
actor: {
|
|
7
|
+
type: Object,
|
|
8
|
+
required: !0
|
|
9
|
+
},
|
|
10
|
+
components: {
|
|
11
|
+
type: Object,
|
|
12
|
+
required: !0
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
setup(t, { slots: r }) {
|
|
16
|
+
const n = a(t.actor), i = n.currentView.get(), e = d(i), o = new v.subtle.Watcher(() => {
|
|
17
|
+
queueMicrotask(() => {
|
|
18
|
+
o.getPending(), e.value = n.currentView.get(), o.watch(n.currentView);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
o.watch(n.currentView), p(() => {
|
|
22
|
+
o.unwatch(n.currentView);
|
|
23
|
+
});
|
|
24
|
+
const s = n.send.bind(n), c = f(() => {
|
|
25
|
+
if (!e.value) return null;
|
|
26
|
+
if (!t.components)
|
|
27
|
+
return console.error(
|
|
28
|
+
`Components catalog is ${t.components === null ? "null" : "undefined"}. Cannot render component "${e.value.component}".`
|
|
29
|
+
), null;
|
|
30
|
+
const u = a(t.components[e.value.component]);
|
|
31
|
+
return u || (console.error(
|
|
32
|
+
`Component "${e.value.component}" not found in catalog. Available components: ${Object.keys(t.components).join(", ")}`
|
|
33
|
+
), null);
|
|
34
|
+
});
|
|
35
|
+
return () => e.value ? c.value ? l(c.value, {
|
|
36
|
+
...e.value.props,
|
|
37
|
+
send: s
|
|
38
|
+
}) : l(
|
|
39
|
+
"div",
|
|
40
|
+
{ class: "play-renderer-error" },
|
|
41
|
+
`Component "${e.value.component}" not found in catalog`
|
|
42
|
+
) : r.fallback ? r.fallback() : null;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
export {
|
|
46
|
+
g as default
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=PlayRenderer.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayRenderer.vue2.js","sources":["../src/PlayRenderer.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * PlayRenderer - Main Vue renderer component for XMachines Play architecture\n *\n * Architecture (per RESEARCH.md Pattern 1):\n * - Subscribes to actor.currentView signal via Signal.subtle.Watcher\n * - Dynamically renders catalog components based on view.component string\n * - Forwards user events to actor via actor.send()\n * - Vue ref only for triggering renders, NOT business logic\n *\n * Signal bridge uses one-shot re-watch pattern:\n * TC39 Signal watchers stop watching after notification, so watcher.watch()\n * must be called inside a microtask after getPending() to re-arm for the\n * next notification.\n *\n * CRITICAL: Never call signal.get() or signal.set() inside the Watcher's\n * notify callback. The callback runs synchronously during the signal graph's\n * dirty-propagation phase. All reads must be deferred to a queueMicrotask.\n *\n * @invariant Actor Authority - Actor decides all state transitions via guards\n * @invariant Passive Infrastructure - Component observes signals, sends events\n * @invariant Signal-Only Reactivity - Business logic state lives in actor signals\n */\n\nimport { defineComponent, ref, computed, toRaw, onUnmounted, h, type PropType } from \"vue\";\nimport { Signal } from \"@xmachines/play-signals\";\nimport type { PlayRendererProps } from \"./types.js\";\nimport type { AbstractActor, Viewable } from \"@xmachines/play-actor\";\nimport type { AnyActorLogic } from \"xstate\";\nimport type { Component } from \"vue\";\n\nexport default defineComponent({\n\tname: \"PlayRenderer\",\n\tprops: {\n\t\tactor: {\n\t\t\ttype: Object as PropType<AbstractActor<AnyActorLogic> & Viewable>,\n\t\t\trequired: true,\n\t\t},\n\t\tcomponents: {\n\t\t\ttype: Object as PropType<Record<string, Component>>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup(props, { slots }) {\n\t\t// Unwrap actor from Vue's reactive proxy to access raw Signal objects\n\t\t// CRITICAL: toRaw() preserves Signal's 'this' binding for .get() and watcher operations\n\t\tconst actor = toRaw(props.actor);\n\n\t\t// Get initial value from unwrapped signal\n\t\tconst initialView = actor.currentView.get();\n\n\t\t// Vue ref for triggering re-renders (NOT business logic state)\n\t\t// Signal is source of truth, ref is just Vue's render trigger\n\t\tconst view = ref<{ component: string; props: Record<string, unknown> } | null>(initialView);\n\n\t\t// Signal watcher for bridging TC39 Signals to Vue reactivity\n\t\t// Created immediately (not in onMounted) so signal changes during the\n\t\t// synchronous mount phase are captured.\n\t\t//\n\t\t// The notify callback runs synchronously during the signal graph's\n\t\t// dirty-propagation phase. NEVER read (.get()) or write (.set()) signals\n\t\t// inside it. Only schedule a microtask to do the actual work.\n\t\tconst watcher = new Signal.subtle.Watcher(() => {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\t// Step 1: Acknowledge notification (clears watcher's dirty flags)\n\t\t\t\twatcher.getPending();\n\n\t\t\t\t// Step 2: Read signal value (safe — notification phase is over)\n\t\t\t\tview.value = actor.currentView.get();\n\n\t\t\t\t// Step 3: Re-watch for next notification (one-shot pattern)\n\t\t\t\t// TC39 watchers stop notifying after first notification until re-armed\n\t\t\t\twatcher.watch(actor.currentView);\n\t\t\t});\n\t\t});\n\n\t\t// Start watching the signal\n\t\twatcher.watch(actor.currentView);\n\n\t\tonUnmounted(() => {\n\t\t\t// Unwatch to stop receiving notifications\n\t\t\twatcher.unwatch(actor.currentView);\n\t\t});\n\n\t\t// Bind send function to actor for correct 'this' context\n\t\tconst sendBound = actor.send.bind(actor);\n\n\t\t// Compute Component from view.component lookup\n\t\tconst ResolvedComponent = computed(() => {\n\t\t\tif (!view.value) return null;\n\n\t\t\t// Handle null/undefined components catalog gracefully\n\t\t\tif (!props.components) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`Components catalog is ${props.components === null ? \"null\" : \"undefined\"}. ` +\n\t\t\t\t\t\t`Cannot render component \"${view.value.component}\".`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Look up component from catalog\n\t\t\tconst comp = toRaw(props.components[view.value.component]);\n\n\t\t\tif (!comp) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`Component \"${view.value.component}\" not found in catalog. ` +\n\t\t\t\t\t\t`Available components: ${Object.keys(props.components).join(\", \")}`,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn comp;\n\t\t});\n\n\t\t// Use render function to avoid Vue 3.5 SFC template <slot> + jsdom renderSlot crash\n\t\treturn () => {\n\t\t\t// No view — show fallback slot\n\t\t\tif (!view.value) {\n\t\t\t\treturn slots.fallback ? slots.fallback() : null;\n\t\t\t}\n\n\t\t\t// View exists but component not found\n\t\t\tif (!ResolvedComponent.value) {\n\t\t\t\treturn h(\n\t\t\t\t\t\"div\",\n\t\t\t\t\t{ class: \"play-renderer-error\" },\n\t\t\t\t\t`Component \"${view.value.component}\" not found in catalog`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Render matched component dynamically\n\t\t\treturn h(ResolvedComponent.value, {\n\t\t\t\t...view.value.props,\n\t\t\t\tsend: sendBound,\n\t\t\t});\n\t\t};\n\t},\n});\n</script>\n\n<style scoped>\n.play-renderer-error {\n\tpadding: 1rem;\n\tbackground-color: #fee;\n\tborder: 1px solid #fcc;\n\tborder-radius: 4px;\n\tcolor: #c00;\n\tfont-family: monospace;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","props","slots","actor","toRaw","initialView","view","ref","watcher","Signal","onUnmounted","sendBound","ResolvedComponent","computed","comp","h"],"mappings":";;AA+BA,MAAAA,IAAeC,EAAgB;AAAA,EAC9B,MAAM;AAAA,EACN,OAAO;AAAA,IACN,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEX,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACX;AAAA,EAED,MAAMC,GAAO,EAAE,OAAAC,KAAS;AAGvB,UAAMC,IAAQC,EAAMH,EAAM,KAAK,GAGzBI,IAAcF,EAAM,YAAY,IAAA,GAIhCG,IAAOC,EAAkEF,CAAW,GASpFG,IAAU,IAAIC,EAAO,OAAO,QAAQ,MAAM;AAC/C,qBAAe,MAAM;AAEpB,QAAAD,EAAQ,WAAA,GAGRF,EAAK,QAAQH,EAAM,YAAY,IAAA,GAI/BK,EAAQ,MAAML,EAAM,WAAW;AAAA,MAChC,CAAC;AAAA,IACF,CAAC;AAGD,IAAAK,EAAQ,MAAML,EAAM,WAAW,GAE/BO,EAAY,MAAM;AAEjB,MAAAF,EAAQ,QAAQL,EAAM,WAAW;AAAA,IAClC,CAAC;AAGD,UAAMQ,IAAYR,EAAM,KAAK,KAAKA,CAAK,GAGjCS,IAAoBC,EAAS,MAAM;AACxC,UAAI,CAACP,EAAK,MAAO,QAAO;AAGxB,UAAI,CAACL,EAAM;AACV,uBAAQ;AAAA,UACP,yBAAyBA,EAAM,eAAe,OAAO,SAAS,WAAW,8BAC5CK,EAAK,MAAM,SAAS;AAAA,QAAA,GAE3C;AAIR,YAAMQ,IAAOV,EAAMH,EAAM,WAAWK,EAAK,MAAM,SAAS,CAAC;AAEzD,aAAKQ,MACJ,QAAQ;AAAA,QACP,cAAcR,EAAK,MAAM,SAAS,iDACR,OAAO,KAAKL,EAAM,UAAU,EAAE,KAAK,IAAI,CAAC;AAAA,MAAA,GAE5D;AAAA,IAIT,CAAC;AAGD,WAAO,MAEDK,EAAK,QAKLM,EAAkB,QAShBG,EAAEH,EAAkB,OAAO;AAAA,MACjC,GAAGN,EAAK,MAAM;AAAA,MACd,MAAMK;AAAA,IAAA,CACN,IAXOI;AAAA,MACN;AAAA,MACA,EAAE,OAAO,sBAAA;AAAA,MACT,cAAcT,EAAK,MAAM,SAAS;AAAA,IAAA,IAR5BJ,EAAM,WAAWA,EAAM,SAAA,IAAa;AAAA,EAkB9C;AACD,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_plugin-vue_export-helper.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/dist/index.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.play-renderer-error[data-v-275eda6e]{padding:1rem;background-color:#fee;border:1px solid #fcc;border-radius:4px;color:#c00;font-family:monospace}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @xmachines/play-vue - Vue renderer for XMachines Play architecture
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export { default as PlayRenderer } from "./PlayRenderer.vue";
|
|
7
|
+
export type { PlayRendererProps } from "./types.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for play-vue
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { AbstractActor, Viewable } from "@xmachines/play-actor";
|
|
7
|
+
import type { Component } from "vue";
|
|
8
|
+
import type { AnyActorLogic } from "xstate";
|
|
9
|
+
/**
|
|
10
|
+
* Props for PlayRenderer component
|
|
11
|
+
*
|
|
12
|
+
* @property actor - Actor instance with currentView signal (requires Viewable capability)
|
|
13
|
+
* @property components - Map of component names to Vue components
|
|
14
|
+
*/
|
|
15
|
+
export interface PlayRendererProps {
|
|
16
|
+
/** Actor instance with currentView signal (requires Viewable capability) */
|
|
17
|
+
actor: AbstractActor<AnyActorLogic> & Viewable;
|
|
18
|
+
/** Map of component names to Vue components */
|
|
19
|
+
components: Record<string, Component>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IACjC,4EAA4E;IAC5E,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC;IAE/C,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACtC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xmachines/play-vue",
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
|
+
"description": "Vue renderer for XMachines Play architecture",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"reactive",
|
|
7
|
+
"renderer",
|
|
8
|
+
"state-machine",
|
|
9
|
+
"vue",
|
|
10
|
+
"xmachines"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git@gitlab.com:xmachin-es/xmachines-js.git"
|
|
16
|
+
},
|
|
17
|
+
"type": "module",
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "vite build && tsc --build --force",
|
|
28
|
+
"clean": "rm -rf dist",
|
|
29
|
+
"typecheck": "tsc --noEmit",
|
|
30
|
+
"test": "vitest run",
|
|
31
|
+
"test:watch": "vitest",
|
|
32
|
+
"prepublishOnly": "npm run build"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@xmachines/play-actor": "1.0.0-beta.1",
|
|
36
|
+
"@xmachines/play-catalog": "1.0.0-beta.1",
|
|
37
|
+
"@xmachines/play-signals": "1.0.0-beta.1"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^25.4.0",
|
|
41
|
+
"@vitejs/plugin-vue": "^6.0.4",
|
|
42
|
+
"@vue/test-utils": "^2.4.6",
|
|
43
|
+
"jsdom": "^28.0.0",
|
|
44
|
+
"typescript": "^5.7.0",
|
|
45
|
+
"vitest": "^4.0.18",
|
|
46
|
+
"vue": "^3.5.30"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {
|
|
49
|
+
"vue": "^3.5.30"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* PlayRenderer - Main Vue renderer component for XMachines Play architecture
|
|
4
|
+
*
|
|
5
|
+
* Architecture (per RESEARCH.md Pattern 1):
|
|
6
|
+
* - Subscribes to actor.currentView signal via Signal.subtle.Watcher
|
|
7
|
+
* - Dynamically renders catalog components based on view.component string
|
|
8
|
+
* - Forwards user events to actor via actor.send()
|
|
9
|
+
* - Vue ref only for triggering renders, NOT business logic
|
|
10
|
+
*
|
|
11
|
+
* Signal bridge uses one-shot re-watch pattern:
|
|
12
|
+
* TC39 Signal watchers stop watching after notification, so watcher.watch()
|
|
13
|
+
* must be called inside a microtask after getPending() to re-arm for the
|
|
14
|
+
* next notification.
|
|
15
|
+
*
|
|
16
|
+
* CRITICAL: Never call signal.get() or signal.set() inside the Watcher's
|
|
17
|
+
* notify callback. The callback runs synchronously during the signal graph's
|
|
18
|
+
* dirty-propagation phase. All reads must be deferred to a queueMicrotask.
|
|
19
|
+
*
|
|
20
|
+
* @invariant Actor Authority - Actor decides all state transitions via guards
|
|
21
|
+
* @invariant Passive Infrastructure - Component observes signals, sends events
|
|
22
|
+
* @invariant Signal-Only Reactivity - Business logic state lives in actor signals
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { defineComponent, ref, computed, toRaw, onUnmounted, h, type PropType } from "vue";
|
|
26
|
+
import { Signal } from "@xmachines/play-signals";
|
|
27
|
+
import type { PlayRendererProps } from "./types.js";
|
|
28
|
+
import type { AbstractActor, Viewable } from "@xmachines/play-actor";
|
|
29
|
+
import type { AnyActorLogic } from "xstate";
|
|
30
|
+
import type { Component } from "vue";
|
|
31
|
+
|
|
32
|
+
export default defineComponent({
|
|
33
|
+
name: "PlayRenderer",
|
|
34
|
+
props: {
|
|
35
|
+
actor: {
|
|
36
|
+
type: Object as PropType<AbstractActor<AnyActorLogic> & Viewable>,
|
|
37
|
+
required: true,
|
|
38
|
+
},
|
|
39
|
+
components: {
|
|
40
|
+
type: Object as PropType<Record<string, Component>>,
|
|
41
|
+
required: true,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
setup(props, { slots }) {
|
|
45
|
+
// Unwrap actor from Vue's reactive proxy to access raw Signal objects
|
|
46
|
+
// CRITICAL: toRaw() preserves Signal's 'this' binding for .get() and watcher operations
|
|
47
|
+
const actor = toRaw(props.actor);
|
|
48
|
+
|
|
49
|
+
// Get initial value from unwrapped signal
|
|
50
|
+
const initialView = actor.currentView.get();
|
|
51
|
+
|
|
52
|
+
// Vue ref for triggering re-renders (NOT business logic state)
|
|
53
|
+
// Signal is source of truth, ref is just Vue's render trigger
|
|
54
|
+
const view = ref<{ component: string; props: Record<string, unknown> } | null>(initialView);
|
|
55
|
+
|
|
56
|
+
// Signal watcher for bridging TC39 Signals to Vue reactivity
|
|
57
|
+
// Created immediately (not in onMounted) so signal changes during the
|
|
58
|
+
// synchronous mount phase are captured.
|
|
59
|
+
//
|
|
60
|
+
// The notify callback runs synchronously during the signal graph's
|
|
61
|
+
// dirty-propagation phase. NEVER read (.get()) or write (.set()) signals
|
|
62
|
+
// inside it. Only schedule a microtask to do the actual work.
|
|
63
|
+
const watcher = new Signal.subtle.Watcher(() => {
|
|
64
|
+
queueMicrotask(() => {
|
|
65
|
+
// Step 1: Acknowledge notification (clears watcher's dirty flags)
|
|
66
|
+
watcher.getPending();
|
|
67
|
+
|
|
68
|
+
// Step 2: Read signal value (safe — notification phase is over)
|
|
69
|
+
view.value = actor.currentView.get();
|
|
70
|
+
|
|
71
|
+
// Step 3: Re-watch for next notification (one-shot pattern)
|
|
72
|
+
// TC39 watchers stop notifying after first notification until re-armed
|
|
73
|
+
watcher.watch(actor.currentView);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Start watching the signal
|
|
78
|
+
watcher.watch(actor.currentView);
|
|
79
|
+
|
|
80
|
+
onUnmounted(() => {
|
|
81
|
+
// Unwatch to stop receiving notifications
|
|
82
|
+
watcher.unwatch(actor.currentView);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// Bind send function to actor for correct 'this' context
|
|
86
|
+
const sendBound = actor.send.bind(actor);
|
|
87
|
+
|
|
88
|
+
// Compute Component from view.component lookup
|
|
89
|
+
const ResolvedComponent = computed(() => {
|
|
90
|
+
if (!view.value) return null;
|
|
91
|
+
|
|
92
|
+
// Handle null/undefined components catalog gracefully
|
|
93
|
+
if (!props.components) {
|
|
94
|
+
console.error(
|
|
95
|
+
`Components catalog is ${props.components === null ? "null" : "undefined"}. ` +
|
|
96
|
+
`Cannot render component "${view.value.component}".`,
|
|
97
|
+
);
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Look up component from catalog
|
|
102
|
+
const comp = toRaw(props.components[view.value.component]);
|
|
103
|
+
|
|
104
|
+
if (!comp) {
|
|
105
|
+
console.error(
|
|
106
|
+
`Component "${view.value.component}" not found in catalog. ` +
|
|
107
|
+
`Available components: ${Object.keys(props.components).join(", ")}`,
|
|
108
|
+
);
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return comp;
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// Use render function to avoid Vue 3.5 SFC template <slot> + jsdom renderSlot crash
|
|
116
|
+
return () => {
|
|
117
|
+
// No view — show fallback slot
|
|
118
|
+
if (!view.value) {
|
|
119
|
+
return slots.fallback ? slots.fallback() : null;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// View exists but component not found
|
|
123
|
+
if (!ResolvedComponent.value) {
|
|
124
|
+
return h(
|
|
125
|
+
"div",
|
|
126
|
+
{ class: "play-renderer-error" },
|
|
127
|
+
`Component "${view.value.component}" not found in catalog`,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Render matched component dynamically
|
|
132
|
+
return h(ResolvedComponent.value, {
|
|
133
|
+
...view.value.props,
|
|
134
|
+
send: sendBound,
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
</script>
|
|
140
|
+
|
|
141
|
+
<style scoped>
|
|
142
|
+
.play-renderer-error {
|
|
143
|
+
padding: 1rem;
|
|
144
|
+
background-color: #fee;
|
|
145
|
+
border: 1px solid #fcc;
|
|
146
|
+
border-radius: 4px;
|
|
147
|
+
color: #c00;
|
|
148
|
+
font-family: monospace;
|
|
149
|
+
}
|
|
150
|
+
</style>
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @xmachines/play-vue - Vue renderer for XMachines Play architecture
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Re-export the Vue component (will be handled by build tools like Vite)
|
|
8
|
+
export { default as PlayRenderer } from "./PlayRenderer.vue";
|
|
9
|
+
export type { PlayRendererProps } from "./types.js";
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript type definitions for play-vue
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { AbstractActor, Viewable } from "@xmachines/play-actor";
|
|
8
|
+
import type { Component } from "vue";
|
|
9
|
+
import type { AnyActorLogic } from "xstate";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Props for PlayRenderer component
|
|
13
|
+
*
|
|
14
|
+
* @property actor - Actor instance with currentView signal (requires Viewable capability)
|
|
15
|
+
* @property components - Map of component names to Vue components
|
|
16
|
+
*/
|
|
17
|
+
export interface PlayRendererProps {
|
|
18
|
+
/** Actor instance with currentView signal (requires Viewable capability) */
|
|
19
|
+
actor: AbstractActor<AnyActorLogic> & Viewable;
|
|
20
|
+
|
|
21
|
+
/** Map of component names to Vue components */
|
|
22
|
+
components: Record<string, Component>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for PlayRenderer component
|
|
3
|
+
* Validates signal reactivity, component rendering, and error handling
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { describe, test, expect, vi } from "vitest";
|
|
7
|
+
import { mount, flushPromises } from "@vue/test-utils";
|
|
8
|
+
import { Signal } from "@xmachines/play-signals";
|
|
9
|
+
import type { AbstractActor, Viewable } from "@xmachines/play-actor";
|
|
10
|
+
import PlayRenderer from "../src/PlayRenderer.vue";
|
|
11
|
+
|
|
12
|
+
// Test components
|
|
13
|
+
const TestHome = {
|
|
14
|
+
name: "TestHome",
|
|
15
|
+
template: '<div data-testid="home">Home Component</div>',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const TestLogin = {
|
|
19
|
+
name: "TestLogin",
|
|
20
|
+
template: '<div data-testid="login">Login Component</div>',
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const TestDashboard = {
|
|
24
|
+
name: "TestDashboard",
|
|
25
|
+
props: ["userId", "send"],
|
|
26
|
+
template: '<div data-testid="dashboard">Dashboard: {{ userId }}</div>',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// Mock actor factory
|
|
30
|
+
function createMockActor(
|
|
31
|
+
initialView: { component: string; props: unknown } | null,
|
|
32
|
+
): AbstractActor<unknown> & Viewable {
|
|
33
|
+
const currentViewSignal = new Signal.State(initialView);
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
currentView: currentViewSignal,
|
|
37
|
+
send: vi.fn(),
|
|
38
|
+
start: vi.fn(),
|
|
39
|
+
stop: vi.fn(),
|
|
40
|
+
getSnapshot: vi.fn(),
|
|
41
|
+
subscribe: vi.fn(),
|
|
42
|
+
state: new Signal.State({ value: "idle", context: {} } as unknown),
|
|
43
|
+
currentRoute: new Signal.Computed(() => null),
|
|
44
|
+
} as unknown;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
describe("PlayRenderer", () => {
|
|
48
|
+
describe("initial rendering", () => {
|
|
49
|
+
test("mounts with initial view", () => {
|
|
50
|
+
const actor = createMockActor({ component: "TestHome", props: {} });
|
|
51
|
+
const components = { TestHome };
|
|
52
|
+
|
|
53
|
+
const wrapper = mount(PlayRenderer, {
|
|
54
|
+
props: { actor, components },
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
expect(wrapper.find('[data-testid="home"]').exists()).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("renders matched component", () => {
|
|
61
|
+
const actor = createMockActor({ component: "TestLogin", props: {} });
|
|
62
|
+
const components = { TestLogin };
|
|
63
|
+
|
|
64
|
+
const wrapper = mount(PlayRenderer, {
|
|
65
|
+
props: { actor, components },
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
expect(wrapper.find('[data-testid="login"]').exists()).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("passes props to rendered component", () => {
|
|
72
|
+
const actor = createMockActor({
|
|
73
|
+
component: "TestDashboard",
|
|
74
|
+
props: { userId: "user123" },
|
|
75
|
+
});
|
|
76
|
+
const components = { TestDashboard };
|
|
77
|
+
|
|
78
|
+
const wrapper = mount(PlayRenderer, {
|
|
79
|
+
props: { actor, components },
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
expect(wrapper.find('[data-testid="dashboard"]').text()).toContain("user123");
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test("passes bound send function to component", () => {
|
|
86
|
+
const sendSpy = vi.fn();
|
|
87
|
+
const actor = createMockActor({
|
|
88
|
+
component: "TestDashboard",
|
|
89
|
+
props: { userId: "user123" },
|
|
90
|
+
});
|
|
91
|
+
actor.send = sendSpy;
|
|
92
|
+
|
|
93
|
+
const TestComponent = {
|
|
94
|
+
props: ["send"],
|
|
95
|
+
template: "<button @click=\"send({ type: 'test' })\">Click</button>",
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const components = { TestComponent };
|
|
99
|
+
const wrapper = mount(PlayRenderer, {
|
|
100
|
+
props: {
|
|
101
|
+
actor: {
|
|
102
|
+
...actor,
|
|
103
|
+
currentView: new Signal.State({ component: "TestComponent", props: {} }),
|
|
104
|
+
},
|
|
105
|
+
components,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
wrapper.find("button").trigger("click");
|
|
110
|
+
expect(sendSpy).toHaveBeenCalledWith({ type: "test" });
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
describe("signal reactivity", () => {
|
|
115
|
+
test("updates when currentView signal changes", async () => {
|
|
116
|
+
const actor = createMockActor({ component: "TestHome", props: {} });
|
|
117
|
+
const components = { TestHome, TestLogin };
|
|
118
|
+
|
|
119
|
+
const wrapper = mount(PlayRenderer, {
|
|
120
|
+
props: { actor, components },
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
expect(wrapper.find('[data-testid="home"]').exists()).toBe(true);
|
|
124
|
+
|
|
125
|
+
// Change the signal value
|
|
126
|
+
actor.currentView.set({ component: "TestLogin", props: {} });
|
|
127
|
+
|
|
128
|
+
// Wait for: microtask (watcher callback) → Vue reactivity flush → DOM update
|
|
129
|
+
await flushPromises();
|
|
130
|
+
|
|
131
|
+
expect(wrapper.find('[data-testid="login"]').exists()).toBe(true);
|
|
132
|
+
expect(wrapper.find('[data-testid="home"]').exists()).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
test("re-watches signal after notification (one-shot pattern validation)", async () => {
|
|
136
|
+
const actor = createMockActor({ component: "TestHome", props: {} });
|
|
137
|
+
const components = { TestHome, TestLogin, TestDashboard };
|
|
138
|
+
|
|
139
|
+
const wrapper = mount(PlayRenderer, {
|
|
140
|
+
props: { actor, components },
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// First change
|
|
144
|
+
actor.currentView.set({ component: "TestLogin", props: {} });
|
|
145
|
+
await flushPromises();
|
|
146
|
+
expect(wrapper.find('[data-testid="login"]').exists()).toBe(true);
|
|
147
|
+
|
|
148
|
+
// Second change - validates re-watch worked
|
|
149
|
+
actor.currentView.set({ component: "TestDashboard", props: { userId: "user456" } });
|
|
150
|
+
await flushPromises();
|
|
151
|
+
expect(wrapper.find('[data-testid="dashboard"]').exists()).toBe(true);
|
|
152
|
+
expect(wrapper.find('[data-testid="login"]').exists()).toBe(false);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
describe("error handling", () => {
|
|
157
|
+
test("shows fallback when view is null", () => {
|
|
158
|
+
const actor = createMockActor(null);
|
|
159
|
+
const components = { TestHome };
|
|
160
|
+
|
|
161
|
+
const wrapper = mount(PlayRenderer, {
|
|
162
|
+
props: { actor, components },
|
|
163
|
+
slots: {
|
|
164
|
+
fallback: '<div data-testid="fallback">Loading...</div>',
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
expect(wrapper.find('[data-testid="fallback"]').exists()).toBe(true);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
test("logs error and shows message when component not found", () => {
|
|
172
|
+
const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
173
|
+
const actor = createMockActor({ component: "UnknownComponent", props: {} });
|
|
174
|
+
const components = { TestHome };
|
|
175
|
+
|
|
176
|
+
const wrapper = mount(PlayRenderer, {
|
|
177
|
+
props: { actor, components },
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(
|
|
181
|
+
expect.stringContaining('Component "UnknownComponent" not found in catalog'),
|
|
182
|
+
);
|
|
183
|
+
expect(wrapper.find(".play-renderer-error").exists()).toBe(true);
|
|
184
|
+
expect(wrapper.find(".play-renderer-error").text()).toContain("UnknownComponent");
|
|
185
|
+
|
|
186
|
+
consoleErrorSpy.mockRestore();
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test("handles null components catalog gracefully", () => {
|
|
190
|
+
const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
191
|
+
const actor = createMockActor({ component: "TestHome", props: {} });
|
|
192
|
+
|
|
193
|
+
mount(PlayRenderer, {
|
|
194
|
+
props: { actor, components: null as unknown },
|
|
195
|
+
global: {
|
|
196
|
+
config: {
|
|
197
|
+
warnHandler: () => {},
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(
|
|
203
|
+
expect.stringContaining("Components catalog is null"),
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
consoleErrorSpy.mockRestore();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
});
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "@xmachines/shared/tsconfig",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"composite": true,
|
|
5
|
+
"rootDir": "./src",
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"emitDeclarationOnly": true
|
|
8
|
+
},
|
|
9
|
+
"references": [
|
|
10
|
+
{ "path": "../play-actor" },
|
|
11
|
+
{ "path": "../play-catalog" },
|
|
12
|
+
{ "path": "../play-signals" }
|
|
13
|
+
],
|
|
14
|
+
"include": ["src/**/*"]
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/xstate/dist/declarations/src/inspection.d.ts","../../node_modules/xstate/dist/declarations/src/system.d.ts","../../node_modules/xstate/dist/declarations/src/StateMachine.d.ts","../../node_modules/xstate/dist/declarations/src/StateNode.d.ts","../../node_modules/xstate/dist/declarations/src/State.d.ts","../../node_modules/xstate/dist/declarations/src/actions/raise.d.ts","../../node_modules/xstate/dist/declarations/src/actions/send.d.ts","../../node_modules/xstate/dist/declarations/src/actors/promise.d.ts","../../node_modules/xstate/dist/declarations/src/symbolObservable.d.ts","../../node_modules/xstate/dist/declarations/src/createActor.d.ts","../../node_modules/xstate/dist/declarations/src/guards.d.ts","../../node_modules/xstate/dist/declarations/src/types.d.ts","../../node_modules/xstate/dist/declarations/src/spawn.d.ts","../../node_modules/xstate/dist/declarations/src/actions/assign.d.ts","../../node_modules/xstate/dist/declarations/src/actions/cancel.d.ts","../../node_modules/xstate/dist/declarations/src/actions/emit.d.ts","../../node_modules/xstate/dist/declarations/src/actions/spawnChild.d.ts","../../node_modules/xstate/dist/declarations/src/actions/stopChild.d.ts","../../node_modules/xstate/dist/declarations/src/actions/enqueueActions.d.ts","../../node_modules/xstate/dist/declarations/src/actions/log.d.ts","../../node_modules/xstate/dist/declarations/src/actions.d.ts","../../node_modules/xstate/dist/declarations/src/actors/callback.d.ts","../../node_modules/xstate/dist/declarations/src/actors/observable.d.ts","../../node_modules/xstate/dist/declarations/src/actors/transition.d.ts","../../node_modules/xstate/dist/declarations/src/actors/index.d.ts","../../node_modules/xstate/dist/declarations/src/assert.d.ts","../../node_modules/xstate/dist/declarations/src/createMachine.d.ts","../../node_modules/xstate/dist/declarations/src/getNextSnapshot.d.ts","../../node_modules/xstate/dist/declarations/src/setup.d.ts","../../node_modules/xstate/dist/declarations/src/SimulatedClock.d.ts","../../node_modules/xstate/dist/declarations/src/stateUtils.d.ts","../../node_modules/xstate/dist/declarations/src/toPromise.d.ts","../../node_modules/xstate/dist/declarations/src/utils.d.ts","../../node_modules/xstate/dist/declarations/src/transition.d.ts","../../node_modules/xstate/dist/declarations/src/waitFor.d.ts","../../node_modules/xstate/dist/declarations/src/index.d.ts","../../node_modules/xstate/dist/xstate.cjs.d.mts","../../node_modules/signal-polyfill/dist/graph.d.ts","../../node_modules/signal-polyfill/dist/equality.d.ts","../../node_modules/signal-polyfill/dist/signal.d.ts","../../node_modules/signal-polyfill/dist/computed.d.ts","../../node_modules/signal-polyfill/dist/wrapper.d.ts","../../node_modules/signal-polyfill/dist/index.d.ts","../play-signals/dist/types.d.ts","../play-signals/dist/index.d.ts","../play-actor/dist/abstract-actor.d.ts","../play-actor/dist/index.d.ts","../../node_modules/@vue/shared/dist/shared.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@vue/compiler-core/dist/compiler-core.d.ts","../../node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","../../node_modules/@vue/reactivity/dist/reactivity.d.ts","../../node_modules/@vue/runtime-core/dist/runtime-core.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","../../node_modules/vue/dist/vue.d.mts","./src/types.ts","./src/index.ts","./src/vue-shim.d.ts","../../node_modules/@types/aria-query/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/deep-eql/index.d.ts","../../node_modules/assertion-error/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/http-cache-semantics/index.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/@types/node/web-globals/console.d.ts","../../node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/undici-types/utility.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client-stats.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/round-robin-pool.d.ts","../../node_modules/undici-types/h2c-client.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-call-history.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/@types/node/web-globals/url.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/inspector/promises.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/path/posix.d.ts","../../node_modules/@types/node/path/win32.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/quic.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/test/reporters.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/util/types.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/sinonjs__fake-timers/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[129,155,218,226,230,233,235,236,237,250],[155,218,226,230,233,235,236,237,250],[129,130,142,143,144,155,218,226,230,233,235,236,237,250],[129,130,155,218,226,230,233,235,236,237,250],[146,147,155,218,226,230,233,235,236,237,250],[150,155,218,226,230,233,235,236,237,250],[155,215,216,218,226,230,233,235,236,237,250],[155,217,218,226,230,233,235,236,237,250],[218,226,230,233,235,236,237,250],[155,218,226,230,233,235,236,237,250,258],[155,218,219,224,226,229,230,233,235,236,237,239,250,255,267],[155,218,219,220,226,229,230,233,235,236,237,250],[155,218,221,226,230,233,235,236,237,250,268],[155,218,222,223,226,230,233,235,236,237,241,250],[155,218,223,226,230,233,235,236,237,250,255,264],[155,218,224,226,229,230,233,235,236,237,239,250],[155,217,218,225,226,230,233,235,236,237,250],[155,218,226,227,230,233,235,236,237,250],[155,218,226,228,229,230,233,235,236,237,250],[155,217,218,226,229,230,233,235,236,237,250],[155,218,226,229,230,231,233,235,236,237,250,255,267],[155,218,226,229,230,231,233,235,236,237,250,255,258],[155,205,218,226,229,230,232,233,235,236,237,239,250,255,267],[155,218,226,229,230,232,233,235,236,237,239,250,255,264,267],[155,218,226,230,232,233,234,235,236,237,250,255,264,267],[153,154,155,156,157,158,159,160,161,162,163,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274],[155,218,226,229,230,233,235,236,237,250],[155,218,226,230,233,235,237,250],[155,218,226,230,233,235,236,237,238,250,267],[155,218,226,229,230,233,235,236,237,239,250,255],[155,218,226,230,233,235,236,237,241,250],[155,218,226,230,233,235,236,237,242,250],[155,218,226,229,230,233,235,236,237,245,250],[155,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274],[155,218,226,230,233,235,236,237,247,250],[155,218,226,230,233,235,236,237,248,250],[155,218,223,226,230,233,235,236,237,239,250,258],[155,218,226,229,230,233,235,236,237,250,251],[155,218,226,230,233,235,236,237,250,252,268,271],[155,218,226,229,230,233,235,236,237,250,255,257,258],[155,218,226,230,233,235,236,237,250,256,258],[155,218,226,230,233,235,236,237,250,258,268],[155,218,226,230,233,235,236,237,250,259],[155,215,218,226,230,233,235,236,237,250,255,261,267],[155,218,226,230,233,235,236,237,250,255,260],[155,218,226,229,230,233,235,236,237,250,262,263],[155,218,226,230,233,235,236,237,250,262,263],[155,218,223,226,230,233,235,236,237,239,250,255,264],[155,218,226,230,233,235,236,237,250,265],[155,218,226,230,233,235,236,237,239,250,266],[155,218,226,230,232,233,235,236,237,248,250,267],[155,218,226,230,233,235,236,237,250,268,269],[155,218,223,226,230,233,235,236,237,250,269],[155,218,226,230,233,235,236,237,250,255,270],[155,218,226,230,233,235,236,237,238,250,271],[155,218,226,230,233,235,236,237,250,272],[155,218,221,226,230,233,235,236,237,250],[155,218,223,226,230,233,235,236,237,250],[155,218,226,230,233,235,236,237,250,268],[155,205,218,226,230,233,235,236,237,250],[155,218,226,230,233,235,236,237,250,267],[155,218,226,230,233,235,236,237,250,273],[155,218,226,230,233,235,236,237,245,250],[155,218,226,230,233,235,236,237,250,263],[155,205,218,226,229,230,231,233,235,236,237,245,250,255,258,267,270,271,273],[155,218,226,230,233,235,236,237,250,255,274],[155,218,226,230,233,235,236,237,250,278],[135,155,218,226,230,233,235,236,237,250,277],[155,218,226,229,230,232,233,234,235,236,237,239,250,255,264,267,274,275],[155,218,226,229,230,233,235,236,237,250,255,275],[128,129,130,155,218,226,230,233,235,236,237,250],[131,155,218,226,230,233,235,236,237,250],[128,155,218,226,230,233,235,236,237,250],[128,133,134,136,155,218,226,230,233,235,236,237,250],[133,134,135,136,155,218,226,230,233,235,236,237,250],[118,119,155,218,226,230,233,235,236,237,250],[122,155,218,226,230,233,235,236,237,250],[118,120,121,155,218,226,230,233,235,236,237,250],[155,170,173,176,177,218,226,230,233,235,236,237,250,267],[155,173,218,226,230,233,235,236,237,250,255,267],[155,173,177,218,226,230,233,235,236,237,250,267],[155,218,226,230,233,235,236,237,250,255],[155,167,218,226,230,233,235,236,237,250],[155,171,218,226,230,233,235,236,237,250],[155,169,170,173,218,226,230,233,235,236,237,250,267],[155,218,226,230,233,235,236,237,239,250,264],[155,218,226,230,233,235,236,237,250,275],[155,167,218,226,230,233,235,236,237,250,275],[155,169,173,218,226,230,233,235,236,237,239,250,267],[155,164,165,166,168,172,218,226,229,230,233,235,236,237,250,255,267],[155,173,182,190,218,226,230,233,235,236,237,250],[155,165,171,218,226,230,233,235,236,237,250],[155,173,199,200,218,226,230,233,235,236,237,250],[155,165,168,173,218,226,230,233,235,236,237,250,258,267,275],[155,173,218,226,230,233,235,236,237,250],[155,169,173,218,226,230,233,235,236,237,250,267],[155,164,218,226,230,233,235,236,237,250],[155,167,168,169,171,172,173,174,175,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,200,201,202,203,204,218,226,230,233,235,236,237,250],[155,173,192,195,218,226,230,233,235,236,237,250],[155,173,182,183,184,218,226,230,233,235,236,237,250],[155,171,173,183,185,218,226,230,233,235,236,237,250],[155,172,218,226,230,233,235,236,237,250],[155,165,167,173,218,226,230,233,235,236,237,250],[155,173,177,183,185,218,226,230,233,235,236,237,250],[155,177,218,226,230,233,235,236,237,250],[155,171,173,176,218,226,230,233,235,236,237,250,267],[155,165,169,173,182,218,226,230,233,235,236,237,250],[155,173,192,218,226,230,233,235,236,237,250],[155,185,218,226,230,233,235,236,237,250],[155,167,173,199,218,226,230,233,235,236,237,250,258,273,275],[132,136,155,218,226,230,233,235,236,237,250],[82,155,218,226,230,233,235,236,237,250],[83,84,92,155,218,226,230,233,235,236,237,250],[82,84,85,92,155,218,226,230,233,235,236,237,250],[83,92,155,218,226,230,233,235,236,237,250],[86,87,94,95,96,97,98,99,100,155,218,226,230,233,235,236,237,250],[92,93,155,218,226,230,233,235,236,237,250],[92,155,218,226,230,233,235,236,237,250],[86,87,91,92,94,95,96,97,98,155,218,226,230,233,235,236,237,250],[82,92,155,218,226,230,233,235,236,237,250],[88,92,102,103,104,155,218,226,230,233,235,236,237,250],[82,89,92,155,218,226,230,233,235,236,237,250],[81,82,83,84,85,90,91,92,93,101,105,106,107,108,109,110,111,112,113,114,115,155,218,226,230,233,235,236,237,250],[83,86,87,91,92,94,95,96,97,98,99,100,155,218,226,230,233,235,236,237,250],[84,85,92,155,218,226,230,233,235,236,237,250],[81,92,155,218,226,230,233,235,236,237,250],[81,82,83,84,85,86,87,88,90,91,93,94,155,218,226,230,233,235,236,237,250],[84,92,155,218,226,230,233,235,236,237,250],[116,155,218,226,230,233,235,236,237,250],[117,125,155,218,226,230,233,235,236,237,250],[126,155,218,226,230,233,235,236,237,250],[123,124,155,218,226,230,233,235,236,237,250],[138,140,155,218,226,230,233,235,236,237,250],[117,127,137,155,218,226,230,233,235,236,237,250],[137,155,218,226,230,233,235,236,237,250]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a22045e94ed099cf2d521ae47f8b0b2e50033fa0b24838c42a6a312fc7755f2","impliedFormat":1},{"version":"1723af1fd61438370ef2f9b162c21925d7d8263f02ea3786701207a2697bc570","impliedFormat":1},{"version":"f978ab920c44da04b106e19376eac3d5873680407778be96a6597feb930a7c92","impliedFormat":1},{"version":"92b81364ea40c145da7f730f660350935e49334a18faafbe7f86105763e6e486","impliedFormat":1},{"version":"672c3ab666d58c2e16ade2836c496278da896764c8f91143ad5c51fab2b9367b","impliedFormat":1},{"version":"d2617b18ac1e533346f2a3a054a2c6f31f86f909242e93c7a6b98c635e0f8792","impliedFormat":1},{"version":"bb892dcd5d3c7b31e1c251bb43384e0eac9604b32b54f27f682b78ba0fa6d257","impliedFormat":1},{"version":"9e49b5ba3cfc1de785d7c3941ea1bccb32e61b880af78748013a9bce376d9817","impliedFormat":1},{"version":"e653259e64adbe8acf9c33dc1a525ac1d1a1dd0f82580f73d81543f948485a86","impliedFormat":1},{"version":"65ec5e77d12a9fef085314729cfa5459a863e2d190184a418fb89b8f3d39a0c9","impliedFormat":1},{"version":"1c328efb6045370a8303b4d2bf3fb67e226a07e9391f9044e40f791faa545c82","impliedFormat":1},{"version":"7c2d9cbddddfa130bd953bf59a3556ef0e9494e70585feb54a60866845555ea6","impliedFormat":1},{"version":"9dc0ec853f1e803bdf9d2dcc69509f8dae488100664915ab1dd9ffbb732291ba","impliedFormat":1},{"version":"1559b4a59a19b452d5bc46c1f584d99f2775f6d016af0177a5a2150d4955676d","impliedFormat":1},{"version":"245b103ea8c3b19f25cc0b9bb8acc1330b55f0f04338b2d83e236869a6d99e71","impliedFormat":1},{"version":"a2553ad8aacc78a09e9d91d91f9bf21bb4ea98c45f44475c45ea9cc8a5a8b0d9","impliedFormat":1},{"version":"0bb0ba4030a0b3ada4eadf14ca3450653ec4a0e78ffa26ab742ac1548032b200","impliedFormat":1},{"version":"a0af6c85115a5c705af405fd8d3018cc681a9d86e2758395dd8fafd264e93e77","impliedFormat":1},{"version":"dd927c1c69750111f7b88dea99168831251b699486ed211b8f48d3d7790bdd10","impliedFormat":1},{"version":"d6e0a302299f70d42fb6068e4f9f98f95bf63e0d17f96ae0bc54c0fb61b00b92","impliedFormat":1},{"version":"98a7e602735736dee031310c9b49c16988ac523895c628eb358ab9d0c98c47ae","impliedFormat":1},{"version":"d77b19a94143dd761991f7f7f25f8dab258d3eb3e19b85048ba3d41f83d5de41","impliedFormat":1},{"version":"507057a5b3bd68b3056cfb09e9de27601a99e339907cf0fd0b03d5dd840b4c4a","impliedFormat":1},{"version":"3f246c5f9ac101ccef1e1aad6719b6dd1449461b071dea904856780cac690c94","impliedFormat":1},{"version":"24ca5a7d5faa57d04f86e622e614931bf6aeb2d50dfbb8bab1ff319630347407","impliedFormat":1},{"version":"dcca19a81187a21482680d12d92840af02cea5a06e3620d86c3e633242424c42","impliedFormat":1},{"version":"d5144eb14cb4d9292b841699fb53e9a6641b64d926170043412f1e5293bba369","impliedFormat":1},{"version":"6af618a43f82b685b70b919a00aea9ff6bc2d574c016278b2413631f8ab7ce76","impliedFormat":1},{"version":"68baace0098c248dbee92001664c7eff0dc40182d61a255ba053ea9d68c749fb","impliedFormat":1},{"version":"b58d89b47b1fa76ce57bf1179e53f9d6f5118a301943cb4dea5987d72d529ce9","impliedFormat":1},{"version":"a0982cf55aad440267fc9432f3a12e3a67c497a34cac47f38a3e5a04156b46c1","impliedFormat":1},{"version":"8549892f753971e3ec5f8bad0bd9f74d1a8521f573fd006cfd00d3c27490f444","impliedFormat":1},{"version":"1d5454555a8ee7f7660b48a9d7cf3270d260d3bc61350d79b7c5e2700b7aa20a","impliedFormat":1},{"version":"68cc279fd82ace672f68b6996223f2d6125d81ca544510a52f59f911051d4068","impliedFormat":1},{"version":"7cdbd04d7f3657409c1cab924650dfe5ca74735d45e4f746cab2c571074f580f","impliedFormat":1},{"version":"84c91746cd45d714dec0cd2d4f410810324e2152e4ed674aedad6c1e71aca5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b75d56703daaffcb31a7cdebf190856e07739a9481f01c2919f95bde99be9424","impliedFormat":99},{"version":"07be608f316f64514f5cc650b9f10053e31390743c385e64d6c7734ca48b53f5","impliedFormat":99},{"version":"39432baa20744a664f57d01b9de0af90fe70b8af955409c048e656fcfcc42efa","impliedFormat":99},{"version":"b7df6bfab8fc477f016d607ec9ff6dd71ff7b33c8bd3262f6886cb7f1fd39fa9","impliedFormat":99},{"version":"cf6598943fca6f9b06215c442627a0eacddac06547cee9f785f6c2c64e15a723","impliedFormat":99},{"version":"dc24da4a8d1af9a2ea908142e11a09c4574cb4d1135060aeda42a5f016961623","impliedFormat":99},{"version":"77537cefd19cb6912cd4d70abe9f159ded70463db9dfba43d78b96d425c31960","impliedFormat":99},{"version":"bdbddfd86263082484c4c624553f4cb2a248c404bf79e0287c384e818f93d9b8","impliedFormat":99},{"version":"fb3e0eb6865633b0d5013bee9cd4922ff3b6a84d4f7e75de7dfe69143757bd63","impliedFormat":99},{"version":"d81945250ea61e8e922e39a550313d34c2de3a62c381c6dab7049921c69c4e51","impliedFormat":99},{"version":"470b9a38f26d9c9e8ff9853e7989be4cc2185feced3c10699b06774bbc3b3f4a","impliedFormat":99},{"version":"f468b74459f1ad4473b36a36d49f2b255f3c6b5d536c81239c2b2971df089eaf","impliedFormat":1},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"524a409ad72186b7f6cb16898c349465cfa876f641d6cb6137b3123d5cfca619","impliedFormat":1},{"version":"ebe84ad8344962b7117a3b95065f47383215020eaf1b626463863b45b4d16e62","impliedFormat":1},{"version":"de5abbc02627403ac5796572520dc2b42df54f1257e7218a9ef37509d9b56972","impliedFormat":1},{"version":"bc41b74f965a6bf0a038e32753c6920aad2f2fed97cd32a105e9677070ed50e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"88ad1af02cacc61bf79683b021d326eeafc91231660a06495c5046d4649ec3a2","impliedFormat":1},{"version":"c0191592be8eb7906f99ac4b8798d80a585b94001ea1a5f50d6ce5b0d13a5c62","impliedFormat":99},{"version":"5cedbed37d6cc1c4202635c917268bf3589cb19eb53cbb79547965a2c57eb2a6","signature":"81a80200bb33420dacd2dedb90ad03413e39b4ab46ac0ebdd98bb94b74b02fd1","impliedFormat":99},{"version":"2a85ad5d08b418880be1df3bb9098f261f9653db1ef96482d3de5fd700b279cb","signature":"63fbafd986437917987e8a73cb22d3b36341e11d45c471826a4917f6a31ae7d1","impliedFormat":99},{"version":"bccda4f7050068c11d5400f09b32dc7d917ba793e9ad209eb852dcfec982de3d","impliedFormat":99},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","impliedFormat":1},{"version":"4f6ae308c5f2901f2988c817e1511520619e9025b9b12cc7cce2ab2e6ffed78a","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fad5618174d74a34ee006406d4eb37e8d07dd62eb1315dbf52f48d31a337547","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b50a819485ffe0d237bf0d131e92178d14d11e2aa873d73615a9ec578b341f5","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"1d024184fb57c58c5c91823f9d10b4915a4867b7934e89115fd0d861a9df27c8","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"12d602a8fe4c2f2ba4f7804f5eda8ba07e0c83bf5cf0cda8baffa2e9967bfb77","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"8db46b61a690f15b245cf16270db044dc047dce9f93b103a59f50262f677ea1f","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"757227c8b345c57d76f7f0e3bbad7a91ffca23f1b2547cbed9e10025816c9cb7","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"e843c4c3582948689477a98129c080d2a6919cf44b6b1eed8f992642fe141cf5","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"266bee0a41e9c3ba335583e21e9277ae03822402cf5e8e1d99f5196853613b98","affectsGlobalScope":true,"impliedFormat":1},{"version":"386606f8a297988535cb1401959041cfa7f59d54b8a9ed09738e65c98684c976","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"e236b5eba291f51bdf32c231673e6cab81b5410850e61f51a7a524dddadc0f95","impliedFormat":1},{"version":"9cc9d479fb2283d21495e1eb22dccce6cbeaa1e2d87832fe390f6b61b1ff537d","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"90a278f5fab7557e69e97056c0841adf269c42697194f0bd5c5e69152637d4b3","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"3e4e0959c67965a12a0976d58ba1ef64c49d852aaaf0e91148a64d3681ca22c9","impliedFormat":1},{"version":"1edcf2f36fc332615846bde6dcc71a8fe526065505bc5e3dcfd65a14becdf698","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"1c7573c37465af751be31717e70588b16a272a974e790427fc9558b8e9b199d1","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"ca279fadaa088b63f123c86ffb4dda5116f8dba23e6e93e63a2b48262320be38","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"cca8917838a876e2d7016c9b6af57cbf11fdf903c5fdd8e613fa31840b2957bf","impliedFormat":1},{"version":"d91ae55e4282c22b9c21bc26bd3ef637d3fe132507b10529ae68bf76f5de785b","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"bc9b17634d5e75b9040d8b414bb5bc936273e8100212816e905e39948cd9de96","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"4c5e90ddbcd177ad3f2ffc909ae217c87820f1e968f6959e4b6ba38a8cec935e","impliedFormat":1},{"version":"b70dd9a44e1ac42f030bb12e7d79117eac7cb74170d72d381a1e7913320af23a","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"7d2a0ba1297be385a89b5515b88cd31b4a1eeef5236f710166dc1b36b1741e1b","impliedFormat":1},{"version":"9cbfee0d2998dc92715f33d94e0cf9650b5e07f74cb40331dcccbbeaf4f36872","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[[138,140]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"importHelpers":false,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","removeComments":false,"rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":99,"verbatimModuleSyntax":true},"referencedMap":[[130,1],[129,2],[141,2],[145,3],[142,1],[143,4],[144,1],[148,5],[146,2],[149,2],[151,6],[152,2],[215,7],[216,7],[217,8],[155,9],[218,10],[219,11],[220,12],[153,2],[221,13],[222,14],[223,15],[224,16],[225,17],[226,18],[227,18],[228,19],[229,20],[230,21],[231,22],[156,2],[154,2],[232,23],[233,24],[234,25],[275,26],[235,27],[236,28],[237,27],[238,29],[239,30],[241,31],[242,32],[243,32],[244,32],[245,33],[246,34],[247,35],[248,36],[249,37],[250,38],[251,38],[252,39],[253,2],[254,2],[255,40],[256,41],[257,40],[258,42],[259,43],[260,44],[261,45],[262,46],[263,47],[264,48],[265,49],[266,50],[267,51],[268,52],[269,53],[270,54],[271,55],[272,56],[157,27],[158,2],[159,57],[160,58],[161,2],[162,59],[163,2],[206,60],[207,61],[208,62],[209,62],[210,63],[211,2],[212,10],[213,64],[214,61],[273,65],[274,66],[276,2],[279,67],[277,2],[278,68],[280,2],[150,2],[281,2],[282,69],[283,70],[131,71],[132,72],[133,73],[134,74],[136,75],[128,2],[147,2],[240,2],[135,2],[121,76],[119,2],[118,2],[123,77],[120,76],[122,78],[79,2],[80,2],[14,2],[13,2],[2,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[3,2],[23,2],[24,2],[4,2],[25,2],[29,2],[26,2],[27,2],[28,2],[30,2],[31,2],[32,2],[5,2],[33,2],[34,2],[35,2],[36,2],[6,2],[40,2],[37,2],[38,2],[39,2],[41,2],[7,2],[42,2],[47,2],[48,2],[43,2],[44,2],[45,2],[46,2],[8,2],[52,2],[49,2],[50,2],[51,2],[53,2],[9,2],[54,2],[55,2],[56,2],[58,2],[57,2],[59,2],[60,2],[10,2],[61,2],[62,2],[63,2],[11,2],[64,2],[65,2],[66,2],[67,2],[68,2],[1,2],[69,2],[70,2],[12,2],[74,2],[72,2],[77,2],[76,2],[71,2],[75,2],[73,2],[78,2],[182,79],[194,80],[179,81],[195,82],[204,83],[170,84],[171,85],[169,86],[203,87],[198,88],[202,89],[173,90],[191,91],[172,92],[201,93],[167,94],[168,88],[174,95],[175,2],[181,96],[178,95],[165,97],[205,98],[196,99],[185,100],[184,95],[186,101],[189,102],[183,103],[187,104],[199,87],[176,105],[177,106],[190,107],[166,82],[193,108],[192,95],[180,106],[188,109],[197,2],[164,2],[200,110],[137,111],[110,112],[85,113],[83,114],[84,115],[101,116],[94,117],[95,118],[96,118],[99,119],[100,118],[86,118],[87,118],[97,118],[98,118],[102,120],[105,121],[103,120],[88,120],[104,120],[106,118],[90,122],[107,115],[108,118],[91,118],[116,123],[81,118],[109,124],[93,118],[111,125],[89,2],[82,126],[112,118],[114,118],[92,127],[113,128],[115,118],[117,129],[126,130],[127,131],[125,132],[124,2],[139,133],[138,134],[140,135]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineConfig } from "vite";
|
|
2
|
+
import vue from "@vitejs/plugin-vue";
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
plugins: [vue()],
|
|
6
|
+
build: {
|
|
7
|
+
lib: {
|
|
8
|
+
entry: "src/index.ts",
|
|
9
|
+
formats: ["es"],
|
|
10
|
+
fileName: "index",
|
|
11
|
+
},
|
|
12
|
+
rollupOptions: {
|
|
13
|
+
// Externalize all dependencies — consumers provide them
|
|
14
|
+
external: ["vue", /^@xmachines\//],
|
|
15
|
+
output: {
|
|
16
|
+
preserveModules: true,
|
|
17
|
+
preserveModulesRoot: "src",
|
|
18
|
+
entryFileNames: "[name].js",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
sourcemap: true,
|
|
22
|
+
},
|
|
23
|
+
});
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
import vue from "@vitejs/plugin-vue";
|
|
3
|
+
import { xmAliases } from "../shared/config/vite-aliases.ts";
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [vue()],
|
|
7
|
+
resolve: { alias: xmAliases(import.meta.url) },
|
|
8
|
+
test: {
|
|
9
|
+
globals: true,
|
|
10
|
+
environment: "jsdom",
|
|
11
|
+
// Timeouts for stability (from Phase 16.13 pattern)
|
|
12
|
+
testTimeout: 30000,
|
|
13
|
+
hookTimeout: 20000,
|
|
14
|
+
teardownTimeout: 15000,
|
|
15
|
+
// Sequential execution for framework router stability
|
|
16
|
+
isolate: false,
|
|
17
|
+
fileParallelism: false,
|
|
18
|
+
},
|
|
19
|
+
});
|