trm-core 6.2.5 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/changelog.txt +35 -0
  2. package/dist/abapgit/DotAbapGit.d.ts +8 -0
  3. package/dist/abapgit/DotAbapGit.js +80 -0
  4. package/dist/abapgit/index.d.ts +1 -0
  5. package/dist/abapgit/index.js +17 -0
  6. package/dist/actions/checkPackageDependencies/analyze.js +1 -1
  7. package/dist/actions/findDependencies/parseSenvi.js +3 -0
  8. package/dist/actions/findDependencies/setTrmDependencies.js +93 -36
  9. package/dist/actions/install/checkTransports.js +71 -1
  10. package/dist/actions/install/executePostActivities.d.ts +3 -0
  11. package/dist/actions/install/executePostActivities.js +62 -0
  12. package/dist/actions/install/generateInstallTransport.js +1 -0
  13. package/dist/actions/install/importCustTransport.js +1 -0
  14. package/dist/actions/install/importDevcTransport.js +4 -0
  15. package/dist/actions/install/importLangTransport.js +1 -0
  16. package/dist/actions/install/importTadirTransport.js +2 -0
  17. package/dist/actions/install/index.d.ts +9 -4
  18. package/dist/actions/install/index.js +7 -1
  19. package/dist/actions/install/init.js +19 -3
  20. package/dist/actions/install/installDependencies.js +1 -9
  21. package/dist/actions/install/migrate.d.ts +3 -0
  22. package/dist/actions/install/migrate.js +35 -0
  23. package/dist/actions/install/readTadir.js +41 -2
  24. package/dist/actions/install/refreshTmsTxt.d.ts +3 -0
  25. package/dist/actions/install/refreshTmsTxt.js +33 -0
  26. package/dist/actions/install/setInstallDevclass.js +11 -1
  27. package/dist/actions/installDependency/index.d.ts +2 -2
  28. package/dist/actions/installDependency/init.js +4 -0
  29. package/dist/actions/publish/findDependencies.js +20 -15
  30. package/dist/actions/publish/generateCustTransport.js +2 -0
  31. package/dist/actions/publish/generateDevcTransport.js +2 -0
  32. package/dist/actions/publish/generateLangTransport.js +4 -0
  33. package/dist/actions/publish/generateTadirTransport.js +15 -1
  34. package/dist/actions/publish/getSourceCode.d.ts +3 -0
  35. package/dist/actions/publish/getSourceCode.js +36 -0
  36. package/dist/actions/publish/index.d.ts +12 -3
  37. package/dist/actions/publish/index.js +2 -0
  38. package/dist/actions/publish/init.js +10 -2
  39. package/dist/actions/publish/publishToRegistry.js +5 -1
  40. package/dist/actions/publish/setManifestValues.js +69 -1
  41. package/dist/actions/publish/setReadme.js +8 -1
  42. package/dist/client/RESTClient.d.ts +11 -0
  43. package/dist/client/RESTClient.js +141 -39
  44. package/dist/client/RFCClient.d.ts +11 -0
  45. package/dist/client/RFCClient.js +104 -19
  46. package/dist/client/components/LANGU.d.ts +1 -0
  47. package/dist/client/components/LANGU.js +2 -0
  48. package/dist/client/components/SEOCLSNAME.d.ts +1 -0
  49. package/dist/client/components/SEOCLSNAME.js +2 -0
  50. package/dist/client/components/SEODESCR.d.ts +1 -0
  51. package/dist/client/components/SEODESCR.js +2 -0
  52. package/dist/client/components/SYMSGID.d.ts +1 -0
  53. package/dist/client/components/SYMSGID.js +2 -0
  54. package/dist/client/components/SYMSGNO.d.ts +1 -0
  55. package/dist/client/components/SYMSGNO.js +2 -0
  56. package/dist/client/components/SYMSGTY.d.ts +1 -0
  57. package/dist/client/components/SYMSGTY.js +2 -0
  58. package/dist/client/components/SYMSGV.d.ts +1 -0
  59. package/dist/client/components/SYMSGV.js +2 -0
  60. package/dist/client/components/TRSTATUS.d.ts +1 -0
  61. package/dist/client/components/TRSTATUS.js +2 -0
  62. package/dist/client/components/ZTRM_TRKORR.d.ts +1 -0
  63. package/dist/client/components/ZTRM_TRKORR.js +2 -0
  64. package/dist/client/components/index.d.ts +9 -0
  65. package/dist/client/components/index.js +9 -0
  66. package/dist/client/struct/E070.d.ts +2 -1
  67. package/dist/client/struct/SEOCLASSTX.d.ts +6 -0
  68. package/dist/client/struct/SEOCLASSTX.js +2 -0
  69. package/dist/client/struct/SYMSG.d.ts +10 -0
  70. package/dist/client/struct/SYMSG.js +2 -0
  71. package/dist/client/struct/index.d.ts +2 -0
  72. package/dist/client/struct/index.js +2 -0
  73. package/dist/commons/checkCoreTrmDependencies.d.ts +7 -0
  74. package/dist/commons/checkCoreTrmDependencies.js +49 -0
  75. package/dist/commons/getCoreTrmDependencies.d.ts +3 -0
  76. package/dist/commons/getCoreTrmDependencies.js +8 -0
  77. package/dist/commons/getNodePackage.d.ts +1 -0
  78. package/dist/commons/getNodePackage.js +61 -0
  79. package/dist/commons/index.d.ts +3 -0
  80. package/dist/commons/index.js +3 -0
  81. package/dist/logger/CliLogger.d.ts +1 -0
  82. package/dist/logger/CliLogger.js +19 -0
  83. package/dist/logger/ConsoleLogger.d.ts +1 -0
  84. package/dist/logger/ConsoleLogger.js +19 -0
  85. package/dist/logger/DummyLogger.d.ts +1 -0
  86. package/dist/logger/DummyLogger.js +1 -0
  87. package/dist/logger/ILogger.d.ts +1 -0
  88. package/dist/logger/Logger.d.ts +1 -0
  89. package/dist/logger/Logger.js +5 -0
  90. package/dist/manifest/Manifest.d.ts +1 -0
  91. package/dist/manifest/Manifest.js +106 -8
  92. package/dist/manifest/PostActivity.d.ts +11 -0
  93. package/dist/manifest/PostActivity.js +150 -0
  94. package/dist/manifest/TrmManifest.d.ts +1 -0
  95. package/dist/manifest/TrmManifestBase.d.ts +2 -0
  96. package/dist/manifest/TrmManifestNamespace.d.ts +1 -0
  97. package/dist/manifest/TrmManifestPostActivity.d.ts +7 -0
  98. package/dist/manifest/TrmManifestPostActivity.js +2 -0
  99. package/dist/manifest/index.d.ts +2 -0
  100. package/dist/manifest/index.js +2 -0
  101. package/dist/registry/AbstractRegistry.d.ts +19 -0
  102. package/dist/registry/AbstractRegistry.js +6 -0
  103. package/dist/registry/FileSystem.d.ts +23 -0
  104. package/dist/registry/FileSystem.js +161 -0
  105. package/dist/registry/Registry.d.ts +4 -3
  106. package/dist/registry/Registry.js +8 -5
  107. package/dist/registry/RegistryProvider.d.ts +5 -0
  108. package/dist/registry/RegistryProvider.js +35 -0
  109. package/dist/registry/RegistryType.d.ts +2 -1
  110. package/dist/registry/RegistryType.js +1 -0
  111. package/dist/registry/index.d.ts +3 -1
  112. package/dist/registry/index.js +3 -1
  113. package/dist/systemConnector/ISystemConnector.d.ts +11 -0
  114. package/dist/systemConnector/ISystemConnectorBase.d.ts +4 -3
  115. package/dist/systemConnector/RESTSystemConnector.d.ts +11 -0
  116. package/dist/systemConnector/RESTSystemConnector.js +40 -0
  117. package/dist/systemConnector/RFCSystemConnector.d.ts +11 -0
  118. package/dist/systemConnector/RFCSystemConnector.js +40 -0
  119. package/dist/systemConnector/SystemConnector.d.ts +15 -3
  120. package/dist/systemConnector/SystemConnector.js +65 -2
  121. package/dist/systemConnector/SystemConnectorBase.d.ts +8 -5
  122. package/dist/systemConnector/SystemConnectorBase.js +86 -41
  123. package/dist/transport/Transport.d.ts +13 -3
  124. package/dist/transport/Transport.js +134 -39
  125. package/dist/trmPackage/TrmArtifact.d.ts +9 -2
  126. package/dist/trmPackage/TrmArtifact.js +30 -9
  127. package/dist/trmPackage/TrmPackage.d.ts +6 -6
  128. package/dist/trmPackage/TrmPackage.js +1 -2
  129. package/package.json +18 -8
