renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
66 lines (65 loc) • 2.24 kB
JavaScript
import { logger } from "../../../../logger/index.js";
import { createCacheReadStream } from "../../../../util/fs/index.js";
import { buildReleaseResult, formatRpmVersion, getCachedGunzippedFile } from "./common.js";
import sax from "sax";
//#region lib/modules/datasource/rpm/providers/xml.ts
var RpmXmlMetadataProvider = class {
http;
constructor(http) {
this.http = http;
}
async getReleases(primaryGzipUrl, packageName) {
const primaryXmlFile = await getCachedGunzippedFile(this.http, primaryGzipUrl, "xml");
const releases = /* @__PURE__ */ new Set();
let insidePackage = false;
let isTargetPackage = false;
let insideName = false;
const saxParser = sax.createStream(true, {
lowercase: true,
trim: true
});
saxParser.on("opentag", (node) => {
if (node.name === "package" && node.attributes.type === "rpm") {
insidePackage = true;
isTargetPackage = false;
}
if (insidePackage && node.name === "name") insideName = true;
if (insidePackage && isTargetPackage && node.name === "version") {
const version = formatRpmVersion(node.attributes.ver, node.attributes.rel);
if (version) releases.add(version);
}
});
saxParser.on("text", (text) => {
if (insidePackage && insideName && text.trim() === packageName) isTargetPackage = true;
});
saxParser.on("closetag", (tag) => {
if (tag === "name" && insidePackage) insideName = false;
if (tag === "package") {
insidePackage = false;
isTargetPackage = false;
}
});
await new Promise((resolve, reject) => {
let settled = false;
saxParser.on("error", (err) => {
if (settled) return;
settled = true;
logger.debug(`SAX parsing error in ${primaryGzipUrl}: ${err.message}`);
setImmediate(() => saxParser.removeAllListeners());
reject(err);
});
saxParser.on("end", () => {
settled = true;
setImmediate(() => saxParser.removeAllListeners());
resolve();
});
createCacheReadStream(primaryXmlFile).pipe(saxParser);
});
const result = buildReleaseResult(releases);
if (!result) logger.trace(`No releases found for package ${packageName} in ${primaryGzipUrl}`);
return result;
}
};
//#endregion
export { RpmXmlMetadataProvider };
//# sourceMappingURL=xml.js.map