trm-core 6.6.0 → 6.7.1

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 (39) hide show
  1. package/changelog.txt +14 -0
  2. package/dist/actions/install/generateInstallTransport.js +3 -1
  3. package/dist/actions/publish/generateTadirTransport.js +0 -5
  4. package/dist/actions/publish/getSourceCode.js +16 -4
  5. package/dist/actions/publish/index.d.ts +0 -1
  6. package/dist/actions/publish/init.js +3 -1
  7. package/dist/actions/publish/setManifestValues.js +45 -6
  8. package/dist/actions/publish/setTransportTarget.js +1 -1
  9. package/dist/client/Login.d.ts +1 -1
  10. package/dist/client/RESTClient.d.ts +7 -2
  11. package/dist/client/RESTClient.js +38 -3
  12. package/dist/client/RFCClient.d.ts +7 -2
  13. package/dist/client/RFCClient.js +61 -4
  14. package/dist/client/components/PROGNAME.d.ts +1 -0
  15. package/dist/client/components/PROGNAME.js +2 -0
  16. package/dist/client/components/index.d.ts +1 -0
  17. package/dist/client/components/index.js +1 -0
  18. package/dist/client/struct/ZTY_SER_OBJ.d.ts +7 -0
  19. package/dist/client/struct/ZTY_SER_OBJ.js +2 -0
  20. package/dist/client/struct/ZTY_TRM_PACKAGE.d.ts +13 -0
  21. package/dist/client/struct/ZTY_TRM_PACKAGE.js +2 -0
  22. package/dist/client/struct/index.d.ts +2 -0
  23. package/dist/client/struct/index.js +2 -0
  24. package/dist/commons/TrmServerUpgradeService.d.ts +1 -0
  25. package/dist/commons/TrmServerUpgradeService.js +8 -0
  26. package/dist/manifest/PostActivity.d.ts +1 -0
  27. package/dist/manifest/PostActivity.js +33 -15
  28. package/dist/systemConnector/ISystemConnector.d.ts +6 -2
  29. package/dist/systemConnector/RESTSystemConnector.d.ts +7 -2
  30. package/dist/systemConnector/RESTSystemConnector.js +10 -2
  31. package/dist/systemConnector/RFCSystemConnector.d.ts +7 -2
  32. package/dist/systemConnector/RFCSystemConnector.js +11 -3
  33. package/dist/systemConnector/SystemConnector.d.ts +6 -2
  34. package/dist/systemConnector/SystemConnector.js +9 -2
  35. package/dist/systemConnector/SystemConnectorBase.d.ts +2 -0
  36. package/dist/systemConnector/SystemConnectorBase.js +51 -4
  37. package/dist/transport/Transport.d.ts +3 -2
  38. package/dist/transport/Transport.js +41 -34
  39. package/package.json +3 -2
package/changelog.txt CHANGED
@@ -8,6 +8,20 @@ Legend
8
8
  + : added
9
9
  - : removed
10
10
 
11
+ 2025-05-20 v6.7.1
12
+ -------------------
13
+ ! get installed packages from backend with trm-server version check
14
+
15
+ 2025-05-14 v6.7.0
16
+ -------------------
17
+ ! trm-server ^3.0.0
18
+ * abapgit ignored objects
19
+ + post activity pre check
20
+ + get installed packages from backend where possible
21
+ + regen SAPLZTRM before post activity
22
+ * rest sap-client
23
+ + keep track of post activities based on latest release
24
+
11
25
  2025-05-08 v6.6.0
12
26
  -------------------
13
27
  * no integrity with trm-server/trm-rest dependency allowed
@@ -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(`Generating install transport...`);
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 || ''
@@ -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.sourceCode.objects = sourceCode.objects;
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 object = context.runtime.abapGitData.sourceCode.objects.find(k => k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName);
26
- if (!object) {
27
- context.runtime.abapGitData.sourceCode.ignoredObjects.push(o);
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);
@@ -60,7 +60,6 @@ type WorkflowRuntime = {
60
60
  dotAbapGit?: DotAbapGit;
61
61
  sourceCode?: {
62
62
  zip: Buffer;
63
- objects: TADIR[];
64
63
  ignoredObjects: TADIR[];
65
64
  };
66
65
  };
