UNPKG

cnpmcore

Version:
94 lines 8.12 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); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UpdatePackageController = void 0; const egg_errors_1 = require("egg-errors"); const tegg_1 = require("@eggjs/tegg"); const typebox_1 = require("@sinclair/typebox"); const AbstractController_1 = require("../AbstractController"); const PackageUtil_1 = require("../../../common/PackageUtil"); const PackageManagerService_1 = require("../../../core/service/PackageManagerService"); const MaintainerDataRule = typebox_1.Type.Object({ maintainers: typebox_1.Type.Array(typebox_1.Type.Object({ name: typebox_1.Type.String({ minLength: 1, maxLength: 100 }), email: typebox_1.Type.String({ format: 'email', maxLength: 400 }), }), { minItems: 1 }), }); let UpdatePackageController = class UpdatePackageController extends AbstractController_1.AbstractController { // https://github.com/npm/cli/blob/latest/lib/commands/owner.js#L191 async update(ctx, fullname, data) { if (this.isNpmCommandValid(ctx, 'unpublish')) { // ignore it return { ok: false }; } // only support update maintainer if (!this.isNpmCommandValid(ctx, 'owner')) { const npmCommand = this.getNpmCommand(ctx); throw new egg_errors_1.BadRequestError(`header: npm-command expected "owner", but got "${npmCommand}"`); } ctx.tValidate(MaintainerDataRule, data); const ensureRes = await this.ensurePublishAccess(ctx, fullname, true); const pkg = ensureRes.pkg; const registry = await this.packageManagerService.getSourceRegistry(pkg); // make sure all maintainers exists const users = []; for (const maintainer of data.maintainers) { if (registry?.userPrefix && !maintainer.name.startsWith(registry.userPrefix)) { maintainer.name = `${registry?.userPrefix}${maintainer.name}`; } const user = await this.userRepository.findUserByName(maintainer.name); if (!user) { throw new egg_errors_1.UnprocessableEntityError(`Maintainer "${maintainer.name}" not exists`); } users.push(user); } await this.packageManagerService.replacePackageMaintainersAndDist(pkg, users); return { ok: true }; } getNpmCommand(ctx) { // npm@6: referer: 'xxx [REDACTED]' // npm@>=7: 'npm-command': 'xxx' let npmCommand = ctx.get('npm-command'); if (!npmCommand) { npmCommand = ctx.get('referer').split(' ', 1)[0]; } return npmCommand; } isNpmCommandValid(ctx, expectCommand) { const npmCommand = this.getNpmCommand(ctx); return npmCommand === expectCommand; } }; exports.UpdatePackageController = UpdatePackageController; __decorate([ (0, tegg_1.Inject)(), __metadata("design:type", PackageManagerService_1.PackageManagerService) ], UpdatePackageController.prototype, "packageManagerService", void 0); __decorate([ (0, tegg_1.HTTPMethod)({ // PUT /:fullname/-rev/:rev path: `/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/-rev/:rev`, method: tegg_1.HTTPMethodEnum.PUT, }), __param(0, (0, tegg_1.Context)()), __param(1, (0, tegg_1.HTTPParam)()), __param(2, (0, tegg_1.HTTPBody)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String, Object]), __metadata("design:returntype", Promise) ], UpdatePackageController.prototype, "update", null); exports.UpdatePackageController = UpdatePackageController = __decorate([ (0, tegg_1.HTTPController)() ], UpdatePackageController); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXBkYXRlUGFja2FnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hcHAvcG9ydC9jb250cm9sbGVyL3BhY2thZ2UvVXBkYXRlUGFja2FnZUNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBR29CO0FBQ3BCLHNDQVNxQjtBQUNyQiwrQ0FBaUQ7QUFDakQsOERBQTJEO0FBQzNELDZEQUFrRTtBQUVsRSx1RkFBb0Y7QUFFcEYsTUFBTSxrQkFBa0IsR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JDLFdBQVcsRUFBRSxjQUFJLENBQUMsS0FBSyxDQUFDLGNBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxFQUFFLGNBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxLQUFLLEVBQUUsY0FBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ3hELENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNyQixDQUFDLENBQUM7QUFJSSxJQUFNLHVCQUF1QixHQUE3QixNQUFNLHVCQUF3QixTQUFRLHVDQUFrQjtJQUk3RCxvRUFBb0U7SUFNOUQsQUFBTixLQUFLLENBQUMsTUFBTSxDQUFZLEdBQWUsRUFBZSxRQUFnQixFQUFjLElBQWdCO1FBQ2xHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRTtZQUM1QyxZQUFZO1lBQ1osT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN0QjtRQUNELGlDQUFpQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMs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