@xmachines/docs 3.0.0 → 5.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 +14 -20
- package/api/@xmachines/play/README.md +29 -118
- package/api/@xmachines/play/errors/README.md +8 -0
- package/api/@xmachines/play/{classes → errors/classes}/NonNullableError.md +6 -6
- package/api/@xmachines/play/{classes → errors/classes}/PlayError.md +36 -10
- package/api/@xmachines/play/index/README.md +75 -0
- package/api/@xmachines/play/index/functions/asCleanup.md +77 -0
- package/api/@xmachines/play/{functions → index/functions}/assertNonNullable.md +2 -2
- package/api/@xmachines/{play-actor → play/index}/functions/shallowEqualExcept.md +3 -3
- package/api/@xmachines/play/{type-aliases → index/type-aliases}/Cleanup.md +5 -5
- package/api/@xmachines/play/{type-aliases → index/type-aliases}/DisposeKey.md +2 -2
- package/api/@xmachines/play/{type-aliases → index/type-aliases}/PlayEvent.md +4 -4
- package/api/@xmachines/play/{variables → index/variables}/DISPOSE.md +2 -2
- package/api/@xmachines/play-actor/README.md +80 -231
- package/api/@xmachines/play-actor/interfaces/ActorEvent.md +18 -0
- package/api/@xmachines/play-actor/interfaces/PlayActor.md +73 -0
- package/api/@xmachines/play-atom/README.md +281 -0
- package/api/@xmachines/play-atom/functions/watchAtom.md +79 -0
- package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +16 -0
- package/api/@xmachines/play-atom/interfaces/Atom.md +149 -0
- package/api/@xmachines/play-atom/interfaces/AtomObserver.md +25 -0
- package/api/@xmachines/play-atom/interfaces/AtomOptions.md +33 -0
- package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +23 -0
- package/api/@xmachines/play-atom/interfaces/BaseAtom.md +97 -0
- package/api/@xmachines/play-atom/interfaces/CreateAtom.md +91 -0
- package/api/@xmachines/play-atom/interfaces/Readable.md +93 -0
- package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +108 -0
- package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +13 -0
- package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +32 -0
- package/api/@xmachines/{play-signals → play-atom}/type-aliases/Cleanup.md +5 -5
- package/api/@xmachines/play-atom/variables/createAsyncAtom.md +42 -0
- package/api/@xmachines/play-atom/variables/createAtom.md +18 -0
- package/api/@xmachines/play-atom/variables/createWritableAtom.md +70 -0
- package/api/@xmachines/play-dom/README.md +44 -52
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +17 -16
- package/api/@xmachines/play-dom/functions/asCleanup.md +77 -0
- package/api/@xmachines/play-dom/functions/createPlayUI.md +4 -4
- package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +3 -3
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +6 -6
- package/api/@xmachines/play-dom/type-aliases/Cleanup.md +4 -4
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +29 -12
- package/api/@xmachines/play-dom-router/README.md +83 -83
- package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +24 -23
- package/api/@xmachines/play-dom-router/{interfaces → classes}/RouteMap.md +42 -7
- package/api/@xmachines/{play → play-dom-router}/functions/asCleanup.md +5 -6
- package/api/@xmachines/play-dom-router/functions/connectRouter.md +3 -8
- package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +9 -3
- package/api/@xmachines/play-dom-router/functions/createRouter.md +8 -14
- package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +5 -9
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +70 -26
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +11 -9
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +24 -21
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +36 -23
- package/api/@xmachines/play-dom-router/type-aliases/Cleanup.md +4 -4
- package/api/@xmachines/play-dom-router/variables/DISPOSE.md +2 -2
- package/api/@xmachines/play-pattern/README.md +115 -0
- package/api/@xmachines/play-pattern/functions/buildPath.md +46 -0
- package/api/@xmachines/play-pattern/functions/createPatternCache.md +47 -0
- package/api/@xmachines/play-pattern/functions/getIndexKey.md +30 -0
- package/api/@xmachines/play-pattern/functions/isDotSegment.md +40 -0
- package/api/@xmachines/play-pattern/functions/parsePattern.md +28 -0
- package/api/@xmachines/play-pattern/interfaces/GroupPart.md +15 -0
- package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +14 -0
- package/api/@xmachines/play-pattern/interfaces/ParamPart.md +21 -0
- package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +19 -0
- package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +23 -0
- package/api/@xmachines/play-pattern/interfaces/PatternCache.md +65 -0
- package/api/@xmachines/play-pattern/interfaces/PatternParam.md +15 -0
- package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +74 -0
- package/api/@xmachines/play-pattern/type-aliases/PathParams.md +15 -0
- package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +11 -0
- package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +9 -0
- package/api/@xmachines/play-react/README.md +46 -58
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +14 -10
- package/api/@xmachines/play-react/functions/useActor.md +1 -1
- package/api/@xmachines/play-react/functions/useAtomEffect.md +103 -0
- package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +11 -11
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +6 -6
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +4 -4
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +8 -8
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-react/variables/ActorProvider.md +2 -2
- package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-react/variables/schema.md +52 -0
- package/api/@xmachines/play-react-router/README.md +23 -51
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +24 -23
- package/api/@xmachines/play-react-router/classes/RouteMap.md +18 -12
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +11 -8
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +16 -9
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +14 -12
- package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +29 -12
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-router/README.md +116 -197
- package/api/@xmachines/play-router/errors/README.md +15 -0
- package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +191 -0
- package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +175 -0
- package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +175 -0
- package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +200 -0
- package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +203 -0
- package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +175 -0
- package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +199 -0
- package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +192 -0
- package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +182 -0
- package/api/@xmachines/play-router/index/README.md +83 -0
- package/api/@xmachines/play-router/{classes → index/classes}/RouteMap.md +19 -13
- package/api/@xmachines/play-router/{classes → index/classes}/RouterBridgeBase.md +22 -20
- package/api/@xmachines/play-router/{functions → index/functions}/buildPlayRouteEvent.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/buildRouteTree.md +14 -4
- package/api/@xmachines/play-router/{functions → index/functions}/cleanFrameworkParams.md +3 -4
- package/api/@xmachines/play-router/index/functions/createPatternCache.md +47 -0
- package/api/@xmachines/play-router/{functions → index/functions}/createRouteMapFromTree.md +17 -10
- package/api/@xmachines/play-router/{functions → index/functions}/createRouterConnection.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/detectDuplicateRoutes.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/extractQuery.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/extractRouteParams.md +9 -8
- package/api/@xmachines/play-router/{functions → index/functions}/findRouteById.md +2 -2
- package/api/@xmachines/play-router/index/functions/findRouteByPath.md +48 -0
- package/api/@xmachines/play-router/{functions → index/functions}/isMountableBridge.md +2 -2
- package/api/@xmachines/play-router/index/functions/joinBasePath.md +38 -0
- package/api/@xmachines/play-router/{functions → index/functions}/mountKey.md +2 -2
- package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +43 -0
- package/api/@xmachines/play-router/{functions → index/functions}/openProviderBridge.md +14 -14
- package/api/@xmachines/play-router/index/functions/parsePattern.md +28 -0
- package/api/@xmachines/play-router/index/functions/pickOwnParams.md +41 -0
- package/api/@xmachines/play-router/{functions → index/functions}/repointProviderBridge.md +2 -2
- package/api/@xmachines/play-router/index/functions/resolveBasePath.md +51 -0
- package/api/@xmachines/play-router/index/functions/resolveFrameworkParams.md +49 -0
- package/api/@xmachines/play-router/index/functions/sanitizePathname.md +27 -0
- package/api/@xmachines/play-router/index/functions/splitLocation.md +37 -0
- package/api/@xmachines/play-router/index/functions/stripBasePath.md +44 -0
- package/api/@xmachines/play-router/{functions → index/functions}/validateRouteFormat.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/validateStateExists.md +2 -2
- package/api/@xmachines/play-router/index/interfaces/BasePathOptions.md +32 -0
- package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +13 -0
- package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +35 -0
- package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +52 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/LocationLike.md +6 -6
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/MountableRouterBridge.md +12 -12
- package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +30 -0
- package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +24 -0
- package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +23 -0
- package/api/@xmachines/play-router/index/interfaces/PatternCache.md +65 -0
- package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +130 -0
- package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +39 -0
- package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +14 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/ResolvedRoutePath.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/Routable.md +26 -0
- package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteInfo.md +11 -11
- package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +19 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteMapping.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +12 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteNode.md +13 -13
- package/api/@xmachines/play-router/index/interfaces/RouteObject.md +34 -0
- package/api/@xmachines/play-router/index/interfaces/RouteTree.md +27 -0
- package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +55 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouterBridge.md +17 -19
- package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +31 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouterConnection.md +10 -10
- package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +16 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/WindowLike.md +4 -4
- package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +53 -0
- package/api/@xmachines/play-router/index/type-aliases/RouteData.md +12 -0
- package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +31 -0
- package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +11 -0
- package/api/@xmachines/play-router/index/type-aliases/URLPatternLike.md +68 -0
- package/api/@xmachines/{play-xstate → play-router/index}/variables/DISPOSE.md +3 -3
- package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +18 -0
- package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +18 -0
- package/api/@xmachines/play-router/xstate/README.md +53 -0
- package/api/@xmachines/play-router/{functions → xstate/functions}/createRouteMap.md +11 -9
- package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +30 -0
- package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +35 -0
- package/api/@xmachines/play-router/{functions → xstate/functions}/getRoutableRoutes.md +6 -6
- package/api/@xmachines/play-router/{functions → xstate/functions}/getRouteMappings.md +7 -7
- package/api/@xmachines/play-router/{functions → xstate/functions}/getTransitionReachableRoutes.md +2 -2
- package/api/@xmachines/play-router/{functions → xstate/functions}/isRouteReachable.md +2 -2
- package/api/@xmachines/play-router/{functions → xstate/functions}/machineToGraph.md +2 -2
- package/api/@xmachines/play-router/xstate/functions/routeExists.md +26 -0
- package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +15 -0
- package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +17 -0
- package/api/@xmachines/play-router/{type-aliases → xstate/type-aliases}/MachineGraph.md +2 -2
- package/api/@xmachines/play-solid/README.md +21 -34
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +11 -11
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +8 -8
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +2 -2
- package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-solid/variables/schema.md +71 -0
- package/api/@xmachines/play-solid-router/README.md +34 -55
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +18 -12
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +33 -56
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +9 -8
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +38 -35
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +14 -12
- package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +29 -12
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
- package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-svelte/README.md +18 -29
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
- package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +12 -12
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +4 -4
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +14 -14
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +8 -8
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-svelte/variables/schema.md +16 -0
- package/api/@xmachines/play-svelte-spa-router/README.md +25 -44
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +18 -12
- package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +24 -23
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +3 -2
- package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +5 -9
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +11 -9
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/README.md +32 -50
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +18 -12
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +24 -23
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +3 -2
- package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +5 -9
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +15 -23
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-tanstack-react-router/README.md +25 -49
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +18 -12
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +22 -21
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +11 -8
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +16 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +14 -12
- package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +29 -12
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-tanstack-router/README.md +6 -4
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +26 -29
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +3 -3
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/README.md +29 -55
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +18 -12
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +52 -48
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +9 -8
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +14 -12
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +29 -12
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-url/README.md +75 -0
- package/api/@xmachines/play-url/errors/README.md +17 -0
- package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +200 -0
- package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +203 -0
- package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +199 -0
- package/api/@xmachines/play-url/index/README.md +72 -0
- package/api/@xmachines/play-url/index/functions/buildPath.md +46 -0
- package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +39 -0
- package/api/@xmachines/play-url/index/functions/createPatternCache.md +47 -0
- package/api/@xmachines/play-url/index/functions/getCandidates.md +29 -0
- package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +32 -0
- package/api/@xmachines/play-url/index/functions/getIndexKey.md +30 -0
- package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +36 -0
- package/api/@xmachines/play-url/index/functions/isDotSegment.md +40 -0
- package/api/@xmachines/{play-router → play-url/index}/functions/joinBasePath.md +3 -2
- package/api/@xmachines/{play-router → play-url/index}/functions/normalizeBasePath.md +2 -2
- package/api/@xmachines/play-url/index/functions/parsePattern.md +28 -0
- package/api/@xmachines/{play-router → play-url/index}/functions/pickOwnParams.md +4 -4
- package/api/@xmachines/{play-router → play-url/index}/functions/resolveBasePath.md +2 -2
- package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +49 -0
- package/api/@xmachines/play-url/index/functions/sanitizePathname.md +27 -0
- package/api/@xmachines/play-url/index/functions/splitLocation.md +37 -0
- package/api/@xmachines/{play-router → play-url/index}/functions/stripBasePath.md +2 -2
- package/api/@xmachines/{play-router → play-url/index}/interfaces/BasePathOptions.md +6 -10
- package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +21 -0
- package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +52 -0
- package/api/@xmachines/play-url/index/interfaces/GroupPart.md +15 -0
- package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +14 -0
- package/api/@xmachines/play-url/index/interfaces/ParamPart.md +21 -0
- package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +24 -0
- package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +23 -0
- package/api/@xmachines/play-url/index/interfaces/PatternCache.md +65 -0
- package/api/@xmachines/play-url/index/interfaces/PatternParam.md +15 -0
- package/api/@xmachines/{play-router → play-url/index}/interfaces/ResolvedBasePath.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +16 -0
- package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +74 -0
- package/api/@xmachines/play-url/index/type-aliases/PathParams.md +15 -0
- package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +11 -0
- package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +9 -0
- package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +22 -0
- package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +68 -0
- package/api/@xmachines/{play-router → play-url/index}/variables/NO_BASE_PATH.md +2 -2
- package/api/@xmachines/play-url/index/variables/URLPattern.md +21 -0
- package/api/@xmachines/play-view/README.md +176 -0
- package/api/@xmachines/play-view/errors/README.md +17 -0
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +192 -0
- package/api/@xmachines/play-view/index/README.md +55 -0
- package/api/@xmachines/{play-actor → play-view/index}/functions/attachRenderErrorHandler.md +6 -6
- package/api/@xmachines/{play-actor → play-view/index}/functions/composePlayState.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/createFailureLatch.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/createReportGuard.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/createViewStoreLifecycle.md +2 -2
- package/api/@xmachines/play-view/index/functions/guardContextWrites.md +19 -0
- package/api/@xmachines/{play-actor → play-view/index}/functions/refreshContextSubtree.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/reuseComposedState.md +3 -3
- package/api/@xmachines/{play-actor → play-view/index}/functions/sameViewInputs.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/toAtomState.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/typedSpec.md +2 -2
- package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +49 -0
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/BaseViewContextValue.md +12 -12
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/FailureLatch.md +6 -5
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/PlaySpec.md +8 -8
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ReportGuard.md +6 -6
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ReportGuardMessages.md +6 -6
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ResolveViewStoreOptions.md +5 -5
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ViewInputs.md +7 -7
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ViewStoreLifecycle.md +6 -5
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ViewStoreResolution.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/Viewable.md +18 -0
- package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +26 -0
- package/api/@xmachines/{play-actor → play-view/index}/variables/CONTEXT_STATE_KEY.md +2 -2
- package/api/@xmachines/play-vue/README.md +26 -40
- package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-vue/functions/useActor.md +1 -1
- package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +9 -9
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +8 -8
- package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue/variables/schema.md +71 -0
- package/api/@xmachines/play-vue-router/README.md +42 -84
- package/api/@xmachines/play-vue-router/errors/README.md +8 -0
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +193 -0
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +177 -0
- package/api/@xmachines/play-vue-router/index/README.md +20 -0
- package/api/@xmachines/play-vue-router/{classes → index/classes}/RouteMap.md +19 -13
- package/api/@xmachines/play-vue-router/{classes → index/classes}/VueRouterBridge.md +26 -45
- package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +130 -0
- package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +19 -0
- package/api/@xmachines/play-vue-router/{interfaces → index/interfaces}/RouteMapping.md +6 -6
- package/api/@xmachines/play-vue-router/{interfaces → index/interfaces}/RouterBridge.md +17 -19
- package/api/@xmachines/play-vue-router/{variables → index/variables}/PlayRouterProvider.md +26 -4
- package/api/@xmachines/play-xstate/README.md +195 -116
- package/api/@xmachines/play-xstate/errors/README.md +14 -0
- package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +199 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +198 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +169 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +197 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +176 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +207 -0
- package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +199 -0
- package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +203 -0
- package/api/@xmachines/play-xstate/index/README.md +38 -0
- package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +583 -0
- package/api/@xmachines/play-xstate/index/functions/compose.md +224 -0
- package/api/@xmachines/play-xstate/index/functions/definePlayer.md +158 -0
- package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +22 -0
- package/api/@xmachines/play-xstate/{interfaces → index/interfaces}/PlayerFactoryResumeOptions.md +3 -3
- package/api/@xmachines/play-xstate/{interfaces → index/interfaces}/PlayerOptions.md +10 -10
- package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +33 -0
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +39 -0
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +27 -0
- package/api/@xmachines/{play-router → play-xstate/index}/variables/DISPOSE.md +3 -3
- package/api/@xmachines/play-xstate/with-routing/README.md +46 -0
- package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +57 -0
- package/api/@xmachines/play-xstate/{functions → with-routing/functions}/deriveRoute.md +4 -4
- package/api/@xmachines/play-xstate/{functions → with-routing/functions}/formatPlayRouteTransitions.md +2 -2
- package/api/@xmachines/play-xstate/{functions → with-routing/functions}/isAbsoluteRoute.md +3 -3
- package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +36 -0
- package/api/@xmachines/play-xstate/{interfaces → with-routing/interfaces}/RouteContext.md +6 -6
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +34 -0
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +12 -0
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +31 -0
- package/api/@xmachines/play-xstate/{type-aliases → with-routing/type-aliases}/RouteMachineConfig.md +5 -5
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +11 -0
- package/api/@xmachines/play-xstate/{type-aliases → with-routing/type-aliases}/RouteStateNode.md +21 -7
- package/api/@xmachines/play-xstate/with-view/README.md +31 -0
- package/api/@xmachines/play-xstate/with-view/functions/withView.md +33 -0
- package/api/@xmachines/shared/README.md +10 -32
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +2 -2
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +2 -1
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
- package/api/README.md +4 -1
- package/api/llms.txt +18 -12
- package/contributing/architecture.md +157 -148
- package/contributing/configuration.md +100 -41
- package/contributing/deployment.md +112 -34
- package/contributing/development.md +103 -34
- package/contributing/migrating-to-play-atom.md +209 -0
- package/contributing/testing.md +136 -80
- package/examples/README.md +11 -9
- package/examples/basic-state-machine.md +4 -4
- package/examples/form-validation.md +4 -3
- package/examples/multi-router-integration.md +81 -59
- package/examples/routing-patterns.md +20 -19
- package/examples/traffic-light.md +17 -11
- package/guides/README.md +2 -1
- package/guides/actor-model.md +50 -32
- package/guides/atoms.md +264 -0
- package/guides/getting-started.md +91 -53
- package/guides/inspector.md +7 -7
- package/guides/routing.md +265 -0
- package/guides/state-machines.md +20 -21
- package/package.json +10 -9
- package/rfc/play.md +104 -60
- package/api/@xmachines/play-actor/classes/AbstractActor.md +0 -505
- package/api/@xmachines/play-actor/functions/guardContextWrites.md +0 -43
- package/api/@xmachines/play-actor/interfaces/BaseActorProviderProps.md +0 -48
- package/api/@xmachines/play-actor/interfaces/Routable.md +0 -14
- package/api/@xmachines/play-actor/interfaces/Viewable.md +0 -18
- package/api/@xmachines/play-dom/type-aliases/DisposablePlayUI.md +0 -36
- package/api/@xmachines/play-dom-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-dom-router/interfaces/DisposableBrowserHistory.md +0 -262
- package/api/@xmachines/play-dom-router/interfaces/DisposableVanillaRouter.md +0 -80
- package/api/@xmachines/play-react/functions/useSignalEffect.md +0 -77
- package/api/@xmachines/play-react/type-aliases/PlayRendererProps.md +0 -13
- package/api/@xmachines/play-react-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-react-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-router/functions/extractMachineRoutes.md +0 -29
- package/api/@xmachines/play-router/functions/findRouteByPath.md +0 -41
- package/api/@xmachines/play-router/functions/getNavigableRoutes.md +0 -35
- package/api/@xmachines/play-router/functions/getPatternParamNames.md +0 -24
- package/api/@xmachines/play-router/functions/getRequiredPatternParamNames.md +0 -36
- package/api/@xmachines/play-router/functions/resolveFrameworkParams.md +0 -51
- package/api/@xmachines/play-router/functions/routeExists.md +0 -26
- package/api/@xmachines/play-router/functions/sanitizePathname.md +0 -42
- package/api/@xmachines/play-router/interfaces/BuildPlayRouteEventOptions.md +0 -13
- package/api/@xmachines/play-router/interfaces/FrameworkParamsSource.md +0 -47
- package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +0 -15
- package/api/@xmachines/play-router/interfaces/MachineNodeData.md +0 -17
- package/api/@xmachines/play-router/interfaces/OpenProviderBridgeArgs.md +0 -28
- package/api/@xmachines/play-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +0 -135
- package/api/@xmachines/play-router/interfaces/PlayRouterProviderBaseProps.md +0 -33
- package/api/@xmachines/play-router/interfaces/RoutableActor.md +0 -65
- package/api/@xmachines/play-router/interfaces/RouteMapOptions.md +0 -13
- package/api/@xmachines/play-router/interfaces/RouteMatch.md +0 -12
- package/api/@xmachines/play-router/interfaces/RouteObject.md +0 -21
- package/api/@xmachines/play-router/interfaces/RouteTree.md +0 -21
- package/api/@xmachines/play-router/interfaces/RouteWatcherHandle.md +0 -55
- package/api/@xmachines/play-router/type-aliases/BaseRouteMapping.md +0 -13
- package/api/@xmachines/play-router/type-aliases/PlayRouterBridgeConstructor.md +0 -36
- package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +0 -11
- package/api/@xmachines/play-signals/README.md +0 -231
- package/api/@xmachines/play-signals/functions/watchSignal.md +0 -65
- package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +0 -36
- package/api/@xmachines/play-signals/interfaces/SignalComputed.md +0 -49
- package/api/@xmachines/play-signals/interfaces/SignalOptions.md +0 -37
- package/api/@xmachines/play-signals/interfaces/SignalState.md +0 -68
- package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +0 -97
- package/api/@xmachines/play-signals/namespaces/Signal/README.md +0 -22
- package/api/@xmachines/play-signals/namespaces/Signal/classes/Computed.md +0 -52
- package/api/@xmachines/play-signals/namespaces/Signal/classes/State.md +0 -72
- package/api/@xmachines/play-signals/namespaces/Signal/interfaces/Options.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/README.md +0 -21
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/classes/Watcher.md +0 -85
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/currentComputed.md +0 -13
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSinks.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSources.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSinks.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSources.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/untrack.md +0 -25
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/unwatched.md +0 -9
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/watched.md +0 -9
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isComputed.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isState.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isWatcher.md +0 -19
- package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +0 -33
- package/api/@xmachines/play-solid-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +0 -471
- package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +0 -13
- package/api/@xmachines/play-svelte-spa-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-svelte-spa-router/type-aliases/RoutableActor.md +0 -9
- package/api/@xmachines/play-sveltekit-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-sveltekit-router/type-aliases/RoutableActor.md +0 -9
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +0 -29
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +0 -31
- package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/RoutableActor.md +0 -13
- package/api/@xmachines/play-vue/interfaces/VisibilityProviderProps.md +0 -9
- package/api/@xmachines/play-vue/variables/getPlayViewContext.md +0 -39
- package/api/@xmachines/play-vue-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-vue-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +0 -135
- package/api/@xmachines/play-vue-router/interfaces/RouteMapOptions.md +0 -13
- package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +0 -13
- package/api/@xmachines/play-vue-router/type-aliases/VueRouteMap.md +0 -13
- package/api/@xmachines/play-vue-router/variables/VueRouteMap.md +0 -13
- package/api/@xmachines/play-xstate/classes/PlayerActor.md +0 -568
- package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +0 -50
- package/api/@xmachines/play-xstate/functions/composeGuards.md +0 -86
- package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +0 -72
- package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +0 -43
- package/api/@xmachines/play-xstate/functions/definePlayer.md +0 -78
- package/api/@xmachines/play-xstate/functions/eventMatches.md +0 -45
- package/api/@xmachines/play-xstate/functions/hasContext.md +0 -45
- package/api/@xmachines/play-xstate/functions/negateGuard.md +0 -67
- package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +0 -20
- package/api/@xmachines/play-xstate/interfaces/RouteObject.md +0 -17
- package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +0 -19
- package/api/@xmachines/play-xstate/type-aliases/Guard.md +0 -36
- package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +0 -23
- package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +0 -26
- package/api/@xmachines/play-xstate/type-aliases/RouteMetadata.md +0 -9
- package/guides/signals.md +0 -209
|
@@ -25,12 +25,13 @@ Used by framework adapters that have a React/Solid/Vue provider context. The `Pl
|
|
|
25
25
|
import { useEffect, useMemo } from "react";
|
|
26
26
|
import { createRouter, createRootRoute } from "@tanstack/react-router";
|
|
27
27
|
import { PlayRouterProvider, createRouteMapFromTree } from "@xmachines/play-tanstack-react-router";
|
|
28
|
-
import { extractMachineRoutes } from "@xmachines/play-router";
|
|
29
|
-
import { definePlayer } from "@xmachines/play-xstate";
|
|
28
|
+
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
29
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
30
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
30
31
|
import { defineRegistry } from "@xmachines/play-react";
|
|
31
32
|
import { authMachine, authCatalog } from "@xmachines/play-actor-shared";
|
|
32
33
|
|
|
33
|
-
const createPlayer = definePlayer({ machine: authMachine });
|
|
34
|
+
const createPlayer = definePlayer({ machine: authMachine, actor: compose(PlayerActor, withRouting) });
|
|
34
35
|
|
|
35
36
|
const { registry } = defineRegistry(authCatalog, {
|
|
36
37
|
components: { /* ...your components */ },
|
|
@@ -66,15 +67,16 @@ export function App() {
|
|
|
66
67
|
}
|
|
67
68
|
```
|
|
68
69
|
|
|
69
|
-
### React + React Router
|
|
70
|
+
### React + React Router 7/8 (`@xmachines/play-react-router`)
|
|
70
71
|
|
|
71
72
|
```typescript
|
|
72
73
|
import { createBrowserRouter, RouterProvider } from "react-router";
|
|
73
74
|
import { PlayRouterProvider, createRouteMapFromTree } from "@xmachines/play-react-router";
|
|
74
|
-
import { extractMachineRoutes } from "@xmachines/play-router";
|
|
75
|
-
import { definePlayer } from "@xmachines/play-xstate";
|
|
75
|
+
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
76
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
77
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
76
78
|
|
|
77
|
-
const createPlayer = definePlayer({ machine: authMachine });
|
|
79
|
+
const createPlayer = definePlayer({ machine: authMachine, actor: compose(PlayerActor, withRouting) });
|
|
78
80
|
|
|
79
81
|
function createAppRuntime() {
|
|
80
82
|
const actor = createPlayer();
|
|
@@ -116,11 +118,13 @@ export default function App() {
|
|
|
116
118
|
```typescript
|
|
117
119
|
import { Router, Route } from "@solidjs/router";
|
|
118
120
|
import { onCleanup } from "solid-js";
|
|
119
|
-
import { PlayRouterProvider
|
|
120
|
-
import {
|
|
121
|
-
import {
|
|
121
|
+
import { PlayRouterProvider } from "@xmachines/play-solid-router";
|
|
122
|
+
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
123
|
+
import { extractMachineRoutes, getRoutableRoutes } from "@xmachines/play-router/xstate";
|
|
124
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
125
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
122
126
|
|
|
123
|
-
const createPlayer = definePlayer({ machine: authMachine });
|
|
127
|
+
const createPlayer = definePlayer({ machine: authMachine, actor: compose(PlayerActor, withRouting) });
|
|
124
128
|
const actor = createPlayer();
|
|
125
129
|
actor.start();
|
|
126
130
|
|
|
@@ -164,11 +168,13 @@ export default function App() {
|
|
|
164
168
|
```typescript
|
|
165
169
|
import { createRouter, createRootRoute, createRoute, RouterProvider } from "@tanstack/solid-router";
|
|
166
170
|
import { onCleanup } from "solid-js";
|
|
167
|
-
import { PlayRouterProvider
|
|
168
|
-
import {
|
|
169
|
-
import {
|
|
171
|
+
import { PlayRouterProvider } from "@xmachines/play-tanstack-solid-router";
|
|
172
|
+
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
173
|
+
import { extractMachineRoutes, getRoutableRoutes } from "@xmachines/play-router/xstate";
|
|
174
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
175
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
170
176
|
|
|
171
|
-
const createPlayer = definePlayer({ machine: authMachine });
|
|
177
|
+
const createPlayer = definePlayer({ machine: authMachine, actor: compose(PlayerActor, withRouting) });
|
|
172
178
|
const actor = createPlayer();
|
|
173
179
|
actor.start();
|
|
174
180
|
|
|
@@ -222,7 +228,8 @@ export default function App() {
|
|
|
222
228
|
<script setup lang="ts">
|
|
223
229
|
import { h, inject } from "vue";
|
|
224
230
|
import { createRouter, createWebHistory } from "vue-router";
|
|
225
|
-
import { PlayRouterProvider
|
|
231
|
+
import { PlayRouterProvider } from "@xmachines/play-vue-router";
|
|
232
|
+
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
226
233
|
import { defineRegistry } from "@xmachines/play-vue";
|
|
227
234
|
import { authMachine, authCatalog } from "@xmachines/play-actor-shared";
|
|
228
235
|
|
|
@@ -258,18 +265,20 @@ Used by vanilla DOM and Svelte adapters. Call `connectRouter` directly after cre
|
|
|
258
265
|
### Vanilla DOM (`@xmachines/play-dom-router`)
|
|
259
266
|
|
|
260
267
|
```typescript
|
|
261
|
-
import {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
} from "@xmachines/play-
|
|
267
|
-
import { extractMachineRoutes } from "@xmachines/play-router";
|
|
268
|
-
import { definePlayer } from "@xmachines/play-xstate";
|
|
268
|
+
import { createBrowserHistory, createRouter, connectRouter } from "@xmachines/play-dom-router";
|
|
269
|
+
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
270
|
+
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
271
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
272
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
273
|
+
import { withView } from "@xmachines/play-xstate/view";
|
|
269
274
|
import { createPlayUI, defineRegistry } from "@xmachines/play-dom";
|
|
270
275
|
import { authMachine, authCatalog } from "@xmachines/play-actor-shared";
|
|
271
276
|
|
|
272
|
-
|
|
277
|
+
// The router needs `withRouting`, and the renderer below needs `withView`.
|
|
278
|
+
const createPlayer = definePlayer({
|
|
279
|
+
machine: authMachine,
|
|
280
|
+
actor: compose(PlayerActor, withRouting, withView),
|
|
281
|
+
});
|
|
273
282
|
const actor = createPlayer();
|
|
274
283
|
actor.start();
|
|
275
284
|
|
|
@@ -306,10 +315,15 @@ window.addEventListener("beforeunload", () => {
|
|
|
306
315
|
// lib/router.ts
|
|
307
316
|
import { defineRegistry } from "@xmachines/play-svelte";
|
|
308
317
|
import { authCatalog, authMachine } from "@xmachines/play-actor-shared";
|
|
309
|
-
import { definePlayer } from "@xmachines/play-xstate";
|
|
310
|
-
import {
|
|
311
|
-
|
|
312
|
-
|
|
318
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
319
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
320
|
+
import { withView } from "@xmachines/play-xstate/view";
|
|
321
|
+
import { connectRouter } from "@xmachines/play-sveltekit-router";
|
|
322
|
+
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
323
|
+
const createDemoPlayer = definePlayer({
|
|
324
|
+
machine: authMachine,
|
|
325
|
+
actor: compose(PlayerActor, withRouting, withView),
|
|
326
|
+
});
|
|
313
327
|
|
|
314
328
|
const { registry } = defineRegistry(authCatalog, {
|
|
315
329
|
components: {/* ...your Svelte components */},
|
|
@@ -337,11 +351,17 @@ export const disconnectRouter = connectRouter({ actor, routeMap });
|
|
|
337
351
|
|
|
338
352
|
```typescript
|
|
339
353
|
// lib/router.ts — identical pattern to SvelteKit, different import
|
|
340
|
-
import { connectRouter
|
|
341
|
-
import {
|
|
354
|
+
import { connectRouter } from "@xmachines/play-svelte-spa-router";
|
|
355
|
+
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
356
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
357
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
358
|
+
import { withView } from "@xmachines/play-xstate/view";
|
|
342
359
|
import { authMachine } from "@xmachines/play-actor-shared";
|
|
343
360
|
|
|
344
|
-
const createDemoPlayer = definePlayer({
|
|
361
|
+
const createDemoPlayer = definePlayer({
|
|
362
|
+
machine: authMachine,
|
|
363
|
+
actor: compose(PlayerActor, withRouting, withView),
|
|
364
|
+
});
|
|
345
365
|
|
|
346
366
|
export const actor = createDemoPlayer();
|
|
347
367
|
actor.start();
|
|
@@ -396,8 +416,8 @@ const disconnect = connectRouter({
|
|
|
396
416
|
```
|
|
397
417
|
|
|
398
418
|
The Svelte adapters take the same two prefix options. They need no `router`:
|
|
399
|
-
`@xmachines/play-svelte-spa-router` reads an optional `window`, and
|
|
400
|
-
`@xmachines/play-sveltekit-router` reads an optional `location`.
|
|
419
|
+
[`@xmachines/play-svelte-spa-router`](../api/@xmachines/play-svelte-spa-router/README.md) reads an optional `window`, and
|
|
420
|
+
[`@xmachines/play-sveltekit-router`](../api/@xmachines/play-sveltekit-router/README.md) reads an optional `location`.
|
|
401
421
|
|
|
402
422
|
### What the Prefix Changes
|
|
403
423
|
|
|
@@ -446,7 +466,7 @@ An actor never changes identity, so a segment of the prefix that _identifies_ th
|
|
|
446
466
|
For a host router that declares real route objects, ask for the list — and drop it again when the machine unloads:
|
|
447
467
|
|
|
448
468
|
```typescript
|
|
449
|
-
import { extractMachineRoutes, getRouteMappings } from "@xmachines/play-router";
|
|
469
|
+
import { extractMachineRoutes, getRouteMappings } from "@xmachines/play-router/xstate";
|
|
450
470
|
|
|
451
471
|
const tree = extractMachineRoutes(authMachine);
|
|
452
472
|
|
|
@@ -460,7 +480,7 @@ getRouteMappings(tree, { basePath: "/:machineId/play" });
|
|
|
460
480
|
// [{ stateId: "home", path: "/:machineId/play" }, ...]
|
|
461
481
|
```
|
|
462
482
|
|
|
463
|
-
> **
|
|
483
|
+
> **Param note.** Under a mount, [`@xmachines/play-vue-router`](../api/@xmachines/play-vue-router/README.md) and [`@xmachines/play-solid-router`](../api/@xmachines/play-solid-router/README.md) resolve each param from the stripped path with `URLPattern`, and not from the pre-parsed params of their framework: under a prefix the framework matched a route of the **host**, so those params describe the route of the machine never — and a collision of names carries the value of the host. With no prefix, both keep the parse of their framework whenever it reports at least one
|
|
464
484
|
> param the pattern declares, and every required one. A pattern whose params are ALL
|
|
465
485
|
> optional and a framework that reports none — `/settings/:section?` under a catch-all of
|
|
466
486
|
> the host — is settled by the PATH: `/settings` is the bare form of that pattern, so
|
|
@@ -468,35 +488,37 @@ getRouteMappings(tree, { basePath: "/:machineId/play" });
|
|
|
468
488
|
> value, such as `/settings/security`, still reaches the extraction, because only the
|
|
469
489
|
> extraction reads that value.
|
|
470
490
|
>
|
|
471
|
-
> These branches decide the CALLS of a navigation, and
|
|
472
|
-
>
|
|
473
|
-
>
|
|
474
|
-
> a
|
|
491
|
+
> These branches decide the CALLS of a navigation, and never the availability of the API.
|
|
492
|
+
> [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) carries `urlpattern-polyfill` as an ordinary dependency and it
|
|
493
|
+
> uses the native `URLPattern` when the runtime has one, so you install no polyfill and
|
|
494
|
+
> you load none. A BAD pattern is a question of the route map: `RouteMap` compiles each
|
|
495
|
+
> parameterized route in its constructor and throws an `InvalidRoutePatternError` there.
|
|
496
|
+
> The [routing guide](../guides/routing.md) states the pattern language.
|
|
475
497
|
|
|
476
498
|
## Adapter Summary
|
|
477
499
|
|
|
478
|
-
| Package
|
|
479
|
-
|
|
|
480
|
-
| `@xmachines/play-dom-router`
|
|
481
|
-
| `@xmachines/play-react-router`
|
|
482
|
-
| `@xmachines/play-tanstack-react-router` | TanStack React Router | Provider | `PlayRouterProvider`, `createRouteMapFromTree` |
|
|
483
|
-
| `@xmachines/play-solid-router`
|
|
484
|
-
| `@xmachines/play-tanstack-solid-router` | TanStack Solid Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
485
|
-
| `@xmachines/play-vue-router`
|
|
486
|
-
| `@xmachines/play-sveltekit-router`
|
|
487
|
-
| `@xmachines/play-svelte-spa-router`
|
|
500
|
+
| Package | Framework | Pattern | Key Import |
|
|
501
|
+
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------- | ------------------------------------------------------------------------- |
|
|
502
|
+
| [`@xmachines/play-dom-router`](../api/@xmachines/play-dom-router/README.md) | Vanilla DOM | `connectRouter` | `connectRouter`, `createRouteMap`, `createBrowserHistory`, `createRouter` |
|
|
503
|
+
| [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) | React Router 7/8 | Provider | `PlayRouterProvider`, `createRouteMapFromTree` |
|
|
504
|
+
| [`@xmachines/play-tanstack-react-router`](../api/@xmachines/play-tanstack-react-router/README.md) | TanStack React Router | Provider | `PlayRouterProvider`, `createRouteMapFromTree` |
|
|
505
|
+
| [`@xmachines/play-solid-router`](../api/@xmachines/play-solid-router/README.md) | SolidJS Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
506
|
+
| [`@xmachines/play-tanstack-solid-router`](../api/@xmachines/play-tanstack-solid-router/README.md) | TanStack Solid Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
507
|
+
| [`@xmachines/play-vue-router`](../api/@xmachines/play-vue-router/README.md) | Vue Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
508
|
+
| [`@xmachines/play-sveltekit-router`](../api/@xmachines/play-sveltekit-router/README.md) | SvelteKit | `connectRouter` | `connectRouter`, `createRouteMap` |
|
|
509
|
+
| [`@xmachines/play-svelte-spa-router`](../api/@xmachines/play-svelte-spa-router/README.md) | Svelte SPA Router | `connectRouter` | `connectRouter`, `createRouteMap` |
|
|
488
510
|
|
|
489
511
|
## Renderer Packages
|
|
490
512
|
|
|
491
513
|
Each framework also has a companion renderer package for the view layer:
|
|
492
514
|
|
|
493
|
-
| Package
|
|
494
|
-
|
|
|
495
|
-
| `@xmachines/play-dom`
|
|
496
|
-
| `@xmachines/play-react`
|
|
497
|
-
| `@xmachines/play-solid`
|
|
498
|
-
| `@xmachines/play-vue`
|
|
499
|
-
| `@xmachines/play-svelte` | Svelte 5 | `PlayRenderer`, `defineRegistry` |
|
|
515
|
+
| Package | Framework | Key API |
|
|
516
|
+
| ------------------------------------------------------------------- | ----------- | -------------------------------------------------- |
|
|
517
|
+
| [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | Vanilla DOM | `createPlayUI`, `createRenderer`, `defineRegistry` |
|
|
518
|
+
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | React | `PlayRenderer`, `defineRegistry` |
|
|
519
|
+
| [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | SolidJS | `PlayRenderer`, `defineRegistry` |
|
|
520
|
+
| [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | Vue 3 | `PlayRenderer`, `defineRegistry` |
|
|
521
|
+
| [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | Svelte 5 | `PlayRenderer`, `defineRegistry` |
|
|
500
522
|
|
|
501
523
|
## Architectural Invariants
|
|
502
524
|
|
|
@@ -504,9 +526,9 @@ All adapters preserve the 5 architectural invariants:
|
|
|
504
526
|
|
|
505
527
|
1. **Actor Authority (INV-01):** Machine guards validate all navigation
|
|
506
528
|
2. **Strict Separation (INV-02):** Business logic (machine) has zero framework imports
|
|
507
|
-
3. **
|
|
529
|
+
3. **Atom-Only Reactivity (INV-03):** atoms work identically in all adapters
|
|
508
530
|
4. **Passive Infrastructure (INV-04):** Router observes actor, never decides
|
|
509
|
-
5. **
|
|
531
|
+
5. **State-Driven Reset (INV-05):** Browser back/forward sends `play.route` events to actor
|
|
510
532
|
|
|
511
533
|
## Next Steps
|
|
512
534
|
|
|
@@ -6,7 +6,7 @@ How the `authMachine` uses `meta.route`, `play.route` events, `formatPlayRouteTr
|
|
|
6
6
|
|
|
7
7
|
XMachines inverts the usual routing model. The **actor** owns navigation — its guards decide which states are valid. The **router** is passive infrastructure that observes `actor.currentRoute` and keeps the browser URL in sync. This is **Actor Authority (INV-01)**.
|
|
8
8
|
|
|
9
|
-
Every routing interaction starts with a `play.route` event sent to the actor. If the machine's guards allow the transition, the state changes and `actor.currentRoute` updates. The router bridge sees the new
|
|
9
|
+
Every routing interaction starts with a `play.route` event sent to the actor. If the machine's guards allow the transition, the state changes and `actor.currentRoute` updates. The router bridge sees the new atom value and pushes a history entry. The URL never changes unless the actor approves.
|
|
10
10
|
|
|
11
11
|
## Key Concepts
|
|
12
12
|
|
|
@@ -64,7 +64,8 @@ Instead of hand-writing `play.route` event handlers for every routable state, wr
|
|
|
64
64
|
|
|
65
65
|
```typescript
|
|
66
66
|
import { setup } from "xstate";
|
|
67
|
-
import { definePlayer
|
|
67
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
68
|
+
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
68
69
|
import type { PlayRouteEvent } from "@xmachines/play-router";
|
|
69
70
|
|
|
70
71
|
interface AuthContext {
|
|
@@ -108,14 +109,16 @@ const authMachine = authSetup.createMachine(
|
|
|
108
109
|
```typescript
|
|
109
110
|
on: {
|
|
110
111
|
"play.route": [
|
|
111
|
-
{ target: ".home", guard: ({ event }) => event.to === "#home", reenter:
|
|
112
|
-
{ target: ".about", guard: ({ event }) => event.to === "#about", reenter:
|
|
113
|
-
{ target: ".login", guard: ({ event }) => event.to === "#login", reenter:
|
|
114
|
-
{ target: ".profile", guard: ({ event }) => event.to === "#profile", reenter:
|
|
112
|
+
{ target: ".home", guard: ({ event }) => event.to === "#home", reenter: false, actions: assign({ params, query }) },
|
|
113
|
+
{ target: ".about", guard: ({ event }) => event.to === "#about", reenter: false, actions: assign({ params, query }) },
|
|
114
|
+
{ target: ".login", guard: ({ event }) => event.to === "#login", reenter: false, actions: assign({ params, query }) },
|
|
115
|
+
{ target: ".profile", guard: ({ event }) => event.to === "#profile", reenter: false, actions: assign({ params, query }) },
|
|
115
116
|
],
|
|
116
117
|
}
|
|
117
118
|
```
|
|
118
119
|
|
|
120
|
+
`reenter` comes from the object form of `meta.route`, and the default is `false`. Declare `meta: { route: { path: "/about", reenter: true } }` for a state that must re-enter its own domain.
|
|
121
|
+
|
|
119
122
|
### `play.route` Events — Navigation
|
|
120
123
|
|
|
121
124
|
To navigate, send a `play.route` event with `to: "#stateId"`:
|
|
@@ -204,7 +207,10 @@ const authMachine = authSetup.createMachine(
|
|
|
204
207
|
## Complete Actor Usage
|
|
205
208
|
|
|
206
209
|
```typescript
|
|
207
|
-
const createPlayer = definePlayer({
|
|
210
|
+
const createPlayer = definePlayer({
|
|
211
|
+
machine: authMachine,
|
|
212
|
+
actor: compose(PlayerActor, withRouting),
|
|
213
|
+
});
|
|
208
214
|
const actor = createPlayer();
|
|
209
215
|
actor.start();
|
|
210
216
|
|
|
@@ -234,16 +240,11 @@ actor.stop();
|
|
|
234
240
|
|
|
235
241
|
## Vanilla Router Setup
|
|
236
242
|
|
|
237
|
-
To sync the browser URL with `actor.currentRoute`, use `@xmachines/play-dom-router
|
|
243
|
+
To sync the browser URL with `actor.currentRoute`, use [`@xmachines/play-dom-router`](../api/@xmachines/play-dom-router/README.md):
|
|
238
244
|
|
|
239
245
|
```typescript
|
|
240
|
-
import {
|
|
241
|
-
|
|
242
|
-
createRouter,
|
|
243
|
-
connectRouter,
|
|
244
|
-
createRouteMap,
|
|
245
|
-
} from "@xmachines/play-dom-router";
|
|
246
|
-
|
|
246
|
+
import { createBrowserHistory, createRouter, connectRouter } from "@xmachines/play-dom-router";
|
|
247
|
+
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
247
248
|
// createRouteMap extracts meta.route declarations from the machine
|
|
248
249
|
const routeMap = createRouteMap(authMachine);
|
|
249
250
|
|
|
@@ -251,7 +252,7 @@ const history = createBrowserHistory({ window });
|
|
|
251
252
|
const router = createRouter({ routeTree: authMachine, history });
|
|
252
253
|
|
|
253
254
|
// connectRouter handles all bidirectional sync:
|
|
254
|
-
// - actor.currentRoute
|
|
255
|
+
// - actor.currentRoute atom → browser URL (history.push)
|
|
255
256
|
// - browser URL changes → play.route event sent to actor
|
|
256
257
|
const disconnect = connectRouter({ actor, router, routeMap });
|
|
257
258
|
|
|
@@ -264,11 +265,11 @@ window.addEventListener("beforeunload", () => {
|
|
|
264
265
|
|
|
265
266
|
## React Router Setup
|
|
266
267
|
|
|
267
|
-
For React, use `@xmachines/play-react-router` or `@xmachines/play-tanstack-react-router
|
|
268
|
+
For React, use [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) or [`@xmachines/play-tanstack-react-router`](../api/@xmachines/play-tanstack-react-router/README.md):
|
|
268
269
|
|
|
269
270
|
```tsx
|
|
270
271
|
import { PlayRouterProvider, createRouteMapFromTree } from "@xmachines/play-tanstack-react-router";
|
|
271
|
-
import { extractMachineRoutes } from "@xmachines/play-router";
|
|
272
|
+
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
272
273
|
|
|
273
274
|
const routeTree = extractMachineRoutes(authMachine);
|
|
274
275
|
const routeMap = createRouteMapFromTree(routeTree);
|
|
@@ -284,7 +285,7 @@ function App() {
|
|
|
284
285
|
| ----------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
285
286
|
| **Actor Authority (INV-01)** | Guards on the machine validate every navigation. The router cannot change state directly. |
|
|
286
287
|
| **Passive Infrastructure (INV-04)** | The router observes `actor.currentRoute` — it never decides where to go. |
|
|
287
|
-
| **State-Driven Reset (INV-
|
|
288
|
+
| **State-Driven Reset (INV-05)** | Browser back/forward sends `play.route` events to the actor. History is driven by actor state. |
|
|
288
289
|
| **Strict Separation (INV-02)** | The machine has zero framework imports. Guards, actions, and context are pure TypeScript. |
|
|
289
290
|
|
|
290
291
|
## Next Steps
|
|
@@ -17,7 +17,9 @@ Applicable patterns:
|
|
|
17
17
|
|
|
18
18
|
```typescript
|
|
19
19
|
import { setup } from "xstate";
|
|
20
|
-
import { definePlayer,
|
|
20
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
21
|
+
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
22
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
21
23
|
|
|
22
24
|
// 1. Typed setup
|
|
23
25
|
const trafficSetup = setup({
|
|
@@ -70,13 +72,16 @@ const trafficMachine = trafficSetup.createMachine(
|
|
|
70
72
|
);
|
|
71
73
|
|
|
72
74
|
// 3. Player factory
|
|
73
|
-
const createPlayer = definePlayer({
|
|
75
|
+
const createPlayer = definePlayer({
|
|
76
|
+
machine: trafficMachine,
|
|
77
|
+
actor: compose(PlayerActor, withRouting),
|
|
78
|
+
});
|
|
74
79
|
|
|
75
80
|
// 4. Create and start actor
|
|
76
81
|
const actor = createPlayer();
|
|
77
82
|
actor.start();
|
|
78
83
|
|
|
79
|
-
// 5. Read current route
|
|
84
|
+
// 5. Read current route from the atom
|
|
80
85
|
console.log(actor.currentRoute.get()); // "/red"
|
|
81
86
|
|
|
82
87
|
// 6. Advance with domain events
|
|
@@ -105,9 +110,9 @@ actor.stop();
|
|
|
105
110
|
// Auto-generated by formatPlayRouteTransitions — you don't write this manually:
|
|
106
111
|
on: {
|
|
107
112
|
"play.route": [
|
|
108
|
-
{ target: ".red", guard: ({ event }) => event.to === "#red", reenter:
|
|
109
|
-
{ target: ".green", guard: ({ event }) => event.to === "#green", reenter:
|
|
110
|
-
{ target: ".yellow", guard: ({ event }) => event.to === "#yellow", reenter:
|
|
113
|
+
{ target: ".red", guard: ({ event }) => event.to === "#red", reenter: false, actions: assign({ params, query }) },
|
|
114
|
+
{ target: ".green", guard: ({ event }) => event.to === "#green", reenter: false, actions: assign({ params, query }) },
|
|
115
|
+
{ target: ".yellow", guard: ({ event }) => event.to === "#yellow", reenter: false, actions: assign({ params, query }) },
|
|
111
116
|
],
|
|
112
117
|
}
|
|
113
118
|
```
|
|
@@ -116,15 +121,16 @@ on: {
|
|
|
116
121
|
|
|
117
122
|
- Every routable state must have both `id` (the `#id` navigation target) and `meta.route` (the URL template).
|
|
118
123
|
- The machine's context must include `params` and `query` fields (both `Record<string, string>`), because `formatPlayRouteTransitions` assigns them on every `play.route` transition.
|
|
124
|
+
- `reenter` comes from the object form of `meta.route`, and the default is `false`. Declare `meta: { route: { path: "/red", reenter: true } }` for a state that must re-enter its own domain.
|
|
119
125
|
|
|
120
|
-
## `actor.currentRoute`
|
|
126
|
+
## The `actor.currentRoute` atom
|
|
121
127
|
|
|
122
|
-
`actor.currentRoute` is a `
|
|
128
|
+
`actor.currentRoute` is a `ReadonlyAtom<string | null>` derived from the active state's `meta.route` template and `context.params`. A route atom lets a router bridge observe URL changes reactively without polling.
|
|
123
129
|
|
|
124
130
|
```typescript
|
|
125
|
-
import {
|
|
131
|
+
import { watchAtom } from "@xmachines/play-atom";
|
|
126
132
|
|
|
127
|
-
const unwatch =
|
|
133
|
+
const unwatch = watchAtom(actor.currentRoute, () => {
|
|
128
134
|
console.log("URL changed to:", actor.currentRoute.get());
|
|
129
135
|
});
|
|
130
136
|
|
|
@@ -136,7 +142,7 @@ unwatch();
|
|
|
136
142
|
|
|
137
143
|
- **`meta.route`**: Marks a state as routable. The value is a URL template (e.g. `"/profile/:username"`).
|
|
138
144
|
- **`formatPlayRouteTransitions`**: Utility that auto-generates `play.route` handlers from `id` + `meta.route` pairs. Wrap your machine config before passing to `createMachine`.
|
|
139
|
-
- **`actor.currentRoute`**:
|
|
145
|
+
- **`actor.currentRoute`**: a computed atom containing the resolved URL for the active state.
|
|
140
146
|
- **`play.route` events**: Navigation events with a `to: "#stateId"` target. Use `to: "#red"` (state ID), not `to: "/red"` (URL path).
|
|
141
147
|
|
|
142
148
|
## Next Steps
|
package/guides/README.md
CHANGED
|
@@ -12,7 +12,8 @@ Background reading that explains the _why_ behind XMachines design decisions.
|
|
|
12
12
|
|
|
13
13
|
- **[Understanding State Machines](state-machines.md)** — What finite state machines are, how `meta.route` and `meta.view` extend them, and why they replace boolean flags and component-level routing logic
|
|
14
14
|
- **[Understanding the Actor Model](actor-model.md)** — The actor/infrastructure split, why the machine has zero framework imports, and how the reset invariant works
|
|
15
|
-
- **[Understanding
|
|
15
|
+
- **[Understanding Routing](routing.md)** — The URLPattern grammar that a `meta.route` path declares, the prefix rule that decides every optional route, and the three invariants that every router adapter follows
|
|
16
|
+
- **[Understanding Atoms](atoms.md)** — The atom primitives (`createAtom`, `createWritableAtom`, `watchAtom`), why XMachines uses them instead of observables, and the architectural invariants they enforce
|
|
16
17
|
|
|
17
18
|
## Tooling
|
|
18
19
|
|
package/guides/actor-model.md
CHANGED
|
@@ -14,12 +14,12 @@ Every XMachines application has exactly two roles:
|
|
|
14
14
|
|
|
15
15
|
**Infrastructure** — the runtime environment. It reflects actor state into the world and forwards world events to the actor. It has no opinion on whether a transition is valid.
|
|
16
16
|
|
|
17
|
-
The boundary between them is enforced by the
|
|
17
|
+
The boundary between them is enforced by the atom protocol: the actor exposes `Atom` and `ReadonlyAtom` properties; infrastructure observes them. The actor never calls into infrastructure; infrastructure never mutates actor state directly.
|
|
18
18
|
|
|
19
19
|
```
|
|
20
20
|
Actor (business logic)
|
|
21
21
|
│
|
|
22
|
-
│ emits
|
|
22
|
+
│ emits atoms: state, and currentRoute / currentView from its capabilities
|
|
23
23
|
▼
|
|
24
24
|
Infrastructure (runtime adapters)
|
|
25
25
|
├── Router Bridge — reflects currentRoute into the URL bar
|
|
@@ -33,20 +33,29 @@ Infrastructure → actor: only via actor.send({ type: "..." })
|
|
|
33
33
|
|
|
34
34
|
## What the actor owns
|
|
35
35
|
|
|
36
|
-
An actor in XMachines is a [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md) — a concrete class that extends XState's `Actor` class via [`
|
|
36
|
+
An actor in XMachines is a [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) — a concrete class that extends XState's `Actor` class via [`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md). It implements three reactive properties:
|
|
37
37
|
|
|
38
|
-
| Property | Type
|
|
39
|
-
| -------------------- |
|
|
40
|
-
| `actor.state` | `
|
|
41
|
-
| `actor.currentRoute` | `
|
|
42
|
-
| `actor.currentView` | `
|
|
38
|
+
| Property | Type | What it is |
|
|
39
|
+
| -------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
40
|
+
| `actor.state` | `Atom<Snapshot>` | The ONE atom the actor writes. Updated on every XState transition, with the full machine snapshot. |
|
|
41
|
+
| `actor.currentRoute` | `ReadonlyAtom<string \| null>` | DERIVED from `state`, through the active state node's `meta.route`. Needs the routing capability. |
|
|
42
|
+
| `actor.currentView` | `ReadonlyAtom<PlaySpec \| null>` | DERIVED from `state`. Holds the [`PlaySpec`](../api/@xmachines/play-view/index/interfaces/PlaySpec.md) that drives renderers. Needs the view capability. |
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Infrastructure reads all three and writes none of them.
|
|
45
|
+
|
|
46
|
+
**One write for each transition, and two derivations from it.** `state` receives the new
|
|
47
|
+
snapshot, and the engine then evaluates `currentRoute` and `currentView` from it in one
|
|
48
|
+
propagation. An observer that reads two of these atoms therefore never sees the new state
|
|
49
|
+
beside an old derivation, and the composition order of the capabilities decides nothing.
|
|
50
|
+
|
|
51
|
+
A derivation that fails reports through the `onError` option of the actor and keeps its
|
|
52
|
+
last good value. It throws never, because it runs inside the write and a throw would break
|
|
53
|
+
the transition for every other observer. See [Understanding Atoms](atoms.md).
|
|
45
54
|
|
|
46
55
|
The actor also owns:
|
|
47
56
|
|
|
48
57
|
- **Guards** — it decides whether a transition is valid. If a router sends a `play.route` event for a path the actor's guards reject, the actor does not transition. It then emits its current valid route back through `currentRoute`, and the router bridge overwrites the URL to match.
|
|
49
|
-
- **Error states** — structured errors ([`PlayError`](../api/@xmachines/play/classes/PlayError.md)) are part of the actor's state graph, not thrown into the environment.
|
|
58
|
+
- **Error states** — structured errors ([`PlayError`](../api/@xmachines/play/errors/classes/PlayError.md)) are part of the actor's state graph, not thrown into the environment.
|
|
50
59
|
- **Initial route** — `actor.initialRoute` is the route the actor starts in. Router adapters use this for initial navigation, not the browser's current URL.
|
|
51
60
|
|
|
52
61
|
---
|
|
@@ -58,7 +67,7 @@ Infrastructure owns everything that touches the environment:
|
|
|
58
67
|
- **Pushing URLs**: reading `actor.currentRoute` and calling `history.pushState()` or a router's navigation API.
|
|
59
68
|
- **Forwarding navigation events**: listening to `popstate`, `routeChange`, or equivalent, then calling `actor.send({ type: "play.route", to: path })`.
|
|
60
69
|
- **Rendering**: reading `actor.currentView` and projecting the spec through framework components.
|
|
61
|
-
- **Lifecycle**: connecting on mount, disconnecting on unmount, explicitly cleaning up
|
|
70
|
+
- **Lifecycle**: connecting on mount, disconnecting on unmount, explicitly cleaning up atom subscriptions.
|
|
62
71
|
|
|
63
72
|
Infrastructure does **not**:
|
|
64
73
|
|
|
@@ -77,7 +86,7 @@ If a user navigates directly to `/admin` in the browser but the actor's guards r
|
|
|
77
86
|
1. Receives `{ type: "play.route", to: "/admin" }` from the router bridge.
|
|
78
87
|
2. Evaluates its guards. The guard fails.
|
|
79
88
|
3. Does not transition. It remains in its current state (e.g., `/login`).
|
|
80
|
-
4. `actor.currentRoute` still
|
|
89
|
+
4. `actor.currentRoute` still holds `"/login"`.
|
|
81
90
|
5. The router bridge, watching `currentRoute`, calls its `navigateRouter("/login")` method.
|
|
82
91
|
6. The URL bar resets to `/login`.
|
|
83
92
|
|
|
@@ -87,17 +96,19 @@ This is why the invariant is called **State-Driven Reset** in the Play RFC.
|
|
|
87
96
|
|
|
88
97
|
---
|
|
89
98
|
|
|
90
|
-
## [`
|
|
99
|
+
## [`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md) — the enforced contract
|
|
100
|
+
|
|
101
|
+
[`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md) (from [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md)) is the contract that all actor implementations satisfy. It is an INTERFACE, and it names no state machine library.
|
|
91
102
|
|
|
92
|
-
[`
|
|
103
|
+
An adapter extends the actor class of its own engine. [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) of [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) extends `Actor` of XState, which means:
|
|
93
104
|
|
|
94
105
|
- XState's inspection API works ([`@statelyai/inspect`](https://stately.ai/docs/inspector) — see [Inspecting a Running Actor](inspector.md))
|
|
95
106
|
- XState DevTools attach to actors normally
|
|
96
107
|
- The full XState ecosystem (testing utilities, visualization) is compatible
|
|
97
108
|
|
|
98
|
-
[`
|
|
109
|
+
[`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md) asks for two members: a reactive `state` property of type `Atom<TSnapshot>`, and a typed `send`. `state` is the single point where the pull-based snapshot API of an engine is bridged to the push-based atom system.
|
|
99
110
|
|
|
100
|
-
The two optional capability interfaces — [`Routable`](../api/@xmachines/play-
|
|
111
|
+
The two optional capability interfaces — [`Routable`](../api/@xmachines/play-router/index/interfaces/Routable.md) and [`Viewable`](../api/@xmachines/play-view/index/interfaces/Viewable.md) — are deliberately separate:
|
|
101
112
|
|
|
102
113
|
- Not every actor needs routing (e.g., a background data-sync actor).
|
|
103
114
|
- Not every actor drives a view (e.g., a sub-actor composed inside a parent).
|
|
@@ -105,26 +116,33 @@ The two optional capability interfaces — [`Routable`](../api/@xmachines/play-a
|
|
|
105
116
|
An actor implements only the capabilities it actually uses:
|
|
106
117
|
|
|
107
118
|
```typescript
|
|
108
|
-
// Minimal actor:
|
|
109
|
-
class MinimalActor
|
|
110
|
-
state =
|
|
119
|
+
// Minimal actor: the contract alone, which is reactive state and send
|
|
120
|
+
class MinimalActor implements PlayActor<SomeSnapshot, SomeEvent> {
|
|
121
|
+
readonly state = createAtom<SomeSnapshot>(initial);
|
|
122
|
+
send(event: SomeEvent): void {
|
|
123
|
+
/* dispatch */
|
|
124
|
+
}
|
|
111
125
|
}
|
|
112
126
|
|
|
113
|
-
// Full actor:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
127
|
+
// Full actor: the contract, the routing and the view. It extends the actor class of
|
|
128
|
+
// its own engine, and `PlayActor` stays out of the inheritance.
|
|
129
|
+
class PlayerActor
|
|
130
|
+
extends Actor<SomeMachine>
|
|
131
|
+
implements PlayActor<SomeSnapshot, SomeEvent>, Routable, Viewable
|
|
132
|
+
{
|
|
133
|
+
readonly state = createAtom(this.getSnapshot());
|
|
134
|
+
readonly currentRoute = createAtom(() => deriveRoute(this.state.get()));
|
|
135
|
+
readonly currentView = createAtom((): PlaySpec | null => deriveView(this.state.get()));
|
|
118
136
|
}
|
|
119
137
|
```
|
|
120
138
|
|
|
121
|
-
In practice you never write [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md) yourself — [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) from [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) creates one from your machine definition.
|
|
139
|
+
In practice you never write [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) yourself — [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) from [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) creates one from your machine definition.
|
|
122
140
|
|
|
123
141
|
---
|
|
124
142
|
|
|
125
|
-
## [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) — the factory builder
|
|
143
|
+
## [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) — the factory builder
|
|
126
144
|
|
|
127
|
-
[`definePlayer({ machine })`](../api/@xmachines/play-xstate/functions/definePlayer.md) is the primary entry point for creating actors:
|
|
145
|
+
[`definePlayer({ machine })`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) is the primary entry point for creating actors:
|
|
128
146
|
|
|
129
147
|
```typescript
|
|
130
148
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
@@ -137,7 +155,7 @@ const actor = createPlayer();
|
|
|
137
155
|
actor.start();
|
|
138
156
|
```
|
|
139
157
|
|
|
140
|
-
[`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) returns a **factory function**, not an actor. This is intentional: it lets you create multiple independent instances (e.g., one per test, one per user session) without re-processing the machine definition each time.
|
|
158
|
+
[`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) returns a **factory function**, not an actor. This is intentional: it lets you create multiple independent instances (e.g., one per test, one per user session) without re-processing the machine definition each time.
|
|
141
159
|
|
|
142
160
|
The factory accepts optional `input` (initial context overrides) and a `restore` snapshot (for resumable sessions):
|
|
143
161
|
|
|
@@ -152,7 +170,7 @@ const actor = createPlayer(undefined, { snapshot }); // restored from snapshot
|
|
|
152
170
|
|
|
153
171
|
The machine definition — the `setup().createMachine(...)` call — is pure TypeScript with zero runtime dependencies on browsers, routers, or UI frameworks. This is not a convention; it is enforced by the dependency graph.
|
|
154
172
|
|
|
155
|
-
[`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) depends on `xstate` and [`@xmachines/play-
|
|
173
|
+
[`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) depends on `xstate` and [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md). It does not depend on React, Vue, any router library, or any browser API. Your machine file inherits those same boundaries.
|
|
156
174
|
|
|
157
175
|
This has concrete practical benefits:
|
|
158
176
|
|
|
@@ -172,9 +190,9 @@ The Play RFC captures the actor/infrastructure split in a single statement:
|
|
|
172
190
|
|
|
173
191
|
## See also
|
|
174
192
|
|
|
175
|
-
- [Understanding
|
|
193
|
+
- [Understanding Atoms](atoms.md) — how the actor communicates with infrastructure
|
|
176
194
|
- [Understanding State Machines](state-machines.md) — how the machine definition drives actor behavior
|
|
177
195
|
- [Getting Started](getting-started.md) — hands-on walkthrough creating and starting an actor
|
|
178
|
-
- [@xmachines/play-actor](../api/@xmachines/play-actor/README.md) — API reference for [`
|
|
179
|
-
- [@xmachines/play-xstate](../api/@xmachines/play-xstate/README.md) — API reference for [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) and [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md)
|
|
196
|
+
- [@xmachines/play-actor](../api/@xmachines/play-actor/README.md) — API reference for [`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md)
|
|
197
|
+
- [@xmachines/play-xstate](../api/@xmachines/play-xstate/README.md) — API reference for [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) and [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md)
|
|
180
198
|
- [Play RFC](../rfc/play.md) — complete architectural specification
|