25 lines
673 B
TypeScript
25 lines
673 B
TypeScript
import { Effect } from "effect"
|
|
|
|
const inputDecoder = new TextDecoder("utf-8", { fatal: true })
|
|
|
|
export function handlePtyInput(
|
|
handler: { onMessage: (message: string | ArrayBuffer) => void },
|
|
message: string | Uint8Array,
|
|
) {
|
|
if (typeof message === "string") {
|
|
handler.onMessage(message)
|
|
return Effect.void
|
|
}
|
|
return Effect.try({
|
|
try: () => inputDecoder.decode(message),
|
|
catch: () => new Error("invalid PTY websocket input"),
|
|
}).pipe(
|
|
Effect.catch(() => Effect.succeed(undefined)),
|
|
Effect.flatMap((decoded) => {
|
|
if (decoded === undefined) return Effect.void
|
|
handler.onMessage(decoded)
|
|
return Effect.void
|
|
}),
|
|
)
|
|
}
|