UNPKG

cnpmcore

Version:
172 lines 13.5 kB
"use strict"; 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 __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BinarySyncController = void 0; const tegg_1 = require("@eggjs/tegg"); const path_1 = __importDefault(require("path")); const egg_errors_1 = require("egg-errors"); const AbstractController_1 = require("./AbstractController"); const BinarySyncerService_1 = require("../../core/service/BinarySyncerService"); const binaries_1 = __importDefault(require("../../../config/binaries")); const typebox_1 = require("../typebox"); let BinarySyncController = class BinarySyncController extends AbstractController_1.AbstractController { async showBinaryHTML(ctx) { ctx.type = 'html'; return ctx.app.binaryHTML; } async listBinaries() { return Object.entries(binaries_1.default).map(([binaryName, binaryConfig]) => { return { name: `${binaryName}/`, category: `${binaryConfig.category}/`, description: binaryConfig.description, distUrl: binaryConfig.distUrl, repoUrl: /^https?:\/\//.test(binaryConfig.repo) ? binaryConfig.repo : `https://github.com/${binaryConfig.repo}`, type: 'dir', url: `${this.config.cnpmcore.registry}/-/binary/${binaryConfig.category}/`, }; }); } async showBinary(ctx, binaryName, subpath) { // check binaryName valid try { ctx.tValidate(typebox_1.BinaryNameRule, binaryName); } catch { throw new egg_errors_1.NotFoundError(`Binary "${binaryName}" not found`); } subpath = subpath || '/'; if (subpath === '/') { const items = await this.binarySyncerService.listRootBinaries(binaryName); return this.formatItems(items); } try { ctx.tValidate(typebox_1.BinarySubpathRule, subpath); } catch { throw new egg_errors_1.NotFoundError(`Binary "${binaryName}/${subpath}" not found`); } subpath = `/${subpath}`; const parsed = path_1.default.parse(subpath); const parent = parsed.dir === '/' ? '/' : `${parsed.dir}/`; const name = subpath.endsWith('/') ? `${parsed.base}/` : parsed.base; // 首先查询 binary === category 的情况 let binary = await this.binarySyncerService.findBinary(binaryName, parent, name); if (!binary) { // 查询不到再去查询 mergeCategory 的情况 const category = binaries_1.default?.[binaryName]?.category; if (category) { // canvas/v2.6.1/canvas-v2.6.1-node-v57-linux-glibc-x64.tar.gz // -> node-canvas-prebuilt/v2.6.1/node-canvas-prebuilt-v2.6.1-node-v57-linux-glibc-x64.tar.gz binary = await this.binarySyncerService.findBinary(category, parent, name.replace(new RegExp(`^${binaryName}-`), `${category}-`)); } } if (!binary) { throw new egg_errors_1.NotFoundError(`Binary "${binaryName}${subpath}" not found`); } if (binary.isDir) { const items = await this.binarySyncerService.listDirBinaries(binary); return this.formatItems(items); } // download file const urlOrStream = await this.binarySyncerService.downloadBinary(binary); if (!urlOrStream) { throw new egg_errors_1.NotFoundError(`Binary "${binaryName}${subpath}" not found`); } if (typeof urlOrStream === 'string') { ctx.redirect(urlOrStream); return; } ctx.attachment(name); return urlOrStream; } async showBinaryIndex(ctx, binaryName) { // check binaryName valid try { ctx.tValidate(typebox_1.BinaryNameRule, binaryName); } catch (e) { throw new egg_errors_1.NotFoundError(`Binary "${binaryName}" not found`); } return await this.showBinary(ctx, binaryName, '/'); } formatItems(items) { return items.map(item => { return { id: item.binaryId, category: item.category, name: item.name, date: item.date, type: item.isDir ? 'dir' : 'file', size: item.isDir ? undefined : item.size, url: `${this.config.cnpmcore.registry}/-/binary/${item.category}${item.parent}${item.name}`, modified: item.updatedAt, }; }); } }; exports.BinarySyncController = BinarySyncController; __decorate([ (0, tegg_1.Inject)(), __metadata("design:type", BinarySyncerService_1.BinarySyncerService) ], BinarySyncController.prototype, "binarySyncerService", void 0); __decorate([ (0, tegg_1.HTTPMethod)({ path: '/binary.html', method: tegg_1.HTTPMethodEnum.GET, }), __param(0, (0, tegg_1.Context)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], BinarySyncController.prototype, "showBinaryHTML", null); __decorate([ (0, tegg_1.HTTPMethod)({ path: '/-/binary/', method: tegg_1.HTTPMethodEnum.GET, }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Promise) ], BinarySyncController.prototype, "listBinaries", null); __decorate([ (0, tegg_1.HTTPMethod)({ path: '/-/binary/:binaryName(@[^/]{1,220}\/[^/]{1,220}|[^@/]{1,220})/:subpath(.*)', method: tegg_1.HTTPMethodEnum.GET, }), __param(0, (0, tegg_1.Context)()), __param(1, (0, tegg_1.HTTPParam)()), __param(2, (0, tegg_1.HTTPParam)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String, String]), __metadata("design:returntype", Promise) ], BinarySyncController.prototype, "showBinary", null); __decorate([ (0, tegg_1.HTTPMethod)({ path: '/-/binary/:binaryName(@[^/]{1,220}\/[^/]{1,220}|[^@/]{1,220})', method: tegg_1.HTTPMethodEnum.GET, }), __param(0, (0, tegg_1.Context)()), __param(1, (0, tegg_1.HTTPParam)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String]), __metadata("design:returntype", Promise) ], BinarySyncController.prototype, "showBinaryIndex", null); exports.BinarySyncController = BinarySyncController = __decorate([ (0, tegg_1.HTTPController)() ], BinarySyncController); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluYXJ5U3luY0NvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvcG9ydC9jb250cm9sbGVyL0JpbmFyeVN5bmNDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNDQVFxQjtBQUNyQixnREFBd0I7QUFDeEIsMkNBQTJDO0FBQzNDLDZEQUEwRDtBQUMxRCxnRkFBNkU7QUFFN0Usd0VBQWdFO0FBQ2hFLHdDQUErRDtBQUd4RCxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFxQixTQUFRLHVDQUFrQjtJQVFwRCxBQUFOLEtBQUssQ0FBQyxjQUFjLENBQVksR0FBZTtRQUM3QyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFNSyxBQUFOLEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxVQUFVLEVBQUUsWUFBWSxDQUFFLEVBQUUsRUFBRTtZQUNuRSxPQUFPO2dCQUNMLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRztnQkFDdEIsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDLFFBQVEsR0FBRztnQkFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNyQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU87Z0JBQzdCLE9BQU8sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0JBQy9HLElBQUksRUFBRSxLQUFLO2dCQUNYLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsYUFBYSxZQUFZLENBQUMsUUFBUSxHQUFHO2FBQzNFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFNSyxBQUFOLEtBQUssQ0FBQyxVQUFVLENBQVksR0FBZSxFQUFlLFVBQXNCLEVBQWUsT0FBZTtRQUM1Ryx5QkFBeUI7UUFDekIsSUFBSTtZQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsd0JBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUMzQztRQUFDLE1BQU07WUFDTixNQUFNLElBQUksMEJBQWEsQ0FBQyxXQUFXLFVBQVUsYUFBYSxDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLEdBQUcsT0FBTyxJQUFJLEdBQUcsQ0FBQztRQUN6QixJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUU7WUFDbkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSTtZQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsMkJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0M7UUFBQyxNQUFNO1lBQ04sTUFBTSxJQUFJLDBCQUFhLENBQUMsV0FBVyxVQUFVLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQztTQUN4RTtRQUNELE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckUsK0JBQStCO1FBQy9CLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCw2QkFBNkI7WUFDN0IsTUFBTSxRQUFRLEdBQUcsa0JBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQztZQUNsRCxJQUFJLFFBQVEsRUFBRTtnQkFDWiw4REFBOEQ7Z0JBQzlELDZGQUE2RjtnQkFDN0YsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ25JO1NBQ0Y7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxJQUFJLDBCQUFhLENBQUMsV0FBVyxVQUFVLEdBQUcsT0FBTyxhQUFhLENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNoQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsZ0JBQWdCO1FBQ2hCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSwwQkFBYSxDQUFDLFdBQVcsVUFBVSxHQUFHLE9BQU8sYUFBYSxDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRTtZQUNuQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFCLE9BQU87U0FDUjtRQUNELEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQU1LLEFBQU4sS0FBSyxDQUFDLGVBQWUsQ0FBWSxHQUFlLEVBQWUsVUFBc0I7UUFDbkYseUJBQXlCO1FBQ3pCLElBQUk7WUFDRixHQUFHLENBQUMsU0FBUyxDQUFDLHdCQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDM0M7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSwwQkFBYSxDQUFDLFdBQVcsVUFBVSxhQUFhLENBQUMsQ0FBQztTQUM3RDtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFlO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixPQUFPO2dCQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUN4QyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLGFBQWEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQzNGLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUzthQUN6QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQTtBQXJIWSxvREFBb0I7QUFFdkI7SUFEUCxJQUFBLGFBQU0sR0FBRTs4QkFDb0IseUNBQW1CO2lFQUFDO0FBTTNDO0lBSkwsSUFBQSxpQkFBVSxFQUFDO1FBQ1YsSUFBSSxFQUFFLGNBQWM7UUFDcEIsTUFBTSxFQUFFLHFCQUFjLENBQUMsR0FBRztLQUMzQixDQUFDO0lBQ29CLFdBQUEsSUFBQSxjQUFPLEdBQUUsQ0FBQTs7OzswREFHOUI7QUFNSztJQUpMLElBQUEsaUJBQVUsRUFBQztRQUNWLElBQUksRUFBRSxZQUFZO1FBQ2xCLE1BQU0sRUFBRSxxQkFBYyxDQUFDLEdBQUc7S0FDM0IsQ0FBQzs7Ozt3REFhRDtBQU1LO0lBSkwsSUFBQSxpQkFBVSxFQUFDO1FBQ1YsSUFBSSxFQUFFLDRFQUE0RTtRQUNsRixNQUFNLEVBQUUscUJBQWMsQ0FBQyxHQUFHO0tBQzNCLENBQUM7SUFDZ0IsV0FBQSxJQUFBLGNBQU8sR0FBRSxDQUFBO0lBQW1CLFdBQUEsSUFBQSxnQkFBUyxHQUFFLENBQUE7SUFBMEIsV0FBQSxJQUFBLGdCQUFTLEdBQUUsQ0FBQTs7OztzREFvRDdGO0FBTUs7SUFKTCxJQUFBLGlCQUFVLEVBQUM7UUFDVixJQUFJLEVBQUUsK0RBQStEO1FBQ3JFLE1BQU0sRUFBRSxxQkFBYyxDQUFDLEdBQUc7S0FDM0IsQ0FBQztJQUNxQixXQUFBLElBQUEsY0FBTyxHQUFFLENBQUE7SUFBbUIsV0FBQSxJQUFBLGdCQUFTLEdBQUUsQ0FBQTs7OzsyREFRN0Q7K0JBckdVLG9CQUFvQjtJQURoQyxJQUFBLHFCQUFjLEdBQUU7R0FDSixvQkFBb0IsQ0FxSGhDIn0=