fix(tui): preserve exit epilogue during scoped shutdown (#31805)

This commit is contained in:
tobwen
2026-06-11 14:22:48 +02:00
committed by GitHub
parent ac9d6523fa
commit bef4ce3525
3 changed files with 77 additions and 9 deletions
+5 -4
View File
@@ -178,7 +178,7 @@ function isVersionGreater(left: string, right: string) {
export const run = Effect.fn("Tui.run")(function* (input: TuiInput) {
const global = yield* Global.Service
const exit = { epilogue: undefined as string | undefined, reason: undefined as unknown }
yield* Effect.scoped(
const result = yield* Effect.scoped(
Effect.gen(function* () {
const renderer = yield* Effect.acquireRelease(
Effect.tryPromise(() =>
@@ -337,13 +337,14 @@ export const run = Effect.fn("Tui.run")(function* (input: TuiInput) {
}, renderer)
})
yield* Deferred.await(shutdown)
return { epilogue: exit.epilogue, reason: exit.reason }
}),
)
yield* Effect.sync(() => {
win32FlushInputBuffer()
if (exit.reason !== undefined)
process.stderr.write((cliErrorMessage(exit.reason) ?? errorFormat(exit.reason)) + "\n")
if (exit.epilogue) process.stdout.write(exit.epilogue + "\n")
if (result.reason !== undefined)
process.stderr.write((cliErrorMessage(result.reason) ?? errorFormat(result.reason)) + "\n")
if (result.epilogue) process.stdout.write(result.epilogue + "\n")
})
})
+3 -4
View File
@@ -1,8 +1,7 @@
import type { CliRenderer } from "@opentui/core"
export function destroyRenderer(renderer: Pick<CliRenderer, "isDestroyed" | "setTerminalTitle" | "destroy">) {
if (!renderer.isDestroyed) {
renderer.setTerminalTitle("")
renderer.destroy()
}
renderer.setTerminalTitle("")
if (renderer.isDestroyed) return
renderer.destroy()
}