( predicate: Predicate<In>, done: Chunk.Chunk<In> )
| 207 | |
| 208 | /** @internal */ |
| 209 | const collectAllWhileReader = <In>( |
| 210 | predicate: Predicate<In>, |
| 211 | done: Chunk.Chunk<In> |
| 212 | ): Channel.Channel<Chunk.Chunk<In>, Chunk.Chunk<In>, never, never, Chunk.Chunk<In>, unknown> => |
| 213 | core.readWith({ |
| 214 | onInput: (input: Chunk.Chunk<In>) => { |
| 215 | const [collected, leftovers] = pipe(Chunk.toReadonlyArray(input), Arr.span(predicate)) |
| 216 | if (leftovers.length === 0) { |
| 217 | return collectAllWhileReader( |
| 218 | predicate, |
| 219 | pipe(done, Chunk.appendAll(Chunk.unsafeFromArray(collected))) |
| 220 | ) |
| 221 | } |
| 222 | return pipe( |
| 223 | core.write(Chunk.unsafeFromArray(leftovers)), |
| 224 | channel.zipRight(core.succeed(pipe(done, Chunk.appendAll(Chunk.unsafeFromArray(collected))))) |
| 225 | ) |
| 226 | }, |
| 227 | onFailure: core.fail, |
| 228 | onDone: () => core.succeed(done) |
| 229 | }) |
| 230 | |
| 231 | /** @internal */ |
| 232 | export const collectAllWhileEffect = <In, E, R>( |
no test coverage detected