/ src / split.ts
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  }