@@ -6,6 +6,7 @@ import {RenderInstance, type Render, type BaseRender} from './Render.js'
66import { type RenderStreamContextValue } from './context.js'
77import { RenderStreamContextProvider } from './context.js'
88import { disableActWarnings } from './disableActWarnings.js'
9+ import { syncQueries , type Queries , type SyncQueries } from './syncQueries.js'
910
1011export type ValidSnapshot =
1112 // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
@@ -29,7 +30,10 @@ interface MergeSnapshot<Snapshot> {
2930 ) : void
3031}
3132
32- export interface RenderStream < Snapshot extends ValidSnapshot > {
33+ export interface RenderStream <
34+ Snapshot extends ValidSnapshot ,
35+ Q extends Queries = SyncQueries ,
36+ > {
3337 // Allows for partial updating of the snapshot by shallow merging the results
3438 mergeSnapshot : MergeSnapshot < Snapshot >
3539 // Performs a full replacement of the snapshot
@@ -39,21 +43,22 @@ export interface RenderStream<Snapshot extends ValidSnapshot> {
3943 * Errors thrown during component render will be captured here, too.
4044 */
4145 renders : Array <
42- Render < Snapshot > | { phase : 'snapshotError' ; count : number ; error : unknown }
46+ | Render < Snapshot , Q >
47+ | { phase : 'snapshotError' ; count : number ; error : unknown }
4348 >
4449 /**
4550 * Peeks the next render from the current iterator position, without advancing the iterator.
4651 * If no render has happened yet, it will wait for the next render to happen.
4752 * @throws {WaitForRenderTimeoutError } if no render happens within the timeout
4853 */
49- peekRender : ( options ?: NextRenderOptions ) => Promise < Render < Snapshot > >
54+ peekRender : ( options ?: NextRenderOptions ) => Promise < Render < Snapshot , Q > >
5055 /**
5156 * Iterates to the next render and returns it.
5257 * If no render has happened yet, it will wait for the next render to happen.
5358 * @throws {WaitForRenderTimeoutError } if no render happens within the timeout
5459 */
5560 takeRender : Assertable &
56- ( ( options ?: NextRenderOptions ) => Promise < Render < Snapshot > > )
61+ ( ( options ?: NextRenderOptions ) => Promise < Render < Snapshot , Q > > )
5762 /**
5863 * Returns the total number of renders.
5964 */
@@ -62,20 +67,27 @@ export interface RenderStream<Snapshot extends ValidSnapshot> {
6267 * Returns the current render.
6368 * @throws {Error } if no render has happened yet
6469 */
65- getCurrentRender : ( ) => Render < Snapshot >
70+ getCurrentRender : ( ) => Render < Snapshot , Q >
6671 /**
6772 * Waits for the next render to happen.
6873 * Does not advance the render iterator.
6974 */
70- waitForNextRender : ( options ?: NextRenderOptions ) => Promise < Render < Snapshot > >
75+ waitForNextRender : (
76+ options ?: NextRenderOptions ,
77+ ) => Promise < Render < Snapshot , Q > >
7178}
7279
73- export interface RenderStreamWithRenderFn < Snapshot extends ValidSnapshot >
74- extends RenderStream < Snapshot > {
80+ export interface RenderStreamWithRenderFn <
81+ Snapshot extends ValidSnapshot ,
82+ Q extends Queries = SyncQueries ,
83+ > extends RenderStream < Snapshot , Q > {
7584 render : typeof baseRender
7685}
7786
78- export type RenderStreamOptions < Snapshot extends ValidSnapshot > = {
87+ export type RenderStreamOptions <
88+ Snapshot extends ValidSnapshot ,
89+ Q extends Queries = SyncQueries ,
90+ > = {
7991 onRender ?: (
8092 info : BaseRender & {
8193 snapshot : Snapshot
@@ -90,6 +102,7 @@ export type RenderStreamOptions<Snapshot extends ValidSnapshot> = {
90102 * `useTrackRenders` occured.
91103 */
92104 skipNonTrackingRenders ?: boolean
105+ queries ?: Q
93106}
94107
95108export class WaitForRenderTimeoutError extends Error {
@@ -100,19 +113,26 @@ export class WaitForRenderTimeoutError extends Error {
100113 }
101114}
102115
103- export function createRenderStream < Snapshot extends ValidSnapshot = void > ( {
116+ export function createRenderStream <
117+ Snapshot extends ValidSnapshot = void ,
118+ Q extends Queries = SyncQueries ,
119+ > ( {
104120 onRender,
105121 snapshotDOM = false ,
106122 initialSnapshot,
107123 skipNonTrackingRenders,
108- } : RenderStreamOptions < Snapshot > = { } ) : RenderStreamWithRenderFn < Snapshot > {
124+ queries = syncQueries as any as Q ,
125+ } : RenderStreamOptions < Snapshot , Q > = { } ) : RenderStreamWithRenderFn <
126+ Snapshot ,
127+ Q
128+ > {
109129 // creating the object first and then assigning in all the properties
110130 // allows keeping the object instance for reference while the members are
111131 // created, which is important for the `markAssertable` function
112- const stream = { } as any as RenderStreamWithRenderFn < Snapshot >
132+ const stream = { } as any as RenderStreamWithRenderFn < Snapshot , Q >
113133
114- let nextRender : Promise < Render < Snapshot > > | undefined ,
115- resolveNextRender : ( ( render : Render < Snapshot > ) => void ) | undefined ,
134+ let nextRender : Promise < Render < Snapshot , Q > > | undefined ,
135+ resolveNextRender : ( ( render : Render < Snapshot , Q > ) => void ) | undefined ,
116136 rejectNextRender : ( ( error : unknown ) => void ) | undefined
117137 function resetNextRender ( ) {
118138 nextRender = undefined
@@ -199,6 +219,7 @@ export function createRenderStream<Snapshot extends ValidSnapshot = void>({
199219 snapshot ,
200220 domSnapshot ,
201221 renderStreamContext . renderedComponents ,
222+ queries ,
202223 )
203224 renderStreamContext . renderedComponents = [ ]
204225 stream . renders . push ( render )
@@ -247,7 +268,8 @@ export function createRenderStream<Snapshot extends ValidSnapshot = void>({
247268 replaceSnapshot,
248269 mergeSnapshot,
249270 renders : new Array <
250- Render < Snapshot > | { phase : 'snapshotError' ; count : number ; error : unknown }
271+ | Render < Snapshot , Q >
272+ | { phase : 'snapshotError' ; count : number ; error : unknown }
251273 > ( ) ,
252274 totalRenderCount ( ) {
253275 return stream . renders . length
@@ -316,12 +338,12 @@ export function createRenderStream<Snapshot extends ValidSnapshot = void>({
316338 } ,
317339 waitForNextRender ( { timeout = 1000 } : NextRenderOptions = { } ) {
318340 if ( ! nextRender ) {
319- nextRender = Promise . race < Render < Snapshot > > ( [
320- new Promise < Render < Snapshot > > ( ( resolve , reject ) => {
341+ nextRender = Promise . race < Render < Snapshot , Q > > ( [
342+ new Promise < Render < Snapshot , Q > > ( ( resolve , reject ) => {
321343 resolveNextRender = resolve
322344 rejectNextRender = reject
323345 } ) ,
324- new Promise < Render < Snapshot > > ( ( _ , reject ) =>
346+ new Promise < Render < Snapshot , Q > > ( ( _ , reject ) =>
325347 setTimeout ( ( ) => {
326348 const error = new WaitForRenderTimeoutError ( )
327349 Error . captureStackTrace ( error , stream . waitForNextRender )
0 commit comments