del-repos
Version:
A command-line tool for bulk deleting GitHub or Gitee repositories
130 lines (129 loc) • 7.03 kB
JavaScript
;
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();