123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import { globSync } from 'glob'
- import fs from 'fs'
- import { basename } from 'path'
- import { HOME_DIR, ICONS_SRC_DIR, iconTemplate, parseMatter, types, getArgvs } from './helpers.mjs'
- import { join } from 'path'
- let error = false
- const outlineIconsNames = globSync(join(ICONS_SRC_DIR, 'outline/*.svg')).map(i => basename(i, '.svg')).sort(),
- filledIconsNames = globSync(join(ICONS_SRC_DIR, 'filled/*.svg')).map(i => basename(i, '.svg')).sort(),
- argvs = getArgvs(),
- aliases = JSON.parse(fs.readFileSync(join(HOME_DIR, 'aliases.json'), 'utf-8'));
- let unicodes = []
- const duplicateExists = (arr) => {
- return new Set(arr).size !== arr.length
- }
- const getIconName = (icon) => {
- //return last two parts of the path
- return icon.split('/').slice(-2).join('/')
- }
- types.forEach(type => {
- const icons = globSync(join(ICONS_SRC_DIR, type, '*.svg')).sort()
- icons.forEach((icon) => {
- const iconContent = fs.readFileSync(icon, 'utf-8'),
- iconName = getIconName(icon)
- if (!iconContent.includes(iconTemplate(type))) {
- console.log(`⛔️ Icon \`${iconName}\` is not properly formatted`)
- error = true
- }
- if (!iconContent.includes('<!--') || !iconContent.includes('-->')) {
- console.log(`⛔️ Icon \`${iconName}\` has no metadata`)
- error = true
- }
- try {
- const { data } = parseMatter(icon)
- if (data.unicode) {
- if (unicodes.indexOf(data.unicode) !== -1) {
- console.log(`⛔️ Icon \`${iconName}\` has duplicate unicode \`${data.unicode}\``)
- error = true
- }
- if (data.unicode.length !== 4) {
- console.log(`⛔️ Icon \`${iconName}\` has invalid unicode \`${data.unicode}\``)
- error = true
- }
- unicodes.push(data.unicode)
- } else if (argvs.hard) {
- console.log(`⛔️ Icon \`${iconName}\` has no unicode`)
- error = true
- }
- // check duplicates in tags
- if (duplicateExists(data.tags || [])) {
- console.log(`⛔️ Icon \`${iconName}\` has duplicate tags`)
- error = true
- }
- if (argvs.hard && !data.version) {
- console.log(`⛔️ Icon \`${iconName}\` has no version`)
- error = true
- }
- if (type === 'filled' && data.category) {
- console.log(`⛔️ Icon \`${iconName}\` has category in filled version`)
- error = true
- }
- if (type === 'filled' && data.tags) {
- console.log(`⛔️ Icon \`${iconName}\` has tags in filled version`)
- error = true
- }
- } catch (e) {
- console.log(`⛔️ Icon \`${iconName}\` has invalid metadata`)
- error = true
- }
- })
- filledIconsNames.forEach((icon) => {
- const iconName = getIconName(icon)
- if (outlineIconsNames.indexOf(icon) === -1) {
- console.log(`⛔️ Icon \`${iconName}\` exists in filled version but doesn't exists in outline`)
- error = true
- }
- })
- })
- // check aliases
- Object.entries(aliases).forEach(([type, replacers]) => {
- Object.entries(replacers).forEach(([from, to]) => {
- if (!fs.existsSync(join(ICONS_SRC_DIR, type, `${to}.svg`))) {
- console.log(`⛔️ Alias \`${type}/${from}\` for \`${type}/${to}\` doesn't exists`)
- error = true
- }
- })
- })
- if (error) {
- process.exit(1)
- } else {
- console.log('✅ All icons are valid!')
- process.exit(0)
- }
|