Spaces:
Running
Running
| import Commander | |
| import Foundation | |
| import Swabble | |
| struct TestHookCommand: ParsableCommand { | |
| (help: "Text to send to hook") var text: String | |
| (name: .long("config"), help: "Path to config JSON") var configPath: String? | |
| static var commandDescription: CommandDescription { | |
| CommandDescription(commandName: "test-hook", abstract: "Invoke the configured hook with text") | |
| } | |
| init() {} | |
| init(parsed: ParsedValues) { | |
| self.init() | |
| if let positional = parsed.positional.first { text = positional } | |
| if let cfg = parsed.options["config"]?.last { configPath = cfg } | |
| } | |
| mutating func run() async throws { | |
| let cfg = try ConfigLoader.load(at: configURL) | |
| let executor = HookExecutor(config: cfg) | |
| try await executor.run(job: HookJob(text: text, timestamp: Date())) | |
| print("hook invoked") | |
| } | |
| private var configURL: URL? { configPath.map { URL(fileURLWithPath: $0) } } | |
| } | |