cnpmcore
Version:
172 lines • 13.5 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 __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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluYXJ5U3luY0NvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvcG9ydC9jb250cm9sbGVyL0JpbmFyeVN5bmNDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNDQVFxQjtBQUNyQixnREFBd0I7QUFDeEIsMkNBQTJDO0FBQzNDLDZEQUEwRDtBQUMxRCxnRkFBNkU7QUFFN0Usd0VBQWdFO0FBQ2hFLHdDQUErRDtBQUd4RCxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFxQixTQUFRLHVDQUFrQjtJQVFwRCxBQUFOLEtBQUssQ0FBQyxjQUFjLENBQVksR0FBZTtRQUM3QyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFNSyxBQUFOLEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxVQUFVLEVBQUUsWUFBWSxDQUFFLEVBQUUsRUFBRTtZQUNuRSxPQUFPO2dCQUNMLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRztnQkFDdEIsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDLFFBQVEsR0FBRztnQkFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNyQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU87Z0JBQzdCLE9BQU8sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0JBQy9HLElBQUksRUFBRSxLQUFLO2dCQUNYLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFB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