UNPKG

abap-adt-api

Version:

Interface to Abap Developer Tools webservice

62 lines (61 loc) 2.64 kB
"use strict"; 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;