@@ -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.manifest.authors) && context.runtime.trmPackage.manifest.authors.length === 0) {
35
- context.runtime.trmPackage.manifest.authors = context.runtime.trmPackage.latestReleaseManifest.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.manifest.keywords) && context.runtime.trmPackage.manifest.keywords.length === 0) {
43
- context.runtime.trmPackage.manifest.keywords = context.runtime.trmPackage.latestReleaseManifest.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 || [], null, 2),
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);
@@ -29,7 +29,7 @@ exports.setTransportTarget = {
29
29
  }),
30
30
  choices: context.runtime.systemData.transportTargets.map(o => {
31
31
  return {
32
- name: `${o.sysnam} (${o.systxt})`,
32
+ name: o.systxt ? `${o.sysnam} (${o.systxt})` : o.sysnam,
33
33
  value: o.sysnam
34
34
  };
35
35
  })
@@ -2,5 +2,5 @@ export type Login = {
2
2
  user: string;
3
3
  passwd: string;
4
4
  lang: string;
5
- client?: string;
5
+ client: string;
6
6
  };
@@ -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.TADIR[];
61
+ objects: struct.ZTY_SER_OBJ[];
62
62
  }>;
63
- executePostActivity(data: Buffer): Promise<struct.SYMSG[]>;
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
@@ -619,12 +622,44 @@ class RESTClient {
619
622
  }
620
623
  });
621
624
  }
622
- executePostActivity(data) {
625
+ executePostActivity(data, pre) {
623
626
  return __awaiter(this, void 0, void 0, function* () {
624
- const result = (yield this._axiosInstance.post('/execute_post_activity', data, {
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, {
625
631
  timeout: 60000
626
632
  })).data;
627
- return result.messages;
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
+ });
628
663
  });
629
664
  }
630
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.TADIR[];
60
+ objects: struct.ZTY_SER_OBJ[];
61
61
  }>;
62
- executePostActivity(data: Buffer): Promise<struct.SYMSG[]>;
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
  }
@@ -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) {
@@ -577,18 +578,74 @@ class RFCClient {
577
578
  const result = yield this._call("ZTRM_GET_ABAPGIT_SOURCE", {
578
579
  iv_devclass: devclass
579
580
  });
581
+ const sXml = result['evObjects'].toString().replace(/&/g, "&amp;").replace(/-/g, "&#45;");
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
+ });
580
591
  return {
581
592
  zip: result['evZip'],
582
- objects: result['etObjects']
593
+ objects
583
594
  };
584
595
  });
585
596
  }
586
- executePostActivity(data) {
597
+ executePostActivity(data, pre) {
587
598
  return __awaiter(this, void 0, void 0, function* () {
588
599
  const result = yield this._call("ZTRM_EXECUTE_POST_ACTIVITY", {
589
- 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, "&amp;").replace(/-/g, "&#45;");
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
590
648
  });
591
- return result['etMessages'];
592
649
  });
593
650
  }
594
651
  }
@@ -0,0 +1 @@
1
+ export type PROGNAME = string;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -54,3 +54,4 @@ export * from "./SYMSGV";
54
54
  export * from "./SEOCLSNAME";
55
55
  export * from "./LANGU";
56
56
  export * from "./SEODESCR";
57
+ export * from "./PROGNAME";
@@ -70,3 +70,4 @@ __exportStar(require("./SYMSGV"), exports);
70
70
  __exportStar(require("./SEOCLSNAME"), exports);
71
71
  __exportStar(require("./LANGU"), exports);
72
72
  __exportStar(require("./SEODESCR"), exports);
73
+ __exportStar(require("./PROGNAME"), exports);
@@ -0,0 +1,7 @@
1
+ import { PGMID, TROBJTYPE, SOBJ_NAME } from "../components";
2
+ export type ZTY_SER_OBJ = {
3
+ pgmid: PGMID;
4
+ object: TROBJTYPE;
5
+ objName: SOBJ_NAME;
6
+ fullPath: string;
7
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -22,3 +22,5 @@ export * from "./TRNSPACET";
22
22
  export * from "./TRNSPACETT";
23
23
  export * from "./SYMSG";
24
24
  export * from "./SEOCLASSTX";
25
+ export * from "./ZTY_SER_OBJ";
26
+ export * from "./ZTY_TRM_PACKAGE";
@@ -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);
@@ -12,4 +12,5 @@ export declare class TrmServerUpgrade {
12
12
  executePostActivities(): boolean;
13
13
  removeComments(): boolean;
14
14
  refreshTmsTxt(): boolean;
15
+ getInstalledPackagesBackend(): boolean;
15
16
  }
