@xmachines/docs 7.0.0 → 8.0.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/api/@xmachines/core/cache/functions/createLruCache.md +1 -1
- package/api/@xmachines/core/cache/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/core/errors/classes/BaseError.md +11 -11
- package/api/@xmachines/core/errors/classes/DisposeConflictError.md +11 -11
- package/api/@xmachines/core/utils/functions/asDisposable.md +2 -2
- package/api/@xmachines/core/utils/functions/createNullRecord.md +1 -1
- package/api/@xmachines/core/utils/functions/createWarnOnce.md +1 -1
- package/api/@xmachines/core/utils/functions/describeValue.md +1 -1
- package/api/@xmachines/core/utils/functions/isError.md +1 -1
- package/api/@xmachines/core/utils/functions/isThenable.md +1 -1
- package/api/@xmachines/core/utils/functions/releaseQuietly.md +1 -1
- package/api/@xmachines/core/utils/functions/rethrowLater.md +1 -1
- package/api/@xmachines/core/utils/functions/safeString.md +1 -1
- package/api/@xmachines/core/utils/functions/shallowEqualExcept.md +1 -1
- package/api/@xmachines/core/utils/type-aliases/DisposeKey.md +1 -1
- package/api/@xmachines/core/utils/type-aliases/DisposeMember.md +1 -1
- package/api/@xmachines/core/utils/variables/DISPOSE.md +1 -1
- package/api/@xmachines/play/README.md +1 -1
- package/api/@xmachines/play/errors/classes/NonNullableError.md +11 -11
- package/api/@xmachines/play/errors/classes/PlayError.md +11 -11
- package/api/@xmachines/play/index/functions/assertNonNullable.md +1 -1
- package/api/@xmachines/play/index/type-aliases/PlayEvent.md +4 -4
- package/api/@xmachines/play-actor/README.md +3 -3
- package/api/@xmachines/play-actor/interfaces/ActorEvent.md +4 -4
- package/api/@xmachines/play-actor/interfaces/PlayActor.md +6 -6
- package/api/@xmachines/play-atom/README.md +6 -4
- package/api/@xmachines/play-atom/functions/watchAtom.md +1 -1
- package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +4 -4
- package/api/@xmachines/play-atom/interfaces/Atom.md +6 -6
- package/api/@xmachines/play-atom/interfaces/AtomObserver.md +6 -6
- package/api/@xmachines/play-atom/interfaces/AtomOptions.md +4 -4
- package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +2 -2
- package/api/@xmachines/play-atom/interfaces/BaseAtom.md +4 -4
- package/api/@xmachines/play-atom/interfaces/CreateAtom.md +3 -3
- package/api/@xmachines/play-atom/interfaces/Readable.md +4 -4
- package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +4 -4
- package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +1 -1
- package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +1 -1
- package/api/@xmachines/play-atom/variables/createAsyncAtom.md +1 -1
- package/api/@xmachines/play-atom/variables/createAtom.md +1 -1
- package/api/@xmachines/play-atom/variables/createWritableAtom.md +1 -1
- package/api/@xmachines/play-dom/README.md +8 -5
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +4 -4
- package/api/@xmachines/play-dom/functions/createPlayUI.md +1 -1
- package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +12 -12
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +5 -5
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +15 -15
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
- package/api/@xmachines/play-dom-router/README.md +5 -3
- package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +7 -7
- package/api/@xmachines/play-dom-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +1 -1
- package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
- package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +16 -16
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +16 -16
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +10 -10
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +6 -6
- package/api/@xmachines/play-pattern/README.md +1 -1
- package/api/@xmachines/play-pattern/functions/buildPath.md +1 -1
- package/api/@xmachines/play-pattern/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-pattern/functions/getIndexKey.md +1 -1
- package/api/@xmachines/play-pattern/functions/isDotSegment.md +1 -1
- package/api/@xmachines/play-pattern/functions/parsePattern.md +1 -1
- package/api/@xmachines/play-pattern/interfaces/GroupPart.md +6 -6
- package/api/@xmachines/play-pattern/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +5 -5
- package/api/@xmachines/play-pattern/interfaces/ParamPart.md +9 -9
- package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-pattern/interfaces/PatternParam.md +6 -6
- package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PathParams.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +1 -1
- package/api/@xmachines/play-react/README.md +5 -5
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
- package/api/@xmachines/play-react/functions/useActor.md +1 -1
- package/api/@xmachines/play-react/functions/useAtomEffect.md +1 -1
- package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +10 -10
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +8 -8
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +6 -6
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-react/variables/ActorProvider.md +1 -1
- 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-router/README.md +1 -1
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +7 -7
- package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-router/README.md +15 -14
- package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +11 -11
- package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +13 -13
- package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +11 -11
- package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +13 -13
- package/api/@xmachines/play-router/index/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-router/index/classes/RouterBridgeBase.md +7 -7
- package/api/@xmachines/play-router/index/functions/buildPlayRouteEvent.md +1 -1
- package/api/@xmachines/play-router/index/functions/buildRouteTree.md +1 -1
- package/api/@xmachines/play-router/index/functions/cleanFrameworkParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-router/index/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-router/index/functions/createRouterConnection.md +1 -1
- package/api/@xmachines/play-router/index/functions/detectDuplicateRoutes.md +1 -1
- package/api/@xmachines/play-router/index/functions/extractQuery.md +1 -1
- package/api/@xmachines/play-router/index/functions/extractRouteParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/findRouteById.md +1 -1
- package/api/@xmachines/play-router/index/functions/findRouteByPath.md +1 -1
- package/api/@xmachines/play-router/index/functions/isMountableBridge.md +1 -1
- package/api/@xmachines/play-router/index/functions/joinBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/mountKey.md +1 -1
- package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/openProviderBridge.md +5 -5
- package/api/@xmachines/play-router/index/functions/parsePattern.md +1 -1
- package/api/@xmachines/play-router/index/functions/pickOwnParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/repointProviderBridge.md +1 -1
- package/api/@xmachines/play-router/index/functions/resolveBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/resolveFrameworkParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-router/index/functions/splitLocation.md +1 -1
- package/api/@xmachines/play-router/index/functions/stripBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/validateRouteFormat.md +1 -1
- package/api/@xmachines/play-router/index/functions/validateStateExists.md +1 -1
- package/api/@xmachines/play-router/index/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +9 -9
- package/api/@xmachines/play-router/index/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/LocationLike.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +10 -10
- package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +11 -11
- package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/ResolvedRoutePath.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/Routable.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteInfo.md +10 -10
- package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteNode.md +12 -12
- package/api/@xmachines/play-router/index/interfaces/RouteObject.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/RouteTree.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteData.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/URLPatternLike.md +3 -3
- package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +1 -1
- package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +1 -1
- package/api/@xmachines/play-router/xstate/README.md +5 -2
- package/api/@xmachines/play-router/xstate/functions/createRouteMap.md +2 -2
- package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +5 -5
- package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getRoutableRoutes.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getRouteMappings.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getTransitionReachableRoutes.md +7 -8
- package/api/@xmachines/play-router/xstate/functions/isRouteReachable.md +8 -9
- package/api/@xmachines/play-router/xstate/functions/machineToGraph.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/routeExists.md +1 -1
- package/api/@xmachines/play-router/xstate/interfaces/Graph.md +26 -0
- package/api/@xmachines/play-router/xstate/interfaces/GraphEdge.md +22 -0
- package/api/@xmachines/play-router/xstate/interfaces/GraphNode.md +21 -0
- package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +6 -6
- package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +7 -7
- package/api/@xmachines/play-router/xstate/type-aliases/MachineGraph.md +4 -6
- package/api/@xmachines/play-solid/README.md +3 -3
- 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 +10 -10
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +1 -1
- 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-router/README.md +4 -6
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +7 -7
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
- package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-svelte/README.md +3 -3
- 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 +10 -10
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +6 -6
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/README.md +6 -3
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +7 -7
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +10 -10
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
- 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 +3 -2
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +7 -7
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +11 -11
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-sveltekit-router/interfaces/SvelteKitRouterBridgeOptions.md +8 -8
- package/api/@xmachines/play-sveltekit-router/type-aliases/ShallowNavigation.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/README.md +3 -2
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +7 -7
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- 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 +1 -1
- package/api/@xmachines/play-tanstack-router/README.md +3 -2
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +7 -7
- 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 +6 -7
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +7 -7
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- 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 +1 -1
- package/api/@xmachines/play-url/README.md +1 -1
- package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +12 -12
- package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +12 -12
- package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +13 -13
- package/api/@xmachines/play-url/index/functions/buildPath.md +1 -1
- package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
- package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +1 -1
- package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
- package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +1 -1
- package/api/@xmachines/play-url/index/functions/isDotSegment.md +1 -1
- package/api/@xmachines/play-url/index/functions/joinBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/parsePattern.md +1 -1
- package/api/@xmachines/play-url/index/functions/pickOwnParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/resolveBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-url/index/functions/splitLocation.md +1 -1
- package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
- package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +9 -9
- package/api/@xmachines/play-url/index/interfaces/GroupPart.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/ParamPart.md +9 -9
- package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-url/index/interfaces/PatternParam.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +7 -7
- package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PathParams.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +3 -3
- package/api/@xmachines/play-url/index/variables/NO_BASE_PATH.md +1 -1
- package/api/@xmachines/play-url/index/variables/URLPattern.md +1 -1
- package/api/@xmachines/play-view/README.md +4 -4
- package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +13 -13
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +12 -12
- package/api/@xmachines/play-view/errors/classes/ViewElementKeyCollisionError.md +13 -13
- package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +1 -1
- package/api/@xmachines/play-view/index/functions/bindStoreHandlers.md +1 -1
- package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
- package/api/@xmachines/play-view/index/functions/composeViews.md +1 -1
- package/api/@xmachines/play-view/index/functions/createActorProxy.md +1 -1
- package/api/@xmachines/play-view/index/functions/createRenderErrorBinding.md +1 -1
- package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
- package/api/@xmachines/play-view/index/functions/createViewSession.md +1 -1
- package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
- package/api/@xmachines/play-view/index/functions/forwardRenderError.md +1 -1
- package/api/@xmachines/play-view/index/functions/guardContextWrites.md +1 -1
- package/api/@xmachines/play-view/index/functions/refreshContextSubtree.md +1 -1
- package/api/@xmachines/play-view/index/functions/reuseComposedState.md +1 -1
- package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
- package/api/@xmachines/play-view/index/functions/typedSpec.md +1 -1
- package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ComposedView.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/HandlerFactory.md +4 -4
- package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +8 -8
- package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +4 -4
- package/api/@xmachines/play-view/index/interfaces/ViewMeta.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ViewSession.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ViewSessionOptions.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ViewSessionSnapshot.md +8 -8
- package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +4 -4
- package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ViewTree.md +6 -6
- package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/Viewable.md +4 -4
- package/api/@xmachines/play-view/index/type-aliases/StateUpdater.md +1 -1
- package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +1 -1
- package/api/@xmachines/play-view/index/variables/CONTEXT_STATE_KEY.md +1 -1
- package/api/@xmachines/play-vue/README.md +2 -2
- 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 +8 -8
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +1 -1
- 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 +4 -4
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue-router/README.md +1 -1
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +11 -11
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +11 -11
- package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +7 -7
- package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-xstate/README.md +63 -52
- package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +11 -11
- package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +11 -11
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +14 -14
- package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +13 -13
- package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +15 -15
- package/api/@xmachines/play-xstate/index/README.md +1 -1
- package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +201 -124
- package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
- package/api/@xmachines/play-xstate/index/functions/definePlayer.md +14 -10
- package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +6 -6
- package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +4 -4
- package/api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md +9 -9
- package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +1 -1
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +1 -1
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +13 -5
- package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +26 -13
- package/api/@xmachines/play-xstate/with-routing/functions/isAbsoluteRoute.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteContext.md +8 -8
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +7 -7
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
- package/api/@xmachines/play-xstate/with-view/functions/withView.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutput.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutputFile.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 +4 -4
- package/api/@xmachines/shared/vite-aliases/functions/xmTestTarget.md +1 -1
- package/api/@xmachines/shared/vite-aliases/type-aliases/XmTestTarget.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +1 -1
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +6 -6
- package/contributing/architecture.md +13 -9
- package/contributing/configuration.md +24 -50
- package/contributing/deployment.md +128 -158
- package/contributing/development.md +6 -6
- package/contributing/migrating-to-play-atom.md +13 -1
- package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +1 -1
- package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
- package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
- package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Button.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Field.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Panel.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Button.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Field.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Panel.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Shell.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Button.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Field.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Panel.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Shell.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +1 -1
- package/examples/README.md +1 -1
- package/examples/basic-state-machine.md +19 -23
- package/examples/form-validation.md +43 -48
- package/examples/routing-patterns.md +30 -35
- package/examples/traffic-light.md +19 -21
- package/guides/actor-model.md +5 -6
- package/guides/getting-started.md +45 -51
- package/guides/inspector.md +52 -46
- package/guides/routing.md +4 -2
- package/guides/state-machines.md +80 -64
- package/guides/views.md +6 -4
- package/package.json +1 -1
- package/rfc/git.md +13 -5
- package/rfc/play.md +22 -18
- package/rfc/run.md +7 -4
|
@@ -16,27 +16,24 @@ Applicable patterns:
|
|
|
16
16
|
## Complete Code
|
|
17
17
|
|
|
18
18
|
```typescript
|
|
19
|
-
import { setup } from "xstate";
|
|
19
|
+
import { setup, types } from "xstate";
|
|
20
20
|
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
21
21
|
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
22
22
|
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
23
|
+
import type { PlayRouteEvent } from "@xmachines/play-router";
|
|
23
24
|
|
|
24
|
-
// 1. Typed setup
|
|
25
|
+
// 1. Typed setup. The events are a map from the type of each event to its payload.
|
|
25
26
|
const trafficSetup = setup({
|
|
26
|
-
|
|
27
|
-
context: {
|
|
27
|
+
schemas: {
|
|
28
|
+
context: types<{
|
|
28
29
|
params: Record<string, string>;
|
|
29
30
|
query: Record<string, string>;
|
|
31
|
+
}>(),
|
|
32
|
+
events: {
|
|
33
|
+
timer: types<void>(),
|
|
34
|
+
"play.route": types<Omit<PlayRouteEvent, "type">>(),
|
|
30
35
|
},
|
|
31
|
-
|
|
32
|
-
| { type: "timer" }
|
|
33
|
-
| {
|
|
34
|
-
type: "play.route";
|
|
35
|
-
to: string;
|
|
36
|
-
params?: Record<string, string>;
|
|
37
|
-
query?: Record<string, string>;
|
|
38
|
-
},
|
|
39
|
-
input: undefined,
|
|
36
|
+
meta: types<{ route?: string }>(),
|
|
40
37
|
},
|
|
41
38
|
});
|
|
42
39
|
|
|
@@ -55,17 +52,17 @@ const trafficMachine = trafficSetup.createMachine(
|
|
|
55
52
|
red: {
|
|
56
53
|
id: "red",
|
|
57
54
|
meta: { route: "/red" },
|
|
58
|
-
on: { timer: "green" },
|
|
55
|
+
on: { timer: { target: "green" } },
|
|
59
56
|
},
|
|
60
57
|
green: {
|
|
61
58
|
id: "green",
|
|
62
59
|
meta: { route: "/green" },
|
|
63
|
-
on: { timer: "yellow" },
|
|
60
|
+
on: { timer: { target: "yellow" } },
|
|
64
61
|
},
|
|
65
62
|
yellow: {
|
|
66
63
|
id: "yellow",
|
|
67
64
|
meta: { route: "/yellow" },
|
|
68
|
-
on: { timer: "red" },
|
|
65
|
+
on: { timer: { target: "red" } },
|
|
69
66
|
},
|
|
70
67
|
},
|
|
71
68
|
}),
|
|
@@ -110,9 +107,9 @@ actor.stop();
|
|
|
110
107
|
// Auto-generated by formatPlayRouteTransitions — you don't write this manually:
|
|
111
108
|
on: {
|
|
112
109
|
"play.route": [
|
|
113
|
-
{ target: ".red",
|
|
114
|
-
{ target: ".green",
|
|
115
|
-
{ target: ".yellow",
|
|
110
|
+
{ target: ".red", matches: { to: "#red" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
111
|
+
{ target: ".green", matches: { to: "#green" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
112
|
+
{ target: ".yellow", matches: { to: "#yellow" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
116
113
|
],
|
|
117
114
|
}
|
|
118
115
|
```
|
|
@@ -120,7 +117,8 @@ on: {
|
|
|
120
117
|
**Requirements:**
|
|
121
118
|
|
|
122
119
|
- Every routable state must have both `id` (the `#id` navigation target) and `meta.route` (the URL template).
|
|
123
|
-
- The machine's context must include `params` and `query` fields (both `Record<string, string>`), because `formatPlayRouteTransitions`
|
|
120
|
+
- The machine's context must include `params` and `query` fields (both `Record<string, string>`), because `formatPlayRouteTransitions` writes them on every `play.route` transition.
|
|
121
|
+
- Each generated transition is a config object: `matches` selects the event by its `to` field, and `context` returns the patch that XState merges into the context. The list holds the generated transitions first, and a `play.route` transition of your own last, as the fallback. The config types of XState 6 declare one transition for each event, and its runtime reads a list in its order.
|
|
124
122
|
- `reenter` comes from the object form of `meta.route`, and the default is `false`. Declare `meta: { route: { path: "/red", reenter: true } }` for a state whose route must also re-enter the domain of the transition. See [Re-entry on a navigation](../guides/routing.md#re-entry-on-a-navigation).
|
|
125
123
|
|
|
126
124
|
## The `actor.currentRoute` atom
|
|
@@ -151,6 +149,6 @@ unwatch();
|
|
|
151
149
|
|
|
152
150
|
## Next Steps
|
|
153
151
|
|
|
154
|
-
- **[Form Validation Example](form-validation.md)** — Context
|
|
152
|
+
- **[Form Validation Example](form-validation.md)** — Context patches and guards in transition functions
|
|
155
153
|
- **[Routing Patterns](routing-patterns.md)** — Parameter routes, relative routes, and `always` auth guards
|
|
156
154
|
- **[Play RFC](../rfc/play.md)** — Complete architectural specification
|
package/guides/actor-model.md
CHANGED
|
@@ -102,8 +102,7 @@ This is why the invariant is called **State-Driven Reset** in the Play RFC.
|
|
|
102
102
|
|
|
103
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:
|
|
104
104
|
|
|
105
|
-
-
|
|
106
|
-
- XState DevTools attach to actors normally
|
|
105
|
+
- The inspection API of XState works: the `inspect` option receives the `@xstate.actor` and `@xstate.transition` events of the actor — see [Inspecting a Running Actor](inspector.md)
|
|
107
106
|
- The full XState ecosystem (testing utilities, visualization) is compatible
|
|
108
107
|
|
|
109
108
|
[`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.
|
|
@@ -166,12 +165,12 @@ The factory accepts an optional `input` (initial context overrides) and an optio
|
|
|
166
165
|
|
|
167
166
|
```typescript
|
|
168
167
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
169
|
-
import { setup } from "xstate";
|
|
168
|
+
import { setup, types } from "xstate";
|
|
170
169
|
|
|
171
170
|
const machine = setup({
|
|
172
|
-
|
|
173
|
-
input: {
|
|
174
|
-
context: {
|
|
171
|
+
schemas: {
|
|
172
|
+
input: types<{ userId: string } | undefined>(),
|
|
173
|
+
context: types<{ userId: string | null }>(),
|
|
175
174
|
},
|
|
176
175
|
}).createMachine({ context: ({ input }) => ({ userId: input?.userId ?? null }) });
|
|
177
176
|
|
|
@@ -143,7 +143,7 @@ This section covers installing XMachines packages into your own application and
|
|
|
143
143
|
- **Node.js** `>= 24.0.0`
|
|
144
144
|
- **pnpm** via corepack (`corepack enable`)
|
|
145
145
|
- **TypeScript** `>= 5.7` (strict mode recommended)
|
|
146
|
-
- **XState** `
|
|
146
|
+
- **XState** `6.0.0-alpha.71` (required peer dependency for [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md))
|
|
147
147
|
|
|
148
148
|
All packages are ES modules (`"type": "module"`). Use `.js` extensions in all TypeScript imports.
|
|
149
149
|
|
|
@@ -154,14 +154,14 @@ All packages are ES modules (`"type": "module"`). Use `.js` extensions in all Ty
|
|
|
154
154
|
Every XMachines application needs these six packages plus XState:
|
|
155
155
|
|
|
156
156
|
```bash
|
|
157
|
-
pnpm add xstate @xmachines/play-xstate @xmachines/play-actor @xmachines/play-atom @xmachines/play @xmachines/core @xmachines/json-render-core@0.21.0-xm.
|
|
157
|
+
pnpm add xstate@6.0.0-alpha.71 @xmachines/play-xstate @xmachines/play-actor @xmachines/play-atom @xmachines/play @xmachines/core @xmachines/json-render-core@0.21.0-xm.7
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
-
The json-render packages are exact peers: install the version that this release names, `0.21.0-xm.
|
|
160
|
+
The json-render packages are exact peers: install the version that this release names, `0.21.0-xm.7`.
|
|
161
161
|
|
|
162
162
|
| Package | Role |
|
|
163
163
|
| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
164
|
-
| `xstate` | XState
|
|
164
|
+
| `xstate` | XState v6 state machine engine (peer dependency) |
|
|
165
165
|
| [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) | [`definePlayer()`](../api/@xmachines/play-xstate/index/functions/definePlayer.md), [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md), routing helpers |
|
|
166
166
|
| [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md) | The actor contract: `PlayActor`, which names no state machine library |
|
|
167
167
|
| [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md) | The atom primitives (`createAtom`, [`watchAtom`](../api/@xmachines/play-atom/functions/watchAtom.md)) |
|
|
@@ -202,14 +202,14 @@ pnpm add @xmachines/play-dom # Vanilla DOM
|
|
|
202
202
|
The minimum viable XMachines actor — no framework dependencies:
|
|
203
203
|
|
|
204
204
|
```typescript
|
|
205
|
-
import { setup } from "xstate";
|
|
205
|
+
import { setup, types } from "xstate";
|
|
206
206
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
207
207
|
|
|
208
|
-
// 1. Declare
|
|
208
|
+
// 1. Declare the schemas with setup() — the XState v6 typed entry point
|
|
209
209
|
const appSetup = setup({
|
|
210
|
-
|
|
211
|
-
context: {
|
|
212
|
-
events: {
|
|
210
|
+
schemas: {
|
|
211
|
+
context: types<{ count: number }>(),
|
|
212
|
+
events: { toggle: types<void>() },
|
|
213
213
|
},
|
|
214
214
|
});
|
|
215
215
|
|
|
@@ -221,18 +221,12 @@ const machine = appSetup.createMachine({
|
|
|
221
221
|
states: {
|
|
222
222
|
off: {
|
|
223
223
|
on: {
|
|
224
|
-
toggle: {
|
|
225
|
-
target: "on",
|
|
226
|
-
actions: appSetup.assign({ count: ({ context }) => context.count + 1 }),
|
|
227
|
-
},
|
|
224
|
+
toggle: ({ context }) => ({ target: "on", context: { count: context.count + 1 } }),
|
|
228
225
|
},
|
|
229
226
|
},
|
|
230
227
|
on: {
|
|
231
228
|
on: {
|
|
232
|
-
toggle: {
|
|
233
|
-
target: "off",
|
|
234
|
-
actions: appSetup.assign({ count: ({ context }) => context.count + 1 }),
|
|
235
|
-
},
|
|
229
|
+
toggle: ({ context }) => ({ target: "off", context: { count: context.count + 1 } }),
|
|
236
230
|
},
|
|
237
231
|
},
|
|
238
232
|
},
|
|
@@ -259,8 +253,8 @@ actor.stop();
|
|
|
259
253
|
|
|
260
254
|
**Key rules:**
|
|
261
255
|
|
|
262
|
-
- Always use `setup({
|
|
263
|
-
-
|
|
256
|
+
- Always use `setup({ schemas })` before `createMachine` — never bare `createMachine` from xstate.
|
|
257
|
+
- Return a context patch from a transition function — `{ context: { count: 1 } }`. XState 6 has no `assign` action.
|
|
264
258
|
- Call `actor.start()` before sending events.
|
|
265
259
|
- Call `actor.stop()` when done to clean up atom subscriptions.
|
|
266
260
|
|
|
@@ -314,22 +308,27 @@ State machines control navigation through `meta.route` on states and `play.route
|
|
|
314
308
|
[`formatPlayRouteTransitions`](../api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md) auto-generates `play.route` handlers from `id` + `meta.route` state pairs:
|
|
315
309
|
|
|
316
310
|
```typescript
|
|
317
|
-
import { setup } from "xstate";
|
|
311
|
+
import { setup, types } from "xstate";
|
|
318
312
|
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
319
313
|
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
320
314
|
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
321
|
-
import type { PlayRouteEvent } from "@xmachines/play-router";
|
|
315
|
+
import type { PlayRouteEvent, RouteMetadata } from "@xmachines/play-router";
|
|
322
316
|
|
|
323
317
|
const appSetup = setup({
|
|
324
|
-
|
|
318
|
+
schemas: {
|
|
325
319
|
// params and query are REQUIRED for formatPlayRouteTransitions
|
|
326
|
-
context: {
|
|
320
|
+
context: types<{
|
|
327
321
|
isAuthenticated: boolean;
|
|
328
322
|
params: Record<string, string>;
|
|
329
323
|
query: Record<string, string>;
|
|
324
|
+
}>(),
|
|
325
|
+
events: {
|
|
326
|
+
"play.route": types<Omit<PlayRouteEvent, "type">>(),
|
|
327
|
+
"auth.login": types<{ username: string }>(),
|
|
328
|
+
"auth.logout": types<void>(),
|
|
330
329
|
},
|
|
331
|
-
|
|
332
|
-
|
|
330
|
+
// The `meta` of each state: XState 6 types it from this schema
|
|
331
|
+
meta: types<{ route?: RouteMetadata }>(),
|
|
333
332
|
},
|
|
334
333
|
});
|
|
335
334
|
|
|
@@ -347,26 +346,21 @@ const appMachine = appSetup.createMachine(
|
|
|
347
346
|
id: "dashboard",
|
|
348
347
|
meta: { route: "/dashboard" },
|
|
349
348
|
// always guard: redirect to /login if not authenticated
|
|
350
|
-
always: {
|
|
351
|
-
|
|
352
|
-
target: "login",
|
|
353
|
-
},
|
|
349
|
+
always: ({ context }) =>
|
|
350
|
+
context.isAuthenticated ? undefined : { target: "login" },
|
|
354
351
|
},
|
|
355
352
|
profile: { id: "profile", meta: { route: "/profile/:username" } },
|
|
356
353
|
},
|
|
357
354
|
on: {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
isAuthenticated: true,
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
guard: ({ context }) => context.isAuthenticated,
|
|
368
|
-
actions: appSetup.assign({ isAuthenticated: false }),
|
|
369
|
-
},
|
|
355
|
+
// A transition function is the guard: it returns nothing to refuse the event
|
|
356
|
+
"auth.login": ({ context }) =>
|
|
357
|
+
context.isAuthenticated
|
|
358
|
+
? undefined
|
|
359
|
+
: { target: ".dashboard", context: { isAuthenticated: true } },
|
|
360
|
+
"auth.logout": ({ context }) =>
|
|
361
|
+
context.isAuthenticated
|
|
362
|
+
? { target: ".home", context: { isAuthenticated: false } }
|
|
363
|
+
: undefined,
|
|
370
364
|
},
|
|
371
365
|
}),
|
|
372
366
|
);
|
|
@@ -698,18 +692,18 @@ const disconnect = mount(actor, document.getElementById("app")!);
|
|
|
698
692
|
`query` field builds a query-less URL, exactly like `query: {}`.
|
|
699
693
|
|
|
700
694
|
**Fix:** With [`formatPlayRouteTransitions`](../api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md)
|
|
701
|
-
nothing is needed — the generated transitions
|
|
702
|
-
on every navigation. A machine that handles `play.route` by hand must
|
|
703
|
-
|
|
695
|
+
nothing is needed — the generated transitions write `event.query` to context
|
|
696
|
+
on every navigation. A machine that handles `play.route` by hand must return that
|
|
697
|
+
context patch itself:
|
|
704
698
|
|
|
705
699
|
```typescript fragment
|
|
706
700
|
on: {
|
|
707
|
-
"play.route": {
|
|
708
|
-
|
|
709
|
-
params:
|
|
710
|
-
query:
|
|
711
|
-
}
|
|
712
|
-
},
|
|
701
|
+
"play.route": ({ event }) => ({
|
|
702
|
+
context: {
|
|
703
|
+
params: event.params ?? {},
|
|
704
|
+
query: event.query ?? {},
|
|
705
|
+
},
|
|
706
|
+
}),
|
|
713
707
|
}
|
|
714
708
|
```
|
|
715
709
|
|
|
@@ -776,7 +770,7 @@ node --version
|
|
|
776
770
|
|
|
777
771
|
| Term | Description |
|
|
778
772
|
| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
|
|
779
|
-
| `setup({
|
|
773
|
+
| `setup({ schemas })` | XState v6 entry point — declares the schemas of the context, the events, the input, and the `meta` of the states |
|
|
780
774
|
| [`definePlayer({ machine })`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) | Creates a factory that produces [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) instances |
|
|
781
775
|
| `actor.start()` | Activates the machine — always call before sending events |
|
|
782
776
|
| `actor.send({ type })` | Sends an event; machine guards decide whether a transition occurs |
|
package/guides/inspector.md
CHANGED
|
@@ -1,37 +1,36 @@
|
|
|
1
1
|
# Inspecting a Running Actor
|
|
2
2
|
|
|
3
|
-
A `PlayerActor` is an XState actor, so every
|
|
3
|
+
A `PlayerActor` is an XState actor, so every observer of the inspection events of XState 6 works on it unchanged. This guide covers how to attach an inspector, what the events look like once they arrive, and the two things that are specific to XMachines: the actor _is_ the actor an inspector sees, and the observer is configured on the factory rather than on each instance.
|
|
4
4
|
|
|
5
|
-
After reading this you will be able to
|
|
5
|
+
After reading this you will be able to observe a running demo or your own app, inspect an actor that has no browser around it, and wire an inspector that can be turned on after the actor has already started.
|
|
6
6
|
|
|
7
|
-
- [Quick start](#quick-start) —
|
|
7
|
+
- [Quick start](#quick-start) — one observer on the factory
|
|
8
8
|
- [Where the observer attaches](#where-the-observer-attaches) — factory-level, creation-time
|
|
9
9
|
- [Reading the events](#reading-the-events) — identity, `rootId`, the construction caveat
|
|
10
10
|
- [Turning the inspector on later](#turning-the-inspector-on-later) — dev-tools toggles and replay
|
|
11
|
-
- [Inspecting without a browser](#inspecting-without-a-browser) —
|
|
12
|
-
- [Trying it in the demos](#trying-it-in-the-demos) — the shared demo controller
|
|
11
|
+
- [Inspecting without a browser](#inspecting-without-a-browser) — Node and SSR
|
|
12
|
+
- [Trying it in the demos](#trying-it-in-the-demos) — the shared demo controller and the Stately inspector
|
|
13
13
|
- [Production considerations](#production-considerations) — cost and data exposure
|
|
14
14
|
|
|
15
|
+
> **`@statelyai/inspect` and XState 6.** Release 0.7 of `@statelyai/inspect` imports `toObserver` from `xstate`, which XState 6 no longer exports, so its module does not load beside XState 6. It also reads the inspection events of XState 5. The [demos](#trying-it-in-the-demos) of this repository therefore convert the events of XState 6 to the protocol of the [Stately inspector](https://stately.ai/docs/inspector) app themselves.
|
|
16
|
+
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
## Quick start
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
pnpm add -D @statelyai/inspect
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Create an inspector and hand its `inspect` observer to [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md):
|
|
21
|
+
Hand an observer of the inspection events to [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md):
|
|
26
22
|
|
|
27
23
|
```typescript
|
|
28
|
-
import { createBrowserInspector } from "@statelyai/inspect";
|
|
29
24
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
30
|
-
import type { AnyStateMachine } from "xstate";
|
|
25
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
31
26
|
|
|
32
27
|
declare const appMachine: AnyStateMachine; // your machine
|
|
33
28
|
|
|
34
|
-
const
|
|
29
|
+
const inspect = (event: InspectionEvent): void => {
|
|
30
|
+
if (event.type === "@xstate.transition") {
|
|
31
|
+
console.log(event.event.type, "→", event.snapshot.status);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
35
34
|
|
|
36
35
|
const createPlayer = definePlayer({
|
|
37
36
|
machine: appMachine,
|
|
@@ -42,7 +41,7 @@ const actor = createPlayer();
|
|
|
42
41
|
actor.start();
|
|
43
42
|
```
|
|
44
43
|
|
|
45
|
-
|
|
44
|
+
The observer receives one `@xstate.actor` event for each actor that the system creates, and one `@xstate.transition` event for each transition, with its event and its snapshot.
|
|
46
45
|
|
|
47
46
|
That is the whole integration. [`PlayerOptions.inspect`](../api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md) is forwarded verbatim to XState's `createActor`, so anything XState accepts there is accepted here — a function, or an observer object with a `next` method:
|
|
48
47
|
|
|
@@ -96,7 +95,12 @@ Because a `PlayerActor` _is_ the XState actor rather than a wrapper around a hid
|
|
|
96
95
|
- `event.actorRef === actor` for the player's own events — recognise a player by identity, no bookkeeping required.
|
|
97
96
|
- `event.rootId === actor.sessionId` for the whole tree, including invoked and spawned children, whose `actorRef` is the child rather than the player.
|
|
98
97
|
|
|
99
|
-
|
|
98
|
+
XState 6 emits two event types:
|
|
99
|
+
|
|
100
|
+
- `@xstate.actor` when an actor registers: `actorRef`, `parentRef`, `id`, `src`, and its initial `snapshot`.
|
|
101
|
+
- `@xstate.transition` for each transition: the `event`, the resulting `snapshot`, `sourceRef`, `targetRef`, the `microsteps`, the executed `actions`, and the events that the transition `sent`. The stop of an actor is its last `@xstate.transition`, whose `snapshot.status` is `"stopped"`.
|
|
102
|
+
|
|
103
|
+
The `@xstate.event`, `@xstate.snapshot`, `@xstate.action` and `@xstate.microstep` events of XState 5 are facets of `@xstate.transition` now.
|
|
100
104
|
|
|
101
105
|
### The construction caveat
|
|
102
106
|
|
|
@@ -108,14 +112,14 @@ const inspect = (event: InspectionEvent) => {
|
|
|
108
112
|
// ❌ throws — the atoms are not assigned yet
|
|
109
113
|
console.log(event.actorRef.currentRoute.get());
|
|
110
114
|
}
|
|
111
|
-
if (event.type === "@xstate.
|
|
115
|
+
if (event.type === "@xstate.transition") {
|
|
112
116
|
// ✅ construction has returned; atoms are live
|
|
113
117
|
console.log(event.actorRef.getSnapshot().value);
|
|
114
118
|
}
|
|
115
119
|
};
|
|
116
120
|
```
|
|
117
121
|
|
|
118
|
-
Capture the reference during construction if you need it, and read the atoms from a later event or from outside the observer entirely.
|
|
122
|
+
Capture the reference during construction if you need it, and read the atoms from a later event or from outside the observer entirely. The `@xstate.actor` event carries the initial `snapshot` itself, so an observer reads that field and not `getSnapshot()`.
|
|
119
123
|
|
|
120
124
|
---
|
|
121
125
|
|
|
@@ -124,23 +128,22 @@ Capture the reference during construction if you need it, and read the atoms fro
|
|
|
124
128
|
An inspector that is only created when the user asks for it — a dev-tools toggle, a keyboard shortcut, a debug panel button — cannot be passed to `definePlayer`, which ran at module scope long before the click. Pass a forwarding function instead, so the attachment point is fixed at factory time while the destination stays swappable:
|
|
125
129
|
|
|
126
130
|
```typescript
|
|
127
|
-
import { createBrowserInspector } from "@statelyai/inspect";
|
|
128
131
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
129
|
-
import type { AnyStateMachine, InspectionEvent
|
|
132
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
130
133
|
|
|
131
134
|
declare const appMachine: AnyStateMachine; // your machine
|
|
135
|
+
declare function openInspector(): (event: InspectionEvent) => void; // your transport
|
|
132
136
|
|
|
133
|
-
let current:
|
|
137
|
+
let current: ((event: InspectionEvent) => void) | undefined;
|
|
134
138
|
|
|
135
139
|
const createPlayer = definePlayer({
|
|
136
140
|
machine: appMachine,
|
|
137
|
-
options: { inspect: (event) => current?.
|
|
141
|
+
options: { inspect: (event) => current?.(event) },
|
|
138
142
|
});
|
|
139
143
|
|
|
140
144
|
// Later, from a click handler
|
|
141
145
|
export function enableInspector() {
|
|
142
|
-
|
|
143
|
-
current = inspect;
|
|
146
|
+
current = openInspector();
|
|
144
147
|
}
|
|
145
148
|
```
|
|
146
149
|
|
|
@@ -152,21 +155,25 @@ There is a catch worth knowing before you ship it: events that arrive while `cur
|
|
|
152
155
|
|
|
153
156
|
## Inspecting without a browser
|
|
154
157
|
|
|
155
|
-
|
|
158
|
+
An observer needs no browser. A `console.log`, a test spy that asserts a transition sequence, and a writer that appends each event to a log or sends it over a socket are all valid `inspect` values — the route to an actor with no browser around it at all, such as one running in a Node process or on the server half of an SSR render:
|
|
156
159
|
|
|
157
160
|
```typescript
|
|
158
|
-
import { createWebSocketInspector } from "@statelyai/inspect";
|
|
159
161
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
160
|
-
import type { AnyStateMachine } from "xstate";
|
|
162
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
161
163
|
|
|
162
164
|
declare const appMachine: AnyStateMachine; // your machine
|
|
165
|
+
declare const socket: { send(data: string): void }; // your transport
|
|
163
166
|
|
|
164
|
-
const
|
|
167
|
+
const inspect = (event: InspectionEvent): void => {
|
|
168
|
+
if (event.type !== "@xstate.transition") return;
|
|
169
|
+
// The snapshot holds live references, so send the fields that you need
|
|
170
|
+
socket.send(JSON.stringify({ event: event.event, status: event.snapshot.status }));
|
|
171
|
+
};
|
|
165
172
|
|
|
166
173
|
const createPlayer = definePlayer({ machine: appMachine, options: { inspect } });
|
|
167
174
|
```
|
|
168
175
|
|
|
169
|
-
|
|
176
|
+
Every transport consumes the identical `options.inspect` observer, so switching between them touches only the line that creates the observer.
|
|
170
177
|
|
|
171
178
|
---
|
|
172
179
|
|
|
@@ -180,24 +187,26 @@ pnpm --filter @xmachines/play-react-demo run dev
|
|
|
180
187
|
|
|
181
188
|
Click **Show Inspector** in the debug panel at the bottom of the page. The inspector opens in its own window with the machine already drawn and the session's history replayed, and it keeps updating as you log in, navigate, and log out.
|
|
182
189
|
|
|
183
|
-
The demos share one controller, `createDemoInspector()`, which each demo passes straight through to `definePlayer`. The controller
|
|
190
|
+
The demos share one controller, `createDemoInspector()`, which each demo passes straight through to `definePlayer`. The controller converts each event of XState 6 to the protocol of the Stately inspector app: `@xstate.actor` becomes the registration of the actor, and each `@xstate.transition` becomes the `@xstate.event` and the `@xstate.snapshot` that the app draws one transition from. It posts the converted events to the window of the inspector app.
|
|
191
|
+
|
|
192
|
+
The controller lives in a private package of this repository, so you cannot install it. The block below shows the buffer and the replay with the public API. It keeps each event from the creation of the actor, and it replays the events when the user opens the inspector:
|
|
184
193
|
|
|
185
194
|
```typescript
|
|
186
|
-
import { createBrowserInspector } from "@statelyai/inspect";
|
|
187
195
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
188
|
-
import type { AnyStateMachine, InspectionEvent
|
|
196
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
189
197
|
|
|
190
198
|
declare const appMachine: AnyStateMachine; // your machine
|
|
199
|
+
declare function openInspector(): (event: InspectionEvent) => void; // your transport
|
|
191
200
|
|
|
192
201
|
const buffer: InspectionEvent[] = [];
|
|
193
|
-
let current:
|
|
202
|
+
let current: ((event: InspectionEvent) => void) | undefined;
|
|
194
203
|
|
|
195
204
|
const actor = definePlayer({
|
|
196
205
|
machine: appMachine,
|
|
197
206
|
options: {
|
|
198
207
|
inspect: (event) => {
|
|
199
208
|
if (current) {
|
|
200
|
-
current
|
|
209
|
+
current(event);
|
|
201
210
|
return;
|
|
202
211
|
}
|
|
203
212
|
// Keep the last 500 events while nobody opens the inspector. A long session drops
|
|
@@ -214,11 +223,8 @@ actor.start();
|
|
|
214
223
|
// The click handler of the "Show Inspector" button of the debug panel
|
|
215
224
|
export function showInspector() {
|
|
216
225
|
if (current) return;
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
// the inspector keeps every event of the replay.
|
|
220
|
-
current = createBrowserInspector({ maxDeferredEvents: 1000 }).inspect;
|
|
221
|
-
for (const event of buffer.splice(0)) current.next?.(event);
|
|
226
|
+
current = openInspector();
|
|
227
|
+
for (const event of buffer.splice(0)) current(event);
|
|
222
228
|
}
|
|
223
229
|
```
|
|
224
230
|
|
|
@@ -228,23 +234,23 @@ The demo controller answers the late-opening problem from the previous section:
|
|
|
228
234
|
|
|
229
235
|
## Production considerations
|
|
230
236
|
|
|
231
|
-
**Cost.** Inspection serializes events. A `console.log` observer is cheap; a
|
|
237
|
+
**Cost.** Inspection serializes events. A `console.log` observer is cheap; a transport posting every transition, and any buffering scheme layered on top, is not. Gate the inspector behind a development-only branch, and prefer letting the bundler drop it entirely:
|
|
232
238
|
|
|
233
239
|
```typescript
|
|
234
240
|
/// <reference types="vite/client" />
|
|
235
|
-
import { createBrowserInspector } from "@statelyai/inspect";
|
|
236
241
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
237
|
-
import type { AnyStateMachine } from "xstate";
|
|
242
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
238
243
|
|
|
239
244
|
declare const appMachine: AnyStateMachine; // your machine
|
|
245
|
+
declare function openInspector(): (event: InspectionEvent) => void; // your transport
|
|
240
246
|
|
|
241
247
|
// `import.meta.env.DEV` is the development flag of Vite
|
|
242
|
-
const options = import.meta.env.DEV ? { inspect:
|
|
248
|
+
const options = import.meta.env.DEV ? { inspect: openInspector() } : {};
|
|
243
249
|
|
|
244
250
|
const createPlayer = definePlayer({ machine: appMachine, options });
|
|
245
251
|
```
|
|
246
252
|
|
|
247
|
-
**Data exposure.** Inspection events carry the machine's definition and its context — which in a real application may include user identifiers, tokens, or form input.
|
|
253
|
+
**Data exposure.** Inspection events carry the machine's definition and its context — which in a real application may include user identifiers, tokens, or form input. A browser transport posts that data to the inspector's origin over `postMessage`, and a socket transport sends it to whatever server is listening. Treat an inspector connection as a data egress path: keep it out of production builds, and when inspecting a shared environment, know where the events are going.
|
|
248
254
|
|
|
249
255
|
---
|
|
250
256
|
|
|
@@ -254,4 +260,4 @@ const createPlayer = definePlayer({ machine: appMachine, options });
|
|
|
254
260
|
- **[`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md)** — the actor an inspector observes
|
|
255
261
|
- **[The Actor Model](actor-model.md)** — why the actor is the actor, and what that buys
|
|
256
262
|
- **[Getting Started](getting-started.md)** — installing packages and creating your first actor
|
|
257
|
-
- **[Stately inspect docs](https://stately.ai/docs/inspector)** — the inspector itself
|
|
263
|
+
- **[Stately inspect docs](https://stately.ai/docs/inspector)** — the inspector app itself
|
package/guides/routing.md
CHANGED
|
@@ -55,10 +55,12 @@ A **modifier** follows a param, a wildcard or a group:
|
|
|
55
55
|
| `*` | zero or more | matches |
|
|
56
56
|
|
|
57
57
|
```ts
|
|
58
|
-
import { createMachine } from "xstate";
|
|
58
|
+
import { createMachine, types } from "xstate";
|
|
59
59
|
|
|
60
60
|
const machine = createMachine({
|
|
61
61
|
id: "app",
|
|
62
|
+
// XState 6 types the `meta` of each state from this schema
|
|
63
|
+
schemas: { meta: types<{ route?: string }>() },
|
|
62
64
|
initial: "home",
|
|
63
65
|
states: {
|
|
64
66
|
home: { meta: { route: "/" } },
|
|
@@ -145,7 +147,7 @@ This rule is about the PATTERN that a state declares. A param VALUE needs no esc
|
|
|
145
147
|
|
|
146
148
|
`encodeURIComponent` leaves `*` as it stands, and that is the one exception. A bridge refuses a path that still holds a `:` or a `*`, because such a character marks a param that nothing substituted. A value of `a*b` therefore stops the push, and the URL stays where it is.
|
|
147
149
|
|
|
148
|
-
A route that carries a QUERY STRING is the same case as a raw `?`, and it is the form a machine writes most often. The grammar reads the `?` of `meta: { route: "/dates?trip=one-way" }` as a modifier that follows no part, so `RouteMap` throws `InvalidRoutePatternError` in its constructor and the application starts never. A route declares a PATHNAME: put the default in `context.query`, which the generated `play.route` transition
|
|
150
|
+
A route that carries a QUERY STRING is the same case as a raw `?`, and it is the form a machine writes most often. The grammar reads the `?` of `meta: { route: "/dates?trip=one-way" }` as a modifier that follows no part, so `RouteMap` throws `InvalidRoutePatternError` in its constructor and the application starts never. A route declares a PATHNAME: put the default in `context.query`, which the generated `play.route` transition writes and `buildRouteUrl` writes to the URL.
|
|
149
151
|
|
|
150
152
|
### The prefix rule
|
|
151
153
|
|