abap-adt-api
Version:
Interface to Abap Developer Tools webservice
79 lines (78 loc) • 3.32 kB
JavaScript
;
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;