@xmachines/docs 1.0.0-beta.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +135 -7
- package/api/@xmachines/play/README.md +159 -39
- package/api/@xmachines/play/classes/NonNullableError.md +189 -0
- package/api/@xmachines/play/classes/PlayError.md +251 -0
- package/api/@xmachines/play/functions/assertNonNullable.md +56 -0
- package/api/@xmachines/play/type-aliases/PlayEvent.md +6 -6
- package/api/@xmachines/play-actor/README.md +153 -160
- package/api/@xmachines/play-actor/classes/AbstractActor.md +106 -121
- package/api/@xmachines/play-actor/functions/attachRenderErrorHandler.md +40 -0
- package/api/@xmachines/play-actor/functions/toAtomState.md +33 -0
- package/api/@xmachines/play-actor/functions/typedSpec.md +54 -0
- package/api/@xmachines/play-actor/interfaces/BaseActorProviderProps.md +46 -0
- package/api/@xmachines/play-actor/interfaces/BaseViewContextValue.md +33 -0
- package/api/@xmachines/play-actor/interfaces/PlaySpec.md +28 -0
- package/api/@xmachines/play-actor/interfaces/Routable.md +6 -21
- package/api/@xmachines/play-actor/interfaces/Viewable.md +12 -6
- package/api/@xmachines/play-dom/README.md +385 -0
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +115 -0
- package/api/@xmachines/play-dom/functions/createPlayUI.md +28 -0
- package/api/@xmachines/play-dom/functions/createRenderer.md +44 -0
- package/api/@xmachines/play-dom/functions/defineRegistry.md +26 -0
- package/api/@xmachines/play-dom/functions/renderSpec.md +67 -0
- package/api/@xmachines/play-dom/interfaces/ComponentContext.md +23 -0
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +34 -0
- package/api/@xmachines/play-dom/interfaces/DefineRegistryResult.md +17 -0
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +28 -0
- package/api/@xmachines/play-dom/interfaces/EventHandle.md +15 -0
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +18 -0
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +30 -0
- package/api/@xmachines/play-dom/interfaces/RenderSpecOptions.md +26 -0
- package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +32 -0
- package/api/@xmachines/play-dom/type-aliases/ActionFn.md +46 -0
- package/api/@xmachines/play-dom/type-aliases/Actions.md +18 -0
- package/api/@xmachines/play-dom/type-aliases/BaseComponentProps.md +114 -0
- package/api/@xmachines/play-dom/type-aliases/CatalogHasActions.md +25 -0
- package/api/@xmachines/play-dom/type-aliases/ComponentFn.md +26 -0
- package/api/@xmachines/play-dom/type-aliases/ComponentRegistry.md +15 -0
- package/api/@xmachines/play-dom/type-aliases/ConfirmHandler.md +44 -0
- package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +39 -0
- package/api/@xmachines/play-dom/type-aliases/DomComponentRenderer.md +20 -0
- package/api/@xmachines/play-dom/type-aliases/DomRegistry.md +9 -0
- package/api/@xmachines/play-dom/type-aliases/DomSchema.md +9 -0
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +27 -0
- package/api/@xmachines/play-dom/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-dom/type-aliases/SetState.md +30 -0
- package/api/@xmachines/play-dom/variables/schema.md +62 -0
- package/api/@xmachines/play-dom-router/README.md +272 -0
- package/api/@xmachines/play-dom-router/functions/connectRouter.md +43 -0
- package/api/@xmachines/{play-router → play-dom-router}/functions/createBrowserHistory.md +10 -2
- package/api/@xmachines/play-dom-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-dom-router/functions/createRouter.md +54 -0
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +176 -0
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +69 -0
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +15 -0
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +129 -0
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +68 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +54 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteMap.md +121 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +104 -0
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +28 -0
- package/api/@xmachines/play-react/README.md +185 -333
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +46 -42
- package/api/@xmachines/play-react/functions/ActionProvider.md +21 -0
- package/api/@xmachines/play-react/functions/JSONUIProvider.md +21 -0
- package/api/@xmachines/play-react/functions/Renderer.md +21 -0
- package/api/@xmachines/play-react/functions/StateProvider.md +27 -0
- package/api/@xmachines/play-react/functions/ValidationProvider.md +21 -0
- package/api/@xmachines/play-react/functions/VisibilityProvider.md +21 -0
- package/api/@xmachines/play-react/functions/defineRegistry.md +49 -0
- package/api/@xmachines/play-react/functions/useActor.md +13 -0
- package/api/@xmachines/play-react/functions/useBoundProp.md +45 -0
- package/api/@xmachines/play-react/functions/usePlayView.md +32 -0
- package/api/@xmachines/play-react/functions/useSignalEffect.md +29 -20
- package/api/@xmachines/play-react/interfaces/ActionProviderProps.md +15 -0
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +27 -0
- package/api/@xmachines/play-react/interfaces/ComponentContext.md +37 -0
- package/api/@xmachines/play-react/interfaces/JSONUIProviderProps.md +22 -0
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +7 -7
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +6 -6
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +26 -0
- package/api/@xmachines/play-react/interfaces/RendererProps.md +17 -0
- package/api/@xmachines/play-react/interfaces/StateProviderProps.md +16 -0
- package/api/@xmachines/play-react/interfaces/ValidationProviderProps.md +14 -0
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +20 -0
- package/api/@xmachines/play-react/interfaces/VisibilityProviderProps.md +13 -0
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-react/type-aliases/ComponentFn.md +36 -0
- package/api/@xmachines/play-react/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-react/variables/ActorProvider.md +33 -0
- package/api/@xmachines/play-react/variables/PlayRenderer.md +6 -56
- package/api/@xmachines/play-react/variables/PlayUIProvider.md +43 -0
- package/api/@xmachines/play-react-router/README.md +130 -115
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +19 -242
- package/api/@xmachines/play-react-router/classes/RouteMap.md +48 -36
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +45 -0
- package/api/@xmachines/play-react-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +23 -12
- package/api/@xmachines/play-react-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderBaseProps.md +32 -0
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +25 -9
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +19 -9
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +30 -0
- package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +32 -0
- package/api/@xmachines/play-router/README.md +275 -352
- package/api/@xmachines/play-router/classes/RouteMap.md +149 -0
- package/api/@xmachines/play-router/classes/RouterBridgeBase.md +21 -221
- package/api/@xmachines/play-router/functions/buildPlayRouteEvent.md +32 -0
- package/api/@xmachines/play-router/functions/buildRouteTree.md +12 -2
- package/api/@xmachines/play-router/functions/createRouteMap.md +22 -36
- package/api/@xmachines/play-router/functions/createRouteMapFromTree.md +46 -0
- package/api/@xmachines/play-router/functions/detectDuplicateRoutes.md +14 -7
- package/api/@xmachines/play-router/functions/extractMachineRoutes.md +10 -46
- package/api/@xmachines/play-router/functions/extractQuery.md +22 -0
- package/api/@xmachines/play-router/functions/extractRouteParams.md +54 -0
- package/api/@xmachines/play-router/functions/findRouteById.md +2 -2
- package/api/@xmachines/play-router/functions/findRouteByPath.md +2 -2
- package/api/@xmachines/play-router/functions/getNavigableRoutes.md +2 -2
- package/api/@xmachines/play-router/functions/getRoutableRoutes.md +2 -2
- package/api/@xmachines/play-router/functions/getTransitionReachableRoutes.md +43 -0
- package/api/@xmachines/play-router/functions/isRouteReachable.md +38 -0
- package/api/@xmachines/play-router/functions/machineToGraph.md +19 -0
- package/api/@xmachines/play-router/functions/routeExists.md +2 -2
- package/api/@xmachines/play-router/functions/sanitizePathname.md +40 -0
- package/api/@xmachines/play-router/functions/validateRouteFormat.md +10 -9
- package/api/@xmachines/play-router/functions/validateStateExists.md +9 -9
- package/api/@xmachines/play-router/interfaces/BuildPlayRouteEventOptions.md +13 -0
- package/api/@xmachines/play-router/interfaces/LocationLike.md +27 -0
- package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +15 -0
- package/api/@xmachines/play-router/interfaces/MachineNodeData.md +17 -0
- package/api/@xmachines/play-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-router/interfaces/ResolvedRoutePath.md +17 -0
- package/api/@xmachines/play-router/interfaces/RoutableActor.md +64 -0
- package/api/@xmachines/play-router/interfaces/RouteInfo.md +11 -11
- package/api/@xmachines/play-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-router/interfaces/RouteMatch.md +12 -0
- package/api/@xmachines/play-router/interfaces/RouteNode.md +13 -13
- package/api/@xmachines/play-router/interfaces/RouteObject.md +5 -5
- package/api/@xmachines/play-router/interfaces/RouteTree.md +8 -7
- package/api/@xmachines/play-router/interfaces/RouteWatcherHandle.md +55 -0
- package/api/@xmachines/play-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-router/interfaces/WindowLike.md +65 -0
- package/api/@xmachines/play-router/type-aliases/MachineGraph.md +20 -0
- package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +2 -2
- package/api/@xmachines/play-signals/README.md +117 -65
- package/api/@xmachines/play-signals/functions/watchSignal.md +42 -0
- package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +7 -5
- package/api/@xmachines/play-signals/interfaces/SignalComputed.md +3 -3
- package/api/@xmachines/play-signals/interfaces/SignalOptions.md +7 -5
- package/api/@xmachines/play-signals/interfaces/SignalState.md +4 -4
- package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +5 -5
- package/api/@xmachines/play-signals/namespaces/Signal/README.md +1 -1
- package/api/@xmachines/play-signals/namespaces/Signal/classes/Computed.md +7 -7
- package/api/@xmachines/play-signals/namespaces/Signal/classes/State.md +8 -8
- package/api/@xmachines/play-signals/namespaces/Signal/interfaces/Options.md +7 -7
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/README.md +1 -1
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/classes/Watcher.md +9 -9
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/currentComputed.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSinks.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSources.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSinks.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSources.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/untrack.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/unwatched.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/watched.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isComputed.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isState.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isWatcher.md +2 -2
- package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +2 -2
- package/api/@xmachines/play-solid/README.md +196 -233
- package/api/@xmachines/play-solid/functions/ActionProvider.md +19 -0
- package/api/@xmachines/play-solid/functions/JSONUIProvider.md +21 -0
- package/api/@xmachines/play-solid/functions/Renderer.md +21 -0
- package/api/@xmachines/play-solid/functions/StateProvider.md +19 -0
- package/api/@xmachines/play-solid/functions/ValidationProvider.md +19 -0
- package/api/@xmachines/play-solid/functions/VisibilityProvider.md +20 -0
- package/api/@xmachines/play-solid/functions/defineRegistry.md +49 -0
- package/api/@xmachines/play-solid/functions/useAction.md +24 -0
- package/api/@xmachines/play-solid/functions/useActions.md +13 -0
- package/api/@xmachines/play-solid/functions/useActor.md +13 -0
- package/api/@xmachines/play-solid/functions/useBoundProp.md +45 -0
- package/api/@xmachines/play-solid/functions/useFieldValidation.md +29 -0
- package/api/@xmachines/play-solid/functions/useIsVisible.md +19 -0
- package/api/@xmachines/play-solid/functions/useOptionalValidation.md +13 -0
- package/api/@xmachines/play-solid/functions/usePlayView.md +30 -0
- package/api/@xmachines/play-solid/functions/useStateBinding.md +25 -0
- package/api/@xmachines/play-solid/functions/useStateStore.md +13 -0
- package/api/@xmachines/play-solid/functions/useStateValue.md +25 -0
- package/api/@xmachines/play-solid/functions/useVisibility.md +13 -0
- package/api/@xmachines/play-solid/interfaces/ActionProviderProps.md +12 -0
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +30 -0
- package/api/@xmachines/play-solid/interfaces/ComponentContext.md +37 -0
- package/api/@xmachines/play-solid/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-solid/interfaces/JSONUIProviderProps.md +22 -0
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +26 -0
- package/api/@xmachines/play-solid/interfaces/RendererProps.md +17 -0
- package/api/@xmachines/play-solid/interfaces/StateProviderProps.md +13 -0
- package/api/@xmachines/play-solid/interfaces/ValidationProviderProps.md +11 -0
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +21 -0
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-solid/type-aliases/ComponentFn.md +36 -0
- package/api/@xmachines/play-solid/type-aliases/ComponentRegistry.md +11 -0
- package/api/@xmachines/play-solid/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-solid/type-aliases/SetState.md +21 -0
- package/api/@xmachines/play-solid/type-aliases/VisibilityProviderProps.md +9 -0
- package/api/@xmachines/play-solid/variables/ActorContext.md +13 -0
- package/api/@xmachines/play-solid/variables/ActorProvider.md +27 -0
- package/api/@xmachines/play-solid/variables/PlayRenderer.md +6 -62
- package/api/@xmachines/play-solid/variables/PlayUIProvider.md +26 -0
- package/api/@xmachines/play-solid-router/README.md +151 -559
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +31 -32
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +27 -242
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +44 -0
- package/api/@xmachines/play-solid-router/functions/createRouteMap.md +18 -11
- package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +99 -114
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderBaseProps.md +30 -0
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +25 -9
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +20 -7
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +34 -0
- package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +8 -4
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +22 -19
- package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +52 -0
- package/api/@xmachines/play-svelte/README.md +270 -0
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +31 -0
- package/api/@xmachines/play-svelte/functions/getActorContext.md +21 -0
- package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +19 -0
- package/api/@xmachines/play-svelte/functions/setActorContext.md +19 -0
- package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +44 -0
- package/api/@xmachines/play-svelte/interfaces/BaseComponentProps.md +29 -0
- package/api/@xmachines/play-svelte/interfaces/ComponentContext.md +29 -0
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +24 -0
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +43 -0
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +24 -0
- package/api/@xmachines/play-svelte/type-aliases/ActionFn.md +30 -0
- package/api/@xmachines/play-svelte/type-aliases/Actions.md +17 -0
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-svelte/type-aliases/ComponentFn.md +18 -0
- package/api/@xmachines/play-svelte/type-aliases/JSONUIProviderProps.md +7 -0
- package/api/@xmachines/play-svelte/type-aliases/PlayRenderer.md +9 -0
- package/api/@xmachines/play-svelte/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-svelte/type-aliases/SetState.md +21 -0
- package/api/@xmachines/play-svelte/variables/PlayRenderer.md +9 -0
- package/api/@xmachines/play-svelte-spa-router/README.md +197 -0
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +149 -0
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +32 -0
- package/api/@xmachines/play-svelte-spa-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +17 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +129 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +104 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +65 -0
- package/api/@xmachines/play-svelte-spa-router/type-aliases/RoutableActor.md +9 -0
- package/api/@xmachines/play-sveltekit-router/README.md +212 -0
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +149 -0
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +32 -0
- package/api/@xmachines/play-sveltekit-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +13 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +27 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +129 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +104 -0
- package/api/@xmachines/play-sveltekit-router/type-aliases/RoutableActor.md +9 -0
- package/api/@xmachines/play-tanstack-react-router/README.md +155 -125
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +48 -36
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +31 -252
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +45 -0
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +22 -36
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +23 -12
- package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +28 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderBaseProps.md +32 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +25 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +19 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +30 -0
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +2 -2
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +40 -18
- package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +34 -0
- package/api/@xmachines/play-tanstack-router/README.md +61 -0
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +131 -0
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +57 -0
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +100 -0
- package/api/@xmachines/play-tanstack-solid-router/README.md +216 -175
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +31 -32
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +121 -0
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +44 -0
- package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +18 -11
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderBaseProps.md +31 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +23 -9
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +14 -10
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +30 -0
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/RoutableActor.md +8 -4
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +40 -18
- package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +33 -0
- package/api/@xmachines/play-vue/README.md +190 -210
- package/api/@xmachines/play-vue/functions/defineRegistry.md +32 -0
- package/api/@xmachines/play-vue/functions/getPlayViewContext.md +28 -0
- package/api/@xmachines/play-vue/functions/useActor.md +13 -0
- package/api/@xmachines/play-vue/functions/useBoundProp.md +45 -0
- package/api/@xmachines/play-vue/interfaces/ActionProviderProps.md +12 -0
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +25 -0
- package/api/@xmachines/play-vue/interfaces/ComponentContext.md +37 -0
- package/api/@xmachines/play-vue/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-vue/interfaces/JSONUIProviderProps.md +21 -0
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +24 -0
- package/api/@xmachines/play-vue/interfaces/RendererProps.md +17 -0
- package/api/@xmachines/play-vue/interfaces/StateProviderProps.md +15 -0
- package/api/@xmachines/play-vue/interfaces/ValidationProviderProps.md +11 -0
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +21 -0
- package/api/@xmachines/play-vue/interfaces/VisibilityProviderProps.md +5 -0
- package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +16 -0
- package/api/@xmachines/play-vue/type-aliases/ComponentFn.md +35 -0
- package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +15 -0
- package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +22 -0
- package/api/@xmachines/play-vue/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-vue/variables/ActionProvider.md +64 -0
- package/api/@xmachines/play-vue/variables/JSONUIProvider.md +105 -0
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +2 -2
- package/api/@xmachines/play-vue/variables/Renderer.md +88 -0
- package/api/@xmachines/play-vue/variables/StateProvider.md +79 -0
- package/api/@xmachines/play-vue/variables/ValidationProvider.md +55 -0
- package/api/@xmachines/play-vue/variables/VisibilityProvider.md +40 -0
- package/api/@xmachines/play-vue-router/README.md +173 -486
- package/api/@xmachines/play-vue-router/classes/RouteMap.md +56 -116
- package/api/@xmachines/play-vue-router/classes/VueRouterBridge.md +23 -271
- package/api/@xmachines/play-vue-router/functions/createRouteMap.md +26 -6
- package/api/@xmachines/play-vue-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-vue-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-vue-router/interfaces/RouteMapping.md +20 -8
- package/api/@xmachines/play-vue-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +8 -4
- package/api/@xmachines/play-vue-router/variables/PlayRouterProvider.md +12 -6
- package/api/@xmachines/play-xstate/README.md +203 -354
- package/api/@xmachines/play-xstate/classes/PlayerActor.md +195 -201
- package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +24 -20
- package/api/@xmachines/play-xstate/functions/composeGuards.md +8 -3
- package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +8 -3
- package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +43 -0
- package/api/@xmachines/play-xstate/functions/definePlayer.md +14 -63
- package/api/@xmachines/play-xstate/functions/deriveRoute.md +3 -3
- package/api/@xmachines/play-xstate/functions/eventMatches.md +8 -3
- package/api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md +3 -3
- package/api/@xmachines/play-xstate/functions/hasContext.md +8 -5
- package/api/@xmachines/play-xstate/functions/isAbsoluteRoute.md +2 -2
- package/api/@xmachines/play-xstate/functions/negateGuard.md +8 -3
- package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +10 -14
- package/api/@xmachines/play-xstate/interfaces/PlayerFactoryResumeOptions.md +22 -0
- package/api/@xmachines/play-xstate/interfaces/PlayerOptions.md +14 -16
- package/api/@xmachines/play-xstate/interfaces/RouteContext.md +15 -13
- package/api/@xmachines/play-xstate/interfaces/RouteObject.md +17 -0
- package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +8 -3
- package/api/@xmachines/play-xstate/type-aliases/Guard.md +8 -6
- package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +9 -7
- package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +15 -18
- package/api/@xmachines/play-xstate/type-aliases/RouteMachineConfig.md +15 -5
- package/api/@xmachines/play-xstate/type-aliases/RouteMetadata.md +9 -0
- package/api/@xmachines/play-xstate/type-aliases/RouteStateNode.md +22 -6
- package/api/@xmachines/shared/README.md +95 -295
- package/api/@xmachines/shared/vite-aliases/README.md +11 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +38 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +27 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +35 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +42 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +33 -0
- package/api/@xmachines/shared/vitest/README.md +12 -0
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +42 -0
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +34 -0
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +16 -0
- package/api/README.md +6 -7
- package/api/llms.txt +72 -23
- package/contributing/README.md +10 -0
- package/contributing/architecture.md +601 -0
- package/contributing/configuration.md +368 -0
- package/contributing/deployment.md +333 -0
- package/contributing/development.md +503 -0
- package/contributing/testing.md +461 -0
- package/examples/@xmachines/play-dom-demo/README.md +181 -0
- package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +24 -0
- package/examples/@xmachines/play-dom-demo/functions/initShell.md +25 -0
- package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-dom-demo/variables/About.md +12 -0
- package/examples/@xmachines/play-dom-demo/variables/Contact.md +12 -0
- package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Home.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Login.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +16 -0
- package/examples/@xmachines/play-dom-demo/variables/Navigation.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Overview.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Profile.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Settings.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Stats.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-dom-router-demo/README.md +145 -0
- package/examples/@xmachines/play-react-demo/README.md +187 -0
- package/examples/@xmachines/play-react-demo/functions/App.md +13 -0
- package/examples/@xmachines/play-react-demo/functions/DebugPanel.md +20 -0
- package/examples/@xmachines/play-react-demo/functions/HeaderNav.md +20 -0
- package/examples/@xmachines/play-react-demo/functions/Shell.md +22 -0
- package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-react-demo/variables/About.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Contact.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Dashboard.md +15 -0
- package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +16 -0
- package/examples/@xmachines/play-react-demo/variables/Home.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Login.md +16 -0
- package/examples/@xmachines/play-react-demo/variables/NavBar.md +16 -0
- package/examples/@xmachines/play-react-demo/variables/NavBarView.md +15 -0
- package/examples/@xmachines/play-react-demo/variables/Navigation.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Overview.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Profile.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Settings.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Shell.md +19 -0
- package/examples/@xmachines/play-react-demo/variables/Stats.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-react-router-demo/README.md +151 -0
- package/examples/@xmachines/play-solid-demo/README.md +187 -0
- package/examples/@xmachines/play-solid-demo/functions/App.md +13 -0
- package/examples/@xmachines/play-solid-demo/functions/DebugPanel.md +20 -0
- package/examples/@xmachines/play-solid-demo/functions/HeaderNav.md +20 -0
- package/examples/@xmachines/play-solid-demo/functions/Shell.md +22 -0
- package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/About.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Contact.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +17 -0
- package/examples/@xmachines/play-solid-demo/variables/Home.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Login.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/NavBar.md +11 -0
- package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +15 -0
- package/examples/@xmachines/play-solid-demo/variables/Navigation.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Overview.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Profile.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Settings.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Shell.md +18 -0
- package/examples/@xmachines/play-solid-demo/variables/Stats.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-solid-router-demo/README.md +137 -0
- package/examples/@xmachines/play-svelte-demo/README.md +143 -0
- package/examples/@xmachines/play-svelte-demo/type-aliases/App.md +9 -0
- package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-svelte-demo/variables/App.md +9 -0
- package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-svelte-spa-router-demo/README.md +129 -0
- package/examples/@xmachines/play-sveltekit-router-demo/README.md +133 -0
- package/examples/@xmachines/play-tanstack-react-router-demo/README.md +156 -0
- package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +139 -0
- package/examples/@xmachines/play-vue-demo/README.md +183 -0
- package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-vue-demo/variables/App.md +9 -0
- package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-vue-router-demo/README.md +139 -0
- package/examples/README.md +78 -30
- package/examples/basic-state-machine.md +73 -31
- package/examples/form-validation.md +259 -118
- package/examples/multi-router-integration.md +312 -194
- package/examples/routing-patterns.md +228 -189
- package/examples/traffic-light.md +112 -65
- package/guides/README.md +7 -21
- package/guides/actor-model.md +180 -0
- package/guides/getting-started.md +627 -137
- package/guides/signals.md +166 -0
- package/guides/state-machines.md +284 -0
- package/package.json +21 -7
- package/rfc/broker.md +100 -0
- package/rfc/browser.md +44 -0
- package/rfc/cli.md +118 -0
- package/rfc/git.md +61 -0
- package/rfc/mcp.md +43 -0
- package/rfc/node.md +36 -0
- package/rfc/play.md +472 -0
- package/rfc/rest.md +102 -0
- package/rfc/run.md +159 -0
- package/rfc/streams.md +168 -0
- package/api/@xmachines/play-actor/interfaces/ViewMetadata.md +0 -17
- package/api/@xmachines/play-catalog/README.md +0 -331
- package/api/@xmachines/play-catalog/functions/defineCatalog.md +0 -98
- package/api/@xmachines/play-catalog/functions/defineComponents.md +0 -134
- package/api/@xmachines/play-catalog/type-aliases/Catalog.md +0 -48
- package/api/@xmachines/play-catalog/type-aliases/ComponentsFor.md +0 -20
- package/api/@xmachines/play-catalog/type-aliases/InferComponentProps.md +0 -65
- package/api/@xmachines/play-catalog/type-aliases/NoExtraKeys.md +0 -17
- package/api/@xmachines/play-react/interfaces/PlayRendererProps.md +0 -15
- package/api/@xmachines/play-react-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-react-router-demo/README.md +0 -137
- package/api/@xmachines/play-router/classes/BaseRouteMap.md +0 -142
- package/api/@xmachines/play-router/functions/connectRouter.md +0 -67
- package/api/@xmachines/play-router/functions/crawlMachine.md +0 -92
- package/api/@xmachines/play-router/functions/createRouter.md +0 -76
- package/api/@xmachines/play-router/functions/extractRoute.md +0 -45
- package/api/@xmachines/play-router/interfaces/BaseRouteMapping.md +0 -27
- package/api/@xmachines/play-router/interfaces/BrowserHistory.md +0 -172
- package/api/@xmachines/play-router/interfaces/BrowserWindow.md +0 -69
- package/api/@xmachines/play-router/interfaces/ConnectRouterOptions.md +0 -13
- package/api/@xmachines/play-router/interfaces/RouteMap.md +0 -56
- package/api/@xmachines/play-router/interfaces/StateVisit.md +0 -15
- package/api/@xmachines/play-router/interfaces/VanillaRouter.md +0 -28
- package/api/@xmachines/play-router-demo/README.md +0 -137
- package/api/@xmachines/play-solid/interfaces/PlayRendererProps.md +0 -15
- package/api/@xmachines/play-solid-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-solid-router-demo/README.md +0 -127
- package/api/@xmachines/play-tanstack-react-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-tanstack-react-router/functions/extractParams.md +0 -38
- package/api/@xmachines/play-tanstack-react-router/functions/extractQueryParams.md +0 -33
- package/api/@xmachines/play-tanstack-react-router/variables/extractMachineRoutes.md +0 -64
- package/api/@xmachines/play-tanstack-react-router-demo/README.md +0 -126
- package/api/@xmachines/play-tanstack-solid-router/classes/SolidRouterBridge.md +0 -343
- package/api/@xmachines/play-tanstack-solid-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-tanstack-solid-router-demo/README.md +0 -126
- package/api/@xmachines/play-vue/interfaces/PlayRendererProps.md +0 -14
- package/api/@xmachines/play-vue-router/classes/VueBaseRouteMap.md +0 -201
- package/api/@xmachines/play-vue-router-demo/README.md +0 -133
- package/api/@xmachines/play-xstate/functions/mergeViewProps.md +0 -26
- package/api/@xmachines/play-xstate/functions/stateMatches.md +0 -25
- package/api/@xmachines/play-xstate/functions/validateComponentBinding.md +0 -39
- package/api/@xmachines/play-xstate/functions/validateViewProps.md +0 -80
- package/api/@xmachines/play-xstate/interfaces/CatalogEntry.md +0 -16
- package/api/@xmachines/play-xstate/type-aliases/Catalog.md +0 -21
- package/api/@xmachines/play-xstate/type-aliases/ValidationResult.md +0 -17
- package/api/@xmachines/play-xstate/type-aliases/ViewMergeContext.md +0 -35
- package/api/@xmachines/shared/functions/defineXmVitestConfig.md +0 -29
- package/api/@xmachines/shared/functions/xmAliases.md +0 -24
- package/guides/installation.md +0 -323
|
@@ -1,309 +1,95 @@
|
|
|
1
|
-
[
|
|
1
|
+
[API](../../README.md) / @xmachines/play-vue-router
|
|
2
2
|
|
|
3
3
|
# @xmachines/play-vue-router
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Vue Router 4.x adapter for XMachines Universal Player Architecture. Bidirectional sync between Vue Router and XMachines state machines using Vue's reactive primitives.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
[](https://www.npmjs.com/package/@xmachines/play-vue-router)
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
`@xmachines/play-vue-router` enables Vue.js applications to use XMachines state machines as the source of truth for routing logic. Your state machine controls navigation through Vue Router's reactive primitives.
|
|
12
|
-
|
|
13
|
-
Per [RFC Play v1](https://gitlab.com/xmachin-es/rfc/-/blob/main/src/play-v1.md), this package implements:
|
|
14
|
-
|
|
15
|
-
- **Actor Authority (INV-01):** State machine validates navigation, router reflects decisions
|
|
16
|
-
- **Passive Infrastructure (INV-04):** Router observes `actor.currentRoute` signal
|
|
17
|
-
- **Signal-Only Reactivity (INV-05):** Watcher synchronizes URL with actor state
|
|
18
|
-
|
|
19
|
-
**Key Benefits:**
|
|
20
|
-
|
|
21
|
-
- **Logic-driven navigation:** Business logic in state machines, not components
|
|
22
|
-
- **Protected routes:** Guards live in state machine, not router config
|
|
23
|
-
- **Bidirectional sync:** Actor ↔ Vue Router with circular update prevention
|
|
24
|
-
- **Type-safe parameters:** Route params flow through state machine context
|
|
25
|
-
- **Composition API:** Integrates with `useRouter`, `useRoute`, `onUnmounted`
|
|
26
|
-
|
|
27
|
-
**Framework Compatibility:**
|
|
28
|
-
|
|
29
|
-
- Vue 3.x with Composition API
|
|
30
|
-
- Vue Router 4.x (`^4.0.0`)
|
|
31
|
-
- Named routes pattern (recommended by Vue Router docs)
|
|
10
|
+
Part of the [xmachines-js monorepo](../../README.md).
|
|
32
11
|
|
|
33
12
|
## Installation
|
|
34
13
|
|
|
35
14
|
```bash
|
|
36
|
-
|
|
15
|
+
pnpm add @xmachines/play-vue-router
|
|
37
16
|
```
|
|
38
17
|
|
|
39
18
|
**Peer dependencies:**
|
|
40
19
|
|
|
41
|
-
- `vue-router` ^4.0.0 || ^5.0.0 — Vue Router library
|
|
42
20
|
- `vue` ^3.5.0 — Vue runtime
|
|
43
|
-
- `@
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
|
|
21
|
+
- `@vue/reactivity` ^3.5.0 — Vue reactivity primitives
|
|
22
|
+
- `vue-router` ^4.0.0 || ^5.0.0 — Vue Router library
|
|
23
|
+
- `xstate` ^5.31.0 — XState v5 state machine runtime
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
47
26
|
|
|
48
|
-
|
|
27
|
+
### VueRouterBridge — low-level adapter
|
|
28
|
+
|
|
29
|
+
`VueRouterBridge` wires Vue Router's `currentRoute` ref to an XMachines actor's `currentRoute` signal. Both directions are active: the actor drives the URL, and the URL drives the actor.
|
|
49
30
|
|
|
50
31
|
```typescript
|
|
51
|
-
import { createApp } from "vue";
|
|
52
32
|
import { createRouter, createWebHistory } from "vue-router";
|
|
53
|
-
import { VueRouterBridge,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
import Home from "./views/Home.vue";
|
|
57
|
-
import Profile from "./views/Profile.vue";
|
|
58
|
-
|
|
59
|
-
// 1. Extract routable states from machine (single source of truth)
|
|
60
|
-
const routeTree = extractMachineRoutes(authMachine);
|
|
61
|
-
const routableRoutes = getRoutableRoutes(routeTree);
|
|
62
|
-
const routeComponents = {
|
|
63
|
-
home: Home,
|
|
64
|
-
profile: Profile,
|
|
65
|
-
} as const;
|
|
66
|
-
|
|
67
|
-
// 2. Define Vue Router routes from extracted machine routes
|
|
33
|
+
import { VueRouterBridge, RouteMap } from "@xmachines/play-vue-router";
|
|
34
|
+
|
|
35
|
+
// 1. Define routes
|
|
68
36
|
const router = createRouter({
|
|
69
37
|
history: createWebHistory(),
|
|
70
|
-
routes:
|
|
71
|
-
path:
|
|
72
|
-
name:
|
|
73
|
-
|
|
74
|
-
|
|
38
|
+
routes: [
|
|
39
|
+
{ path: "/", name: "home", component: HomePage },
|
|
40
|
+
{ path: "/profile/:userId", name: "profile", component: ProfilePage },
|
|
41
|
+
{ path: "/settings/:section?", name: "settings", component: SettingsPage },
|
|
42
|
+
],
|
|
75
43
|
});
|
|
76
44
|
|
|
77
|
-
//
|
|
78
|
-
const routeMap =
|
|
45
|
+
// 2. Create a bidirectional state ID ↔ path mapping
|
|
46
|
+
const routeMap = new RouteMap([
|
|
47
|
+
{ stateId: "home", path: "/" },
|
|
48
|
+
{ stateId: "profile", path: "/profile/:userId" },
|
|
49
|
+
{ stateId: "settings", path: "/settings/:section?" },
|
|
50
|
+
]);
|
|
79
51
|
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
machine: authMachine,
|
|
83
|
-
catalog: componentCatalog,
|
|
84
|
-
});
|
|
85
|
-
const actor = createPlayer();
|
|
86
|
-
actor.start();
|
|
87
|
-
|
|
88
|
-
// 5. Create bridge to sync actor and router
|
|
52
|
+
// 3. Start the bridge after the router is ready
|
|
53
|
+
await router.isReady();
|
|
89
54
|
const bridge = new VueRouterBridge(router, actor, routeMap);
|
|
90
|
-
|
|
91
|
-
// 6. Connect bridge (required)
|
|
92
55
|
bridge.connect();
|
|
93
56
|
|
|
94
|
-
//
|
|
95
|
-
|
|
96
|
-
app.use(router);
|
|
97
|
-
app.mount("#app");
|
|
98
|
-
|
|
99
|
-
// 8. Later, when tearing down your app/integration:
|
|
100
|
-
// bridge.disconnect();
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## API Reference
|
|
104
|
-
|
|
105
|
-
### `VueRouterBridge`
|
|
106
|
-
|
|
107
|
-
Router adapter implementing the `RouterBridge` protocol for Vue Router 4.x.
|
|
108
|
-
|
|
109
|
-
**Type Signature:**
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
class VueRouterBridge {
|
|
113
|
-
constructor(router: Router, actor: AbstractActor<any>, routeMap: RouteMap);
|
|
114
|
-
connect(): void;
|
|
115
|
-
disconnect(): void;
|
|
116
|
-
dispose(): void;
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
**Constructor Parameters:**
|
|
121
|
-
|
|
122
|
-
- `router` - Vue Router instance from `createRouter()`
|
|
123
|
-
- `actor` - XMachines actor instance (from `definePlayer().actor`)
|
|
124
|
-
- `routeMap` - Bidirectional state ID ↔ route name mapping
|
|
125
|
-
|
|
126
|
-
**Methods:**
|
|
127
|
-
|
|
128
|
-
- `connect()` - Start bidirectional synchronization.
|
|
129
|
-
- `disconnect()` - Stop synchronization and unhook listeners.
|
|
130
|
-
- `dispose()` - Alias of `disconnect()` for ergonomic teardown.
|
|
131
|
-
|
|
132
|
-
**Internal Behavior:**
|
|
133
|
-
|
|
134
|
-
- Watches `actor.currentRoute` signal via `Signal.subtle.Watcher`
|
|
135
|
-
- Updates Vue Router via `router.push({ name, params })` when actor state changes
|
|
136
|
-
- Listens to router navigation via `router.afterEach()` hook
|
|
137
|
-
- Sends `play.route` events to actor when user navigates
|
|
138
|
-
- Prevents circular updates with multi-layer guards
|
|
139
|
-
|
|
140
|
-
### `RouteMap`
|
|
141
|
-
|
|
142
|
-
Bidirectional mapping between XMachines state IDs and Vue Router route names.
|
|
143
|
-
|
|
144
|
-
**Type Signature:**
|
|
145
|
-
|
|
146
|
-
```typescript
|
|
147
|
-
interface RouteMapping {
|
|
148
|
-
stateId: string;
|
|
149
|
-
routeName: string;
|
|
150
|
-
pattern?: string;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
class RouteMap extends VueBaseRouteMap {
|
|
154
|
-
// Inherits all VueBaseRouteMap methods — no additional API
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**Constructor Parameters:**
|
|
159
|
-
|
|
160
|
-
- `mappings` - Array of mapping objects with:
|
|
161
|
-
- `stateId` - State machine state ID (e.g., `'#profile'`)
|
|
162
|
-
- `routeName` - Vue Router route name (e.g., `'profile'`)
|
|
163
|
-
- `pattern` - Optional path pattern for URL resolution (e.g., `'/profile/:userId'`)
|
|
164
|
-
|
|
165
|
-
**Methods (inherited from `VueBaseRouteMap`):**
|
|
166
|
-
|
|
167
|
-
- `getRouteName(stateId)` — Find route name from state ID
|
|
168
|
-
- `getStateId(routeName)` — Find state ID from route name
|
|
169
|
-
- `getPattern(stateId)` — Get URL pattern for state (optional metadata)
|
|
170
|
-
- `getStateIdByPath(path)` — Resolve a URL path to a state ID (from `BaseRouteMap`)
|
|
171
|
-
- `getPathByStateId(stateId)` — Get the URL path pattern for a state ID (from `BaseRouteMap`)
|
|
172
|
-
|
|
173
|
-
### `VueBaseRouteMap`
|
|
174
|
-
|
|
175
|
-
Intermediate base class for Vue Router adapters. Extends `BaseRouteMap` (bucket-indexed O(k) pattern matching + QuickLRU cache) and adds Vue-specific named-route lookup.
|
|
176
|
-
|
|
177
|
-
Exported for consumers who need to extend or test the Vue routing layer directly. Most consumers use `RouteMap` instead.
|
|
178
|
-
|
|
179
|
-
```typescript
|
|
180
|
-
class VueBaseRouteMap extends BaseRouteMap {
|
|
181
|
-
constructor(mappings: RouteMapping[]);
|
|
182
|
-
getRouteName(stateId: string): string | undefined;
|
|
183
|
-
getStateId(routeName: string): string | undefined;
|
|
184
|
-
getPattern(stateId: string): string | undefined;
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
## Examples
|
|
189
|
-
|
|
190
|
-
### Basic Usage: Simple 2-3 Route Setup
|
|
191
|
-
|
|
192
|
-
```typescript
|
|
193
|
-
// State machine with 3 states
|
|
194
|
-
import { defineCatalog } from "@xmachines/play-catalog";
|
|
195
|
-
|
|
196
|
-
const appMachine = setup({
|
|
197
|
-
types: {
|
|
198
|
-
events: {} as PlayRouteEvent,
|
|
199
|
-
},
|
|
200
|
-
}).createMachine({
|
|
201
|
-
id: "app",
|
|
202
|
-
initial: "home",
|
|
203
|
-
states: {
|
|
204
|
-
home: {
|
|
205
|
-
meta: { route: "/", view: { component: "Home" } },
|
|
206
|
-
},
|
|
207
|
-
about: {
|
|
208
|
-
meta: { route: "/about", view: { component: "About" } },
|
|
209
|
-
},
|
|
210
|
-
contact: {
|
|
211
|
-
meta: { route: "/contact", view: { component: "Contact" } },
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
const componentCatalog = defineCatalog({
|
|
217
|
-
Home,
|
|
218
|
-
About,
|
|
219
|
-
Contact,
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
const player = definePlayer({ machine: appMachine, catalog: componentCatalog });
|
|
223
|
-
|
|
224
|
-
// Vue Router configuration
|
|
225
|
-
const routeTree = extractMachineRoutes(appMachine);
|
|
226
|
-
const routableRoutes = getRoutableRoutes(routeTree);
|
|
227
|
-
const routeComponents = {
|
|
228
|
-
home: Home,
|
|
229
|
-
about: About,
|
|
230
|
-
contact: Contact,
|
|
231
|
-
} as const;
|
|
232
|
-
|
|
233
|
-
const router = createRouter({
|
|
234
|
-
history: createWebHistory(),
|
|
235
|
-
routes: routableRoutes.map((route) => ({
|
|
236
|
-
path: route.fullPath,
|
|
237
|
-
name: route.stateId.replace(/^#/, ""),
|
|
238
|
-
component: routeComponents[route.stateId.replace(/^#/, "") as keyof typeof routeComponents],
|
|
239
|
-
})),
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
// Route mapping computed from machine routes
|
|
243
|
-
const routeMap = createRouteMap(appMachine);
|
|
57
|
+
// 4. Dispose when tearing down (e.g. onUnmounted)
|
|
58
|
+
bridge.dispose();
|
|
244
59
|
```
|
|
245
60
|
|
|
246
|
-
###
|
|
61
|
+
### PlayRouterProvider — Vue component wrapper
|
|
247
62
|
|
|
248
|
-
|
|
249
|
-
// State machine with parameter routes
|
|
250
|
-
import { formatPlayRouteTransitions } from "@xmachines/play-xstate";
|
|
251
|
-
import { defineCatalog } from "@xmachines/play-catalog";
|
|
252
|
-
|
|
253
|
-
const machineConfig = {
|
|
254
|
-
id: "app",
|
|
255
|
-
context: {},
|
|
256
|
-
states: {
|
|
257
|
-
profile: {
|
|
258
|
-
meta: {
|
|
259
|
-
route: "/profile/:userId",
|
|
260
|
-
view: { component: "Profile" },
|
|
261
|
-
},
|
|
262
|
-
},
|
|
263
|
-
settings: {
|
|
264
|
-
meta: {
|
|
265
|
-
route: "/settings/:section?",
|
|
266
|
-
view: { component: "Settings" },
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
const appMachine = setup({
|
|
273
|
-
types: {
|
|
274
|
-
context: {} as { userId?: string; section?: string },
|
|
275
|
-
events: {} as PlayRouteEvent,
|
|
276
|
-
},
|
|
277
|
-
}).createMachine(formatPlayRouteTransitions(machineConfig));
|
|
278
|
-
|
|
279
|
-
const componentCatalog = defineCatalog({
|
|
280
|
-
Profile,
|
|
281
|
-
Settings,
|
|
282
|
-
});
|
|
63
|
+
`PlayRouterProvider` is a convenience component that manages the bridge lifecycle automatically — it calls `bridge.connect()` after `router.isReady()` on mount and `bridge.disconnect()` on unmount.
|
|
283
64
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
const routeComponents = {
|
|
290
|
-
profile: Profile,
|
|
291
|
-
settings: Settings,
|
|
292
|
-
} as const;
|
|
65
|
+
```vue
|
|
66
|
+
<script setup lang="ts">
|
|
67
|
+
import { markRaw } from "vue";
|
|
68
|
+
import { useRouter } from "vue-router";
|
|
69
|
+
import { PlayRouterProvider, RouteMap } from "@xmachines/play-vue-router";
|
|
293
70
|
|
|
294
|
-
const router =
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
71
|
+
const router = useRouter();
|
|
72
|
+
const routeMap = new RouteMap([
|
|
73
|
+
{ stateId: "home", path: "/" },
|
|
74
|
+
{ stateId: "profile", path: "/profile/:userId" },
|
|
75
|
+
]);
|
|
76
|
+
|
|
77
|
+
// markRaw prevents Vue from wrapping the actor in a reactive proxy,
|
|
78
|
+
// which would break TC39 Signal receivers.
|
|
79
|
+
const actor = markRaw(createActor());
|
|
80
|
+
</script>
|
|
301
81
|
|
|
302
|
-
|
|
303
|
-
|
|
82
|
+
<template>
|
|
83
|
+
<PlayRouterProvider
|
|
84
|
+
:actor="actor"
|
|
85
|
+
:router="router"
|
|
86
|
+
:routeMap="routeMap"
|
|
87
|
+
:renderer="(actor, router) => h(AppShell, { actor, router })"
|
|
88
|
+
/>
|
|
89
|
+
</template>
|
|
304
90
|
```
|
|
305
91
|
|
|
306
|
-
|
|
92
|
+
### Sending route events from components
|
|
307
93
|
|
|
308
94
|
```vue
|
|
309
95
|
<script setup>
|
|
@@ -321,279 +107,174 @@ function viewProfile(userId) {
|
|
|
321
107
|
</template>
|
|
322
108
|
```
|
|
323
109
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
```typescript
|
|
327
|
-
// State machine with query param handling
|
|
328
|
-
import { formatPlayRouteTransitions } from "@xmachines/play-xstate";
|
|
329
|
-
import { defineCatalog } from "@xmachines/play-catalog";
|
|
330
|
-
|
|
331
|
-
const machineConfig = {
|
|
332
|
-
context: { query: "", filters: {} },
|
|
333
|
-
states: {
|
|
334
|
-
search: {
|
|
335
|
-
meta: {
|
|
336
|
-
route: "/search",
|
|
337
|
-
view: { component: "Search" },
|
|
338
|
-
},
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
|
-
};
|
|
342
|
-
|
|
343
|
-
const searchMachine = setup({
|
|
344
|
-
types: {
|
|
345
|
-
context: {} as { query: string; filters: Record<string, string> },
|
|
346
|
-
events: {} as PlayRouteEvent,
|
|
347
|
-
},
|
|
348
|
-
}).createMachine(formatPlayRouteTransitions(machineConfig));
|
|
110
|
+
## API Reference
|
|
349
111
|
|
|
350
|
-
|
|
351
|
-
Search,
|
|
352
|
-
});
|
|
112
|
+
### `VueRouterBridge`
|
|
353
113
|
|
|
354
|
-
|
|
114
|
+
Implements the `RouterBridge` protocol by watching Vue Router's `currentRoute` shallowRef and the actor's `currentRoute` TC39 Signal.
|
|
355
115
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
actor
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
});
|
|
116
|
+
```typescript
|
|
117
|
+
class VueRouterBridge {
|
|
118
|
+
constructor(vueRouter: Router, actor: RoutableActor, routeMap: RouteMap);
|
|
119
|
+
connect(): void;
|
|
120
|
+
disconnect(): void;
|
|
121
|
+
dispose(): void; // alias for disconnect()
|
|
363
122
|
}
|
|
364
123
|
```
|
|
365
124
|
|
|
366
|
-
**
|
|
125
|
+
**Constructor parameters:**
|
|
367
126
|
|
|
368
|
-
|
|
127
|
+
| Parameter | Type | Description |
|
|
128
|
+
| ----------- | --------------- | -------------------------------------------- |
|
|
129
|
+
| `vueRouter` | `Router` | Vue Router instance from `createRouter()` |
|
|
130
|
+
| `actor` | `RoutableActor` | XMachines actor with a `currentRoute` signal |
|
|
131
|
+
| `routeMap` | `RouteMap` | Bidirectional state ID ↔ path mapping |
|
|
369
132
|
|
|
370
|
-
|
|
133
|
+
**Methods:**
|
|
371
134
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
135
|
+
- `connect()` — Start bidirectional synchronization. Performs an initial sync from the router's current path to the actor (cold-load / direct-URL support). Uses `watch(router.currentRoute, …)` from `@vue/reactivity` (not `@vue/runtime-core`) so watcher errors propagate directly without being swallowed by Vue's global error handler.
|
|
136
|
+
- `disconnect()` — Stop all watchers and stop the Vue effect scope.
|
|
137
|
+
- `dispose()` — Alias for `disconnect()`, intended for `onUnmounted(() => bridge.dispose())`.
|
|
375
138
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
},
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
target: "dashboard",
|
|
393
|
-
actions: assign({ isAuthenticated: true }),
|
|
394
|
-
},
|
|
395
|
-
},
|
|
396
|
-
},
|
|
397
|
-
dashboard: {
|
|
398
|
-
meta: { route: "/dashboard", view: { component: "Dashboard" } },
|
|
399
|
-
always: {
|
|
400
|
-
guard: ({ context }) => !context.isAuthenticated,
|
|
401
|
-
target: "login",
|
|
402
|
-
},
|
|
139
|
+
### `PlayRouterProvider`
|
|
140
|
+
|
|
141
|
+
Vue component that wraps `VueRouterBridge` in component lifecycle hooks.
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
import type { PlayActor } from "@xmachines/play-vue-router";
|
|
145
|
+
|
|
146
|
+
defineComponent({
|
|
147
|
+
name: "PlayRouterProvider",
|
|
148
|
+
props: {
|
|
149
|
+
actor: { type: Object as PropType<PlayActor>, required: true },
|
|
150
|
+
routeMap: { type: Object as PropType<RouteMap>, required: true },
|
|
151
|
+
router: { type: Object as PropType<Router>, required: true },
|
|
152
|
+
renderer: {
|
|
153
|
+
type: Function as PropType<(actor: PlayActor, router: Router) => VNodeChild>,
|
|
154
|
+
required: true,
|
|
403
155
|
},
|
|
404
156
|
},
|
|
405
157
|
});
|
|
406
|
-
|
|
407
|
-
const componentCatalog = defineCatalog({
|
|
408
|
-
Home,
|
|
409
|
-
Login,
|
|
410
|
-
Dashboard,
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
const player = definePlayer({ machine: authMachine, catalog: componentCatalog });
|
|
414
158
|
```
|
|
415
159
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
- User navigates to `/dashboard`
|
|
419
|
-
- Bridge sends `play.route` event to actor
|
|
420
|
-
- Actor's `always` guard checks `isAuthenticated`
|
|
421
|
-
- If `false`, actor transitions to `login` state
|
|
422
|
-
- Bridge detects state change, redirects router to `/login`
|
|
423
|
-
- Actor Authority principle enforced
|
|
424
|
-
|
|
425
|
-
### Cleanup: Proper Disposal on Component Unmount
|
|
426
|
-
|
|
427
|
-
```vue
|
|
428
|
-
<script setup>
|
|
429
|
-
import { onUnmounted } from "vue";
|
|
430
|
-
import { VueRouterBridge } from "@xmachines/play-vue-router";
|
|
160
|
+
The `actor` prop requires `PlayActor` (`AbstractActor & Routable & Viewable`) — the provider renders the current view spec in addition to synchronizing routes. The `renderer` callback receives the same concrete actor type.
|
|
431
161
|
|
|
432
|
-
|
|
433
|
-
const actor = inject("actor");
|
|
434
|
-
const routeMap = inject("routeMap");
|
|
162
|
+
### `RouteMap` / `VueRouteMap`
|
|
435
163
|
|
|
436
|
-
|
|
164
|
+
`RouteMap` (re-exported from `@xmachines/play-router`) is the bidirectional state ID ↔ path mapping used by the bridge. `VueRouteMap` is an alias for `RouteMap` — both are identical.
|
|
437
165
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
166
|
+
```typescript
|
|
167
|
+
import { RouteMap, createRouteMap } from "@xmachines/play-vue-router";
|
|
168
|
+
|
|
169
|
+
// Explicit construction
|
|
170
|
+
const routeMap = new RouteMap([
|
|
171
|
+
{ stateId: "home", path: "/" },
|
|
172
|
+
{ stateId: "profile", path: "/profile/:userId" },
|
|
173
|
+
{ stateId: "settings", path: "/settings/:section?" },
|
|
174
|
+
]);
|
|
175
|
+
|
|
176
|
+
// Or derive from an XState machine
|
|
177
|
+
import { createRouteMap } from "@xmachines/play-router";
|
|
178
|
+
const routeMap = createRouteMap(machine);
|
|
443
179
|
```
|
|
444
180
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
- Navigation guards remain active after unmount (memory leak)
|
|
448
|
-
- Watchers continue observing signals (event listeners pile up)
|
|
449
|
-
- Multiple bridge instances send duplicate events
|
|
450
|
-
- Tests fail with "Cannot send to stopped actor" errors
|
|
451
|
-
|
|
452
|
-
## Architecture
|
|
453
|
-
|
|
454
|
-
### Bidirectional Sync (Actor ↔ Router)
|
|
455
|
-
|
|
456
|
-
**Actor → Router (Signal-driven):**
|
|
457
|
-
|
|
458
|
-
1. Actor transitions to new state with `meta.route`
|
|
459
|
-
2. `actor.currentRoute` signal updates
|
|
460
|
-
3. `Signal.subtle.Watcher` detects change in microtask
|
|
461
|
-
4. Bridge extracts state ID from signal
|
|
462
|
-
5. Bridge looks up route name via `routeMap.getRouteName()`
|
|
463
|
-
6. Bridge calls `router.push({ name, params })`
|
|
464
|
-
7. Vue Router updates URL and renders component
|
|
465
|
-
|
|
466
|
-
**Router → Actor (Navigation guard):**
|
|
181
|
+
### Exported error classes (`@xmachines/play-vue-router/errors`)
|
|
467
182
|
|
|
468
|
-
|
|
469
|
-
2. `router.afterEach()` hook fires with `to` route
|
|
470
|
-
3. Bridge resolves state ID from Vue route `name` via `routeMap.getStateId(...)`
|
|
471
|
-
4. Bridge extracts params from `to.params` (not `route.params` - see Pitfalls)
|
|
472
|
-
5. Bridge sends `play.route` event to actor
|
|
473
|
-
6. Actor validates navigation (guards, transitions)
|
|
474
|
-
7. If accepted: Actor transitions, signal updates, URL stays
|
|
475
|
-
8. If rejected: Actor redirects, bridge corrects URL via `router.replace()`
|
|
183
|
+
All runtime errors extend `PlayError` from `@xmachines/play` and are available from the `./errors` subpath:
|
|
476
184
|
|
|
477
|
-
|
|
185
|
+
```typescript
|
|
186
|
+
import {
|
|
187
|
+
VueRouterCorrectionError,
|
|
188
|
+
VueRouterNavigationError,
|
|
189
|
+
VueRouterSendError,
|
|
190
|
+
} from "@xmachines/play-vue-router/errors";
|
|
191
|
+
```
|
|
478
192
|
|
|
479
|
-
|
|
193
|
+
| Class | Error code | When thrown |
|
|
194
|
+
| -------------------------- | ----------------------------------- | ---------------------------------------------------------------------- |
|
|
195
|
+
| `VueRouterCorrectionError` | `PLAY_VUE_ROUTER_CORRECTION_FAILED` | `router.replace()` rejected when syncing actor → router (correction) |
|
|
196
|
+
| `VueRouterNavigationError` | `PLAY_VUE_ROUTER_NAV_FAILED` | `router.push()` rejected (navigation guard cancellation, redirect) |
|
|
197
|
+
| `VueRouterSendError` | `PLAY_VUE_ROUTER_SEND_FAILED` | Vue Router watcher callback fails to deliver `play.route` to the actor |
|
|
480
198
|
|
|
481
|
-
|
|
482
|
-
2. **`isProcessingNavigation` flag:** Set during router-initiated navigation, prevents actor→router sync
|
|
483
|
-
3. **Microtask timing:** Actor validation happens asynchronously, bridge checks result after transition completes
|
|
199
|
+
Each class carries a `cause` property with the original Vue Router error.
|
|
484
200
|
|
|
485
|
-
|
|
201
|
+
### Exported types
|
|
486
202
|
|
|
487
203
|
```typescript
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
queueMicrotask(() => {
|
|
500
|
-
this.isProcessingNavigation = false; // Guard 4
|
|
501
|
-
});
|
|
502
|
-
}
|
|
204
|
+
// Bridge-level (routing only) — from @xmachines/play-router:
|
|
205
|
+
export type {
|
|
206
|
+
RouteMapping,
|
|
207
|
+
PlayRouteEvent,
|
|
208
|
+
RouterBridge,
|
|
209
|
+
RoutableActor,
|
|
210
|
+
} from "@xmachines/play-router";
|
|
211
|
+
|
|
212
|
+
// Provider-level (routing + view rendering) — PlayActor re-exported from @xmachines/play-router:
|
|
213
|
+
export type { PlayActor } from "@xmachines/play-vue-router";
|
|
214
|
+
// RoutableActor is also exported as a deprecated alias for PlayActor
|
|
503
215
|
```
|
|
504
216
|
|
|
505
|
-
|
|
217
|
+
`PlayActor` is `AbstractActor<AnyActorLogic> & Routable & Viewable` — the shape required by `PlayRouterProvider`, which renders the current view spec in addition to synchronizing routes. Use `RoutableActor` from `@xmachines/play-router` when only routing is needed (e.g. constructing `VueRouterBridge` directly).
|
|
506
218
|
|
|
507
|
-
|
|
219
|
+
## Architecture
|
|
508
220
|
|
|
509
|
-
|
|
510
|
-
- `@xmachines/play-actor` - Actor base class with signal protocol
|
|
511
|
-
- `@xmachines/play-router` - Route extraction and tree building
|
|
512
|
-
- `@xmachines/play-signals` - TC39 Signals polyfill for reactivity
|
|
513
|
-
- `@xmachines/play-xstate` - XState integration via `definePlayer()`
|
|
221
|
+
### Sync directions
|
|
514
222
|
|
|
515
|
-
**
|
|
223
|
+
**Router → Actor** (`watch(router.currentRoute, …)`):
|
|
516
224
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
└─────────────────────────────────────┘
|
|
523
|
-
↕
|
|
524
|
-
┌─────────────────────────────────────┐
|
|
525
|
-
│ VueRouterBridge (Adapter) │
|
|
526
|
-
│ - Watches actor.currentRoute │
|
|
527
|
-
│ - Listens to router.afterEach │
|
|
528
|
-
└─────────────────────────────────────┘
|
|
529
|
-
↕ ↕
|
|
530
|
-
┌─────────────┐ ┌──────────────────┐
|
|
531
|
-
│ Vue Router │ │ XMachines Actor │
|
|
532
|
-
│ (Infra) │ │ (Business Logic) │
|
|
533
|
-
└─────────────┘ └──────────────────┘
|
|
534
|
-
```
|
|
225
|
+
1. User navigates (link click, browser back, programmatic `router.push`).
|
|
226
|
+
2. Vue's `currentRoute` shallowRef is assigned a new object.
|
|
227
|
+
3. `watch` from `@vue/reactivity` fires synchronously (`scheduler: (job) => job()`).
|
|
228
|
+
4. Bridge sanitizes the path, looks up the state ID in `routeMap`.
|
|
229
|
+
5. Bridge sends `{ type: "play.route", to: "#stateId", params, query }` to the actor.
|
|
535
230
|
|
|
536
|
-
|
|
231
|
+
**Actor → Router** (TC39 Signal watcher):
|
|
537
232
|
|
|
538
|
-
|
|
233
|
+
1. Actor transitions; `actor.currentRoute` signal updates to a new state ID or path.
|
|
234
|
+
2. Signal watcher fires in a microtask.
|
|
235
|
+
3. Bridge resolves the navigation path via `resolveNavigationPath`.
|
|
236
|
+
4. Parameterized patterns without concrete params are skipped (returns `null`).
|
|
237
|
+
5. Bridge calls `router.push(resolvedPath)`.
|
|
539
238
|
|
|
540
|
-
|
|
541
|
-
- **`useRoute()`** - Access current route params (prefer actor context for state-driven components)
|
|
542
|
-
- **`onUnmounted()`** - Cleanup bridge to prevent leaks
|
|
239
|
+
### Echo suppression
|
|
543
240
|
|
|
544
|
-
|
|
241
|
+
`lastSyncedPath` is set before every `router.push()` call. When the Vue watcher subsequently fires with the same path (the router echoing the actor-initiated push), the `sanitizedPath === lastSyncedPath` check short-circuits before any event is sent.
|
|
545
242
|
|
|
546
|
-
Vue
|
|
243
|
+
### Vue effect scope
|
|
547
244
|
|
|
548
|
-
|
|
549
|
-
- Cleaner param handling (object-based)
|
|
550
|
-
- Better Vue Router integration (recommended by docs)
|
|
245
|
+
The `watch` watcher runs inside a dedicated `effectScope()`. Calling `disconnect()` / `dispose()` calls `scope.stop()`, fully removing the watcher without leaking into the global Vue effect scope.
|
|
551
246
|
|
|
552
|
-
|
|
247
|
+
## Testing
|
|
553
248
|
|
|
554
|
-
|
|
249
|
+
```bash
|
|
250
|
+
# Run all tests for this package
|
|
251
|
+
pnpm --filter @xmachines/play-vue-router test
|
|
555
252
|
|
|
556
|
-
|
|
253
|
+
# Watch mode
|
|
254
|
+
pnpm --filter @xmachines/play-vue-router run test:watch
|
|
557
255
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
router.afterEach((to) => {
|
|
561
|
-
const route = useRoute(); // Returns "from" route
|
|
562
|
-
const params = route.params; // STALE
|
|
563
|
-
// ...
|
|
564
|
-
});
|
|
565
|
-
|
|
566
|
-
// ✅ CORRECT: to.params is fresh
|
|
567
|
-
router.afterEach((to) => {
|
|
568
|
-
const params = to.params; // FRESH
|
|
569
|
-
// ...
|
|
570
|
-
});
|
|
256
|
+
# With coverage (80 % threshold on lines/functions/branches/statements)
|
|
257
|
+
pnpm --filter @xmachines/play-vue-router run test:coverage
|
|
571
258
|
```
|
|
572
259
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
## License
|
|
576
|
-
|
|
577
|
-
Copyright (c) 2016 [Mikael Karon](mailto:mikael@karon.se). All rights reserved.
|
|
578
|
-
|
|
579
|
-
This work is licensed under the terms of the MIT license.
|
|
580
|
-
For a copy, see <https://opensource.org/licenses/MIT>.
|
|
260
|
+
Test files use Vitest with jsdom and `@vue/test-utils`. Integration tests (`test/integration.test.ts`) use real Vue Router instances with SFC fixtures.
|
|
581
261
|
|
|
582
262
|
## Classes
|
|
583
263
|
|
|
584
264
|
- [RouteMap](classes/RouteMap.md)
|
|
585
|
-
- [VueBaseRouteMap](classes/VueBaseRouteMap.md)
|
|
586
265
|
- [VueRouterBridge](classes/VueRouterBridge.md)
|
|
587
266
|
|
|
588
267
|
## Interfaces
|
|
589
268
|
|
|
269
|
+
- [PlayActor](interfaces/PlayActor.md)
|
|
590
270
|
- [PlayRouteEvent](interfaces/PlayRouteEvent.md)
|
|
271
|
+
- [RouteMapOptions](interfaces/RouteMapOptions.md)
|
|
591
272
|
- [RouteMapping](interfaces/RouteMapping.md)
|
|
592
273
|
- [RouterBridge](interfaces/RouterBridge.md)
|
|
593
274
|
|
|
594
275
|
## Type Aliases
|
|
595
276
|
|
|
596
|
-
- [RoutableActor](type-aliases/RoutableActor.md)
|
|
277
|
+
- [~~RoutableActor~~](type-aliases/RoutableActor.md)
|
|
597
278
|
|
|
598
279
|
## Variables
|
|
599
280
|
|
|
@@ -602,3 +283,9 @@ For a copy, see <https://opensource.org/licenses/MIT>.
|
|
|
602
283
|
## Functions
|
|
603
284
|
|
|
604
285
|
- [createRouteMap](functions/createRouteMap.md)
|
|
286
|
+
|
|
287
|
+
## References
|
|
288
|
+
|
|
289
|
+
### VueRouteMap
|
|
290
|
+
|
|
291
|
+
Renames and re-exports [RouteMap](classes/RouteMap.md)
|