guard tui exit (#16640)

This commit is contained in:
Sebastian
2026-03-08 23:14:41 +01:00
committed by GitHub
parent e51ed460a6
commit 49a3a9fe36
2 changed files with 18 additions and 15 deletions
@@ -111,7 +111,6 @@ export function tui(input: {
fetch?: typeof fetch fetch?: typeof fetch
headers?: RequestInit["headers"] headers?: RequestInit["headers"]
events?: EventSource events?: EventSource
onExit?: () => Promise<void>
}) { }) {
// promise to prevent immediate exit // promise to prevent immediate exit
return new Promise<void>(async (resolve) => { return new Promise<void>(async (resolve) => {
@@ -126,7 +125,6 @@ export function tui(input: {
const onExit = async () => { const onExit = async () => {
unguard?.() unguard?.()
await input.onExit?.()
resolve() resolve()
} }
@@ -15,6 +15,7 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({
init: (input: { onExit?: () => Promise<void> }) => { init: (input: { onExit?: () => Promise<void> }) => {
const renderer = useRenderer() const renderer = useRenderer()
let message: string | undefined let message: string | undefined
let task: Promise<void> | undefined
const store = { const store = {
set: (value?: string) => { set: (value?: string) => {
const prev = message const prev = message
@@ -29,7 +30,9 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({
get: () => message, get: () => message,
} }
const exit: Exit = Object.assign( const exit: Exit = Object.assign(
async (reason?: unknown) => { (reason?: unknown) => {
if (task) return task
task = (async () => {
// Reset window title before destroying renderer // Reset window title before destroying renderer
renderer.setTerminalTitle("") renderer.setTerminalTitle("")
renderer.destroy() renderer.destroy()
@@ -43,6 +46,8 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({
const text = store.get() const text = store.get()
if (text) process.stdout.write(text + "\n") if (text) process.stdout.write(text + "\n")
await input.onExit?.() await input.onExit?.()
})()
return task
}, },
{ {
message: store, message: store,