package/changelog.txt ADDED
@@ -0,0 +1,35 @@
1
+ trm-core changelog
2
+ =================
3
+
4
+ Legend
5
+ ------
6
+ * : fixed
7
+ ! : changed
8
+ + : added
9
+ - : removed
10
+
11
+ 2025-04-28 v6.4.0
12
+ -------------------
13
+
14
+ + post activities in abap manifest
15
+ * return exception type for REST client
16
+
17
+ 2025-02-06 v6.3.0
18
+ -------------------
19
+
20
+ * upgrading package remove previous ZTRM comments in workbench (import) transport
21
+ + fetch package remote content
22
+ * fix translation transport generation
23
+ + move trm package dependencies to core
24
+ + transport migration on overwrite
25
+ ! DEVC, CUST and LANG are now TRM relevant
26
+ * root superpackage on devc tr import blank
27
+ + clear state on package install (remove from skipped transports)
28
+ + add abapgit source code to TRM artifact
29
+ + skip ignored objects listed in .abapgit.xml
30
+ + add namespace in manifest
31
+ ! abstract registry for custom implementation
32
+ + add file system registry for local publish and install
33
+ + add post activities
34
+ ! cache transports in dependency detection for performance issues on big packages
35
+ * check object existance before install
@@ -0,0 +1,8 @@
1
+ import { DEVCLASS } from "../client";
2
+ export declare class DotAbapGit {
3
+ private _dotAbapgit;
4
+ private constructor();
5
+ static fromDevclass(devclass: DEVCLASS): Promise<DotAbapGit>;
6
+ getIgnoredFiles(): string[];
7
+ getStartingFolder(): string;
8
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.DotAbapGit = void 0;
46
+ const systemConnector_1 = require("../systemConnector");
47
+ const xml = __importStar(require("xml-js"));
48
+ class DotAbapGit {
49
+ constructor(sXml) {
50
+ try {
51
+ this._dotAbapgit = xml.xml2js(sXml, { compact: true })['asx:abap']['asx:values']['DATA'];
52
+ }
53
+ catch (e) {
54
+ throw new Error(`Couldn't parse .abapgit.xml`);
55
+ }
56
+ }
57
+ static fromDevclass(devclass) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ const xml = yield systemConnector_1.SystemConnector.getDotAbapgit(devclass);
60
+ return new DotAbapGit(xml.toString());
61
+ });
62
+ }
63
+ getIgnoredFiles() {
64
+ if (this._dotAbapgit.IGNORE && this._dotAbapgit.IGNORE.item) {
65
+ if (Array.isArray(this._dotAbapgit.IGNORE.item)) {
66
+ return this._dotAbapgit.IGNORE.item.map(o => o._text);
67
+ }
68
+ else {
69
+ return [this._dotAbapgit.IGNORE.item._text];
70
+ }
71
+ }
72
+ else {
73
+ return [];
74
+ }
75
+ }
76
+ getStartingFolder() {
77
+ return this._dotAbapgit.STARTING_FOLDER ? this._dotAbapgit.STARTING_FOLDER.item._text : null;
78
+ }
79
+ }
80
+ exports.DotAbapGit = DotAbapGit;
@@ -0,0 +1 @@
1
+ export * from "./DotAbapGit";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./DotAbapGit"), exports);
@@ -36,7 +36,7 @@ exports.analyze = {
36
36
  var tableData;
37
37
  for (const dependency of context.output.dependencies) {
38
38
  tableData = [dependency.name, dependency.registry || registry_1.PUBLIC_RESERVED_KEYWORD, dependency.version];
39
- const dependencyTrmPackage = new trmPackage_1.TrmPackage(dependency.name, new registry_1.Registry(dependency.registry || registry_1.PUBLIC_RESERVED_KEYWORD));
39
+ const dependencyTrmPackage = new trmPackage_1.TrmPackage(dependency.name, registry_1.RegistryProvider.getRegistry(dependency.registry));
40
40
  const systemInstalledPackage = context.rawInput.contextData.systemPackages.find(o => trmPackage_1.TrmPackage.compare(o, dependencyTrmPackage));
41
41
  if (systemInstalledPackage && systemInstalledPackage.manifest) {
42
42
  const installedVersion = systemInstalledPackage.manifest.get().version;
@@ -71,8 +71,11 @@ exports.parseSenvi = {
71
71
  const senviObjects = context.runtime.repositoryEnvironment.senvi;
72
72
  const aIgnoredDevclass = context.runtime.packageData.ignoredTadir.filter(o => o.pgmid === 'R3TR' && o.object === 'DEVC').map(o => o.devclass);
73
73
  const senviParser = new dependency_1.SenviParser();
74
+ var index = 0;
74
75
  logger_1.Logger.loading(`Reading object dependencies...`);
75
76
  for (const senviObject of senviObjects) {
77
+ index++;
78
+ logger_1.Logger.loading(`(${index}/${senviObjects.length}) Reading object dependencies...`);
76
79
  logger_1.Logger.log(`Parsing SENVI of TADIR object ${senviObject.tadir.pgmid} ${senviObject.tadir.object} ${senviObject.tadir.objName}, ${senviObject.senvi} entries`, true);
77
80
  for (const senvi of senviObject.senvi) {
78
81
  logger_1.Logger.loading(`Parsing SENVI object ${senvi.type} ${senvi.object} ${senvi.enclObj}...`, true);
@@ -17,6 +17,8 @@ const trmPackage_1 = require("../../trmPackage");
17
17
  var aRootDevclass = [];
18
18
  var trmServerPackage;
19
19
  var trmRestPackage;
20
+ var transportsCache = [];
21
+ var transportsObjectCache = [];
20
22
  const _getRootDevclass = (devclass) => __awaiter(void 0, void 0, void 0, function* () {
21
23
  const oRootDevclass = aRootDevclass.find(o => o.devclass === devclass);
22
24
  if (oRootDevclass) {
@@ -50,6 +52,7 @@ const _getRootDevclass = (devclass) => __awaiter(void 0, void 0, void 0, functio
50
52
  });
51
53
  const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, void 0, function* () {
52
54
  var trmDependencies = [];
55
+ var index = 0;
53
56
  if (!trmServerPackage) {
54
57
  try {
55
58
  const systemTrmServerPackage = yield systemConnector_1.SystemConnector.getTrmServerPackage();
@@ -79,6 +82,8 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
79
82
  }
80
83
  }
81
84
  for (const tadirDependency of tadirDependencies) {
85
+ index++;
86
+ logger_1.Logger.loading(`(${index}/${tadirDependencies.length}) Searching TRM dependencies...`);
82
87
  const tadir = {
83
88
  pgmid: tadirDependency.object.PGMID,
84
89
  object: tadirDependency.object.OBJECT,
@@ -92,6 +97,7 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
92
97
  var integrity;
93
98
  var arrayIndex1;
94
99
  var arrayIndex2;
100
+ var append;
95
101
  if (trmServerPackage.package && trmServerPackage.package.getDevclass() === tadir.devclass) {
96
102
  logger_1.Logger.log(`Dependency with TRM SERVER package`, true);
97
103
  devclass = trmServerPackage.package.getDevclass();
@@ -101,7 +107,9 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
101
107
  }
102
108
  else {
103
109
  integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage);
110
+ trmServerPackage.integrity = integrity;
104
111
  }
112
+ append = true;
105
113
  }
106
114
  else if (trmRestPackage.package && trmRestPackage.package.getDevclass() === tadir.devclass) {
107
115
  logger_1.Logger.log(`Dependency with TRM REST package`, true);
@@ -112,64 +120,113 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
112
120
  }
113
121
  else {
114
122
  integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage);
123
+ trmRestPackage.integrity = integrity;
115
124
  }
125
+ append = true;
116
126
  }
117
127
  else {
118
128
  logger_1.Logger.log(`Searching transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true);
119
- const allTransports = yield transport_1.Transport.getTransportsFromObject(tadir);
129
+ const allTransports = yield transport_1.Transport.getTransportsFromObject(tadir, transportsObjectCache);
120
130
  logger_1.Logger.log(`Found ${allTransports.length} transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true);
121
131
  for (const transport of allTransports) {
122
- if (yield transport.isTrmRelevant()) {
123
- logger_1.Logger.log(`Transport ${transport.trkorr} is TRM relevant`, true);
124
- trmRelevantTransports.push(transport);
132
+ if (transportsObjectCache.find(o => o.trkorr === transport.trkorr)) {
133
+ transportsObjectCache.push(transport);
134
+ }
135
+ const transportCache = transportsCache.find(o => o.trkorr === transport.trkorr);
136
+ if (transportCache) {
137
+ logger_1.Logger.log(`Transport ${transport.trkorr} in cache, not reading again...`, true);
138
+ if (transportCache.trmRelevant) {
139
+ trmRelevantTransports.push(transport);
140
+ }
141
+ }
142
+ else {
143
+ const iTransportsCache = transportsCache.push({
144
+ trkorr: transport.trkorr,
145
+ trmRelevant: false
146
+ }) - 1;
147
+ if (yield transport.isTrmRelevant()) {
148
+ logger_1.Logger.log(`Transport ${transport.trkorr} is TRM relevant`, true);
149
+ trmRelevantTransports.push(transport);
150
+ transportsCache[iTransportsCache].trmRelevant = true;
151
+ }
125
152
  }
126
153
  }
127
154
  latestTransport = yield transport_1.Transport.getLatest(trmRelevantTransports);
128
155
  if (latestTransport) {
129
156
  logger_1.Logger.log(`Latest transport is ${latestTransport.trkorr}`, true);
130
- trmPackage = yield latestTransport.getLinkedPackage();
131
- const alreadyInArray = trmDependencies.find(o => o.package && trmPackage_1.TrmPackage.compare(o.package, trmPackage));
132
- if (alreadyInArray) {
133
- devclass = alreadyInArray.devclass;
134
- integrity = alreadyInArray.integrity;
157
+ const iTransportsCache = transportsCache.findIndex(o => o.trkorr === latestTransport.trkorr);
158
+ if (transportsCache[iTransportsCache].devclass && transportsCache[iTransportsCache].integrity) {
159
+ logger_1.Logger.log(`Transport ${latestTransport.trkorr} in cache, not reading again...`, true);
160
+ devclass = transportsCache[iTransportsCache].devclass;
161
+ integrity = transportsCache[iTransportsCache].integrity;
135
162
  }
136
163
  else {
137
- integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage);
138
- if (!integrity) {
139
- throw new Error(`Package "${trmPackage.packageName}", integrity not found!`);
140
- }
141
- try {
142
- devclass = yield latestTransport.getDevclass();
164
+ trmPackage = yield latestTransport.getLinkedPackage();
165
+ const alreadyInArray = trmDependencies.find(o => o.package && trmPackage_1.TrmPackage.compare(o.package, trmPackage));
166
+ if (alreadyInArray) {
167
+ devclass = alreadyInArray.devclass;
168
+ integrity = alreadyInArray.integrity;
143
169
  }
144
- catch (e) {
145
- devclass = '';
170
+ else {
171
+ integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage);
172
+ if (!integrity) {
173
+ throw new Error(`Package "${trmPackage.packageName}", integrity not found!`);
174
+ }
175
+ try {
176
+ devclass = yield latestTransport.getDevclass();
177
+ }
178
+ catch (e) {
179
+ devclass = '';
180
+ }
146
181
  }
182
+ transportsCache[iTransportsCache].devclass = devclass;
183
+ transportsCache[iTransportsCache].integrity = integrity;
147
184
  }
185
+ append = true;
148
186
  }
149
187
  else {
150
- logger_1.Logger.log(`Object without TRM package`, true);
151
188
  devclass = yield _getRootDevclass(tadir.devclass);
189
+ if (devclass) {
190
+ if (!tadirDependencies.find(o => o.object.PGMID === 'R3TR' && o.object.OBJECT === 'DEVC' && o.object.OBJ_NAME === devclass)) {
191
+ tadirDependencies.push({
192
+ object: {
193
+ PGMID: 'R3TR',
194
+ OBJECT: 'DEVC',
195
+ OBJ_NAME: devclass,
196
+ DEVCLASS: devclass
197
+ },
198
+ foundIn: tadir
199
+ });
200
+ }
201
+ append = false;
202
+ }
203
+ else {
204
+ logger_1.Logger.log(`Object without TRM package`, true);
205
+ append = true;
206
+ }
152
207
  }
153
208
  }
154
- arrayIndex1 = trmDependencies.findIndex(o => o.devclass === devclass);
155
- if (arrayIndex1 < 0) {
156
- arrayIndex1 = trmDependencies.push({
157
- devclass,
158
- package: trmPackage,
159
- integrity,
160
- sapEntries: []
161
- });
162
- arrayIndex1--;
163
- }
164
- arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.findIndex(o => o.table === 'TADIR');
165
- if (arrayIndex2 < 0) {
166
- arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.push({
167
- table: 'TADIR',
168
- dependencies: []
169
- });
170
- arrayIndex2--;
209
+ if (append) {
210
+ arrayIndex1 = trmDependencies.findIndex(o => o.devclass === devclass);
211
+ if (arrayIndex1 < 0) {
212
+ arrayIndex1 = trmDependencies.push({
213
+ devclass,
214
+ package: trmPackage,
215
+ integrity,
216
+ sapEntries: []
217
+ });
218
+ arrayIndex1--;
219
+ }
220
+ arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.findIndex(o => o.table === 'TADIR');
221
+ if (arrayIndex2 < 0) {
222
+ arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.push({
223
+ table: 'TADIR',
224
+ dependencies: []
225
+ });
226
+ arrayIndex2--;
227
+ }
228
+ trmDependencies[arrayIndex1].sapEntries[arrayIndex2].dependencies.push(tadirDependency);
171
229
  }
172
- trmDependencies[arrayIndex1].sapEntries[arrayIndex2].dependencies.push(tadirDependency);
173
230
  }
174
231
  return trmDependencies;
175
232
  });
@@ -14,10 +14,12 @@ const logger_1 = require("../../logger");
14
14
  const transport_1 = require("../../transport");
15
15
  const commons_1 = require("../../commons");
16
16
  const inquirer_1 = require("../../inquirer");
17
+ const systemConnector_1 = require("../../systemConnector");
17
18
  exports.checkTransports = {
18
19
  name: 'check-transports',
19
20
  run: (context) => __awaiter(void 0, void 0, void 0, function* () {
20
21
  logger_1.Logger.log('Check transports step', true);
22
+ var checkExistance = [];
21
23
  logger_1.Logger.loading(`Checking package transports...`);
22
24
  const aTransports = yield context.runtime.remotePackageData.artifact.getTransportBinaries(context.rawInput.contextData.r3transOptions);
23
25
  logger_1.Logger.log(`Package content: ${aTransports.map(o => {
@@ -47,6 +49,9 @@ exports.checkTransports = {
47
49
  else {
48
50
  context.runtime.packageTransports.devc.binaries = aDevcTransports[0];
49
51
  logger_1.Logger.log(`DEVC transport is ${context.runtime.packageTransports.devc.binaries.trkorr}.`, true);
52
+ if (context.rawInput.installData.installDevclass.keepOriginal) {
53
+ checkExistance.push(context.runtime.packageTransports.devc.binaries.trkorr);
54
+ }
50
55
  }
51
56
  if (aTadirTransports.length !== 1) {
52
57
  logger_1.Logger.error(`Zero or multiple TADIR transports found`, true);
@@ -55,6 +60,7 @@ exports.checkTransports = {
55
60
  else {
56
61
  context.runtime.packageTransports.tadir.binaries = aTadirTransports[0];
57
62
  logger_1.Logger.log(`TADIR transport is ${context.runtime.packageTransports.tadir.binaries.trkorr}.`, true);
63
+ checkExistance.push(context.runtime.packageTransports.tadir.binaries.trkorr);
58
64
  const tadirE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.tadir.binaries.binaries.data, 'E071'));
59
65
  logger_1.Logger.log(`TADIR E071: ${JSON.stringify(tadirE071)}`, true);
60
66
  context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(tadirE071);
@@ -65,7 +71,7 @@ exports.checkTransports = {
65
71
  context.rawInput.installData.import.noLang = !(yield inquirer_1.Inquirer.prompt({
66
72
  type: `confirm`,
67
73
  name: `noLang`,
68
- message: `Import language translations transport?`,
74
+ message: `Import translations transport?`,
69
75
  default: true,
70
76
  })).noLang;
71
77
  }
@@ -77,6 +83,9 @@ exports.checkTransports = {
77
83
  }
78
84
  context.runtime.packageTransports.lang.binaries = aLangTransports[0];
79
85
  logger_1.Logger.log(`LANG transport is ${context.runtime.packageTransports.lang.binaries.trkorr}.`, true);
86
+ if (!context.rawInput.installData.import.noLang) {
87
+ checkExistance.push(context.runtime.packageTransports.lang.binaries.trkorr);
88
+ }
80
89
  const langE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.lang.binaries.binaries.data, 'E071'));
81
90
  logger_1.Logger.log(`LANG E071: ${JSON.stringify(langE071)}`, true);
82
91
  context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(langE071);
@@ -100,6 +109,9 @@ exports.checkTransports = {
100
109
  }
101
110
  context.runtime.packageTransports.cust.binaries = aCustTransports[0];
102
111
  logger_1.Logger.log(`CUST transport is ${context.runtime.packageTransports.cust.binaries.trkorr}.`, true);
112
+ if (!context.rawInput.installData.import.noCust) {
113
+ checkExistance.push(context.runtime.packageTransports.cust.binaries.trkorr);
114
+ }
103
115
  const custE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.cust.binaries.binaries.data, 'E071'));
104
116
  logger_1.Logger.log(`CUST E071: ${JSON.stringify(custE071)}`, true);
105
117
  context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(custE071);
@@ -116,5 +128,63 @@ exports.checkTransports = {
116
128
  }
117
129
  context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(devcE071);
118
130
  context.runtime.installData.entries = context.runtime.packageTransportsData.e071;
131
+ logger_1.Logger.loading(`Checking if ${checkExistance.length} transports exist before importing them`, true);
132
+ for (const trkorr of checkExistance) {
133
+ const oTransport = new transport_1.Transport(trkorr);
134
+ const e070 = yield oTransport.getE070();
135
+ if (e070) {
136
+ logger_1.Logger.warning(`${trkorr} already exists in system!`, true);
137
+ const trmRelevant = yield oTransport.isTrmRelevant();
138
+ const linkedPackage = yield oTransport.getLinkedPackage();
139
+ if (linkedPackage) {
140
+ logger_1.Logger.log(`${trkorr} package is ${linkedPackage.packageName}`, true);
141
+ if (linkedPackage.compareName(context.runtime.remotePackageData.trmManifest.name) && linkedPackage.compareRegistry(context.runtime.registry)) {
142
+ logger_1.Logger.log(`${trkorr} same package (updating?)`, true);
143
+ }
144
+ else {
145
+ logger_1.Logger.log(`${trkorr} is linked to another package, will later be migrated`, true);
146
+ context.runtime.generatedData.migrations.push(oTransport);
147
+ context.runtime.generatedData.tmsTxtRefresh.push(oTransport);
148
+ }
149
+ }
150
+ else if (trmRelevant) {
151
+ logger_1.Logger.log(`${trkorr} is TRM relevant but no linked package (could be DEVC, LANG etc..). No migration, just tms refresh`, true);
152
+ context.runtime.generatedData.tmsTxtRefresh.push(oTransport);
153
+ }
154
+ else {
155
+ if (yield oTransport.isReleased()) {
156
+ logger_1.Logger.warning(`Transport ${trkorr} already exists in target system ${systemConnector_1.SystemConnector.getDest()}`);
157
+ logger_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.trmManifest.name}".`);
158
+ logger_1.Logger.warning(`All of the content of the existing transport will remain untouched, however you need to manually create a new transport if you want to use it again in the future.`);
159
+ if (!context.rawInput.installData.import.replaceExistingTransports) {
160
+ var continueInstall;
161
+ if (!context.rawInput.contextData.noInquirer) {
162
+ continueInstall = (yield inquirer_1.Inquirer.prompt({
163
+ name: `continue`,
164
+ message: `Continue install?`,
165
+ type: `confirm`,
166
+ default: true
167
+ })).continue;
168
+ }
169
+ else {
170
+ continueInstall = false;
171
+ }
172
+ if (continueInstall) {
173
+ context.runtime.generatedData.tmsTxtRefresh.push(oTransport);
174
+ }
175
+ else {
176
+ throw new Error(`Transport ${trkorr} already exists in target system ${systemConnector_1.SystemConnector.getDest()} and transport rewrite was denied.`);
177
+ }
178
+ }
179
+ }
180
+ else {
181
+ throw new Error(`Transport ${trkorr} already exists in target system ${systemConnector_1.SystemConnector.getDest()} and is not released.`);
182
+ }
183
+ }
184
+ }
185
+ else {
186
+ logger_1.Logger.success(`${trkorr} does not exist in system.`, true);
187
+ }
188
+ }
119
189
  })
120
190
  };
@@ -0,0 +1,3 @@
1
+ import { Step } from "@simonegaffurini/sammarksworkflow";
2
+ import { InstallWorkflowContext } from ".";
3
+ export declare const executePostActivities: Step<InstallWorkflowContext>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.executePostActivities = void 0;
13
+ const logger_1 = require("../../logger");
14
+ const manifest_1 = require("../../manifest");
15
+ exports.executePostActivities = {
16
+ name: 'execute-post-activities',
17
+ filter: (context) => __awaiter(void 0, void 0, void 0, function* () {
18
+ if (context.rawInput.installData.skipPostActivities) {
19
+ logger_1.Logger.log(`Skipping post activities (user input)`, true);
20
+ return false;
21
+ }
22
+ else {
23
+ if (context.runtime.remotePackageData.trmManifest.postActivities && context.runtime.remotePackageData.trmManifest.postActivities.length > 0) {
24
+ return true;
25
+ }
26
+ else {
27
+ logger_1.Logger.log(`Skipping post activities (none defined)`, true);
28
+ return false;
29
+ }
30
+ }
31
+ }),
32
+ run: (context) => __awaiter(void 0, void 0, void 0, function* () {
33
+ logger_1.Logger.log('Execute post activities step', true);
34
+ var counter = 0;
35
+ for (var data of context.runtime.remotePackageData.trmManifest.postActivities) {
36
+ counter++;
37
+ logger_1.Logger.setPrefix(`(${counter}/${context.runtime.remotePackageData.trmManifest.postActivities.length}) `);
38
+ try {
39
+ if (Array.isArray(data.parameters)) {
40
+ data.parameters.forEach(param => {
41
+ switch (param.value) {
42
+ case '&INSTALL_TRANSPORT&':
43
+ try {
44
+ param.value = context.runtime.installData.transport.trkorr;
45
+ }
46
+ catch (x) {
47
+ throw new Error(`Cannot find install transport number`);
48
+ }
49
+ break;
50
+ }
51
+ });
52
+ }
53
+ const postActivity = new manifest_1.PostActivity(data);
54
+ yield postActivity.execute();
55
+ }
56
+ catch (e) {
57
+ logger_1.Logger.error(`Failed execution of post activity: ${e.toString()}`);
58
+ }
59
+ logger_1.Logger.removePrefix();
60
+ }
61
+ })
62
+ };
@@ -36,6 +36,7 @@ exports.generateInstallTransport = {
36
36
  context.runtime.installData.transport = yield systemConnector_1.SystemConnector.getPackageWorkbenchTransport(context.runtime.remotePackageData.trmPackage);
37
37
  if (context.runtime.installData.transport) {
38
38
  logger_1.Logger.log(`Install transport (${context.runtime.installData.transport.trkorr}) already exists, won't create a new one.`, true);
39
+ yield context.runtime.installData.transport.removeComments();
39
40
  }
40
41
  else {
41
42
  context.runtime.installData.transport = yield transport_1.Transport.createWb({
@@ -40,6 +40,7 @@ exports.importCustTransport = {
40
40
  trTarget: systemConnector_1.SystemConnector.getDest(),
41
41
  r3transOption: context.rawInput.contextData.r3transOptions
42
42
  });
43
+ yield context.runtime.packageTransports.cust.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
43
44
  logger_1.Logger.loading(`Importing ${context.runtime.packageTransports.cust.binaries.trkorr}`, true);
44
45
  yield context.runtime.packageTransports.cust.instance.import(importTimeout);
45
46
  logger_1.Logger.success(`Transport ${context.runtime.packageTransports.cust.binaries.trkorr} imported`, true);
@@ -36,6 +36,7 @@ exports.importDevcTransport = {
36
36
  trTarget: systemConnector_1.SystemConnector.getDest(),
37
37
  r3transOption: context.rawInput.contextData.r3transOptions
38
38
  });
39
+ yield context.runtime.packageTransports.devc.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
39
40
  logger_1.Logger.loading(`Importing ${context.runtime.packageTransports.devc.binaries.trkorr}`, true);
40
41
  yield context.runtime.packageTransports.devc.instance.import(importTimeout);
41
42
  logger_1.Logger.success(`Transport ${context.runtime.packageTransports.devc.binaries.trkorr} imported`, true);
@@ -43,6 +44,9 @@ exports.importDevcTransport = {
43
44
  if (rootDevclass && rootDevclass.parentcl) {
44
45
  yield systemConnector_1.SystemConnector.setPackageSuperpackage(context.runtime.originalData.hierarchy.devclass, rootDevclass.parentcl);
45
46
  }
47
+ else {
48
+ yield systemConnector_1.SystemConnector.clearPackageSuperpackage(context.runtime.originalData.hierarchy.devclass);
49
+ }
46
50
  for (const tdevc of context.runtime.packageTransportsData.tdevc) {
47
51
  const object = {
48
52
  pgmid: 'R3TR',
@@ -40,6 +40,7 @@ exports.importLangTransport = {
40
40
  trTarget: systemConnector_1.SystemConnector.getDest(),
41
41
  r3transOption: context.rawInput.contextData.r3transOptions
42
42
  });
43
+ yield context.runtime.packageTransports.lang.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
43
44
  logger_1.Logger.loading(`Importing ${context.runtime.packageTransports.lang.binaries.trkorr}`, true);
44
45
  yield context.runtime.packageTransports.lang.instance.import(importTimeout);
45
46
  logger_1.Logger.success(`Transport ${context.runtime.packageTransports.lang.binaries.trkorr} imported`, true);
@@ -29,6 +29,7 @@ exports.importTadirTransport = {
29
29
  trTarget: systemConnector_1.SystemConnector.getDest(),
30
30
  r3transOption: context.rawInput.contextData.r3transOptions
31
31
  });
32
+ yield context.runtime.packageTransports.tadir.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
32
33
  logger_1.Logger.loading(`Importing ${context.runtime.packageTransports.tadir.binaries.trkorr}`, true);
33
34
  yield context.runtime.packageTransports.tadir.instance.import(importTimeout);
34
35
  logger_1.Logger.success(`Transport ${context.runtime.packageTransports.tadir.binaries.trkorr} imported`, true);
@@ -48,6 +49,7 @@ exports.importTadirTransport = {
48
49
  logger_1.Logger.log(`Running TADIR interface for object ${object.pgmid} ${object.object} ${object.objName}, devclass ${tadir.devclass} -> ${object.devclass}, src system ${tadir.srcsystem} -> ${object.srcsystem}`, true);
49
50
  yield systemConnector_1.SystemConnector.tadirInterface(object);
50
51
  }
52
+ yield systemConnector_1.SystemConnector.removeSkipTrkorr(context.runtime.packageTransports.tadir.binaries.trkorr);
51
53
  }),
52
54
  revert: (context) => __awaiter(void 0, void 0, void 0, function* () {
53
55
  logger_1.Logger.log('Rollback TADIR Transport step', true);