UNPKG

cnpmcore

Version:

Private NPM Registry for Enterprise

172 lines 15.5 kB
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); }; import { Event, Inject } from 'egg'; import { Change } from "../entity/Change.js"; import { HookEvent } from "../entity/HookEvent.js"; import { Task } from "../entity/Task.js"; import { PACKAGE_MAINTAINER_CHANGED, PACKAGE_MAINTAINER_REMOVED, PACKAGE_META_CHANGED, PACKAGE_TAG_ADDED, PACKAGE_TAG_CHANGED, PACKAGE_TAG_REMOVED, PACKAGE_UNPUBLISHED, PACKAGE_VERSION_ADDED, PACKAGE_VERSION_REMOVED, } from "./index.js"; class ChangesStreamEvent { get hookEnable() { return this.config.cnpmcore.hookEnable; } async addChange(type, fullname, data) { const change = Change.create({ type, targetName: fullname, data, }); await this.changeRepository.addChange(change); return change; } } __decorate([ Inject(), __metadata("design:type", Function) ], ChangesStreamEvent.prototype, "changeRepository", void 0); __decorate([ Inject(), __metadata("design:type", Function) ], ChangesStreamEvent.prototype, "taskService", void 0); __decorate([ Inject(), __metadata("design:type", Object) ], ChangesStreamEvent.prototype, "config", void 0); let PackageUnpublishedChangesStreamEvent = class PackageUnpublishedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname) { const change = await this.addChange(PACKAGE_UNPUBLISHED, fullname, {}); if (this.hookEnable) { const task = Task.createCreateHookTask(HookEvent.createUnpublishEvent(fullname, change.changeId)); await this.taskService.createTask(task, true); } } }; PackageUnpublishedChangesStreamEvent = __decorate([ Event(PACKAGE_UNPUBLISHED) ], PackageUnpublishedChangesStreamEvent); export { PackageUnpublishedChangesStreamEvent }; let PackageVersionAddedChangesStreamEvent = class PackageVersionAddedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, version, tag) { const change = await this.addChange(PACKAGE_VERSION_ADDED, fullname, { version, }); if (this.hookEnable) { const task = Task.createCreateHookTask(HookEvent.createPublishEvent(fullname, change.changeId, version, tag)); await this.taskService.createTask(task, true); } } }; PackageVersionAddedChangesStreamEvent = __decorate([ Event(PACKAGE_VERSION_ADDED) ], PackageVersionAddedChangesStreamEvent); export { PackageVersionAddedChangesStreamEvent }; let PackageVersionRemovedChangesStreamEvent = class PackageVersionRemovedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, version, tag) { const change = await this.addChange(PACKAGE_VERSION_REMOVED, fullname, { version, }); if (this.hookEnable) { const task = Task.createCreateHookTask(HookEvent.createUnpublishEvent(fullname, change.changeId, version, tag)); await this.taskService.createTask(task, true); } } }; PackageVersionRemovedChangesStreamEvent = __decorate([ Event(PACKAGE_VERSION_REMOVED) ], PackageVersionRemovedChangesStreamEvent); export { PackageVersionRemovedChangesStreamEvent }; let PackageTagAddedChangesStreamEvent = class PackageTagAddedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, tag) { const change = await this.addChange(PACKAGE_TAG_ADDED, fullname, { tag }); if (this.hookEnable) { const task = Task.createCreateHookTask(HookEvent.createDistTagEvent(fullname, change.changeId, tag)); await this.taskService.createTask(task, true); } } }; PackageTagAddedChangesStreamEvent = __decorate([ Event(PACKAGE_TAG_ADDED) ], PackageTagAddedChangesStreamEvent); export { PackageTagAddedChangesStreamEvent }; let PackageTagChangedChangesStreamEvent = class PackageTagChangedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, tag) { const change = await this.addChange(PACKAGE_TAG_CHANGED, fullname, { tag }); if (this.hookEnable) { const task = Task.createCreateHookTask(HookEvent.createDistTagEvent(fullname, change.changeId, tag)); await this.taskService.createTask(task, true); } } }; PackageTagChangedChangesStreamEvent = __decorate([ Event(PACKAGE_TAG_CHANGED) ], PackageTagChangedChangesStreamEvent); export { PackageTagChangedChangesStreamEvent }; let PackageTagRemovedChangesStreamEvent = class PackageTagRemovedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, tag) { const change = await this.addChange(PACKAGE_TAG_REMOVED, fullname, { tag }); if (this.hookEnable) { const task = Task.createCreateHookTask(HookEvent.createDistTagRmEvent(fullname, change.changeId, tag)); await this.taskService.createTask(task, true); } } }; PackageTagRemovedChangesStreamEvent = __decorate([ Event(PACKAGE_TAG_REMOVED) ], PackageTagRemovedChangesStreamEvent); export { PackageTagRemovedChangesStreamEvent }; let PackageMaintainerChangedChangesStreamEvent = class PackageMaintainerChangedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, maintainers) { const change = await this.addChange(PACKAGE_MAINTAINER_CHANGED, fullname, {}); // TODO 应该比较差值,而不是全量推送 if (this.hookEnable) { for (const maintainer of maintainers) { const task = Task.createCreateHookTask(HookEvent.createOwnerEvent(fullname, change.changeId, maintainer.name)); await this.taskService.createTask(task, true); } } } }; PackageMaintainerChangedChangesStreamEvent = __decorate([ Event(PACKAGE_MAINTAINER_CHANGED) ], PackageMaintainerChangedChangesStreamEvent); export { PackageMaintainerChangedChangesStreamEvent }; let PackageMaintainerRemovedChangesStreamEvent = class PackageMaintainerRemovedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, maintainer) { const change = await this.addChange(PACKAGE_MAINTAINER_REMOVED, fullname, { maintainer, }); if (this.hookEnable) { const task = Task.createCreateHookTask(HookEvent.createOwnerRmEvent(fullname, change.changeId, maintainer)); await this.taskService.createTask(task, true); } } }; PackageMaintainerRemovedChangesStreamEvent = __decorate([ Event(PACKAGE_MAINTAINER_REMOVED) ], PackageMaintainerRemovedChangesStreamEvent); export { PackageMaintainerRemovedChangesStreamEvent }; let PackageMetaChangedChangesStreamEvent = class PackageMetaChangedChangesStreamEvent extends ChangesStreamEvent { async handle(fullname, meta) { const change = await this.addChange(PACKAGE_META_CHANGED, fullname, { ...meta, }); const { deprecateds } = meta; if (this.hookEnable) { for (const deprecated of deprecateds || []) { const task = Task.createCreateHookTask(HookEvent.createDeprecatedEvent(fullname, change.changeId, deprecated.version)); await this.taskService.createTask(task, true); } } } }; PackageMetaChangedChangesStreamEvent = __decorate([ Event(PACKAGE_META_CHANGED) ], PackageMetaChangedChangesStreamEvent); export { PackageMetaChangedChangesStreamEvent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhbmdlc1N0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb3JlL2V2ZW50L0NoYW5nZXNTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxLQUFLLENBQUM7QUFHNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekMsT0FBTyxFQUVMLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsdUJBQXVCLEdBQ3hCLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE1BQU0sa0JBQWtCO0lBVXRCLElBQWMsVUFBVTtRQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxJQUFZO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDM0IsSUFBSTtZQUNKLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLElBQUk7U0FDTCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBckJrQjtJQURoQixNQUFNLEVBQUU7OzREQUMyQztBQUdqQztJQURsQixNQUFNLEVBQUU7O3VEQUNtQztBQUd6QjtJQURsQixNQUFNLEVBQUU7O2tEQUN5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