narrow some Message types

This commit is contained in:
Chris Wanstrath 2025-10-02 14:23:09 -07:00
parent fb657c5bb1
commit e384bce2ee
2 changed files with 25 additions and 8 deletions

View File

@ -2,7 +2,7 @@
// Dispatch Messages received via WebSocket // Dispatch Messages received via WebSocket
import { basename } from "path" import { basename } from "path"
import type { Message } from "./shared/types" import type { Message, InputMessage, SaveFileMessage } from "./shared/types"
import { runCommand } from "./shell" import { runCommand } from "./shell"
import { send } from "./websocket" import { send } from "./websocket"
import { setState } from "./state" import { setState } from "./state"
@ -11,10 +11,10 @@ export async function dispatchMessage(ws: any, msg: Message) {
console.log("<- receive", msg) console.log("<- receive", msg)
switch (msg.type) { switch (msg.type) {
case "input": case "input":
await inputMessage(ws, msg); break await inputMessage(ws, msg as InputMessage); break
case "save-file": case "save-file":
await saveFileMessage(ws, msg); break await saveFileMessage(ws, msg as SaveFileMessage); break
case "ui:mode": case "ui:mode":
setState("ui:mode", msg.data); break setState("ui:mode", msg.data); break
@ -24,8 +24,8 @@ export async function dispatchMessage(ws: any, msg: Message) {
} }
} }
async function inputMessage(ws: any, msg: Message) { async function inputMessage(ws: any, msg: InputMessage) {
const result = await runCommand(msg.session || "", msg.id || "", msg.data as string, ws) const result = await runCommand(msg.session, msg.id, msg.data as string, ws)
if (typeof result.output === "object" && "game" in result.output) { if (typeof result.output === "object" && "game" in result.output) {
send(ws, { id: msg.id, type: "game:start", data: result.output.game }) send(ws, { id: msg.id, type: "game:start", data: result.output.game })
@ -34,7 +34,7 @@ async function inputMessage(ws: any, msg: Message) {
} }
} }
async function saveFileMessage(ws: any, msg: Message) { async function saveFileMessage(ws: any, msg: SaveFileMessage) {
if (msg.id && typeof msg.data === "string") { if (msg.id && typeof msg.data === "string") {
await Bun.write(msg.id.replace("..", ""), msg.data, { createPath: true }) await Bun.write(msg.id.replace("..", ""), msg.data, { createPath: true })
send(ws, { type: "output", data: { status: "ok", output: `saved ${basename(msg.id)}` } }) send(ws, { type: "output", data: { status: "ok", output: `saved ${basename(msg.id)}` } })

View File

@ -3,7 +3,10 @@ export type Message = {
id?: string id?: string
type: MessageType type: MessageType
data?: CommandResult | CommandOutput data?: CommandResult | CommandOutput
} | SessionUpdateMessage }
| InputMessage
| SaveFileMessage
| SessionUpdateMessage
export type MessageType = "error" | "input" | "output" | "commands" | "save-file" export type MessageType = "error" | "input" | "output" | "commands" | "save-file"
| "game:start" | "game:start"
@ -21,7 +24,21 @@ export type CommandResult = {
output: CommandOutput output: CommandOutput
} }
type SessionUpdateMessage = { export type InputMessage = {
type: "input"
id: string
session: string
data: CommandResult | CommandOutput
}
export type SaveFileMessage = {
type: "save-file"
id: string
session: string
data: CommandResult | CommandOutput
}
export type SessionUpdateMessage = {
type: "session:update", type: "session:update",
data: Record<string, string> data: Record<string, string>
} }