UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

52 lines 1.63 kB
import { Terminal } from "xterm"; import { FitAddon } from "xterm-addon-fit"; import "xterm/css/xterm.css"; import { WebContainer } from "@webcontainer/api"; import mountDumpScript from "./mountDumpScript"; import { BACKGROUND_COLOR } from "../../globals"; export const loadWebContainer = async (el, handle) => { const fitAddon = new FitAddon(); const terminal = new Terminal({ convertEol: true, fontSize: 11, theme: { background: BACKGROUND_COLOR } }); terminal.loadAddon(fitAddon); terminal.open(el); fitAddon.fit(); const webcontainerInstance = await WebContainer.boot(); await mountDumpScript(webcontainerInstance); const shellProcess = await webcontainerInstance.spawn("jsh", { terminal: { cols: terminal.cols, rows: terminal.rows } }); shellProcess.output.pipeTo(new WritableStream({ write(data) { terminal.write(data); } })); const input = shellProcess.input.getWriter(); terminal.onData((data) => { input.write(data); }); const handleResize = () => { fitAddon.fit(); shellProcess.resize({ cols: terminal.cols, rows: terminal.rows }); }; window.addEventListener("resize", handleResize); handle.then(() => { fitAddon.dispose(); terminal.dispose(); webcontainerInstance.teardown(); shellProcess.kill(); input.abort(); input.close(); window.removeEventListener("resize", handleResize); }); }; //# sourceMappingURL=loadWebContainer.js.map