( written: boolean, leftovers: Ref.Ref<Chunk.Chunk<A>>, f: Predicate<A> )
| 1798 | |
| 1799 | /** @internal */ |
| 1800 | const splitWhereSplitter = <A, E>( |
| 1801 | written: boolean, |
| 1802 | leftovers: Ref.Ref<Chunk.Chunk<A>>, |
| 1803 | f: Predicate<A> |
| 1804 | ): Channel.Channel<Chunk.Chunk<A>, Chunk.Chunk<A>, E, never, unknown, unknown> => |
| 1805 | core.readWithCause({ |
| 1806 | onInput: (input) => { |
| 1807 | if (Chunk.isEmpty(input)) { |
| 1808 | return splitWhereSplitter(written, leftovers, f) |
| 1809 | } |
| 1810 | if (written) { |
| 1811 | const index = indexWhere(input, f) |
| 1812 | if (index === -1) { |
| 1813 | return channel.zipRight( |
| 1814 | core.write(input), |
| 1815 | splitWhereSplitter<A, E>(true, leftovers, f) |
| 1816 | ) |
| 1817 | } |
| 1818 | const [left, right] = Chunk.splitAt(input, index) |
| 1819 | return channel.zipRight( |
| 1820 | core.write(left), |
| 1821 | core.fromEffect(Ref.set(leftovers, right)) |
| 1822 | ) |
| 1823 | } |
| 1824 | const index = indexWhere(input, f, 1) |
| 1825 | if (index === -1) { |
| 1826 | return channel.zipRight( |
| 1827 | core.write(input), |
| 1828 | splitWhereSplitter<A, E>(true, leftovers, f) |
| 1829 | ) |
| 1830 | } |
| 1831 | const [left, right] = pipe(input, Chunk.splitAt(Math.max(index, 1))) |
| 1832 | return channel.zipRight(core.write(left), core.fromEffect(Ref.set(leftovers, right))) |
| 1833 | }, |
| 1834 | onFailure: core.failCause, |
| 1835 | onDone: core.succeed |
| 1836 | }) |
| 1837 | |
| 1838 | /** @internal */ |
| 1839 | const indexWhere = <A>(self: Chunk.Chunk<A>, predicate: Predicate<A>, from = 0): number => { |
no test coverage detected
searching dependent graphs…