UNPKG

@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
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