@xmachines/docs 1.0.0-beta.45 → 1.0.0-beta.48
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 +135 -7
- package/api/@xmachines/play/README.md +134 -57
- package/api/@xmachines/play/classes/NonNullableError.md +4 -4
- package/api/@xmachines/play/classes/PlayError.md +4 -4
- package/api/@xmachines/play/functions/assertNonNullable.md +1 -1
- package/api/@xmachines/play/type-aliases/PlayEvent.md +2 -2
- package/api/@xmachines/play-actor/README.md +130 -155
- package/api/@xmachines/play-actor/classes/AbstractActor.md +3 -3
- package/api/@xmachines/play-actor/functions/typedSpec.md +1 -1
- package/api/@xmachines/play-actor/interfaces/BaseActorProviderProps.md +5 -5
- package/api/@xmachines/play-actor/interfaces/BaseViewContextValue.md +5 -5
- package/api/@xmachines/play-actor/interfaces/PlaySpec.md +2 -2
- package/api/@xmachines/play-actor/interfaces/Routable.md +3 -3
- package/api/@xmachines/play-actor/interfaces/Viewable.md +2 -2
- package/api/@xmachines/play-dom/README.md +140 -232
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +4 -4
- package/api/@xmachines/play-dom/functions/connectRenderer.md +1 -1
- package/api/@xmachines/play-dom/functions/createPlayUI.md +1 -1
- package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
- package/api/@xmachines/play-dom/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-dom/functions/renderSpec.md +1 -1
- package/api/@xmachines/play-dom/interfaces/ComponentContext.md +7 -7
- package/api/@xmachines/play-dom/interfaces/ConnectRendererOptions.md +13 -13
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +6 -6
- package/api/@xmachines/play-dom/interfaces/DefineRegistryResult.md +4 -4
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +12 -12
- package/api/@xmachines/play-dom/interfaces/EventHandle.md +4 -4
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +5 -5
- package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +5 -5
- package/api/@xmachines/play-dom/type-aliases/ActionFn.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/Actions.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/BaseComponentProps.md +7 -7
- package/api/@xmachines/play-dom/type-aliases/CatalogHasActions.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/ComponentFn.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/ComponentRegistry.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +2 -2
- package/api/@xmachines/play-dom/type-aliases/DomComponentRenderer.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/DomRegistry.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/DomSchema.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/SetState.md +1 -1
- package/api/@xmachines/play-dom/variables/schema.md +1 -1
- package/api/@xmachines/play-dom-router/README.md +160 -158
- 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/createRouteMap.md +1 -1
- package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +14 -14
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +4 -4
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMap.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +2 -2
- 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/VanillaRouter.md +4 -4
- package/api/@xmachines/play-dom-router/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-react/README.md +109 -320
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +5 -5
- 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 +8 -8
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +4 -4
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +3 -3
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +8 -8
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-react/type-aliases/PlayActor.md +1 -1
- package/api/@xmachines/play-react/variables/ActorProvider.md +1 -1
- package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-react-router/README.md +107 -124
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +23 -23
- package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-react-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-react-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +2 -2
- 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-router/README.md +235 -475
- package/api/@xmachines/play-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-router/classes/RouterBridgeBase.md +23 -23
- package/api/@xmachines/play-router/functions/buildPlayRouteEvent.md +1 -1
- package/api/@xmachines/play-router/functions/buildRouteTree.md +1 -1
- package/api/@xmachines/play-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-router/functions/createRouteMatcher.md +1 -1
- package/api/@xmachines/play-router/functions/detectDuplicateRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/extractMachineRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/extractQuery.md +1 -1
- package/api/@xmachines/play-router/functions/extractRouteParams.md +1 -1
- package/api/@xmachines/play-router/functions/findRouteById.md +1 -1
- package/api/@xmachines/play-router/functions/findRouteByPath.md +1 -1
- package/api/@xmachines/play-router/functions/getNavigableRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/getRoutableRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/getTransitionReachableRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/isRouteReachable.md +1 -1
- package/api/@xmachines/play-router/functions/machineToGraph.md +1 -1
- package/api/@xmachines/play-router/functions/routeExists.md +1 -1
- package/api/@xmachines/play-router/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-router/functions/validateRouteFormat.md +1 -1
- package/api/@xmachines/play-router/functions/validateStateExists.md +1 -1
- package/api/@xmachines/play-router/interfaces/BuildPlayRouteEventOptions.md +4 -4
- package/api/@xmachines/play-router/interfaces/LocationLike.md +3 -3
- package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +3 -3
- package/api/@xmachines/play-router/interfaces/MachineNodeData.md +5 -5
- package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-router/interfaces/RouteInfo.md +8 -8
- package/api/@xmachines/play-router/interfaces/RouteMapOptions.md +2 -2
- package/api/@xmachines/play-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-router/interfaces/RouteMatch.md +3 -3
- package/api/@xmachines/play-router/interfaces/RouteMatcher.md +4 -4
- package/api/@xmachines/play-router/interfaces/RouteNode.md +10 -10
- package/api/@xmachines/play-router/interfaces/RouteObject.md +2 -2
- package/api/@xmachines/play-router/interfaces/RouteTree.md +5 -5
- package/api/@xmachines/play-router/interfaces/RouteWatcherHandle.md +3 -3
- package/api/@xmachines/play-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-router/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-router/type-aliases/MachineGraph.md +1 -1
- package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-signals/README.md +105 -73
- package/api/@xmachines/play-signals/functions/watchSignal.md +1 -1
- 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/WatcherNotify.md +1 -1
- package/api/@xmachines/play-solid/README.md +117 -263
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +8 -8
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +8 -8
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-solid/type-aliases/PlayActor.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +1 -1
- package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-solid-router/README.md +93 -606
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +24 -24
- package/api/@xmachines/play-solid-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-solid-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +3 -3
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +2 -2
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
- package/api/@xmachines/play-svelte/README.md +111 -103
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
- package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +8 -8
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +4 -4
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +11 -11
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-svelte/type-aliases/PlayActor.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/README.md +156 -17
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +2 -2
- 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/WindowLike.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-sveltekit-router/README.md +168 -17
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-sveltekit-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +4 -4
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +2 -2
- 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/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/README.md +147 -122
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +23 -23
- package/api/@xmachines/play-tanstack-react-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +2 -2
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/README.md +195 -173
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/classes/SolidRouterBridge.md +24 -24
- package/api/@xmachines/play-tanstack-solid-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +2 -2
- 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/RoutableActor.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 +3 -3
- package/api/@xmachines/play-vue/README.md +126 -271
- package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-vue/functions/getPlayViewContext.md +1 -1
- package/api/@xmachines/play-vue/functions/useActor.md +1 -1
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +5 -5
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +8 -8
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-vue/interfaces/VisibilityProviderProps.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 +2 -2
- package/api/@xmachines/play-vue/type-aliases/PlayActor.md +1 -1
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue-router/README.md +148 -528
- package/api/@xmachines/play-vue-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-vue-router/classes/VueRouterBridge.md +24 -24
- package/api/@xmachines/play-vue-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +6 -6
- package/api/@xmachines/play-vue-router/interfaces/RouteMapOptions.md +2 -2
- package/api/@xmachines/play-vue-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-vue-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-vue-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-xstate/README.md +167 -496
- package/api/@xmachines/play-xstate/classes/PlayerActor.md +12 -12
- package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +1 -1
- package/api/@xmachines/play-xstate/functions/composeGuards.md +1 -1
- package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +1 -1
- package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +1 -1
- package/api/@xmachines/play-xstate/functions/definePlayer.md +1 -1
- package/api/@xmachines/play-xstate/functions/deriveRoute.md +1 -1
- package/api/@xmachines/play-xstate/functions/eventMatches.md +1 -1
- package/api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md +1 -1
- package/api/@xmachines/play-xstate/functions/hasContext.md +1 -1
- package/api/@xmachines/play-xstate/functions/isAbsoluteRoute.md +1 -1
- package/api/@xmachines/play-xstate/functions/negateGuard.md +1 -1
- package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +3 -3
- package/api/@xmachines/play-xstate/interfaces/PlayerFactoryResumeOptions.md +2 -2
- package/api/@xmachines/play-xstate/interfaces/PlayerOptions.md +6 -6
- package/api/@xmachines/play-xstate/interfaces/RouteContext.md +5 -5
- package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/Guard.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/RouteMachineConfig.md +4 -4
- package/api/@xmachines/play-xstate/type-aliases/RouteStateNode.md +4 -4
- package/api/@xmachines/shared/README.md +81 -294
- 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/vitest/functions/defineXmVitestConfig.md +1 -1
- package/examples/@xmachines/play-dom-demo/README.md +4 -4
- 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/Contact.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Dashboard.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/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-router-demo/README.md +3 -3
- package/examples/@xmachines/play-react-demo/README.md +2 -2
- package/examples/@xmachines/play-react-demo/functions/App.md +1 -1
- 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/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/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/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-router-demo/README.md +2 -2
- package/examples/@xmachines/play-solid-demo/README.md +2 -2
- package/examples/@xmachines/play-solid-demo/functions/App.md +1 -1
- 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/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/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/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-router-demo/README.md +1 -1
- package/examples/@xmachines/play-svelte-demo/README.md +2 -2
- 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-spa-router-demo/README.md +3 -3
- package/examples/@xmachines/play-sveltekit-router-demo/README.md +3 -3
- package/examples/@xmachines/play-tanstack-react-router-demo/README.md +1 -1
- package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +1 -1
- package/examples/@xmachines/play-vue-demo/README.md +2 -2
- 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-router-demo/README.md +1 -1
- package/examples/README.md +24 -25
- package/examples/form-validation.md +2 -2
- package/guides/README.md +7 -7
- package/guides/actor-model.md +18 -18
- package/guides/architecture.md +500 -0
- package/guides/configuration.md +556 -0
- package/guides/deployment.md +336 -0
- package/guides/development.md +617 -0
- package/guides/getting-started.md +351 -142
- package/guides/signals.md +19 -19
- package/guides/state-machines.md +16 -16
- package/guides/testing.md +460 -0
- package/package.json +5 -5
- package/guides/installation.md +0 -257
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
<!-- generated-by: gsd-doc-writer -->
|
|
2
|
+
|
|
3
|
+
# Development Guide
|
|
4
|
+
|
|
5
|
+
This guide covers everything you need to contribute to the XMachines JS monorepo — from setting up your environment through the full build, test, lint, and release lifecycle.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
| Requirement | Version | Notes |
|
|
12
|
+
| ----------- | -------------------- | -------------------------------------------------------- |
|
|
13
|
+
| Node.js | `>= 22.0.0` | Specified in all `package.json` `engines` fields |
|
|
14
|
+
| npm | Bundled with Node 22 | Workspaces support required |
|
|
15
|
+
| TypeScript | `^5.7+` | Installed as a dev dependency — no global install needed |
|
|
16
|
+
| Git | Any recent version | Commit message format enforced by CI |
|
|
17
|
+
|
|
18
|
+
No global tool installs are required beyond Node.js. All build, lint, and format tooling is installed locally via `npm ci`.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Local Setup
|
|
23
|
+
|
|
24
|
+
### 1. Clone the repository
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
git clone git@gitlab.com:xmachin-es/xmachines-js.git
|
|
28
|
+
cd xmachines-js
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2. Install dependencies
|
|
32
|
+
|
|
33
|
+
Always use `npm ci` (not `npm install`) so the lockfile is respected:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm ci
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`postinstall` automatically runs `patch-package` to apply the patches in `patches/` — this is expected and required.
|
|
40
|
+
|
|
41
|
+
### 3. Build all packages
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm run build
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The build uses TypeScript project references (`tsc --build`) and compiles all packages in dependency order. Build outputs go to each package's `dist/` directory. The `dist/` directories are gitignored.
|
|
48
|
+
|
|
49
|
+
### 4. Verify
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm test
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
All tests should pass on a clean install. If any fail, check the [Common Setup Issues](#common-setup-issues) section.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Dev Container (Optional)
|
|
60
|
+
|
|
61
|
+
A fully configured dev container is provided at `.devcontainer/`. It includes Docker-outside-of-Docker, Claude Code, and OpenCode.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npm run devcontainer:up
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Or open the repository in VS Code and choose **Reopen in Container** when prompted.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Monorepo Structure
|
|
72
|
+
|
|
73
|
+
The repository is organized as an **npm workspaces** monorepo with all packages under `packages/`:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
packages/
|
|
77
|
+
├── shared/ # Shared configs (tsconfig, oxlint, oxfmt, vitest)
|
|
78
|
+
├── play/ # Core protocol (PlayEvent, PlayError)
|
|
79
|
+
├── play-signals/ # TC39 Signals polyfill wrapper
|
|
80
|
+
├── play-actor/ # Abstract actor base (AbstractActor, Routable, Viewable)
|
|
81
|
+
├── play-xstate/ # XState v5 adapter (definePlayer, PlayerActor)
|
|
82
|
+
├── play-router/ # Route extraction and RouterBridgeBase
|
|
83
|
+
├── play-dom/ # Vanilla DOM renderer
|
|
84
|
+
├── play-dom-router/ # DOM router adapter
|
|
85
|
+
├── play-react/ # React renderer (PlayRenderer)
|
|
86
|
+
├── play-react-router/ # React Router v7 adapter
|
|
87
|
+
├── play-vue/ # Vue 3 renderer
|
|
88
|
+
├── play-vue-router/ # Vue Router adapter
|
|
89
|
+
├── play-solid/ # SolidJS renderer
|
|
90
|
+
├── play-solid-router/ # SolidJS Router adapter
|
|
91
|
+
├── play-svelte/ # Svelte renderer
|
|
92
|
+
├── play-svelte-spa-router/ # Svelte SPA Router adapter
|
|
93
|
+
├── play-sveltekit-router/ # SvelteKit Router adapter
|
|
94
|
+
├── play-tanstack-react-router/ # TanStack Router (React)
|
|
95
|
+
├── play-tanstack-solid-router/ # TanStack Router (SolidJS)
|
|
96
|
+
└── docs/ # API docs, guides, RFCs (@xmachines/docs)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Many packages also contain an `examples/` subdirectory with runnable demo apps.
|
|
100
|
+
|
|
101
|
+
### Package naming convention
|
|
102
|
+
|
|
103
|
+
All packages use the `@xmachines/` npm scope. The package directory name matches the npm name without the scope:
|
|
104
|
+
|
|
105
|
+
- `packages/play` → [`@xmachines/play`](../api/@xmachines/play/README.md)
|
|
106
|
+
- `packages/play-actor` → [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md)
|
|
107
|
+
|
|
108
|
+
### Standard package layout
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
packages/<name>/
|
|
112
|
+
├── src/ # TypeScript source files
|
|
113
|
+
├── dist/ # Build output (gitignored)
|
|
114
|
+
├── test/ # Test files (*.spec.ts or *.test.ts)
|
|
115
|
+
├── examples/ # Runnable demo apps (optional)
|
|
116
|
+
├── package.json # Must have "type": "module"
|
|
117
|
+
├── tsconfig.json # Extends shared base config
|
|
118
|
+
├── tsconfig.base.json # Local base (extends @xmachines/shared/tsconfig)
|
|
119
|
+
├── vitest.config.ts # Package test config
|
|
120
|
+
└── README.md
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Build System
|
|
126
|
+
|
|
127
|
+
### Build commands
|
|
128
|
+
|
|
129
|
+
| Command | Description |
|
|
130
|
+
| ---------------------------------- | ---------------------------------------------------------- |
|
|
131
|
+
| `npm run build` | Build all packages in dependency order (incremental) |
|
|
132
|
+
| `npm run build -w packages/<name>` | Build a specific package (and its deps) |
|
|
133
|
+
| `npm run test:build` | Type-check the full test TypeScript graph without emitting |
|
|
134
|
+
| `npm run clean` | Remove all build outputs and caches across all packages |
|
|
135
|
+
|
|
136
|
+
### TypeScript composite build
|
|
137
|
+
|
|
138
|
+
This monorepo uses **TypeScript project references** (`composite: true`) for build-order management.
|
|
139
|
+
|
|
140
|
+
- **`tsconfig.json`** at the root coordinates all packages via its `references` array — it does not compile anything itself
|
|
141
|
+
- Each package's `tsconfig.json` sets `composite: true`, `rootDir: "./src"`, and `outDir: "./dist"`
|
|
142
|
+
- TypeScript understands the full dependency graph and builds packages in the correct order automatically
|
|
143
|
+
- Incremental builds: only changed packages are rebuilt
|
|
144
|
+
- `declarationMap: true` is set in the base config — **Go to Definition** in your IDE jumps to source `.ts` files, not compiled `.d.ts`
|
|
145
|
+
|
|
146
|
+
**Dependency layers** (from `tsconfig.json`):
|
|
147
|
+
|
|
148
|
+
| Layer | Packages |
|
|
149
|
+
| ------- | --------------------------------------------------------------------- |
|
|
150
|
+
| Layer 0 | `play-signals`, `play`, `docs` — no internal dependencies |
|
|
151
|
+
| Layer 1 | `play-actor` — depends on Layer 0 |
|
|
152
|
+
| Layer 2 | `play-router`, `play-xstate`, all view renderers, all router adapters |
|
|
153
|
+
| Layer 3 | Example applications |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Adding a New Package
|
|
158
|
+
|
|
159
|
+
Follow these steps when creating a new package:
|
|
160
|
+
|
|
161
|
+
### 1. Create the package directory
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
mkdir packages/my-new-package
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 2. Create `package.json`
|
|
168
|
+
|
|
169
|
+
Must include `"type": "module"` and follow the standard scripts pattern:
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"name": "@xmachines/my-new-package",
|
|
174
|
+
"version": "1.0.0-beta.46",
|
|
175
|
+
"type": "module",
|
|
176
|
+
"exports": {
|
|
177
|
+
".": {
|
|
178
|
+
"source": "./src/index.ts",
|
|
179
|
+
"types": "./dist/index.d.ts",
|
|
180
|
+
"import": "./dist/index.js"
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"scripts": {
|
|
184
|
+
"build": "tsc --build",
|
|
185
|
+
"clean": "rm -rf dist *.tsbuildinfo coverage",
|
|
186
|
+
"test": "vitest",
|
|
187
|
+
"lint": "oxlint .",
|
|
188
|
+
"lint:fix": "oxlint --fix .",
|
|
189
|
+
"format": "oxfmt .",
|
|
190
|
+
"format:check": "oxfmt --check .",
|
|
191
|
+
"prepublishOnly": "npm run build"
|
|
192
|
+
},
|
|
193
|
+
"devDependencies": {
|
|
194
|
+
"@xmachines/shared": "1.0.0-beta.46",
|
|
195
|
+
"oxfmt": "^0.45.0",
|
|
196
|
+
"oxlint": "^1.60.0",
|
|
197
|
+
"vitest": "^4.1.4"
|
|
198
|
+
},
|
|
199
|
+
"engines": {
|
|
200
|
+
"node": ">=22.0.0"
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### 3. Create `tsconfig.json`
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"$schema": "https://json.schemastore.org/tsconfig",
|
|
210
|
+
"extends": "./tsconfig.base.json",
|
|
211
|
+
"compilerOptions": {
|
|
212
|
+
"composite": true,
|
|
213
|
+
"rootDir": "./src",
|
|
214
|
+
"outDir": "./dist"
|
|
215
|
+
},
|
|
216
|
+
"include": ["src/**/*"]
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 4. Create `tsconfig.base.json`
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"$schema": "https://json.schemastore.org/tsconfig",
|
|
225
|
+
"extends": "@xmachines/shared/tsconfig",
|
|
226
|
+
"compilerOptions": {
|
|
227
|
+
"skipLibCheck": true
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
If the package depends on other packages in this monorepo, add `references`:
|
|
233
|
+
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"extends": "@xmachines/shared/tsconfig",
|
|
237
|
+
"compilerOptions": { "skipLibCheck": true },
|
|
238
|
+
"references": [{ "path": "../play" }, { "path": "../play-actor" }]
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### 5. Register in root `tsconfig.json`
|
|
243
|
+
|
|
244
|
+
Add an entry to the `references` array in the appropriate layer:
|
|
245
|
+
|
|
246
|
+
```json
|
|
247
|
+
{
|
|
248
|
+
"references": [{ "path": "./packages/my-new-package" }]
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### 6. Register in root `tsconfig.test.json`
|
|
253
|
+
|
|
254
|
+
```json
|
|
255
|
+
{
|
|
256
|
+
"references": [{ "path": "./packages/my-new-package/tsconfig.test.json" }]
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### 7. Create `vitest.config.ts`
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
import { defineXmVitestConfig } from "@xmachines/shared/vitest";
|
|
264
|
+
|
|
265
|
+
export default defineXmVitestConfig(import.meta.url, {
|
|
266
|
+
test: {
|
|
267
|
+
environment: "node",
|
|
268
|
+
include: ["test/**/*.spec.ts", "test/**/*.test.ts"],
|
|
269
|
+
coverage: {
|
|
270
|
+
provider: "v8",
|
|
271
|
+
include: ["src/**/*.ts"],
|
|
272
|
+
thresholds: {
|
|
273
|
+
lines: 80,
|
|
274
|
+
functions: 80,
|
|
275
|
+
branches: 75,
|
|
276
|
+
statements: 80,
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### 8. Register in root `vitest.config.ts`
|
|
284
|
+
|
|
285
|
+
Add the package's `vitest.config.ts` to the `projects` array in the root `vitest.config.ts`.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Code Style
|
|
290
|
+
|
|
291
|
+
### Rules enforced
|
|
292
|
+
|
|
293
|
+
**All rules below are mandatory and enforced in CI.**
|
|
294
|
+
|
|
295
|
+
#### 1. `.js` extensions on all imports
|
|
296
|
+
|
|
297
|
+
Even in TypeScript source files, imports must use `.js` extensions. This is required by Node.js ESM resolution:
|
|
298
|
+
|
|
299
|
+
```typescript
|
|
300
|
+
// ✅ Correct
|
|
301
|
+
import { foo } from "./bar.js";
|
|
302
|
+
import { PlayEvent } from "@xmachines/play";
|
|
303
|
+
|
|
304
|
+
// ❌ Wrong — will fail at runtime
|
|
305
|
+
import { foo } from "./bar";
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
#### 2. ESM only — no CommonJS
|
|
309
|
+
|
|
310
|
+
Every package has `"type": "module"` in its `package.json`. Do not use `require()`, `module.exports`, or `.cjs` files.
|
|
311
|
+
|
|
312
|
+
#### 3. Strict TypeScript
|
|
313
|
+
|
|
314
|
+
The base `tsconfig.json` enables the full strict suite plus additional checks:
|
|
315
|
+
|
|
316
|
+
| Option | Value |
|
|
317
|
+
| ---------------------------- | ------ |
|
|
318
|
+
| `strict` | `true` |
|
|
319
|
+
| `noUnusedLocals` | `true` |
|
|
320
|
+
| `noUnusedParameters` | `true` |
|
|
321
|
+
| `noImplicitReturns` | `true` |
|
|
322
|
+
| `noImplicitOverride` | `true` |
|
|
323
|
+
| `exactOptionalPropertyTypes` | `true` |
|
|
324
|
+
| `verbatimModuleSyntax` | `true` |
|
|
325
|
+
| `isolatedModules` | `true` |
|
|
326
|
+
|
|
327
|
+
Use `import type` for type-only imports (required by `verbatimModuleSyntax`).
|
|
328
|
+
|
|
329
|
+
#### 4. No `any`
|
|
330
|
+
|
|
331
|
+
`typescript/no-explicit-any` is set to `"error"` in the shared oxlint config. Use `unknown` or appropriate generic types instead.
|
|
332
|
+
|
|
333
|
+
### Linting (oxlint)
|
|
334
|
+
|
|
335
|
+
The project uses **oxlint** — a Rust-based linter with TypeScript, unicorn, and import plugins.
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
npm run lint # Lint all packages
|
|
339
|
+
npm run lint:fix # Auto-fix lint issues across all packages
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Root config: `oxlint.config.ts`
|
|
343
|
+
Shared base: `packages/shared/config/oxlint.config.ts`
|
|
344
|
+
|
|
345
|
+
Enabled categories: `correctness: error`, `suspicious: warn`, `perf: warn`. Import cycle detection (`import/no-cycle`) is set to `"error"`.
|
|
346
|
+
|
|
347
|
+
### Formatting (oxfmt)
|
|
348
|
+
|
|
349
|
+
The project uses **oxfmt** — an opinionated formatter.
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
npm run format # Format all files in place
|
|
353
|
+
npm run format:check # Check formatting without writing (CI mode)
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
Root config: `oxfmt.config.ts`
|
|
357
|
+
Shared base: `packages/shared/config/oxfmt.config.ts`
|
|
358
|
+
|
|
359
|
+
Key settings (from shared config):
|
|
360
|
+
|
|
361
|
+
| Setting | Value |
|
|
362
|
+
| --------------- | ------------------------- |
|
|
363
|
+
| Print width | 100 |
|
|
364
|
+
| Indentation | Tabs (width 4) |
|
|
365
|
+
| Semicolons | `true` |
|
|
366
|
+
| Quotes | Double |
|
|
367
|
+
| Trailing commas | All |
|
|
368
|
+
| JSON/YAML files | 2-space indent (override) |
|
|
369
|
+
|
|
370
|
+
### EditorConfig
|
|
371
|
+
|
|
372
|
+
An `.editorconfig` at the project root ensures consistent whitespace in editors:
|
|
373
|
+
|
|
374
|
+
- All files: tabs (4-wide), LF line endings, insert final newline
|
|
375
|
+
- JSON/YAML: spaces (2-wide)
|
|
376
|
+
- Markdown: trailing whitespace preserved
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Testing
|
|
381
|
+
|
|
382
|
+
### Test framework
|
|
383
|
+
|
|
384
|
+
All packages use **Vitest 4.x** with **v8 coverage**.
|
|
385
|
+
|
|
386
|
+
### Running tests
|
|
387
|
+
|
|
388
|
+
| Command | Description |
|
|
389
|
+
| -------------------------- | ------------------------------------------------ |
|
|
390
|
+
| `npm test` | Run all tests (node environment) |
|
|
391
|
+
| `npm run test:watch` | Interactive watch mode |
|
|
392
|
+
| `npm run test:ui` | Vitest browser UI for visual debugging |
|
|
393
|
+
| `npm run test:browser` | Run browser-mode tests (Playwright/Chromium) |
|
|
394
|
+
| `npm run test:coverage` | Run with coverage, output text/HTML/JSON-summary |
|
|
395
|
+
| `npm run coverage:report` | Coverage with HTML report |
|
|
396
|
+
| `npm run coverage:summary` | Coverage with JSON summary |
|
|
397
|
+
| `npm run test:build` | Type-check all test files (no emit) |
|
|
398
|
+
|
|
399
|
+
To run tests for a single package in isolation:
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
npm test -w packages/play-actor
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Test file conventions
|
|
406
|
+
|
|
407
|
+
- Place test files in `test/` within each package
|
|
408
|
+
- Use `.spec.ts` or `.test.ts` extensions
|
|
409
|
+
- Both are supported; `.spec.ts` is the conventional choice for unit tests
|
|
410
|
+
|
|
411
|
+
### Coverage thresholds
|
|
412
|
+
|
|
413
|
+
Root-level (regression gate for the full monorepo):
|
|
414
|
+
|
|
415
|
+
| Type | Threshold |
|
|
416
|
+
| ---------- | --------- |
|
|
417
|
+
| Lines | 80% |
|
|
418
|
+
| Functions | 80% |
|
|
419
|
+
| Branches | 75% |
|
|
420
|
+
| Statements | 80% |
|
|
421
|
+
|
|
422
|
+
Core packages enforce higher per-package thresholds in their own `vitest.config.ts`. For example, `play-actor` requires 90% lines/functions/statements and 85% branches.
|
|
423
|
+
|
|
424
|
+
### Browser tests
|
|
425
|
+
|
|
426
|
+
Browser tests use Vitest's Playwright integration (Chromium). They run separately from node tests:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
npm run test:browser
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
Browser test configs are named `vitest.browser.config.ts` inside each package. Not all packages have browser tests — add them only when the code has meaningful browser-specific behavior.
|
|
433
|
+
|
|
434
|
+
### Shared test setup
|
|
435
|
+
|
|
436
|
+
The [`@xmachines/shared/vitest`](../api/@xmachines/shared/vitest/README.md) helper ([`defineXmVitestConfig`](../api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md)) automatically:
|
|
437
|
+
|
|
438
|
+
- Configures `@xmachines/*` path aliases so tests resolve to source files
|
|
439
|
+
- Injects the shared setup file (`vitest.setup.ts`) for global test utilities
|
|
440
|
+
- Injects the node setup file (`vitest.node.setup.ts`) for non-browser packages
|
|
441
|
+
|
|
442
|
+
Use [`defineXmVitestConfig`](../api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md) in every package's `vitest.config.ts` instead of bare `defineConfig`.
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## Commit Conventions
|
|
447
|
+
|
|
448
|
+
This project uses [Conventional Commits](https://www.conventionalcommits.org/). Commit messages are parsed by `semantic-release` to determine version bumps and changelog entries.
|
|
449
|
+
|
|
450
|
+
### Format
|
|
451
|
+
|
|
452
|
+
```
|
|
453
|
+
<type>(<scope>): <description>
|
|
454
|
+
|
|
455
|
+
[optional body]
|
|
456
|
+
|
|
457
|
+
[optional footer]
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Types
|
|
461
|
+
|
|
462
|
+
| Type | Triggers | When to use |
|
|
463
|
+
| ---------- | ------------------------- | ------------------------------------------ |
|
|
464
|
+
| `feat` | Minor bump | New user-facing feature |
|
|
465
|
+
| `fix` | Patch bump | Bug fix |
|
|
466
|
+
| `docs` | No bump | Documentation only |
|
|
467
|
+
| `chore` | No bump | Build scripts, tooling, dependencies |
|
|
468
|
+
| `refactor` | No bump | Code restructuring without behavior change |
|
|
469
|
+
| `test` | No bump | Adding or updating tests |
|
|
470
|
+
| `perf` | No bump (unless breaking) | Performance improvement |
|
|
471
|
+
| `ci` | No bump | CI configuration changes |
|
|
472
|
+
|
|
473
|
+
A `BREAKING CHANGE:` footer or `!` after the type triggers a major version bump:
|
|
474
|
+
|
|
475
|
+
```
|
|
476
|
+
feat!: drop Node 20 support
|
|
477
|
+
|
|
478
|
+
BREAKING CHANGE: Minimum Node version is now 22.
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### Scope (optional)
|
|
482
|
+
|
|
483
|
+
Use the package short-name as scope when the change is isolated to one package:
|
|
484
|
+
|
|
485
|
+
```
|
|
486
|
+
fix(play-actor): correct signal cleanup on dispose
|
|
487
|
+
feat(play-react): add PlayRenderer suspense boundary
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## Documentation
|
|
493
|
+
|
|
494
|
+
API documentation is generated from TypeScript source using **TypeDoc**.
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
npm run docs
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
This runs the full build, generates API docs into `packages/docs/api/`, then formats the output.
|
|
501
|
+
|
|
502
|
+
**Important:** `packages/docs/api/` is auto-generated and committed to git. **Never edit files inside it directly.** Always regenerate via `npm run docs`.
|
|
503
|
+
|
|
504
|
+
### RFC links in JSDoc
|
|
505
|
+
|
|
506
|
+
RFC files live at `packages/docs/rfc/`. Use relative links in `@see` tags:
|
|
507
|
+
|
|
508
|
+
```typescript
|
|
509
|
+
/**
|
|
510
|
+
* @see `Play RFC`
|
|
511
|
+
*/
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
TypeDoc's custom plugin (`typedoc.config.mjs`) handles rewriting these links in the generated output.
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
## Patches
|
|
519
|
+
|
|
520
|
+
The `patches/` directory contains `patch-package` patches applied automatically during `npm ci` and `npm install` (via the `postinstall` script).
|
|
521
|
+
|
|
522
|
+
Current patches are for `@json-render` packages. Do not remove or manually modify patch files — they are required for the build to succeed.
|
|
523
|
+
|
|
524
|
+
To create a new patch after modifying a file in `node_modules/`:
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
npx patch-package <package-name>
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Release Process
|
|
533
|
+
|
|
534
|
+
Releases are fully automated via **semantic-release** running in GitLab CI. No manual version bumping or tagging is required.
|
|
535
|
+
|
|
536
|
+
### How releases work
|
|
537
|
+
|
|
538
|
+
1. Commits merged to `main` are analyzed by `@semantic-release/commit-analyzer`
|
|
539
|
+
2. If releasable commits are present, semantic-release:
|
|
540
|
+
- Determines the next version from commit types
|
|
541
|
+
- Updates all workspace `package.json` versions via `scripts/set-workspace-versions.mjs`
|
|
542
|
+
- Builds all packages and regenerates API docs
|
|
543
|
+
- Publishes all publishable packages to npm
|
|
544
|
+
- Creates a GitLab release with tarball artifacts
|
|
545
|
+
- Commits `CHANGELOG.md`, updated `package.json` files, and generated docs back to the branch
|
|
546
|
+
|
|
547
|
+
### Release branches
|
|
548
|
+
|
|
549
|
+
| Branch | Channel | Pre-release tag |
|
|
550
|
+
| -------- | ------- | --------------- |
|
|
551
|
+
| `main` | stable | — |
|
|
552
|
+
| `beta` | beta | `beta` |
|
|
553
|
+
| `pre/rc` | pre/rc | `rc` |
|
|
554
|
+
|
|
555
|
+
### Smoke testing before release
|
|
556
|
+
|
|
557
|
+
The `release-pack-smoke` CI job validates that packed tarballs install correctly:
|
|
558
|
+
|
|
559
|
+
```bash
|
|
560
|
+
npm run build
|
|
561
|
+
node scripts/release-pack-smoke.mjs
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
This job runs automatically on `main` pushes and tags but can be triggered manually on other branches.
|
|
565
|
+
|
|
566
|
+
### Published packages
|
|
567
|
+
|
|
568
|
+
All packages listed in `.releaserc.json` with `npmPublish: true` (the default) are published to npm under the `@xmachines/` scope. Example packages (`examples/demo`) are packed for the GitLab release but not published to npm.
|
|
569
|
+
|
|
570
|
+
---
|
|
571
|
+
|
|
572
|
+
## CI Pipeline
|
|
573
|
+
|
|
574
|
+
The GitLab CI pipeline (`.gitlab-ci.yml`) runs on:
|
|
575
|
+
|
|
576
|
+
- Every push to `main`
|
|
577
|
+
- Every merge request
|
|
578
|
+
- Every git tag
|
|
579
|
+
|
|
580
|
+
### Pipeline stages
|
|
581
|
+
|
|
582
|
+
| Job | Description |
|
|
583
|
+
| -------------------- | ----------------------------------------------------------------------------- |
|
|
584
|
+
| `node-build` | Lints, builds, and runs `test:coverage`; reports JUnit and Cobertura coverage |
|
|
585
|
+
| `semantic-release` | Automated release on `main`, `beta`, and `pre/rc` branches |
|
|
586
|
+
| `release-pack-smoke` | Validates packed tarballs install correctly |
|
|
587
|
+
|
|
588
|
+
The pipeline uses the `to-be-continuous/node` component and `to-be-continuous/semantic-release` component from the GitLab CI component catalog.
|
|
589
|
+
|
|
590
|
+
**Coverage gate:** The CI reports coverage in Cobertura format. The regex `/All files[^|]*\|[^|]*\s+([\d\.]+)/` extracts the aggregate coverage percentage.
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
## Common Setup Issues
|
|
595
|
+
|
|
596
|
+
**Tests fail with `Cannot find module` errors**
|
|
597
|
+
: Run `npm run build` before running tests. Some packages need their `dist/` present even in development. Alternatively, ensure [`@xmachines/shared/vite-aliases`](../api/@xmachines/shared/vite-aliases/README.md) aliases are configured in your `vitest.config.ts` — use [`defineXmVitestConfig`](../api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md) from [`@xmachines/shared/vitest`](../api/@xmachines/shared/vitest/README.md) to get them automatically.
|
|
598
|
+
|
|
599
|
+
**TypeScript errors about missing types after adding a dependency**
|
|
600
|
+
: Run `npm ci` to ensure all types are installed. If adding a workspace-local dependency, also add the correct `references` entry to the package's `tsconfig.base.json`.
|
|
601
|
+
|
|
602
|
+
**`patch-package` errors during install**
|
|
603
|
+
: The patches in `patches/` are version-specific. If you update a `@json-render` package, the patches may need to be regenerated with `npx patch-package <pkg>`.
|
|
604
|
+
|
|
605
|
+
**Lint errors on import extensions**
|
|
606
|
+
: All imports must end with `.js`. This applies to relative imports even for `.ts` source files. Your editor's auto-import may omit the extension — fix it manually or configure your editor to add it automatically.
|
|
607
|
+
|
|
608
|
+
**Build is slow after a `git clean`**
|
|
609
|
+
: TypeScript incremental builds use `.tsbuildinfo` files. After a full clean these are gone and the initial build will be slower. This is expected.
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
## Related Documentation
|
|
614
|
+
|
|
615
|
+
- [Architecture](ARCHITECTURE.md) — System design, component diagram, data flow
|
|
616
|
+
- [Configuration](CONFIGURATION.md) — Environment variables and config files
|
|
617
|
+
- [RFC docs](../rfc/) — Canonical specifications for each protocol
|