del-repos
Version:
A command-line tool for bulk deleting GitHub or Gitee repositories
99 lines (98 loc) • 4.18 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 });
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;