abap-adt-api
Version:
Interface to Abap Developer Tools webservice
148 lines (147 loc) • 6.81 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.unpublishServiceBinding = exports.publishServiceBinding = exports.ddicRepositoryAccess = exports.ddicElement = exports.annotationDefinitions = exports.syntaxCheckCDS = void 0;
const utilities_1 = require("../utilities");
const syntax_1 = require("./syntax");
async function syntaxCheckCDS(h, url, mainUrl, content) {
const artifacts = mainUrl && content
? `<chkrun:artifacts>
<chkrun:artifact chkrun:contentType="text/plain; charset=utf-8" chkrun:uri="${mainUrl}">
<chkrun:content>${(0, utilities_1.btoa)(content)}</chkrun:content>
</chkrun:artifact>
</chkrun:artifacts>`
: "";
const response = await h.request("/sap/bc/adt/checkruns?reporters=abapCheckRun", {
method: "POST",
headers: {
"Content-Type": "application/vnd.sap.adt.checkobjects+xml",
Accept: "application/vnd.sap.adt.checkmessages+xml"
},
body: `<?xml version="1.0" encoding="UTF-8"?>
<chkrun:checkObjectList xmlns:adtcore="http://www.sap.com/adt/core" xmlns:chkrun="http://www.sap.com/adt/checkrun">
<chkrun:checkObject adtcore:uri="${url}" chkrun:version="active">${artifacts}</chkrun:checkObject>
</chkrun:checkObjectList>`
});
const raw = (0, utilities_1.fullParse)(response.body);
return (0, syntax_1.parseCheckResults)(raw);
}
exports.syntaxCheckCDS = syntaxCheckCDS;
async function annotationDefinitions(h) {
const headers = {
Accept: "application/vnd.sap.adt.cds.annotation.definitions.v1+xml, application/vnd.sap.adt.cds.annotation.definitions.v2+xml"
};
const response = await h.request("/sap/bc/adt/ddic/cds/annotation/definitions", { headers });
const raw = (0, utilities_1.fullParse)(response.body);
return (0, utilities_1.xmlNode)(raw, "cds:annotation", "cds:definitions");
}
exports.annotationDefinitions = annotationDefinitions;
function parseDDICProps(raw) {
const converted = (0, utilities_1.xmlArray)(raw, "abapsource:entry").reduce((prev, cur) => {
const key = cur["@_abapsource:key"];
const value = cur["#text"];
prev[key] = value;
return prev;
}, {});
const { ddicIsKey, ddicDataElement, ddicDataType, ddicLength, ddicDecimals, ddicHeading, ddicLabelShort, ddicLabelMedium, ddicLabelLong, ddicHeadingLength, ddicLabelShortLength, ddicLabelMediumLength, ddicLabelLongLength, parentName, ...rawanno } = converted;
const elementProps = (ddicDataType || ddicDataType === "") && {
ddicIsKey: !!ddicIsKey,
ddicDataElement,
ddicDataType,
ddicLength,
ddicDecimals,
ddicHeading,
ddicLabelShort,
ddicLabelMedium,
ddicLabelLong,
ddicHeadingLength,
ddicLabelShortLength,
ddicLabelMediumLength,
ddicLabelLongLength,
parentName
};
const annotations = [];
// tslint:disable-next-line: forin
for (const key in rawanno) {
const match = key.match(/annotation(Key|Value).([0-9]+)/);
if (match && match.groups) {
const mtype = match.groups[1];
const idx = (0, utilities_1.toInt)(match.groups[2]);
const anno = annotations[idx] || { key: "", value: "" };
if (mtype === "Key")
anno.key = rawanno[key];
else
anno.value = rawanno[key];
annotations[idx] = anno;
}
}
return {
elementProps,
annotations
};
}
function parseDdicElement(raw) {
const type = raw["@_adtcore:type"];
const name = raw["@_adtcore:name"];
const properties = parseDDICProps(raw["abapsource:properties"]);
const children = (0, utilities_1.xmlArray)(raw, "abapsource:elementInfo").map(parseDdicElement);
return { type, name, properties, children };
}
async function ddicElement(h, path, getTargetForAssociation = false, getExtensionViews = true, getSecondaryObjects = true) {
const headers = { Accept: "application/vnd.sap.adt.elementinfo+xml" };
const qs = (0, utilities_1.formatQS)({
getTargetForAssociation,
getExtensionViews,
getSecondaryObjects,
path
});
const uri = `/sap/bc/adt/ddic/ddl/elementinfo?${qs}`;
const response = await h.request(uri, { headers });
const raw = (0, utilities_1.fullParse)(response.body);
return parseDdicElement(raw["abapsource:elementInfo"]);
}
exports.ddicElement = ddicElement;
async function ddicRepositoryAccess(h, path) {
const headers = { Accept: "application/*" };
const qs = (0, utilities_1.isArray)(path)
? (0, utilities_1.formatQS)({ requestScope: "all", path })
: `datasource=${encodeURIComponent(path)}`;
const url = `/sap/bc/adt/ddic/ddl/ddicrepositoryaccess?${qs}`;
const response = await h.request(url, { headers });
const raw = (0, utilities_1.fullParse)(response.body);
const records = raw["adtcore:objectReferences"]
? (0, utilities_1.xmlArray)(raw, "adtcore:objectReferences", "adtcore:objectReference")
: (0, utilities_1.xmlArray)(raw, "ddl:ddlObjectReferences", "ddl:ddlObjectReference");
return records.map(r => {
const attr = (0, utilities_1.xmlNodeAttr)(r);
return {
uri: attr["adtcore:uri"] || "",
type: attr["adtcore:type"] || "",
name: attr["adtcore:name"] || "",
path: attr["ddl:path"] || ""
};
});
}
exports.ddicRepositoryAccess = ddicRepositoryAccess;
async function publishUnpublishServiceBinding(h, base, name, version) {
const headers = { Accept: "application/*" };
const qs = `servicename=${encodeURIComponent(name)}&serviceversion=${version}`;
const url = `/sap/bc/adt/businessservices/odatav2/${base}?${qs}`;
const body = `<adtcore:objectReferences xmlns:adtcore="http://www.sap.com/adt/core">
<adtcore:objectReference adtcore:name="${name}"/>
</adtcore:objectReferences>`;
const response = await h.request(url, { headers, method: "POST", body });
const raw = (0, utilities_1.fullParse)(response.body);
const data = (0, utilities_1.xmlNode)(raw, "asx:abap/asx:values/DATA");
const severity = (0, utilities_1.xmlNode)(data, "SEVERITY");
const shortText = (0, utilities_1.xmlNode)(data, "SHORT_TEXT");
const longText = (0, utilities_1.xmlNode)(data, "LONG_TEXT");
return { severity, shortText, longText };
}
async function publishServiceBinding(h, name, version) {
return publishUnpublishServiceBinding(h, "publishjobs", name, version);
}
exports.publishServiceBinding = publishServiceBinding;
async function unpublishServiceBinding(h, name, version) {
return publishUnpublishServiceBinding(h, "unpublishjobs", name, version);
}
exports.unpublishServiceBinding = unpublishServiceBinding;