@@ -15,6 +15,7 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({
1515 init : ( input : { onExit ?: ( ) => Promise < void > } ) => {
1616 const renderer = useRenderer ( )
1717 let message : string | undefined
18+ let task : Promise < void > | undefined
1819 const store = {
1920 set : ( value ?: string ) => {
2021 const prev = message
@@ -29,20 +30,24 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({
2930 get : ( ) => message ,
3031 }
3132 const exit : Exit = Object . assign (
32- async ( reason ?: unknown ) => {
33- // Reset window title before destroying renderer
34- renderer . setTerminalTitle ( "" )
35- renderer . destroy ( )
36- win32FlushInputBuffer ( )
37- if ( reason ) {
38- const formatted = FormatError ( reason ) ?? FormatUnknownError ( reason )
39- if ( formatted ) {
40- process . stderr . write ( formatted + "\n" )
33+ ( reason ?: unknown ) => {
34+ if ( task ) return task
35+ task = ( async ( ) => {
36+ // Reset window title before destroying renderer
37+ renderer . setTerminalTitle ( "" )
38+ renderer . destroy ( )
39+ win32FlushInputBuffer ( )
40+ if ( reason ) {
41+ const formatted = FormatError ( reason ) ?? FormatUnknownError ( reason )
42+ if ( formatted ) {
43+ process . stderr . write ( formatted + "\n" )
44+ }
4145 }
42- }
43- const text = store . get ( )
44- if ( text ) process . stdout . write ( text + "\n" )
45- await input . onExit ?.( )
46+ const text = store . get ( )
47+ if ( text ) process . stdout . write ( text + "\n" )
48+ await input . onExit ?.( )
49+ } ) ( )
50+ return task
4651 } ,
4752 {
4853 message : store ,
0 commit comments