trm-core 6.5.1 → 6.7.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.
- package/changelog.txt +17 -0
- package/dist/actions/findDependencies/index.d.ts +1 -0
- package/dist/actions/findDependencies/setTrmDependencies.js +5 -0
- package/dist/actions/install/generateInstallTransport.js +3 -1
- package/dist/actions/publish/findDependencies.js +9 -2
- package/dist/actions/publish/generateTadirTransport.js +0 -5
- package/dist/actions/publish/getSourceCode.js +16 -4
- package/dist/actions/publish/index.d.ts +0 -1
- package/dist/actions/publish/init.js +3 -1
- package/dist/actions/publish/setManifestValues.js +45 -6
- package/dist/actions/publish/setTransportTarget.js +1 -1
- package/dist/client/Login.d.ts +1 -1
- package/dist/client/RESTClient.d.ts +7 -2
- package/dist/client/RESTClient.js +50 -9
- package/dist/client/RFCClient.d.ts +7 -2
- package/dist/client/RFCClient.js +71 -9
- package/dist/client/components/PROGNAME.d.ts +1 -0
- package/dist/client/components/PROGNAME.js +2 -0
- package/dist/client/components/index.d.ts +1 -0
- package/dist/client/components/index.js +1 -0
- package/dist/client/struct/ZTY_SER_OBJ.d.ts +7 -0
- package/dist/client/struct/ZTY_SER_OBJ.js +2 -0
- package/dist/client/struct/ZTY_TRM_PACKAGE.d.ts +13 -0
- package/dist/client/struct/ZTY_TRM_PACKAGE.js +2 -0
- package/dist/client/struct/index.d.ts +2 -0
- package/dist/client/struct/index.js +2 -0
- package/dist/commons/getAxiosInstance.js +12 -1
- package/dist/manifest/PostActivity.d.ts +1 -0
- package/dist/manifest/PostActivity.js +33 -15
- package/dist/systemConnector/ISystemConnector.d.ts +6 -2
- package/dist/systemConnector/RESTSystemConnector.d.ts +7 -2
- package/dist/systemConnector/RESTSystemConnector.js +10 -2
- package/dist/systemConnector/RFCSystemConnector.d.ts +7 -2
- package/dist/systemConnector/RFCSystemConnector.js +11 -3
- package/dist/systemConnector/SystemConnector.d.ts +6 -2
- package/dist/systemConnector/SystemConnector.js +9 -2
- package/dist/systemConnector/SystemConnectorBase.d.ts +2 -0
- package/dist/systemConnector/SystemConnectorBase.js +48 -4
- package/dist/transport/Transport.d.ts +3 -2
- package/dist/transport/Transport.js +41 -34
- package/package.json +4 -2
package/changelog.txt
CHANGED
|
@@ -8,6 +8,23 @@ Legend
|
|
|
8
8
|
+ : added
|
|
9
9
|
- : removed
|
|
10
10
|
|
|
11
|
+
2025-05-14 v6.7.0
|
|
12
|
+
-------------------
|
|
13
|
+
! trm-server ^3.0.0
|
|
14
|
+
* abapgit ignored objects
|
|
15
|
+
+ post activity pre check
|
|
16
|
+
+ get installed packages from backend where possible
|
|
17
|
+
+ regen SAPLZTRM before post activity
|
|
18
|
+
* rest sap-client
|
|
19
|
+
+ keep track of post activities based on latest release
|
|
20
|
+
|
|
21
|
+
2025-05-08 v6.6.0
|
|
22
|
+
-------------------
|
|
23
|
+
* no integrity with trm-server/trm-rest dependency allowed
|
|
24
|
+
! REST Client and RFC Client error generic -> specific
|
|
25
|
+
! REST Client error xml body parsing with title as message
|
|
26
|
+
! trm-server ^2.2.2
|
|
27
|
+
|
|
11
28
|
2025-05-08 v6.5.1
|
|
12
29
|
-------------------
|
|
13
30
|
! rest error handling
|
|
@@ -98,6 +98,7 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
|
|
|
98
98
|
var arrayIndex1;
|
|
99
99
|
var arrayIndex2;
|
|
100
100
|
var append;
|
|
101
|
+
var ignoreNoIntegrity;
|
|
101
102
|
if (trmServerPackage.package && trmServerPackage.package.getDevclass() === tadir.devclass) {
|
|
102
103
|
trm_commons_1.Logger.log(`Dependency with TRM SERVER package`, true);
|
|
103
104
|
devclass = trmServerPackage.package.getDevclass();
|
|
@@ -110,6 +111,7 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
|
|
|
110
111
|
trmServerPackage.integrity = integrity;
|
|
111
112
|
}
|
|
112
113
|
append = true;
|
|
114
|
+
ignoreNoIntegrity = true;
|
|
113
115
|
}
|
|
114
116
|
else if (trmRestPackage.package && trmRestPackage.package.getDevclass() === tadir.devclass) {
|
|
115
117
|
trm_commons_1.Logger.log(`Dependency with TRM REST package`, true);
|
|
@@ -123,8 +125,10 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
|
|
|
123
125
|
trmRestPackage.integrity = integrity;
|
|
124
126
|
}
|
|
125
127
|
append = true;
|
|
128
|
+
ignoreNoIntegrity = true;
|
|
126
129
|
}
|
|
127
130
|
else {
|
|
131
|
+
ignoreNoIntegrity = false;
|
|
128
132
|
trm_commons_1.Logger.log(`Searching transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true);
|
|
129
133
|
const allTransports = yield transport_1.Transport.getTransportsFromObject(tadir, transportsObjectCache);
|
|
130
134
|
trm_commons_1.Logger.log(`Found ${allTransports.length} transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true);
|
|
@@ -213,6 +217,7 @@ const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, v
|
|
|
213
217
|
devclass,
|
|
214
218
|
package: trmPackage,
|
|
215
219
|
integrity,
|
|
220
|
+
ignoreNoIntegrity,
|
|
216
221
|
sapEntries: []
|
|
217
222
|
});
|
|
218
223
|
arrayIndex1--;
|
|
@@ -32,15 +32,17 @@ exports.generateInstallTransport = {
|
|
|
32
32
|
trm_commons_1.Logger.warning(`Install transport was not generated because the package contains non-transportable objects.`);
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
trm_commons_1.Logger.loading(`
|
|
35
|
+
trm_commons_1.Logger.loading(`Checking install transport...`);
|
|
36
36
|
context.runtime.installData.transport = yield systemConnector_1.SystemConnector.getPackageWorkbenchTransport(context.runtime.remotePackageData.trmPackage);
|
|
37
37
|
if (context.runtime.installData.transport) {
|
|
38
38
|
trm_commons_1.Logger.log(`Install transport (${context.runtime.installData.transport.trkorr}) already exists, won't create a new one.`, true);
|
|
39
|
+
trm_commons_1.Logger.loading(`Updating install transport...`);
|
|
39
40
|
if (commons_1.TrmServerUpgrade.getInstance().removeComments()) {
|
|
40
41
|
yield context.runtime.installData.transport.removeComments();
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
else {
|
|
45
|
+
trm_commons_1.Logger.loading(`Generating install transport...`);
|
|
44
46
|
context.runtime.installData.transport = yield transport_1.Transport.createWb({
|
|
45
47
|
text: `TRM generated transport`,
|
|
46
48
|
target: context.rawInput.installData.installTransport.targetSystem || ''
|
|
@@ -73,9 +73,16 @@ exports.findDependencies = {
|
|
|
73
73
|
const dependencyVersionRange = `^${dependencyManifest.version}`;
|
|
74
74
|
const dependencyRegistry = o.package.registry.getRegistryType() === registry_1.RegistryType.PUBLIC ? undefined : o.package.registry.endpoint;
|
|
75
75
|
if (!o.integrity) {
|
|
76
|
-
|
|
76
|
+
if (o.ignoreNoIntegrity) {
|
|
77
|
+
trm_commons_1.Logger.warning(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name}: ${dependencyVersionRange} (Integrity not found!)`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
throw new Error(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name}: Integrity not found!`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
trm_commons_1.Logger.info(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name} ${dependencyVersionRange}`);
|
|
77
85
|
}
|
|
78
|
-
trm_commons_1.Logger.info(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name} ${dependencyVersionRange}`);
|
|
79
86
|
context.runtime.trmPackage.manifest.dependencies.push({
|
|
80
87
|
name: dependencyManifest.name,
|
|
81
88
|
version: dependencyVersionRange,
|
|
@@ -19,17 +19,12 @@ exports.generateTadirTransport = {
|
|
|
19
19
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
20
|
trm_commons_1.Logger.log('Generate TADIR transport step', true);
|
|
21
21
|
var aTadir = context.runtime.packageData.tadir.filter(o => !(o.pgmid === 'R3TR' && o.object === 'DEVC'));
|
|
22
|
-
var ignoredObjects = 0;
|
|
23
22
|
context.runtime.abapGitData.sourceCode.ignoredObjects.forEach(o => {
|
|
24
23
|
const objectIndex = aTadir.findIndex(k => k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName);
|
|
25
24
|
if (objectIndex >= 0) {
|
|
26
|
-
ignoredObjects++;
|
|
27
25
|
aTadir.splice(objectIndex, 1);
|
|
28
26
|
}
|
|
29
27
|
});
|
|
30
|
-
if (ignoredObjects > 0) {
|
|
31
|
-
trm_commons_1.Logger.info(`${ignoredObjects} object/s are ignored (as specified in .abapgit.xml)`);
|
|
32
|
-
}
|
|
33
28
|
if (aTadir.length === 0) {
|
|
34
29
|
throw new Error(`Package ${context.rawInput.packageData.devclass} has no content.`);
|
|
35
30
|
}
|
|
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.getSourceCode = void 0;
|
|
13
13
|
const trm_commons_1 = require("trm-commons");
|
|
14
14
|
const systemConnector_1 = require("../../systemConnector");
|
|
15
|
+
const abapgit_1 = require("../../abapgit");
|
|
16
|
+
const minimatch_1 = require("minimatch");
|
|
15
17
|
exports.getSourceCode = {
|
|
16
18
|
name: 'get-source-code',
|
|
17
19
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -20,13 +22,23 @@ exports.getSourceCode = {
|
|
|
20
22
|
trm_commons_1.Logger.loading(`Reading ${context.rawInput.packageData.devclass} source code...`);
|
|
21
23
|
const sourceCode = yield systemConnector_1.SystemConnector.getAbapgitSource(context.rawInput.packageData.devclass);
|
|
22
24
|
context.runtime.abapGitData.sourceCode.zip = sourceCode.zip;
|
|
23
|
-
context.runtime.abapGitData.
|
|
25
|
+
context.runtime.abapGitData.dotAbapGit = yield abapgit_1.DotAbapGit.fromDevclass(context.rawInput.packageData.devclass);
|
|
26
|
+
const ignoredPatterns = context.runtime.abapGitData.dotAbapGit.getIgnoredFiles();
|
|
24
27
|
context.runtime.packageData.tadir.forEach(o => {
|
|
25
|
-
const
|
|
26
|
-
if (
|
|
27
|
-
|
|
28
|
+
const abapgitObject = sourceCode.objects.find(k => k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName);
|
|
29
|
+
if (abapgitObject) {
|
|
30
|
+
ignoredPatterns.forEach(pattern => {
|
|
31
|
+
if ((0, minimatch_1.minimatch)(abapgitObject.fullPath, pattern, { matchBase: true })) {
|
|
32
|
+
if (!context.runtime.abapGitData.sourceCode.ignoredObjects.find(k => k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName)) {
|
|
33
|
+
context.runtime.abapGitData.sourceCode.ignoredObjects.push(o);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
28
37
|
}
|
|
29
38
|
});
|
|
39
|
+
if (ignoredPatterns.length > 0) {
|
|
40
|
+
trm_commons_1.Logger.info(`Excluding ${context.runtime.abapGitData.sourceCode.ignoredObjects.length} object(s) as configured in .abapgit.xml:\n${ignoredPatterns.join('\n ')}`);
|
|
41
|
+
}
|
|
30
42
|
}
|
|
31
43
|
catch (e) {
|
|
32
44
|
trm_commons_1.Logger.error(e.toString(), true);
|
|
@@ -71,6 +71,9 @@ exports.init = {
|
|
|
71
71
|
if (context.rawInput.packageData.manifest.sapEntries === undefined) {
|
|
72
72
|
context.rawInput.packageData.manifest.sapEntries = {};
|
|
73
73
|
}
|
|
74
|
+
if (!context.rawInput.packageData.manifest.postActivities) {
|
|
75
|
+
context.rawInput.packageData.manifest.postActivities = [];
|
|
76
|
+
}
|
|
74
77
|
if (typeof (context.rawInput.publishData.customizingTransports) === 'string') {
|
|
75
78
|
context.rawInput.publishData.customizingTransports = context.rawInput.publishData.customizingTransports.split(',').map(o => {
|
|
76
79
|
try {
|
|
@@ -161,7 +164,6 @@ exports.init = {
|
|
|
161
164
|
dotAbapGit: undefined,
|
|
162
165
|
sourceCode: {
|
|
163
166
|
ignoredObjects: [],
|
|
164
|
-
objects: [],
|
|
165
167
|
zip: undefined
|
|
166
168
|
}
|
|
167
169
|
}
|
|
@@ -19,6 +19,7 @@ const manifest_1 = require("../../manifest");
|
|
|
19
19
|
const chalk_1 = __importDefault(require("chalk"));
|
|
20
20
|
const FileSystem_1 = require("../../registry/FileSystem");
|
|
21
21
|
const validators_1 = require("../../validators");
|
|
22
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
22
23
|
exports.setManifestValues = {
|
|
23
24
|
name: 'set-manifest-values',
|
|
24
25
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -31,21 +32,59 @@ exports.setManifestValues = {
|
|
|
31
32
|
context.runtime.trmPackage.manifest.license = context.runtime.trmPackage.manifest.license || context.runtime.trmPackage.latestReleaseManifest.license;
|
|
32
33
|
context.runtime.trmPackage.manifest.website = context.runtime.trmPackage.manifest.website || context.runtime.trmPackage.latestReleaseManifest.website;
|
|
33
34
|
if (context.runtime.trmPackage.manifest.authors) {
|
|
34
|
-
if (Array.isArray(context.runtime.trmPackage.
|
|
35
|
-
context.runtime.trmPackage.manifest.authors
|
|
35
|
+
if (Array.isArray(context.runtime.trmPackage.latestReleaseManifest.authors)) {
|
|
36
|
+
if (!Array.isArray(context.runtime.trmPackage.manifest.authors)) {
|
|
37
|
+
context.runtime.trmPackage.manifest.authors = manifest_1.Manifest.stringAuthorsToArray(context.runtime.trmPackage.manifest.authors);
|
|
38
|
+
}
|
|
39
|
+
context.runtime.trmPackage.latestReleaseManifest.authors.forEach(o => {
|
|
40
|
+
if (o.email && o.name) {
|
|
41
|
+
if (!context.runtime.trmPackage.manifest.authors.find(k => k.email === o.email && k.name === o.name)) {
|
|
42
|
+
context.runtime.trmPackage.manifest.authors.push(o);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (o.email) {
|
|
46
|
+
if (!context.runtime.trmPackage.manifest.authors.find(k => k.email === o.email)) {
|
|
47
|
+
context.runtime.trmPackage.manifest.authors.push(o);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else if (o.name) {
|
|
51
|
+
if (!context.runtime.trmPackage.manifest.authors.find(k => k.name === o.name)) {
|
|
52
|
+
context.runtime.trmPackage.manifest.authors.push(o);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
36
56
|
}
|
|
37
57
|
}
|
|
38
58
|
else {
|
|
39
59
|
context.runtime.trmPackage.manifest.authors = context.runtime.trmPackage.latestReleaseManifest.authors;
|
|
40
60
|
}
|
|
41
61
|
if (context.runtime.trmPackage.manifest.keywords) {
|
|
42
|
-
if (Array.isArray(context.runtime.trmPackage.
|
|
43
|
-
context.runtime.trmPackage.manifest.keywords
|
|
62
|
+
if (Array.isArray(context.runtime.trmPackage.latestReleaseManifest.keywords)) {
|
|
63
|
+
if (!Array.isArray(context.runtime.trmPackage.manifest.keywords)) {
|
|
64
|
+
context.runtime.trmPackage.manifest.keywords = manifest_1.Manifest.stringKeywordsToArray(context.runtime.trmPackage.manifest.keywords);
|
|
65
|
+
}
|
|
66
|
+
context.runtime.trmPackage.latestReleaseManifest.keywords.forEach(o => {
|
|
67
|
+
if (!context.runtime.trmPackage.manifest.keywords.find(k => k === o)) {
|
|
68
|
+
context.runtime.trmPackage.manifest.keywords.push(o);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
44
71
|
}
|
|
45
72
|
}
|
|
46
73
|
else {
|
|
47
74
|
context.runtime.trmPackage.manifest.keywords = context.runtime.trmPackage.latestReleaseManifest.keywords;
|
|
48
75
|
}
|
|
76
|
+
if (context.runtime.trmPackage.manifest.postActivities) {
|
|
77
|
+
if (Array.isArray(context.runtime.trmPackage.latestReleaseManifest.postActivities)) {
|
|
78
|
+
context.runtime.trmPackage.latestReleaseManifest.postActivities.forEach(o => {
|
|
79
|
+
if (!context.runtime.trmPackage.manifest.postActivities.find(k => lodash_1.default.isEqual(k, o))) {
|
|
80
|
+
context.runtime.trmPackage.manifest.postActivities.push(o);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
context.runtime.trmPackage.manifest.postActivities = context.runtime.trmPackage.latestReleaseManifest.postActivities;
|
|
87
|
+
}
|
|
49
88
|
}
|
|
50
89
|
}
|
|
51
90
|
if (!context.rawInput.contextData.noInquirer) {
|
|
@@ -192,7 +231,7 @@ exports.setManifestValues = {
|
|
|
192
231
|
}
|
|
193
232
|
if (!context.rawInput.contextData.noInquirer) {
|
|
194
233
|
const inq = yield trm_commons_1.Inquirer.prompt([{
|
|
195
|
-
message: `Do you want to edit post activities?`,
|
|
234
|
+
message: context.runtime.trmPackage.manifest.postActivities.length > 0 ? `Do you want to edit ${context.runtime.trmPackage.manifest.postActivities.length} post activities?` : `Do you want to add post activities?`,
|
|
196
235
|
type: 'confirm',
|
|
197
236
|
name: 'editPostActivities',
|
|
198
237
|
default: false
|
|
@@ -204,7 +243,7 @@ exports.setManifestValues = {
|
|
|
204
243
|
when: (hash) => {
|
|
205
244
|
return hash.editPostActivities;
|
|
206
245
|
},
|
|
207
|
-
default: JSON.stringify(context.runtime.trmPackage.manifest.postActivities
|
|
246
|
+
default: JSON.stringify(context.runtime.trmPackage.manifest.postActivities, null, 2),
|
|
208
247
|
validate: (input) => {
|
|
209
248
|
try {
|
|
210
249
|
const parsedInput = JSON.parse(input);
|
package/dist/client/Login.d.ts
CHANGED
|
@@ -58,7 +58,12 @@ export declare class RESTClient implements IClient {
|
|
|
58
58
|
getDotAbapgit(devclass: components.DEVCLASS): Promise<Buffer>;
|
|
59
59
|
getAbapgitSource(devclass: components.DEVCLASS): Promise<{
|
|
60
60
|
zip: Buffer;
|
|
61
|
-
objects: struct.
|
|
61
|
+
objects: struct.ZTY_SER_OBJ[];
|
|
62
62
|
}>;
|
|
63
|
-
executePostActivity(data: Buffer): Promise<
|
|
63
|
+
executePostActivity(data: Buffer, pre?: boolean): Promise<{
|
|
64
|
+
messages: struct.SYMSG[];
|
|
65
|
+
execute?: boolean;
|
|
66
|
+
}>;
|
|
67
|
+
getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
|
|
68
|
+
regenProg(prog: components.PROGNAME): Promise<void>;
|
|
64
69
|
}
|
|
@@ -59,6 +59,9 @@ class RESTClient {
|
|
|
59
59
|
this.endpoint = this.endpoint.trim();
|
|
60
60
|
this._axiosInstance = (0, commons_1.getAxiosInstance)({
|
|
61
61
|
baseURL: this.endpoint,
|
|
62
|
+
params: {
|
|
63
|
+
'sap-client': `${this._login.client}`
|
|
64
|
+
},
|
|
62
65
|
auth: {
|
|
63
66
|
username: this._login.user,
|
|
64
67
|
password: this._login.passwd
|
|
@@ -69,11 +72,17 @@ class RESTClient {
|
|
|
69
72
|
open() {
|
|
70
73
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
74
|
if (!this._connected) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
var response;
|
|
76
|
+
try {
|
|
77
|
+
response = yield this._axiosInstance.get('/', {
|
|
78
|
+
timeout: 5000
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
throw new _1.RESTClientError("ZNO_CONN", null, e, e.message);
|
|
83
|
+
}
|
|
75
84
|
if (response.status !== 200) {
|
|
76
|
-
throw new
|
|
85
|
+
throw new _1.RESTClientError("ZNO_CONN", null, null, `Couldn't reach ${this.endpoint}!`);
|
|
77
86
|
}
|
|
78
87
|
else {
|
|
79
88
|
this._connected = true;
|
|
@@ -153,7 +162,7 @@ class RESTClient {
|
|
|
153
162
|
return msg.trim();
|
|
154
163
|
}
|
|
155
164
|
else {
|
|
156
|
-
throw new
|
|
165
|
+
throw new _1.RESTClientError("ZMSG_NOT_FOUND", null, null, `Message ${msgnr}, class ${data.class}, lang ${this._cLangu} not found.`);
|
|
157
166
|
}
|
|
158
167
|
});
|
|
159
168
|
}
|
|
@@ -609,16 +618,48 @@ class RESTClient {
|
|
|
609
618
|
};
|
|
610
619
|
}
|
|
611
620
|
catch (e) {
|
|
612
|
-
throw new
|
|
621
|
+
throw new _1.RESTClientError("ZPARSE_API_DATA", null, null, `Can't parse api data.`);
|
|
613
622
|
}
|
|
614
623
|
});
|
|
615
624
|
}
|
|
616
|
-
executePostActivity(data) {
|
|
625
|
+
executePostActivity(data, pre) {
|
|
617
626
|
return __awaiter(this, void 0, void 0, function* () {
|
|
618
|
-
const
|
|
627
|
+
const formData = new FormData.default();
|
|
628
|
+
formData.append('data', data, 'data');
|
|
629
|
+
formData.append('pre', pre ? 'X' : '');
|
|
630
|
+
const result = (yield this._axiosInstance.post('/execute_post_activity', formData, {
|
|
619
631
|
timeout: 60000
|
|
620
632
|
})).data;
|
|
621
|
-
return
|
|
633
|
+
return {
|
|
634
|
+
messages: result.messages,
|
|
635
|
+
execute: result.execute === 'X'
|
|
636
|
+
};
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
getInstalledPackagesBackend() {
|
|
640
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
641
|
+
const result = (yield this._axiosInstance.get('/get_installed_packages')).data;
|
|
642
|
+
return result.packages.map(o => {
|
|
643
|
+
o.xmanifest = o.xmanifest ? Buffer.from(o.xmanifest, 'base64').toString('utf8') : undefined;
|
|
644
|
+
return {
|
|
645
|
+
name: o.name,
|
|
646
|
+
version: o.version,
|
|
647
|
+
registry: o.registry,
|
|
648
|
+
manifest: o.xmanifest,
|
|
649
|
+
tdevc: o.tdevc,
|
|
650
|
+
transport: {
|
|
651
|
+
trkorr: o.transport ? o.transport.trkorr : undefined,
|
|
652
|
+
migration: o.transport ? o.transport.migration === 'X' : undefined
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
});
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
regenProg(prog) {
|
|
659
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
660
|
+
yield this._axiosInstance.post('/regen_prog', {
|
|
661
|
+
progname: prog
|
|
662
|
+
});
|
|
622
663
|
});
|
|
623
664
|
}
|
|
624
665
|
}
|
|
@@ -57,7 +57,12 @@ export declare class RFCClient implements IClient {
|
|
|
57
57
|
getDotAbapgit(devclass: components.DEVCLASS): Promise<Buffer>;
|
|
58
58
|
getAbapgitSource(devclass: components.DEVCLASS): Promise<{
|
|
59
59
|
zip: Buffer;
|
|
60
|
-
objects: struct.
|
|
60
|
+
objects: struct.ZTY_SER_OBJ[];
|
|
61
61
|
}>;
|
|
62
|
-
executePostActivity(data: Buffer): Promise<
|
|
62
|
+
executePostActivity(data: Buffer, pre?: boolean): Promise<{
|
|
63
|
+
messages: struct.SYMSG[];
|
|
64
|
+
execute?: boolean;
|
|
65
|
+
}>;
|
|
66
|
+
getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
|
|
67
|
+
regenProg(prog: components.PROGNAME): Promise<void>;
|
|
63
68
|
}
|
package/dist/client/RFCClient.js
CHANGED
|
@@ -51,6 +51,7 @@ const trm_commons_1 = require("trm-commons");
|
|
|
51
51
|
const fs_1 = require("fs");
|
|
52
52
|
const path_1 = __importDefault(require("path"));
|
|
53
53
|
const _1 = require(".");
|
|
54
|
+
const xml = __importStar(require("xml-js"));
|
|
54
55
|
const nodeRfcLib = 'node-rfc';
|
|
55
56
|
class RFCClient {
|
|
56
57
|
constructor(_rfcClientArgs, _cLangu, traceDir) {
|
|
@@ -73,7 +74,7 @@ class RFCClient {
|
|
|
73
74
|
const libPath = path_1.default.join(globalPath, nodeRfcLib);
|
|
74
75
|
trm_commons_1.Logger.log(`Node RFC lib path: ${libPath}`, true);
|
|
75
76
|
if (!(0, fs_1.existsSync)(libPath)) {
|
|
76
|
-
throw new
|
|
77
|
+
throw new _1.RFCClientError("ZRFC_LIB_NOT_FOUND", null, null, `${nodeRfcLib} not found. Run command "npm install ${nodeRfcLib} -g" to continue.`);
|
|
77
78
|
}
|
|
78
79
|
this._rfcClient = new (yield Promise.resolve(`${libPath}`).then(s => __importStar(require(s)))).Client(this._rfcClientArgs);
|
|
79
80
|
}
|
|
@@ -82,9 +83,14 @@ class RFCClient {
|
|
|
82
83
|
}
|
|
83
84
|
open() {
|
|
84
85
|
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
try {
|
|
87
|
+
trm_commons_1.Logger.loading(`Opening RFC connection`, true);
|
|
88
|
+
yield (yield this.getRfcClient()).open();
|
|
89
|
+
trm_commons_1.Logger.success(`RFC open`, true);
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
throw new _1.RFCClientError("ZNO_CONN", null, e, e.message);
|
|
93
|
+
}
|
|
88
94
|
});
|
|
89
95
|
}
|
|
90
96
|
checkConnection() {
|
|
@@ -194,7 +200,7 @@ class RFCClient {
|
|
|
194
200
|
return msg.trim();
|
|
195
201
|
}
|
|
196
202
|
else {
|
|
197
|
-
throw new
|
|
203
|
+
throw new _1.RFCClientError("ZMSG_NOT_FOUND", null, null, `Message ${msgnr}, class ${data.class}, lang ${this._cLangu} not found.`);
|
|
198
204
|
}
|
|
199
205
|
});
|
|
200
206
|
}
|
|
@@ -572,18 +578,74 @@ class RFCClient {
|
|
|
572
578
|
const result = yield this._call("ZTRM_GET_ABAPGIT_SOURCE", {
|
|
573
579
|
iv_devclass: devclass
|
|
574
580
|
});
|
|
581
|
+
const sXml = result['evObjects'].toString().replace(/&/g, "&").replace(/-/g, "-");
|
|
582
|
+
const oAbapXml = xml.xml2js(sXml, { compact: true });
|
|
583
|
+
const objects = oAbapXml['asx:abap']['asx:values']['OBJECTS'].item.map(o => {
|
|
584
|
+
return {
|
|
585
|
+
pgmid: o['PGMID']['_text'],
|
|
586
|
+
object: o['OBJECT']['_text'],
|
|
587
|
+
objName: o['OBJ_NAME']['_text'],
|
|
588
|
+
fullPath: o['FULL_PATH']['_text']
|
|
589
|
+
};
|
|
590
|
+
});
|
|
575
591
|
return {
|
|
576
592
|
zip: result['evZip'],
|
|
577
|
-
objects
|
|
593
|
+
objects
|
|
578
594
|
};
|
|
579
595
|
});
|
|
580
596
|
}
|
|
581
|
-
executePostActivity(data) {
|
|
597
|
+
executePostActivity(data, pre) {
|
|
582
598
|
return __awaiter(this, void 0, void 0, function* () {
|
|
583
599
|
const result = yield this._call("ZTRM_EXECUTE_POST_ACTIVITY", {
|
|
584
|
-
iv_data: data
|
|
600
|
+
iv_data: data,
|
|
601
|
+
iv_pre: pre ? 'X' : ''
|
|
602
|
+
});
|
|
603
|
+
return {
|
|
604
|
+
messages: result['etMessages'],
|
|
605
|
+
execute: result['evExecute'] === 'X'
|
|
606
|
+
};
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
getInstalledPackagesBackend() {
|
|
610
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
611
|
+
const result = yield this._call("ZTRM_GET_INSTALLED_PACKAGES");
|
|
612
|
+
const sXml = result['evPackages'].toString().replace(/&/g, "&").replace(/-/g, "-");
|
|
613
|
+
const oAbapXml = xml.xml2js(sXml, { compact: true });
|
|
614
|
+
return oAbapXml['asx:abap']['asx:values']['PACKAGES'].item.map(o => {
|
|
615
|
+
var flatTdevc = [];
|
|
616
|
+
if (o['TDEVC'] && o['TDEVC']['TDEVC']) {
|
|
617
|
+
if (!Array.isArray(o['TDEVC']['TDEVC'])) {
|
|
618
|
+
o['TDEVC']['TDEVC'] = [o['TDEVC']['TDEVC']];
|
|
619
|
+
}
|
|
620
|
+
flatTdevc = o['TDEVC']['TDEVC'].map((item) => {
|
|
621
|
+
const flattened = {};
|
|
622
|
+
for (const [key, value] of Object.entries(item)) {
|
|
623
|
+
if (typeof value === 'object' && value !== null && '_text' in value) {
|
|
624
|
+
flattened[key] = value._text;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
return flattened;
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
return {
|
|
631
|
+
name: o['NAME']['_text'],
|
|
632
|
+
version: o['VERSION']['_text'],
|
|
633
|
+
registry: o['REGISTRY']['_text'],
|
|
634
|
+
manifest: o['XMANIFEST']['_text'] ? Buffer.from(o['XMANIFEST']['_text'], 'base64').toString('utf8') : undefined,
|
|
635
|
+
transport: {
|
|
636
|
+
trkorr: o['TRANSPORT']['TRKORR']['_text'],
|
|
637
|
+
migration: o['TRANSPORT']['MIGRATION']['_text'] === 'X',
|
|
638
|
+
},
|
|
639
|
+
tdevc: (0, commons_1.normalize)(flatTdevc)
|
|
640
|
+
};
|
|
641
|
+
});
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
regenProg(prog) {
|
|
645
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
646
|
+
yield this._call("ZTRM_REGEN_PROG", {
|
|
647
|
+
iv_progname: prog
|
|
585
648
|
});
|
|
586
|
-
return result['etMessages'];
|
|
587
649
|
});
|
|
588
650
|
}
|
|
589
651
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type PROGNAME = string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TRKORR } from "../components";
|
|
2
|
+
import { TDEVC } from "./TDEVC";
|
|
3
|
+
export type ZTY_TRM_PACKAGE = {
|
|
4
|
+
name: string;
|
|
5
|
+
version: string;
|
|
6
|
+
registry?: string;
|
|
7
|
+
manifest?: string;
|
|
8
|
+
tdevc: TDEVC[];
|
|
9
|
+
transport: {
|
|
10
|
+
trkorr?: TRKORR;
|
|
11
|
+
migration?: boolean;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -38,3 +38,5 @@ __exportStar(require("./TRNSPACET"), exports);
|
|
|
38
38
|
__exportStar(require("./TRNSPACETT"), exports);
|
|
39
39
|
__exportStar(require("./SYMSG"), exports);
|
|
40
40
|
__exportStar(require("./SEOCLASSTX"), exports);
|
|
41
|
+
__exportStar(require("./ZTY_SER_OBJ"), exports);
|
|
42
|
+
__exportStar(require("./ZTY_TRM_PACKAGE"), exports);
|
|
@@ -8,6 +8,7 @@ exports.getAxiosInstance = getAxiosInstance;
|
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
9
|
const util_1 = require("util");
|
|
10
10
|
const trm_commons_1 = require("trm-commons");
|
|
11
|
+
const node_html_parser_1 = require("node-html-parser");
|
|
11
12
|
const uuid_1 = require("uuid");
|
|
12
13
|
exports.AXIOS_SESSION_HEADER = 'X-TRM-SESSION-ID';
|
|
13
14
|
exports.AXIOS_INTERNAL_HEADER = 'X-TRM-REQUEST-ID';
|
|
@@ -68,7 +69,17 @@ function getAxiosInstance(config, sCtx) {
|
|
|
68
69
|
sError = error.response.data.message;
|
|
69
70
|
}
|
|
70
71
|
else if (typeof (error.response.data) === 'string') {
|
|
71
|
-
|
|
72
|
+
if (error.response.data[0] === '<') {
|
|
73
|
+
try {
|
|
74
|
+
sError = (0, node_html_parser_1.parse)(error.response.data).querySelector('title').innerText;
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
sError = error.response.data;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
sError = error.response.data;
|
|
82
|
+
}
|
|
72
83
|
}
|
|
73
84
|
else {
|
|
74
85
|
sError = error.response.statusText;
|
|
@@ -6,6 +6,7 @@ export declare class PostActivity {
|
|
|
6
6
|
constructor(data: TrmManifestPostActivity);
|
|
7
7
|
execute(silent?: boolean): Promise<void>;
|
|
8
8
|
getDescription(): Promise<string>;
|
|
9
|
+
private printMessages;
|
|
9
10
|
private getAbapXml;
|
|
10
11
|
static exists(className: string): Promise<boolean>;
|
|
11
12
|
}
|
|
@@ -56,28 +56,31 @@ class PostActivity {
|
|
|
56
56
|
}
|
|
57
57
|
execute(silent) {
|
|
58
58
|
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
|
|
59
|
+
const data = Buffer.from(this._xml, 'utf8');
|
|
60
|
+
trm_commons_1.Logger.loading(`Post activity: ${this.data.name}`, silent);
|
|
60
61
|
if (!PostActivity.exists(this.data.name)) {
|
|
61
62
|
throw new Error(`Class "${this.data.name}" doesn't exist.`);
|
|
62
63
|
}
|
|
63
64
|
const description = yield this.getDescription();
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
65
|
+
if (description) {
|
|
66
|
+
trm_commons_1.Logger.loading(`Post activity: ${description}`, silent);
|
|
67
|
+
}
|
|
68
|
+
yield systemConnector_1.SystemConnector.regenProg('SAPLZTRM');
|
|
69
|
+
const pre = yield systemConnector_1.SystemConnector.executePostActivity(data, true);
|
|
70
|
+
if (pre.messages) {
|
|
71
|
+
yield this.printMessages(pre.messages, silent);
|
|
72
|
+
}
|
|
73
|
+
if (pre.execute) {
|
|
74
|
+
const paExecute = yield systemConnector_1.SystemConnector.executePostActivity(data, false);
|
|
75
|
+
if (paExecute.messages && paExecute.messages.length > 0) {
|
|
76
|
+
yield this.printMessages(paExecute.messages, silent);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
trm_commons_1.Logger.success(`Executed post activity: ${description}`, silent);
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
else {
|
|
80
|
-
trm_commons_1.Logger.
|
|
83
|
+
trm_commons_1.Logger.info(`Pre check for post activity ${description} skipped execution`, true);
|
|
81
84
|
}
|
|
82
85
|
});
|
|
83
86
|
}
|
|
@@ -99,6 +102,21 @@ class PostActivity {
|
|
|
99
102
|
}
|
|
100
103
|
});
|
|
101
104
|
}
|
|
105
|
+
printMessages(messages, silent) {
|
|
106
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
for (const message of messages) {
|
|
108
|
+
const parsedMessage = yield systemConnector_1.SystemConnector.getMessage({
|
|
109
|
+
class: message.msgid,
|
|
110
|
+
no: message.msgno,
|
|
111
|
+
v1: message.msgv1,
|
|
112
|
+
v2: message.msgv2,
|
|
113
|
+
v3: message.msgv3,
|
|
114
|
+
v4: message.msgv4,
|
|
115
|
+
});
|
|
116
|
+
trm_commons_1.Logger.msgty(message.msgty, parsedMessage, silent);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
102
120
|
getAbapXml(data) {
|
|
103
121
|
var oAbapXml = {
|
|
104
122
|
"_declaration": {
|
|
@@ -52,7 +52,11 @@ export interface ISystemConnector extends ISystemConnectorBase {
|
|
|
52
52
|
getDotAbapgit: (devclass: components.DEVCLASS) => Promise<Buffer>;
|
|
53
53
|
getAbapgitSource: (devclass: components.DEVCLASS) => Promise<{
|
|
54
54
|
zip: Buffer;
|
|
55
|
-
objects: struct.
|
|
55
|
+
objects: struct.ZTY_SER_OBJ[];
|
|
56
56
|
}>;
|
|
57
|
-
executePostActivity: (data: Buffer) => Promise<
|
|
57
|
+
executePostActivity: (data: Buffer, pre?: boolean) => Promise<{
|
|
58
|
+
messages: struct.SYMSG[];
|
|
59
|
+
execute?: boolean;
|
|
60
|
+
}>;
|
|
61
|
+
regenProg: (prog: components.PROGNAME) => Promise<void>;
|
|
58
62
|
}
|
|
@@ -27,6 +27,7 @@ export declare class RESTSystemConnector extends SystemConnectorBase implements
|
|
|
27
27
|
protected listDevclassObjects(devclass: DEVCLASS): Promise<TADIR[]>;
|
|
28
28
|
protected tdevcInterface(devclass: components.DEVCLASS, parentcl?: components.DEVCLASS, rmParentCl?: boolean, devlayer?: components.DEVLAYER): Promise<void>;
|
|
29
29
|
protected getR3transInfo(): Promise<string>;
|
|
30
|
+
protected getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
|
|
30
31
|
getConnectionData(): RESTConnection;
|
|
31
32
|
getLogonUser(): string;
|
|
32
33
|
connect(): Promise<void>;
|
|
@@ -70,7 +71,11 @@ export declare class RESTSystemConnector extends SystemConnectorBase implements
|
|
|
70
71
|
getDotAbapgit(devclass: components.DEVCLASS): Promise<Buffer>;
|
|
71
72
|
getAbapgitSource(devclass: components.DEVCLASS): Promise<{
|
|
72
73
|
zip: Buffer;
|
|
73
|
-
objects: struct.
|
|
74
|
+
objects: struct.ZTY_SER_OBJ[];
|
|
74
75
|
}>;
|
|
75
|
-
executePostActivity(data: Buffer): Promise<
|
|
76
|
+
executePostActivity(data: Buffer, pre?: boolean): Promise<{
|
|
77
|
+
messages: struct.SYMSG[];
|
|
78
|
+
execute?: boolean;
|
|
79
|
+
}>;
|
|
80
|
+
regenProg(prog: components.PROGNAME): Promise<void>;
|
|
76
81
|
}
|
|
@@ -96,6 +96,9 @@ class RESTSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
|
|
|
96
96
|
return this._client.getR3transInfo();
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
|
+
getInstalledPackagesBackend() {
|
|
100
|
+
return this._client.getInstalledPackagesBackend();
|
|
101
|
+
}
|
|
99
102
|
getConnectionData() {
|
|
100
103
|
return this._connection;
|
|
101
104
|
}
|
|
@@ -311,9 +314,14 @@ class RESTSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
|
|
|
311
314
|
return this._client.getAbapgitSource(devclass);
|
|
312
315
|
});
|
|
313
316
|
}
|
|
314
|
-
executePostActivity(data) {
|
|
317
|
+
executePostActivity(data, pre) {
|
|
318
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
319
|
+
return this._client.executePostActivity(data, pre);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
regenProg(prog) {
|
|
315
323
|
return __awaiter(this, void 0, void 0, function* () {
|
|
316
|
-
return this._client.
|
|
324
|
+
return this._client.regenProg(prog);
|
|
317
325
|
});
|
|
318
326
|
}
|
|
319
327
|
}
|
|
@@ -27,6 +27,7 @@ export declare class RFCSystemConnector extends SystemConnectorBase implements I
|
|
|
27
27
|
protected listDevclassObjects(devclass: DEVCLASS): Promise<TADIR[]>;
|
|
28
28
|
protected tdevcInterface(devclass: components.DEVCLASS, parentcl?: components.DEVCLASS, rmParentCl?: boolean, devlayer?: components.DEVLAYER): Promise<void>;
|
|
29
29
|
protected getR3transInfo(): Promise<string>;
|
|
30
|
+
protected getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
|
|
30
31
|
getConnectionData(): RFCConnection;
|
|
31
32
|
getLogonUser(): string;
|
|
32
33
|
connect(): Promise<void>;
|
|
@@ -68,7 +69,11 @@ export declare class RFCSystemConnector extends SystemConnectorBase implements I
|
|
|
68
69
|
getDotAbapgit(devclass: components.DEVCLASS): Promise<Buffer>;
|
|
69
70
|
getAbapgitSource(devclass: components.DEVCLASS): Promise<{
|
|
70
71
|
zip: Buffer;
|
|
71
|
-
objects: struct.
|
|
72
|
+
objects: struct.ZTY_SER_OBJ[];
|
|
72
73
|
}>;
|
|
73
|
-
executePostActivity(data: Buffer): Promise<
|
|
74
|
+
executePostActivity(data: Buffer, pre?: boolean): Promise<{
|
|
75
|
+
messages: struct.SYMSG[];
|
|
76
|
+
execute?: boolean;
|
|
77
|
+
}>;
|
|
78
|
+
regenProg(prog: components.PROGNAME): Promise<void>;
|
|
74
79
|
}
|
|
@@ -78,6 +78,9 @@ class RFCSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
|
|
|
78
78
|
return this._client.getR3transInfo();
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
|
+
getInstalledPackagesBackend() {
|
|
82
|
+
return this._client.getInstalledPackagesBackend();
|
|
83
|
+
}
|
|
81
84
|
getConnectionData() {
|
|
82
85
|
return this._connection;
|
|
83
86
|
}
|
|
@@ -104,7 +107,7 @@ class RFCSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
|
|
|
104
107
|
}
|
|
105
108
|
ping() {
|
|
106
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
return
|
|
110
|
+
return this._client.trmServerPing();
|
|
108
111
|
});
|
|
109
112
|
}
|
|
110
113
|
getFileSystem() {
|
|
@@ -282,9 +285,14 @@ class RFCSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
|
|
|
282
285
|
return this._client.getAbapgitSource(devclass);
|
|
283
286
|
});
|
|
284
287
|
}
|
|
285
|
-
executePostActivity(data) {
|
|
288
|
+
executePostActivity(data, pre) {
|
|
289
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
290
|
+
return this._client.executePostActivity(data, pre);
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
regenProg(prog) {
|
|
286
294
|
return __awaiter(this, void 0, void 0, function* () {
|
|
287
|
-
return this._client.
|
|
295
|
+
return this._client.regenProg(prog);
|
|
288
296
|
});
|
|
289
297
|
}
|
|
290
298
|
}
|
|
@@ -84,8 +84,12 @@ export declare namespace SystemConnector {
|
|
|
84
84
|
function getDotAbapgit(devclass: components.DEVCLASS): Promise<Buffer>;
|
|
85
85
|
function getAbapgitSource(devclass: components.DEVCLASS): Promise<{
|
|
86
86
|
zip: Buffer;
|
|
87
|
-
objects: struct.
|
|
87
|
+
objects: struct.ZTY_SER_OBJ[];
|
|
88
|
+
}>;
|
|
89
|
+
function executePostActivity(data: Buffer, pre?: boolean): Promise<{
|
|
90
|
+
messages: struct.SYMSG[];
|
|
91
|
+
execute?: boolean;
|
|
88
92
|
}>;
|
|
89
|
-
function executePostActivity(data: Buffer): Promise<struct.SYMSG[]>;
|
|
90
93
|
function readClassDescriptions(clsname: components.SEOCLSNAME): Promise<struct.SEOCLASSTX[]>;
|
|
94
|
+
function regenProg(prog: components.PROGNAME): Promise<void>;
|
|
91
95
|
}
|
|
@@ -506,10 +506,10 @@ var SystemConnector;
|
|
|
506
506
|
});
|
|
507
507
|
}
|
|
508
508
|
SystemConnector.getAbapgitSource = getAbapgitSource;
|
|
509
|
-
function executePostActivity(data) {
|
|
509
|
+
function executePostActivity(data, pre) {
|
|
510
510
|
return __awaiter(this, void 0, void 0, function* () {
|
|
511
511
|
yield checkSystemConnector();
|
|
512
|
-
return SystemConnector.systemConnector.executePostActivity(data);
|
|
512
|
+
return SystemConnector.systemConnector.executePostActivity(data, pre);
|
|
513
513
|
});
|
|
514
514
|
}
|
|
515
515
|
SystemConnector.executePostActivity = executePostActivity;
|
|
@@ -520,4 +520,11 @@ var SystemConnector;
|
|
|
520
520
|
});
|
|
521
521
|
}
|
|
522
522
|
SystemConnector.readClassDescriptions = readClassDescriptions;
|
|
523
|
+
function regenProg(prog) {
|
|
524
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
525
|
+
yield checkSystemConnector();
|
|
526
|
+
return SystemConnector.systemConnector.regenProg(prog);
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
SystemConnector.regenProg = regenProg;
|
|
523
530
|
})(SystemConnector || (exports.SystemConnector = SystemConnector = {}));
|
|
@@ -8,6 +8,7 @@ import * as struct from "../client/struct";
|
|
|
8
8
|
import { ISystemConnectorBase } from "./ISystemConnectorBase";
|
|
9
9
|
import { AbstractRegistry } from "../registry";
|
|
10
10
|
export declare const TRM_SERVER_PACKAGE_NAME: string;
|
|
11
|
+
export declare const TRM_SERVER_INTF: string;
|
|
11
12
|
export declare const TRM_REST_PACKAGE_NAME: string;
|
|
12
13
|
export declare const SRC_TRKORR_TABL = "ZTRM_SRC_TRKORR";
|
|
13
14
|
export declare const SKIP_TRKORR_TABL = "ZTRM_SKIP_TRKORR";
|
|
@@ -25,6 +26,7 @@ export declare abstract class SystemConnectorBase implements ISystemConnectorBas
|
|
|
25
26
|
protected abstract listDevclassObjects(devclass: components.DEVCLASS): Promise<struct.TADIR[]>;
|
|
26
27
|
protected abstract tdevcInterface(devclass: components.DEVCLASS, parentcl?: components.DEVCLASS, rmParentCl?: boolean, devlayer?: components.DEVLAYER): Promise<void>;
|
|
27
28
|
protected abstract getR3transInfo(): Promise<string>;
|
|
29
|
+
protected abstract getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
|
|
28
30
|
constructor();
|
|
29
31
|
getTransportStatus(trkorr: TRKORR): Promise<string>;
|
|
30
32
|
getPackageWorkbenchTransport(oPackage: TrmPackage): Promise<Transport>;
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SystemConnectorBase = exports.SKIP_TRKORR_TABL = exports.SRC_TRKORR_TABL = exports.TRM_REST_PACKAGE_NAME = exports.TRM_SERVER_PACKAGE_NAME = void 0;
|
|
12
|
+
exports.SystemConnectorBase = exports.SKIP_TRKORR_TABL = exports.SRC_TRKORR_TABL = exports.TRM_REST_PACKAGE_NAME = exports.TRM_SERVER_INTF = exports.TRM_SERVER_PACKAGE_NAME = void 0;
|
|
13
13
|
const semver_1 = require("semver");
|
|
14
14
|
const trm_commons_1 = require("trm-commons");
|
|
15
15
|
const manifest_1 = require("../manifest");
|
|
@@ -18,6 +18,7 @@ const trmPackage_1 = require("../trmPackage");
|
|
|
18
18
|
const registry_1 = require("../registry");
|
|
19
19
|
const node_r3trans_1 = require("node-r3trans");
|
|
20
20
|
exports.TRM_SERVER_PACKAGE_NAME = 'trm-server';
|
|
21
|
+
exports.TRM_SERVER_INTF = 'ZIF_TRM';
|
|
21
22
|
exports.TRM_REST_PACKAGE_NAME = 'trm-rest';
|
|
22
23
|
exports.SRC_TRKORR_TABL = 'ZTRM_SRC_TRKORR';
|
|
23
24
|
exports.SKIP_TRKORR_TABL = 'ZTRM_SKIP_TRKORR';
|
|
@@ -163,6 +164,8 @@ class SystemConnectorBase {
|
|
|
163
164
|
}
|
|
164
165
|
getInstalledPackages() {
|
|
165
166
|
return __awaiter(this, arguments, void 0, function* (includeSoruces = true, refresh, includeLocals) {
|
|
167
|
+
var trmPackages = [];
|
|
168
|
+
var fromBackend = false;
|
|
166
169
|
if (!refresh) {
|
|
167
170
|
if (includeSoruces && this._installedPackagesI) {
|
|
168
171
|
trm_commons_1.Logger.log(`Cached version of installed packages with sources`, true);
|
|
@@ -173,11 +176,52 @@ class SystemConnectorBase {
|
|
|
173
176
|
return this._installedPackages;
|
|
174
177
|
}
|
|
175
178
|
}
|
|
176
|
-
var trmPackages = [];
|
|
177
|
-
var packageTransports = [];
|
|
178
|
-
trm_commons_1.Logger.log(`Ready to read installed packages`, true);
|
|
179
179
|
trm_commons_1.Logger.log(`Include sources: ${includeSoruces}`, true);
|
|
180
180
|
const aSourceTrkorr = includeSoruces ? (yield this.getSourceTrkorr(refresh)) : [];
|
|
181
|
+
const serverExists = yield this.readTable('TADIR', [{ fieldName: 'OBJ_NAME' }], `PGMID EQ 'R3TR' AND OBJECT EQ 'INTF' AND OBJ_NAME EQ '${exports.TRM_SERVER_INTF}'`);
|
|
182
|
+
if (serverExists.length === 1) {
|
|
183
|
+
trm_commons_1.Logger.log(`INTF ${exports.TRM_SERVER_INTF} exists`, true);
|
|
184
|
+
try {
|
|
185
|
+
var installedPackagesBackend = yield this.getInstalledPackagesBackend();
|
|
186
|
+
if (!includeSoruces) {
|
|
187
|
+
installedPackagesBackend = installedPackagesBackend.filter(o => !aSourceTrkorr.includes(o.transport.trkorr));
|
|
188
|
+
}
|
|
189
|
+
if (!includeLocals) {
|
|
190
|
+
installedPackagesBackend = installedPackagesBackend.filter(o => o.registry !== registry_1.LOCAL_RESERVED_KEYWORD);
|
|
191
|
+
}
|
|
192
|
+
for (const o of installedPackagesBackend) {
|
|
193
|
+
const transport = o.transport.trkorr ? new transport_1.Transport(o.transport.trkorr, null, o.transport.migration) : null;
|
|
194
|
+
const manifest = manifest_1.Manifest.fromAbapXml(o.manifest);
|
|
195
|
+
if (transport) {
|
|
196
|
+
manifest.setLinkedTransport(transport);
|
|
197
|
+
}
|
|
198
|
+
const trmPackage = new trmPackage_1.TrmPackage(o.name, registry_1.RegistryProvider.getRegistry(o.registry), manifest);
|
|
199
|
+
if (transport) {
|
|
200
|
+
trmPackage.setDevclass(yield transport.getDevclass(o.tdevc));
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
if (o.tdevc.length === 1) {
|
|
204
|
+
trmPackage.setDevclass(o.tdevc[0].devclass);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
trmPackages.push(trmPackage);
|
|
208
|
+
}
|
|
209
|
+
fromBackend = true;
|
|
210
|
+
}
|
|
211
|
+
catch (e) {
|
|
212
|
+
trmPackages = [];
|
|
213
|
+
trm_commons_1.Logger.error(e.toString(), true);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (fromBackend) {
|
|
217
|
+
trm_commons_1.Logger.log(`Packages were fetched from backend`, true);
|
|
218
|
+
return trmPackages;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
trm_commons_1.Logger.log(`Packages weren't fetched from backend, continue`, true);
|
|
222
|
+
}
|
|
223
|
+
var packageTransports = [];
|
|
224
|
+
trm_commons_1.Logger.log(`Ready to read installed packages`, true);
|
|
181
225
|
trm_commons_1.Logger.log(`Source trkorr ${JSON.stringify(aSourceTrkorr)}`, true);
|
|
182
226
|
var aSkipTrkorr = yield this.getIgnoredTrkorr();
|
|
183
227
|
trm_commons_1.Logger.log(`Ignored trkorr ${JSON.stringify(aSkipTrkorr)}`, true);
|
|
@@ -6,7 +6,7 @@ import { TransportContent } from "./TransportContent";
|
|
|
6
6
|
import { Documentation } from "./Documentation";
|
|
7
7
|
import { TrmTransportIdentifier } from "./TrmTransportIdentifier";
|
|
8
8
|
import { TrmPackage } from "../trmPackage";
|
|
9
|
-
import { TROBJTYPE, E070, E071, TRKORR, TR_TARGET, DEVCLASS, TROBJ_NAME, AS4TEXT, PGMID, SOBJ_NAME, TMSSYSNAM } from "../client";
|
|
9
|
+
import { TROBJTYPE, E070, E071, TRKORR, TR_TARGET, DEVCLASS, TROBJ_NAME, AS4TEXT, PGMID, SOBJ_NAME, TMSSYSNAM, TDEVC } from "../client";
|
|
10
10
|
export declare const COMMENT_OBJ: TROBJTYPE;
|
|
11
11
|
export declare class Transport {
|
|
12
12
|
trkorr: TRKORR;
|
|
@@ -18,6 +18,7 @@ export declare class Transport {
|
|
|
18
18
|
private _docs;
|
|
19
19
|
private _trmRelevant;
|
|
20
20
|
private _linkedTrmPackage;
|
|
21
|
+
private _rootDevclass;
|
|
21
22
|
trmIdentifier?: TrmTransportIdentifier;
|
|
22
23
|
constructor(trkorr: TRKORR, _trTarget?: TR_TARGET, _migration?: boolean);
|
|
23
24
|
setTrmIdentifier(identifier?: TrmTransportIdentifier): Transport;
|
|
@@ -26,7 +27,7 @@ export declare class Transport {
|
|
|
26
27
|
getE070(): Promise<E070>;
|
|
27
28
|
getE071(): Promise<E071[]>;
|
|
28
29
|
getTasks(): Promise<Transport[]>;
|
|
29
|
-
getDevclass(): Promise<DEVCLASS>;
|
|
30
|
+
getDevclass(aTdevc?: TDEVC[]): Promise<DEVCLASS>;
|
|
30
31
|
getDate(): Promise<Date>;
|
|
31
32
|
isTrmRelevant(): Promise<boolean>;
|
|
32
33
|
download(): Promise<{
|
|
@@ -134,47 +134,54 @@ class Transport {
|
|
|
134
134
|
return tasks;
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
|
-
getDevclass() {
|
|
138
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
137
|
+
getDevclass(aTdevc) {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
if (!this._rootDevclass) {
|
|
140
|
+
var aDevclass = [];
|
|
141
|
+
if (!aTdevc) {
|
|
142
|
+
const aE071 = yield this.getE071();
|
|
143
|
+
aDevclass = aE071.filter(o => o.pgmid === 'R3TR' && o.object === 'DEVC').map(o => o.objName);
|
|
144
|
+
if (!systemConnector_1.SystemConnector.getSupportedBulk().getTransportObjects) {
|
|
145
|
+
for (const oE071 of aE071) {
|
|
146
|
+
if (oE071.pgmid === 'R3TR') {
|
|
147
|
+
const tadir = yield systemConnector_1.SystemConnector.getObject(oE071.pgmid, oE071.object, oE071.objName);
|
|
148
|
+
if (!aDevclass.includes(tadir.devclass)) {
|
|
149
|
+
aDevclass.push(tadir.devclass);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
147
152
|
}
|
|
148
153
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
154
|
+
else {
|
|
155
|
+
const aTadirObjects = yield systemConnector_1.SystemConnector.getTransportObjectsBulk(this.trkorr);
|
|
156
|
+
aDevclass = aDevclass.concat(aTadirObjects.map(o => o.devclass));
|
|
157
|
+
aDevclass = Array.from(new Set(aDevclass));
|
|
158
|
+
}
|
|
159
|
+
aTdevc = [];
|
|
160
|
+
for (var devclass of aDevclass) {
|
|
161
|
+
while (devclass) {
|
|
162
|
+
var tdevc = aTdevc.find(o => o.devclass === devclass);
|
|
163
|
+
if (!tdevc) {
|
|
164
|
+
tdevc = yield systemConnector_1.SystemConnector.getDevclass(devclass);
|
|
165
|
+
aTdevc.push(tdevc);
|
|
166
|
+
}
|
|
167
|
+
devclass = tdevc.parentcl;
|
|
168
|
+
}
|
|
163
169
|
}
|
|
164
|
-
devclass = tdevc.parentcl;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
var rootDevclass = null;
|
|
168
|
-
while (aTdevc.length > 0 && !rootDevclass) {
|
|
169
|
-
const hierarchy = (0, commons_1.getPackageHierarchy)(aTdevc);
|
|
170
|
-
if (aDevclass.includes(hierarchy.devclass)) {
|
|
171
|
-
rootDevclass = hierarchy.devclass;
|
|
172
170
|
}
|
|
173
171
|
else {
|
|
174
|
-
|
|
172
|
+
aDevclass = aTdevc.map(o => o.devclass);
|
|
173
|
+
}
|
|
174
|
+
while (aTdevc.length > 0 && !this._rootDevclass) {
|
|
175
|
+
const hierarchy = (0, commons_1.getPackageHierarchy)(aTdevc);
|
|
176
|
+
if (aDevclass.includes(hierarchy.devclass)) {
|
|
177
|
+
this._rootDevclass = hierarchy.devclass;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
aTdevc = aTdevc.filter(o => o.devclass !== hierarchy.devclass);
|
|
181
|
+
}
|
|
175
182
|
}
|
|
176
183
|
}
|
|
177
|
-
return
|
|
184
|
+
return this._rootDevclass;
|
|
178
185
|
});
|
|
179
186
|
}
|
|
180
187
|
getDate() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trm-core",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.7.0",
|
|
4
4
|
"description": "TRM (Transport Request Manager) Core",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"trmDependencies": {
|
|
37
|
-
"trm-server": "^
|
|
37
|
+
"trm-server": "^3.0.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@esm2cjs/normalize-url": "^8.0.0",
|
|
@@ -51,6 +51,8 @@
|
|
|
51
51
|
"get-root-path": "^3.0.1",
|
|
52
52
|
"get-stack-trace": "^3.1.1",
|
|
53
53
|
"lodash": "^4.17.21",
|
|
54
|
+
"minimatch": "^10.0.1",
|
|
55
|
+
"node-html-parser": "^7.0.1",
|
|
54
56
|
"node-r3trans": "^1.5.0",
|
|
55
57
|
"object-keys-normalizer": "^1.0.1",
|
|
56
58
|
"opener": "^1.5.2",
|