2026-02-09 22:15:33 -06:00
|
|
|
import {StrRVal} from "./commands/command.js";
|
2026-02-10 00:06:16 -06:00
|
|
|
import {Awaitable} from "../util/types.js";
|
2026-02-09 22:15:33 -06:00
|
|
|
|
|
|
|
|
export const getSubjectDisplay = (sub: StrRVal): string => {
|
|
|
|
|
if ( sub.term === 'string' ) {
|
|
|
|
|
return sub.value
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( sub.term === 'int' ) {
|
|
|
|
|
return String(sub.term)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return JSON.stringify(sub.value, null, '\t') // fixme
|
|
|
|
|
}
|
2026-02-10 00:06:16 -06:00
|
|
|
|
|
|
|
|
export type Display = {
|
|
|
|
|
showSubject(sub: StrRVal): Awaitable<unknown>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class ConsoleDisplay implements Display {
|
|
|
|
|
showSubject(sub: StrRVal) {
|
|
|
|
|
console.log(`\n---------------\n${getSubjectDisplay(sub)}\n---------------\n`)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class NullDisplay implements Display {
|
|
|
|
|
showSubject() {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type Clipboard = {
|
|
|
|
|
read(): Awaitable<string>
|
|
|
|
|
overwrite(sub: string): Awaitable<unknown>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class FakeClipboard {
|
|
|
|
|
private val = ''
|
|
|
|
|
|
|
|
|
|
read() {
|
|
|
|
|
return this.val
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
overwrite(sub: string) {
|
|
|
|
|
this.val = sub
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type OutputManager = {
|
|
|
|
|
display: Display,
|
|
|
|
|
clipboard: Clipboard,
|
|
|
|
|
}
|