cnpmcore
Version:
70 lines • 6.04 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;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CnpmjsorgChangesStream = void 0;
const tegg_1 = require("@eggjs/tegg");
const Registry_1 = require("../../../common/enum/Registry");
const egg_errors_1 = require("egg-errors");
const AbstractChangesStream_1 = require("./AbstractChangesStream");
const MAX_LIMIT = 10000;
let CnpmjsorgChangesStream = class CnpmjsorgChangesStream extends AbstractChangesStream_1.AbstractChangeStream {
// cnpmjsorg 未实现 update_seq 字段
// 默认返回当前时间戳字符串
async getInitialSince(registry) {
const since = String((new Date()).getTime());
this.logger.warn(`[CnpmjsorgChangesStream.getInitialSince] since: ${since}, skip query ${registry.changeStream}`);
return since;
}
async tryFetch(registry, since, limit = 1000) {
if (limit > MAX_LIMIT) {
throw new egg_errors_1.E500(`limit too large, current since: ${since}, limit: ${limit}`);
}
const db = this.getChangesStreamUrl(registry, since, limit);
// json mode
const res = await this.httpclient.request(db, {
followRedirect: true,
timeout: 30000,
dataType: 'json',
gzip: true,
});
const { results = [] } = res.data;
if (results?.length >= limit) {
const [first] = results;
const last = results[results.length - 1];
if (first.gmt_modified === last.gmt_modified) {
return await this.tryFetch(registry, since, limit + 1000);
}
}
return res;
}
async *fetchChanges(registry, since) {
// ref: https://github.com/cnpm/cnpmjs.org/pull/1734
// 由于 cnpmjsorg 无法计算准确的 seq
// since 是一个时间戳,需要确保一次返回的结果中首尾两个 gmtModified 不相等
const { data } = await this.tryFetch(registry, since);
if (data.results?.length > 0) {
for (const change of data.results) {
const seq = new Date(change.gmt_modified).getTime() + '';
const fullname = change.id;
if (seq && fullname && seq !== since) {
const change = {
fullname,
seq,
};
yield change;
}
}
}
}
};
exports.CnpmjsorgChangesStream = CnpmjsorgChangesStream;
exports.CnpmjsorgChangesStream = CnpmjsorgChangesStream = __decorate([
(0, tegg_1.SingletonProto)(),
(0, AbstractChangesStream_1.RegistryChangesStream)(Registry_1.RegistryType.Cnpmjsorg)
], CnpmjsorgChangesStream);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ25wbWpzb3JnQ2hhbmdlc1N0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9jb21tb24vYWRhcHRlci9jaGFuZ2VzU3RyZWFtL0NucG1qc29yZ0NoYW5nZXNTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsc0NBQTZDO0FBQzdDLDREQUE2RDtBQUU3RCwyQ0FBa0M7QUFDbEMsbUVBQXNGO0FBRXRGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztBQWNqQixJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUF1QixTQUFRLDRDQUFvQjtJQUU5RCw4QkFBOEI7SUFDOUIsZUFBZTtJQUNmLEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBa0I7UUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbURBQW1ELEtBQUssZ0JBQWdCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBa0IsRUFBRSxLQUFhLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDcEUsSUFBSSxLQUFLLEdBQUcsU0FBUyxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxpQkFBSSxDQUFDLG1DQUFtQyxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM3RTtRQUNELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELFlBQVk7UUFDWixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFlLEVBQUUsRUFBRTtZQUMxRCxjQUFjLEVBQUUsSUFBSTtZQUNwQixPQUFPLEVBQUUsS0FBSztZQUNkLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ2xDLElBQUksT0FBTyxFQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUU7WUFDNUIsTUFBTSxDQUFFLEtBQUssQ0FBRSxHQUFHLE9BQU8sQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDNUMsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDM0Q7U0FDRjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELEtBQUssQ0FBQSxDQUFFLFlBQVksQ0FBQyxRQUFrQixFQUFFLEtBQWE7UUFDbkQsb0RBQW9EO1FBQ3BELDJCQUEyQjtRQUMzQixnREFBZ0Q7UUFDaEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUN6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMzQixJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtvQkFDcEMsTUFBTSxNQUFNLEdBQUc7d0JBQ2IsUUFBUTt3QkFDUixHQUFHO3FCQUNKLENBQUM7b0JBQ0YsTUFBTSxNQUFNLENBQUM7aUJBQ2Q7YUFDRjtTQUNGO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUF0RFksd0RBQXNCO2lDQUF0QixzQkFBc0I7SUFGbEMsSUFBQSxxQkFBYyxHQUFFO0lBQ2hCLElBQUEsNkNBQXFCLEVBQUMsdUJBQVksQ0FBQyxTQUFTLENBQUM7R0FDakMsc0JBQXNCLENBc0RsQyJ9