UNPKG

trm-core

Version:

TRM (Transport Request Manager) Core

191 lines (190 loc) 8.43 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setTrmDependencies = void 0; const logger_1 = require("../../logger"); const systemConnector_1 = require("../../systemConnector"); const transport_1 = require("../../transport"); const trmPackage_1 = require("../../trmPackage"); var aRootDevclass = []; var trmServerPackage; var trmRestPackage; const _getRootDevclass = (devclass) => __awaiter(void 0, void 0, void 0, function* () { const oRootDevclass = aRootDevclass.find(o => o.devclass === devclass); if (oRootDevclass) { return oRootDevclass.rootDevclass; } else { logger_1.Logger.loading(`Searching root of devclass ${devclass}...`, true); var tdevcDevclass = devclass; var rootDevclass = null; while (rootDevclass === null) { const tdevc = yield systemConnector_1.SystemConnector.getDevclass(tdevcDevclass); logger_1.Logger.log(`Parent of ${tdevcDevclass} is ${tdevc.parentcl}`, true); if (tdevc.parentcl) { tdevcDevclass = tdevc.parentcl; aRootDevclass.push({ devclass: tdevcDevclass, rootDevclass: tdevc.parentcl }); } else { rootDevclass = tdevcDevclass; aRootDevclass.push({ devclass: tdevcDevclass, rootDevclass: tdevcDevclass }); } } logger_1.Logger.success(`Root devclass of ${devclass} is ${rootDevclass}`, true); return rootDevclass; } }); const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, void 0, function* () { var trmDependencies = []; if (!trmServerPackage) { try { const systemTrmServerPackage = yield systemConnector_1.SystemConnector.getTrmServerPackage(); if (systemTrmServerPackage.manifest) { trmServerPackage = { package: systemTrmServerPackage }; } else { trmServerPackage = {}; } } catch (e) { trmServerPackage = {}; } } if (!trmRestPackage) { try { const systemTrmRestPackage = yield systemConnector_1.SystemConnector.getTrmRestPackage(); if (systemTrmRestPackage.manifest) { trmRestPackage = { package: systemTrmRestPackage }; } else { trmRestPackage = {}; } } catch (e) { trmRestPackage = {}; } } for (const tadirDependency of tadirDependencies) { const tadir = { pgmid: tadirDependency.object.PGMID, object: tadirDependency.object.OBJECT, objName: tadirDependency.object.OBJ_NAME, devclass: tadirDependency.object.DEVCLASS }; var trmRelevantTransports = []; var latestTransport; var devclass; var trmPackage; var integrity; var arrayIndex1; var arrayIndex2; if (trmServerPackage.package && trmServerPackage.package.getDevclass() === tadir.devclass) { logger_1.Logger.log(`Dependency with TRM SERVER package`, true); devclass = trmServerPackage.package.getDevclass(); trmPackage = trmServerPackage.package; if (trmServerPackage.integrity) { integrity = trmServerPackage.integrity; } else { integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage); } } else if (trmRestPackage.package && trmRestPackage.package.getDevclass() === tadir.devclass) { logger_1.Logger.log(`Dependency with TRM REST package`, true); devclass = trmRestPackage.package.getDevclass(); trmPackage = trmRestPackage.package; if (trmRestPackage.integrity) { integrity = trmRestPackage.integrity; } else { integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage); } } else { logger_1.Logger.log(`Searching transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true); const allTransports = yield transport_1.Transport.getTransportsFromObject(tadir); logger_1.Logger.log(`Found ${allTransports.length} transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true); for (const transport of allTransports) { if (yield transport.isTrmRelevant()) { logger_1.Logger.log(`Transport ${transport.trkorr} is TRM relevant`, true); trmRelevantTransports.push(transport); } } latestTransport = yield transport_1.Transport.getLatest(trmRelevantTransports); if (latestTransport) { logger_1.Logger.log(`Latest transport is ${latestTransport.trkorr}`, true); trmPackage = yield latestTransport.getLinkedPackage(); const alreadyInArray = trmDependencies.find(o => o.package && trmPackage_1.TrmPackage.compare(o.package, trmPackage)); if (alreadyInArray) { devclass = alreadyInArray.devclass; integrity = alreadyInArray.integrity; } else { integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage); if (!integrity) { throw new Error(`Package "${trmPackage.packageName}", integrity not found!`); } try { devclass = yield latestTransport.getDevclass(); } catch (e) { devclass = ''; } } } else { logger_1.Logger.log(`Object without TRM package`, true); devclass = yield _getRootDevclass(tadir.devclass); } } arrayIndex1 = trmDependencies.findIndex(o => o.devclass === devclass); if (arrayIndex1 < 0) { arrayIndex1 = trmDependencies.push({ devclass, package: trmPackage, integrity, sapEntries: [] }); arrayIndex1--; } arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.findIndex(o => o.table === 'TADIR'); if (arrayIndex2 < 0) { arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.push({ table: 'TADIR', dependencies: [] }); arrayIndex2--; } trmDependencies[arrayIndex1].sapEntries[arrayIndex2].dependencies.push(tadirDependency); } return trmDependencies; }); exports.setTrmDependencies = { name: 'set-trm-dependencies', run: (context) => __awaiter(void 0, void 0, void 0, function* () { logger_1.Logger.log('Set TRM dependencies step', true); var trmDependencies = []; logger_1.Logger.loading(`Searching TRM dependencies...`); for (const entryDependency of context.runtime.dependencies.customObjects) { if (entryDependency.table === 'TADIR') { trmDependencies = trmDependencies.concat(yield _getTadirDependencies(entryDependency.dependencies)); } } context.runtime.dependencies.withTrmPackage = trmDependencies.filter(o => o.package); context.runtime.dependencies.withoutTrmPackage = trmDependencies.filter(o => !o.package); }) };