1- import  { RenderHookOptions }  from  '@testing-library/react' 
1+ import  { Queries ,   RenderHookOptions }  from  '@testing-library/react' 
22import  React  from  'rehackt' 
3- import  { createRenderStream }  from  './renderStream/createRenderStream.js' 
3+ import  { 
4+   createRenderStream , 
5+   RenderStream , 
6+ }  from  './renderStream/createRenderStream.js' 
47import  { type  NextRenderOptions }  from  './renderStream/createRenderStream.js' 
58import  { Render }  from  './renderStream/Render.js' 
69import  { Assertable ,  assertableSymbol ,  markAssertable }  from  './assertable.js' 
10+ import  { SyncQueries }  from  './renderStream/syncQueries.js' 
711
812export  interface  SnapshotStream < Snapshot ,  Props >  extends  Assertable  { 
913  /** 
@@ -49,7 +53,11 @@ export function renderHookToSnapshotStream<ReturnValue, Props>(
4953  renderCallback : ( props : Props )  =>  ReturnValue , 
5054  { initialProps,  ...renderOptions } : RenderHookOptions < Props >  =  { } , 
5155) : SnapshotStream < ReturnValue ,  Props >  { 
52-   const  { render,  ...stream }  =  createRenderStream < { value : ReturnValue } ,  never > ( ) 
56+   const  { 
57+     render, 
58+     renderAsync : _ , 
59+     ...stream 
60+   }  =  createRenderStream < { value : ReturnValue } ,  never > ( ) 
5361
5462  const  HookComponent : React . FC < { arg : Props } >  =  props  =>  { 
5563    stream . replaceSnapshot ( { value : renderCallback ( props . arg ) } ) 
@@ -65,6 +73,47 @@ export function renderHookToSnapshotStream<ReturnValue, Props>(
6573    return  baseRerender ( < HookComponent  arg = { rerenderCallbackProps }  /> ) 
6674  } 
6775
76+   return  { 
77+     ...renderStreamToSnapshotStream ( stream ) , 
78+     rerender, 
79+     unmount, 
80+   } 
81+ } 
82+ 
83+ export  async  function  renderHookToAsyncSnapshotStream < ReturnValue ,  Props > ( 
84+   renderCallback : ( props : Props )  =>  ReturnValue , 
85+   { initialProps,  ...renderOptions } : RenderHookOptions < Props >  =  { } , 
86+ ) : Promise < SnapshotStream < ReturnValue ,  Props > >  { 
87+   const  { 
88+     renderAsync, 
89+     render : _ , 
90+     ...stream 
91+   }  =  createRenderStream < { value : ReturnValue } ,  never > ( ) 
92+ 
93+   const  HookComponent : React . FC < { arg : Props } >  =  props  =>  { 
94+     stream . replaceSnapshot ( { value : renderCallback ( props . arg ) } ) 
95+     return  null 
96+   } 
97+ 
98+   const  { rerender : baseRerender ,  unmount}  =  await  renderAsync ( 
99+     < HookComponent  arg = { initialProps ! }  /> , 
100+     renderOptions , 
101+   ) 
102+ 
103+   function  rerender ( rerenderCallbackProps : Props )  { 
104+     return  baseRerender ( < HookComponent  arg = { rerenderCallbackProps }  /> ) 
105+   } 
106+ 
107+   return  { 
108+     ...renderStreamToSnapshotStream ( stream ) , 
109+     rerender, 
110+     unmount, 
111+   } 
112+ } 
113+ 
114+ function  renderStreamToSnapshotStream < Snapshot > ( 
115+   stream : RenderStream < { value : Snapshot } ,  never > , 
116+ ) : Omit < SnapshotStream < Snapshot ,  any > ,  'rerender'  |  'unmount' >  { 
68117  return  { 
69118    [ assertableSymbol ] : stream , 
70119    renders : stream . renders , 
@@ -81,7 +130,5 @@ export function renderHookToSnapshotStream<ReturnValue, Props>(
81130    async  waitForNextSnapshot ( options )  { 
82131      return  ( await  stream . waitForNextRender ( options ) ) . snapshot . value 
83132    } , 
84-     rerender, 
85-     unmount, 
86133  } 
87134} 
0 commit comments