Files
str/src/index.ts

33 lines
975 B
TypeScript
Raw Normal View History

2025-11-10 23:54:20 -06:00
import {log} from './log.js'
import {Lifecycle} from './util/lifecycle.js'
import {Input} from './vm/input.js'
import {Lexer} from "./vm/lexer.js";
import {Parser} from "./vm/parser.js";
import {commands} from "./vm/commands/index.js";
import {Executor} from "./vm/vm.js";
2026-02-21 19:20:22 -06:00
import {ConsoleDisplay, OutputManager, WlClipboard} from "./vm/output.js";
2025-11-10 23:54:20 -06:00
const lifecycle = new Lifecycle()
const input = new Input()
input.adoptLifecycle(lifecycle)
input.subscribe(line => log.verbose('input', { line }))
const lexer = new Lexer(input)
lexer.subscribe(token => log.verbose('token', token))
const parser = new Parser(commands, lexer)
2025-11-10 23:54:20 -06:00
parser.subscribe(exec => log.verbose('exec', exec))
const output: OutputManager = {
display: new ConsoleDisplay,
2026-02-21 19:20:22 -06:00
clipboard: new WlClipboard,
}
2026-02-22 16:43:47 -06:00
const exec = new Executor(output, parser, input)
exec.adoptLifecycle(lifecycle)
exec.subscribe(state => state.outputSubject())
2025-11-10 23:54:20 -06:00
input.setupPrompt()
process.on('SIGINT', () => lifecycle.close())