Skip to content

Latest commit

 

History

History
75 lines (63 loc) · 2.83 KB

TODO.md

File metadata and controls

75 lines (63 loc) · 2.83 KB

TODO

Functionality

  • 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

Documentation

  • 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

Tests

  • 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)

Typing

  • 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)

Validation

  • 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)

Chores

  • add descriptive errors
  • unify canAcceptCommand, canExecuteCommand and execute 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