import type { ParserOptions, TreeAdapterTypeMap } from 'parse5'; import { ParserStream } from '../../lib/index.js'; import { makeChunks } from 'parse5-test-utils/utils/common.js'; export function parseChunked( test: { input: string; fragmentContext?: T['parentNode'] }, opts: ParserOptions, minChunkSize?: number, maxChunkSize?: number ): { node: TreeAdapterTypeMap['document']; chunks: string[] } { const parserStream = test.fragmentContext ? ParserStream.getFragmentStream(test.fragmentContext, opts) : new ParserStream(opts); const chunks = makeChunks(test.input, minChunkSize, maxChunkSize); // NOTE: set small waterline for testing purposes parserStream.parser.tokenizer.preprocessor.bufferWaterline = 8; for (let i = 0; i < chunks.length - 1; i++) { parserStream.write(chunks[i]); } parserStream.end(chunks[chunks.length - 1]); return { node: test.fragmentContext ? parserStream.getFragment() : parserStream.document, chunks, }; }