/**
* @module filter-source
*/
import {isObject} de './obj' ;
import {getMimetype} de './mimetypes' ;
/**
* Filtrer les mauvais objets source uniques ou multiples dans un fichier
* de la gamme. Il aplatit également les tableaux d'objets sources imbriqués en un tableau unidimensionnel
* tableau d'objets sources.
*
* @param {Tech~SourceObject|Tech~SourceObject[]} src
* L'objet src à filtrer
*
* @return {Tech~SourceObject[]}
* Un tableau d'objets sources contenant uniquement des sources valides
*
* @private
*/
const filterSource = function(src) {
// traverse le tableau
if (Array.isArray(src)) {
let newsrc = [] ;
src.forEach(function(srcobj) {
srcobj = filterSource(srcobj) ;
if (Array.isArray(srcobj)) {
newsrc = newsrc.concat(srcobj) ;
} else if (isObject(srcobj)) {
newsrc.push(srcobj) ;
}
}) ;
src = newsrc ;
} else if (typeof src === 'string' && src.trim()) {
// convertir une chaîne de caractères en objet
src = [fixSource({src})] ;
} else if (isObject(src) && typeof src.src === 'string' && src.src && src.src.trim()) {
// src est déjà valide
src = [fixSource(src)] ;
} else {
// source invalide, transformer en un tableau vide
src = [] ;
}
return src ;
};
/**
* Vérifie le mimetype de src, en l'ajoutant si possible
*
* @param {Tech~SourceObject} src
* L'objet src à vérifier
* @return {Tech~SourceObject}
* src Objet dont le type est connu
*/
function fixSource(src) {
if (!src.type) {
const mimetype = getMimetype(src.src) ;
if (mimetype) {
src.type = mimetype ;
}
}
return src ;
}
export default filterSource ;