trm-core 9.6.0 → 9.8.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/README.md CHANGED
@@ -29,6 +29,20 @@ TRM introduces **package-based software delivery** to the SAP ecosystem, bringin
29
29
 
30
30
  Full documentation can be seen at [https://docs.trmregistry.com/](https://docs.trmregistry.com).
31
31
 
32
+ # Usage
33
+
34
+ `trm-core` is a low-level library and is **not intended to be used directly** by end users.
35
+
36
+ In order to interact with SAP systems, `trm-core` must be consumed by a compatible client implementation.
37
+
38
+ ## CLI Client
39
+
40
+ Install the official CLI client via npm:
41
+
42
+ ```bash
43
+ npm install trm-client -g
44
+ ```
45
+
32
46
  # Contributing
33
47
  Like every other TRM open-source projects, contributions are always welcomed ❤️.
34
48
 
package/changelog.txt CHANGED
@@ -8,8 +8,14 @@ Legend
8
8
  + : added
9
9
  - : removed
10
10
 
11
- 2026-05-11 v9.6.0
11
+ 2026-06-15 v9.8.0
12
12
  -------------------
13
+ ! guard table read result fields order
14
+ ! sanitize package contents from registry
15
+
16
+ 2026-05-26 v9.7.0
17
+ -------------------
18
+ * install of trm-server and trm-rest
13
19
  ! trm-commons ^5.0.0
14
20
 
15
21
  2026-05-08 v9.5.1
@@ -68,6 +68,10 @@ exports.importDevcTransport = {
68
68
  yield systemConnector_1.SystemConnector.connect(true);
69
69
  trm_commons_1.Logger.success(`OK, continue`, true);
70
70
  }
71
+ for (const tdevc of context.runtime.packageTransportsData.tdevc) {
72
+ trm_commons_1.Logger.log(`Running TDEVC interface for devclass ${tdevc.devclass} -> transport layer ${context.rawInput.installData.installDevclass.transportLayer}`, true);
73
+ yield systemConnector_1.SystemConnector.setPackageTransportLayer(tdevc.devclass, context.rawInput.installData.installDevclass.transportLayer);
74
+ }
71
75
  if (rootDevclass && rootDevclass.parentcl) {
72
76
  yield systemConnector_1.SystemConnector.setPackageSuperpackage(context.runtime.originalData.hierarchy.devclass, rootDevclass.parentcl);
73
77
  }
@@ -85,9 +89,5 @@ exports.importDevcTransport = {
85
89
  trm_commons_1.Logger.log(`Running TADIR interface for object ${object.pgmid} ${object.object} ${object.objName}, devclass ${object.devclass} -> src system ${object.srcsystem}`, true);
86
90
  yield systemConnector_1.SystemConnector.tadirInterface(object);
87
91
  }
88
- for (const tdevc of context.runtime.packageTransportsData.tdevc) {
89
- trm_commons_1.Logger.log(`Running TDEVC interface for devclass ${tdevc.devclass} -> transport layer ${context.rawInput.installData.installDevclass.transportLayer}`, true);
90
- yield systemConnector_1.SystemConnector.setPackageTransportLayer(tdevc.devclass, context.rawInput.installData.installDevclass.transportLayer);
91
- }
92
92
  })
93
93
  };
@@ -21,13 +21,21 @@ exports.readTadir = {
21
21
  if (!context.runtime.remotePackageData.contents) {
22
22
  context.runtime.packageTransportsData.tadir = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.tadir.binaries.binaries.data, 'TADIR'));
23
23
  }
24
+ else {
25
+ context.runtime.packageTransportsData.tadir = context.runtime.packageTransportsData.tadir.filter(o => o.pgmid === 'R3TR' && !(o.pgmid === 'R3TR' && o.object === 'DEVC'));
26
+ }
24
27
  trm_commons_1.Logger.log(`TADIR TADIR: ${JSON.stringify(context.runtime.packageTransportsData.tadir)}`, true);
25
28
  var existingObjects = [];
29
+ const checkTadir = context.runtime.packageTransportsData.tadir.map(o => {
30
+ return Object.assign(Object.assign({}, o), {
31
+ devclass: context.runtime.isTrmServerRest ? (0, commons_1.adjustTrmServerRestDevclass)(o.devclass) : o.devclass
32
+ });
33
+ });
26
34
  if (!systemConnector_1.SystemConnector.getSupportedBulk().getTransportObjects) {
27
- existingObjects = yield systemConnector_1.SystemConnector.getExistingObjects(context.runtime.packageTransportsData.tadir);
35
+ existingObjects = yield systemConnector_1.SystemConnector.getExistingObjects(checkTadir);
28
36
  }
29
37
  else {
30
- existingObjects = yield systemConnector_1.SystemConnector.getExistingObjectsBulk(context.runtime.packageTransportsData.tadir);
38
+ existingObjects = yield systemConnector_1.SystemConnector.getExistingObjectsBulk(checkTadir);
31
39
  }
32
40
  trm_commons_1.Logger.log(`TADIR object that already exist in system: ${JSON.stringify(existingObjects)}`, true);
33
41
  var throwExistingObjectsError = false;
