diff --git a/scripts/renameIcon.mjs b/scripts/renameIcon.mjs new file mode 100644 index 000000000..90196b43a --- /dev/null +++ b/scripts/renameIcon.mjs @@ -0,0 +1,71 @@ +import simpleGit from 'simple-git'; +import fs from 'fs'; +import path from 'path'; +import { promisify } from 'util'; + +const oldName = path.basename(process.argv[2]).replace(/\.[^/.]+$/, ''); +const newName = path.basename(process.argv[3]).replace(/\.[^/.]+$/, ''); + +if (!newName || !oldName) { + console.error('Usage: node ./scripts/renameIcon.mjs '); + process.exit(1); +} +if (oldName === newName) { + console.error('ERROR: Old name and new name are the same'); + process.exit(1); +} + +const git = simpleGit(); + +async function main() { + try { + if (await fileExists(`icons/${newName}.svg`)) { + console.error(`ERROR: Icon icons/${newName}.svg already exists`); + process.exit(1); + } + if (await fileExists(`icons/${newName}.json`)) { + console.error(`ERROR: Metadata file icons/${newName}.json already exists`); + process.exit(1); + } + if (!(await fileExists(`icons/${oldName}.svg`))) { + console.error(`ERROR: Icon icons/${oldName}.svg doesn't exist`); + process.exit(1); + } + if (!(await fileExists(`icons/${oldName}.json`))) { + console.error(`ERROR: Metadata file icons/${oldName}.json doesn't exist`); + process.exit(1); + } + + await git.mv(`icons/${oldName}.svg`, `icons/${newName}.svg`); + await git.mv(`icons/${oldName}.json`, `icons/${newName}.json`); + const json = fs.readFileSync(`icons/${newName}.json`, 'utf8'); + const jsonData = JSON.parse(json); + if (Array.isArray(jsonData.aliases)) { + jsonData.aliases.push(oldName); + } else { + jsonData.aliases = [oldName]; + } + fs.writeFileSync(`icons/${newName}.json`, JSON.stringify(jsonData, null, 2)); + await git.add(`icons/${newName}.json`); + + console.log('SUCCESS: Next steps:'); + console.log(`git checkout -b rename/${oldName}-to-${newName};`); + console.log(`git commit -m 'Renamed ${oldName} to ${newName}';`); + console.log(`gh pr create --title 'Renamed ${oldName} to ${newName}';`); + console.log('git checkout main;'); + } catch (err) { + console.error(err.message); + process.exit(1); + } +} + +async function fileExists(filePath) { + try { + await promisify(fs.access)(filePath); + return true; + } catch { + return false; + } +} + +main();