@@ -77,5 +77,13 @@ class TrmServerUpgrade {
77
77
  return !((0, semver_1.lt)(this.currentVersion, '2.2.0') && (0, semver_1.gte)(this.installVersion, '2.2.0'));
78
78
  }
79
79
  }
80
+ getInstalledPackagesBackend() {
81
+ if (this.dummy) {
82
+ return false;
83
+ }
84
+ else {
85
+ return !((0, semver_1.lt)(this.currentVersion, '3.0.0') && (0, semver_1.gte)(this.installVersion, '3.0.0'));
86
+ }
87
+ }
80
88
  }
81
89
  exports.TrmServerUpgrade = TrmServerUpgrade;
@@ -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
- trm_commons_1.Logger.loading(`Executing post activity: ${this.data.name}`, silent);
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
- trm_commons_1.Logger.loading(`Executing post activity: ${description}`, silent);
65
- const messages = yield systemConnector_1.SystemConnector.executePostActivity(Buffer.from(this._xml, 'utf8'));
66
- if (messages && messages.length > 0) {
67
- for (const message of messages) {
68
- const parsedMessage = yield systemConnector_1.SystemConnector.getMessage({
69
- class: message.msgid,
70
- no: message.msgno,
71
- v1: message.msgv1,
72
- v2: message.msgv2,
73
- v3: message.msgv3,
74
- v4: message.msgv4,
75
- });
76
- trm_commons_1.Logger.msgty(message.msgty, parsedMessage, silent);
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.success(`Executed post activity: ${description}`, silent);
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.TADIR[];
55
+ objects: struct.ZTY_SER_OBJ[];
56
56
  }>;
57
- executePostActivity: (data: Buffer) => Promise<struct.SYMSG[]>;
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.TADIR[];
74
+ objects: struct.ZTY_SER_OBJ[];
74
75
  }>;
75
- executePostActivity(data: Buffer): Promise<struct.SYMSG[]>;
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.executePostActivity(data);
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.TADIR[];
72
+ objects: struct.ZTY_SER_OBJ[];
72
73
  }>;
73
- executePostActivity(data: Buffer): Promise<struct.SYMSG[]>;
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 yield this._client.trmServerPing();
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.executePostActivity(data);
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.TADIR[];
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");
@@ -17,7 +17,9 @@ const transport_1 = require("../transport");
17
17
  const trmPackage_1 = require("../trmPackage");
18
18
  const registry_1 = require("../registry");
19
19
  const node_r3trans_1 = require("node-r3trans");
20
+ const commons_1 = require("../commons");
20
21
  exports.TRM_SERVER_PACKAGE_NAME = 'trm-server';
22
+ exports.TRM_SERVER_INTF = 'ZIF_TRM';
21
23
  exports.TRM_REST_PACKAGE_NAME = 'trm-rest';
22
24
  exports.SRC_TRKORR_TABL = 'ZTRM_SRC_TRKORR';
23
25
  exports.SKIP_TRKORR_TABL = 'ZTRM_SKIP_TRKORR';
@@ -163,6 +165,8 @@ class SystemConnectorBase {
163
165
  }
