trm-core
Version:
TRM (Transport Request Manager) Core
224 lines (223 loc) • 13.8 kB
JavaScript
;
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);
}
}
})
};