UNPKG

del-repos

Version:

A command-line tool for bulk deleting GitHub or Gitee repositories

130 lines (129 loc) 7.03 kB
#!/usr/bin/env node "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const yargs_1 = __importDefault(require("yargs")); const helpers_1 = require("yargs/helpers"); const inquirer_1 = __importDefault(require("inquirer")); const kolorist_1 = require("kolorist"); const cli_1 = require("./utils/cli"); const github_1 = require("./services/github"); const gitee_1 = require("./services/gitee"); const spinner_1 = require("./utils/spinner"); const fs_1 = require("fs"); const utils_1 = require("./utils"); const path_1 = require("path"); const packageJsonPath = (0, path_1.join)(__dirname, '../package.json'); const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8')); const version = packageJson.version; const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv)) .usage('Usage: $0 [options]') .version(version) .alias('v', 'version') .help('h') .alias('h', 'help') .option('t', { alias: 'type', describe: '显示的仓库列表类型(o: owner, a: all)', choices: ['o', 'a'], demandOption: false, type: 'string', }) .epilog('For more information, visit https://github.com/yaolifeng0629/del-repos.git').argv; const printWelcomeBanner = () => { console.log((0, kolorist_1.bold)((0, kolorist_1.cyan)('\n╔══════════════════════════════════════════════════════════════╗'))); console.log((0, kolorist_1.bold)((0, kolorist_1.cyan)('║ 🗑️ Del-Repos Cli Tool ║'))); console.log((0, kolorist_1.bold)((0, kolorist_1.cyan)('║ ║'))); console.log((0, kolorist_1.bold)((0, kolorist_1.cyan)('║ Batch Delete GitHub/Gitee Repositories ║'))); console.log((0, kolorist_1.bold)((0, kolorist_1.cyan)('╚══════════════════════════════════════════════════════════════╝'))); console.log(' Version: ' + version + '\n'); }; const main = () => __awaiter(void 0, void 0, void 0, function* () { printWelcomeBanner(); const platform = yield (0, cli_1.promptPlatform)(); const token = yield (0, cli_1.promptToken)(platform); console.log((0, kolorist_1.cyan)('📡 Fetching Repository Information')); (0, spinner_1.startSpinner)(' Fetching your repositories...'); /** * 获取仓库类型 * @param t(type) 仓库类型: owner || all */ const { t: type = 'a' } = yield argv; const repoType = (0, utils_1.reposType)(type); const typeDisplay = type === 'o' ? 'owner repositories' : 'all repositories'; try { let repos; if (platform === 'GitHub') { repos = yield (0, github_1.fetchGithubRepos)(token, repoType); } else { repos = yield (0, gitee_1.fetchGiteeRepos)(token, repoType); } (0, spinner_1.stopSpinner)(`✅ Successfully fetched ${repos.length} ${typeDisplay}`); if (repos.length === 0) { console.log((0, kolorist_1.yellow)('⚠️ No repositories found.')); console.log((0, kolorist_1.dim)('This might be because:')); console.log((0, kolorist_1.dim)(' • You have no repositories')); console.log((0, kolorist_1.dim)(' • Your token doesn\'t have the required permissions')); console.log((0, kolorist_1.dim)(' • There was an issue with the API request\n')); process.exit(0); } const selectedRepos = yield (0, cli_1.promptRepositories)(repos); if (selectedRepos.length === 0) { console.log((0, kolorist_1.yellow)('⚠️ No repositories selected for deletion.')); console.log((0, kolorist_1.dim)('Operation cancelled.\n')); process.exit(0); } // 确认删除 console.log((0, kolorist_1.red)('\n⚠️ DANGER ZONE ⚠️')); console.log((0, kolorist_1.red)('You are about to permanently delete the following repositories:')); selectedRepos.forEach((repo, index) => { const cleanRepoName = repo.split(' ')[0]; console.log((0, kolorist_1.red)(` ${index + 1}. ${cleanRepoName}`)); }); console.log((0, kolorist_1.red)('\n❗ This action CANNOT be undone!\n')); const { confirmDelete } = yield inquirer_1.default.prompt([ { type: 'confirm', name: 'confirmDelete', message: '💀 Are you absolutely sure you want to delete these repositories?', default: false, }, ]); if (!confirmDelete) { console.log((0, kolorist_1.green)('✅ Operation cancelled. No repositories were deleted.\n')); process.exit(0); } console.log((0, kolorist_1.cyan)('\n🗑️ Starting Deletion Process')); if (platform === 'GitHub') { yield (0, github_1.deleteGithubRepos)(token, selectedRepos); } else { yield (0, gitee_1.deleteGiteeRepos)(token, selectedRepos); } console.log((0, kolorist_1.green)('\n🎉 All selected repositories have been successfully deleted!')); console.log((0, kolorist_1.dim)('Thank you for using del-repos CLI tool.\n')); } catch (error) { (0, spinner_1.stopSpinner)('❌ Failed to fetch repositories'); console.log((0, kolorist_1.red)('\n💥 An error occurred:')); console.error((0, kolorist_1.red)(error.message)); console.log((0, kolorist_1.dim)('\nPlease check:')); console.log((0, kolorist_1.dim)(' • Your internet connection')); console.log((0, kolorist_1.dim)(' • Your token permissions')); console.log((0, kolorist_1.dim)(' • The platform API status\n')); process.exit(1); } }); main();