UNPKG

abap-adt-api

Version:

Interface to Abap Developer Tools webservice

148 lines (147 loc) 6.81 kB
"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;