cnpmcore
Version:
107 lines • 9.37 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.CheckRecentlyUpdatedPackages = void 0;
const schedule_1 = require("@eggjs/tegg/schedule");
const tegg_1 = require("@eggjs/tegg");
const PackageSyncerService_1 = require("../../core/service/PackageSyncerService");
const PackageRepository_1 = require("../../repository/PackageRepository");
const PackageUtil_1 = require("../../common/PackageUtil");
const constants_1 = require("../../common/constants");
// https://github.com/cnpm/cnpmcore/issues/9
let CheckRecentlyUpdatedPackages = class CheckRecentlyUpdatedPackages {
async subscribe() {
const notAllowUpdateModeList = [constants_1.SyncMode.none, constants_1.SyncMode.admin];
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: 10000,
});
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 matchs = /window\.__context__ = ([^<]+?)<\/script>/.exec(html);
if (!matchs)
continue;
try {
const data = JSON.parse(matchs[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] = (0, PackageUtil_1.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);
}
}
}
};
exports.CheckRecentlyUpdatedPackages = CheckRecentlyUpdatedPackages;
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", PackageSyncerService_1.PackageSyncerService)
], CheckRecentlyUpdatedPackages.prototype, "packageSyncerService", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", PackageRepository_1.PackageRepository)
], CheckRecentlyUpdatedPackages.prototype, "packageRepository", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", Object)
], CheckRecentlyUpdatedPackages.prototype, "config", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", Object)
], CheckRecentlyUpdatedPackages.prototype, "logger", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", Object)
], CheckRecentlyUpdatedPackages.prototype, "httpclient", void 0);
exports.CheckRecentlyUpdatedPackages = CheckRecentlyUpdatedPackages = __decorate([
(0, schedule_1.Schedule)({
type: schedule_1.ScheduleType.WORKER,
scheduleData: {
// every 5 mins
interval: 60000 * 5,
},
})
], CheckRecentlyUpdatedPackages);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hlY2tSZWNlbnRseVVwZGF0ZWRQYWNrYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9wb3J0L3NjaGVkdWxlL0NoZWNrUmVjZW50bHlVcGRhdGVkUGFja2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQThFO0FBQzlFLHNDQUFxQztBQUNyQyxrRkFBK0U7QUFDL0UsMEVBQXVFO0FBQ3ZFLDBEQUEyRDtBQUMzRCxzREFBa0Q7QUFFbEQsNENBQTRDO0FBUXJDLElBQU0sNEJBQTRCLEdBQWxDLE1BQU0sNEJBQTRCO0lBZXZDLEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxzQkFBc0IsR0FBRyxDQUFFLG9CQUFRLENBQUMsSUFBSSxFQUFFLG9CQUFRLENBQUMsS0FBSyxDQUFFLENBQUM7UUFDakUsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEI7WUFBRSxPQUFPO1FBQy9ILE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELEtBQUssSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDMUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUNwQyxNQUFNLE9BQU8sR0FBRywrQ0FBK0MsTUFBTSxFQUFFLENBQUM7WUFDeEUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2QsSUFBSTtnQkFDRixNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFH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