import { StreamMessageWrapper } from "../CommonTypes"; export function* getParsablePartIterator( str: string ): Generator { let remainingStr = str; while (true) { const jsonRange = findParsablePart(remainingStr); if (jsonRange === undefined) { return; } const jsonStr = remainingStr.slice(jsonRange.start, jsonRange.end); remainingStr = remainingStr.slice(jsonRange.end); const result = JSON.parse(jsonStr) as T; yield result; } } function findParsablePart( str: string ): { start: number; end: number } | undefined { let startText = StreamMessageWrapper.startIndicator; let endText = StreamMessageWrapper.endIndicator; const startIndex = str.indexOf(startText); if (startIndex === -1) { return undefined; } const endIndex = str.indexOf(endText, startIndex + startText.length); if (endIndex === -1) { return undefined; } return { start: startIndex + startText.length, end: endIndex }; }