MCPcopy Create free account
hub / github.com/Effect-TS/effect / splitWhereSplitter

Function splitWhereSplitter

packages/effect/src/internal/sink.ts:1800–1836  ·  view source on GitHub ↗
(
  written: boolean,
  leftovers: Ref.Ref<Chunk.Chunk<A>>,
  f: Predicate<A>
)

Source from the content-addressed store, hash-verified

1798
1799/** @internal */
1800const 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 */
1839const indexWhere = <A>(self: Chunk.Chunk<A>, predicate: Predicate<A>, from = 0): number => {

Callers 1

sink.tsFile · 0.85

Calls 6

indexWhereFunction · 0.85
fromEffectMethod · 0.80
pipeFunction · 0.70
isEmptyMethod · 0.65
writeMethod · 0.65
setMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…