@@ -39,7 +47,7 @@ exports.readTadir = {
39
47
  const rootDevclass = rootPackage.getDevclass();
40
48
  if (rootDevclass) {
41
49
  const subpackages = (yield systemConnector_1.SystemConnector.getSubpackages(rootDevclass)).map(o => o.devclass);
42
- existingObjects.find(o => {
50
+ existingObjects.forEach(o => {
43
51
  if (subpackages.includes(o.devclass) || rootDevclass === o.devclass) {
44
52
  trm_commons_1.Logger.log(`${o.pgmid} ${o.object} ${o.objName} already in system but devclass ${o.devclass} is part of the same trm package in update`, true);
45
53
  }
@@ -60,8 +60,7 @@ exports.setInstallDevclass = {
60
60
  const replacement = context.rawInput.installData.installDevclass.replacements.find(o => o.originalDevclass === t.devclass);
61
61
  if (updateNamespace) {
62
62
  if (!replacement && updateNamespace === '$' && context.runtime.isTrmServerRest) {
63
- adaptDevclassName = adaptDevclassName.replace(new RegExp(`^/ATRM/SERVER`, 'gmi'), '$TRM');
64
- adaptDevclassName = adaptDevclassName.replace(new RegExp(`^/ATRM/REST`, 'gmi'), '$TRM_REST');
63
+ adaptDevclassName = (0, commons_1.adjustTrmServerRestDevclass)(adaptDevclassName);
65
64
  }
66
65
  else {
67
66
  adaptDevclassName = adaptDevclassName.replace(new RegExp(`^${originalNamespace}`, 'gmi'), updateNamespace);
@@ -215,8 +215,8 @@ class RESTClient {
215
215
  data.forEach(tab512 => {
216
216
  var sqlLine = {};
217
217
  const waSplit = tab512.wa.split(delimiter);
218
- fields.forEach((field, index) => {
219
- sqlLine[field.fieldName] = waSplit[index].trim();
218
+ result.data.fields.forEach((field, index) => {
219
+ sqlLine[field.fieldname] = waSplit[index].trim();
220
220
  });
221
221
  sqlOutput.push(sqlLine);
222
222
  });
@@ -250,6 +250,7 @@ class RFCClient {
250
250
  var sqlOutput = [];
251
251
  const delimiter = '|';
252
252
  var aOptions = [];
253
+ tableName = tableName.toUpperCase();
253
254
  if (options) {
254
255
  const aSplit = options.split(/\s+AND\s+/);
255
256
  if (aSplit.length > 1) {
@@ -271,17 +272,17 @@ class RFCClient {
271
272
  }
272
273
  try {
273
274
  const result = yield this._call("RFC_READ_TABLE", {
274
- query_table: tableName.toUpperCase(),
275
+ query_table: tableName,
275
276
  delimiter,
276
277
  options: aOptions,
277
- fields: fields
278
+ fields
278
279
  }, undefined, noErrorParsing);
279
280
  const data = result['data'];
280
281
  data.forEach(tab512 => {
281
282
  var sqlLine = {};
282
283
  const waSplit = tab512.wa.split(delimiter);
283
- fields.forEach((field, index) => {
284
- sqlLine[field['FIELDNAME']] = waSplit[index].trim();
284
+ result.fields.forEach((field, index) => {
285
+ sqlLine[field.fieldname] = waSplit[index].trim();
285
286
  });
286
287
  sqlOutput.push(sqlLine);
287
288
  });
@@ -0,0 +1 @@
1
+ export declare function adjustTrmServerRestDevclass(devclass: string): string;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.adjustTrmServerRestDevclass = adjustTrmServerRestDevclass;
4
+ function adjustTrmServerRestDevclass(devclass) {
5
+ return devclass.replace(new RegExp(`^/ATRM/SERVER`, 'gmi'), '$TRM').replace(new RegExp(`^/ATRM/REST`, 'gmi'), '$TRM_REST');
6
+ }
@@ -14,3 +14,4 @@ export * from "./getNodePackage";
14
14
  export * from "./getCoreTrmDependencies";
15
15
  export * from "./checkCoreTrmDependencies";
16
16
  export * from "./jsonStringifyWithKeyOrder";
17
+ export * from "./adjustTrmServerRestDevclass";
@@ -30,3 +30,4 @@ __exportStar(require("./getNodePackage"), exports);
30
30
  __exportStar(require("./getCoreTrmDependencies"), exports);
31
31
  __exportStar(require("./checkCoreTrmDependencies"), exports);
32
32
  __exportStar(require("./jsonStringifyWithKeyOrder"), exports);
33
+ __exportStar(require("./adjustTrmServerRestDevclass"), exports);
@@ -168,6 +168,7 @@ class SystemConnectorBase {
168
168
  }
169
169
  if (fromBackend) {
170
170
  trm_commons_1.Logger.log(`Packages were fetched from backend API`, true);
171
+ this._installedPackages = trmPackages;
171
172
  return trmPackages;
172
173
  }
173
174
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trm-core",
3
- "version": "9.6.0",
3
+ "version": "9.8.0",
4
4
  "description": "TRM (Transport Request Manager) Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",