@xmachines/docs 2.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -16
- package/api/@xmachines/play/README.md +75 -97
- package/api/@xmachines/play/errors/README.md +8 -0
- package/api/@xmachines/play/{classes → errors/classes}/NonNullableError.md +6 -6
- package/api/@xmachines/play/{classes → errors/classes}/PlayError.md +35 -10
- package/api/@xmachines/play/index/README.md +75 -0
- package/api/@xmachines/play/index/functions/asCleanup.md +78 -0
- package/api/@xmachines/play/{functions → index/functions}/assertNonNullable.md +2 -2
- package/api/@xmachines/{play-actor → play/index}/functions/shallowEqualExcept.md +3 -3
- package/api/@xmachines/play/index/type-aliases/Cleanup.md +38 -0
- package/api/@xmachines/play/index/type-aliases/DisposeKey.md +32 -0
- package/api/@xmachines/play/{type-aliases → index/type-aliases}/PlayEvent.md +4 -4
- package/api/@xmachines/play/index/variables/DISPOSE.md +34 -0
- package/api/@xmachines/play-actor/README.md +78 -222
- package/api/@xmachines/play-actor/interfaces/ActorEvent.md +18 -0
- package/api/@xmachines/play-actor/interfaces/PlayActor.md +73 -0
- package/api/@xmachines/play-dom/README.md +99 -43
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +12 -11
- package/api/@xmachines/play-dom/functions/asCleanup.md +78 -0
- package/api/@xmachines/play-dom/functions/createPlayUI.md +6 -6
- package/api/@xmachines/play-dom/functions/createRenderer.md +3 -3
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +17 -11
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +5 -4
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +14 -12
- package/api/@xmachines/play-dom/type-aliases/Cleanup.md +38 -0
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +30 -8
- package/api/@xmachines/play-dom-router/README.md +99 -73
- package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +22 -21
- package/api/@xmachines/{play-vue-router → play-dom-router}/classes/RouteMap.md +12 -6
- package/api/@xmachines/play-dom-router/functions/asCleanup.md +78 -0
- package/api/@xmachines/play-dom-router/functions/connectRouter.md +3 -8
- package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +7 -1
- package/api/@xmachines/play-dom-router/functions/createRouter.md +12 -6
- package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +73 -19
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +16 -16
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +8 -8
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +24 -21
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +36 -7
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +40 -6
- package/api/@xmachines/play-dom-router/type-aliases/Cleanup.md +38 -0
- package/api/@xmachines/play-dom-router/variables/DISPOSE.md +34 -0
- package/api/@xmachines/play-react/README.md +18 -40
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +50 -11
- package/api/@xmachines/play-react/functions/useActor.md +1 -1
- package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-react/functions/useSignalEffect.md +1 -1
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +11 -11
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +8 -6
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +6 -5
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +8 -8
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-react/variables/ActorProvider.md +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/variables/schema.md +52 -0
- package/api/@xmachines/play-react-router/README.md +22 -50
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +17 -16
- package/api/@xmachines/play-react-router/classes/RouteMap.md +11 -5
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +11 -8
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +16 -9
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +10 -10
- package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +17 -7
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-router/README.md +108 -189
- package/api/@xmachines/play-router/errors/README.md +15 -0
- package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +191 -0
- package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +175 -0
- package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +175 -0
- package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +200 -0
- package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +203 -0
- package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +175 -0
- package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +199 -0
- package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +192 -0
- package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +182 -0
- package/api/@xmachines/play-router/index/README.md +75 -0
- package/api/@xmachines/play-router/{classes → index/classes}/RouteMap.md +12 -6
- package/api/@xmachines/play-router/{classes → index/classes}/RouterBridgeBase.md +19 -17
- package/api/@xmachines/play-router/{functions → index/functions}/buildPlayRouteEvent.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/buildRouteTree.md +14 -4
- package/api/@xmachines/play-router/{functions → index/functions}/cleanFrameworkParams.md +3 -4
- package/api/@xmachines/play-router/{functions → index/functions}/createRouteMapFromTree.md +13 -6
- package/api/@xmachines/play-router/{functions → index/functions}/createRouterConnection.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/detectDuplicateRoutes.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/extractQuery.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/extractRouteParams.md +3 -3
- package/api/@xmachines/play-router/{functions → index/functions}/findRouteById.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/findRouteByPath.md +2 -2
- package/api/@xmachines/play-router/index/functions/getPatternParamNames.md +29 -0
- package/api/@xmachines/play-router/index/functions/getRequiredPatternParamNames.md +39 -0
- package/api/@xmachines/play-router/{functions → index/functions}/isMountableBridge.md +2 -2
- package/api/@xmachines/play-router/index/functions/joinBasePath.md +37 -0
- package/api/@xmachines/play-router/{functions → index/functions}/mountKey.md +2 -2
- package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +43 -0
- package/api/@xmachines/play-router/{functions → index/functions}/openProviderBridge.md +14 -14
- package/api/@xmachines/play-router/index/functions/pickOwnParams.md +41 -0
- package/api/@xmachines/play-router/{functions → index/functions}/repointProviderBridge.md +2 -2
- package/api/@xmachines/play-router/index/functions/resolveBasePath.md +51 -0
- package/api/@xmachines/play-router/{functions → index/functions}/resolveFrameworkParams.md +11 -13
- package/api/@xmachines/play-router/{functions → index/functions}/sanitizePathname.md +2 -2
- package/api/@xmachines/play-router/index/functions/stripBasePath.md +44 -0
- package/api/@xmachines/play-router/{functions → index/functions}/validateRouteFormat.md +2 -2
- package/api/@xmachines/play-router/{functions → index/functions}/validateStateExists.md +2 -2
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/BasePathOptions.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +13 -0
- package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +47 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/LocationLike.md +6 -6
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/MountableRouterBridge.md +9 -9
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/OpenProviderBridgeArgs.md +13 -13
- package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +130 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/PlayRouterProviderBaseProps.md +15 -15
- package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +14 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/ResolvedRoutePath.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/Routable.md +26 -0
- package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteInfo.md +11 -11
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteMapOptions.md +5 -5
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteMapping.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +12 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteNode.md +13 -13
- package/api/@xmachines/play-router/index/interfaces/RouteObject.md +34 -0
- package/api/@xmachines/play-router/index/interfaces/RouteTree.md +27 -0
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouteWatcherHandle.md +7 -7
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouterBridge.md +5 -5
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/RouterConnection.md +38 -9
- package/api/@xmachines/play-router/{interfaces → index/interfaces}/WindowLike.md +4 -4
- package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +46 -0
- package/api/@xmachines/play-router/index/type-aliases/RouteData.md +12 -0
- package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +31 -0
- package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +11 -0
- package/api/@xmachines/play-router/index/variables/DISPOSE.md +34 -0
- package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +18 -0
- package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +18 -0
- package/api/@xmachines/play-router/xstate/README.md +53 -0
- package/api/@xmachines/{play-dom-router → play-router/xstate}/functions/createRouteMap.md +8 -6
- package/api/@xmachines/play-router/{functions → xstate/functions}/extractMachineRoutes.md +4 -4
- package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +35 -0
- package/api/@xmachines/play-router/{functions → xstate/functions}/getRoutableRoutes.md +6 -6
- package/api/@xmachines/play-router/{functions → xstate/functions}/getRouteMappings.md +7 -7
- package/api/@xmachines/play-router/{functions → xstate/functions}/getTransitionReachableRoutes.md +2 -2
- package/api/@xmachines/play-router/{functions → xstate/functions}/isRouteReachable.md +2 -2
- package/api/@xmachines/play-router/{functions → xstate/functions}/machineToGraph.md +2 -2
- package/api/@xmachines/play-router/xstate/functions/routeExists.md +26 -0
- package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +15 -0
- package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +17 -0
- package/api/@xmachines/play-router/{type-aliases → xstate/type-aliases}/MachineGraph.md +2 -2
- package/api/@xmachines/play-signals/README.md +5 -25
- package/api/@xmachines/play-signals/functions/watchSignal.md +27 -4
- package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +2 -2
- package/api/@xmachines/play-signals/interfaces/SignalComputed.md +2 -2
- package/api/@xmachines/play-signals/interfaces/SignalOptions.md +2 -2
- package/api/@xmachines/play-signals/interfaces/SignalState.md +3 -3
- package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +4 -4
- package/api/@xmachines/play-signals/type-aliases/Cleanup.md +38 -0
- package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +1 -1
- package/api/@xmachines/play-solid/README.md +36 -35
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/functions/usePlayView.md +14 -1
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +11 -11
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +16 -8
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +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/variables/schema.md +71 -0
- package/api/@xmachines/play-solid-router/README.md +31 -52
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +11 -5
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +30 -53
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +9 -8
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +38 -35
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +12 -12
- package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +4 -4
- 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 +17 -7
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
- package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-svelte/README.md +13 -28
- 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 +7 -1
- package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
- package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +12 -12
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +4 -4
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +14 -14
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +8 -8
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-svelte/variables/schema.md +16 -0
- package/api/@xmachines/play-svelte-spa-router/README.md +22 -41
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +11 -5
- package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +22 -21
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +3 -2
- package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +8 -8
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +36 -7
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/README.md +17 -35
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +11 -5
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +22 -21
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +3 -2
- package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +8 -8
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +36 -7
- package/api/@xmachines/play-tanstack-react-router/README.md +19 -43
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +11 -5
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +18 -17
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +11 -8
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +16 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +10 -10
- package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +17 -7
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-tanstack-router/README.md +6 -4
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +17 -20
- 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 +26 -52
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +11 -5
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +49 -45
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +9 -8
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +9 -14
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +10 -10
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +17 -7
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-url/README.md +69 -0
- package/api/@xmachines/play-url/errors/README.md +17 -0
- package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +200 -0
- package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +203 -0
- package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +199 -0
- package/api/@xmachines/play-url/index/README.md +65 -0
- package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +39 -0
- package/api/@xmachines/play-url/index/functions/getCandidates.md +29 -0
- package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +31 -0
- package/api/@xmachines/play-url/index/functions/getIndexKey.md +30 -0
- package/api/@xmachines/play-url/index/functions/getNormalizedParamNameMap.md +32 -0
- package/api/@xmachines/play-url/index/functions/getPatternParamNames.md +29 -0
- package/api/@xmachines/play-url/index/functions/getRequiredPatternParamNames.md +39 -0
- package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +36 -0
- package/api/@xmachines/play-url/index/functions/isParameterizedPattern.md +36 -0
- package/api/@xmachines/{play-router → play-url/index}/functions/joinBasePath.md +2 -2
- package/api/@xmachines/{play-router → play-url/index}/functions/normalizeBasePath.md +2 -2
- package/api/@xmachines/play-url/index/functions/normalizeParamNames.md +36 -0
- package/api/@xmachines/play-url/index/functions/parsePattern.md +27 -0
- package/api/@xmachines/{play-router → play-url/index}/functions/pickOwnParams.md +4 -4
- package/api/@xmachines/{play-router → play-url/index}/functions/resolveBasePath.md +2 -2
- package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +49 -0
- package/api/@xmachines/{play-router → play-url/index}/functions/stripBasePath.md +2 -2
- package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +28 -0
- package/api/@xmachines/{play-router → play-url/index}/interfaces/FrameworkParamsSource.md +9 -9
- package/api/@xmachines/play-url/index/interfaces/GroupPart.md +15 -0
- package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +14 -0
- package/api/@xmachines/play-url/index/interfaces/ParamPart.md +21 -0
- package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +23 -0
- package/api/@xmachines/play-url/index/interfaces/PatternParam.md +15 -0
- package/api/@xmachines/{play-router → play-url/index}/interfaces/ResolvedBasePath.md +6 -6
- package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +11 -0
- package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +9 -0
- package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +22 -0
- package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +68 -0
- package/api/@xmachines/{play-router → play-url/index}/variables/NO_BASE_PATH.md +2 -2
- package/api/@xmachines/play-url/index/variables/URLPattern.md +21 -0
- package/api/@xmachines/play-view/README.md +165 -0
- package/api/@xmachines/play-view/errors/README.md +17 -0
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +192 -0
- package/api/@xmachines/play-view/index/README.md +55 -0
- package/api/@xmachines/{play-actor → play-view/index}/functions/attachRenderErrorHandler.md +6 -6
- package/api/@xmachines/{play-actor → play-view/index}/functions/composePlayState.md +2 -2
- package/api/@xmachines/play-view/index/functions/createFailureLatch.md +20 -0
- package/api/@xmachines/play-view/index/functions/createReportGuard.md +26 -0
- package/api/@xmachines/{play-actor → play-view/index}/functions/createViewStoreLifecycle.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/guardContextWrites.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/refreshContextSubtree.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/reuseComposedState.md +3 -3
- package/api/@xmachines/play-view/index/functions/sameViewInputs.md +25 -0
- package/api/@xmachines/{play-actor → play-view/index}/functions/toAtomState.md +2 -2
- package/api/@xmachines/{play-actor → play-view/index}/functions/typedSpec.md +2 -2
- package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +49 -0
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/BaseViewContextValue.md +12 -12
- package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +60 -0
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/PlaySpec.md +8 -8
- package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +92 -0
- package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +18 -0
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ResolveViewStoreOptions.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +19 -0
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ViewStoreLifecycle.md +6 -5
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/ViewStoreResolution.md +7 -7
- package/api/@xmachines/{play-actor → play-view/index}/interfaces/Viewable.md +5 -5
- package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +26 -0
- package/api/@xmachines/{play-actor → play-view/index}/variables/CONTEXT_STATE_KEY.md +2 -2
- package/api/@xmachines/play-vue/README.md +46 -42
- 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 +6 -1
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +13 -8
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +15 -10
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +8 -8
- package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +11 -3
- package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue/variables/schema.md +71 -0
- package/api/@xmachines/play-vue-router/README.md +34 -77
- package/api/@xmachines/play-vue-router/errors/README.md +8 -0
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +193 -0
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +177 -0
- package/api/@xmachines/play-vue-router/index/README.md +20 -0
- package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +157 -0
- package/api/@xmachines/play-vue-router/{classes → index/classes}/VueRouterBridge.md +24 -43
- package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +130 -0
- package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +72 -0
- package/api/@xmachines/play-vue-router/{interfaces → index/interfaces}/RouteMapOptions.md +5 -5
- package/api/@xmachines/play-vue-router/{interfaces → index/interfaces}/RouteMapping.md +6 -6
- package/api/@xmachines/play-vue-router/{interfaces → index/interfaces}/RouterBridge.md +5 -5
- package/api/@xmachines/play-vue-router/{variables → index/variables}/PlayRouterProvider.md +4 -4
- package/api/@xmachines/play-xstate/README.md +163 -98
- package/api/@xmachines/play-xstate/errors/README.md +13 -0
- package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +199 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +198 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +169 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +197 -0
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +176 -0
- package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +199 -0
- package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +203 -0
- package/api/@xmachines/play-xstate/index/README.md +38 -0
- package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +584 -0
- package/api/@xmachines/play-xstate/index/functions/compose.md +224 -0
- package/api/@xmachines/play-xstate/index/functions/definePlayer.md +158 -0
- package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +22 -0
- package/api/@xmachines/play-xstate/{interfaces → index/interfaces}/PlayerFactoryResumeOptions.md +3 -3
- package/api/@xmachines/play-xstate/{interfaces → index/interfaces}/PlayerOptions.md +8 -8
- package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +33 -0
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +39 -0
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +27 -0
- package/api/@xmachines/play-xstate/index/variables/DISPOSE.md +34 -0
- package/api/@xmachines/play-xstate/with-routing/README.md +46 -0
- package/api/@xmachines/play-xstate/{functions → with-routing/functions}/buildRouteUrl.md +2 -2
- package/api/@xmachines/play-xstate/{functions → with-routing/functions}/deriveRoute.md +4 -4
- package/api/@xmachines/play-xstate/{functions → with-routing/functions}/formatPlayRouteTransitions.md +2 -2
- package/api/@xmachines/play-xstate/{functions → with-routing/functions}/isAbsoluteRoute.md +3 -3
- package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +36 -0
- package/api/@xmachines/play-xstate/{interfaces → with-routing/interfaces}/RouteContext.md +6 -6
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +34 -0
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +12 -0
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +31 -0
- package/api/@xmachines/play-xstate/{type-aliases → with-routing/type-aliases}/RouteMachineConfig.md +5 -5
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +11 -0
- package/api/@xmachines/play-xstate/{type-aliases → with-routing/type-aliases}/RouteStateNode.md +21 -7
- package/api/@xmachines/play-xstate/with-view/README.md +31 -0
- package/api/@xmachines/play-xstate/with-view/functions/withView.md +32 -0
- package/api/@xmachines/shared/README.md +10 -32
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +2 -2
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +2 -1
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
- package/api/README.md +2 -0
- package/api/llms.txt +15 -10
- package/contributing/architecture.md +97 -65
- package/contributing/configuration.md +142 -41
- package/contributing/deployment.md +30 -28
- package/contributing/development.md +94 -31
- package/contributing/testing.md +90 -31
- package/examples/README.md +9 -7
- package/examples/form-validation.md +3 -2
- package/examples/multi-router-integration.md +61 -39
- package/examples/routing-patterns.md +15 -14
- package/examples/traffic-light.md +11 -5
- package/guides/README.md +1 -0
- package/guides/actor-model.md +35 -26
- package/guides/getting-started.md +47 -44
- package/guides/inspector.md +4 -4
- package/guides/routing.md +245 -0
- package/guides/signals.md +43 -0
- package/guides/state-machines.md +16 -17
- package/package.json +10 -9
- package/rfc/play.md +35 -22
- package/api/@xmachines/play-actor/classes/AbstractActor.md +0 -505
- package/api/@xmachines/play-actor/interfaces/BaseActorProviderProps.md +0 -48
- package/api/@xmachines/play-actor/interfaces/Routable.md +0 -14
- package/api/@xmachines/play-dom-router/interfaces/RouteMap.md +0 -122
- package/api/@xmachines/play-react/type-aliases/PlayRendererProps.md +0 -13
- package/api/@xmachines/play-react-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-react-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-router/functions/getNavigableRoutes.md +0 -35
- package/api/@xmachines/play-router/functions/getPatternParamNames.md +0 -24
- package/api/@xmachines/play-router/functions/getRequiredPatternParamNames.md +0 -36
- package/api/@xmachines/play-router/functions/routeExists.md +0 -26
- package/api/@xmachines/play-router/interfaces/BuildPlayRouteEventOptions.md +0 -13
- package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +0 -15
- package/api/@xmachines/play-router/interfaces/MachineNodeData.md +0 -17
- package/api/@xmachines/play-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +0 -135
- package/api/@xmachines/play-router/interfaces/RoutableActor.md +0 -65
- package/api/@xmachines/play-router/interfaces/RouteMatch.md +0 -12
- package/api/@xmachines/play-router/interfaces/RouteObject.md +0 -21
- package/api/@xmachines/play-router/interfaces/RouteTree.md +0 -21
- package/api/@xmachines/play-router/type-aliases/BaseRouteMapping.md +0 -13
- package/api/@xmachines/play-router/type-aliases/PlayRouterBridgeConstructor.md +0 -36
- package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +0 -11
- package/api/@xmachines/play-solid-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +0 -471
- package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +0 -13
- package/api/@xmachines/play-svelte-spa-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-svelte-spa-router/type-aliases/RoutableActor.md +0 -9
- package/api/@xmachines/play-sveltekit-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-sveltekit-router/type-aliases/RoutableActor.md +0 -9
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +0 -29
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +0 -31
- package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/RoutableActor.md +0 -13
- package/api/@xmachines/play-vue/interfaces/VisibilityProviderProps.md +0 -9
- package/api/@xmachines/play-vue/variables/getPlayViewContext.md +0 -34
- package/api/@xmachines/play-vue-router/functions/createRouteMap.md +0 -40
- package/api/@xmachines/play-vue-router/interfaces/PlayActor.md +0 -70
- package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +0 -135
- package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +0 -13
- package/api/@xmachines/play-vue-router/type-aliases/VueRouteMap.md +0 -13
- package/api/@xmachines/play-vue-router/variables/VueRouteMap.md +0 -13
- package/api/@xmachines/play-xstate/classes/PlayerActor.md +0 -532
- package/api/@xmachines/play-xstate/functions/composeGuards.md +0 -86
- package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +0 -72
- package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +0 -43
- package/api/@xmachines/play-xstate/functions/definePlayer.md +0 -78
- package/api/@xmachines/play-xstate/functions/eventMatches.md +0 -45
- package/api/@xmachines/play-xstate/functions/hasContext.md +0 -45
- package/api/@xmachines/play-xstate/functions/negateGuard.md +0 -67
- package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +0 -20
- package/api/@xmachines/play-xstate/interfaces/RouteObject.md +0 -17
- package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +0 -19
- package/api/@xmachines/play-xstate/type-aliases/Guard.md +0 -36
- package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +0 -23
- package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +0 -26
- package/api/@xmachines/play-xstate/type-aliases/RouteMetadata.md +0 -9
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Documentation, guides, RFCs, and generated API reference for XMachines.
|
|
4
4
|
|
|
5
|
-
[](https://opensource.org/licenses/MIT) [](https://opensource.org/licenses/MIT) [](https://www.npmjs.com/package/@xmachines/docs)
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
@@ -78,7 +78,8 @@ Concept guides and tutorials that show how to use XMachines:
|
|
|
78
78
|
|
|
79
79
|
- **[Getting Started](guides/getting-started.md)** — `setup().createMachine()` → `definePlayer()` → `actor.start()` → TC39 Signals
|
|
80
80
|
- **[Understanding State Machines](guides/state-machines.md)** — `meta.route`, `meta.view`, and why machines replace boolean flags
|
|
81
|
-
- **[Understanding the Actor Model](guides/actor-model.md)** — Actor/infrastructure split, `
|
|
81
|
+
- **[Understanding the Actor Model](guides/actor-model.md)** — Actor/infrastructure split, `PlayActor`, and the reset invariant
|
|
82
|
+
- **[Understanding Routing](guides/routing.md)** — The URLPattern grammar of `meta.route`, the prefix rule, and the routing invariants
|
|
82
83
|
- **[Understanding TC39 Signals](guides/signals.md)** — Signal primitives and the five architectural invariants they enforce
|
|
83
84
|
|
|
84
85
|
**Tooling:**
|
|
@@ -112,25 +113,16 @@ TypeDoc generates the API reference for every public package. See [`api/README.m
|
|
|
112
113
|
The documented packages:
|
|
113
114
|
|
|
114
115
|
- [`@xmachines/play`](../play/README.md) — Core protocols (`PlayEvent`, `PlayError`)
|
|
115
|
-
- [`@xmachines/play-actor`](../play-actor/README.md) — `
|
|
116
|
+
- [`@xmachines/play-actor`](../play-actor/README.md) — `PlayActor`
|
|
117
|
+
- [`@xmachines/play-view`](../play-view/README.md) — `Viewable`, `PlaySpec`, the view store lifecycle
|
|
116
118
|
- [`@xmachines/play-signals`](../play-signals/README.md) — TC39 Signals polyfill, `watchSignal`
|
|
117
|
-
- [`@xmachines/play-router`](../play-router/README.md) — `
|
|
119
|
+
- [`@xmachines/play-router`](../play-router/README.md) — `RouterBridgeBase`, `RouteMap`, `Routable`
|
|
120
|
+
- [`@xmachines/play-router/xstate`](../play-router/README.md) — `extractMachineRoutes`, `createRouteMap`
|
|
121
|
+
- [`@xmachines/play-url`](../play-url/README.md) — the URLPattern grammar, a base path, the params of a framework router
|
|
118
122
|
- [`@xmachines/play-xstate`](../play-xstate/README.md) — `definePlayer`, `formatPlayRouteTransitions`, `PlayerActor`
|
|
119
123
|
- [`@xmachines/play-dom`](../play-dom/README.md), [`play-react`](../play-react/README.md), [`play-solid`](../play-solid/README.md), [`play-svelte`](../play-svelte/README.md), [`play-vue`](../play-vue/README.md) — View renderers
|
|
120
124
|
- [`@xmachines/play-dom-router`](../play-dom-router/README.md), [`play-tanstack-router`](../play-tanstack-router/README.md), [`play-react-router`](../play-react-router/README.md), [`play-tanstack-react-router`](../play-tanstack-react-router/README.md), [`play-solid-router`](../play-solid-router/README.md), [`play-tanstack-solid-router`](../play-tanstack-solid-router/README.md), [`play-vue-router`](../play-vue-router/README.md), [`play-svelte-spa-router`](../play-svelte-spa-router/README.md), [`play-sveltekit-router`](../play-sveltekit-router/README.md) — Router adapters
|
|
121
125
|
|
|
122
|
-
## Testing
|
|
123
|
-
|
|
124
|
-
Run the docs package tests in isolation:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
# From the monorepo root
|
|
128
|
-
pnpm --filter @xmachines/docs test
|
|
129
|
-
|
|
130
|
-
# Or from within the package directory
|
|
131
|
-
pnpm test
|
|
132
|
-
```
|
|
133
|
-
|
|
134
126
|
## Regenerating API Docs
|
|
135
127
|
|
|
136
128
|
TypeDoc generates the `api/` directory. Never edit it by hand. Generate it again from the monorepo root:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
> Core protocol layer for the Universal Player Architecture. It defines `PlayEvent`, `PlayError`, and the contracts that keep the business logic loosely coupled to the runtime adapters.
|
|
6
6
|
|
|
7
|
-
[](https://opensource.org/licenses/MIT) [](https://opensource.org/licenses/MIT) [](https://www.npmjs.com/package/@xmachines/play)
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
pnpm add @xmachines/play
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
> **This package requires Node.js `>=
|
|
17
|
+
> **This package requires Node.js `>= 24.0.0`.** Every package is an ES module (`"type": "module"`).
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -26,6 +26,7 @@ pnpm add @xmachines/play
|
|
|
26
26
|
- **`PlayError`** — the typed base class for all `@xmachines/*` runtime errors
|
|
27
27
|
- **`NonNullableError`** — the error that a package throws when a required value is `null` or `undefined`
|
|
28
28
|
- **`assertNonNullable()`** — the assertion utility that narrows `T | null | undefined` to `T`
|
|
29
|
+
- **`Cleanup`**, **`asCleanup()`**, **`DISPOSE`** — the release protocol that every subscription of the ecosystem hands back
|
|
29
30
|
|
|
30
31
|
These protocols implement the architectural invariants that the Play RFC defines:
|
|
31
32
|
|
|
@@ -68,8 +69,8 @@ const invalid: LoginEvent = { type: "auth.login" }; // Error!
|
|
|
68
69
|
Base class for every `@xmachines/*` runtime error. Each error has a stable `scope` (the class or the module that throws it) and a stable `code` (a machine-readable identifier). Always branch on `.code` or on the subclass. Never branch on `.message`.
|
|
69
70
|
|
|
70
71
|
```typescript
|
|
71
|
-
import {
|
|
72
|
-
import { NonNullableError } from "@xmachines/play/errors";
|
|
72
|
+
import { assertNonNullable } from "@xmachines/play";
|
|
73
|
+
import { NonNullableError, PlayError } from "@xmachines/play/errors";
|
|
73
74
|
|
|
74
75
|
try {
|
|
75
76
|
assertNonNullable(document.getElementById("app"), "#app");
|
|
@@ -90,7 +91,7 @@ try {
|
|
|
90
91
|
Extend `PlayError` in your own `@xmachines/*`-compatible packages:
|
|
91
92
|
|
|
92
93
|
```typescript
|
|
93
|
-
import { PlayError } from "@xmachines/play";
|
|
94
|
+
import { PlayError } from "@xmachines/play/errors";
|
|
94
95
|
|
|
95
96
|
export class MyPackageError extends PlayError {
|
|
96
97
|
constructor(message: string, options?: ErrorOptions) {
|
|
@@ -111,24 +112,81 @@ import { assertNonNullable } from "@xmachines/play";
|
|
|
111
112
|
const el = assertNonNullable(document.getElementById("app"), "#app");
|
|
112
113
|
```
|
|
113
114
|
|
|
115
|
+
### `Cleanup`, `asCleanup(release)`, and `DISPOSE`
|
|
116
|
+
|
|
117
|
+
Every subscription of the ecosystem hands one value back: the release. `Cleanup` is that
|
|
118
|
+
type. It is a function AND a `Disposable`, so one value serves both forms — the caller
|
|
119
|
+
that keeps the release in a field, and the caller that gives it to a scope.
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
import { asCleanup, type Cleanup } from "@xmachines/play";
|
|
123
|
+
|
|
124
|
+
// The explicit form. It stays correct.
|
|
125
|
+
const stop = watchSignal(count, render);
|
|
126
|
+
stop();
|
|
127
|
+
|
|
128
|
+
// The scoped form. The scope releases it, and an exception releases it too.
|
|
129
|
+
{
|
|
130
|
+
using stop = watchSignal(count, render);
|
|
131
|
+
render(count.get());
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`asCleanup` publishes a release. It gives the SAME function back with the dispose key
|
|
136
|
+
added, and wraps nothing, so a caller that compares two releases or holds one in a `Set`
|
|
137
|
+
sees what it saw before.
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
export function watchSignal<T>(signal: Signal.State<T>, onValue: (v: T) => void): Cleanup {
|
|
141
|
+
const watcher = new Signal.subtle.Watcher(() => {});
|
|
142
|
+
watcher.watch(signal);
|
|
143
|
+
return asCleanup(() => watcher.unwatch(signal));
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`DISPOSE` is the key that the release sits under, and a class implements the protocol
|
|
148
|
+
with it:
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
import { DISPOSE } from "@xmachines/play";
|
|
152
|
+
|
|
153
|
+
class Session {
|
|
154
|
+
close(): void {}
|
|
155
|
+
[DISPOSE](): void {
|
|
156
|
+
this.close();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Use `DISPOSE` and not a bare `Symbol.dispose`. A bundler that downlevels `using` for a
|
|
162
|
+
target below Chrome 134 emits a helper that reads
|
|
163
|
+
`object[Symbol.dispose || Symbol.for("Symbol.dispose")]`, and `DISPOSE` is that same
|
|
164
|
+
pair.
|
|
165
|
+
|
|
166
|
+
> **The `using` FORM needs `"lib": ["ESNext"]`, and the `Cleanup` VALUE needs nothing.**
|
|
167
|
+
> A consumer on a lower `lib` reads `Cleanup` as the plain `() => void` that these
|
|
168
|
+
> functions returned before the protocol existed, and every call site keeps compiling.
|
|
169
|
+
|
|
114
170
|
---
|
|
115
171
|
|
|
116
172
|
## API Summary
|
|
117
173
|
|
|
118
174
|
### Exported from `@xmachines/play`
|
|
119
175
|
|
|
120
|
-
| Export | Kind | Description
|
|
121
|
-
| --------------------- | ---------- |
|
|
122
|
-
| `PlayEvent<TPayload>` | `type` | Universal event contract — `{ type: string } & TPayload`
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
176
|
+
| Export | Kind | Description |
|
|
177
|
+
| --------------------- | ---------- | -------------------------------------------------------------------- |
|
|
178
|
+
| `PlayEvent<TPayload>` | `type` | Universal event contract — `{ type: string } & TPayload` |
|
|
179
|
+
| `assertNonNullable` | `function` | Asserts that the value is not null. It returns the narrowed value |
|
|
180
|
+
| `Cleanup` | `type` | The release of a subscription — `(() => void) & Disposable` |
|
|
181
|
+
| `asCleanup` | `function` | Publishes one release as a `Cleanup`. It changes the function itself |
|
|
182
|
+
| `DISPOSE` | `const` | The symbol key that a release sits under |
|
|
183
|
+
| `DisposeKey` | `type` | The type of that key, and `never` where the consumer omits the lib |
|
|
126
184
|
|
|
127
185
|
### Exported from `@xmachines/play/errors`
|
|
128
186
|
|
|
129
187
|
| Export | Kind | Description |
|
|
130
188
|
| ------------------ | ------- | --------------------------------------------------------- |
|
|
131
|
-
| `PlayError` | `class` | The base
|
|
189
|
+
| `PlayError` | `class` | The base class of every `@xmachines/*` typed error |
|
|
132
190
|
| `NonNullableError` | `class` | `scope: "assertNonNullable"`, `code: "PLAY_NON_NULLABLE"` |
|
|
133
191
|
|
|
134
192
|
---
|
|
@@ -145,100 +203,20 @@ Every other `@xmachines/*` package exports its own error subclasses from its `./
|
|
|
145
203
|
| ---------------------------- | ----------------------------------- |
|
|
146
204
|
| `@xmachines/play` | `@xmachines/play/errors` |
|
|
147
205
|
| `@xmachines/play-router` | `@xmachines/play-router/errors` |
|
|
206
|
+
| `@xmachines/play-url` | `@xmachines/play-url/errors` |
|
|
207
|
+
| `@xmachines/play-view` | `@xmachines/play-view/errors` |
|
|
148
208
|
| `@xmachines/play-xstate` | `@xmachines/play-xstate/errors` |
|
|
149
209
|
| `@xmachines/play-vue-router` | `@xmachines/play-vue-router/errors` |
|
|
150
210
|
|
|
151
211
|
---
|
|
152
212
|
|
|
153
|
-
## Testing
|
|
154
|
-
|
|
155
|
-
Run tests for this package in isolation:
|
|
156
|
-
|
|
157
|
-
```bash
|
|
158
|
-
pnpm --filter @xmachines/play test
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Or from the package directory:
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
pnpm test
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
Tests use **Vitest** and cover the `PlayError` class construction, inheritance, `cause` support, and subclassing patterns.
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
213
|
## License
|
|
172
214
|
|
|
173
215
|
MIT © [Mikael Karon](mailto:mikael@karon.se)
|
|
174
216
|
|
|
175
217
|
See [LICENSE](./LICENSE) for details.
|
|
176
218
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
This package defines the architectural contracts that carry the communication
|
|
180
|
-
between the Actor and the infrastructure, with no direct dependency between them.
|
|
181
|
-
RFC section 5.2 gives these protocols. They are the base of the loose coupling
|
|
182
|
-
between the business logic and the runtime adapters.
|
|
183
|
-
|
|
184
|
-
## The exports
|
|
185
|
-
|
|
186
|
-
**PlayEvent<TPayload>** - the generic event type of the Actor communication
|
|
187
|
-
|
|
188
|
-
- It is every object with a `type: string` property
|
|
189
|
-
- The generic `TPayload` parameter gives a type-safe event shape, and it is optional
|
|
190
|
-
- The default is `Record<string, unknown>`, which accepts each shape
|
|
191
|
-
- It is framework-agnostic, and it is not bound to XState or to another library
|
|
192
|
-
|
|
193
|
-
**Use:**
|
|
194
|
-
|
|
195
|
-
```typescript
|
|
196
|
-
// Flexible, the default:
|
|
197
|
-
const event: PlayEvent = { type: "auth.login", userId: "123" };
|
|
198
|
-
|
|
199
|
-
// Type-safe, with the generic parameter:
|
|
200
|
-
type LoginEvent = PlayEvent<{ userId: string }>;
|
|
201
|
-
const event: LoginEvent = { type: "auth.login", userId: "123" };
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
**The common event patterns:**
|
|
205
|
-
|
|
206
|
-
- A domain event: `{ type: 'auth.login', userId: '123' }`
|
|
207
|
-
- Your own event: `{ type: 'form.submit', data: {...} }`
|
|
208
|
-
|
|
209
|
-
**The routing events** come from @xmachines/play-router:
|
|
210
|
-
|
|
211
|
-
- PlayRouteEvent: the routing event with the parameters and the target state ID
|
|
212
|
-
- RouterBridge: the protocol that connects a router adapter to an actor
|
|
213
|
-
|
|
214
|
-
**The browser navigation:** a router adapter handles the browser BACK and FORWARD
|
|
215
|
-
buttons, through the `popstate` event. The user presses BACK or FORWARD, the
|
|
216
|
-
router detects the new URL, and it sends a PlayRouteEvent to the actor. The actor
|
|
217
|
-
then checks the event.
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
import type { PlayRouteEvent, RouterBridge } from "@xmachines/play-router";
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
## The architectural invariants
|
|
224
|
-
|
|
225
|
-
These protocols enforce the invariants below:
|
|
226
|
-
|
|
227
|
-
1. **Actor Authority**: the infrastructure makes a request, and the Actor decides the validity
|
|
228
|
-
2. **Strict Separation**: no layer depends on another layer directly
|
|
229
|
-
3. **Passive Infrastructure**: the infrastructure observes the Actor signals. It never controls them
|
|
230
|
-
4. **Signal-Only Reactivity**: every state change goes through a TC39 Signal
|
|
231
|
-
5. **State-Driven Reset**: each navigation follows the transition rules of the state machine
|
|
232
|
-
|
|
233
|
-
## Classes
|
|
234
|
-
|
|
235
|
-
- [NonNullableError](classes/NonNullableError.md)
|
|
236
|
-
- [PlayError](classes/PlayError.md)
|
|
237
|
-
|
|
238
|
-
## Type Aliases
|
|
239
|
-
|
|
240
|
-
- [PlayEvent](type-aliases/PlayEvent.md)
|
|
241
|
-
|
|
242
|
-
## Functions
|
|
219
|
+
## Modules
|
|
243
220
|
|
|
244
|
-
- [
|
|
221
|
+
- [errors](errors/README.md)
|
|
222
|
+
- [index](index/README.md)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
[API](
|
|
1
|
+
[API](../../../../README.md) / [@xmachines/play](../../README.md) / [errors](../README.md) / NonNullableError
|
|
2
2
|
|
|
3
3
|
# Class: NonNullableError
|
|
4
4
|
|
|
5
|
-
Defined in: [packages/play/src/errors.ts:
|
|
5
|
+
Defined in: [packages/play/src/errors.ts:112](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L112)
|
|
6
6
|
|
|
7
|
-
[assertNonNullable](
|
|
7
|
+
[@xmachines/play!index.assertNonNullable](../../index/functions/assertNonNullable.md) throws this error when a value is `null` or `undefined`.
|
|
8
8
|
|
|
9
9
|
Catch it to separate a failed assertion of a missing value from every other
|
|
10
10
|
runtime error:
|
|
@@ -35,7 +35,7 @@ try {
|
|
|
35
35
|
new NonNullableError(message, options?): NonNullableError;
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Defined in: [packages/play/src/errors.ts:
|
|
38
|
+
Defined in: [packages/play/src/errors.ts:113](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L113)
|
|
39
39
|
|
|
40
40
|
#### Parameters
|
|
41
41
|
|
|
@@ -57,10 +57,10 @@ Defined in: [packages/play/src/errors.ts:111](https://gitlab.com/xmachin-es/xmac
|
|
|
57
57
|
| Property | Modifier | Type | Description | Inherited from | Defined in |
|
|
58
58
|
| ------------------------------------------------------- | ---------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
59
59
|
| <a id="property-cause"></a> `cause?` | `public` | `unknown` | - | [`PlayError`](PlayError.md).[`cause`](PlayError.md#property-cause) | - |
|
|
60
|
-
| <a id="property-code"></a> `code` | `readonly` | `string` | A stable, machine-readable identifier of the error. An error code follows the naming convention `PLAY_<PACKAGE>_<DESCRIPTION>`. It stays the same across each patch release and each minor release of one major version. Never match on `.message`. Always match on `.code`, or on the subclass. | [`PlayError`](PlayError.md).[`code`](PlayError.md#property-code) | [packages/play/src/errors.ts:
|
|
60
|
+
| <a id="property-code"></a> `code` | `readonly` | `string` | A stable, machine-readable identifier of the error. An error code follows the naming convention `PLAY_<PACKAGE>_<DESCRIPTION>`. It stays the same across each patch release and each minor release of one major version. Never match on `.message`. Always match on `.code`, or on the subclass. | [`PlayError`](PlayError.md).[`code`](PlayError.md#property-code) | [packages/play/src/errors.ts:76](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L76) |
|
|
61
61
|
| <a id="property-message"></a> `message` | `public` | `string` | - | [`PlayError`](PlayError.md).[`message`](PlayError.md#property-message) | - |
|
|
62
62
|
| <a id="property-name"></a> `name` | `public` | `string` | - | [`PlayError`](PlayError.md).[`name`](PlayError.md#property-name) | - |
|
|
63
|
-
| <a id="property-scope"></a> `scope` | `readonly` | `string` | The class or the module that threw this error, for example `"RouterBridgeBase"`. | [`PlayError`](PlayError.md).[`scope`](PlayError.md#property-scope) | [packages/play/src/errors.ts:
|
|
63
|
+
| <a id="property-scope"></a> `scope` | `readonly` | `string` | The class or the module that threw this error, for example `"RouterBridgeBase"`. | [`PlayError`](PlayError.md).[`scope`](PlayError.md#property-scope) | [packages/play/src/errors.ts:66](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L66) |
|
|
64
64
|
| <a id="property-stack"></a> `stack?` | `public` | `string` | - | [`PlayError`](PlayError.md).[`stack`](PlayError.md#property-stack) | - |
|
|
65
65
|
| <a id="property-stacktracelimit"></a> `stackTraceLimit` | `static` | `number` | The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured _after_ the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. | [`PlayError`](PlayError.md).[`stackTraceLimit`](PlayError.md#property-stacktracelimit) | - |
|
|
66
66
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
[API](
|
|
1
|
+
[API](../../../../README.md) / [@xmachines/play](../../README.md) / [errors](../README.md) / PlayError
|
|
2
2
|
|
|
3
3
|
# Class: PlayError
|
|
4
4
|
|
|
5
|
-
Defined in: [packages/play/src/errors.ts:
|
|
5
|
+
Defined in: [packages/play/src/errors.ts:64](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L64)
|
|
6
6
|
|
|
7
7
|
The base class of every typed runtime error of an `@xmachines/*` package.
|
|
8
8
|
|
|
@@ -23,16 +23,18 @@ An `@xmachines/*` package that defines typed subclasses exports them from an
|
|
|
23
23
|
| ---------------------------- | ----------------------------------- |
|
|
24
24
|
| `@xmachines/play` | `@xmachines/play/errors` |
|
|
25
25
|
| `@xmachines/play-router` | `@xmachines/play-router/errors` |
|
|
26
|
+
| `@xmachines/play-url` | `@xmachines/play-url/errors` |
|
|
27
|
+
| `@xmachines/play-view` | `@xmachines/play-view/errors` |
|
|
26
28
|
| `@xmachines/play-vue-router` | `@xmachines/play-vue-router/errors` |
|
|
27
29
|
| `@xmachines/play-xstate` | `@xmachines/play-xstate/errors` |
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
`PlayError` is the base of every subclass above, and it sits on the subpath with them.
|
|
32
|
+
The root barrel of `@xmachines/play` exports it never: one name has one import.
|
|
31
33
|
|
|
32
34
|
## How to catch an error by its type
|
|
33
35
|
|
|
34
36
|
```typescript
|
|
35
|
-
import { PlayError } from "@xmachines/play";
|
|
37
|
+
import { PlayError } from "@xmachines/play/errors";
|
|
36
38
|
import { RouterSyncError } from "@xmachines/play-router/errors";
|
|
37
39
|
|
|
38
40
|
try {
|
|
@@ -55,7 +57,7 @@ try {
|
|
|
55
57
|
## How to extend PlayError
|
|
56
58
|
|
|
57
59
|
```typescript
|
|
58
|
-
import { PlayError } from "@xmachines/play";
|
|
60
|
+
import { PlayError } from "@xmachines/play/errors";
|
|
59
61
|
|
|
60
62
|
export class MyPackageError extends PlayError {
|
|
61
63
|
constructor(message: string, options?: ErrorOptions) {
|
|
@@ -72,6 +74,28 @@ export class MyPackageError extends PlayError {
|
|
|
72
74
|
## Extended by
|
|
73
75
|
|
|
74
76
|
- [`NonNullableError`](NonNullableError.md)
|
|
77
|
+
- [`DuplicateBridgeError`](../../../play-router/errors/classes/DuplicateBridgeError.md)
|
|
78
|
+
- [`DuplicateRoutePathError`](../../../play-router/errors/classes/DuplicateRoutePathError.md)
|
|
79
|
+
- [`EmptyRoutePathError`](../../../play-router/errors/classes/EmptyRoutePathError.md)
|
|
80
|
+
- [`InvalidBasePathError`](../../../play-router/errors/classes/InvalidBasePathError.md)
|
|
81
|
+
- [`InvalidRoutePatternError`](../../../play-router/errors/classes/InvalidRoutePatternError.md)
|
|
82
|
+
- [`InvalidStateIdError`](../../../play-router/errors/classes/InvalidStateIdError.md)
|
|
83
|
+
- [`MissingBasePathParamError`](../../../play-router/errors/classes/MissingBasePathParamError.md)
|
|
84
|
+
- [`RouterSyncError`](../../../play-router/errors/classes/RouterSyncError.md)
|
|
85
|
+
- [`UnknownStateTypeError`](../../../play-router/errors/classes/UnknownStateTypeError.md)
|
|
86
|
+
- [`InvalidBasePathError`](../../../play-url/errors/classes/InvalidBasePathError.md)
|
|
87
|
+
- [`InvalidRoutePatternError`](../../../play-url/errors/classes/InvalidRoutePatternError.md)
|
|
88
|
+
- [`MissingBasePathParamError`](../../../play-url/errors/classes/MissingBasePathParamError.md)
|
|
89
|
+
- [`ReadOnlyContextError`](../../../play-view/errors/classes/ReadOnlyContextError.md)
|
|
90
|
+
- [`VueRouterNavigationError`](../../../play-vue-router/errors/classes/VueRouterNavigationError.md)
|
|
91
|
+
- [`VueRouterSendError`](../../../play-vue-router/errors/classes/VueRouterSendError.md)
|
|
92
|
+
- [`ActorThrewNonErrorError`](../../../play-xstate/errors/classes/ActorThrewNonErrorError.md)
|
|
93
|
+
- [`InvalidEventError`](../../../play-xstate/errors/classes/InvalidEventError.md)
|
|
94
|
+
- [`InvalidMachineError`](../../../play-xstate/errors/classes/InvalidMachineError.md)
|
|
95
|
+
- [`InvalidRouteHandlerError`](../../../play-xstate/errors/classes/InvalidRouteHandlerError.md)
|
|
96
|
+
- [`InvalidRouteMetadataError`](../../../play-xstate/errors/classes/InvalidRouteMetadataError.md)
|
|
97
|
+
- [`MissingRouteParamError`](../../../play-xstate/errors/classes/MissingRouteParamError.md)
|
|
98
|
+
- [`MissingStateIdError`](../../../play-xstate/errors/classes/MissingStateIdError.md)
|
|
75
99
|
|
|
76
100
|
## Constructors
|
|
77
101
|
|
|
@@ -82,10 +106,11 @@ new PlayError(
|
|
|
82
106
|
scope,
|
|
83
107
|
code,
|
|
84
108
|
message,
|
|
85
|
-
options?
|
|
109
|
+
options?
|
|
110
|
+
): PlayError;
|
|
86
111
|
```
|
|
87
112
|
|
|
88
|
-
Defined in: [packages/play/src/errors.ts:
|
|
113
|
+
Defined in: [packages/play/src/errors.ts:84](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L84)
|
|
89
114
|
|
|
90
115
|
#### Parameters
|
|
91
116
|
|
|
@@ -111,10 +136,10 @@ Error.constructor;
|
|
|
111
136
|
| Property | Modifier | Type | Description | Inherited from | Defined in |
|
|
112
137
|
| ------------------------------------------------------- | ---------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
113
138
|
| <a id="property-cause"></a> `cause?` | `public` | `unknown` | - | `Error.cause` | - |
|
|
114
|
-
| <a id="property-code"></a> `code` | `readonly` | `string` | A stable, machine-readable identifier of the error. An error code follows the naming convention `PLAY_<PACKAGE>_<DESCRIPTION>`. It stays the same across each patch release and each minor release of one major version. Never match on `.message`. Always match on `.code`, or on the subclass. | - | [packages/play/src/errors.ts:
|
|
139
|
+
| <a id="property-code"></a> `code` | `readonly` | `string` | A stable, machine-readable identifier of the error. An error code follows the naming convention `PLAY_<PACKAGE>_<DESCRIPTION>`. It stays the same across each patch release and each minor release of one major version. Never match on `.message`. Always match on `.code`, or on the subclass. | - | [packages/play/src/errors.ts:76](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L76) |
|
|
115
140
|
| <a id="property-message"></a> `message` | `public` | `string` | - | `Error.message` | - |
|
|
116
141
|
| <a id="property-name"></a> `name` | `public` | `string` | - | `Error.name` | - |
|
|
117
|
-
| <a id="property-scope"></a> `scope` | `readonly` | `string` | The class or the module that threw this error, for example `"RouterBridgeBase"`. | - | [packages/play/src/errors.ts:
|
|
142
|
+
| <a id="property-scope"></a> `scope` | `readonly` | `string` | The class or the module that threw this error, for example `"RouterBridgeBase"`. | - | [packages/play/src/errors.ts:66](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/errors.ts#L66) |
|
|
118
143
|
| <a id="property-stack"></a> `stack?` | `public` | `string` | - | `Error.stack` | - |
|
|
119
144
|
| <a id="property-stacktracelimit"></a> `stackTraceLimit` | `static` | `number` | The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured _after_ the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. | `Error.stackTraceLimit` | - |
|
|
120
145
|
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
[API](../../../README.md) / [@xmachines/play](../README.md) / index
|
|
2
|
+
|
|
3
|
+
# index
|
|
4
|
+
|
|
5
|
+
@xmachines/play - the core protocol layer
|
|
6
|
+
|
|
7
|
+
This package defines the architectural contracts that carry the communication
|
|
8
|
+
between the Actor and the infrastructure, with no direct dependency between them.
|
|
9
|
+
RFC section 5.2 gives these protocols. They are the base of the loose coupling
|
|
10
|
+
between the business logic and the runtime adapters.
|
|
11
|
+
|
|
12
|
+
## The exports
|
|
13
|
+
|
|
14
|
+
**PlayEvent<TPayload>** - the generic event type of the Actor communication
|
|
15
|
+
|
|
16
|
+
- It is every object with a `type: string` property
|
|
17
|
+
- The generic `TPayload` parameter gives a type-safe event shape, and it is optional
|
|
18
|
+
- The default is `Record<string, unknown>`, which accepts each shape
|
|
19
|
+
- It is framework-agnostic, and it is not bound to XState or to another library
|
|
20
|
+
|
|
21
|
+
**Use:**
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Flexible, the default:
|
|
25
|
+
const event: PlayEvent = { type: "auth.login", userId: "123" };
|
|
26
|
+
|
|
27
|
+
// Type-safe, with the generic parameter:
|
|
28
|
+
type LoginEvent = PlayEvent<{ userId: string }>;
|
|
29
|
+
const event: LoginEvent = { type: "auth.login", userId: "123" };
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**The common event patterns:**
|
|
33
|
+
|
|
34
|
+
- A domain event: `{ type: 'auth.login', userId: '123' }`
|
|
35
|
+
- Your own event: `{ type: 'form.submit', data: {...} }`
|
|
36
|
+
|
|
37
|
+
**The routing events** come from @xmachines/play-router:
|
|
38
|
+
|
|
39
|
+
- PlayRouteEvent: the routing event with the parameters and the target state ID
|
|
40
|
+
- RouterBridge: the protocol that connects a router adapter to an actor
|
|
41
|
+
|
|
42
|
+
**The browser navigation:** a router adapter handles the browser BACK and FORWARD
|
|
43
|
+
buttons, through the `popstate` event. The user presses BACK or FORWARD, the
|
|
44
|
+
router detects the new URL, and it sends a PlayRouteEvent to the actor. The actor
|
|
45
|
+
then checks the event.
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import type { PlayRouteEvent, RouterBridge } from "@xmachines/play-router";
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## The architectural invariants
|
|
52
|
+
|
|
53
|
+
These protocols enforce the invariants below:
|
|
54
|
+
|
|
55
|
+
1. **Actor Authority**: the infrastructure makes a request, and the Actor decides the validity
|
|
56
|
+
2. **Strict Separation**: no layer depends on another layer directly
|
|
57
|
+
3. **Passive Infrastructure**: the infrastructure observes the Actor signals. It never controls them
|
|
58
|
+
4. **Signal-Only Reactivity**: every state change goes through a TC39 Signal
|
|
59
|
+
5. **State-Driven Reset**: each navigation follows the transition rules of the state machine
|
|
60
|
+
|
|
61
|
+
## Type Aliases
|
|
62
|
+
|
|
63
|
+
- [Cleanup](type-aliases/Cleanup.md)
|
|
64
|
+
- [DisposeKey](type-aliases/DisposeKey.md)
|
|
65
|
+
- [PlayEvent](type-aliases/PlayEvent.md)
|
|
66
|
+
|
|
67
|
+
## Variables
|
|
68
|
+
|
|
69
|
+
- [DISPOSE](variables/DISPOSE.md)
|
|
70
|
+
|
|
71
|
+
## Functions
|
|
72
|
+
|
|
73
|
+
- [asCleanup](functions/asCleanup.md)
|
|
74
|
+
- [assertNonNullable](functions/assertNonNullable.md)
|
|
75
|
+
- [shallowEqualExcept](functions/shallowEqualExcept.md)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
[API](../../../../README.md) / [@xmachines/play](../../README.md) / [index](../README.md) / asCleanup
|
|
2
|
+
|
|
3
|
+
# Function: asCleanup()
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
function asCleanup<R>(release): Cleanup;
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Defined in: [packages/play/src/disposable.ts:150](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/disposable.ts#L150)
|
|
10
|
+
|
|
11
|
+
Makes one release function serve as a [Cleanup](../type-aliases/Cleanup.md).
|
|
12
|
+
|
|
13
|
+
The function comes back as itself, with [DISPOSE](../variables/DISPOSE.md) added. Nothing wraps it, so
|
|
14
|
+
the identity of the release holds: a caller that compares two releases, or that puts
|
|
15
|
+
one in a `Set`, sees what it saw before this protocol existed.
|
|
16
|
+
|
|
17
|
+
The release therefore must be idempotent. A scope releases the value one time, but a
|
|
18
|
+
caller that runs the function AND lets the scope end runs it two times. Every release
|
|
19
|
+
of this workspace already accepts that, because a teardown that runs two times is
|
|
20
|
+
older than this protocol.
|
|
21
|
+
|
|
22
|
+
The release must be synchronous. `Disposable` and not `AsyncDisposable`: a
|
|
23
|
+
`Disposable` serves `using` AND `await using`, because `await using` falls back to
|
|
24
|
+
`Symbol.dispose`, while an `AsyncDisposable` raises a TypeError under a plain `using`
|
|
25
|
+
and forces every holder into an async function. Nothing in this workspace releases
|
|
26
|
+
asynchronously. An `AsyncCleanup` can arrive the day something does.
|
|
27
|
+
|
|
28
|
+
The `R extends void | undefined` bound is what holds that line. A plain `() => void`
|
|
29
|
+
parameter would ACCEPT `async () => {}`, because TypeScript lets a function that
|
|
30
|
+
returns a value stand where one returning `void` is wanted. The promise would then go
|
|
31
|
+
on the floor: the scope releases, the release looks finished, and the work runs later
|
|
32
|
+
with nobody able to await it. The bound rejects that at the call, and it rejects a
|
|
33
|
+
release that returns any other value as well.
|
|
34
|
+
|
|
35
|
+
The bound holds where the compiler knows the return type. It cannot hold where the
|
|
36
|
+
caller erased it: `R` infers `any` for a release typed `any`, such as a bare
|
|
37
|
+
`vi.fn()`, and `any` satisfies every constraint. A release declared `() => void` whose
|
|
38
|
+
body is async passes for the same reason — the declaration, and not the body, is what
|
|
39
|
+
the call site sees. Write the release inline, or type it, and the bound applies.
|
|
40
|
+
|
|
41
|
+
The release lands under [DISPOSE](../variables/DISPOSE.md) and, when the two differ, under the
|
|
42
|
+
`Symbol.dispose` that exists at the CALL. `DISPOSE` resolves when the module evaluates,
|
|
43
|
+
so a polyfill that installs the well-known symbol later would otherwise leave the
|
|
44
|
+
release on the registered key while a downlevelled `using` reads the well-known one.
|
|
45
|
+
Writing both closes that window for every release this function publishes.
|
|
46
|
+
|
|
47
|
+
## Type Parameters
|
|
48
|
+
|
|
49
|
+
| Type Parameter |
|
|
50
|
+
| ----------------------------------- |
|
|
51
|
+
| `R` _extends_ `void` \| `undefined` |
|
|
52
|
+
|
|
53
|
+
## Parameters
|
|
54
|
+
|
|
55
|
+
| Parameter | Type | Description |
|
|
56
|
+
| --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
57
|
+
| `release` | () => `R` | The release to publish. It must return nothing. The function is changed in place, so pass a function that this release owns: a shared or module-level function becomes a `Disposable` for every other holder of it. |
|
|
58
|
+
|
|
59
|
+
## Returns
|
|
60
|
+
|
|
61
|
+
[`Cleanup`](../type-aliases/Cleanup.md)
|
|
62
|
+
|
|
63
|
+
The same function, now also a `Disposable`.
|
|
64
|
+
|
|
65
|
+
## Throws
|
|
66
|
+
|
|
67
|
+
TypeError - When the release is frozen or is otherwise not extensible. The
|
|
68
|
+
protocol adds a property, and a sealed function accepts none.
|
|
69
|
+
|
|
70
|
+
## Example
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
export function watchSignal<T>(signal: Signal.State<T>, onValue: (v: T) => void): Cleanup {
|
|
74
|
+
const watcher = new Signal.subtle.Watcher(() => {});
|
|
75
|
+
watcher.watch(signal);
|
|
76
|
+
return asCleanup(() => watcher.unwatch(signal));
|
|
77
|
+
}
|
|
78
|
+
```
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
[API](
|
|
1
|
+
[API](../../../../README.md) / [@xmachines/play](../../README.md) / [index](../README.md) / assertNonNullable
|
|
2
2
|
|
|
3
3
|
# Function: assertNonNullable()
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
function assertNonNullable<V>(value, name?): NonNullable<V>;
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
Defined in: [packages/play/src/utils.ts:39](https://gitlab.com/xmachin-es/xmachines-js/-/blob/
|
|
9
|
+
Defined in: [packages/play/src/utils.ts:39](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v4.0.0/packages/play/src/utils.ts#L39)
|
|
10
10
|
|
|
11
11
|
Asserts that `value` is not `null` and not `undefined`, then returns it with the
|
|
12
12
|
type `NonNullable<V>`. One expression therefore holds the guard and the narrowed
|