UNPKG

del-repos

Version:

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

120 lines (119 loc) 5.38 kB
"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 }); exports.deleteGiteeRepos = exports.fetchGiteeRepos = void 0; const axios_1 = __importDefault(require("axios")); const ora_1 = __importDefault(require("ora")); const utils_1 = require("../utils"); const kolorist_1 = require("kolorist"); const GITEE_API_BASE = 'https://gitee.com/api/v5'; /** * 获取 Gitee 仓库 * @param token Gitee token * @param type 仓库类型: owner || all * @returns 仓库列表 */ const fetchGiteeRepos = (token, type) => __awaiter(void 0, void 0, void 0, function* () { let page = 1; let repos = []; let hasMore = true; // more information: https://gitee.com/api/v5/swagger#/getV5UsersUsernameRepos while (hasMore) { const response = yield axios_1.default.get(`${GITEE_API_BASE}/user/repos`, { headers: { Authorization: `token ${token}`, }, params: { type: type, sort: 'updated', direction: 'desc', page, per_page: 100, }, }); repos = repos.concat(response.data); hasMore = response.data.length === 100; page++; } return repos.map(repo => `${repo.full_name} \u001b]8;;${repo.html_url}\u0007🔗\u001b]8;;\u0007`); }); exports.fetchGiteeRepos = fetchGiteeRepos; /** * 删除 Gitee 仓库 * @param token Gitee token * @param repos 待删除的仓库 * @returns 删除结果 */ const deleteGiteeRepos = (token, repos) => __awaiter(void 0, void 0, void 0, function* () { var _a, _b, _c, _d; const spinner = (0, ora_1.default)(); let username = ''; // 获取用户名 console.log((0, kolorist_1.dim)('🔍 Verifying user credentials...')); try { const response = yield axios_1.default.get(`${GITEE_API_BASE}/user`, { headers: { Authorization: `token ${token}`, }, }); username = response.data.login; console.log((0, kolorist_1.green)(`✅ Authenticated as: ${username}\n`)); } catch (error) { console.log((0, kolorist_1.red)('❌ Failed to authenticate with Gitee')); console.error((0, kolorist_1.red)(`Error: ${((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) || error.message}\n`)); return; } let successCount = 0; let failCount = 0; const totalRepos = repos.length; console.log((0, kolorist_1.cyan)(`🗑️ Starting deletion of ${totalRepos} repositories...\n`)); for (let i = 0; i < repos.length; i++) { let repo = repos[i]; const repoName = (0, utils_1.extractPath)(repo); const progress = `(${i + 1}/${totalRepos})`; spinner.start(`${progress} Deleting ${(0, kolorist_1.yellow)(repoName)}...`); try { const deleteUrl = `${GITEE_API_BASE}/repos/${username}/${repoName}?access_token=${token}`; // 验证仓库存在 yield axios_1.default.get(deleteUrl, { headers: { Authorization: `token ${token}`, }, }); // 删除仓库 yield axios_1.default.delete(deleteUrl, { headers: { Authorization: `token ${token}`, }, }); spinner.succeed(`${progress} ${(0, kolorist_1.green)('✅ Deleted')} ${repoName}`); successCount++; } catch (error) { const errorMessage = ((_d = (_c = error.response) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.message) || error.message; spinner.fail(`${progress} ${(0, kolorist_1.red)('❌ Failed to delete')} ${repoName}`); console.log((0, kolorist_1.dim)(` └─ Error: ${errorMessage}`)); failCount++; } } // 显示最终结果 console.log((0, kolorist_1.cyan)('\n📊 Deletion Summary:')); console.log((0, kolorist_1.green)(` ✅ Successfully deleted: ${successCount} repositories`)); if (failCount > 0) { console.log((0, kolorist_1.red)(` ❌ Failed to delete: ${failCount} repositories`)); } console.log((0, kolorist_1.dim)(` 📈 Success rate: ${Math.round((successCount / totalRepos) * 100)}%\n`)); }); exports.deleteGiteeRepos = deleteGiteeRepos;