@xmachines/docs 1.0.0-beta.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -7
- package/api/@xmachines/play/README.md +160 -38
- 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 +141 -160
- package/api/@xmachines/play-actor/classes/AbstractActor.md +91 -122
- 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 +384 -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 +271 -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 -334
- 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 -114
- 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 -353
- 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 +116 -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 -234
- 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 -560
- 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 +84 -115
- 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 +269 -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 +199 -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 +211 -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 -126
- 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 +58 -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 +215 -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 +192 -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 -487
- 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 +178 -347
- package/api/@xmachines/play-xstate/classes/PlayerActor.md +161 -191
- package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +31 -20
- package/api/@xmachines/play-xstate/functions/composeGuards.md +2 -2
- package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +2 -2
- package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +38 -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 +2 -2
- package/api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md +3 -3
- package/api/@xmachines/play-xstate/functions/hasContext.md +2 -2
- package/api/@xmachines/play-xstate/functions/isAbsoluteRoute.md +2 -2
- package/api/@xmachines/play-xstate/functions/negateGuard.md +2 -2
- 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 +12 -13
- 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 +2 -2
- package/api/@xmachines/play-xstate/type-aliases/Guard.md +2 -2
- package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +3 -3
- package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +10 -9
- 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 +30 -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 +599 -0
- package/contributing/configuration.md +368 -0
- package/contributing/deployment.md +312 -0
- package/contributing/development.md +464 -0
- package/contributing/testing.md +453 -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 +24 -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 +15 -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 +18 -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 +15 -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 +17 -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 +75 -31
- package/examples/form-validation.md +261 -118
- package/examples/multi-router-integration.md +314 -194
- package/examples/routing-patterns.md +230 -189
- package/examples/traffic-light.md +114 -65
- package/guides/README.md +9 -21
- package/guides/actor-model.md +180 -0
- package/guides/getting-started.md +619 -137
- package/guides/signals.md +166 -0
- package/guides/state-machines.md +284 -0
- package/package.json +18 -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,94 @@
|
|
|
1
|
-
[
|
|
1
|
+
[API](../../README.md) / @xmachines/play-vue-router
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
**Vue Router 4.x adapter for XMachines Universal Player Architecture**
|
|
6
|
-
|
|
7
|
-
Bidirectional sync between Vue Router and XMachines state machines with Composition API integration.
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
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.
|
|
3
|
+
<!-- generated-by: gsd-doc-writer -->
|
|
12
4
|
|
|
13
|
-
|
|
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`
|
|
5
|
+
# @xmachines/play-vue-router
|
|
26
6
|
|
|
27
|
-
|
|
7
|
+
Vue Router 4.x adapter for XMachines Universal Player Architecture. Bidirectional sync between Vue Router and XMachines state machines using Vue's reactive primitives.
|
|
28
8
|
|
|
29
|
-
|
|
30
|
-
- Vue Router 4.x (`^4.0.0`)
|
|
31
|
-
- Named routes pattern (recommended by Vue Router docs)
|
|
9
|
+
Part of the [xmachines-js monorepo](../../README.md).
|
|
32
10
|
|
|
33
11
|
## Installation
|
|
34
12
|
|
|
35
13
|
```bash
|
|
36
|
-
|
|
14
|
+
pnpm add @xmachines/play-vue-router
|
|
37
15
|
```
|
|
38
16
|
|
|
39
17
|
**Peer dependencies:**
|
|
40
18
|
|
|
41
|
-
- `vue-router` ^4.0.0 || ^5.0.0 — Vue Router library
|
|
42
19
|
- `vue` ^3.5.0 — Vue runtime
|
|
43
|
-
- `@
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
|
|
20
|
+
- `@vue/reactivity` ^3.5.0 — Vue reactivity primitives
|
|
21
|
+
- `vue-router` ^4.0.0 || ^5.0.0 — Vue Router library
|
|
22
|
+
- `xstate` ^5.31.0 — XState v5 state machine runtime
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
### VueRouterBridge — low-level adapter
|
|
47
27
|
|
|
48
|
-
|
|
28
|
+
`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
29
|
|
|
50
30
|
```typescript
|
|
51
|
-
import { createApp } from "vue";
|
|
52
31
|
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
|
|
32
|
+
import { VueRouterBridge, RouteMap } from "@xmachines/play-vue-router";
|
|
33
|
+
|
|
34
|
+
// 1. Define routes
|
|
68
35
|
const router = createRouter({
|
|
69
36
|
history: createWebHistory(),
|
|
70
|
-
routes:
|
|
71
|
-
path:
|
|
72
|
-
name:
|
|
73
|
-
|
|
74
|
-
|
|
37
|
+
routes: [
|
|
38
|
+
{ path: "/", name: "home", component: HomePage },
|
|
39
|
+
{ path: "/profile/:userId", name: "profile", component: ProfilePage },
|
|
40
|
+
{ path: "/settings/:section?", name: "settings", component: SettingsPage },
|
|
41
|
+
],
|
|
75
42
|
});
|
|
76
43
|
|
|
77
|
-
//
|
|
78
|
-
const routeMap =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
catalog: componentCatalog,
|
|
84
|
-
});
|
|
85
|
-
const actor = createPlayer();
|
|
86
|
-
actor.start();
|
|
44
|
+
// 2. Create a bidirectional state ID ↔ path mapping
|
|
45
|
+
const routeMap = new RouteMap([
|
|
46
|
+
{ stateId: "home", path: "/" },
|
|
47
|
+
{ stateId: "profile", path: "/profile/:userId" },
|
|
48
|
+
{ stateId: "settings", path: "/settings/:section?" },
|
|
49
|
+
]);
|
|
87
50
|
|
|
88
|
-
//
|
|
51
|
+
// 3. Start the bridge after the router is ready
|
|
52
|
+
await router.isReady();
|
|
89
53
|
const bridge = new VueRouterBridge(router, actor, routeMap);
|
|
90
|
-
|
|
91
|
-
// 6. Connect bridge (required)
|
|
92
54
|
bridge.connect();
|
|
93
55
|
|
|
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);
|
|
56
|
+
// 4. Dispose when tearing down (e.g. onUnmounted)
|
|
57
|
+
bridge.dispose();
|
|
244
58
|
```
|
|
245
59
|
|
|
246
|
-
###
|
|
247
|
-
|
|
248
|
-
```typescript
|
|
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
|
-
});
|
|
60
|
+
### PlayRouterProvider — Vue component wrapper
|
|
283
61
|
|
|
284
|
-
|
|
62
|
+
`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.
|
|
285
63
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
settings: Settings,
|
|
292
|
-
} as const;
|
|
64
|
+
```vue
|
|
65
|
+
<script setup lang="ts">
|
|
66
|
+
import { markRaw } from "vue";
|
|
67
|
+
import { useRouter } from "vue-router";
|
|
68
|
+
import { PlayRouterProvider, RouteMap } from "@xmachines/play-vue-router";
|
|
293
69
|
|
|
294
|
-
const router =
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
70
|
+
const router = useRouter();
|
|
71
|
+
const routeMap = new RouteMap([
|
|
72
|
+
{ stateId: "home", path: "/" },
|
|
73
|
+
{ stateId: "profile", path: "/profile/:userId" },
|
|
74
|
+
]);
|
|
75
|
+
|
|
76
|
+
// markRaw prevents Vue from wrapping the actor in a reactive proxy,
|
|
77
|
+
// which would break TC39 Signal receivers.
|
|
78
|
+
const actor = markRaw(createActor());
|
|
79
|
+
</script>
|
|
301
80
|
|
|
302
|
-
|
|
303
|
-
|
|
81
|
+
<template>
|
|
82
|
+
<PlayRouterProvider
|
|
83
|
+
:actor="actor"
|
|
84
|
+
:router="router"
|
|
85
|
+
:routeMap="routeMap"
|
|
86
|
+
:renderer="(actor, router) => h(AppShell, { actor, router })"
|
|
87
|
+
/>
|
|
88
|
+
</template>
|
|
304
89
|
```
|
|
305
90
|
|
|
306
|
-
|
|
91
|
+
### Sending route events from components
|
|
307
92
|
|
|
308
93
|
```vue
|
|
309
94
|
<script setup>
|
|
@@ -321,279 +106,174 @@ function viewProfile(userId) {
|
|
|
321
106
|
</template>
|
|
322
107
|
```
|
|
323
108
|
|
|
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));
|
|
109
|
+
## API Reference
|
|
349
110
|
|
|
350
|
-
|
|
351
|
-
Search,
|
|
352
|
-
});
|
|
111
|
+
### `VueRouterBridge`
|
|
353
112
|
|
|
354
|
-
|
|
113
|
+
Implements the `RouterBridge` protocol by watching Vue Router's `currentRoute` shallowRef and the actor's `currentRoute` TC39 Signal.
|
|
355
114
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
actor
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
});
|
|
115
|
+
```typescript
|
|
116
|
+
class VueRouterBridge {
|
|
117
|
+
constructor(vueRouter: Router, actor: RoutableActor, routeMap: RouteMap);
|
|
118
|
+
connect(): void;
|
|
119
|
+
disconnect(): void;
|
|
120
|
+
dispose(): void; // alias for disconnect()
|
|
363
121
|
}
|
|
364
122
|
```
|
|
365
123
|
|
|
366
|
-
**
|
|
124
|
+
**Constructor parameters:**
|
|
367
125
|
|
|
368
|
-
|
|
126
|
+
| Parameter | Type | Description |
|
|
127
|
+
| ----------- | --------------- | -------------------------------------------- |
|
|
128
|
+
| `vueRouter` | `Router` | Vue Router instance from `createRouter()` |
|
|
129
|
+
| `actor` | `RoutableActor` | XMachines actor with a `currentRoute` signal |
|
|
130
|
+
| `routeMap` | `RouteMap` | Bidirectional state ID ↔ path mapping |
|
|
369
131
|
|
|
370
|
-
|
|
132
|
+
**Methods:**
|
|
371
133
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
134
|
+
- `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.
|
|
135
|
+
- `disconnect()` — Stop all watchers and stop the Vue effect scope.
|
|
136
|
+
- `dispose()` — Alias for `disconnect()`, intended for `onUnmounted(() => bridge.dispose())`.
|
|
375
137
|
|
|
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
|
-
},
|
|
138
|
+
### `PlayRouterProvider`
|
|
139
|
+
|
|
140
|
+
Vue component that wraps `VueRouterBridge` in component lifecycle hooks.
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
import type { PlayActor } from "@xmachines/play-vue-router";
|
|
144
|
+
|
|
145
|
+
defineComponent({
|
|
146
|
+
name: "PlayRouterProvider",
|
|
147
|
+
props: {
|
|
148
|
+
actor: { type: Object as PropType<PlayActor>, required: true },
|
|
149
|
+
routeMap: { type: Object as PropType<RouteMap>, required: true },
|
|
150
|
+
router: { type: Object as PropType<Router>, required: true },
|
|
151
|
+
renderer: {
|
|
152
|
+
type: Function as PropType<(actor: PlayActor, router: Router) => VNodeChild>,
|
|
153
|
+
required: true,
|
|
403
154
|
},
|
|
404
155
|
},
|
|
405
156
|
});
|
|
406
|
-
|
|
407
|
-
const componentCatalog = defineCatalog({
|
|
408
|
-
Home,
|
|
409
|
-
Login,
|
|
410
|
-
Dashboard,
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
const player = definePlayer({ machine: authMachine, catalog: componentCatalog });
|
|
414
157
|
```
|
|
415
158
|
|
|
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";
|
|
159
|
+
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
160
|
|
|
432
|
-
|
|
433
|
-
const actor = inject("actor");
|
|
434
|
-
const routeMap = inject("routeMap");
|
|
161
|
+
### `RouteMap` / `VueRouteMap`
|
|
435
162
|
|
|
436
|
-
|
|
163
|
+
`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
164
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
165
|
+
```typescript
|
|
166
|
+
import { RouteMap, createRouteMap } from "@xmachines/play-vue-router";
|
|
167
|
+
|
|
168
|
+
// Explicit construction
|
|
169
|
+
const routeMap = new RouteMap([
|
|
170
|
+
{ stateId: "home", path: "/" },
|
|
171
|
+
{ stateId: "profile", path: "/profile/:userId" },
|
|
172
|
+
{ stateId: "settings", path: "/settings/:section?" },
|
|
173
|
+
]);
|
|
174
|
+
|
|
175
|
+
// Or derive from an XState machine
|
|
176
|
+
import { createRouteMap } from "@xmachines/play-router";
|
|
177
|
+
const routeMap = createRouteMap(machine);
|
|
443
178
|
```
|
|
444
179
|
|
|
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):**
|
|
180
|
+
### Exported error classes (`@xmachines/play-vue-router/errors`)
|
|
467
181
|
|
|
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()`
|
|
182
|
+
All runtime errors extend `PlayError` from `@xmachines/play` and are available from the `./errors` subpath:
|
|
476
183
|
|
|
477
|
-
|
|
184
|
+
```typescript
|
|
185
|
+
import {
|
|
186
|
+
VueRouterCorrectionError,
|
|
187
|
+
VueRouterNavigationError,
|
|
188
|
+
VueRouterSendError,
|
|
189
|
+
} from "@xmachines/play-vue-router/errors";
|
|
190
|
+
```
|
|
478
191
|
|
|
479
|
-
|
|
192
|
+
| Class | Error code | When thrown |
|
|
193
|
+
| -------------------------- | ----------------------------------- | ---------------------------------------------------------------------- |
|
|
194
|
+
| `VueRouterCorrectionError` | `PLAY_VUE_ROUTER_CORRECTION_FAILED` | `router.replace()` rejected when syncing actor → router (correction) |
|
|
195
|
+
| `VueRouterNavigationError` | `PLAY_VUE_ROUTER_NAV_FAILED` | `router.push()` rejected (navigation guard cancellation, redirect) |
|
|
196
|
+
| `VueRouterSendError` | `PLAY_VUE_ROUTER_SEND_FAILED` | Vue Router watcher callback fails to deliver `play.route` to the actor |
|
|
480
197
|
|
|
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
|
|
198
|
+
Each class carries a `cause` property with the original Vue Router error.
|
|
484
199
|
|
|
485
|
-
|
|
200
|
+
### Exported types
|
|
486
201
|
|
|
487
202
|
```typescript
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
queueMicrotask(() => {
|
|
500
|
-
this.isProcessingNavigation = false; // Guard 4
|
|
501
|
-
});
|
|
502
|
-
}
|
|
203
|
+
// Bridge-level (routing only) — from @xmachines/play-router:
|
|
204
|
+
export type {
|
|
205
|
+
RouteMapping,
|
|
206
|
+
PlayRouteEvent,
|
|
207
|
+
RouterBridge,
|
|
208
|
+
RoutableActor,
|
|
209
|
+
} from "@xmachines/play-router";
|
|
210
|
+
|
|
211
|
+
// Provider-level (routing + view rendering) — PlayActor re-exported from @xmachines/play-router:
|
|
212
|
+
export type { PlayActor } from "@xmachines/play-vue-router";
|
|
213
|
+
// RoutableActor is also exported as a deprecated alias for PlayActor
|
|
503
214
|
```
|
|
504
215
|
|
|
505
|
-
|
|
216
|
+
`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
217
|
|
|
507
|
-
|
|
218
|
+
## Architecture
|
|
508
219
|
|
|
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()`
|
|
220
|
+
### Sync directions
|
|
514
221
|
|
|
515
|
-
**
|
|
222
|
+
**Router → Actor** (`watch(router.currentRoute, …)`):
|
|
516
223
|
|
|
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
|
-
```
|
|
224
|
+
1. User navigates (link click, browser back, programmatic `router.push`).
|
|
225
|
+
2. Vue's `currentRoute` shallowRef is assigned a new object.
|
|
226
|
+
3. `watch` from `@vue/reactivity` fires synchronously (`scheduler: (job) => job()`).
|
|
227
|
+
4. Bridge sanitizes the path, looks up the state ID in `routeMap`.
|
|
228
|
+
5. Bridge sends `{ type: "play.route", to: "#stateId", params, query }` to the actor.
|
|
535
229
|
|
|
536
|
-
|
|
230
|
+
**Actor → Router** (TC39 Signal watcher):
|
|
537
231
|
|
|
538
|
-
|
|
232
|
+
1. Actor transitions; `actor.currentRoute` signal updates to a new state ID or path.
|
|
233
|
+
2. Signal watcher fires in a microtask.
|
|
234
|
+
3. Bridge resolves the navigation path via `resolveNavigationPath`.
|
|
235
|
+
4. Parameterized patterns without concrete params are skipped (returns `null`).
|
|
236
|
+
5. Bridge calls `router.push(resolvedPath)`.
|
|
539
237
|
|
|
540
|
-
|
|
541
|
-
- **`useRoute()`** - Access current route params (prefer actor context for state-driven components)
|
|
542
|
-
- **`onUnmounted()`** - Cleanup bridge to prevent leaks
|
|
238
|
+
### Echo suppression
|
|
543
239
|
|
|
544
|
-
|
|
240
|
+
`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
241
|
|
|
546
|
-
Vue
|
|
242
|
+
### Vue effect scope
|
|
547
243
|
|
|
548
|
-
|
|
549
|
-
- Cleaner param handling (object-based)
|
|
550
|
-
- Better Vue Router integration (recommended by docs)
|
|
244
|
+
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
245
|
|
|
552
|
-
|
|
246
|
+
## Testing
|
|
553
247
|
|
|
554
|
-
|
|
248
|
+
```bash
|
|
249
|
+
# Run all tests for this package
|
|
250
|
+
pnpm --filter @xmachines/play-vue-router test
|
|
555
251
|
|
|
556
|
-
|
|
252
|
+
# Watch mode
|
|
253
|
+
pnpm --filter @xmachines/play-vue-router run test:watch
|
|
557
254
|
|
|
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
|
-
});
|
|
255
|
+
# With coverage (80 % threshold on lines/functions/branches/statements)
|
|
256
|
+
pnpm --filter @xmachines/play-vue-router run test:coverage
|
|
571
257
|
```
|
|
572
258
|
|
|
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>.
|
|
259
|
+
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
260
|
|
|
582
261
|
## Classes
|
|
583
262
|
|
|
584
263
|
- [RouteMap](classes/RouteMap.md)
|
|
585
|
-
- [VueBaseRouteMap](classes/VueBaseRouteMap.md)
|
|
586
264
|
- [VueRouterBridge](classes/VueRouterBridge.md)
|
|
587
265
|
|
|
588
266
|
## Interfaces
|
|
589
267
|
|
|
268
|
+
- [PlayActor](interfaces/PlayActor.md)
|
|
590
269
|
- [PlayRouteEvent](interfaces/PlayRouteEvent.md)
|
|
270
|
+
- [RouteMapOptions](interfaces/RouteMapOptions.md)
|
|
591
271
|
- [RouteMapping](interfaces/RouteMapping.md)
|
|
592
272
|
- [RouterBridge](interfaces/RouterBridge.md)
|
|
593
273
|
|
|
594
274
|
## Type Aliases
|
|
595
275
|
|
|
596
|
-
- [RoutableActor](type-aliases/RoutableActor.md)
|
|
276
|
+
- [~~RoutableActor~~](type-aliases/RoutableActor.md)
|
|
597
277
|
|
|
598
278
|
## Variables
|
|
599
279
|
|
|
@@ -602,3 +282,9 @@ For a copy, see <https://opensource.org/licenses/MIT>.
|
|
|
602
282
|
## Functions
|
|
603
283
|
|
|
604
284
|
- [createRouteMap](functions/createRouteMap.md)
|
|
285
|
+
|
|
286
|
+
## References
|
|
287
|
+
|
|
288
|
+
### VueRouteMap
|
|
289
|
+
|
|
290
|
+
Renames and re-exports [RouteMap](classes/RouteMap.md)
|