@xmachines/docs 6.1.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 +5 -5
- package/api/@xmachines/core/README.md +7 -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 +10 -5
- package/api/@xmachines/play/errors/classes/NonNullableError.md +11 -11
- package/api/@xmachines/play/errors/classes/PlayError.md +12 -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 +11 -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 +21 -7
- 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 +136 -50
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +12 -12
- package/api/@xmachines/play-dom/functions/createPlayUI.md +5 -5
- package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
- package/api/@xmachines/play-dom/functions/renderSpec.md +3 -2
- package/api/@xmachines/play-dom/interfaces/ComponentContext.md +9 -9
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +15 -14
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +26 -20
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +5 -5
- package/api/@xmachines/play-dom/interfaces/PassOptions.md +14 -0
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +18 -17
- package/api/@xmachines/play-dom/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-dom/interfaces/RenderSpecOptions.md +17 -15
- package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +9 -8
- package/api/@xmachines/play-dom/interfaces/ValidationRegistry.md +14 -11
- package/api/@xmachines/play-dom/type-aliases/ConfirmHandler.md +9 -10
- package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +4 -3
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-dom/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-dom-router/README.md +44 -6
- 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 +58 -19
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
- package/api/@xmachines/play-react/functions/defineRegistry.md +1 -1
- 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/ActionProviderProps.md +5 -5
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +11 -11
- package/api/@xmachines/play-react/interfaces/DefineRegistryResult.md +15 -0
- 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/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-react/interfaces/RendererProps.md +7 -7
- 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/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-react/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-react/variables/ActorProvider.md +14 -4
- 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 +26 -5
- 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 +87 -29
- 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 +8 -8
- 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 +35 -11
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/functions/useBoundProp.md +8 -5
- package/api/@xmachines/play-solid/functions/useFieldValidation.md +6 -4
- package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-solid/functions/useStateBinding.md +5 -3
- package/api/@xmachines/play-solid/functions/useStateValue.md +5 -3
- 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/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-solid/interfaces/RendererProps.md +7 -7
- 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/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-solid/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +17 -3
- 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 +24 -10
- 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 +19 -11
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +3 -4
- 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 +8 -8
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +14 -14
- package/api/@xmachines/play-svelte/interfaces/RenderErrorInfo.md +16 -0
- 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/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-svelte/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-svelte-spa-router/README.md +14 -7
- 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 +67 -14
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +29 -19
- 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 +13 -16
- 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 +25 -0
- package/api/@xmachines/play-sveltekit-router/type-aliases/ShallowNavigation.md +21 -0
- package/api/@xmachines/play-tanstack-react-router/README.md +36 -17
- 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 +7 -4
- 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 +50 -17
- 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 +45 -19
- package/api/@xmachines/play-view/errors/README.md +1 -0
- 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 +181 -0
- package/api/@xmachines/play-view/index/README.md +10 -4
- package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +10 -9
- package/api/@xmachines/play-view/index/functions/bindStoreHandlers.md +34 -0
- package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
- package/api/@xmachines/play-view/index/functions/composeViews.md +8 -2
- package/api/@xmachines/play-view/index/functions/createActorProxy.md +39 -0
- package/api/@xmachines/play-view/index/functions/createRenderErrorBinding.md +35 -0
- package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
- package/api/@xmachines/play-view/index/functions/createViewSession.md +29 -0
- package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
- package/api/@xmachines/play-view/index/functions/forwardRenderError.md +45 -0
- 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 +8 -8
- 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 +19 -0
- 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 +155 -0
- package/api/@xmachines/play-view/index/interfaces/ViewSessionOptions.md +12 -0
- package/api/@xmachines/play-view/index/interfaces/ViewSessionSnapshot.md +23 -0
- package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +22 -3
- package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +7 -6
- 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 +21 -0
- 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 +20 -15
- 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/useBoundProp.md +10 -4
- package/api/@xmachines/play-vue/functions/useFieldValidation.md +12 -5
- 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/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-vue/interfaces/RendererProps.md +7 -7
- 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/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-vue/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue/variables/Renderer.md +3 -3
- package/api/@xmachines/play-vue-router/README.md +18 -11
- 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 +120 -57
- 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/README.md +1 -0
- 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 +100 -61
- package/contributing/configuration.md +44 -62
- package/contributing/deployment.md +131 -161
- package/contributing/development.md +34 -9
- package/contributing/migrating-to-play-atom.md +23 -5
- package/contributing/testing.md +64 -33
- package/examples/@xmachines/play-dom-demo/README.md +2 -2
- 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-dom-router-demo/README.md +4 -3
- package/examples/@xmachines/play-react-demo/README.md +2 -2
- 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-react-router-demo/README.md +4 -3
- package/examples/@xmachines/play-solid-demo/README.md +3 -3
- 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-solid-router-demo/README.md +9 -3
- package/examples/@xmachines/play-svelte-demo/README.md +1 -1
- 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-svelte-spa-router-demo/README.md +1 -1
- package/examples/@xmachines/play-sveltekit-router-demo/README.md +1 -1
- package/examples/@xmachines/play-tanstack-react-router-demo/README.md +3 -2
- package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +9 -8
- package/examples/@xmachines/play-vue-demo/README.md +2 -2
- 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/@xmachines/play-vue-router-demo/README.md +3 -3
- package/examples/README.md +1 -1
- package/examples/basic-state-machine.md +19 -23
- package/examples/form-validation.md +60 -61
- package/examples/multi-router-integration.md +268 -147
- package/examples/routing-patterns.md +73 -43
- package/examples/traffic-light.md +24 -22
- package/guides/actor-model.md +38 -21
- package/guides/atoms.md +48 -8
- package/guides/getting-started.md +106 -62
- package/guides/inspector.md +103 -37
- package/guides/routing.md +7 -2
- package/guides/state-machines.md +106 -68
- package/guides/views.md +40 -18
- package/package.json +6 -6
- package/rfc/git.md +13 -5
- package/rfc/play.md +53 -31
- package/rfc/run.md +7 -4
- package/api/@xmachines/play-view/index/functions/createFailureLatch.md +0 -20
- package/api/@xmachines/play-view/index/functions/sameViewInputs.md +0 -25
- package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +0 -60
- package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +0 -19
|
@@ -102,13 +102,13 @@ The test suite relies on TypeScript path aliases that resolve to source files. I
|
|
|
102
102
|
|
|
103
103
|
#### TypeScript errors about missing types after adding a dependency
|
|
104
104
|
|
|
105
|
-
Run `pnpm install --frozen-lockfile` again to ensure all types are installed. If you added a workspace-local dependency,
|
|
105
|
+
Run `pnpm install --frozen-lockfile` again to ensure all types are installed. If you added a workspace-local dependency, declare it in the `package.json` of the package with a `workspace:*` range. The root `tsconfig.json` holds the build order, and `tests/tsconfig-reference-graph.test.ts` fails when that order misses the new edge.
|
|
106
106
|
|
|
107
107
|
#### Lint errors about import extensions
|
|
108
108
|
|
|
109
109
|
All TypeScript imports must end with `.js`, even for `.ts` source files:
|
|
110
110
|
|
|
111
|
-
```typescript
|
|
111
|
+
```typescript fragment
|
|
112
112
|
// ✅ Correct
|
|
113
113
|
import { PlayError } from "./errors.js";
|
|
114
114
|
|
|
@@ -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,12 +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
|
|
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.7`.
|
|
161
|
+
|
|
160
162
|
| Package | Role |
|
|
161
163
|
| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
162
|
-
| `xstate` | XState
|
|
164
|
+
| `xstate` | XState v6 state machine engine (peer dependency) |
|
|
163
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 |
|
|
164
166
|
| [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md) | The actor contract: `PlayActor`, which names no state machine library |
|
|
165
167
|
| [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md) | The atom primitives (`createAtom`, [`watchAtom`](../api/@xmachines/play-atom/functions/watchAtom.md)) |
|
|
@@ -200,15 +202,14 @@ pnpm add @xmachines/play-dom # Vanilla DOM
|
|
|
200
202
|
The minimum viable XMachines actor — no framework dependencies:
|
|
201
203
|
|
|
202
204
|
```typescript
|
|
203
|
-
import { setup } from "xstate";
|
|
205
|
+
import { setup, types } from "xstate";
|
|
204
206
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
205
207
|
|
|
206
|
-
// 1. Declare
|
|
208
|
+
// 1. Declare the schemas with setup() — the XState v6 typed entry point
|
|
207
209
|
const appSetup = setup({
|
|
208
|
-
|
|
209
|
-
context: {
|
|
210
|
-
events: {
|
|
211
|
-
input: {} as undefined,
|
|
210
|
+
schemas: {
|
|
211
|
+
context: types<{ count: number }>(),
|
|
212
|
+
events: { toggle: types<void>() },
|
|
212
213
|
},
|
|
213
214
|
});
|
|
214
215
|
|
|
@@ -220,18 +221,12 @@ const machine = appSetup.createMachine({
|
|
|
220
221
|
states: {
|
|
221
222
|
off: {
|
|
222
223
|
on: {
|
|
223
|
-
toggle: {
|
|
224
|
-
target: "on",
|
|
225
|
-
actions: appSetup.assign({ count: ({ context }) => context.count + 1 }),
|
|
226
|
-
},
|
|
224
|
+
toggle: ({ context }) => ({ target: "on", context: { count: context.count + 1 } }),
|
|
227
225
|
},
|
|
228
226
|
},
|
|
229
227
|
on: {
|
|
230
228
|
on: {
|
|
231
|
-
toggle: {
|
|
232
|
-
target: "off",
|
|
233
|
-
actions: appSetup.assign({ count: ({ context }) => context.count + 1 }),
|
|
234
|
-
},
|
|
229
|
+
toggle: ({ context }) => ({ target: "off", context: { count: context.count + 1 } }),
|
|
235
230
|
},
|
|
236
231
|
},
|
|
237
232
|
},
|
|
@@ -258,8 +253,8 @@ actor.stop();
|
|
|
258
253
|
|
|
259
254
|
**Key rules:**
|
|
260
255
|
|
|
261
|
-
- Always use `setup({
|
|
262
|
-
-
|
|
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.
|
|
263
258
|
- Call `actor.start()` before sending events.
|
|
264
259
|
- Call `actor.stop()` when done to clean up atom subscriptions.
|
|
265
260
|
|
|
@@ -272,6 +267,10 @@ release:
|
|
|
272
267
|
|
|
273
268
|
```typescript
|
|
274
269
|
import { watchAtom } from "@xmachines/play-atom";
|
|
270
|
+
import type { PlayerActor } from "@xmachines/play-xstate";
|
|
271
|
+
import type { AnyStateMachine } from "xstate";
|
|
272
|
+
|
|
273
|
+
declare const actor: PlayerActor<AnyStateMachine>; // the actor of the example above
|
|
275
274
|
|
|
276
275
|
const stop = watchAtom(actor.state, (snapshot) => {
|
|
277
276
|
console.log("the machine is now:", snapshot.value);
|
|
@@ -309,23 +308,27 @@ State machines control navigation through `meta.route` on states and `play.route
|
|
|
309
308
|
[`formatPlayRouteTransitions`](../api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md) auto-generates `play.route` handlers from `id` + `meta.route` state pairs:
|
|
310
309
|
|
|
311
310
|
```typescript
|
|
312
|
-
import { setup } from "xstate";
|
|
311
|
+
import { setup, types } from "xstate";
|
|
313
312
|
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
314
313
|
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
315
314
|
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
316
|
-
import type { PlayRouteEvent } from "@xmachines/play-router";
|
|
315
|
+
import type { PlayRouteEvent, RouteMetadata } from "@xmachines/play-router";
|
|
317
316
|
|
|
318
317
|
const appSetup = setup({
|
|
319
|
-
|
|
318
|
+
schemas: {
|
|
320
319
|
// params and query are REQUIRED for formatPlayRouteTransitions
|
|
321
|
-
context: {
|
|
320
|
+
context: types<{
|
|
322
321
|
isAuthenticated: boolean;
|
|
323
322
|
params: Record<string, string>;
|
|
324
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>(),
|
|
325
329
|
},
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
input: {} as undefined,
|
|
330
|
+
// The `meta` of each state: XState 6 types it from this schema
|
|
331
|
+
meta: types<{ route?: RouteMetadata }>(),
|
|
329
332
|
},
|
|
330
333
|
});
|
|
331
334
|
|
|
@@ -343,26 +346,21 @@ const appMachine = appSetup.createMachine(
|
|
|
343
346
|
id: "dashboard",
|
|
344
347
|
meta: { route: "/dashboard" },
|
|
345
348
|
// always guard: redirect to /login if not authenticated
|
|
346
|
-
always: {
|
|
347
|
-
|
|
348
|
-
target: "login",
|
|
349
|
-
},
|
|
349
|
+
always: ({ context }) =>
|
|
350
|
+
context.isAuthenticated ? undefined : { target: "login" },
|
|
350
351
|
},
|
|
351
352
|
profile: { id: "profile", meta: { route: "/profile/:username" } },
|
|
352
353
|
},
|
|
353
354
|
on: {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
isAuthenticated: true,
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
guard: ({ context }) => context.isAuthenticated,
|
|
364
|
-
actions: appSetup.assign({ isAuthenticated: false }),
|
|
365
|
-
},
|
|
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,
|
|
366
364
|
},
|
|
367
365
|
}),
|
|
368
366
|
);
|
|
@@ -412,16 +410,27 @@ Used with framework-integrated routers like TanStack Router. All three props (`a
|
|
|
412
410
|
|
|
413
411
|
```tsx
|
|
414
412
|
// React + TanStack Router example
|
|
415
|
-
import { useMemo, useEffect } from "react";
|
|
413
|
+
import { useMemo, useEffect, type ReactNode } from "react";
|
|
416
414
|
import { createRouter, createRootRoute } from "@tanstack/react-router";
|
|
417
415
|
import { PlayRouterProvider, createRouteMapFromTree } from "@xmachines/play-tanstack-react-router";
|
|
418
416
|
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
417
|
+
import { compose, definePlayer, PlayerActor } from "@xmachines/play-xstate";
|
|
418
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
419
|
+
import type { AnyStateMachine } from "xstate";
|
|
420
|
+
|
|
421
|
+
declare const appMachine: AnyStateMachine; // the machine of "Adding Routing"
|
|
422
|
+
declare function Shell(props: { actor: typeof actor }): ReactNode; // your layout
|
|
423
|
+
|
|
419
424
|
// Build OUTSIDE of JSX — must be stable references
|
|
420
425
|
const routeTree = extractMachineRoutes(appMachine);
|
|
421
426
|
const routeMap = createRouteMapFromTree(routeTree);
|
|
422
427
|
const router = createRouter({ routeTree: createRootRoute() });
|
|
423
428
|
|
|
424
429
|
// Actor also created outside the component (or memoized inside)
|
|
430
|
+
const createPlayer = definePlayer({
|
|
431
|
+
machine: appMachine,
|
|
432
|
+
actor: compose(PlayerActor, withRouting),
|
|
433
|
+
});
|
|
425
434
|
const actor = createPlayer();
|
|
426
435
|
actor.start();
|
|
427
436
|
|
|
@@ -448,12 +457,21 @@ Used with framework-agnostic or server-rendered routers. `connectRouter` handles
|
|
|
448
457
|
import { createBrowserHistory, createRouter, connectRouter } from "@xmachines/play-dom-router";
|
|
449
458
|
import { createRouteMapFromTree } from "@xmachines/play-router";
|
|
450
459
|
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
460
|
+
import { compose, definePlayer, PlayerActor } from "@xmachines/play-xstate";
|
|
461
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
462
|
+
import type { AnyStateMachine } from "xstate";
|
|
463
|
+
|
|
464
|
+
declare const appMachine: AnyStateMachine; // the machine of "Adding Routing"
|
|
451
465
|
|
|
452
466
|
const routeTree = extractMachineRoutes(appMachine);
|
|
453
467
|
const routeMap = createRouteMapFromTree(routeTree);
|
|
454
468
|
const history = createBrowserHistory({ window });
|
|
455
469
|
const router = createRouter({ routeTree, history });
|
|
456
470
|
|
|
471
|
+
const createPlayer = definePlayer({
|
|
472
|
+
machine: appMachine,
|
|
473
|
+
actor: compose(PlayerActor, withRouting),
|
|
474
|
+
});
|
|
457
475
|
const actor = createPlayer();
|
|
458
476
|
actor.start();
|
|
459
477
|
|
|
@@ -483,6 +501,10 @@ import { PlayUIProvider, PlayRenderer, defineRegistry } from "@xmachines/play-re
|
|
|
483
501
|
import { defineCatalog } from "@xmachines/json-render-core";
|
|
484
502
|
import { schema } from "@xmachines/play-react";
|
|
485
503
|
import { z } from "zod";
|
|
504
|
+
import type { ViewActor } from "@xmachines/play-view";
|
|
505
|
+
|
|
506
|
+
type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
|
|
507
|
+
declare const actor: ViewActor<unknown, AuthEvent>; // your actor, composed with `withView`
|
|
486
508
|
|
|
487
509
|
const catalog = defineCatalog(schema, {
|
|
488
510
|
components: {
|
|
@@ -501,7 +523,9 @@ const registryResult = defineRegistry(catalog, {
|
|
|
501
523
|
Login: ({ on }) => <button onClick={() => on("submit").emit()}>Log in</button>,
|
|
502
524
|
},
|
|
503
525
|
actions: {
|
|
504
|
-
login: async (
|
|
526
|
+
login: async (params) => {
|
|
527
|
+
if (params) actor.send({ type: "auth.login", username: params.username });
|
|
528
|
+
},
|
|
505
529
|
logout: async () => actor.send({ type: "auth.logout" }),
|
|
506
530
|
},
|
|
507
531
|
});
|
|
@@ -548,7 +572,9 @@ function App() {
|
|
|
548
572
|
Login: { template: `<button @click="on('submit').emit()">Log in</button>` },
|
|
549
573
|
},
|
|
550
574
|
actions: {
|
|
551
|
-
login: async (
|
|
575
|
+
login: async (params) => {
|
|
576
|
+
if (params) actor.send({ type: "auth.login", username: params.username });
|
|
577
|
+
},
|
|
552
578
|
logout: async () => actor.send({ type: "auth.logout" }),
|
|
553
579
|
},
|
|
554
580
|
});
|
|
@@ -562,6 +588,10 @@ import { PlayUIProvider, PlayRenderer, defineRegistry } from "@xmachines/play-so
|
|
|
562
588
|
import { defineCatalog } from "@xmachines/json-render-core";
|
|
563
589
|
import { schema } from "@xmachines/play-solid";
|
|
564
590
|
import { z } from "zod";
|
|
591
|
+
import type { ViewActor } from "@xmachines/play-view";
|
|
592
|
+
|
|
593
|
+
type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
|
|
594
|
+
declare const actor: ViewActor<unknown, AuthEvent>; // your actor, composed with `withView`
|
|
565
595
|
|
|
566
596
|
const catalog = defineCatalog(schema, {
|
|
567
597
|
components: {
|
|
@@ -580,7 +610,9 @@ const registryResult = defineRegistry(catalog, {
|
|
|
580
610
|
Login: ({ on }) => <button onClick={() => on("submit").emit()}>Log in</button>,
|
|
581
611
|
},
|
|
582
612
|
actions: {
|
|
583
|
-
login: async (
|
|
613
|
+
login: async (params) => {
|
|
614
|
+
if (params) actor.send({ type: "auth.login", username: params.username });
|
|
615
|
+
},
|
|
584
616
|
logout: async () => actor.send({ type: "auth.logout" }),
|
|
585
617
|
},
|
|
586
618
|
});
|
|
@@ -601,6 +633,10 @@ import { createPlayUI, defineRegistry, schema } from "@xmachines/play-dom";
|
|
|
601
633
|
import { defineCatalog } from "@xmachines/json-render-core";
|
|
602
634
|
import { z } from "zod";
|
|
603
635
|
import type { ComponentFn } from "@xmachines/play-dom";
|
|
636
|
+
import type { ViewActor } from "@xmachines/play-view";
|
|
637
|
+
|
|
638
|
+
type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
|
|
639
|
+
declare const actor: ViewActor<unknown, AuthEvent>; // your actor, composed with `withView`
|
|
604
640
|
|
|
605
641
|
const catalog = defineCatalog(schema, {
|
|
606
642
|
components: {
|
|
@@ -631,7 +667,9 @@ const Login: ComponentFn<typeof catalog, "Login"> = ({ on }) => {
|
|
|
631
667
|
const registryResult = defineRegistry(catalog, {
|
|
632
668
|
components: { Home, Login },
|
|
633
669
|
actions: {
|
|
634
|
-
login: async (
|
|
670
|
+
login: async (params) => {
|
|
671
|
+
if (params) actor.send({ type: "auth.login", username: params.username });
|
|
672
|
+
},
|
|
635
673
|
logout: async () => actor.send({ type: "auth.logout" }),
|
|
636
674
|
},
|
|
637
675
|
});
|
|
@@ -654,18 +692,18 @@ const disconnect = mount(actor, document.getElementById("app")!);
|
|
|
654
692
|
`query` field builds a query-less URL, exactly like `query: {}`.
|
|
655
693
|
|
|
656
694
|
**Fix:** With [`formatPlayRouteTransitions`](../api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md)
|
|
657
|
-
nothing is needed — the generated transitions
|
|
658
|
-
on every navigation. A machine that handles `play.route` by hand must
|
|
659
|
-
|
|
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:
|
|
660
698
|
|
|
661
|
-
```typescript
|
|
699
|
+
```typescript fragment
|
|
662
700
|
on: {
|
|
663
|
-
"play.route": {
|
|
664
|
-
|
|
665
|
-
params:
|
|
666
|
-
query:
|
|
667
|
-
}
|
|
668
|
-
},
|
|
701
|
+
"play.route": ({ event }) => ({
|
|
702
|
+
context: {
|
|
703
|
+
params: event.params ?? {},
|
|
704
|
+
query: event.query ?? {},
|
|
705
|
+
},
|
|
706
|
+
}),
|
|
669
707
|
}
|
|
670
708
|
```
|
|
671
709
|
|
|
@@ -675,7 +713,7 @@ on: {
|
|
|
675
713
|
|
|
676
714
|
**Fix:** Every state with `meta.route` must declare an explicit `id`:
|
|
677
715
|
|
|
678
|
-
```typescript
|
|
716
|
+
```typescript fragment
|
|
679
717
|
// ❌ Missing id
|
|
680
718
|
home: { meta: { route: "/" } }
|
|
681
719
|
|
|
@@ -690,6 +728,12 @@ home: { id: "home", meta: { route: "/" } }
|
|
|
690
728
|
**Fix:** Always call `actor.start()` before `actor.send()`:
|
|
691
729
|
|
|
692
730
|
```typescript
|
|
731
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
732
|
+
import type { AnyStateMachine } from "xstate";
|
|
733
|
+
|
|
734
|
+
declare const machine: AnyStateMachine; // your machine
|
|
735
|
+
|
|
736
|
+
const createPlayer = definePlayer({ machine });
|
|
693
737
|
const actor = createPlayer();
|
|
694
738
|
actor.start(); // required before any send()
|
|
695
739
|
actor.send({ type: "toggle" });
|
|
@@ -701,7 +745,7 @@ actor.send({ type: "toggle" });
|
|
|
701
745
|
|
|
702
746
|
**Fix:** Construct stable references outside JSX or memoize them:
|
|
703
747
|
|
|
704
|
-
```typescript
|
|
748
|
+
```typescript fragment
|
|
705
749
|
// ✅ Built outside the component
|
|
706
750
|
const routeTree = extractMachineRoutes(appMachine);
|
|
707
751
|
const routeMap = createRouteMapFromTree(routeTree);
|
|
@@ -726,7 +770,7 @@ node --version
|
|
|
726
770
|
|
|
727
771
|
| Term | Description |
|
|
728
772
|
| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
|
|
729
|
-
| `setup({
|
|
773
|
+
| `setup({ schemas })` | XState v6 entry point — declares the schemas of the context, the events, the input, and the `meta` of the states |
|
|
730
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 |
|
|
731
775
|
| `actor.start()` | Activates the machine — always call before sending events |
|
|
732
776
|
| `actor.send({ type })` | Sends an event; machine guards decide whether a transition occurs |
|
package/guides/inspector.md
CHANGED
|
@@ -1,35 +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 {
|
|
25
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
31
26
|
|
|
32
|
-
const
|
|
27
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
28
|
+
|
|
29
|
+
const inspect = (event: InspectionEvent): void => {
|
|
30
|
+
if (event.type === "@xstate.transition") {
|
|
31
|
+
console.log(event.event.type, "→", event.snapshot.status);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
33
34
|
|
|
34
35
|
const createPlayer = definePlayer({
|
|
35
36
|
machine: appMachine,
|
|
@@ -40,11 +41,17 @@ const actor = createPlayer();
|
|
|
40
41
|
actor.start();
|
|
41
42
|
```
|
|
42
43
|
|
|
43
|
-
|
|
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.
|
|
44
45
|
|
|
45
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:
|
|
46
47
|
|
|
47
48
|
```typescript
|
|
49
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
50
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
51
|
+
|
|
52
|
+
declare const machine: AnyStateMachine; // your machine
|
|
53
|
+
declare const sink: { write(event: InspectionEvent): void }; // your log
|
|
54
|
+
|
|
48
55
|
// Function form — the common case
|
|
49
56
|
definePlayer({ machine, options: { inspect: (event) => console.log(event.type) } });
|
|
50
57
|
|
|
@@ -61,6 +68,13 @@ Two properties of the attachment point matter in practice.
|
|
|
61
68
|
**It is configured on the factory, not on the instance.** `definePlayer({ machine, options })` returns a factory; `options.inspect` belongs to that configuration, and every actor the factory creates reports to the same observer. The factory's per-call options bag carries `snapshot` for restoring persisted state and nothing else — there is no per-instance `inspect` override. When one factory produces several live actors (multi-user scenarios, SSR, tests), demultiplex the stream by root instead:
|
|
62
69
|
|
|
63
70
|
```typescript
|
|
71
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
72
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
73
|
+
|
|
74
|
+
declare const machine: AnyStateMachine; // your machine
|
|
75
|
+
|
|
76
|
+
const inspect = (event: InspectionEvent) => console.log(event.type);
|
|
77
|
+
|
|
64
78
|
const createPlayer = definePlayer({ machine, options: { inspect } });
|
|
65
79
|
|
|
66
80
|
const alice = createPlayer({ userId: "alice" });
|
|
@@ -81,26 +95,31 @@ Because a `PlayerActor` _is_ the XState actor rather than a wrapper around a hid
|
|
|
81
95
|
- `event.actorRef === actor` for the player's own events — recognise a player by identity, no bookkeeping required.
|
|
82
96
|
- `event.rootId === actor.sessionId` for the whole tree, including invoked and spawned children, whose `actorRef` is the child rather than the player.
|
|
83
97
|
|
|
84
|
-
|
|
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.
|
|
85
104
|
|
|
86
105
|
### The construction caveat
|
|
87
106
|
|
|
88
107
|
`@xstate.actor` fires from _inside_ the actor's constructor. The `actorRef` it carries is a real `PlayerActor`, but a mid-construction one: `state`, `currentRoute`, `currentView` and `initialRoute` do not exist yet, and reading them there throws — XState itself refuses to read a snapshot in that window.
|
|
89
108
|
|
|
90
|
-
```typescript
|
|
109
|
+
```typescript fragment
|
|
91
110
|
const inspect = (event: InspectionEvent) => {
|
|
92
111
|
if (event.type === "@xstate.actor") {
|
|
93
112
|
// ❌ throws — the atoms are not assigned yet
|
|
94
113
|
console.log(event.actorRef.currentRoute.get());
|
|
95
114
|
}
|
|
96
|
-
if (event.type === "@xstate.
|
|
115
|
+
if (event.type === "@xstate.transition") {
|
|
97
116
|
// ✅ construction has returned; atoms are live
|
|
98
117
|
console.log(event.actorRef.getSnapshot().value);
|
|
99
118
|
}
|
|
100
119
|
};
|
|
101
120
|
```
|
|
102
121
|
|
|
103
|
-
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()`.
|
|
104
123
|
|
|
105
124
|
---
|
|
106
125
|
|
|
@@ -109,6 +128,12 @@ Capture the reference during construction if you need it, and read the atoms fro
|
|
|
109
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:
|
|
110
129
|
|
|
111
130
|
```typescript
|
|
131
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
132
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
133
|
+
|
|
134
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
135
|
+
declare function openInspector(): (event: InspectionEvent) => void; // your transport
|
|
136
|
+
|
|
112
137
|
let current: ((event: InspectionEvent) => void) | undefined;
|
|
113
138
|
|
|
114
139
|
const createPlayer = definePlayer({
|
|
@@ -118,8 +143,7 @@ const createPlayer = definePlayer({
|
|
|
118
143
|
|
|
119
144
|
// Later, from a click handler
|
|
120
145
|
export function enableInspector() {
|
|
121
|
-
|
|
122
|
-
current = inspect;
|
|
146
|
+
current = openInspector();
|
|
123
147
|
}
|
|
124
148
|
```
|
|
125
149
|
|
|
@@ -131,17 +155,25 @@ There is a catch worth knowing before you ship it: events that arrive while `cur
|
|
|
131
155
|
|
|
132
156
|
## Inspecting without a browser
|
|
133
157
|
|
|
134
|
-
|
|
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:
|
|
135
159
|
|
|
136
160
|
```typescript
|
|
137
|
-
import {
|
|
161
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
162
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
138
163
|
|
|
139
|
-
const
|
|
164
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
165
|
+
declare const socket: { send(data: string): void }; // your transport
|
|
166
|
+
|
|
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
|
+
};
|
|
140
172
|
|
|
141
173
|
const createPlayer = definePlayer({ machine: appMachine, options: { inspect } });
|
|
142
174
|
```
|
|
143
175
|
|
|
144
|
-
|
|
176
|
+
Every transport consumes the identical `options.inspect` observer, so switching between them touches only the line that creates the observer.
|
|
145
177
|
|
|
146
178
|
---
|
|
147
179
|
|
|
@@ -155,36 +187,70 @@ pnpm --filter @xmachines/play-react-demo run dev
|
|
|
155
187
|
|
|
156
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.
|
|
157
189
|
|
|
158
|
-
The demos share one controller, `createDemoInspector()
|
|
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:
|
|
159
193
|
|
|
160
194
|
```typescript
|
|
161
|
-
|
|
195
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
196
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
197
|
+
|
|
198
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
199
|
+
declare function openInspector(): (event: InspectionEvent) => void; // your transport
|
|
200
|
+
|
|
201
|
+
const buffer: InspectionEvent[] = [];
|
|
202
|
+
let current: ((event: InspectionEvent) => void) | undefined;
|
|
162
203
|
|
|
163
204
|
const actor = definePlayer({
|
|
164
|
-
machine:
|
|
165
|
-
options: {
|
|
205
|
+
machine: appMachine,
|
|
206
|
+
options: {
|
|
207
|
+
inspect: (event) => {
|
|
208
|
+
if (current) {
|
|
209
|
+
current(event);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
// Keep the last 500 events while nobody opens the inspector. A long session drops
|
|
213
|
+
// its oldest events, also the registration of the root actor, and the inspector
|
|
214
|
+
// then has no machine to draw. The demo controller pins each registration for
|
|
215
|
+
// that reason, and it costs more code.
|
|
216
|
+
buffer.push(event);
|
|
217
|
+
if (buffer.length > 500) buffer.shift();
|
|
218
|
+
},
|
|
219
|
+
},
|
|
166
220
|
})();
|
|
167
221
|
actor.start();
|
|
168
222
|
|
|
169
|
-
// The debug panel
|
|
170
|
-
|
|
223
|
+
// The click handler of the "Show Inspector" button of the debug panel
|
|
224
|
+
export function showInspector() {
|
|
225
|
+
if (current) return;
|
|
226
|
+
current = openInspector();
|
|
227
|
+
for (const event of buffer.splice(0)) current(event);
|
|
228
|
+
}
|
|
171
229
|
```
|
|
172
230
|
|
|
173
|
-
The controller answers the late-opening problem from the previous section: it buffers serialized events from actor creation, pins the registration of every live root so it can never roll out of the bounded buffer, and flushes those buffers when the inspector window completes its handshake. Several machines can be alive together — one for each document a host has open — and the handshake replays each of them. That is a demo trade-off rather than a general recommendation — every transition pays serialization whether or not anyone ever opens the inspector — but it is what makes the button work at any point in a session. The shared package's own README, at `packages/play-actor/examples/shared/README.md` in this repository, documents the design in full.
|
|
231
|
+
The demo controller answers the late-opening problem from the previous section: it buffers serialized events from actor creation, pins the registration of every live root so it can never roll out of the bounded buffer, and flushes those buffers when the inspector window completes its handshake. Several machines can be alive together — one for each document a host has open — and the handshake replays each of them. That is a demo trade-off rather than a general recommendation — every transition pays serialization whether or not anyone ever opens the inspector — but it is what makes the button work at any point in a session. The shared package's own README, at `packages/play-actor/examples/shared/README.md` in this repository, documents the design in full.
|
|
174
232
|
|
|
175
233
|
---
|
|
176
234
|
|
|
177
235
|
## Production considerations
|
|
178
236
|
|
|
179
|
-
**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:
|
|
180
238
|
|
|
181
239
|
```typescript
|
|
182
|
-
|
|
240
|
+
/// <reference types="vite/client" />
|
|
241
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
242
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
243
|
+
|
|
244
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
245
|
+
declare function openInspector(): (event: InspectionEvent) => void; // your transport
|
|
246
|
+
|
|
247
|
+
// `import.meta.env.DEV` is the development flag of Vite
|
|
248
|
+
const options = import.meta.env.DEV ? { inspect: openInspector() } : {};
|
|
183
249
|
|
|
184
250
|
const createPlayer = definePlayer({ machine: appMachine, options });
|
|
185
251
|
```
|
|
186
252
|
|
|
187
|
-
**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.
|
|
188
254
|
|
|
189
255
|
---
|
|
190
256
|
|
|
@@ -194,4 +260,4 @@ const createPlayer = definePlayer({ machine: appMachine, options });
|
|
|
194
260
|
- **[`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md)** — the actor an inspector observes
|
|
195
261
|
- **[The Actor Model](actor-model.md)** — why the actor is the actor, and what that buys
|
|
196
262
|
- **[Getting Started](getting-started.md)** — installing packages and creating your first actor
|
|
197
|
-
- **[Stately inspect docs](https://stately.ai/docs/inspector)** — the inspector itself
|
|
263
|
+
- **[Stately inspect docs](https://stately.ai/docs/inspector)** — the inspector app itself
|