| 1234567891011121314151617181920212223242526272829303132333435 |
- import type { RooTerminalCallbacks, RooTerminalProcessResultPromise } from "./types"
- import { BaseTerminal } from "./BaseTerminal"
- import { ExecaTerminalProcess } from "./ExecaTerminalProcess"
- import { mergePromise } from "./mergePromise"
- export class ExecaTerminal extends BaseTerminal {
- constructor(id: number, cwd: string) {
- super("execa", id, cwd)
- }
- /**
- * Unlike the VSCode terminal, this is never closed.
- */
- public override isClosed(): boolean {
- return false
- }
- public override runCommand(command: string, callbacks: RooTerminalCallbacks): RooTerminalProcessResultPromise {
- const process = new ExecaTerminalProcess(this)
- process.command = command
- this.process = process
- process.on("line", (line) => callbacks.onLine(line, process))
- process.once("completed", (output) => callbacks.onCompleted(output, process))
- process.once("shell_execution_complete", (details) => callbacks.onShellExecutionComplete(details, process))
- const promise = new Promise<void>((resolve, reject) => {
- process.once("continue", () => resolve())
- process.once("error", (error) => reject(error))
- process.run(command)
- })
- return mergePromise(process, promise)
- }
- }
|