Source: lib/ressource.js

/**
 * Ajoute une erreur à la ressource (en créant le tableau $errors s'il n'existait pas)
 * @param {Ressource} ressource
 * @param {string} error
 */
function addError (ressource, error) {
  if (!ressource.$errors) ressource.$errors = []
  if (typeof error === 'string') ressource.$errors.push(error)
  else ressource.$errors.push(error.toString())
}

/**
 * Ajoute un warning à la ressource
 * - crée le tableau $warnings s'il n'existait pas
 * - n'ajoute rien si le warning y était déjà
 * @param {Ressource} ressource
 * @param {string} warning
 */
function addWarning (ressource, warning) {
  if (!ressource.$warnings) ressource.$warnings = []
  if (!ressource.$warnings.includes(warning)) ressource.$warnings.push(warning)
}

/**
 * Retourne les rid de tous les enfants
 * @param arbre
 * @returns {Array}
 */
function getRidEnfants (ressource) {
  // on veut toutes les refs récursivement
  function addRids (enfants) {
    enfants.forEach(enfant => {
      if (!enfant) return log.dataError('enfant invalide dans', ressource)
      if (enfant.aliasOf) rids.add(enfant.aliasOf)
      if (enfant.enfants && enfant.enfants.length) addRids(enfant.enfants)
    })
  }
  if (!ressource) throw new Error('getRidEnfants appelé sans ressource')
  if (!ressource.enfants || !ressource.enfants.length) return []
  // on peut chercher
  const rids = new Set()
  addRids(ressource.enfants)

  return Array.from(rids)
}

module.exports = {
  addError,
  addWarning,
  getRidEnfants
}