@@ -108,20 +108,20 @@ export type FormattedIncrementalResult<
108108 * @internal
109109 */
110110export class IncrementalPublisher {
111- initialResult : {
111+ private _initialResult : {
112112 children : Set < IncrementalDataRecord > ;
113113 isCompleted : boolean ;
114114 } ;
115115
116- _released : Set < IncrementalDataRecord > ;
117- _pending : Set < IncrementalDataRecord > ;
116+ private _released : Set < IncrementalDataRecord > ;
117+ private _pending : Set < IncrementalDataRecord > ;
118118
119119 // these are assigned within the Promise executor called synchronously within the constructor
120- _signalled ! : Promise < unknown > ;
121- _resolve ! : ( ) => void ;
120+ private _signalled ! : Promise < unknown > ;
121+ private _resolve ! : ( ) => void ;
122122
123123 constructor ( ) {
124- this . initialResult = {
124+ this . _initialResult = {
125125 children : new Set ( ) ,
126126 isCompleted : false ,
127127 } ;
@@ -130,47 +130,10 @@ export class IncrementalPublisher {
130130 this . _reset ( ) ;
131131 }
132132
133- _trigger ( ) {
134- this . _resolve ( ) ;
135- this . _reset ( ) ;
136- }
137-
138- _reset ( ) {
139- // promiseWithResolvers uses void only as a generic type parameter
140- // see: https://typescript-eslint.io/rules/no-invalid-void-type/
141- // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
142- const { promise : signalled , resolve } = promiseWithResolvers < void > ( ) ;
143- this . _resolve = resolve ;
144- this . _signalled = signalled ;
145- }
146-
147133 hasNext ( ) : boolean {
148134 return this . _pending . size > 0 ;
149135 }
150136
151- _introduce ( item : IncrementalDataRecord ) {
152- this . _pending . add ( item ) ;
153- }
154-
155- _release ( item : IncrementalDataRecord ) : void {
156- if ( this . _pending . has ( item ) ) {
157- this . _released . add ( item ) ;
158- this . _trigger ( ) ;
159- }
160- }
161-
162- _push ( item : IncrementalDataRecord ) : void {
163- this . _released . add ( item ) ;
164- this . _pending . add ( item ) ;
165- this . _trigger ( ) ;
166- }
167-
168- _delete ( item : IncrementalDataRecord ) {
169- this . _released . delete ( item ) ;
170- this . _pending . delete ( item ) ;
171- this . _trigger ( ) ;
172- }
173-
174137 subscribe ( ) : AsyncGenerator <
175138 SubsequentIncrementalExecutionResult ,
176139 void ,
@@ -247,46 +210,6 @@ export class IncrementalPublisher {
247210 } ;
248211 }
249212
250- _getIncrementalResult (
251- completedRecords : ReadonlySet < IncrementalDataRecord > ,
252- ) : SubsequentIncrementalExecutionResult | undefined {
253- const incrementalResults : Array < IncrementalResult > = [ ] ;
254- let encounteredCompletedAsyncIterator = false ;
255- for ( const incrementalDataRecord of completedRecords ) {
256- const incrementalResult : IncrementalResult = { } ;
257- for ( const child of incrementalDataRecord . children ) {
258- this . _publish ( child ) ;
259- }
260- if ( isStreamItemsRecord ( incrementalDataRecord ) ) {
261- const items = incrementalDataRecord . items ;
262- if ( incrementalDataRecord . isCompletedAsyncIterator ) {
263- // async iterable resolver just finished but there may be pending payloads
264- encounteredCompletedAsyncIterator = true ;
265- continue ;
266- }
267- ( incrementalResult as IncrementalStreamResult ) . items = items ;
268- } else {
269- const data = incrementalDataRecord . data ;
270- ( incrementalResult as IncrementalDeferResult ) . data = data ?? null ;
271- }
272-
273- incrementalResult . path = incrementalDataRecord . path ;
274- if ( incrementalDataRecord . label != null ) {
275- incrementalResult . label = incrementalDataRecord . label ;
276- }
277- if ( incrementalDataRecord . errors . length > 0 ) {
278- incrementalResult . errors = incrementalDataRecord . errors ;
279- }
280- incrementalResults . push ( incrementalResult ) ;
281- }
282-
283- return incrementalResults . length
284- ? { incremental : incrementalResults , hasNext : this . hasNext ( ) }
285- : encounteredCompletedAsyncIterator && ! this . hasNext ( )
286- ? { hasNext : false }
287- : undefined ;
288- }
289-
290213 prepareNewDeferredFragmentRecord ( opts : {
291214 label : string | undefined ;
292215 path : Path | undefined ;
@@ -298,7 +221,7 @@ export class IncrementalPublisher {
298221 if ( parentContext ) {
299222 parentContext . children . add ( deferredFragmentRecord ) ;
300223 } else {
301- this . initialResult . children . add ( deferredFragmentRecord ) ;
224+ this . _initialResult . children . add ( deferredFragmentRecord ) ;
302225 }
303226
304227 return deferredFragmentRecord ;
@@ -316,7 +239,7 @@ export class IncrementalPublisher {
316239 if ( parentContext ) {
317240 parentContext . children . add ( streamItemsRecord ) ;
318241 } else {
319- this . initialResult . children . add ( streamItemsRecord ) ;
242+ this . _initialResult . children . add ( streamItemsRecord ) ;
320243 }
321244
322245 return streamItemsRecord ;
@@ -352,19 +275,11 @@ export class IncrementalPublisher {
352275 }
353276
354277 publishInitial ( ) {
355- for ( const child of this . initialResult . children ) {
278+ for ( const child of this . _initialResult . children ) {
356279 this . _publish ( child ) ;
357280 }
358281 }
359282
360- _publish ( incrementalDataRecord : IncrementalDataRecord ) {
361- if ( incrementalDataRecord . isCompleted ) {
362- this . _push ( incrementalDataRecord ) ;
363- } else {
364- this . _introduce ( incrementalDataRecord ) ;
365- }
366- }
367-
368283 filter (
369284 nullPath : Path ,
370285 erroringIncrementalDataRecord : IncrementalDataRecord | undefined ,
@@ -375,7 +290,7 @@ export class IncrementalPublisher {
375290
376291 const children =
377292 erroringIncrementalDataRecord === undefined
378- ? this . initialResult . children
293+ ? this . _initialResult . children
379294 : erroringIncrementalDataRecord . children ;
380295
381296 for ( const child of this . _getDescendants ( children ) ) {
@@ -386,7 +301,7 @@ export class IncrementalPublisher {
386301 this . _delete ( child ) ;
387302 const parent =
388303 child . parentContext === undefined
389- ? this . initialResult
304+ ? this . _initialResult
390305 : child . parentContext ;
391306 parent . children . delete ( child ) ;
392307
@@ -404,7 +319,92 @@ export class IncrementalPublisher {
404319 } ) ;
405320 }
406321
407- _getDescendants (
322+ private _trigger ( ) {
323+ this . _resolve ( ) ;
324+ this . _reset ( ) ;
325+ }
326+
327+ private _reset ( ) {
328+ // promiseWithResolvers uses void only as a generic type parameter
329+ // see: https://typescript-eslint.io/rules/no-invalid-void-type/
330+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
331+ const { promise : signalled , resolve } = promiseWithResolvers < void > ( ) ;
332+ this . _resolve = resolve ;
333+ this . _signalled = signalled ;
334+ }
335+
336+ private _introduce ( item : IncrementalDataRecord ) {
337+ this . _pending . add ( item ) ;
338+ }
339+
340+ private _release ( item : IncrementalDataRecord ) : void {
341+ if ( this . _pending . has ( item ) ) {
342+ this . _released . add ( item ) ;
343+ this . _trigger ( ) ;
344+ }
345+ }
346+
347+ private _push ( item : IncrementalDataRecord ) : void {
348+ this . _released . add ( item ) ;
349+ this . _pending . add ( item ) ;
350+ this . _trigger ( ) ;
351+ }
352+
353+ private _delete ( item : IncrementalDataRecord ) {
354+ this . _released . delete ( item ) ;
355+ this . _pending . delete ( item ) ;
356+ this . _trigger ( ) ;
357+ }
358+
359+ private _getIncrementalResult (
360+ completedRecords : ReadonlySet < IncrementalDataRecord > ,
361+ ) : SubsequentIncrementalExecutionResult | undefined {
362+ const incrementalResults : Array < IncrementalResult > = [ ] ;
363+ let encounteredCompletedAsyncIterator = false ;
364+ for ( const incrementalDataRecord of completedRecords ) {
365+ const incrementalResult : IncrementalResult = { } ;
366+ for ( const child of incrementalDataRecord . children ) {
367+ this . _publish ( child ) ;
368+ }
369+ if ( isStreamItemsRecord ( incrementalDataRecord ) ) {
370+ const items = incrementalDataRecord . items ;
371+ if ( incrementalDataRecord . isCompletedAsyncIterator ) {
372+ // async iterable resolver just finished but there may be pending payloads
373+ encounteredCompletedAsyncIterator = true ;
374+ continue ;
375+ }
376+ ( incrementalResult as IncrementalStreamResult ) . items = items ;
377+ } else {
378+ const data = incrementalDataRecord . data ;
379+ ( incrementalResult as IncrementalDeferResult ) . data = data ?? null ;
380+ }
381+
382+ incrementalResult . path = incrementalDataRecord . path ;
383+ if ( incrementalDataRecord . label != null ) {
384+ incrementalResult . label = incrementalDataRecord . label ;
385+ }
386+ if ( incrementalDataRecord . errors . length > 0 ) {
387+ incrementalResult . errors = incrementalDataRecord . errors ;
388+ }
389+ incrementalResults . push ( incrementalResult ) ;
390+ }
391+
392+ return incrementalResults . length
393+ ? { incremental : incrementalResults , hasNext : this . hasNext ( ) }
394+ : encounteredCompletedAsyncIterator && ! this . hasNext ( )
395+ ? { hasNext : false }
396+ : undefined ;
397+ }
398+
399+ private _publish ( incrementalDataRecord : IncrementalDataRecord ) {
400+ if ( incrementalDataRecord . isCompleted ) {
401+ this . _push ( incrementalDataRecord ) ;
402+ } else {
403+ this . _introduce ( incrementalDataRecord ) ;
404+ }
405+ }
406+
407+ private _getDescendants (
408408 children : ReadonlySet < IncrementalDataRecord > ,
409409 descendants = new Set < IncrementalDataRecord > ( ) ,
410410 ) : ReadonlySet < IncrementalDataRecord > {
@@ -415,7 +415,7 @@ export class IncrementalPublisher {
415415 return descendants ;
416416 }
417417
418- _matchesPath (
418+ private _matchesPath (
419419 testPath : Array < string | number > ,
420420 basePath : Array < string | number > ,
421421 ) : boolean {
0 commit comments