generateDiagram method

void generateDiagram({
  1. String outputPath = 'diagram_fsm.md',
})

Generate a FSM state diagram _MermaidStateDiagram. Check on https://mermaid.js.org/intro/ to view the diagram generated. If you are using vscode, you can download the mermaid extension.

State labels use enum member names. Event labels use Logic.name.

Output to mermaid diagram at outputPath.

Implementation

void generateDiagram({String outputPath = 'diagram_fsm.md'}) {
  final figure = _MermaidStateDiagram(outputPath: outputPath);
  final stateIds = {
    for (final (index, state) in _states.indexed)
      state.identifier: 'state$index',
  };
  for (final state in _states) {
    figure.addState(stateIds[state.identifier]!, state.identifier.name);
  }
  figure.addStartState(stateIds[resetState]!);

  for (final state in _states) {
    for (final entry in state.events.entries) {
      figure.addTransitions(
        stateIds[state.identifier]!,
        stateIds[entry.value]!,
        entry.key.name,
      );
    }

    if (state.defaultNextState != state.identifier) {
      figure.addTransitions(
        stateIds[state.identifier]!,
        stateIds[state.defaultNextState]!,
        '(default)',
      );
    }
  }
  figure.writeToFile();
}