YAML ジェネレーター
YAML ジェネレーターは Kotlin ソースファイルをスキャンして stateMachine { } DSL ブロックを検出し、マシン1つにつき1つの .yaml ファイルを生成します。出力はマシンが読み取れる仕様として機能し、人間向けドキュメント、スタブジェネレーターへのインプット、PlantUML ジェネレーターへのインプットとして使用されます。
セットアップ
monakaYamlGenerator {
sources.setFrom(fileTree("src/commonMain/kotlin") { include("**/*.kt") })
yamlOutputDir.set(layout.buildDirectory.dir("monaka-yaml"))
}
実行方法
./gradlew generateMonakaYaml
出力フォーマット
name: Login
initial: Idle
states:
Idle:
Submit:
transition: [Submitting]
Submitting:
onEnter:
task:
key: login
autoCancel: true
dispatch: [LoginSucceeded, LoginFailed]
LoginSucceeded:
transition: [Authenticated]
LoginFailed:
transition: [Idle]
effect: [ShowError]
Authenticated: {}
トップレベルキー
| キー |
説明 |
name |
DSL から派生したマシン名。 |
initial |
初期ステートのシンプル名。 |
states |
ステートパス → ステートノードのマップ。 |
ステートノードキー
| キー |
説明 |
onEnter |
マシンがこのステートに入ったときに呼ばれるフック。 |
onExit |
マシンがこのステートを離れるときに呼ばれるフック。 |
onUpdate |
マシンが同じステート型に新しい値で再入するときに呼ばれるフック。 |
<ActionName> |
ディスパッチされたアクションのハンドラー。 |
ハンドラー/フックボディキー
| キー |
説明 |
transition |
ターゲットステート名のインラインリスト: [Loading]。 |
effect |
エフェクト名のインラインリスト: [ShowError, Navigate]。 |
dispatch |
このハンドラーからディスパッチされるアクション名のインラインリスト。 |
task |
非同期タスクディスクリプタ。 |
reject |
ハンドラーが reject() を呼ぶ場合は true。 |