UNPKG

del-repos

Version:

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

99 lines (98 loc) 4.18 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 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 = ''; try { const response = yield axios_1.default.get(`${GITEE_API_BASE}/user`, { headers: { Authorization: `token ${token}`, }, }); username = response.data.login; } catch (error) { spinner.fail(`Failed to get username. ${((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) || error.message}`); return; } for (let repo of repos) { spinner.start(`Deleting repository ${repo}...`); try { repo = (0, utils_1.extractPath)(repo); const deleteUrl = `${GITEE_API_BASE}/repos/${username}/${repo}?access_token=${token}`; yield axios_1.default.get(deleteUrl, { headers: { Authorization: `token ${token}`, }, }); // more information: https://gitee.com/api/v5/swagger#/deleteV5ReposOwnerRepo yield axios_1.default.delete(deleteUrl, { headers: { Authorization: `token ${token}`, }, }); spinner.succeed(`Deleted repository ${repo}.`); } 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(`Failed to delete repository ${repo}. ${errorMessage}`); console.error(`Error details: ${errorMessage}`); } } }); exports.deleteGiteeRepos = deleteGiteeRepos;