import { SetOptionHandler } from "./setHandler.js"; export class CommandExecutor { commandBar; #history = []; #handlers = new Map(); constructor(commandBar) { this.commandBar = commandBar; console.log(this.#handlers); this.addHandler(new SetOptionHandler()); console.log(this.#handlers); } addHandler(handler) { this.#handlers.set(handler.name, handler); } executeCommand(command) { this.appendCommandToHistory(command); const handler = this.#handlerForCommand(command); if (!handler) { throw new Error(`No handler for '${command.verb.valueOf()}' command`); } let result; try { result = handler.execute(command, this.commandBar); } catch (e) { result = null; } if (result !== undefined && !result) { console.error(`Command failed: ${command}`); } } #handlerForCommand(command) { const verb = command.verb.valueOf(); return this.#handlers.get(verb); } // MARK: History get historyLength() { return this.#history.length; } appendCommandToHistory(command) { this.#history.push(command); } commandAtHistoryIndex(index) { return this.#history[index]; } }