/** * @module filter-source */ import {isObject} from './obj'; import {getMimetype} from './mimetypes'; /** * Filter out single bad source objects or multiple source objects in an * array. Also flattens nested source object arrays into a 1 dimensional * array of source objects. * * @param {Tech~SourceObject|Tech~SourceObject[]} src * The src object to filter * * @return {Tech~SourceObject[]} * An array of sourceobjects containing only valid sources * * @private */ const filterSource = function(src) { // traverse array 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()) { // convert string into object src = [fixSource({src})]; } else if (isObject(src) && typeof src.src === 'string' && src.src && src.src.trim()) { // src is already valid src = [fixSource(src)]; } else { // invalid source, turn it into an empty array src = []; } return src; }; /** * Checks src mimetype, adding it when possible * * @param {Tech~SourceObject} src * The src object to check * @return {Tech~SourceObject} * src Object with known type */ function fixSource(src) { if (!src.type) { const mimetype = getMimetype(src.src); if (mimetype) { src.type = mimetype; } } return src; } export default filterSource;