trm-core
Version:
TRM (Transport Request Manager) Core
145 lines (144 loc) • 7.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.setInstallDevclass = void 0;
const commons_1 = require("../../commons");
const systemConnector_1 = require("../../systemConnector");
const trm_commons_1 = require("trm-commons");
const registry_1 = require("../../registry");
function _validateDevclass(input, namespaces) {
const sInput = input.trim().toUpperCase();
namespaces = [...new Set(namespaces)];
if (sInput.length > 30) {
return `Package name must not exceede 30 characters limit.`;
}
if (!namespaces.some(ns => sInput.startsWith(ns))) {
return `Package name must use one of the following namespaces: ${namespaces.join(', ')}.`;
}
else {
return true;
}
}
exports.setInstallDevclass = {
name: 'set-install-devclass',
filter: (context) => __awaiter(void 0, void 0, void 0, function* () {
if (context.rawInput.installData.installDevclass.keepOriginal) {
trm_commons_1.Logger.log(`Skipping set devclass replacements (user input)`, true);
return false;
}
else {
return true;
}
}),
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
trm_commons_1.Logger.log('Set install devclass step', true);
if (context.rawInput.installData.installDevclass.replacements.length <= 0) {
context.rawInput.installData.installDevclass.replacements = yield systemConnector_1.SystemConnector.getInstallPackages(context.rawInput.packageData.name, context.rawInput.packageData.registry);
}
var rootDevclass = (_a = context.rawInput.installData.installDevclass.replacements.find(o => o.originalDevclass === context.runtime.originalData.hierarchy.devclass)) === null || _a === void 0 ? void 0 : _a.installDevclass;
if (!rootDevclass) {
rootDevclass = context.runtime.originalData.hierarchy.devclass;
}
const originalNamespace = (0, commons_1.getPackageNamespace)(rootDevclass);
var updateNamespace;
if (context.runtime.installData.upgradingPackage) {
updateNamespace = (0, commons_1.getPackageNamespace)(context.runtime.installData.upgradingPackage.getDevclass());
}
var inq1Prompts = [];
trm_commons_1.Logger.loading(`Analyzing packages...`);
for (const t of context.runtime.packageTransportsData.tdevc) {
var adaptDevclassName = t.devclass;
const replacement = context.rawInput.installData.installDevclass.replacements.find(o => o.originalDevclass === t.devclass);
if (updateNamespace) {
if (!replacement && updateNamespace === '$' && context.runtime.isTrmServerRest) {
adaptDevclassName = (0, commons_1.adjustTrmServerRestDevclass)(adaptDevclassName);
}
else {
adaptDevclassName = adaptDevclassName.replace(new RegExp(`^${originalNamespace}`, 'gmi'), updateNamespace);
}
}
const packageExists = yield systemConnector_1.SystemConnector.getDevclass(adaptDevclassName);
if (!replacement) {
if (context.rawInput.contextData.noInquirer || context.runtime.isTrmServerRest) {
const automaticValue = _validateDevclass(adaptDevclassName, [updateNamespace || originalNamespace, '$', originalNamespace]);
if (automaticValue === true) {
context.rawInput.installData.installDevclass.replacements.push({
originalDevclass: t.devclass,
installDevclass: adaptDevclassName
});
}
else {
throw new Error(automaticValue);
}
}
else {
inq1Prompts.push({
type: "input",
name: t.devclass,
default: adaptDevclassName,
message: packageExists ? `Rename ABAP Package "${adaptDevclassName}"?` : `ABAP Package "${adaptDevclassName}" will be generated. Do you want to rename it?`,
validate: (input) => {
return _validateDevclass(input, [updateNamespace || originalNamespace, '$', originalNamespace]);
}
});
}
}
else {
const devclassValid = _validateDevclass(replacement.installDevclass, [updateNamespace || originalNamespace, '$', originalNamespace]);
if (devclassValid !== true) {
throw new Error(devclassValid);
}
}
}
if (inq1Prompts.length > 0) {
const inq1 = yield trm_commons_1.Inquirer.prompt(inq1Prompts);
Object.keys(inq1).forEach(k => {
context.rawInput.installData.installDevclass.replacements = context.rawInput.installData.installDevclass.replacements.filter(o => o.originalDevclass !== k);
context.rawInput.installData.installDevclass.replacements.push({
originalDevclass: k,
installDevclass: inq1[k].trim().toUpperCase()
});
});
}
const hasTemp = context.rawInput.installData.installDevclass.replacements.some(x => x.installDevclass.startsWith('$'));
if (hasTemp && !context.rawInput.installData.installDevclass.replacements.every(x => x.installDevclass.startsWith('$'))) {
throw new Error(`All packages must start with prefix $ if one (or more) packages are temporary!`);
}
trm_commons_1.Logger.loading(`Updating install data...`);
var installDevc = [];
var packageRegistry;
if (context.rawInput.packageData.registry.getRegistryType() === registry_1.RegistryType.PUBLIC) {
packageRegistry = registry_1.PUBLIC_RESERVED_KEYWORD;
}
else if (context.rawInput.packageData.registry.getRegistryType() === registry_1.RegistryType.LOCAL) {
packageRegistry = registry_1.LOCAL_RESERVED_KEYWORD;
}
else {
packageRegistry = context.rawInput.packageData.registry.endpoint;
}
context.rawInput.installData.installDevclass.replacements.forEach(o => {
installDevc.push({
package_name: context.rawInput.packageData.name,
package_registry: packageRegistry,
original_devclass: o.originalDevclass,
install_devclass: o.installDevclass
});
});
yield systemConnector_1.SystemConnector.setInstallDevc(installDevc);
context.rawInput.installData.installDevclass.keepOriginal = true;
context.rawInput.installData.installDevclass.replacements.forEach(o => {
if (o.installDevclass !== o.originalDevclass) {
context.rawInput.installData.installDevclass.keepOriginal = false;
}
});
})
};