@xmachines/docs 6.1.0 → 8.0.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/api/@xmachines/core/README.md +7 -2
- package/api/@xmachines/core/cache/functions/createLruCache.md +1 -1
- package/api/@xmachines/core/cache/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/core/errors/classes/BaseError.md +11 -11
- package/api/@xmachines/core/errors/classes/DisposeConflictError.md +11 -11
- package/api/@xmachines/core/utils/functions/asDisposable.md +2 -2
- package/api/@xmachines/core/utils/functions/createNullRecord.md +1 -1
- package/api/@xmachines/core/utils/functions/createWarnOnce.md +1 -1
- package/api/@xmachines/core/utils/functions/describeValue.md +1 -1
- package/api/@xmachines/core/utils/functions/isError.md +1 -1
- package/api/@xmachines/core/utils/functions/isThenable.md +1 -1
- package/api/@xmachines/core/utils/functions/releaseQuietly.md +1 -1
- package/api/@xmachines/core/utils/functions/rethrowLater.md +1 -1
- package/api/@xmachines/core/utils/functions/safeString.md +1 -1
- package/api/@xmachines/core/utils/functions/shallowEqualExcept.md +1 -1
- package/api/@xmachines/core/utils/type-aliases/DisposeKey.md +1 -1
- package/api/@xmachines/core/utils/type-aliases/DisposeMember.md +1 -1
- package/api/@xmachines/core/utils/variables/DISPOSE.md +1 -1
- package/api/@xmachines/play/README.md +10 -5
- package/api/@xmachines/play/errors/classes/NonNullableError.md +11 -11
- package/api/@xmachines/play/errors/classes/PlayError.md +12 -11
- package/api/@xmachines/play/index/functions/assertNonNullable.md +1 -1
- package/api/@xmachines/play/index/type-aliases/PlayEvent.md +4 -4
- package/api/@xmachines/play-actor/README.md +11 -3
- package/api/@xmachines/play-actor/interfaces/ActorEvent.md +4 -4
- package/api/@xmachines/play-actor/interfaces/PlayActor.md +6 -6
- package/api/@xmachines/play-atom/README.md +21 -7
- package/api/@xmachines/play-atom/functions/watchAtom.md +1 -1
- package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +4 -4
- package/api/@xmachines/play-atom/interfaces/Atom.md +6 -6
- package/api/@xmachines/play-atom/interfaces/AtomObserver.md +6 -6
- package/api/@xmachines/play-atom/interfaces/AtomOptions.md +4 -4
- package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +2 -2
- package/api/@xmachines/play-atom/interfaces/BaseAtom.md +4 -4
- package/api/@xmachines/play-atom/interfaces/CreateAtom.md +3 -3
- package/api/@xmachines/play-atom/interfaces/Readable.md +4 -4
- package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +4 -4
- package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +1 -1
- package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +1 -1
- package/api/@xmachines/play-atom/variables/createAsyncAtom.md +1 -1
- package/api/@xmachines/play-atom/variables/createAtom.md +1 -1
- package/api/@xmachines/play-atom/variables/createWritableAtom.md +1 -1
- package/api/@xmachines/play-dom/README.md +136 -50
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +12 -12
- package/api/@xmachines/play-dom/functions/createPlayUI.md +5 -5
- package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
- package/api/@xmachines/play-dom/functions/renderSpec.md +3 -2
- package/api/@xmachines/play-dom/interfaces/ComponentContext.md +9 -9
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +15 -14
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +26 -20
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +5 -5
- package/api/@xmachines/play-dom/interfaces/PassOptions.md +14 -0
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +18 -17
- package/api/@xmachines/play-dom/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-dom/interfaces/RenderSpecOptions.md +17 -15
- package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +9 -8
- package/api/@xmachines/play-dom/interfaces/ValidationRegistry.md +14 -11
- package/api/@xmachines/play-dom/type-aliases/ConfirmHandler.md +9 -10
- package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +4 -3
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-dom/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-dom-router/README.md +44 -6
- package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +7 -7
- package/api/@xmachines/play-dom-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +1 -1
- package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
- package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +16 -16
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +16 -16
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +10 -10
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +6 -6
- package/api/@xmachines/play-pattern/README.md +1 -1
- package/api/@xmachines/play-pattern/functions/buildPath.md +1 -1
- package/api/@xmachines/play-pattern/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-pattern/functions/getIndexKey.md +1 -1
- package/api/@xmachines/play-pattern/functions/isDotSegment.md +1 -1
- package/api/@xmachines/play-pattern/functions/parsePattern.md +1 -1
- package/api/@xmachines/play-pattern/interfaces/GroupPart.md +6 -6
- package/api/@xmachines/play-pattern/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +5 -5
- package/api/@xmachines/play-pattern/interfaces/ParamPart.md +9 -9
- package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-pattern/interfaces/PatternParam.md +6 -6
- package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PathParams.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +1 -1
- package/api/@xmachines/play-react/README.md +58 -19
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
- package/api/@xmachines/play-react/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-react/functions/useActor.md +1 -1
- package/api/@xmachines/play-react/functions/useAtomEffect.md +1 -1
- package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-react/interfaces/ActionProviderProps.md +5 -5
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +11 -11
- package/api/@xmachines/play-react/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +8 -8
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +6 -6
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-react/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-react/interfaces/RendererProps.md +7 -7
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-react/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-react/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-react/variables/ActorProvider.md +14 -4
- package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-react-router/README.md +26 -5
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +7 -7
- package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-router/README.md +87 -29
- package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +11 -11
- package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +13 -13
- package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +11 -11
- package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +13 -13
- package/api/@xmachines/play-router/index/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-router/index/classes/RouterBridgeBase.md +7 -7
- package/api/@xmachines/play-router/index/functions/buildPlayRouteEvent.md +1 -1
- package/api/@xmachines/play-router/index/functions/buildRouteTree.md +1 -1
- package/api/@xmachines/play-router/index/functions/cleanFrameworkParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-router/index/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-router/index/functions/createRouterConnection.md +1 -1
- package/api/@xmachines/play-router/index/functions/detectDuplicateRoutes.md +1 -1
- package/api/@xmachines/play-router/index/functions/extractQuery.md +1 -1
- package/api/@xmachines/play-router/index/functions/extractRouteParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/findRouteById.md +1 -1
- package/api/@xmachines/play-router/index/functions/findRouteByPath.md +1 -1
- package/api/@xmachines/play-router/index/functions/isMountableBridge.md +1 -1
- package/api/@xmachines/play-router/index/functions/joinBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/mountKey.md +1 -1
- package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/openProviderBridge.md +5 -5
- package/api/@xmachines/play-router/index/functions/parsePattern.md +1 -1
- package/api/@xmachines/play-router/index/functions/pickOwnParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/repointProviderBridge.md +1 -1
- package/api/@xmachines/play-router/index/functions/resolveBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/resolveFrameworkParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-router/index/functions/splitLocation.md +1 -1
- package/api/@xmachines/play-router/index/functions/stripBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/validateRouteFormat.md +1 -1
- package/api/@xmachines/play-router/index/functions/validateStateExists.md +1 -1
- package/api/@xmachines/play-router/index/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +9 -9
- package/api/@xmachines/play-router/index/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/LocationLike.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +10 -10
- package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +11 -11
- package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/ResolvedRoutePath.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/Routable.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteInfo.md +10 -10
- package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteNode.md +12 -12
- package/api/@xmachines/play-router/index/interfaces/RouteObject.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/RouteTree.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteData.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/URLPatternLike.md +3 -3
- package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +1 -1
- package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +1 -1
- package/api/@xmachines/play-router/xstate/README.md +5 -2
- package/api/@xmachines/play-router/xstate/functions/createRouteMap.md +2 -2
- package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +5 -5
- package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getRoutableRoutes.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getRouteMappings.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getTransitionReachableRoutes.md +7 -8
- package/api/@xmachines/play-router/xstate/functions/isRouteReachable.md +8 -9
- package/api/@xmachines/play-router/xstate/functions/machineToGraph.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/routeExists.md +1 -1
- package/api/@xmachines/play-router/xstate/interfaces/Graph.md +26 -0
- package/api/@xmachines/play-router/xstate/interfaces/GraphEdge.md +22 -0
- package/api/@xmachines/play-router/xstate/interfaces/GraphNode.md +21 -0
- package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +6 -6
- package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +7 -7
- package/api/@xmachines/play-router/xstate/type-aliases/MachineGraph.md +4 -6
- package/api/@xmachines/play-solid/README.md +35 -11
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/functions/useBoundProp.md +8 -5
- package/api/@xmachines/play-solid/functions/useFieldValidation.md +6 -4
- package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-solid/functions/useStateBinding.md +5 -3
- package/api/@xmachines/play-solid/functions/useStateValue.md +5 -3
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +10 -10
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-solid/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-solid/interfaces/RendererProps.md +7 -7
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-solid/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-solid/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +17 -3
- package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-solid-router/README.md +24 -10
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +7 -7
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
- package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-svelte/README.md +19 -11
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +3 -4
- package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
- package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +12 -12
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +8 -8
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +14 -14
- package/api/@xmachines/play-svelte/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-svelte/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-svelte/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-svelte-spa-router/README.md +14 -7
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +7 -7
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +10 -10
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/README.md +67 -14
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +29 -19
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +13 -16
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-sveltekit-router/interfaces/SvelteKitRouterBridgeOptions.md +25 -0
- package/api/@xmachines/play-sveltekit-router/type-aliases/ShallowNavigation.md +21 -0
- package/api/@xmachines/play-tanstack-react-router/README.md +36 -17
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +7 -7
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-router/README.md +7 -4
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +7 -7
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +3 -3
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/README.md +50 -17
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +7 -7
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-url/README.md +1 -1
- package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +12 -12
- package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +12 -12
- package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +13 -13
- package/api/@xmachines/play-url/index/functions/buildPath.md +1 -1
- package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
- package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +1 -1
- package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
- package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +1 -1
- package/api/@xmachines/play-url/index/functions/isDotSegment.md +1 -1
- package/api/@xmachines/play-url/index/functions/joinBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/parsePattern.md +1 -1
- package/api/@xmachines/play-url/index/functions/pickOwnParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/resolveBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-url/index/functions/splitLocation.md +1 -1
- package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
- package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +9 -9
- package/api/@xmachines/play-url/index/interfaces/GroupPart.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/ParamPart.md +9 -9
- package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-url/index/interfaces/PatternParam.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +7 -7
- package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PathParams.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +3 -3
- package/api/@xmachines/play-url/index/variables/NO_BASE_PATH.md +1 -1
- package/api/@xmachines/play-url/index/variables/URLPattern.md +1 -1
- package/api/@xmachines/play-view/README.md +45 -19
- package/api/@xmachines/play-view/errors/README.md +1 -0
- package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +13 -13
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +12 -12
- package/api/@xmachines/play-view/errors/classes/ViewElementKeyCollisionError.md +181 -0
- package/api/@xmachines/play-view/index/README.md +10 -4
- package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +10 -9
- package/api/@xmachines/play-view/index/functions/bindStoreHandlers.md +34 -0
- package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
- package/api/@xmachines/play-view/index/functions/composeViews.md +8 -2
- package/api/@xmachines/play-view/index/functions/createActorProxy.md +39 -0
- package/api/@xmachines/play-view/index/functions/createRenderErrorBinding.md +35 -0
- package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
- package/api/@xmachines/play-view/index/functions/createViewSession.md +29 -0
- package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
- package/api/@xmachines/play-view/index/functions/forwardRenderError.md +45 -0
- package/api/@xmachines/play-view/index/functions/guardContextWrites.md +1 -1
- package/api/@xmachines/play-view/index/functions/refreshContextSubtree.md +1 -1
- package/api/@xmachines/play-view/index/functions/reuseComposedState.md +1 -1
- package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
- package/api/@xmachines/play-view/index/functions/typedSpec.md +1 -1
- package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +8 -8
- package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ComposedView.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/HandlerFactory.md +19 -0
- package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +8 -8
- package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +4 -4
- package/api/@xmachines/play-view/index/interfaces/ViewMeta.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ViewSession.md +155 -0
- package/api/@xmachines/play-view/index/interfaces/ViewSessionOptions.md +12 -0
- package/api/@xmachines/play-view/index/interfaces/ViewSessionSnapshot.md +23 -0
- package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +22 -3
- package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +7 -6
- package/api/@xmachines/play-view/index/interfaces/ViewTree.md +6 -6
- package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/Viewable.md +4 -4
- package/api/@xmachines/play-view/index/type-aliases/StateUpdater.md +21 -0
- package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +1 -1
- package/api/@xmachines/play-view/index/variables/CONTEXT_STATE_KEY.md +1 -1
- package/api/@xmachines/play-vue/README.md +20 -15
- package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-vue/functions/useActor.md +1 -1
- package/api/@xmachines/play-vue/functions/useBoundProp.md +10 -4
- package/api/@xmachines/play-vue/functions/useFieldValidation.md +12 -5
- package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +8 -8
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
- package/api/@xmachines/play-vue/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-vue/interfaces/RendererProps.md +7 -7
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +4 -4
- package/api/@xmachines/play-vue/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-vue/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue/variables/Renderer.md +3 -3
- package/api/@xmachines/play-vue-router/README.md +18 -11
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +11 -11
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +11 -11
- package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +7 -7
- package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-xstate/README.md +120 -57
- package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +11 -11
- package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +11 -11
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +14 -14
- package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +13 -13
- package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +15 -15
- package/api/@xmachines/play-xstate/index/README.md +1 -1
- package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +201 -124
- package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
- package/api/@xmachines/play-xstate/index/functions/definePlayer.md +14 -10
- package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +6 -6
- package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +4 -4
- package/api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md +9 -9
- package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +1 -1
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +1 -1
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +13 -5
- package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +26 -13
- package/api/@xmachines/play-xstate/with-routing/functions/isAbsoluteRoute.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteContext.md +8 -8
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +7 -7
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
- package/api/@xmachines/play-xstate/with-view/functions/withView.md +1 -1
- package/api/@xmachines/shared/README.md +1 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutput.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutputFile.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +4 -4
- package/api/@xmachines/shared/vite-aliases/functions/xmTestTarget.md +1 -1
- package/api/@xmachines/shared/vite-aliases/type-aliases/XmTestTarget.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +1 -1
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +6 -6
- package/contributing/architecture.md +100 -61
- package/contributing/configuration.md +44 -62
- package/contributing/deployment.md +131 -161
- package/contributing/development.md +34 -9
- package/contributing/migrating-to-play-atom.md +23 -5
- package/contributing/testing.md +64 -33
- package/examples/@xmachines/play-dom-demo/README.md +2 -2
- package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +1 -1
- package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
- package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
- package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Button.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Field.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Panel.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-dom-router-demo/README.md +4 -3
- package/examples/@xmachines/play-react-demo/README.md +2 -2
- package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Button.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Field.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Panel.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Shell.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-react-router-demo/README.md +4 -3
- package/examples/@xmachines/play-solid-demo/README.md +3 -3
- package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Button.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Field.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Panel.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Shell.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-solid-router-demo/README.md +9 -3
- package/examples/@xmachines/play-svelte-demo/README.md +1 -1
- package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-svelte-spa-router-demo/README.md +1 -1
- package/examples/@xmachines/play-sveltekit-router-demo/README.md +1 -1
- package/examples/@xmachines/play-tanstack-react-router-demo/README.md +3 -2
- package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +9 -8
- package/examples/@xmachines/play-vue-demo/README.md +2 -2
- package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +1 -1
- package/examples/@xmachines/play-vue-router-demo/README.md +3 -3
- package/examples/README.md +1 -1
- package/examples/basic-state-machine.md +19 -23
- package/examples/form-validation.md +60 -61
- package/examples/multi-router-integration.md +268 -147
- package/examples/routing-patterns.md +73 -43
- package/examples/traffic-light.md +24 -22
- package/guides/actor-model.md +38 -21
- package/guides/atoms.md +48 -8
- package/guides/getting-started.md +106 -62
- package/guides/inspector.md +103 -37
- package/guides/routing.md +7 -2
- package/guides/state-machines.md +106 -68
- package/guides/views.md +40 -18
- package/package.json +6 -6
- package/rfc/git.md +13 -5
- package/rfc/play.md +53 -31
- package/rfc/run.md +7 -4
- package/api/@xmachines/play-view/index/functions/createFailureLatch.md +0 -20
- package/api/@xmachines/play-view/index/functions/sameViewInputs.md +0 -25
- package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +0 -60
- package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +0 -19
|
@@ -8,11 +8,11 @@ This document describes how `@xmachines/xmachines-js` packages are built, versio
|
|
|
8
8
|
|
|
9
9
|
All `@xmachines/*` packages are published to the **public npm registry** (`registry.npmjs.org`). Every package uses `"publishConfig": { "access": "public" }` so scoped packages are accessible without an npm org subscription. See the [Published Packages](#published-packages) table for the full list.
|
|
10
10
|
|
|
11
|
-
| Target | Config File
|
|
12
|
-
| --------------- |
|
|
13
|
-
| npm registry | `
|
|
14
|
-
| GitLab Releases | `
|
|
15
|
-
| GitLab CI | `.gitlab-ci.yml`
|
|
11
|
+
| Target | Config File | Purpose |
|
|
12
|
+
| --------------- | ------------------------------------------------- | ------------------------------------------------------ |
|
|
13
|
+
| npm registry | `publish-release`, on the tag pipeline of a train | Publish the public packages of the train |
|
|
14
|
+
| GitLab Releases | `publish-release`, on the tag pipeline of a train | Attach tarball artifacts to the GitLab release tag |
|
|
15
|
+
| GitLab CI | `.gitlab-ci.yml` | Trigger builds, tests, and releases on push / MR / tag |
|
|
16
16
|
|
|
17
17
|
The root `package.json` is marked `"private": true` and is **never published** to npm.
|
|
18
18
|
|
|
@@ -20,32 +20,38 @@ The root `package.json` is marked `"private": true` and is **never published** t
|
|
|
20
20
|
|
|
21
21
|
## Published Packages
|
|
22
22
|
|
|
23
|
-
The
|
|
24
|
-
|
|
25
|
-
| Package | Directory |
|
|
26
|
-
| ------------------------------------------------------------------------------------------------- | ------------------------------------- |
|
|
27
|
-
| [`@xmachines/
|
|
28
|
-
| [`@xmachines/play`](../api/@xmachines/play/README.md) | `packages/play` |
|
|
29
|
-
| [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md) | `packages/play-actor` |
|
|
30
|
-
| [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md) | `packages/play-atom` |
|
|
31
|
-
| [`@xmachines/play-
|
|
32
|
-
| [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md)
|
|
33
|
-
| [`@xmachines/play-
|
|
34
|
-
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `packages/play-react` |
|
|
35
|
-
| [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) | `packages/play-react-router` |
|
|
36
|
-
| [`@xmachines/play-
|
|
37
|
-
| [`@xmachines/play-solid
|
|
38
|
-
| [`@xmachines/play-
|
|
39
|
-
| [`@xmachines/play-
|
|
40
|
-
| [`@xmachines/play-svelte-spa-router`](../api/@xmachines/play-svelte-spa-router/README.md) | `packages/play-svelte-spa-router` |
|
|
41
|
-
| [`@xmachines/play-
|
|
42
|
-
| [`@xmachines/play-tanstack-
|
|
43
|
-
| [`@xmachines/play-
|
|
44
|
-
| [`@xmachines/play-
|
|
45
|
-
| [`@xmachines/play-
|
|
46
|
-
| [`@xmachines/
|
|
47
|
-
|
|
48
|
-
|
|
23
|
+
The release is in **trains**, each released on its own: `core`, `play` and `docs`. A train publishes every package under its paths that is not private, at the version of the train's release (`release.config.mjs`, `trains`):
|
|
24
|
+
|
|
25
|
+
| Package | Directory | Train |
|
|
26
|
+
| ------------------------------------------------------------------------------------------------- | ------------------------------------- | ------ |
|
|
27
|
+
| [`@xmachines/core`](../api/@xmachines/core/README.md) | `packages/core` | `core` |
|
|
28
|
+
| [`@xmachines/play`](../api/@xmachines/play/README.md) | `packages/play` | `play` |
|
|
29
|
+
| [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md) | `packages/play-actor` | `play` |
|
|
30
|
+
| [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md) | `packages/play-atom` | `play` |
|
|
31
|
+
| [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | `packages/play-dom` | `play` |
|
|
32
|
+
| [`@xmachines/play-dom-router`](../api/@xmachines/play-dom-router/README.md) | `packages/play-dom-router` | `play` |
|
|
33
|
+
| [`@xmachines/play-pattern`](../api/@xmachines/play-pattern/README.md) | `packages/play-pattern` | `play` |
|
|
34
|
+
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `packages/play-react` | `play` |
|
|
35
|
+
| [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) | `packages/play-react-router` | `play` |
|
|
36
|
+
| [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) | `packages/play-router` | `play` |
|
|
37
|
+
| [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | `packages/play-solid` | `play` |
|
|
38
|
+
| [`@xmachines/play-solid-router`](../api/@xmachines/play-solid-router/README.md) | `packages/play-solid-router` | `play` |
|
|
39
|
+
| [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | `packages/play-svelte` | `play` |
|
|
40
|
+
| [`@xmachines/play-svelte-spa-router`](../api/@xmachines/play-svelte-spa-router/README.md) | `packages/play-svelte-spa-router` | `play` |
|
|
41
|
+
| [`@xmachines/play-sveltekit-router`](../api/@xmachines/play-sveltekit-router/README.md) | `packages/play-sveltekit-router` | `play` |
|
|
42
|
+
| [`@xmachines/play-tanstack-react-router`](../api/@xmachines/play-tanstack-react-router/README.md) | `packages/play-tanstack-react-router` | `play` |
|
|
43
|
+
| [`@xmachines/play-tanstack-router`](../api/@xmachines/play-tanstack-router/README.md) | `packages/play-tanstack-router` | `play` |
|
|
44
|
+
| [`@xmachines/play-tanstack-solid-router`](../api/@xmachines/play-tanstack-solid-router/README.md) | `packages/play-tanstack-solid-router` | `play` |
|
|
45
|
+
| [`@xmachines/play-url`](../api/@xmachines/play-url/README.md) | `packages/play-url` | `play` |
|
|
46
|
+
| [`@xmachines/play-view`](../api/@xmachines/play-view/README.md) | `packages/play-view` | `play` |
|
|
47
|
+
| [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | `packages/play-vue` | `play` |
|
|
48
|
+
| [`@xmachines/play-vue-router`](../api/@xmachines/play-vue-router/README.md) | `packages/play-vue-router` | `play` |
|
|
49
|
+
| [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) | `packages/play-xstate` | `play` |
|
|
50
|
+
| [`@xmachines/docs`](../README.md) | `packages/docs` | `docs` |
|
|
51
|
+
|
|
52
|
+
Every package of `packages/play-*` that is not private is on the `play` train. [`@xmachines/shared`](../api/@xmachines/shared/README.md) is private: it holds the configs every package is built with, and no train publishes it.
|
|
53
|
+
|
|
54
|
+
**Example demo packages** (under `packages/*/examples/demo`) are private and **not published** to npm, but the `play` train packs them beside its packages and attaches them to its GitLab release as assets for testing.
|
|
49
55
|
|
|
50
56
|
Each published package includes only the directories listed in its `files` field: `dist`, `README.md`, and `LICENSE` (or equivalent for packages without a compilation step).
|
|
51
57
|
|
|
@@ -57,13 +63,14 @@ Each published package includes only the directories listed in its `files` field
|
|
|
57
63
|
|
|
58
64
|
Pipeline runs are triggered by `.gitlab-ci.yml` under the following conditions:
|
|
59
65
|
|
|
60
|
-
| Trigger
|
|
61
|
-
|
|
|
62
|
-
| Push to `main` / `rc` / `beta` / `alpha` / `pre` | Full pipeline; the release
|
|
63
|
-
| Merge request
|
|
64
|
-
| Web / API / trigger / parent pipeline
|
|
66
|
+
| Trigger | Pipeline runs |
|
|
67
|
+
| --------------------------------------------------------- | -------------------------------------------------- |
|
|
68
|
+
| Push to `main` / `next` / `rc` / `beta` / `alpha` / `pre` | Full pipeline; the release jobs wait to be started |
|
|
69
|
+
| Merge request | Full pipeline, no release job |
|
|
70
|
+
| Web / API / trigger / parent pipeline | Full pipeline |
|
|
71
|
+
| A release tag, `<train>-v<version>` | `publish-release` alone, which publishes the train |
|
|
65
72
|
|
|
66
|
-
No rule admits
|
|
73
|
+
No rule admits another tag, so pushing one runs nothing.
|
|
67
74
|
|
|
68
75
|
The pipeline includes two reusable CI components, both pinned in `.gitlab-ci.yml` — which is the version to trust, rather than a number repeated here:
|
|
69
76
|
|
|
@@ -76,15 +83,15 @@ The `node-build` job runs one command:
|
|
|
76
83
|
pnpm run build # vite build (JavaScript) && tsc --build (declarations)
|
|
77
84
|
```
|
|
78
85
|
|
|
79
|
-
It runs no test. The `test` job owns the unit suite, so `node-build` skips its own with `NODE_TEST_ARGS`. It also builds no documentation: the `docs` job below does that.
|
|
86
|
+
It runs no test. The `test:dist` job owns the unit suite, so `node-build` skips its own with `NODE_TEST_ARGS`. It also builds no documentation: the `docs` job below does that.
|
|
80
87
|
|
|
81
|
-
Coverage comes from the `test` job, through the regex:
|
|
88
|
+
Coverage comes from the `test:dist` job, through the regex:
|
|
82
89
|
|
|
83
90
|
```
|
|
84
91
|
/All files[^|]*\|[^|]*\s+([\d\.]+)/
|
|
85
92
|
```
|
|
86
93
|
|
|
87
|
-
That job publishes the JUnit results as `reports/test-results.xml` and the Cobertura coverage as `reports/cobertura-coverage.xml`. `vitest.config.ts` names both paths, and `COVERAGE_REPORTS_DIR` points them at `reports/`.
|
|
94
|
+
That job runs the suites on the `dist/` of `node-build`, and it maps the coverage back to `src/` through the source maps. It publishes the JUnit results as `reports/test-results.xml` and the Cobertura coverage as `reports/cobertura-coverage.xml`. `vitest.config.ts` names both paths, and `COVERAGE_REPORTS_DIR` points them at `reports/`.
|
|
88
95
|
|
|
89
96
|
### Docs Job
|
|
90
97
|
|
|
@@ -112,42 +119,30 @@ To run the same check on your machine, run `pnpm run docs` and then `pnpm run te
|
|
|
112
119
|
|
|
113
120
|
### Release Job Detail
|
|
114
121
|
|
|
115
|
-
The `semantic-release`
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
semantic-release:
|
|
119
|
-
id_tokens:
|
|
120
|
-
NPM_ID_TOKEN:
|
|
121
|
-
aud: "npm:registry.npmjs.org"
|
|
122
|
-
artifacts:
|
|
123
|
-
when: always
|
|
124
|
-
expire_in: 1 week
|
|
125
|
-
paths:
|
|
126
|
-
- dist/releases/*.tgz
|
|
127
|
-
```
|
|
122
|
+
The `semantic-release` job is the job of the `to-be-continuous/semantic-release` component, with its own rules: manual on every release branch, and a `resource_group` that runs one release at a time. One click releases every train: the job runs semantic-release once for each train that the pipeline's input `release-trains` names, all three by default, in the order of the trains of `release.config.mjs`: `core`, then `play`, then `docs`, whatever order they were ticked in. A train with no commit that releases it releases nothing, and the next one runs. A run that fails stops the job; retry it, and each train it released already has nothing left to release. To release some trains alone, tick them in the multi-select `release-trains` of **Run pipeline**, or set `RELEASE_TRAINS` as you start the job, as `docs`: the input is the default of the global variable `RELEASE_TRAINS`, which a CI/CD variable overrides, as a to-be-continuous component maps its inputs. A name of no train fails the job.
|
|
123
|
+
|
|
124
|
+
The component turns `release.config.mjs` into `.releaserc.json`, of `RELEASE_TRAIN=docs`, whose run names every plugin of the others' runs too, and installs semantic-release and each plugin that the config names, globally. The config is therefore literals: it imports no plugin, and holds no top-level await. The job then removes `.releaserc.json`, so each run reads `release.config.mjs` of its own train.
|
|
128
125
|
|
|
129
|
-
The job
|
|
126
|
+
The job releases from the tip of its branch: a release of an earlier pipeline may have pushed a release commit since, and semantic-release releases nothing of a branch behind its remote. The job checks the tip out when every commit past its pipeline's commit is a release commit, and fails otherwise, as a branch that moved on needs the pipeline of its tip. Each run of a train then starts at the release commit of the run before it.
|
|
130
127
|
|
|
131
128
|
The `semantic-release` command is called with `--no-ci` to allow it to run inside CI without triggering its own CI-environment mode.
|
|
132
129
|
|
|
133
130
|
### Release Smoke Test Job
|
|
134
131
|
|
|
135
|
-
The `release-pack-smoke` job
|
|
132
|
+
The `release-pack-smoke` job runs automatically on `main` and in a merge train, and manually on a merge request:
|
|
136
133
|
|
|
137
134
|
```bash
|
|
138
135
|
pnpm run build
|
|
139
|
-
|
|
136
|
+
semantic-release-trains-smoke
|
|
140
137
|
```
|
|
141
138
|
|
|
142
|
-
`
|
|
139
|
+
`semantic-release-trains-smoke`, of `@wtf/semantic-release-trains-publish`, reads the trains of `release.config.mjs` and:
|
|
143
140
|
|
|
144
|
-
1.
|
|
145
|
-
2.
|
|
146
|
-
3.
|
|
147
|
-
4. Asserts the install succeeds — any missing files, broken exports, or pack-time errors surface here.
|
|
148
|
-
5. Cleans up temp directories and tarballs after each check.
|
|
141
|
+
1. Packs every package of every train, as the release packs it: each `workspace:` range resolved, the `source` export condition stripped.
|
|
142
|
+
2. Checks each tarball: every entry of its `files` present, no `source` condition left, and no file a `forbid` glob names, as a typecheck build.
|
|
143
|
+
3. Installs each tarball in a temporary project, with every other package that it packed in place of the registry's, and imports each of its exports.
|
|
149
144
|
|
|
150
|
-
|
|
145
|
+
The publish plugin runs the same check on the tag, of the tarballs it is about to publish, before the first publish.
|
|
151
146
|
|
|
152
147
|
---
|
|
153
148
|
|
|
@@ -155,117 +150,111 @@ This smoke test runs **before** the actual publish so packaging problems are cau
|
|
|
155
150
|
|
|
156
151
|
### Branch Model
|
|
157
152
|
|
|
158
|
-
Releases are driven by commit history on the release branches:
|
|
153
|
+
Releases are driven by the commit history of each train on the release branches:
|
|
159
154
|
|
|
160
|
-
| Branch | Channel | Tag format
|
|
161
|
-
| ------- | ---------------- |
|
|
162
|
-
| `main` | stable (default) | `v1.2.3`
|
|
163
|
-
| `
|
|
164
|
-
| `
|
|
165
|
-
| `
|
|
166
|
-
| `
|
|
155
|
+
| Branch | Channel | Tag format (of `play`) | Behaviour |
|
|
156
|
+
| ------- | ---------------- | ---------------------- | ----------------------------- |
|
|
157
|
+
| `main` | stable (default) | `play-v1.2.3` | Full production release |
|
|
158
|
+
| `next` | `next` | `play-v1.2.3-next.N` | The line on XState 6 |
|
|
159
|
+
| `rc` | `rc` | `play-v1.2.3-rc.N` | Release candidate pre-release |
|
|
160
|
+
| `beta` | `beta` | `play-v1.2.3-beta.N` | Beta pre-release |
|
|
161
|
+
| `alpha` | `alpha` | `play-v1.2.3-alpha.N` | Alpha pre-release |
|
|
162
|
+
| `pre` | `pre` | `play-v1.2.3-pre.N` | Pre-release |
|
|
167
163
|
|
|
168
164
|
The channel becomes the npm dist-tag verbatim, which is why none of them contains a slash: npm reads a slash in a version selector as a GitHub shorthand, so such a tag cannot be installed.
|
|
169
165
|
|
|
170
|
-
|
|
166
|
+
The tag format of a train is `<train>-v${version}`. Every train continued from 7.0.0, the last release of one version for everything: `core-v7.0.0`, `play-v7.0.0` and `docs-v7.0.0` name its commit.
|
|
171
167
|
|
|
172
|
-
|
|
168
|
+
#### `next` after a release of `main`
|
|
173
169
|
|
|
174
|
-
|
|
170
|
+
`main` stays on XState 5 and merges into `next`. **After each release on `main`, merge `main` into `next`**, by a merge request from `main` to `next`, kept unsquashed, that keeps `main` (its source branch is never deleted).
|
|
175
171
|
|
|
176
|
-
|
|
177
|
-
corepack enable
|
|
178
|
-
pnpm install --frozen-lockfile
|
|
179
|
-
node scripts/set-workspace-versions.mjs ${nextRelease.version}
|
|
180
|
-
pnpm run build
|
|
181
|
-
pnpm --filter @xmachines/docs run typedoc --gitRevision v${nextRelease.version}
|
|
182
|
-
pnpm --filter @xmachines/docs run format
|
|
183
|
-
git add -A packages/docs/api packages/docs/examples/@xmachines packages/docs/examples/README.md
|
|
184
|
-
```
|
|
172
|
+
A prerelease of `next` builds on the last release of its train that `next` reaches: from `play-v7.0.0`, a breaking change on `next` releases `play` `8.0.0-next.1`, then `8.0.0-next.2`, and so on. That claims 8.0.0 for the line of XState 6. When `main` takes that major first, by a breaking release of the same train, `play` 8.0.0 is something else, and `next` would go on with `8.0.0-next.N`, which sorts below 8.0.0 and does not hold it. The merge of `main` corrects it: `play-v8.0.0` is then reachable from `next`, the breaking change of `next` is not in it, and the next prerelease is `9.0.0-next.1`. A user of `@next` sees the major move from 8 to 9, as semver allows. The same holds for `core` and `docs`, each by its own version.
|
|
185
173
|
|
|
186
|
-
|
|
174
|
+
### Which Commits Release a Train
|
|
187
175
|
|
|
188
|
-
|
|
189
|
-
2. **Install** — `pnpm install --frozen-lockfile` installs the exact dependency versions recorded in the lockfile.
|
|
190
|
-
3. **Sync versions** — `scripts/set-workspace-versions.mjs` sets the same release version across every `package.json` in the workspace (root + all packages), including cross-package workspace dependency ranges.
|
|
191
|
-
4. **Build** — runs `vite build && tsc --build` to produce compiled `dist/` output — JavaScript then declarations — in all packages.
|
|
192
|
-
5. **Generate API docs** — runs TypeDoc to regenerate `packages/docs/api/` and `packages/docs/examples/@xmachines/` at the release git revision. TypeDoc also rewrites the demo lists of `packages/docs/examples/README.md`.
|
|
193
|
-
6. **Format docs** — runs `oxfmt` on the docs package to ensure consistent formatting.
|
|
194
|
-
7. **Stage the generated docs** — `git add -A packages/docs/api packages/docs/examples/@xmachines packages/docs/examples/README.md`. The git plugin stages what `git ls-files -m -o` reports, and that never reports a DELETION. A page that TypeDoc removed, because an export was renamed or deleted, therefore stayed in git forever while the docs tarball packed from the working tree was correct. `git add -A` stages the removals, and the git plugin commits the index.
|
|
176
|
+
A commit counts for a train when it changes a file under the train's paths, or one of its `shared` files. A breaking change of `core` therefore makes a major release of `core` alone.
|
|
195
177
|
|
|
196
|
-
|
|
178
|
+
- `core`: `packages/core`.
|
|
179
|
+
- `play`: `packages/play` and `packages/play-*`, the demos too.
|
|
180
|
+
- `docs`: `packages/docs`, and every file of `core` and of `play`: the reference documents them, so a release of either is a release of `docs`. Release `docs` last.
|
|
197
181
|
|
|
198
|
-
|
|
182
|
+
The files every package is built with count for every train: the root `package.json`, `pnpm-lock.yaml`, `pnpm-workspace.yaml`, `tsconfig.json`, `vite.config.ts`, and `packages/shared`.
|
|
199
183
|
|
|
200
|
-
|
|
201
|
-
node scripts/publish-release.mjs
|
|
202
|
-
```
|
|
184
|
+
Release the trains in order: `core`, then `play`, then `docs`. `play` depends on `core`, and `dependencies: "fail"` of the config fails a run of `play` while `core` has commits that would release and are not released: its publish would pin `core`'s last release, without what those commits changed. The job runs them in that order; one of the input `play` alone fails so. `docs` depends on both by the `dependsOn` of its train, as its package depends on neither, and fails so too: its reference would show their old version badges until its next release.
|
|
203
185
|
|
|
204
|
-
|
|
186
|
+
### Branch Phase
|
|
205
187
|
|
|
206
|
-
The
|
|
188
|
+
The job of a train runs these plugins, in this order:
|
|
207
189
|
|
|
208
|
-
The
|
|
190
|
+
1. **The analyzer and the notes generator**, each wrapped by an entry of `@wtf/semantic-release-trains` (`wrap`), which gives it the train's commits alone. Each entry of the trains plugin also checks the trains: no file on two of them, and the trains the train depends on released. `type!:` is a breaking change, by `parserOpts` at the root of the config.
|
|
191
|
+
2. **`@semantic-release/changelog`** writes the train's changelog, the `CHANGELOG.md` of its first path: `packages/core/CHANGELOG.md`, `packages/play/CHANGELOG.md`, `packages/docs/CHANGELOG.md`. The root `CHANGELOG.md` holds the history up to 7.0.0.
|
|
192
|
+
3. **`@wtf/semantic-release-replace`** writes the version into the badge of each README of the train, by the `badge` template at the root of the config: a RegExp of the badge of shields.io, its version written as `shields` escapes it. `tests/readme-badges.test.ts` holds the template to every badge of the READMEs.
|
|
193
|
+
4. **Of `docs` alone**, the reference: `corepack enable`, `pnpm install --frozen-lockfile`, `pnpm run build`, TypeDoc at the revision `docs-v${nextRelease.version}`, and `oxfmt` of the docs package, each a `@semantic-release/exec` step. Then an entry of `@wtf/semantic-release-trains` of `generated: true` stages the trees TypeDoc writes, deletions too: the git plugin stages what `git ls-files -m -o` reports, which never reports a deletion, so a page of an export that was renamed or removed would stay in git for ever.
|
|
194
|
+
5. **`@semantic-release/git`** commits the changelog, the READMEs of the train, and of `docs` the reference (`packages/docs/api/**`, `packages/docs/examples/@xmachines/**` and the demo lists of `packages/docs/examples/README.md`), as:
|
|
209
195
|
|
|
210
|
-
|
|
196
|
+
```
|
|
197
|
+
chore(release): <train> <version>
|
|
198
|
+
```
|
|
211
199
|
|
|
212
|
-
|
|
200
|
+
The release notes are NOT interpolated into the message. `@semantic-release/git` runs `git commit -m <message>`, and the notes of a long release overflow the argument limit of the OS. The notes land in the changelog, which the same commit carries.
|
|
213
201
|
|
|
214
|
-
|
|
215
|
-
- `CHANGELOG.md`
|
|
216
|
-
- `package.json`, `pnpm-lock.yaml` and `pnpm-workspace.yaml` (root)
|
|
217
|
-
- The `package.json` of every scanned package, and the `README.md` of every one — the release stamps the version badge of a README at the same moment as the manifest
|
|
218
|
-
- `packages/docs/api/**` (generated API documentation)
|
|
219
|
-
- `packages/docs/examples/@xmachines/**` (generated demo documentation)
|
|
220
|
-
- `packages/docs/examples/README.md` (TypeDoc rewrites its demo lists)
|
|
202
|
+
The message carries no `[skip ci]`. The release commit needs no pipeline of its own, but the TAG that points at it does: that pipeline is where the publish happens. A `workflow:` rule skips the branch pipeline of the commit instead.
|
|
221
203
|
|
|
222
|
-
|
|
204
|
+
6. semantic-release pushes the tag `<train>-v<version>`. It publishes nothing.
|
|
223
205
|
|
|
224
|
-
|
|
206
|
+
### Publish Phase
|
|
225
207
|
|
|
226
|
-
|
|
227
|
-
chore(release): <version>
|
|
228
|
-
```
|
|
208
|
+
The tag's pipeline builds the tagged commit, and its `publish-release` job runs `semantic-release-trains-tag`, of `@wtf/semantic-release-trains`. It runs semantic-release's own config, plugins and branches for the tag, with its version and its channel, and the plugins of the tag's run of `release.config.mjs`:
|
|
229
209
|
|
|
230
|
-
|
|
210
|
+
1. **The notes generator**, on the train, writes the notes again of the same commits.
|
|
211
|
+
2. **`@wtf/semantic-release-trains-publish`** packs each package of the train into `dist/releases/`, the demos too, with each `workspace:` range resolved (a package of the same train to the release's version, one of another train to that train's last release) and the `source` export condition stripped; runs the smoke test of the tarballs; and publishes each package that is not private, in the order of their dependencies, under the dist-tag of the channel, with provenance. `NPM_DIST_TAG` overrides the dist-tag for a one-off.
|
|
212
|
+
3. **`@semantic-release/gitlab`** creates the GitLab release of the tag, its notes those of the release, its assets every tarball of `dist/releases/` — after the publish succeeded, so a release entry never advertises a tarball that npm refused.
|
|
231
213
|
|
|
232
|
-
|
|
214
|
+
The tag pipeline is what makes the provenance attestation meaningful. npm records the commit of the pipeline in the attestation. On a tag pipeline that commit IS the commit that the tag names. A publish from the branch pipeline attests the PARENT of the release commit instead: a revision that the tag does not name.
|
|
233
215
|
|
|
234
|
-
|
|
216
|
+
The job is idempotent. It skips every package that the registry already serves at this version, so one retry of the job finishes a run that died partway. Nothing to untag, nothing to force-push. A version below the one its dist-tag points at publishes nothing, so a retry of an older release's job moves no dist-tag back.
|
|
235
217
|
|
|
236
218
|
---
|
|
237
219
|
|
|
238
|
-
##
|
|
220
|
+
## Versions
|
|
239
221
|
|
|
240
|
-
|
|
222
|
+
No version is written into git. Every `package.json` holds `0.0.0-development`, and each `@xmachines/*` dependency of the workspace is `workspace:*` within a train, `workspace:^` across trains. The tag is the version of a train, and the publish writes it into the manifests it packs, each `workspace:*` resolved to an exact version, so a package always depends on the exact version of a sibling of its train that was released with it. A dependency on a package of another train resolves to the range of that train's last release, by its tags, as `^7.0.0`: an exact pin would hold back each release of that train alone, a peer of it failing the install of the new version, and a dependency of it installing a second copy.
|
|
241
223
|
|
|
242
|
-
|
|
243
|
-
- Rewrites `dependencies`, `devDependencies`, `peerDependencies`, and `optionalDependencies` ranges for any `@xmachines/*` workspace package to the exact new version (no `^` or `~` prefix — a strict pinned version is written).
|
|
224
|
+
Why the versions stay out of git:
|
|
244
225
|
|
|
245
|
-
|
|
226
|
+
- **`main` merges into `next`.** With versions in git, `main` holds 7.x and `next` holds 8.0.0-next.N in the same `package.json` files, and each merge of `main` conflicts in the version of every package that either line released since the last merge.
|
|
227
|
+
- **The trains stay apart.** The release commit of a train touches its changelog and its READMEs alone: no two trains write the same file, and the release commit of one train never counts as a change of another.
|
|
228
|
+
- **One source of truth.** The tag and npm hold the version, and nothing in git has to agree with them, so no release can stop between writing versions and tagging.
|
|
229
|
+
|
|
230
|
+
What it costs:
|
|
231
|
+
|
|
232
|
+
- A checkout says `0.0.0-development`: a package built from git, or packed by hand, carries no real version. Only the publish of the tag's pipeline writes one. No source reads its own version from its `package.json`; keep it so.
|
|
233
|
+
- The README badges carry the version, by the release commit of the train, and the manifests do not.
|
|
234
|
+
- `npm version`, and any tool that bumps a `package.json`, has nothing to do here.
|
|
246
235
|
|
|
247
236
|
---
|
|
248
237
|
|
|
249
238
|
## Credentials and Protected Variables
|
|
250
239
|
|
|
251
|
-
| Variable | Source | Purpose
|
|
252
|
-
| --------------------------- | --------------------------------------- |
|
|
253
|
-
| `NPM_ID_TOKEN` | GitLab CI OIDC (auto-generated per job) | Authenticates `
|
|
254
|
-
| `GL_TOKEN` / `GITLAB_TOKEN` | GitLab CI group variable (
|
|
255
|
-
| `CI_JOB_TOKEN` | GitLab CI built-in | Used by the `to-be-continuous` components for GitLab API calls
|
|
240
|
+
| Variable | Source | Purpose |
|
|
241
|
+
| --------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
242
|
+
| `NPM_ID_TOKEN` | GitLab CI OIDC (auto-generated per job) | Authenticates the publish of `publish-release` to npm registry via OIDC token exchange |
|
|
243
|
+
| `GL_TOKEN` / `GITLAB_TOKEN` | GitLab CI group variable (protected) | Authenticates the git push back of semantic-release, and the GitLab release that `publish-release` creates |
|
|
244
|
+
| `CI_JOB_TOKEN` | GitLab CI built-in | Used by the `to-be-continuous` components for GitLab API calls |
|
|
256
245
|
|
|
257
246
|
**No static npm token is committed to the repository.** The `NPM_ID_TOKEN` is a short-lived OIDC token generated for each CI job with audience `npm:registry.npmjs.org`.
|
|
258
247
|
|
|
259
248
|
To publish packages, a maintainer must:
|
|
260
249
|
|
|
261
|
-
1. Have push access to a release-eligible branch (`main`, `rc`, `beta`, `alpha`, `pre`).
|
|
250
|
+
1. Have push access to a release-eligible branch (`main`, `next`, `rc`, `beta`, `alpha`, `pre`). `GITLAB_TOKEN` is a protected variable, so each of these branches is protected, and a new release branch must be too. The tags of the trains (`core-v*`, `play-v*`, `docs-v*`) are protected, so the tag's pipeline gets the token for the GitLab release.
|
|
262
251
|
2. Ensure the GitLab project CI/CD variables include the required tokens.
|
|
263
252
|
|
|
264
253
|
---
|
|
265
254
|
|
|
266
255
|
## Artifacts
|
|
267
256
|
|
|
268
|
-
Release tarballs are stored as
|
|
257
|
+
Release tarballs are stored as artifacts of the `publish-release` job, with no expiry:
|
|
269
258
|
|
|
270
259
|
```
|
|
271
260
|
dist/releases/*.tgz
|
|
@@ -273,7 +262,7 @@ dist/releases/*.tgz
|
|
|
273
262
|
|
|
274
263
|
The same tarballs are attached to the GitLab Release entry as permanent downloadable assets. Tarballs are **not committed** to git (the `dist/` directory is gitignored).
|
|
275
264
|
|
|
276
|
-
The
|
|
265
|
+
The release commit of `docs` **commits** the generated documentation (`packages/docs/api/` and `packages/docs/examples/@xmachines/`) to git, with the demo lists that TypeDoc writes into the hand-written `packages/docs/examples/README.md`. The release commit of each train holds its changelog and its stamped READMEs.
|
|
277
266
|
|
|
278
267
|
---
|
|
279
268
|
|
|
@@ -295,7 +284,7 @@ There is no automated rollback mechanism. To revert a release:
|
|
|
295
284
|
npm unpublish @xmachines/play@<bad-version>
|
|
296
285
|
```
|
|
297
286
|
|
|
298
|
-
3. **Patch release** — push a `fix:` commit to `main` (or the relevant branch)
|
|
287
|
+
3. **Patch release** — push a `fix:` commit to `main` (or the relevant branch) and release its train, a patch release by semantic-release. This is the preferred long-term approach for production issues.
|
|
299
288
|
|
|
300
289
|
4. **GitLab Release** — delete or edit the GitLab Release entry via the GitLab UI or API to remove broken tarballs. This does not affect what is on npm.
|
|
301
290
|
|
|
@@ -368,50 +357,31 @@ Then, for EACH package:
|
|
|
368
357
|
|
|
369
358
|
## Recovering a Failed Release
|
|
370
359
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
1. **Delete the release tag.** semantic-release creates the tag _before_ publishing, so a re-run while it exists is a no-op ([semantic-release#3178](https://github.com/semantic-release/semantic-release/issues/3178)):
|
|
374
|
-
```bash
|
|
375
|
-
glab api --method DELETE "projects/xmachin-es%2Fxmachines-js/repository/tags/vX.Y.Z"
|
|
376
|
-
```
|
|
377
|
-
2. **Re-run the `semantic-release` job.**
|
|
378
|
-
|
|
379
|
-
The config detects a staged-but-untagged version (a recovery re-run) and automatically demotes any package already on npm at that version to pack-only — re-packing it for the release assets but **not** re-publishing it — so the re-run publishes only what's missing, with no manual input. `SEMREL_SKIP_STEPS` (a regex matched against release step IDs) remains available as a manual override to force-skip specific steps.
|
|
360
|
+
**A publish that failed** (e.g. one package's trusted publisher isn't set up) has pushed the tag, published some packages and left the rest missing. Fix the cause, then retry the `publish-release` job of the tag: every package npm already has is skipped, and the GitLab release is created once every package is published.
|
|
380
361
|
|
|
381
|
-
|
|
362
|
+
**A branch job that failed** before `@semantic-release/git` pushed the release commit is retried as it is. One that failed after, as of the push of the tag, cannot be: the retry runs behind the release commit, where semantic-release releases nothing. Push the missing tag by hand, at the release commit, with semantic-release's note of its channel (`refs/notes/semantic-release-<tag>`, `{"channels":[<channel>]}`, `null` of `main`'s) added to the tag's commit; its pipeline publishes it.
|
|
382
363
|
|
|
383
364
|
---
|
|
384
365
|
|
|
385
366
|
## Local Release Dry-Run (Manual)
|
|
386
367
|
|
|
387
|
-
To preview what
|
|
368
|
+
To preview what the release of a train would do, without a tag and without a publish:
|
|
388
369
|
|
|
389
370
|
```bash
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
pnpm exec semantic-release --dry-run --no-ci
|
|
371
|
+
npm install --global semantic-release@25 @semantic-release/changelog @semantic-release/exec \
|
|
372
|
+
@semantic-release/git @semantic-release/gitlab @wtf/semantic-release-trains \
|
|
373
|
+
@wtf/semantic-release-replace @wtf/semantic-release-trains-publish
|
|
374
|
+
RELEASE_TRAIN=play semantic-release --dry-run --no-ci
|
|
395
375
|
```
|
|
396
376
|
|
|
397
|
-
To test
|
|
377
|
+
To test the packaging locally (the same check run by `release-pack-smoke` in CI):
|
|
398
378
|
|
|
399
379
|
```bash
|
|
400
380
|
pnpm run build
|
|
401
|
-
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
This packs every publishable package, installs each tarball in a temporary project, and verifies the install succeeds.
|
|
405
|
-
|
|
406
|
-
To manually version and pack a single package for local inspection:
|
|
407
|
-
|
|
408
|
-
```bash
|
|
409
|
-
# From the repo root
|
|
410
|
-
pnpm --filter @xmachines/play run build
|
|
411
|
-
pnpm --filter @xmachines/play pack
|
|
381
|
+
semantic-release-trains-smoke
|
|
412
382
|
```
|
|
413
383
|
|
|
414
|
-
**Do not run `npm publish` manually.** All publishing must go through
|
|
384
|
+
**Do not run `npm publish` manually.** All publishing must go through the release in CI to keep the changelogs, git tags, and npm versions in sync. [Bootstrapping a New Package](#bootstrapping-a-new-package) is the ONE exception, and it publishes a version that holds no code.
|
|
415
385
|
|
|
416
386
|
---
|
|
417
387
|
|
|
@@ -422,6 +392,6 @@ The project does not include application runtime monitoring (no Sentry, Datadog,
|
|
|
422
392
|
Post-release health checks:
|
|
423
393
|
|
|
424
394
|
- **npm package availability** — verify new versions appear on `https://www.npmjs.com/package/@xmachines/<pkg>` after the pipeline completes.
|
|
425
|
-
- **GitLab pipeline status** — monitor the `semantic-release` job
|
|
395
|
+
- **GitLab pipeline status** — monitor the `semantic-release` job of the train, then the `publish-release` job of its tag.
|
|
426
396
|
- **GitLab Releases page** — confirm the release tag and tarball assets appear at `https://gitlab.com/xmachin-es/xmachines-js/-/releases`.
|
|
427
|
-
- **`packages/docs/api/` commit** — confirm the
|
|
397
|
+
- **`packages/docs/api/` commit** — confirm the release commit of `docs` updated the API docs on the target branch.
|
|
@@ -12,6 +12,7 @@ This guide covers everything you need to set up a local development environment,
|
|
|
12
12
|
- [Code Style](#code-style)
|
|
13
13
|
- [Writing Style](#writing-style-asd-ste100)
|
|
14
14
|
- [Link a Package That You Name](#link-a-package-that-you-name)
|
|
15
|
+
- [Code Examples in Documents](#code-examples-in-documents)
|
|
15
16
|
- [Branch Conventions](#branch-conventions)
|
|
16
17
|
- [PR Process](#pr-process)
|
|
17
18
|
|
|
@@ -88,8 +89,8 @@ packages/
|
|
|
88
89
|
├── play-pattern/ # The route pattern language: one parse, and the path it builds back
|
|
89
90
|
├── play-url/ # The URL layer: the URLPattern API, a base path, framework params
|
|
90
91
|
├── play-actor/ # The actor contract (PlayActor). It names no engine
|
|
91
|
-
├── play-view/ # The shared view half (Viewable, PlaySpec, the view
|
|
92
|
-
├── play-xstate/ # XState
|
|
92
|
+
├── play-view/ # The shared view half (Viewable, PlaySpec, the view session)
|
|
93
|
+
├── play-xstate/ # XState v6 adapter (definePlayer, PlayerActor)
|
|
93
94
|
├── play-router/ # Route extraction and RouterBridgeBase
|
|
94
95
|
├── play-dom/ # Vanilla DOM renderer
|
|
95
96
|
├── play-dom-router/ # DOM router adapter
|
|
@@ -142,6 +143,7 @@ All commands are run from the **repository root** unless otherwise noted.
|
|
|
142
143
|
| `pnpm run test:browser:dist` | Run Playwright browser tests on the build output |
|
|
143
144
|
| `pnpm run test:coverage` | Run tests with V8 coverage reporting |
|
|
144
145
|
| `pnpm run test:browser:coverage` | Run browser tests with coverage reporting |
|
|
146
|
+
| `pnpm run test:docs:examples` | Compile and run the code examples of the documentation |
|
|
145
147
|
| `pnpm run test:build` | Complete type-check of every package and its tests (`tsconfig.test.json`) |
|
|
146
148
|
| `pnpm run lint` | Lint all packages with oxlint |
|
|
147
149
|
| `pnpm run lint:fix` | Auto-fix lint issues |
|
|
@@ -197,7 +199,7 @@ React 18 and vue-router 4 are supported by intent — nothing known depends on 1
|
|
|
197
199
|
|
|
198
200
|
[`@xmachines/play`](../api/@xmachines/play/README.md) holds `PlayError`, and the documentation sends a consumer to `err instanceof PlayError`. That check answers `false` for an error of the second copy. [`@xmachines/core`](../api/@xmachines/core/README.md) holds `BaseError`, the base of `PlayError`, and `err instanceof BaseError` fails in the same way.
|
|
199
201
|
|
|
200
|
-
A dependency invites that second copy.
|
|
202
|
+
A dependency invites that second copy. The publish resolves a `workspace:*` range to an EXACT version, so two packages of two releases name two versions, and an installer resolves both. A peer moves the choice to the consumer, who brings one copy. The `@xmachines/json-render-*` packages carry the same rule for the same reason.
|
|
201
203
|
|
|
202
204
|
Each of the three needs a `devDependency` beside the peer, because the workspace installs no peer. Without that entry a package resolves the specifier through the hoisting of another package, and it compiles until that other package stops declaring it.
|
|
203
205
|
|
|
@@ -429,7 +431,7 @@ Use `unknown` with type guards instead of `any`. Prefix unused locals/parameters
|
|
|
429
431
|
|
|
430
432
|
1. Always use `.js` extensions in imports, even for TypeScript source files:
|
|
431
433
|
|
|
432
|
-
```typescript
|
|
434
|
+
```typescript fragment
|
|
433
435
|
// ✅ Correct
|
|
434
436
|
import { PlayError } from "./errors.js";
|
|
435
437
|
|
|
@@ -439,7 +441,7 @@ Use `unknown` with type guards instead of `any`. Prefix unused locals/parameters
|
|
|
439
441
|
|
|
440
442
|
2. Use `import type` for type-only imports (required by `verbatimModuleSyntax`):
|
|
441
443
|
|
|
442
|
-
```typescript
|
|
444
|
+
```typescript fragment
|
|
443
445
|
import type { RouteNode, RouteTree } from "../src/types.js";
|
|
444
446
|
```
|
|
445
447
|
|
|
@@ -495,6 +497,29 @@ Three places keep a plain code span:
|
|
|
495
497
|
|
|
496
498
|
---
|
|
497
499
|
|
|
500
|
+
## Code Examples in Documents
|
|
501
|
+
|
|
502
|
+
A reader copies a code example and expects it to work. Two tests therefore read every `ts`, `typescript` and `tsx` block of the hand-written markdown:
|
|
503
|
+
|
|
504
|
+
- `tests/doc-examples/compile.test.ts` compiles each block against the source of the workspace. It writes the block into the package that can resolve its imports, and it uses the `tsconfig.json` of that package.
|
|
505
|
+
- `tests/doc-examples/run.test.ts` runs each complete block in jsdom. A block is complete when it declares no value that the reader supplies, holds no JSX, and loads no package that needs a compiler of Solid, Vue or Svelte, the runtime of SvelteKit, or a test runner such as `vitest`. A type import loads nothing, so it does not count. A run fails on each `console.error` and `console.warn`, unless the block logs on purpose. The page holds the elements `#app`, `#root`, `#loading` and `#crashed`.
|
|
506
|
+
|
|
507
|
+
Give an example of a call its imports, so that it compiles. Use `declare const` only for a value that the reader supplies, such as their machine or a DOM element. Two words after the language change what the tests do:
|
|
508
|
+
|
|
509
|
+
| Fence | Use it for | Compiled | Run |
|
|
510
|
+
| ------------------ | ------------------------------------------------------------------------------ | -------- | --- |
|
|
511
|
+
| ` ```ts ` | An example that a reader can copy | yes | yes |
|
|
512
|
+
| ` ```ts norun ` | An example that compiles, but runs only in a test or in a component | yes | no |
|
|
513
|
+
| ` ```ts fragment ` | A part of a larger file, such as one state of a machine, or a ✅/❌ comparison | no | no |
|
|
514
|
+
|
|
515
|
+
GitHub, GitLab and TypeDoc read the first word of a fence alone, so the second word changes nothing on a rendered page.
|
|
516
|
+
|
|
517
|
+
An example for a reader imports published packages alone. A private workspace package, such as a demo or [`@xmachines/shared`](../api/@xmachines/shared/README.md), fails the check, because a reader cannot install it. The contributor guides and the README of a private package can import one.
|
|
518
|
+
|
|
519
|
+
Check one document with `DOC_EXAMPLES=<part of its path> pnpm vitest run tests/doc-examples/compile.test.ts`, and run its examples with `DOC_EXAMPLES=<part of its path> pnpm vitest run tests/doc-examples/run.test.ts`. `pnpm run test:docs:examples` runs both, for every document. The dist run leaves them out, and CI runs them in the `test:docs:examples` job.
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
498
523
|
## Branch Conventions
|
|
499
524
|
|
|
500
525
|
Use a `<type>/` prefix that matches the conventional commit type for the work being done:
|
|
@@ -517,7 +542,7 @@ Release branches are managed by the project maintainers:
|
|
|
517
542
|
| `alpha` | Pre-release alpha channel |
|
|
518
543
|
| `pre` | Pre-release channel |
|
|
519
544
|
|
|
520
|
-
**Do not** manually version packages or create release branches — semantic-release owns the version, and a release is cut by starting
|
|
545
|
+
**Do not** manually version packages or create release branches — semantic-release owns the version of each train (`core`, `play`, `docs`), and a release is cut by starting the manual CI job of the train.
|
|
521
546
|
|
|
522
547
|
---
|
|
523
548
|
|
|
@@ -551,13 +576,13 @@ This project uses **Conventional Commits** — changelogs and version bumps are
|
|
|
551
576
|
Breaking changes: append `!` after the type (`feat!:`) AND write a `BREAKING CHANGE:`
|
|
552
577
|
footer. The two do different work, and neither one replaces the other:
|
|
553
578
|
|
|
554
|
-
- The `!` decides the BUMP. `release.config.mjs` gives
|
|
555
|
-
`breakingHeaderPattern`, because the angular preset reads `!` not at all: without that
|
|
579
|
+
- The `!` decides the BUMP. `release.config.mjs` gives every semantic-release plugin a
|
|
580
|
+
`breakingHeaderPattern`, at the root of the config, because the angular preset reads `!` not at all: without that
|
|
556
581
|
pattern, `feat!: …` parses with no type, and a release made of nothing but such commits
|
|
557
582
|
is no release.
|
|
558
583
|
- The footer writes the NOTE. The changelog lists a breaking change from the footer alone,
|
|
559
584
|
so a `!` commit with no footer bumps the major and tells a reader nothing about what
|
|
560
|
-
broke. Seven commits shipped that way once, and none of them appears in
|
|
585
|
+
broke. Seven commits shipped that way once, and none of them appears in the changelog.
|
|
561
586
|
|
|
562
587
|
Write the footer as one paragraph that names the old form and the new one:
|
|
563
588
|
|