UNPKG

ember-svg-jar

Version:

Best way to use SVG images in Ember applications

72 lines (59 loc) 1.47 kB
'use strict'; const _ = require('lodash'); const consoleUI = require('./console-ui'); function checkForDuplicates(items) { let duplicateIds = _(items) .map('id') .countBy() .pickBy(value => value > 1) .keys() .value(); if (!duplicateIds.length) { return; } let invalidItems = _.flatMap(duplicateIds, id => _.filter(items, { id })); return ['Duplicate IDs found:'] .concat( invalidItems.map( ({ id, relativePath }) => `ID: "${id}" Relative Path: ${relativePath}` ) ) .join('\n'); } function validateViewBox(items) { let invalidItems = items.filter( ({ asset }) => !asset.svg.includes('viewBox') ); if (!invalidItems.length) { return; } return ['SVG files without viewBox found:'] .concat( invalidItems.map(({ relativePath }) => `Relative Path: ${relativePath}`) ) .join('\n'); } module.exports = function validateAssets( items, validationConfig = {}, strategy ) { let validators = []; if (validationConfig.checkForDuplicates) { validators.push(checkForDuplicates); } if (validationConfig.validateViewBox) { validators.push(validateViewBox); } validators.forEach(validate => { let message = validate(items); if (message) { let warning = `${strategy} ${message}`; if (validationConfig.throwOnFailure) { throw new Error(warning); } else { consoleUI.warn(warning); } } }); };