@@ -351,6 +351,7 @@ export function interval(period: number): ReadableStream<number> {
351
351
*
352
352
* @category Transformation
353
353
* @param reducer - The reducer function to apply to each chunk
354
+ * @param initialValue - The initial value
354
355
* @returns A TransformStream that emits the final reduced value when the stream closes
355
356
* @example
356
357
* ```ts
@@ -359,20 +360,17 @@ export function interval(period: number): ReadableStream<number> {
359
360
* const [sum] = await toArray(stream); // Gets the single reduced value
360
361
* ```
361
362
*/
362
- export function reduce < T > (
363
- reducer : ( accumulator : T , chunk : T ) => SyncOrAsync < T >
364
- ) : TransformStream < T , T > {
365
- let accumulator : T | undefined
363
+ export function reduce < T , R > (
364
+ reducer : ( accumulator : R , chunk : T ) => SyncOrAsync < R > ,
365
+ initialValue : R
366
+ ) : TransformStream < T , R > {
367
+ let accumulator : R | undefined
366
368
367
- return new TransformStream < T , T > ( {
368
- async transform ( chunk : T , controller : TransformStreamDefaultController < T > ) {
369
- if ( accumulator === undefined ) {
370
- accumulator = chunk
371
- } else {
372
- accumulator = await reducer ( accumulator , chunk )
373
- }
369
+ return new TransformStream < T , R > ( {
370
+ async transform ( chunk ) {
371
+ accumulator = await reducer ( accumulator ?? initialValue , chunk )
374
372
} ,
375
- flush ( controller : TransformStreamDefaultController < T > ) {
373
+ flush ( controller ) {
376
374
if ( accumulator !== undefined ) {
377
375
controller . enqueue ( accumulator )
378
376
}
@@ -400,7 +398,7 @@ export function scan<T, R>(
400
398
) : TransformStream < T , R > {
401
399
let accumulator = initialValue
402
400
return new TransformStream < T , R > ( {
403
- async transform ( chunk : T , controller : TransformStreamDefaultController < R > ) {
401
+ async transform ( chunk , controller ) {
404
402
accumulator = await scanner ( accumulator , chunk )
405
403
controller . enqueue ( accumulator )
406
404
}
0 commit comments