cnpmcore
Version:
Private NPM Registry for Enterprise
103 lines • 9.05 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);
};
import { Inject } from 'egg';
import { Schedule, ScheduleType } from 'egg/schedule';
import { SyncMode } from "../../common/constants.js";
import { getScopeAndName } from "../../common/PackageUtil.js";
// https://github.com/cnpm/cnpmcore/issues/9
let CheckRecentlyUpdatedPackages = class CheckRecentlyUpdatedPackages {
async subscribe() {
const notAllowUpdateModeList = [SyncMode.none, SyncMode.admin, SyncMode.proxy];
if (notAllowUpdateModeList.includes(this.config.cnpmcore.syncMode) ||
!this.config.cnpmcore.enableCheckRecentlyUpdated)
return;
const pageSize = 36;
const pageCount = this.config.env === 'unittest' ? 2 : 5;
for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {
const offset = pageSize * pageIndex;
const pageUrl = `https://www.npmjs.com/browse/updated?offset=${offset}`;
let html = '';
try {
const { status, data } = await this.httpClient.request(pageUrl, {
followRedirect: true,
timeout: 10_000,
});
this.logger.info('[CheckRecentlyUpdatedPackages.subscribe][%s] request %s status: %s, data size: %s', pageIndex, pageUrl, status, data.length);
if (status === 200) {
html = data.toString();
}
}
catch (err) {
this.logger.info('[CheckRecentlyUpdatedPackages.subscribe:error][%s] request %s error: %s', pageIndex, pageUrl, err);
this.logger.error(err);
continue;
}
const matches = /window\.__context__ = ([^<]+?)<\/script>/.exec(html);
if (!matches)
continue;
try {
const data = JSON.parse(matches[1]);
const packages = data.context.packages || [];
if (Array.isArray(packages)) {
this.logger.info('[CheckRecentlyUpdatedPackages.subscribe][%s] parse %d packages on %s', pageIndex, packages.length, pageUrl);
for (const pkg of packages) {
// skip update when package does not exist
if (this.config.cnpmcore.syncMode === 'exist') {
const [scope, name] = getScopeAndName(pkg.name);
const pkgId = await this.packageRepository.findPackageId(scope, name);
if (!pkgId) {
continue;
}
}
const task = await this.packageSyncerService.createTask(pkg.name, {
tips: `Sync cause by recently updated packages ${pageUrl}`,
});
this.logger.info('[CheckRecentlyUpdatedPackages.subscribe:createTask][%s] taskId: %s, targetName: %s', pageIndex, task.taskId, task.targetName);
}
}
}
catch (err) {
this.logger.info('[CheckRecentlyUpdatedPackages.subscribe:error][%s] parse %s context json error: %s', pageIndex, pageUrl, err);
this.logger.error(err);
}
}
}
};
__decorate([
Inject(),
__metadata("design:type", Function)
], CheckRecentlyUpdatedPackages.prototype, "packageSyncerService", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], CheckRecentlyUpdatedPackages.prototype, "packageRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Object)
], CheckRecentlyUpdatedPackages.prototype, "config", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], CheckRecentlyUpdatedPackages.prototype, "logger", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], CheckRecentlyUpdatedPackages.prototype, "httpClient", void 0);
CheckRecentlyUpdatedPackages = __decorate([
Schedule({
type: ScheduleType.WORKER,
scheduleData: {
// every 5 mins
interval: 60_000 * 5,
},
})
], CheckRecentlyUpdatedPackages);
export { CheckRecentlyUpdatedPackages };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hlY2tSZWNlbnRseVVwZGF0ZWRQYWNrYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9wb3J0L3NjaGVkdWxlL0NoZWNrUmVjZW50bHlVcGRhdGVkUGFja2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBb0MsTUFBTSxLQUFLLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJOUQsNENBQTRDO0FBUXJDLElBQU0sNEJBQTRCLEdBQWxDLE1BQU0sNEJBQTRCO0lBZXZDLEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0UsSUFDRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQzlELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCO1lBRWhELE9BQU87UUFDVCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxLQUFLLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztZ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