cnpmcore
Version:
127 lines • 10.3 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GithubBinary = void 0;
const tegg_1 = require("@eggjs/tegg");
const Binary_1 = require("../../enum/Binary");
const binaries_1 = __importDefault(require("../../../../config/binaries"));
const AbstractBinary_1 = require("./AbstractBinary");
let GithubBinary = class GithubBinary extends AbstractBinary_1.AbstractBinary {
constructor() {
super(...arguments);
this.releases = {};
}
async initFetch(binaryName) {
delete this.releases[binaryName];
}
async initReleases(binaryName, binaryConfig) {
if (!this.releases[binaryName]) {
// https://docs.github.com/en/rest/reference/releases get three pages
// https://api.github.com/repos/electron/electron/releases
// https://api.github.com/repos/electron/electron/releases?per_page=100&page=3
let releases = [];
const maxPage = binaryConfig.options?.maxPage || 1;
for (let i = 0; i < maxPage; i++) {
const url = `https://api.github.com/repos/${binaryConfig.repo}/releases?per_page=100&page=${i + 1}`;
const requestHeaders = {};
if (process.env.GITHUB_TOKEN) {
requestHeaders.Authorization = `token ${process.env.GITHUB_TOKEN}`;
}
const data = await this.requestJSON(url, requestHeaders);
if (!Array.isArray(data)) {
// {"message":"API rate limit exceeded for 47.57.239.54. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url":"https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"}
if (typeof data?.message === 'string' && data.message.includes('rate limit')) {
this.logger.info('[GithubBinary.fetch:hit-rate-limit] skip sync this time, data: %j, url: %s', data, url);
return;
}
this.logger.warn('[GithubBinary.fetch:response-data-not-array] data: %j, url: %s', data, url);
return;
}
releases = releases.concat(data);
}
this.releases[binaryName] = releases;
}
return this.releases[binaryName];
}
formatItems(releaseItem, binaryConfig) {
const items = [];
// 250MB
const maxFileSize = 1024 * 1024 * 250;
for (const asset of releaseItem.assets) {
if (asset.size > maxFileSize) {
this.logger.info('[GithubBinary.formatItems] asset reach max file size(> 250MB), ignore download it, asset: %j', asset);
continue;
}
items.push({
name: asset.name,
isDir: false,
url: asset.browser_download_url,
size: asset.size,
date: asset.updated_at,
});
}
// tarball_url and zipball_url
// https://github.com/electron/electron/archive/v16.0.5.zip
// https://github.com/electron/electron/archive/v16.0.5.tar.gz
if (releaseItem.tarball_url) {
items.push({
name: `${releaseItem.tag_name}.tar.gz`,
isDir: false,
url: `https://github.com/${binaryConfig.repo}/archive/${releaseItem.tag_name}.tar.gz`,
size: '-',
date: releaseItem.published_at,
});
}
if (releaseItem.zipball_url) {
items.push({
name: `${releaseItem.tag_name}.zip`,
isDir: false,
url: `https://github.com/${binaryConfig.repo}/archive/${releaseItem.tag_name}.zip`,
size: '-',
date: releaseItem.published_at,
});
}
return items;
}
async fetch(dir, binaryName) {
const binaryConfig = binaries_1.default[binaryName];
const releases = await this.initReleases(binaryName, binaryConfig);
if (!releases)
return;
let items = [];
if (dir === '/') {
for (const item of releases) {
items.push({
name: `${item.tag_name}/`,
isDir: true,
url: item.url,
size: '-',
date: item.published_at,
});
}
}
else {
for (const item of releases) {
if (dir === `/${item.tag_name}/`) {
items = this.formatItems(item, binaryConfig);
break;
}
}
}
return { items };
}
};
exports.GithubBinary = GithubBinary;
exports.GithubBinary = GithubBinary = __decorate([
(0, tegg_1.SingletonProto)(),
(0, AbstractBinary_1.BinaryAdapter)(Binary_1.BinaryType.GitHub)
], GithubBinary);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0aHViQmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXBwL2NvbW1vbi9hZGFwdGVyL2JpbmFyeS9HaXRodWJCaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQTZDO0FBQzdDLDhDQUErQztBQUMvQywyRUFBcUY7QUFDckYscURBQTBGO0FBSW5GLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQWEsU0FBUSwrQkFBYztJQUF6Qzs7UUFDRyxhQUFRLEdBQTBCLEVBQUUsQ0FBQztJQXdHL0MsQ0FBQztJQXRHQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQXNCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRVMsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFzQixFQUFFLFlBQThCO1FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzlCLHFFQUFxRTtZQUNyRSwwREFBMEQ7WUFDMUQsOEVBQThFO1lBQzlFLElBQUksUUFBUSxHQUFVLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEMsTUFBTSxHQUFHLEdBQUcsZ0NBQWdDLFlBQVksQ0FBQyxJQUFJLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BHLE1BQU0sY0FBYyxHQUEyQixFQUFFLENBQUM7Z0JBQ2xELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUU7b0JBQzVCLGNBQWMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFD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