"""Parser JSON Lines (JSONL) a lista de dicts. Complemento de to_jsonl."""

import json


def from_jsonl(text: str) -> list[dict]:
    """Parser JSONL a lista de dicts.

    Complemento de to_jsonl. Ignora lineas vacias. Lanza ValueError si
    una linea contiene JSON invalido, indicando el numero de linea.

    Args:
        text: Contenido JSONL como string (una linea JSON por linea).

    Returns:
        Lista de dicts parseados.

    Raises:
        ValueError: Si una linea no es JSON valido, con el numero de linea.
    """
    result: list[dict] = []

    for line_num, line in enumerate(text.splitlines(), start=1):
        stripped = line.strip()
        if not stripped:
            continue
        try:
            parsed = json.loads(stripped)
        except json.JSONDecodeError as exc:
            raise ValueError(
                f"JSON invalido en linea {line_num}: {exc}"
            ) from exc
        result.append(parsed)

    return result
