cnpmcore
Version:
169 lines • 15.6 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);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PackageMetaChanged = exports.PackageMaintainerRemoved = exports.PackageMaintainerChanged = exports.PackageTagRemoved = exports.PackageTagChanged = exports.PackageTagAdded = exports.PackageVersionRemoved = exports.PackageVersionAdded = exports.PackageUnpublished = void 0;
const tegg_1 = require("@eggjs/tegg");
const index_1 = require("./index");
const ChangeRepository_1 = require("../../repository/ChangeRepository");
const Change_1 = require("../entity/Change");
const HookEvent_1 = require("../entity/HookEvent");
const Task_1 = require("../entity/Task");
const TaskService_1 = require("../service/TaskService");
class ChangesStreamEvent {
get hookEnable() {
return this.config.cnpmcore.hookEnable;
}
async addChange(type, fullname, data) {
const change = Change_1.Change.create({
type,
targetName: fullname,
data,
});
await this.changeRepository.addChange(change);
return change;
}
}
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", ChangeRepository_1.ChangeRepository)
], ChangesStreamEvent.prototype, "changeRepository", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", TaskService_1.TaskService)
], ChangesStreamEvent.prototype, "taskService", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", Object)
], ChangesStreamEvent.prototype, "config", void 0);
let PackageUnpublished = class PackageUnpublished extends ChangesStreamEvent {
async handle(fullname) {
const change = await this.addChange(index_1.PACKAGE_UNPUBLISHED, fullname, {});
if (this.hookEnable) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createUnpublishEvent(fullname, change.changeId));
await this.taskService.createTask(task, true);
}
}
};
exports.PackageUnpublished = PackageUnpublished;
exports.PackageUnpublished = PackageUnpublished = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_UNPUBLISHED)
], PackageUnpublished);
let PackageVersionAdded = class PackageVersionAdded extends ChangesStreamEvent {
async handle(fullname, version, tag) {
const change = await this.addChange(index_1.PACKAGE_VERSION_ADDED, fullname, { version });
if (this.hookEnable) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createPublishEvent(fullname, change.changeId, version, tag));
await this.taskService.createTask(task, true);
}
}
};
exports.PackageVersionAdded = PackageVersionAdded;
exports.PackageVersionAdded = PackageVersionAdded = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_VERSION_ADDED)
], PackageVersionAdded);
let PackageVersionRemoved = class PackageVersionRemoved extends ChangesStreamEvent {
async handle(fullname, version, tag) {
const change = await this.addChange(index_1.PACKAGE_VERSION_REMOVED, fullname, { version });
if (this.hookEnable) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createUnpublishEvent(fullname, change.changeId, version, tag));
await this.taskService.createTask(task, true);
}
}
};
exports.PackageVersionRemoved = PackageVersionRemoved;
exports.PackageVersionRemoved = PackageVersionRemoved = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_VERSION_REMOVED)
], PackageVersionRemoved);
let PackageTagAdded = class PackageTagAdded extends ChangesStreamEvent {
async handle(fullname, tag) {
const change = await this.addChange(index_1.PACKAGE_TAG_ADDED, fullname, { tag });
if (this.hookEnable) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createDistTagEvent(fullname, change.changeId, tag));
await this.taskService.createTask(task, true);
}
}
};
exports.PackageTagAdded = PackageTagAdded;
exports.PackageTagAdded = PackageTagAdded = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_TAG_ADDED)
], PackageTagAdded);
let PackageTagChanged = class PackageTagChanged extends ChangesStreamEvent {
async handle(fullname, tag) {
const change = await this.addChange(index_1.PACKAGE_TAG_CHANGED, fullname, { tag });
if (this.hookEnable) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createDistTagEvent(fullname, change.changeId, tag));
await this.taskService.createTask(task, true);
}
}
};
exports.PackageTagChanged = PackageTagChanged;
exports.PackageTagChanged = PackageTagChanged = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_TAG_CHANGED)
], PackageTagChanged);
let PackageTagRemoved = class PackageTagRemoved extends ChangesStreamEvent {
async handle(fullname, tag) {
const change = await this.addChange(index_1.PACKAGE_TAG_REMOVED, fullname, { tag });
if (this.hookEnable) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createDistTagRmEvent(fullname, change.changeId, tag));
await this.taskService.createTask(task, true);
}
}
};
exports.PackageTagRemoved = PackageTagRemoved;
exports.PackageTagRemoved = PackageTagRemoved = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_TAG_REMOVED)
], PackageTagRemoved);
let PackageMaintainerChanged = class PackageMaintainerChanged extends ChangesStreamEvent {
async handle(fullname, maintainers) {
const change = await this.addChange(index_1.PACKAGE_MAINTAINER_CHANGED, fullname, {});
// TODO 应该比较差值,而不是全量推送
if (this.hookEnable) {
for (const maintainer of maintainers) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createOwnerEvent(fullname, change.changeId, maintainer.name));
await this.taskService.createTask(task, true);
}
}
}
};
exports.PackageMaintainerChanged = PackageMaintainerChanged;
exports.PackageMaintainerChanged = PackageMaintainerChanged = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_MAINTAINER_CHANGED)
], PackageMaintainerChanged);
let PackageMaintainerRemoved = class PackageMaintainerRemoved extends ChangesStreamEvent {
async handle(fullname, maintainer) {
const change = await this.addChange(index_1.PACKAGE_MAINTAINER_REMOVED, fullname, { maintainer });
if (this.hookEnable) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createOwnerRmEvent(fullname, change.changeId, maintainer));
await this.taskService.createTask(task, true);
}
}
};
exports.PackageMaintainerRemoved = PackageMaintainerRemoved;
exports.PackageMaintainerRemoved = PackageMaintainerRemoved = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_MAINTAINER_REMOVED)
], PackageMaintainerRemoved);
let PackageMetaChanged = class PackageMetaChanged extends ChangesStreamEvent {
async handle(fullname, meta) {
const change = await this.addChange(index_1.PACKAGE_META_CHANGED, fullname, { ...meta });
const { deprecateds } = meta;
if (this.hookEnable) {
for (const deprecated of deprecateds || []) {
const task = Task_1.Task.createCreateHookTask(HookEvent_1.HookEvent.createDeprecatedEvent(fullname, change.changeId, deprecated.version));
await this.taskService.createTask(task, true);
}
}
}
};
exports.PackageMetaChanged = PackageMetaChanged;
exports.PackageMetaChanged = PackageMetaChanged = __decorate([
(0, tegg_1.Event)(index_1.PACKAGE_META_CHANGED)
], PackageMetaChanged);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhbmdlc1N0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb3JlL2V2ZW50L0NoYW5nZXNTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0Esc0NBQTRDO0FBQzVDLG1DQVVpQjtBQUNqQix3RUFBcUU7QUFDckUsNkNBQTBDO0FBQzFDLG1EQUFnRDtBQUNoRCx5Q0FBc0M7QUFFdEMsd0RBQXFEO0FBRXJELE1BQU0sa0JBQWtCO0lBVXRCLElBQWMsVUFBVTtRQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxJQUFZO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLGVBQU0sQ0FBQyxNQUFNLENBQUM7WUFDM0IsSUFBSTtZQUNKLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLElBQUk7U0FDTCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBckJrQjtJQURoQixJQUFBLGFBQU0sR0FBRTs4QkFDMEIsbUNBQWdCOzREQUFDO0FBR2pDO0lBRGxCLElBQUEsYUFBTSxHQUFFOzhCQUN1Qix5QkFBVzt1REFBQztBQUd6QjtJQURsQixJQUFBLGFBQU0sR0FBRTs7a0RBQytCO0FBa0JuQyxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFtQixTQUFRLGtCQUFrQjtJQUN4RCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWdCO1FBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBbUIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFF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