@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
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
[Examples](../../README.md) / @xmachines/play-solid-router-demo
|
|
2
|
+
|
|
3
|
+
<!-- generated-by: gsd-doc-writer -->
|
|
4
|
+
|
|
5
|
+
# @xmachines/play-solid-router-demo
|
|
6
|
+
|
|
7
|
+
SolidJS Router adapter demonstration with authentication flow using the XMachines Play architecture and provider-based router integration.
|
|
8
|
+
|
|
9
|
+
## What This Demonstrates
|
|
10
|
+
|
|
11
|
+
- Shared auth machine reused without framework-specific business logic
|
|
12
|
+
- `PlayRouterProvider` renderer-based integration with Solid Router
|
|
13
|
+
- Shell-driven rendering via `PlayRenderer` with actor-authoritative navigation
|
|
14
|
+
- Canonical TC39 Signals lifecycle integration with Solid's fine-grained reactivity
|
|
15
|
+
- Non-browser invariant tests plus browser E2E coverage
|
|
16
|
+
|
|
17
|
+
## Running the Demo
|
|
18
|
+
|
|
19
|
+
From the repository root:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm install
|
|
23
|
+
pnpm --filter @xmachines/play-solid-router-demo run dev
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Then open `http://localhost:3007`.
|
|
27
|
+
|
|
28
|
+
## Step-by-Step Code Flow
|
|
29
|
+
|
|
30
|
+
Use this order to understand the implementation:
|
|
31
|
+
|
|
32
|
+
1. `src/main.tsx` bootstraps the demo and mounts `<App />` onto `#app`.
|
|
33
|
+
2. `src/runtime.ts` sets up the actor, registry, routes, and route map — all shared module-level singletons.
|
|
34
|
+
3. `src/App.tsx` wires Solid Router routes and the `PlayRouterProvider` using the runtime exports.
|
|
35
|
+
4. A `routeMap` is created by calling `createRouteMap(authMachine)` in `src/runtime.ts`.
|
|
36
|
+
5. `PlayRouterProvider` forwards navigation intent from `@solidjs/router` to the actor, and reflects actor-approved routes back to the URL.
|
|
37
|
+
6. `Shell` (from `@xmachines/play-solid-demo`) renders actor-projected views (`PlayRenderer`) and provides the shared UI shell.
|
|
38
|
+
7. `test/library-pattern.test.ts` and `test/browser/` verify invariants and runtime routing behavior.
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
// src/main.tsx (shape)
|
|
42
|
+
render(() => <App />, document.getElementById("app")!);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
// src/runtime.ts (shape)
|
|
47
|
+
const createPlayer = definePlayer({ machine: authMachine });
|
|
48
|
+
export const actor = createPlayer();
|
|
49
|
+
actor.start();
|
|
50
|
+
|
|
51
|
+
export const routeMap = createRouteMap(authMachine);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
// src/App.tsx (shape)
|
|
56
|
+
const Layout: ParentComponent = () => {
|
|
57
|
+
const navigate = useNavigate();
|
|
58
|
+
const location = useLocation();
|
|
59
|
+
const params = useParams();
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<PlayRouterProvider
|
|
63
|
+
actor={actor}
|
|
64
|
+
routeMap={routeMap}
|
|
65
|
+
router={{ navigate, location, params }}
|
|
66
|
+
renderer={(currentActor, currentRouter) => (
|
|
67
|
+
<Shell
|
|
68
|
+
actor={currentActor}
|
|
69
|
+
router={currentRouter}
|
|
70
|
+
registryResult={registryResult}
|
|
71
|
+
/>
|
|
72
|
+
)}
|
|
73
|
+
/>
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Key Files
|
|
79
|
+
|
|
80
|
+
- `src/runtime.ts` - actor lifecycle, registry, route extraction, and route map creation
|
|
81
|
+
- `src/App.tsx` - Solid Router wiring, `PlayRouterProvider` integration, and renderer composition
|
|
82
|
+
- `src/main.tsx` - Vite bootstrap that mounts `<App />` via Solid's `render`
|
|
83
|
+
- `test/library-pattern.test.ts` - architecture boundary and invariant assertions
|
|
84
|
+
- `test/browser/shared-demo.browser.test.ts` - browser startup and full auth flow coverage
|
|
85
|
+
|
|
86
|
+
## State Machine & Architecture Details
|
|
87
|
+
|
|
88
|
+
The demo utilizes XMachines architectural invariants:
|
|
89
|
+
|
|
90
|
+
1. **Actor Authority:** When a user navigates to a protected route, the Solid Router updates the URL. The `PlayRouterProvider` intercepts this, translates it to a `play.route` event, and sends it to the actor. The actor evaluates guards (e.g., is the user logged in?) and transitions to the appropriate state.
|
|
91
|
+
2. **Passive Infrastructure:** Solid components hold no business state. They observe `actor.currentView` to know what to render, and `actor.currentRoute` to reflect the active path.
|
|
92
|
+
3. **Signal-Only Reactivity:** Instead of React-like re-renders, Solid uses `createEffect` internally within the `RouterBridge` to react precisely when signals update.
|
|
93
|
+
|
|
94
|
+
## Watcher Lifecycle and Cleanup Contract
|
|
95
|
+
|
|
96
|
+
This demo follows the canonical watcher lifecycle:
|
|
97
|
+
|
|
98
|
+
1. `notify`
|
|
99
|
+
2. `queueMicrotask`
|
|
100
|
+
3. `getPending()`
|
|
101
|
+
4. Read actor signals and update Solid-local render triggers
|
|
102
|
+
5. Re-arm with `watch()`/`watch(...signals)`
|
|
103
|
+
|
|
104
|
+
Watcher notifications are one-shot. Cleanup is explicit and lifecycle-bound: Solid teardown uses `onCleanup`, and provider/bridge teardown must call `disconnect`/`unwatch` paths rather than relying on GC-only cleanup. This is crucial to prevent memory leaks during component unmounting.
|
|
105
|
+
|
|
106
|
+
## Adapter Boundaries
|
|
107
|
+
|
|
108
|
+
Solid Router integration remains passive infrastructure. `RouterBridgeBase` stays the shared policy point; the Solid adapter only implements framework port behavior (calling `navigate()` and tracking `location.pathname`).
|
|
109
|
+
|
|
110
|
+
## Available Scripts
|
|
111
|
+
|
|
112
|
+
These commands are defined in `package.json`:
|
|
113
|
+
|
|
114
|
+
| Command | Description |
|
|
115
|
+
| ------------------------------------------------------------------ | ---------------------------------------------- |
|
|
116
|
+
| `pnpm --filter @xmachines/play-solid-router-demo run dev` | Start Vite dev server (http://localhost:3007/) |
|
|
117
|
+
| `pnpm --filter @xmachines/play-solid-router-demo run build` | Build production bundle |
|
|
118
|
+
| `pnpm --filter @xmachines/play-solid-router-demo run preview` | Preview built bundle |
|
|
119
|
+
| `pnpm --filter @xmachines/play-solid-router-demo run test` | Run Vitest test suite |
|
|
120
|
+
| `pnpm --filter @xmachines/play-solid-router-demo run test:browser` | Run browser-focused Vitest suite |
|
|
121
|
+
|
|
122
|
+
## Verification
|
|
123
|
+
|
|
124
|
+
Use these checks to validate README claims against the current demo implementation:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
pnpm --filter @xmachines/play-solid-router-demo run test
|
|
128
|
+
pnpm --filter @xmachines/play-solid-router-demo run test:browser
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Expected result: library-pattern invariant tests and the browser shared-demo suite both pass, confirming login/logout transitions update both view and URL correctly.
|
|
132
|
+
|
|
133
|
+
## Learn More
|
|
134
|
+
|
|
135
|
+
- [Solid Router](../../../api/@xmachines/play-solid-router/README.md)
|
|
136
|
+
- [SolidJS](../../../api/@xmachines/play-solid/README.md)
|
|
137
|
+
- [TanStack Solid Router](../play-tanstack-solid-router-demo/README.md)
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
[Examples](../../README.md) / @xmachines/play-svelte-demo
|
|
2
|
+
|
|
3
|
+
<!-- generated-by: gsd-doc-writer -->
|
|
4
|
+
|
|
5
|
+
# @xmachines/play-svelte-demo
|
|
6
|
+
|
|
7
|
+
Svelte 5 renderer demo for [`@xmachines/play-svelte`](../../../api/@xmachines/play-svelte/README.md) — actor + `PlayRenderer` without a router.
|
|
8
|
+
|
|
9
|
+
## What This Demonstrates
|
|
10
|
+
|
|
11
|
+
- Shared auth machine reused without framework-specific business logic
|
|
12
|
+
- `PlayRenderer` rendering actor-projected views with a typed `defineRegistry` catalog
|
|
13
|
+
- Auth machine states drive view switching via `auth.login` / `auth.logout` events only — no URL routing
|
|
14
|
+
- Svelte 5 runes and `mount` API mapped to TC39 Signals lifecycle
|
|
15
|
+
- Non-browser invariant tests plus browser renderer coverage
|
|
16
|
+
|
|
17
|
+
## Running the Demo
|
|
18
|
+
|
|
19
|
+
From the repository root:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm install
|
|
23
|
+
pnpm --filter @xmachines/play-svelte-demo run dev
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Then open `http://localhost:3003`.
|
|
27
|
+
|
|
28
|
+
## Step-by-Step Code Flow
|
|
29
|
+
|
|
30
|
+
Use this order to understand the implementation:
|
|
31
|
+
|
|
32
|
+
1. `src/main.ts` calls `definePlayer({ machine: authMachine })` to create a factory, invokes it to get an actor, starts it, and mounts `App.svelte` via Svelte's `mount`.
|
|
33
|
+
2. The actor is passed to `App` as a prop.
|
|
34
|
+
3. `src/App.svelte` calls `defineRegistry(authCatalog, { components, actions })` to build the typed `registryResult` — real async action handlers dispatching to `actor.send()`.
|
|
35
|
+
4. `App.svelte` delegates to `Shell.svelte`, passing both `actor` and `registryResult`.
|
|
36
|
+
5. `Shell.svelte` renders `<PlayUIProvider><PlayRenderer /></PlayUIProvider>`, `<NavBar>`, and `<DebugPanel>` — the latter two observe actor signals directly via `watchSignal` inside `$effect`.
|
|
37
|
+
6. HMR cleanup calls `actor.stop()` via `import.meta.hot.dispose`.
|
|
38
|
+
7. Browser tests in `test/browser/` validate startup and interaction behavior.
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
// src/main.ts (shape)
|
|
42
|
+
const createPlayer = definePlayer({ machine: authMachine });
|
|
43
|
+
const actor = createPlayer();
|
|
44
|
+
actor.start();
|
|
45
|
+
|
|
46
|
+
mount(App, { target: document.getElementById("app")!, props: { actor } });
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```svelte
|
|
50
|
+
<!-- src/App.svelte (shape) -->
|
|
51
|
+
<script lang="ts">
|
|
52
|
+
let { actor }: { actor: AuthActor } = $props();
|
|
53
|
+
|
|
54
|
+
const registryResult = defineRegistry(authCatalog, {
|
|
55
|
+
components: {
|
|
56
|
+
Home, About, Contact, Login, Dashboard,
|
|
57
|
+
Overview, Stats, Profile, Settings, Navigation,
|
|
58
|
+
NavBar: NavBarView,
|
|
59
|
+
},
|
|
60
|
+
actions: {
|
|
61
|
+
login: async (args) =>
|
|
62
|
+
actor.send({ type: "auth.login", username: assertNonNullable(args, "args").username }),
|
|
63
|
+
logout: async () => actor.send({ type: "auth.logout" }),
|
|
64
|
+
route: async (args) => {
|
|
65
|
+
const { to, params } = assertNonNullable(args, "args");
|
|
66
|
+
actor.send({ type: "play.route", to, ...(params != null && { params }) });
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<Shell {actor} {registryResult} />
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Key Files
|
|
76
|
+
|
|
77
|
+
- `src/main.ts` - actor creation/start and Svelte app mount with actor as prop
|
|
78
|
+
- `src/App.svelte` - registry construction, delegates rendering to `Shell.svelte`
|
|
79
|
+
- `src/components/Shell.svelte` - shared shell with `PlayUIProvider` + `PlayRenderer`, `NavBar`, and `DebugPanel`
|
|
80
|
+
- `src/components/` - demo view Svelte components bound to catalog component keys
|
|
81
|
+
- `test/library-pattern.test.ts` - architecture boundary and invariant assertions
|
|
82
|
+
- `test/browser/renderer-demo.browser.test.ts` - browser-mode renderer coverage
|
|
83
|
+
|
|
84
|
+
## State Machine & Architecture Details
|
|
85
|
+
|
|
86
|
+
The demo utilizes XMachines architectural invariants:
|
|
87
|
+
|
|
88
|
+
1. **Actor Authority:** View components dispatch `auth.login` and `auth.logout` events to the actor. The actor evaluates guards and transitions — Svelte never decides which view to render.
|
|
89
|
+
2. **Passive Infrastructure:** `PlayRenderer` observes `actor.currentView` signals only. It holds no business state and makes no routing decisions.
|
|
90
|
+
3. **Signal-Only Reactivity:** The bridge leverages Svelte 5 rune reactivity internally to react precisely when actor signals update, without ad-hoc `$state` stores for business logic.
|
|
91
|
+
|
|
92
|
+
## Watcher Lifecycle and Cleanup Contract
|
|
93
|
+
|
|
94
|
+
This demo follows the canonical watcher lifecycle used across all `@xmachines` framework adapters:
|
|
95
|
+
|
|
96
|
+
1. `notify`
|
|
97
|
+
2. `queueMicrotask`
|
|
98
|
+
3. `getPending()`
|
|
99
|
+
4. Read actor signals and project Svelte-local render state
|
|
100
|
+
5. Re-arm with `watch()`/`watch(...signals)`
|
|
101
|
+
|
|
102
|
+
Watcher notifications are one-shot. Cleanup is explicit: `actor.stop()` is called during HMR disposal, and `PlayRenderer` handles internal watcher teardown natively on component destruction.
|
|
103
|
+
|
|
104
|
+
## Adapter Boundaries
|
|
105
|
+
|
|
106
|
+
`PlayRenderer` and `defineRegistry` stay passive infrastructure. Business validity remains actor-owned. The registry maps catalog component keys to Svelte 5 component implementations — the actor owns which key is active. The `Shell.svelte` component is shared with all Svelte router demos, accepting an optional `router` prop for prop-shape parity.
|
|
107
|
+
|
|
108
|
+
## Available Scripts
|
|
109
|
+
|
|
110
|
+
These commands are defined in `package.json`:
|
|
111
|
+
|
|
112
|
+
| Command | Description |
|
|
113
|
+
| ------------------------------------------------------------ | ---------------------------------------------- |
|
|
114
|
+
| `pnpm --filter @xmachines/play-svelte-demo run dev` | Start Vite dev server (http://localhost:3003/) |
|
|
115
|
+
| `pnpm --filter @xmachines/play-svelte-demo run build` | Build production bundle |
|
|
116
|
+
| `pnpm --filter @xmachines/play-svelte-demo run preview` | Preview built bundle |
|
|
117
|
+
| `pnpm --filter @xmachines/play-svelte-demo run test` | Run Vitest test suite |
|
|
118
|
+
| `pnpm --filter @xmachines/play-svelte-demo run test:browser` | Run browser-focused Vitest suite |
|
|
119
|
+
|
|
120
|
+
## Verification
|
|
121
|
+
|
|
122
|
+
Use these checks to validate README claims against the current demo implementation:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
pnpm --filter @xmachines/play-svelte-demo run test
|
|
126
|
+
pnpm --filter @xmachines/play-svelte-demo run test:browser
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Expected result: library-pattern invariant tests pass and the browser renderer suite completes.
|
|
130
|
+
|
|
131
|
+
## Learn More
|
|
132
|
+
|
|
133
|
+
- [`@xmachines/play-svelte`](../../../api/@xmachines/play-svelte/README.md) — the Svelte 5 renderer package this demo exercises
|
|
134
|
+
|
|
135
|
+
## Type Aliases
|
|
136
|
+
|
|
137
|
+
- [App](type-aliases/App.md)
|
|
138
|
+
- [AuthCatalog](type-aliases/AuthCatalog.md)
|
|
139
|
+
|
|
140
|
+
## Variables
|
|
141
|
+
|
|
142
|
+
- [App](variables/App.md)
|
|
143
|
+
- [authCatalog](variables/authCatalog.md)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
[Examples](../../../README.md) / [@xmachines/play-svelte-demo](../README.md) / AuthCatalog
|
|
2
|
+
|
|
3
|
+
# Type Alias: AuthCatalog
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
type AuthCatalog = typeof authCatalog;
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Defined in: [packages/play-svelte/examples/demo/src/catalog.ts:6](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0/packages/play-svelte/examples/demo/src/catalog.ts#L6)
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
[Examples](../../../README.md) / [@xmachines/play-svelte-demo](../README.md) / authCatalog
|
|
2
|
+
|
|
3
|
+
# Variable: authCatalog
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
const authCatalog: Catalog<
|
|
7
|
+
{
|
|
8
|
+
catalog: SchemaType<
|
|
9
|
+
"object",
|
|
10
|
+
{
|
|
11
|
+
actions: SchemaType<
|
|
12
|
+
"map",
|
|
13
|
+
{
|
|
14
|
+
description: SchemaType<"string", unknown>;
|
|
15
|
+
params: SchemaType<"zod", unknown>;
|
|
16
|
+
}
|
|
17
|
+
>;
|
|
18
|
+
components: SchemaType<
|
|
19
|
+
"map",
|
|
20
|
+
{
|
|
21
|
+
description: SchemaType<"string", unknown>;
|
|
22
|
+
example: SchemaType<"any", unknown>;
|
|
23
|
+
props: SchemaType<"zod", unknown>;
|
|
24
|
+
slots: SchemaType<"array", SchemaType<"string", unknown>>;
|
|
25
|
+
}
|
|
26
|
+
>;
|
|
27
|
+
}
|
|
28
|
+
>;
|
|
29
|
+
spec: SchemaType<
|
|
30
|
+
"object",
|
|
31
|
+
{
|
|
32
|
+
elements: SchemaType<
|
|
33
|
+
"record",
|
|
34
|
+
SchemaType<
|
|
35
|
+
"object",
|
|
36
|
+
{
|
|
37
|
+
children: SchemaType<"array", SchemaType<"string", unknown>>;
|
|
38
|
+
props: SchemaType<"propsOf", string>;
|
|
39
|
+
type: SchemaType<"ref", string>;
|
|
40
|
+
visible: SchemaType<"any", unknown>;
|
|
41
|
+
}
|
|
42
|
+
>
|
|
43
|
+
>;
|
|
44
|
+
root: SchemaType<"string", unknown>;
|
|
45
|
+
}
|
|
46
|
+
>;
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
actions: {
|
|
50
|
+
login: {
|
|
51
|
+
description: "Login with username";
|
|
52
|
+
params: ZodObject<
|
|
53
|
+
{
|
|
54
|
+
username: ZodString;
|
|
55
|
+
},
|
|
56
|
+
$strip
|
|
57
|
+
>;
|
|
58
|
+
};
|
|
59
|
+
logout: {
|
|
60
|
+
description: "Logout and return to home";
|
|
61
|
+
};
|
|
62
|
+
route: {
|
|
63
|
+
description: "Navigate to a route by path (e.g. '#home', '#login', '#dashboard')";
|
|
64
|
+
params: ZodObject<
|
|
65
|
+
{
|
|
66
|
+
params: ZodOptional<ZodRecord<ZodString, ZodString>>;
|
|
67
|
+
to: ZodString;
|
|
68
|
+
},
|
|
69
|
+
$strip
|
|
70
|
+
>;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
components: {
|
|
74
|
+
About: {
|
|
75
|
+
props: ZodObject<
|
|
76
|
+
{
|
|
77
|
+
title: ZodString;
|
|
78
|
+
},
|
|
79
|
+
$strip
|
|
80
|
+
>;
|
|
81
|
+
};
|
|
82
|
+
Contact: {
|
|
83
|
+
props: ZodObject<
|
|
84
|
+
{
|
|
85
|
+
title: ZodString;
|
|
86
|
+
},
|
|
87
|
+
$strip
|
|
88
|
+
>;
|
|
89
|
+
};
|
|
90
|
+
Dashboard: {
|
|
91
|
+
props: ZodObject<
|
|
92
|
+
{
|
|
93
|
+
username: ZodString;
|
|
94
|
+
welcome: ZodBoolean;
|
|
95
|
+
},
|
|
96
|
+
$strip
|
|
97
|
+
>;
|
|
98
|
+
};
|
|
99
|
+
Home: {
|
|
100
|
+
props: ZodObject<
|
|
101
|
+
{
|
|
102
|
+
title: ZodString;
|
|
103
|
+
},
|
|
104
|
+
$strip
|
|
105
|
+
>;
|
|
106
|
+
};
|
|
107
|
+
Login: {
|
|
108
|
+
props: ZodObject<
|
|
109
|
+
{
|
|
110
|
+
title: ZodString;
|
|
111
|
+
username: ZodOptional<ZodString>;
|
|
112
|
+
},
|
|
113
|
+
$strip
|
|
114
|
+
>;
|
|
115
|
+
};
|
|
116
|
+
NavBar: {
|
|
117
|
+
props: ZodObject<
|
|
118
|
+
{
|
|
119
|
+
isAuthenticated: ZodBoolean;
|
|
120
|
+
username: ZodNullable<ZodString>;
|
|
121
|
+
},
|
|
122
|
+
$strip
|
|
123
|
+
>;
|
|
124
|
+
};
|
|
125
|
+
Navigation: {
|
|
126
|
+
props: ZodObject<
|
|
127
|
+
{
|
|
128
|
+
currentPath: ZodString;
|
|
129
|
+
isAuthenticated: ZodBoolean;
|
|
130
|
+
},
|
|
131
|
+
$strip
|
|
132
|
+
>;
|
|
133
|
+
};
|
|
134
|
+
Overview: {
|
|
135
|
+
props: ZodObject<
|
|
136
|
+
{
|
|
137
|
+
title: ZodString;
|
|
138
|
+
},
|
|
139
|
+
$strip
|
|
140
|
+
>;
|
|
141
|
+
};
|
|
142
|
+
Profile: {
|
|
143
|
+
props: ZodObject<
|
|
144
|
+
{
|
|
145
|
+
username: ZodString;
|
|
146
|
+
},
|
|
147
|
+
$strip
|
|
148
|
+
>;
|
|
149
|
+
};
|
|
150
|
+
Settings: {
|
|
151
|
+
props: ZodObject<
|
|
152
|
+
{
|
|
153
|
+
section: ZodOptional<ZodString>;
|
|
154
|
+
username: ZodString;
|
|
155
|
+
},
|
|
156
|
+
$strip
|
|
157
|
+
>;
|
|
158
|
+
};
|
|
159
|
+
Stats: {
|
|
160
|
+
props: ZodObject<
|
|
161
|
+
{
|
|
162
|
+
title: ZodString;
|
|
163
|
+
},
|
|
164
|
+
$strip
|
|
165
|
+
>;
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
>;
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Defined in: [packages/play-svelte/examples/demo/src/catalog.ts:5](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0/packages/play-svelte/examples/demo/src/catalog.ts#L5)
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
[Examples](../../README.md) / @xmachines/play-svelte-spa-router-demo
|
|
2
|
+
|
|
3
|
+
<!-- generated-by: gsd-doc-writer -->
|
|
4
|
+
|
|
5
|
+
# @xmachines/play-svelte-spa-router-demo
|
|
6
|
+
|
|
7
|
+
Svelte 5 + `svelte-spa-router` integration demo for the XMachines Play architecture using hash-based URL routing.
|
|
8
|
+
|
|
9
|
+
## What This Demonstrates
|
|
10
|
+
|
|
11
|
+
- Shared auth machine reused without framework-specific business logic
|
|
12
|
+
- `connectRouter` hash-URL ↔ actor sync via [`@xmachines/play-svelte-spa-router`](../../../api/@xmachines/play-svelte-spa-router/README.md)
|
|
13
|
+
- Shell-driven rendering via `PlayRenderer` with actor-authoritative navigation
|
|
14
|
+
- Canonical TC39 Signals lifecycle integrated with Svelte 5 runes
|
|
15
|
+
- Non-browser invariant tests plus browser E2E coverage
|
|
16
|
+
|
|
17
|
+
## Running the Demo
|
|
18
|
+
|
|
19
|
+
From the repository root:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm install
|
|
23
|
+
pnpm --filter @xmachines/play-svelte-spa-router-demo run dev
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Then open `http://localhost:3008`.
|
|
27
|
+
|
|
28
|
+
## Step-by-Step Code Flow
|
|
29
|
+
|
|
30
|
+
Use this order to understand the implementation:
|
|
31
|
+
|
|
32
|
+
1. `src/main.ts` mounts `App.svelte` and registers HMR cleanup via `cleanup`.
|
|
33
|
+
2. `src/runtime.ts` creates the actor, builds the registry, calls `createRouteMap(authMachine)`, and wires `connectRouter({ actor, routeMap })`.
|
|
34
|
+
3. `connectRouter` synchronizes hash URL changes with the actor via `play.route` events and reflects actor-approved routes back to the hash URL.
|
|
35
|
+
4. `src/App.svelte` imports the singleton `actor` and `registryResult` from `src/runtime.ts` and delegates to the shared `Shell.svelte`.
|
|
36
|
+
5. `Shell.svelte` renders `<PlayUIProvider>` + `<PlayRenderer />` with the actor and registryResult and provides the shared UI shell (nav, debug panel).
|
|
37
|
+
6. Browser tests in `test/browser/` validate startup and auth route transitions.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
// src/runtime.ts (shape)
|
|
41
|
+
const createDemoPlayer = definePlayer({ machine: authMachine });
|
|
42
|
+
export const actor = createDemoPlayer();
|
|
43
|
+
actor.start();
|
|
44
|
+
|
|
45
|
+
export const routeMap = createRouteMap(authMachine);
|
|
46
|
+
export const disconnectRouter = connectRouter({ actor, routeMap });
|
|
47
|
+
|
|
48
|
+
export function cleanup(): void {
|
|
49
|
+
disconnectRouter();
|
|
50
|
+
actor.stop();
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```svelte
|
|
55
|
+
<!-- src/App.svelte (shape) -->
|
|
56
|
+
<script lang="ts">
|
|
57
|
+
import { Shell } from "@xmachines/play-svelte-demo";
|
|
58
|
+
import { actor, registryResult } from "./runtime.js";
|
|
59
|
+
</script>
|
|
60
|
+
|
|
61
|
+
<Shell {actor} {registryResult} />
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```svelte
|
|
65
|
+
<!-- Shell.svelte — rendering (shape) -->
|
|
66
|
+
<PlayUIProvider actor={props.actor} registryResult={props.registryResult}>
|
|
67
|
+
<PlayRenderer />
|
|
68
|
+
</PlayUIProvider>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Key Files
|
|
72
|
+
|
|
73
|
+
- `src/main.ts` - Svelte app mount and HMR cleanup registration
|
|
74
|
+
- `src/runtime.ts` - actor creation, registry construction, route map, and `connectRouter` wiring
|
|
75
|
+
- `src/App.svelte` - minimal root component delegating to shared `Shell.svelte`
|
|
76
|
+
- `test/library-pattern.test.ts` - architecture boundary and invariant assertions
|
|
77
|
+
- `test/browser/shared-demo.browser.test.ts` - browser startup and auth route flow coverage
|
|
78
|
+
|
|
79
|
+
## State Machine & Architecture Details
|
|
80
|
+
|
|
81
|
+
The demo utilizes XMachines architectural invariants:
|
|
82
|
+
|
|
83
|
+
1. **Actor Authority:** When a user clicks a nav link, the hash URL changes. `connectRouter` intercepts this, translates it to a `play.route` event, and sends it to the actor. The actor evaluates guards (e.g. `isAuthenticated`) and transitions to the appropriate state.
|
|
84
|
+
2. **Passive Infrastructure:** `svelte-spa-router` does not execute business logic. The actor dictates whether navigation is permitted. The Svelte application only renders the state.
|
|
85
|
+
3. **Signal-Only Reactivity:** The bridge leverages Svelte 5 rune reactivity internally to react precisely when actor signals update, without ad-hoc `$state` stores for business logic.
|
|
86
|
+
|
|
87
|
+
## Watcher Lifecycle and Cleanup Contract
|
|
88
|
+
|
|
89
|
+
This demo follows the canonical watcher lifecycle used across all `@xmachines` framework adapters:
|
|
90
|
+
|
|
91
|
+
1. `notify`
|
|
92
|
+
2. `queueMicrotask`
|
|
93
|
+
3. `getPending()`
|
|
94
|
+
4. Read actor signals and project Svelte-local render state
|
|
95
|
+
5. Re-arm with `watch()`/`watch(...signals)`
|
|
96
|
+
|
|
97
|
+
Watcher notifications are one-shot. Cleanup is explicit: `cleanup()` calls `disconnectRouter()` and `actor.stop()` during HMR disposal, preventing memory leaks and ghost subscriptions.
|
|
98
|
+
|
|
99
|
+
## Adapter Boundaries
|
|
100
|
+
|
|
101
|
+
`connectRouter` (from [`@xmachines/play-svelte-spa-router`](../../../api/@xmachines/play-svelte-spa-router/README.md)) is passive infrastructure. It translates hash URL changes into `play.route` events and reflects actor-approved route changes back to the URL. Business validity remains actor-owned. The shared `Shell.svelte` from `@xmachines/play-svelte-demo` is reused to avoid duplicating view components across router demos.
|
|
102
|
+
|
|
103
|
+
## Available Scripts
|
|
104
|
+
|
|
105
|
+
These commands are defined in `package.json`:
|
|
106
|
+
|
|
107
|
+
| Command | Description |
|
|
108
|
+
| ----------------------------------------------------------------------- | ---------------------------------------------- |
|
|
109
|
+
| `pnpm --filter @xmachines/play-svelte-spa-router-demo run dev` | Start Vite dev server (http://localhost:3008/) |
|
|
110
|
+
| `pnpm --filter @xmachines/play-svelte-spa-router-demo run build` | Build production bundle |
|
|
111
|
+
| `pnpm --filter @xmachines/play-svelte-spa-router-demo run preview` | Preview built bundle |
|
|
112
|
+
| `pnpm --filter @xmachines/play-svelte-spa-router-demo run test` | Run Vitest test suite |
|
|
113
|
+
| `pnpm --filter @xmachines/play-svelte-spa-router-demo run test:browser` | Run browser-focused Vitest suite |
|
|
114
|
+
|
|
115
|
+
## Verification
|
|
116
|
+
|
|
117
|
+
Use these checks to validate README claims against the current demo implementation:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
pnpm --filter @xmachines/play-svelte-spa-router-demo run test
|
|
121
|
+
pnpm --filter @xmachines/play-svelte-spa-router-demo run test:browser
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Expected result: library-pattern invariant tests pass and the browser demo suite validates startup rendering and auth navigation.
|
|
125
|
+
|
|
126
|
+
## Learn More
|
|
127
|
+
|
|
128
|
+
- [Svelte SPA Router](../../../api/@xmachines/play-svelte-spa-router/README.md)
|
|
129
|
+
- [Svelte](../../../api/@xmachines/play-svelte/README.md)
|