@ui5/task-adaptation
Version:
Custom task for ui5-builder which allows building UI5 Flexibility Adaptation Projects for SAP BTP, Cloud Foundry environment
62 lines • 2.95 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import ServerError from "../model/serverError.js";
import { getLogger } from "@ui5/logger";
import { writeTempAnnotations } from "../util/commonUtil.js";
const log = getLogger("@ui5/task-adaptation::ServiceRequestor");
function retryOnError(maxRetries) {
return (_target, _propertyKey, descriptor) => {
const originalMethod = descriptor.value;
descriptor.value = async function (...args) {
let retries = 0;
while (true) {
try {
return await originalMethod.apply(this, args);
}
catch (error) {
if (error instanceof ServerError) {
if (retries === maxRetries) {
throw new Error(`Error occurred: ${error.message}. Please try again if this is a temporary issue. If not, please create a ticket on CA-UI5-ABA-AIDX`);
}
retries++;
}
else {
const message = error?.response?.data ?? error.message;
throw new Error(`Failed to fetch annotation by '${args[0]}': ${message}`);
}
}
}
};
return descriptor;
};
}
export default class ServiceRequestor {
abapRepoManager;
configuration;
constructor(configuration, abapRepoManager) {
this.abapRepoManager = abapRepoManager;
this.configuration = configuration;
}
//@ts-ignore tsx (esbuild) is not yet implemented the new decorators, but
//old decorators are already subject of compiler error, but it works. So we
//wait till esbuild implement it correctly.
async downloadAnnotation(uri, name, language) {
uri += `?sap-language=${language.sap}`;
log.verbose(`Getting annotation '${name}' ${language} by '${uri}'`);
let files = await this.abapRepoManager.downloadAnnotationFile(uri);
if (!files || files.size === 0) {
throw new Error(`No files were fetched for '${name}' by '${uri}'`);
}
const xml = [...files][0][1];
writeTempAnnotations(this.configuration, name, language, xml);
return xml;
}
}
__decorate([
retryOnError(1)
], ServiceRequestor.prototype, "downloadAnnotation", null);
//# sourceMappingURL=serviceRequestor.js.map