abap-adt-api
Version:
Interface to Abap Developer Tools webservice
62 lines (61 loc) • 2.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.revisions = exports.getRevisionLink = void 0;
const AdtException_1 = require("../AdtException");
const utilities_1 = require("../utilities");
const objectstructure_1 = require("./objectstructure");
function extractRevisionLink(links) {
return links.find(l => l.rel === "http://www.sap.com/adt/relations/versions");
}
function getRevisionLink(struct, includeName) {
let link;
if ((0, objectstructure_1.isClassStructure)(struct)) {
const iname = includeName || "main";
const include = struct.includes.find(i => i["class:includeType"] === iname);
if (include)
link = extractRevisionLink(include.links);
}
else {
link = extractRevisionLink(struct.links);
}
if (link)
return (0, utilities_1.followUrl)(struct.objectUrl, link.href);
return "";
}
exports.getRevisionLink = getRevisionLink;
const extractVersion = (entry) => {
const ADTTYPE = "application/vnd.sap.adt.transportrequests.v1+xml";
const base = (0, utilities_1.xmlNode)(entry, "atom:link");
if (Array.isArray(base)) {
const vlink = base.find(l => l["@_type"] === ADTTYPE) || base[0];
return (0, utilities_1.xmlNode)(vlink, "@_adtcore:name") || "";
}
else
return (0, utilities_1.xmlNode)(base, "@_adtcore:name") || "";
};
async function revisions(h, objectUrl, includeName) {
const str = (0, utilities_1.isString)(objectUrl)
? await (0, objectstructure_1.objectStructure)(h, objectUrl)
: objectUrl;
const name = str.metaData["adtcore:name"];
const revisionUrl = getRevisionLink(str, includeName);
if (!revisionUrl)
throw (0, AdtException_1.adtException)(`Revision URL not found for object ${name}`);
const headers = { Accept: "application/atom+xml;type=feed" };
const response = await h.request(revisionUrl, {
method: "GET",
headers
});
const raw = (0, utilities_1.fullParse)(response.body);
const versions = (0, utilities_1.xmlArray)(raw, "atom:feed", "atom:entry").map((entry) => {
const uri = (0, utilities_1.xmlNode)(entry, "atom:content", "@_src") || "";
const version = extractVersion(entry);
const versionTitle = (0, utilities_1.xmlNode)(entry, "atom:title") || "";
const date = (0, utilities_1.xmlNode)(entry, "atom:updated") || "";
const author = (0, utilities_1.xmlNode)(entry, "atom:author", "atom:name");
const r = { uri, version, versionTitle, date, author };
return r;
});
return versions;
}
exports.revisions = revisions;