- handle final state
- handle effects (guards)
- handle update context action
- handle effects (actions)
- handle hooks
- handle picking a transition that matches a guard
- add snapshot support
- add rollback
- handle command in effects actions
- handle command in effects guards
- add history of states and operations
- handle checking if an command can be executed (with or without guards)
- list all commands that can be accepted
- (next) handle nested machines - probably it will be better to have "machine system" that will intertwine two machines together
- (next) store more information on history (like context changes and actors invocation)
- (next) add system for emitting internal events a user can subscribe to
- [?] SCXML support
- [?] Unit testing helper
- document state machine and runtime API using comments
- README
- how to install
- quick start
- transitions, any transition
- setTypes: context, commands
- effects/actions
- effects/guards
- effects/any state/any transition
- snapshots
- actors
- development notes
- add license clarification
- test proper context merging in assign actions
- test guards, actions and actors throwing
- test history
- test
canAcceptCommand
- test
canExecuteCommand
- [?] add more tests to effects (guards)
- [?] add more tests to actions
- [?] add more tests to hooks
- [?] test rollback on different things than actions (however that might be not necessary, because everything necessary in start/execute is wrapped in transaction)
- make
.run
input more strict so it cannot contain not-expected fields, context fields and actors (currently it requires what is required, but accepts other things as well)
- validate if provided snapshot matches state machine (state mostly, because we can't check context)
- validate if there is only one effect per transition
- validate if an effect configuration matches available transitions
- [?] detect loop of automated transitions
- [?] validate if final state doesn't have automated transition from it (execution stops there, but validation might help debugging)
- add descriptive errors
- unify
canAcceptCommand
,canExecuteCommand
andexecute
checks - partial .setTypes
- change architecture: create transition planner (generator) which results will be passed to executor which uses action as generator etc (everything will happen step by step)
- CI
- test pipeline
- release and versioning pipeline
- freeze context before passing it down to the guards, actions, etc
- unify hooks and effects into single thing
- work on proper exports from index file, and proper packaging