UNPKG

abap-adt-api

Version:

Interface to Abap Developer Tools webservice

79 lines (78 loc) 3.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.objectTypes = exports.adtCompatibilityGraph = exports.adtCoreDiscovery = exports.adtDiscovery = void 0; const utilities_1 = require("../utilities"); async function adtDiscovery(h) { const response = await h.request("/sap/bc/adt/discovery"); const ret = (0, utilities_1.fullParse)(response.body); const objects = (0, utilities_1.xmlArray)(ret, "app:service", "app:workspace").map((o) => { return { collection: (0, utilities_1.xmlArray)(o, "app:collection").map((c) => { return { href: c["@_href"], templateLinks: (0, utilities_1.xmlArray)(c, "adtcomp:templateLinks", "adtcomp:templateLink").map(utilities_1.xmlNodeAttr), title: c["atom:title"] }; }), title: o["atom:title"] }; }); return objects; } exports.adtDiscovery = adtDiscovery; async function adtCoreDiscovery(h) { const response = await h.request("/sap/bc/adt/core/discovery"); const ret = (0, utilities_1.fullParse)(response.body); const workspaces = (0, utilities_1.xmlArray)(ret, "app:service", "app:workspace").filter((w) => w["app:collection"]); return workspaces.map((w) => { const collection = w["app:collection"]; return { collection: { category: collection["atom:category"]["@_term"], href: collection["@_href"], title: collection["atom:title"] }, title: w["atom:title"] }; }); } exports.adtCoreDiscovery = adtCoreDiscovery; async function adtCompatibilityGraph(h) { const response = await h.request("/sap/bc/adt/compatibility/graph"); const ret = (0, utilities_1.fullParse)(response.body); const edges = (0, utilities_1.xmlArray)(ret, "compatibility:graph", "edges", "edge").map((e) => { return { sourceNode: (0, utilities_1.xmlNodeAttr)(e.sourceNode), targetNode: (0, utilities_1.xmlNodeAttr)(e.targetNode) }; }); const nodes = (0, utilities_1.xmlArray)(ret, "compatibility:graph", "nodes", "node").map(utilities_1.xmlNodeAttr); return { edges, nodes }; } exports.adtCompatibilityGraph = adtCompatibilityGraph; async function objectTypes(h) { const qs = { maxItemCount: 999, name: "*", data: "usedByProvider" }; const response = await h.request("/sap/bc/adt/repository/informationsystem/objecttypes", { qs }); const ret = (0, utilities_1.parse)(response.body); const types = (0, utilities_1.xmlArray)(ret, "nameditem:namedItemList", "nameditem:namedItem") .map((n) => { const data = n["nameditem:data"] || ""; const fields = data.split(";").reduce((acc, cur) => { const parts = cur.split(":", 2); acc[parts[0]] = parts[1] || ""; return acc; }, {}); let o; if (fields.type && fields.usedBy) o = { name: n["nameditem:name"], description: n["nameditem:description"], type: fields.type, usedBy: fields.usedBy.split(",") }; return o; }) .filter(x => x); return types; } exports.objectTypes = objectTypes;