1
0
mirror of https://github.com/simple-icons/simple-icons.git synced 2025-07-02 22:16:54 +02:00
Files
simple-icons/scripts/remove-icon.js

58 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

2024-12-24 01:49:08 +08:00
#!/usr/bin/env node
// @ts-check
2024-12-24 01:49:08 +08:00
/**
* @file
* Script to remove an icon and its data.
*/
import fs from 'node:fs/promises';
import path from 'node:path';
import process from 'node:process';
2025-03-07 01:35:59 +08:00
import {search} from '@inquirer/prompts';
import {search as fuzzySearch} from 'fast-fuzzy';
import {getIconSlug, getIconsData} from '../sdk.mjs';
2024-12-24 01:49:08 +08:00
import {writeIconsData} from './utils.js';
process.exitCode = 1;
2025-03-07 01:35:59 +08:00
process.on('uncaughtException', (error) => {
if (error instanceof Error && error.name === 'ExitPromptError') {
process.stdout.write('\nAborted\n');
process.exit(1);
2025-03-07 01:35:59 +08:00
} else {
throw error;
}
});
const rootDirectory = path.resolve(import.meta.dirname, '..');
2025-03-07 01:35:59 +08:00
const svgFilesDirectory = path.resolve(rootDirectory, 'icons');
2024-12-24 01:49:08 +08:00
const iconsData = await getIconsData();
const icons = iconsData.map((icon, index) => {
const slug = getIconSlug(icon);
return {
name: `${icon.title} (${slug})`,
value: {title: icon.title, slug, index},
};
});
2025-03-07 01:35:59 +08:00
const found = await search({
message: 'Search for an icon to remove:',
2024-12-24 01:49:08 +08:00
async source(input) {
2025-03-07 01:35:59 +08:00
if (!input) return [];
return fuzzySearch(input, icons, {
2024-12-24 01:49:08 +08:00
keySelector: (icon) => [icon.value.title, icon.value.slug],
});
},
});
if (!found) {
console.error('No icon selected.');
process.exit(1);
}
iconsData.splice(found.index, 1);
await writeIconsData(iconsData);
await fs.unlink(path.resolve(svgFilesDirectory, `${found.slug}.svg`));
process.stdout.write(`Icon "${found.title} (${found.slug}.svg)" removed.\n`);
process.exit(0);