UNPKG

@ui5/task-adaptation

Version:

Custom task for ui5-builder which allows building UI5 Flexibility Adaptation Projects for SAP BTP, Cloud Foundry environment

90 lines 3.55 kB
import AbapProvider from "./abapProvider.js"; import { getLogger } from "@ui5/logger"; import { unzipZipEntries } from "../util/zipUtil.js"; const log = getLogger("@ui5/task-adaptation::AbapRepoManager"); const REQUEST_OPTIONS_XML = { responseType: "text", headers: { "Accept": "text/html,application/xhtml+xml,application/xml" } }; const REQUEST_OPTIONS_JSON = { headers: { "Accept": "application/json" } }; export default class AbapRepoManager { configuration; abapProvider; constructor(configuration, abapProvider) { this.configuration = configuration; this.abapProvider = abapProvider ? abapProvider : new AbapProvider(); } async getAppVariantIdHierarchy(id) { const provider = await this.abapProvider.get(this.configuration); const lrep = provider.getLayeredRepository(); const response = await lrep.get("/dta_folder/app_info", { params: { id } }); if (response.status === 200) { return JSON.parse(response.data)?.appVariantIdHierarchy; } else if (this.configuration.appName) { // Fallback to old API on old ABAP backend or CF for backward compatibility const metadataResponse = await this.getMetadata(id); return [{ repoName: this.configuration.appName, appVariantId: id, cachebusterToken: metadataResponse.changedOn }]; } throw new Error(`App variant id hierarchy for app id '${id}' is not provided`); } async getAnnotationMetadata(uri) { const provider = await this.abapProvider.get(this.configuration); const response = await provider.head(uri); return { changedOn: response.data.modified }; } async downloadAnnotationFile(uri) { const provider = await this.abapProvider.get(this.configuration); const response = await provider.get(uri, { headers: REQUEST_OPTIONS_XML.headers }); return new Map([["annotation.xml", response.data]]); } async getMetadata(id) { const provider = await this.abapProvider.get(this.configuration); const appIndex = provider.getAppIndex(); const response = await appIndex.get("/ui5_app_info_json", { params: { id }, headers: REQUEST_OPTIONS_JSON.headers }); const data = JSON.parse(response.data); if (!data || !data[id]) { log.warn(`UI5AppInfoJson request doesn't contain cache buster token for sap.app/id '${id}'. Fallback to download.`); } return { changedOn: data && data[id] && data[id].url, id }; } async fetch(repoName) { const encodedRepoName = encodeURIComponent(repoName); const provider = await this.abapProvider.get(this.configuration); const ui5Repo = provider.getUi5AbapRepository(); const response = await ui5Repo.get(`/Repositories('${encodedRepoName}')`, { params: { DownloadFiles: "RUNTIME", CodePage: "UTF8", "$format": "json" } }); const data = JSON.parse(response.data); if (data.d?.ZipArchive.length > 0) { const buffer = Buffer.from(data.d.ZipArchive, "base64"); return unzipZipEntries(buffer); } throw new Error(`App '${repoName}' doesn't contain files`); } } //# sourceMappingURL=abapRepoManager.js.map