vscode-icons/scripts/integrity.ts
2024-02-25 15:14:46 +01:00

45 lines
1.2 KiB
TypeScript

/**
* Ensure all default associations refer to existing icons.
*/
import { readdir } from 'node:fs/promises'
import { basename, join, resolve } from 'node:path'
import { exit } from 'node:process'
import { consola } from 'consola'
import { fileIcons } from '~/defaults/fileIcons'
import { folderIcons } from '~/defaults/folderIcons'
let exitCode = 0
const ICONS = 'icons'
const flavors = await readdir(resolve(ICONS))
consola.info('Running integrity check...')
await Promise.all(flavors.map(async (f) => {
const icons = await readdir(resolve(join(ICONS, f)))
Object.keys(fileIcons).forEach((fi) => {
if (!icons.some(i => basename(i, '.svg') === fi)) {
consola.error(`Missing ${f} icon for ${fi}`)
exitCode++
}
})
Object.keys(folderIcons).forEach((fi) => {
if (!icons.some(i => basename(i, '.svg') === `folder_${fi}`)) {
consola.error(`Missing ${f} folder icon for ${fi}`)
exitCode++
}
if (!icons.some(i => basename(i, '.svg') === `folder_${fi}_open`)) {
consola.error(`Missing ${f} open folder icon for ${fi}`)
exitCode++
}
})
}))
if (exitCode === 0)
consola.success('Integrity check passed.')
exit(exitCode)