Before: ```js import { start } from "yieldmachine"; function TrafficLights() { function* Red() { yield on("timer", Green); } function* Green() { yield on("timer", Yellow); } function* Yellow() { yield on("timer", Red); } return Red; } const m = start(TrafficLights); m.current; // { state: "Red", count: 0 } m.next("timer"); m.current; // { state: "Green", count: 1 } m.next("timer"); m.current; // { state: "Yellow", count: 2 } ``` After compiles to: ```js function* startTrafficLights() { let count = 0; let state = "Red"; return { get current() { return Object.freeze({ count, state }); } next(event) { if (event === "timer") { count++; if (state === "Red") { state = "Green"; } else if (state === "Green") { state = "Yellow"; } else if (state === "Yellow") { state = "Red"; } } return { value: this.current, done: false }; }, }; } const m = startTrafficLights(); m.current; // { state: "Red", count: 0 } m.next("timer"); m.current; // { state: "Green", count: 1 } m.next("timer"); m.current; // { state: "Yellow", count: 2 } ```
Activity