UNPKG

trm-core

Version:

TRM (Transport Request Manager) Core

145 lines (144 loc) 7.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.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; } }); }) };