UNPKG

@neurosity/sdk

Version:
19 lines (18 loc) 858 B
import { pipe } from "rxjs"; import { map, scan, filter } from "rxjs/operators"; export function stitchChunks({ delimiter }) { return pipe(scan(([remainder], currentBuffer) => { const nextBuffer = remainder + currentBuffer; if (!nextBuffer.includes(delimiter)) { return [nextBuffer, ""]; } if (nextBuffer.endsWith(delimiter)) { return ["", nextBuffer]; } const remainderStart = nextBuffer.lastIndexOf(delimiter); const remainderIndex = remainderStart + delimiter.length; const nextPacket = nextBuffer.slice(0, remainderIndex); const nextRemainder = nextBuffer.slice(remainderIndex); return [nextRemainder, nextPacket]; }, ["", ""]), map(([, nextPacket]) => nextPacket.slice(0, -delimiter.length)), filter((nextPacket) => !!nextPacket.length)); }