import { isAnnotation } from "../types";
import { ValidationAnnotation, ValidationReturnType } from "../Keyword";

/**
 * Flattens nested validation array results and filters items to only include errors, annotations and promises
 */
export default function sanitizeErrors(
    list: ValidationReturnType | ValidationReturnType[] | ValidationAnnotation[],
    result: ValidationAnnotation[] = []
) {
    if (!Array.isArray(list)) {
        if (list !== undefined) {
            return [list];
        }
        return [];
    }
    for (const item of list) {
        if (Array.isArray(item)) {
            sanitizeErrors(item, result);
        } else if (isAnnotation(item) || item instanceof Promise) {
            result.push(item);
        }
    }
    return result;
}
