split.ts
1 import { concat } from "uint8arrays/concat"; 2 3 import { MATCH, StreamSearch } from "./search.js"; 4 5 export function split( 6 chunks: Uint8Array | Uint8Array[], 7 needle: Uint8Array | string, 8 ): Uint8Array[] { 9 const search = new StreamSearch(needle); 10 11 const outchunks: Uint8Array[][] = [[]]; 12 for (const chunk of Array.isArray(chunks) ? chunks : [chunks]) { 13 for (const token of search.feed(chunk)) { 14 if (token === MATCH) { 15 outchunks.push([]); 16 } else { 17 outchunks[outchunks.length - 1].push(token); 18 } 19 } 20 } 21 22 const end = search.end(); 23 outchunks[outchunks.length - 1].push(end); 24 25 return outchunks.map((chunks) => concat(chunks)); 26 }