@neurosity/sdk
Version:
Neurosity SDK
19 lines (18 loc) • 858 B
JavaScript
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));
}