export type NewlineDeliminatedJson = any[];

export function parse_ndjson(input: string): NewlineDeliminatedJson {
    const lines = input.split('\n');
    const result = [];
    let current_line = '';
    while (lines.length > 0) {
        current_line += lines.shift();
        if (current_line.length === 0) {
            continue;
        }
        try {
            const entry = JSON.parse(current_line);
            result.push(entry);
            current_line = '';
        } catch (e) {
            // if this chunk wasn't valid JSON, assume there was an escaped
            // newline in the JSON line, so simply continue to the next one.
            // however, if we've reached the end of the input, that means we
            // were given invalid nd-json
            if (lines.length === 0) {
                throw new Error(`unable to parse invalid nd-json: ${e}, "${current_line}"`, {
                    cause: e,
                });
            }
        }
    }
    return result;
}
