UNPKG

trm-core

Version:

TRM (Transport Request Manager) Core

224 lines (223 loc) 13.8 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.checkTransports = void 0; const trm_commons_1 = require("trm-commons"); const transport_1 = require("../../transport"); const commons_1 = require("../../commons"); const trm_commons_2 = require("trm-commons"); const systemConnector_1 = require("../../systemConnector"); const node_r3trans_1 = require("node-r3trans"); exports.checkTransports = { name: 'check-transports', run: (context) => __awaiter(void 0, void 0, void 0, function* () { trm_commons_1.Logger.log('Check transports step', true); var checkExistance = []; trm_commons_1.Logger.loading(`Reading transports contents...`); try { context.runtime.packageTransportsData = yield context.rawInput.packageData.registry.contents(context.rawInput.packageData.name, context.rawInput.packageData.version || 'latest'); context.runtime.remotePackageData.contents = true; } catch (e) { context.runtime.remotePackageData.contents = false; const options = context.rawInput.contextData.r3transOptions; trm_commons_1.Logger.log(`Loading R3Trans with options ${JSON.stringify(options)}`, true); trm_commons_1.Logger.log(`R3TRANS_HOME ${process.env.R3TRANS_HOME}`, true); context.runtime.r3trans = new node_r3trans_1.R3trans(options); const r3transVersion = yield context.runtime.r3trans.getVersion(); const unicode = yield context.runtime.r3trans.isUnicode(); trm_commons_1.Logger.info(r3transVersion, context.rawInput.contextData.noR3transInfo); trm_commons_1.Logger.log(`R3Trans unicode?: ${unicode}`, true); } trm_commons_1.Logger.loading(`Validating package transports...`); const aTransports = yield context.runtime.remotePackageData.artifact.getTransportBinaries(context.rawInput.contextData.r3transOptions, context.runtime.remotePackageData.contents); trm_commons_1.Logger.log(`Package content: ${aTransports.map(o => { return { trkorr: o.trkorr, type: o.type }; })}`, true); if (!context.runtime.remotePackageData.contents) { for (const transport of aTransports) { const valid = yield context.runtime.r3trans.isTransportValid(transport.binaries.data); if (valid) { trm_commons_1.Logger.log(`Transport ${transport.trkorr} is valid.`, true); } else { trm_commons_1.Logger.error(`Transport ${transport.trkorr} is invalid.`, true); throw new Error(`Package contains invalid transports`); } } } const aDevcTransports = aTransports.filter(o => o.type === transport_1.TrmTransportIdentifier.DEVC); const aTadirTransports = aTransports.filter(o => o.type === transport_1.TrmTransportIdentifier.TADIR); const aLangTransports = aTransports.filter(o => o.type === transport_1.TrmTransportIdentifier.LANG); const aCustTransports = aTransports.filter(o => o.type === transport_1.TrmTransportIdentifier.CUST); if (aDevcTransports.length !== 1) { trm_commons_1.Logger.error(`Zero or multiple DEVC transports found`, true); throw new Error(`Unexpected content in package.`); } else { context.runtime.packageTransports.devc.binaries = aDevcTransports[0]; trm_commons_1.Logger.log(`DEVC transport is ${context.runtime.packageTransports.devc.binaries.trkorr}.`, true); if (context.rawInput.installData.installDevclass.keepOriginal) { checkExistance.push(context.runtime.packageTransports.devc.binaries.trkorr); } } if (aTadirTransports.length !== 1) { trm_commons_1.Logger.error(`Zero or multiple TADIR transports found`, true); throw new Error(`Unexpected content in package.`); } else { context.runtime.packageTransports.tadir.binaries = aTadirTransports[0]; trm_commons_1.Logger.log(`TADIR transport is ${context.runtime.packageTransports.tadir.binaries.trkorr}.`, true); checkExistance.push(context.runtime.packageTransports.tadir.binaries.trkorr); if (!context.runtime.remotePackageData.contents) { const tadirE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.tadir.binaries.binaries.data, 'E071')); trm_commons_1.Logger.log(`TADIR E071: ${JSON.stringify(tadirE071)}`, true); context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(tadirE071); } } if (aLangTransports.length > 0) { if (context.rawInput.installData.import.noLang === undefined) { if (!context.rawInput.contextData.noInquirer) { context.rawInput.installData.import.noLang = !(yield trm_commons_2.Inquirer.prompt({ type: `confirm`, name: `noLang`, message: `Import translations transport?`, default: true, })).noLang; } } if (!context.rawInput.installData.import.noLang) { if (aLangTransports.length !== 1) { trm_commons_1.Logger.error(`Multiple LANG transports found`, true); throw new Error(`Unexpected content in package.`); } context.runtime.packageTransports.lang.binaries = aLangTransports[0]; trm_commons_1.Logger.log(`LANG transport is ${context.runtime.packageTransports.lang.binaries.trkorr}.`, true); checkExistance.push(context.runtime.packageTransports.lang.binaries.trkorr); if (!context.runtime.remotePackageData.contents) { const langE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.lang.binaries.binaries.data, 'E071')); trm_commons_1.Logger.log(`LANG E071: ${JSON.stringify(langE071)}`, true); context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(langE071); } } } if (aCustTransports.length > 0) { if (context.rawInput.installData.import.noCust === undefined) { if (!context.rawInput.contextData.noInquirer) { context.rawInput.installData.import.noCust = !(yield trm_commons_2.Inquirer.prompt({ type: `confirm`, name: `noCust`, message: `Import ${aCustTransports.length} customizing transport(s)?`, default: true, })).noCust; } } if (!context.rawInput.installData.import.noCust) { context.runtime.packageTransports.cust = aCustTransports.map(o => { return { binaries: o }; }); trm_commons_1.Logger.log(`CUST transport are ${context.runtime.packageTransports.cust.map(o => o.binaries.trkorr)}.`, true); checkExistance = checkExistance.concat(context.runtime.packageTransports.cust.map(o => o.binaries.trkorr)); if (!context.runtime.remotePackageData.contents) { var custE071 = []; for (const transport of context.runtime.packageTransports.cust) { custE071 = custE071.concat((0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(transport.binaries.binaries.data, 'E071'))); } trm_commons_1.Logger.log(`CUST E071: ${JSON.stringify(custE071)}`, true); context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(custE071); } } } if (!context.runtime.remotePackageData.contents) { if (context.runtime.packageTransportsData.e071.find(o => o.pgmid === 'R3TR' && o.object === 'DEVC')) { throw new Error(`Package has undeclared devclass.`); } } if (!context.runtime.remotePackageData.contents) { var devcE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.devc.binaries.binaries.data, 'E071')); trm_commons_1.Logger.log(`DEVC E071: ${JSON.stringify(devcE071)}`, true); devcE071 = devcE071.filter(o => o.pgmid === 'R3TR' && o.object === 'DEVC'); if (devcE071.length === 0) { throw new Error(`Package has no devclass.`); } context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(devcE071); } context.runtime.installData.entries = context.runtime.packageTransportsData.e071; trm_commons_1.Logger.loading(`Checking package transports in system...`); for (const trkorr of checkExistance) { const oTransport = new transport_1.Transport(trkorr); const e070 = yield oTransport.getE070(); if (e070) { var rewrite = false; trm_commons_1.Logger.warning(`${trkorr} already exists in system!`, true); const trmRelevant = yield oTransport.isTrmRelevant(); const linkedPackage = yield oTransport.getLinkedPackage(); if (linkedPackage) { trm_commons_1.Logger.log(`${trkorr} package is ${linkedPackage.packageName}`, true); if (linkedPackage.compareName(context.runtime.remotePackageData.manifest.name) && linkedPackage.compareRegistry(context.runtime.registry)) { trm_commons_1.Logger.log(`${trkorr} same package (updating?)`, true); context.runtime.generatedData.tmsTxtRefresh.push(oTransport); } else { trm_commons_1.Logger.log(`${trkorr} is linked to another package, will later be migrated`, true); rewrite = true; } } else if (trmRelevant) { trm_commons_1.Logger.log(`${trkorr} is TRM relevant but no linked package (could be DEVC, LANG etc..).`, true); context.runtime.generatedData.tmsTxtRefresh.push(oTransport); } else { if (yield oTransport.isReleased()) { rewrite = true; } else { throw new Error(`Transport ${trkorr} already exists in target system ${systemConnector_1.SystemConnector.getDest()} and is not released.`); } } if (rewrite) { trm_commons_1.Logger.warning(`Transport ${trkorr} already exists in target system ${systemConnector_1.SystemConnector.getDest()}`); trm_commons_1.Logger.warning(`If you continue, TRM will replace the content of transport ${trkorr} with the content of the transport with the same number of package "${context.runtime.remotePackageData.manifest.name}".`); trm_commons_1.Logger.warning(`All of its original content (objects or customizing) will remain untouched, however you may need to manually create a new transport for it.`); trm_commons_1.Logger.warning(`Consider doing a copy now before the install will replace it.`); if (!context.rawInput.installData.import.replaceExistingTransports) { var continueInstall; if (!context.rawInput.contextData.noInquirer) { continueInstall = (yield trm_commons_2.Inquirer.prompt({ name: `continue`, message: `Continue install?`, type: `confirm`, default: true })).continue; } else { continueInstall = false; } if (continueInstall) { context.runtime.generatedData.tmsTxtRefresh.push(oTransport); } else { throw new Error(`Transport ${trkorr} already exists in target system ${systemConnector_1.SystemConnector.getDest()} and transport rewrite was denied.`); } } } } else { trm_commons_1.Logger.success(`${trkorr} does not exist in system.`, true); } } }) };