@mdi/svg
Version:
Material Design Icons SVG
52 lines (50 loc) • 1.98 kB
JavaScript
const fs = require('fs');
const pack = JSON.parse(fs.readFileSync('package.json', 'utf8'));
const fontBuild = JSON.parse(fs.readFileSync('font-build.json', 'utf8'));
const icons = JSON.parse(fs.readFileSync('meta.json', 'utf8'));
console.log('Starting...');
if (pack.version.replace(/\./g, '') == icons.length.toString()) {
console.log(`Success: package.json version ${pack.version}`);
} else {
console.error('Error: Invalid version in package.json');
}
if (pack.version !== `${fontBuild.version.major}.${fontBuild.version.minor}.${fontBuild.version.patch}`) {
console.error('Error: Invalid font-build.json version');
}
var files = fs.readdirSync('svg');
if (files.length === icons.length) {
console.log('Success: svg file count equals meta.json count');
} else {
console.error('Error: meta.json or svg folder out of sync!');
}
const set = new Set();
icons.forEach(icon => {
const nohyphen = icon.name.replace(/-/g, '');
if (set.has(nohyphen)) {
console.error(`Error: duplicate no hyphen name "${nohyphen}" / "${icon.name}"`);
}
set.add(nohyphen);
if (files.includes(`${icon.name}.svg`)) {
// Good
} else {
console.error(`Error: ${icon.name} not found!`);
}
});
if (icons.length !== set.size) {
// Ex: textbox === text-box, will error
// Ex: calendar-weekend === calendar-week-end, will also error
console.error('Error: An icon name conflicts when hyphens are removed!');
}
// Console error all duplicates
const findDuplicates = arr => arr.filter((item, index) => arr.indexOf(item) != index);
icons.forEach(icon => {
const aliasDups = findDuplicates(icon.aliases);
if (aliasDups.length > 0) {
console.error(`Error: Aliases "${icon.name}" has duplicates "${aliasDups.join('", "')}"`);
}
const tagDups = findDuplicates(icon.tags);
if (tagDups.length > 0) {
console.error(`Error: Tags "${icon.name}" has duplicates "${tagDups.join('", "')}"`);
}
});
console.log('Done!');