164
166
  getInstalledPackages() {
165
167
  return __awaiter(this, arguments, void 0, function* (includeSoruces = true, refresh, includeLocals) {
168
+ var trmPackages = [];
169
+ var fromBackend = false;
166
170
  if (!refresh) {
167
171
  if (includeSoruces && this._installedPackagesI) {
168
172
  trm_commons_1.Logger.log(`Cached version of installed packages with sources`, true);
@@ -173,11 +177,54 @@ class SystemConnectorBase {
173
177
  return this._installedPackages;
174
178
  }
175
179
  }
176
- var trmPackages = [];
177
- var packageTransports = [];
178
- trm_commons_1.Logger.log(`Ready to read installed packages`, true);
179
180
  trm_commons_1.Logger.log(`Include sources: ${includeSoruces}`, true);
180
181
  const aSourceTrkorr = includeSoruces ? (yield this.getSourceTrkorr(refresh)) : [];
182
+ if (commons_1.TrmServerUpgrade.getInstance().getInstalledPackagesBackend()) {
183
+ const serverExists = yield this.readTable('TADIR', [{ fieldName: 'OBJ_NAME' }], `PGMID EQ 'R3TR' AND OBJECT EQ 'INTF' AND OBJ_NAME EQ '${exports.TRM_SERVER_INTF}'`);
184
+ if (serverExists.length === 1) {
185
+ trm_commons_1.Logger.log(`INTF ${exports.TRM_SERVER_INTF} exists`, true);
186
+ try {
187
+ var installedPackagesBackend = yield this.getInstalledPackagesBackend();
188
+ if (!includeSoruces) {
189
+ installedPackagesBackend = installedPackagesBackend.filter(o => !aSourceTrkorr.includes(o.transport.trkorr));
190
+ }
191
+ if (!includeLocals) {
192
+ installedPackagesBackend = installedPackagesBackend.filter(o => o.registry !== registry_1.LOCAL_RESERVED_KEYWORD);
193
+ }
194
+ for (const o of installedPackagesBackend) {
195
+ const transport = o.transport.trkorr ? new transport_1.Transport(o.transport.trkorr, null, o.transport.migration) : null;
196
+ const manifest = manifest_1.Manifest.fromAbapXml(o.manifest);
197
+ if (transport) {
198
+ manifest.setLinkedTransport(transport);
199
+ }
200
+ const trmPackage = new trmPackage_1.TrmPackage(o.name, registry_1.RegistryProvider.getRegistry(o.registry), manifest);
201
+ if (transport) {
202
+ trmPackage.setDevclass(yield transport.getDevclass(o.tdevc));
203
+ }
204
+ else {
205
+ if (o.tdevc.length === 1) {
206
+ trmPackage.setDevclass(o.tdevc[0].devclass);
207
+ }
208
+ }
209
+ trmPackages.push(trmPackage);
210
+ }
211
+ fromBackend = true;
212
+ }
213
+ catch (e) {
214
+ trmPackages = [];
215
+ trm_commons_1.Logger.error(e.toString(), true);
216
+ }
217
+ }
218
+ if (fromBackend) {
219
+ trm_commons_1.Logger.log(`Packages were fetched from backend`, true);
220
+ return trmPackages;
221
+ }
222
+ else {
223
+ trm_commons_1.Logger.log(`Packages weren't fetched from backend, continue`, true);
224
+ }
225
+ }
226
+ var packageTransports = [];
227
+ trm_commons_1.Logger.log(`Ready to read installed packages`, true);
181
228
  trm_commons_1.Logger.log(`Source trkorr ${JSON.stringify(aSourceTrkorr)}`, true);
182
229
  var aSkipTrkorr = yield this.getIgnoredTrkorr();
183
230
  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
- const aE071 = yield this.getE071();
140
- var aDevclass = aE071.filter(o => o.pgmid === 'R3TR' && o.object === 'DEVC').map(o => o.objName);
141
- if (!systemConnector_1.SystemConnector.getSupportedBulk().getTransportObjects) {
142
- for (const oE071 of aE071) {
143
- if (oE071.pgmid === 'R3TR') {
144
- const tadir = yield systemConnector_1.SystemConnector.getObject(oE071.pgmid, oE071.object, oE071.objName);
145
- if (!aDevclass.includes(tadir.devclass)) {
146
- aDevclass.push(tadir.devclass);
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
- else {
152
- const aTadirObjects = yield systemConnector_1.SystemConnector.getTransportObjectsBulk(this.trkorr);
153
- aDevclass = aDevclass.concat(aTadirObjects.map(o => o.devclass));
154
- aDevclass = Array.from(new Set(aDevclass));
155
- }
156
- var aTdevc = [];
157
- for (var devclass of aDevclass) {
158
- while (devclass) {
159
- var tdevc = aTdevc.find(o => o.devclass === devclass);
160
- if (!tdevc) {
161
- tdevc = yield systemConnector_1.SystemConnector.getDevclass(devclass);
162
- aTdevc.push(tdevc);
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
- aTdevc = aTdevc.filter(o => o.devclass !== hierarchy.devclass);
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 rootDevclass;
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.6.0",
3
+ "version": "6.7.1",
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": "^2.2.2"
37
+ "trm-server": "^3.0.0"
38
38
  },
39
39
  "dependencies": {
40
40
  "@esm2cjs/normalize-url": "^8.0.0",
@@ -51,6 +51,7 @@
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",
54
55
  "node-html-parser": "^7.0.1",
55
56
  "node-r3trans": "^1.5.0",
56
57
  "object-keys-normalizer": "^1.0.1",