(
leftovers: Chunk.Chunk<Chunk.Chunk<A | A2>>,
b: B,
c: Option.Option<C>
)
| 306 | ) |
| 307 | ) |
| 308 | const handleSide = ( |
| 309 | leftovers: Chunk.Chunk<Chunk.Chunk<A | A2>>, |
| 310 | b: B, |
| 311 | c: Option.Option<C> |
| 312 | ): Channel.Channel<Chunk.Chunk<Either.Either<B, C>>, unknown, E | E2, unknown, unknown, unknown, R2 | R3> => |
| 313 | pipe( |
| 314 | Ref.set(sinkLeftovers, Chunk.flatten(leftovers)), |
| 315 | Effect.zipRight( |
| 316 | Effect.map(Ref.get(sinkEndReason), (reason) => { |
| 317 | switch (reason._tag) { |
| 318 | case SinkEndReason.OP_SCHEDULE_END: { |
| 319 | return pipe( |
| 320 | Effect.all([ |
| 321 | Ref.get(consumed), |
| 322 | forkSink, |
| 323 | pipe(timeout(Option.some(b)), Effect.forkIn(scope)) |
| 324 | ]), |
| 325 | Effect.map(([wasConsumed, sinkFiber, scheduleFiber]) => { |
| 326 | const toWrite = pipe( |
| 327 | c, |
| 328 | Option.match({ |
| 329 | onNone: (): Chunk.Chunk<Either.Either<B, C>> => Chunk.of(Either.right(b)), |
| 330 | onSome: (c): Chunk.Chunk<Either.Either<B, C>> => |
| 331 | Chunk.make(Either.right(b), Either.left(c)) |
| 332 | }) |
| 333 | ) |
| 334 | if (wasConsumed) { |
| 335 | return pipe( |
| 336 | core.write(toWrite), |
| 337 | core.flatMap(() => scheduledAggregator(sinkFiber, scheduleFiber, scope)) |
| 338 | ) |
| 339 | } |
| 340 | return scheduledAggregator(sinkFiber, scheduleFiber, scope) |
| 341 | }), |
| 342 | channel.unwrap |
| 343 | ) |
| 344 | } |
| 345 | case SinkEndReason.OP_UPSTREAM_END: { |
| 346 | return pipe( |
| 347 | Ref.get(consumed), |
| 348 | Effect.map((wasConsumed) => |
| 349 | wasConsumed ? |
| 350 | core.write(Chunk.of<Either.Either<B, C>>(Either.right(b))) : |
| 351 | core.void |
| 352 | ), |
| 353 | channel.unwrap |
| 354 | ) |
| 355 | } |
| 356 | } |
| 357 | }) |
| 358 | ), |
| 359 | channel.unwrap |
| 360 | ) |
| 361 | return channel.unwrap( |
| 362 | Effect.raceWith(Fiber.join(sinkFiber), Fiber.join(scheduleFiber), { |
| 363 | onSelfDone: (sinkExit, _) => |
no test coverage detected
searching dependent graphs…