trm-core 7.5.6 → 8.0.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 (61) hide show
  1. package/changelog.txt +15 -0
  2. package/dist/actions/checkPackageDependencies/analyze.js +5 -51
  3. package/dist/actions/checkPackageDependencies/index.d.ts +2 -5
  4. package/dist/actions/checkPackageDependencies/init.js +5 -7
  5. package/dist/actions/checkSapEntries/analyze.js +2 -2
  6. package/dist/actions/checkSapEntries/index.d.ts +2 -2
  7. package/dist/actions/checkSapEntries/init.js +1 -4
  8. package/dist/actions/findDependencies/index.d.ts +0 -2
  9. package/dist/actions/findDependencies/setTrmDependencies.js +11 -55
  10. package/dist/actions/install/addNamespace.js +14 -9
  11. package/dist/actions/install/checkAlreadyInstalled.js +2 -2
  12. package/dist/actions/install/checkDependencies.js +2 -16
  13. package/dist/actions/install/checkSapEntries.js +1 -1
  14. package/dist/actions/install/checkTransports.js +2 -2
  15. package/dist/actions/install/executePostActivities.js +3 -3
  16. package/dist/actions/install/generateInstallTransport.js +40 -5
  17. package/dist/actions/install/index.d.ts +6 -10
  18. package/dist/actions/install/index.js +2 -4
  19. package/dist/actions/install/init.js +37 -45
  20. package/dist/actions/install/installDependencies.js +0 -1
  21. package/dist/actions/install/setPackageIntegrity.js +1 -1
  22. package/dist/actions/install/setTrmServerUpgradeService.js +1 -1
  23. package/dist/actions/installDependency/findInstallRelease.js +18 -18
  24. package/dist/actions/installDependency/index.d.ts +0 -1
  25. package/dist/actions/installDependency/init.js +0 -7
  26. package/dist/actions/installDependency/installRelease.js +0 -1
  27. package/dist/actions/publish/findDependencies.js +0 -12
  28. package/dist/actions/publish/generateCustTransport.js +0 -3
  29. package/dist/actions/publish/generateDevcTransport.js +0 -4
  30. package/dist/actions/publish/generateLangTransport.js +0 -3
  31. package/dist/actions/publish/getSourceCode.js +1 -1
  32. package/dist/actions/publish/index.d.ts +1 -1
  33. package/dist/actions/publish/init.js +71 -95
  34. package/dist/actions/publish/setManifestValues.js +4 -13
  35. package/dist/commons/getAxiosInstance.d.ts +1 -1
  36. package/dist/manifest/Manifest.d.ts +2 -0
  37. package/dist/manifest/Manifest.js +47 -17
  38. package/dist/manifest/TrmManifestDependency.d.ts +0 -1
  39. package/dist/registry/AbstractRegistry.d.ts +7 -7
  40. package/dist/registry/FileSystem.d.ts +7 -6
  41. package/dist/registry/FileSystem.js +35 -34
  42. package/dist/registry/RegistryProvider.js +4 -4
  43. package/dist/registry/{Registry.d.ts → RegistryV2.d.ts} +11 -10
  44. package/dist/registry/{Registry.js → RegistryV2.js} +146 -74
  45. package/dist/registry/index.d.ts +1 -1
  46. package/dist/registry/index.js +1 -1
  47. package/dist/systemConnector/ISystemConnectorBase.d.ts +1 -1
  48. package/dist/systemConnector/SystemConnector.d.ts +1 -1
  49. package/dist/systemConnector/SystemConnector.js +3 -3
  50. package/dist/systemConnector/SystemConnectorBase.d.ts +1 -1
  51. package/dist/systemConnector/SystemConnectorBase.js +33 -11
  52. package/dist/transport/Transport.d.ts +4 -1
  53. package/dist/transport/Transport.js +54 -31
  54. package/dist/trmPackage/TrmArtifact.js +3 -5
  55. package/dist/trmPackage/TrmPackage.d.ts +0 -16
  56. package/dist/trmPackage/TrmPackage.js +10 -133
  57. package/dist/validators/validatePackageVisibility.d.ts +1 -1
  58. package/dist/validators/validatePackageVisibility.js +2 -16
  59. package/package.json +4 -3
  60. package/dist/actions/install/checkIntegrity.d.ts +0 -3
  61. package/dist/actions/install/checkIntegrity.js +0 -42
@@ -45,7 +45,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
45
45
  return (mod && mod.__esModule) ? mod : { "default": mod };
46
46
  };
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.Registry = exports.PUBLIC_RESERVED_KEYWORD = void 0;
48
+ exports.RegistryV2 = exports.PUBLIC_RESERVED_KEYWORD = void 0;
49
49
  const RegistryType_1 = require("./RegistryType");
50
50
  const normalize_url_1 = __importDefault(require("@esm2cjs/normalize-url"));
51
51
  const axios_1 = require("axios");
@@ -57,12 +57,14 @@ const crypto_1 = require("crypto");
57
57
  const protocol_1 = require("../protocol");
58
58
  const opener_1 = __importDefault(require("opener"));
59
59
  const commons_1 = require("../commons");
60
- const AXIOS_CTX = "Registry";
60
+ const node_cache_1 = __importDefault(require("node-cache"));
61
+ const AXIOS_CTX = "RegistryV2";
61
62
  exports.PUBLIC_RESERVED_KEYWORD = 'public';
62
- class Registry {
63
+ class RegistryV2 {
63
64
  constructor(endpoint, name = 'Unknown') {
64
65
  this.endpoint = endpoint;
65
66
  this.name = name;
67
+ this._cache = new node_cache_1.default({ stdTTL: 60, useClones: false });
66
68
  var envEndpoint = process.env.TRM_PUBLIC_REGISTRY_ENDPOINT;
67
69
  trm_commons_1.Logger.log(`TRM_PUBLIC_REGISTRY_ENDPOINT Environment variable: ${envEndpoint}`, true);
68
70
  if (!envEndpoint || envEndpoint.trim().toLowerCase() === exports.PUBLIC_RESERVED_KEYWORD) {
@@ -92,11 +94,23 @@ class Registry {
92
94
  throw new Error(`Registry address length is too long! Maximum allowed is 100.`);
93
95
  }
94
96
  this._axiosInstance = (0, commons_1.getAxiosInstance)({
95
- baseURL: this.endpoint
97
+ baseURL: this.endpoint,
98
+ headers: this.getDefaultAxiosHeaders()
96
99
  }, AXIOS_CTX);
97
100
  }
101
+ getDefaultAxiosHeaders() {
102
+ var axiosHeaders = new axios_1.AxiosHeaders();
103
+ if (!this._userAgent) {
104
+ try {
105
+ this._userAgent = `trm-core v${(0, commons_1.getNodePackage)().version}`;
106
+ }
107
+ catch (_a) { }
108
+ }
109
+ axiosHeaders.setUserAgent(this._userAgent || `trm-core`);
110
+ return axiosHeaders;
111
+ }
98
112
  compare(registry) {
99
- if (registry instanceof Registry) {
113
+ if (registry instanceof RegistryV2) {
100
114
  return this.endpoint === registry.endpoint;
101
115
  }
102
116
  else {
@@ -110,25 +124,25 @@ class Registry {
110
124
  return __awaiter(this, arguments, void 0, function* (defaultData = {}) {
111
125
  trm_commons_1.Logger.log(`Registry authentication request`, true);
112
126
  const ping = yield this.ping();
113
- trm_commons_1.Logger.log(`Registry authentication type is: ${ping.authenticationType}`, true);
114
- if (ping.authenticationType !== trm_registry_types_1.AuthenticationType.NO_AUTH) {
115
- if (ping.authenticationType === trm_registry_types_1.AuthenticationType.BASIC) {
127
+ trm_commons_1.Logger.log(`Registry authentication type is: ${ping.authentication_type}`, true);
128
+ if (ping.authentication_type !== trm_registry_types_1.AuthenticationType.NO_AUTH) {
129
+ if (ping.authentication_type === trm_registry_types_1.AuthenticationType.BASIC) {
116
130
  yield this._basicAuth(defaultData);
117
131
  }
118
- if (ping.authenticationType === trm_registry_types_1.AuthenticationType.OAUTH2) {
132
+ if (ping.authentication_type === trm_registry_types_1.AuthenticationType.OAUTH2) {
119
133
  yield this._oauth2(defaultData);
120
134
  }
121
- if (ping.authenticationType === trm_registry_types_1.AuthenticationType.TOKEN) {
135
+ if (ping.authentication_type === trm_registry_types_1.AuthenticationType.TOKEN) {
122
136
  yield this._tokenAuth(defaultData);
123
137
  }
124
138
  }
125
- this._whoami = null;
139
+ this._cache.flushAll();
126
140
  return this;
127
141
  });
128
142
  }
129
143
  _basicAuth() {
130
144
  return __awaiter(this, arguments, void 0, function* (defaultData = {}) {
131
- var axiosHeaders = new axios_1.AxiosHeaders();
145
+ var axiosHeaders = this.getDefaultAxiosHeaders();
132
146
  var axiosDefaults = {
133
147
  baseURL: this.endpoint,
134
148
  headers: axiosHeaders
@@ -166,7 +180,7 @@ class Registry {
166
180
  }
167
181
  _tokenAuth() {
168
182
  return __awaiter(this, arguments, void 0, function* (defaultData = {}) {
169
- var axiosHeaders = new axios_1.AxiosHeaders();
183
+ var axiosHeaders = this.getDefaultAxiosHeaders();
170
184
  var axiosDefaults = {
171
185
  baseURL: this.endpoint,
172
186
  headers: axiosHeaders
@@ -186,7 +200,7 @@ class Registry {
186
200
  when: !token
187
201
  }]);
188
202
  token = token || inq1.token;
189
- axiosHeaders.setAuthorization(`token ${token}`);
203
+ axiosHeaders.setAuthorization(`Bearer ${token}`);
190
204
  this._axiosInstance = (0, commons_1.getAxiosInstance)(axiosDefaults, AXIOS_CTX);
191
205
  this._authData = {
192
206
  token
@@ -248,13 +262,13 @@ class Registry {
248
262
  runAuthFlow = true;
249
263
  }
250
264
  if (runAuthFlow) {
251
- const oAuth2 = ping.authenticationData;
265
+ const oAuth2 = ping.authentication_data;
252
266
  const oAuth2ProtocolPath = "//oauth2";
253
267
  const sRedirectUri = `trm:${oAuth2ProtocolPath}`;
254
- const oAuth2Url = new URL(oAuth2.authorizationUrl);
268
+ const oAuth2Url = new URL(oAuth2.authorization_url);
255
269
  const oAuth2State = (0, crypto_1.randomUUID)();
256
- oAuth2Url.searchParams.append("client_id", oAuth2.clientId);
257
- oAuth2Url.searchParams.append("response_type", oAuth2.responseType);
270
+ oAuth2Url.searchParams.append("client_id", oAuth2.client_id);
271
+ oAuth2Url.searchParams.append("response_type", oAuth2.response_type);
258
272
  oAuth2Url.searchParams.append("redirect_uri", sRedirectUri);
259
273
  oAuth2Url.searchParams.append("state", oAuth2State);
260
274
  var sAuth2Url = oAuth2Url.toString();
@@ -291,7 +305,7 @@ class Registry {
291
305
  }
292
306
  }
293
307
  this._authData = authData;
294
- var axiosHeaders = new axios_1.AxiosHeaders();
308
+ var axiosHeaders = this.getDefaultAxiosHeaders();
295
309
  var axiosDefaults = {
296
310
  baseURL: this.endpoint,
297
311
  headers: axiosHeaders
@@ -305,97 +319,155 @@ class Registry {
305
319
  }
306
320
  ping() {
307
321
  return __awaiter(this, void 0, void 0, function* () {
308
- if (!this._ping) {
322
+ var data = this._cache.get('ping');
323
+ if (!data) {
309
324
  try {
310
- this._ping = (yield this._axiosInstance.get('/')).data;
325
+ data = (yield this._axiosInstance.get('/', {
326
+ headers: {}
327
+ })).data;
311
328
  }
312
329
  catch (e) {
313
- throw new Error('Registry cannot be reached.');
330
+ if (e.errors) {
331
+ e.errors.forEach(err => trm_commons_1.Logger.error(err.message));
332
+ }
333
+ data = new Error(`Registry "${this.name}" cannot be reached.`);
314
334
  }
335
+ this._cache.set('ping', data);
336
+ }
337
+ if (data instanceof Error) {
338
+ throw data;
339
+ }
340
+ else {
341
+ return data;
315
342
  }
316
- return this._ping;
317
343
  });
318
344
  }
319
345
  whoAmI() {
320
346
  return __awaiter(this, void 0, void 0, function* () {
321
- if (!this._whoami) {
322
- this._whoami = (yield this._axiosInstance.get('/whoami')).data;
347
+ var data = this._cache.get('whoami');
348
+ if (!data) {
349
+ try {
350
+ data = (yield this._axiosInstance.get('/whoami')).data;
351
+ }
352
+ catch (e) {
353
+ data = e;
354
+ }
355
+ this._cache.set('whoami', data);
356
+ }
357
+ if (data instanceof Error) {
358
+ throw data;
359
+ }
360
+ else {
361
+ return data;
323
362
  }
324
- return this._whoami;
325
363
  });
326
364
  }
327
- packageExists(name, version) {
328
- return __awaiter(this, void 0, void 0, function* () {
329
- var responseStatus;
330
- try {
331
- responseStatus = (yield this._axiosInstance.get('/view', {
332
- params: {
333
- name,
334
- version
365
+ getPackage(fullName_1) {
366
+ return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest') {
367
+ var data = this._cache.get(`package-${fullName}-${version}`);
368
+ if (!data) {
369
+ var ttl;
370
+ try {
371
+ data = (yield this._axiosInstance.get(`/package/${fullName}`, {
372
+ params: {
373
+ version
374
+ }
375
+ })).data;
376
+ if (data.download_link_expiry) {
377
+ try {
378
+ ttl = Math.max(0, Math.floor((data.download_link_expiry - Date.now()) / 1000));
379
+ }
380
+ catch (_a) { }
335
381
  }
336
- })).status;
382
+ }
383
+ catch (e) {
384
+ data = e;
385
+ }
386
+ this._cache.set(`package-${fullName}-${version}`, data, ttl);
387
+ }
388
+ if (data instanceof Error) {
389
+ throw data;
390
+ }
391
+ else {
392
+ return data;
393
+ }
394
+ });
395
+ }
396
+ downloadArtifact(fullName_1) {
397
+ return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest') {
398
+ var buffer;
399
+ const packageData = yield this.getPackage(fullName, version);
400
+ try {
401
+ buffer = (yield this._axiosInstance.get(packageData.download_link, {
402
+ headers: {
403
+ 'Accept': 'application/octet-stream',
404
+ },
405
+ maxRedirects: 10,
406
+ responseType: 'arraybuffer',
407
+ validateStatus: s => s >= 200 && s < 400,
408
+ })).data;
337
409
  }
338
410
  catch (e) {
339
- responseStatus = 404;
411
+ trm_commons_1.Logger.error(e.toString(), true);
412
+ trm_commons_1.Logger.error(`Failed to fetch package at ${packageData.download_link}: ${e.message}`);
413
+ throw e;
340
414
  }
341
- return responseStatus === 200;
415
+ return new TrmArtifact_1.TrmArtifact(buffer);
342
416
  });
343
417
  }
344
- view(name_1) {
345
- return __awaiter(this, arguments, void 0, function* (name, version = 'latest') {
346
- const response = (yield this._axiosInstance.get('/view', {
418
+ validatePublish(fullName_1) {
419
+ return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest') {
420
+ const status = (yield this._axiosInstance.get(`/publish/check/${fullName}`, {
347
421
  params: {
348
- name,
349
422
  version
350
423
  }
351
- })).data;
352
- return response;
424
+ })).status;
425
+ if (status !== 204) {
426
+ throw new Error(`Package cannot be published`);
427
+ }
353
428
  });
354
429
  }
355
- getArtifact(name_1) {
356
- return __awaiter(this, arguments, void 0, function* (name, version = 'latest') {
357
- const response = (yield this._axiosInstance.get('/install', {
430
+ publish(fullName, version, artifact, readme) {
431
+ return __awaiter(this, void 0, void 0, function* () {
432
+ const fileName = `${fullName}_v${version}`.replace('.', '_') + '.trm';
433
+ const formData = new FormData.default();
434
+ formData.append('artifact', artifact.binary, {
435
+ filename: fileName,
436
+ contentType: 'application/octet-stream'
437
+ });
438
+ if (readme) {
439
+ formData.append('readme', Buffer.from(readme), {
440
+ filename: 'readme.md',
441
+ contentType: 'text/markdown'
442
+ });
443
+ }
444
+ return (yield this._axiosInstance.post(`/publish/${fullName}`, formData, {
358
445
  params: {
359
- name,
360
446
  version
361
447
  },
362
- headers: {
363
- 'Accept': 'application/octet-stream'
364
- },
365
- responseType: 'arraybuffer'
366
- })).data;
367
- return new TrmArtifact_1.TrmArtifact(response);
368
- });
369
- }
370
- publishArtifact(packageName, version, artifact, readme) {
371
- return __awaiter(this, void 0, void 0, function* () {
372
- const fileName = `${packageName}@${version}`.replace('.', '_') + '.trm';
373
- const formData = new FormData.default();
374
- formData.append('artifact', artifact.binary, fileName);
375
- formData.append('readme', readme);
376
- yield this._axiosInstance.post('/publish', formData, {
377
448
  headers: formData.getHeaders()
378
- });
449
+ })).data;
379
450
  });
380
451
  }
381
- unpublish(packageName, version) {
452
+ unpublish(fullName, version) {
382
453
  return __awaiter(this, void 0, void 0, function* () {
383
- yield this._axiosInstance.post('/unpublish', {
384
- package: packageName,
385
- version
454
+ yield this._axiosInstance.post(`/unpublish/${fullName}`, null, {
455
+ params: {
456
+ version
457
+ }
386
458
  });
387
459
  });
388
460
  }
389
- getReleases(packageName, versionRange) {
461
+ deprecate(fullName, version, reason) {
390
462
  return __awaiter(this, void 0, void 0, function* () {
391
- const response = (yield this._axiosInstance.get('/releases', {
463
+ yield this._axiosInstance.post(`/deprecate/${fullName}`, {
464
+ deprecate_note: reason
465
+ }, {
392
466
  params: {
393
- name: packageName,
394
- version: versionRange
467
+ version
395
468
  }
396
- })).data;
397
- return response;
469
+ });
398
470
  });
399
471
  }
400
472
  }
401
- exports.Registry = Registry;
473
+ exports.RegistryV2 = RegistryV2;
@@ -1,4 +1,4 @@
1
- export * from "./Registry";
1
+ export * from "./RegistryV2";
2
2
  export * from "./RegistryType";
3
3
  export * from "./AbstractRegistry";
4
4
  export * from "./FileSystem";
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./Registry"), exports);
17
+ __exportStar(require("./RegistryV2"), exports);
18
18
  __exportStar(require("./RegistryType"), exports);
19
19
  __exportStar(require("./AbstractRegistry"), exports);
20
20
  __exportStar(require("./FileSystem"), exports);
@@ -6,7 +6,7 @@ import { TrmPackage } from "../trmPackage";
6
6
  import { InstallPackage } from "./InstallPackage";
7
7
  export interface ISystemConnectorBase {
8
8
  getTransportStatus: (trkorr: components.TRKORR) => Promise<string>;
9
- getPackageWorkbenchTransport: (oPackage: TrmPackage) => Promise<Transport>;
9
+ getWbTransports: (trmPackage?: string | TrmPackage) => Promise<Transport[]>;
10
10
  getSourceTrkorr: () => Promise<components.TRKORR[]>;
11
11
  getIgnoredTrkorr: () => Promise<components.TRKORR[]>;
12
12
  getObject: (pgmid: components.PGMID, object: components.TROBJTYPE, objName: components.SOBJ_NAME) => Promise<struct.TADIR>;
@@ -19,7 +19,7 @@ export declare namespace SystemConnector {
19
19
  function closeConnection(): Promise<void>;
20
20
  function checkConnection(): Promise<boolean>;
21
21
  function getTransportStatus(trkorr: TRKORR): Promise<string>;
22
- function getPackageWorkbenchTransport(oPackage: TrmPackage): Promise<Transport>;
22
+ function getWbTransports(trmPackage?: string | TrmPackage): Promise<Transport[]>;
23
23
  function getInstalledPackages(includeSources: boolean, refresh?: boolean, includeLocals?: boolean): Promise<TrmPackage[]>;
24
24
  function getDevclass(devclass: DEVCLASS): Promise<TDEVC>;
25
25
  function getTransportTargets(): Promise<TMSCSYS[]>;
@@ -79,13 +79,13 @@ var SystemConnector;
79
79
  });
80
80
  }
81
81
  SystemConnector.getTransportStatus = getTransportStatus;
82
- function getPackageWorkbenchTransport(oPackage) {
82
+ function getWbTransports(trmPackage) {
83
83
  return __awaiter(this, void 0, void 0, function* () {
84
84
  yield checkSystemConnector();
85
- return SystemConnector.systemConnector.getPackageWorkbenchTransport(oPackage);
85
+ return SystemConnector.systemConnector.getWbTransports(trmPackage);
86
86
  });
87
87
  }
88
- SystemConnector.getPackageWorkbenchTransport = getPackageWorkbenchTransport;
88
+ SystemConnector.getWbTransports = getWbTransports;
89
89
  function getInstalledPackages(includeSources, refresh, includeLocals) {
90
90
  return __awaiter(this, void 0, void 0, function* () {
91
91
  yield checkSystemConnector();
@@ -29,7 +29,7 @@ export declare abstract class SystemConnectorBase implements ISystemConnectorBas
29
29
  protected abstract getInstalledPackagesBackend(): Promise<struct.ZTY_TRM_PACKAGE[]>;
30
30
  constructor();
31
31
  getTransportStatus(trkorr: TRKORR): Promise<string>;
32
- getPackageWorkbenchTransport(oPackage: TrmPackage): Promise<Transport>;
32
+ getWbTransports(trmPackage?: string | TrmPackage): Promise<Transport[]>;
33
33
  getSourceTrkorr(refresh?: boolean): Promise<TRKORR[]>;
34
34
  getObject(pgmid: PGMID, object: TROBJTYPE, objName: SOBJ_NAME): Promise<TADIR>;
35
35
  getIgnoredTrkorr(refresh?: boolean): Promise<TRKORR[]>;
@@ -36,9 +36,16 @@ class SystemConnectorBase {
36
36
  }
37
37
  });
38
38
  }
39
- getPackageWorkbenchTransport(oPackage) {
39
+ getWbTransports(trmPackage) {
40
40
  return __awaiter(this, void 0, void 0, function* () {
41
- var aTrkorr = (yield this.readTable('E071', [{ fieldName: 'TRKORR' }], `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}'`)).map(o => o.trkorr);
41
+ var sqlWhere = `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}'`;
42
+ if (trmPackage instanceof trmPackage_1.TrmPackage) {
43
+ sqlWhere += ` AND OBJ_NAME EQ 'name=${trmPackage.packageName}'`;
44
+ }
45
+ else if (typeof trmPackage === 'string') {
46
+ sqlWhere += ` AND OBJ_NAME EQ 'name=${trmPackage}'`;
47
+ }
48
+ var aTrkorr = (yield this.readTable('E071', [{ fieldName: 'TRKORR' }], sqlWhere)).map(o => o.trkorr);
42
49
  aTrkorr = Array.from(new Set(aTrkorr));
43
50
  var aSkipTrkorr = [];
44
51
  for (const sTrkorr of aTrkorr) {
@@ -54,20 +61,35 @@ class SystemConnectorBase {
54
61
  }
55
62
  }
56
63
  aTrkorr = aTrkorr.filter(trkorr => !aSkipTrkorr.includes(trkorr));
57
- const transports = aTrkorr.map(trkorr => new transport_1.Transport(trkorr));
58
64
  var packageTransports = [];
59
- for (const transport of transports) {
60
- const transportPackage = yield transport.getLinkedPackage();
61
- if (transportPackage) {
62
- if (trmPackage_1.TrmPackage.compare(transportPackage, oPackage)) {
65
+ var transports = aTrkorr.map(trkorr => new transport_1.Transport(trkorr));
66
+ for (let i = transports.length - 1; i >= 0; i--) {
67
+ if (!(yield transports[i].getLinkedPackage())) {
68
+ transports.splice(i, 1);
69
+ }
70
+ }
71
+ if (trmPackage instanceof trmPackage_1.TrmPackage) {
72
+ for (const transport of transports) {
73
+ const transportPackage = yield transport.getLinkedPackage();
74
+ if (transportPackage) {
75
+ if (trmPackage_1.TrmPackage.compare(transportPackage, trmPackage)) {
76
+ packageTransports.push(transport);
77
+ }
78
+ }
79
+ }
80
+ return [yield transport_1.Transport.getLatest(packageTransports)];
81
+ }
82
+ else if (typeof trmPackage === 'string') {
83
+ for (const transport of transports) {
84
+ if ((yield transport.getTrmPackageName()) === trmPackage) {
63
85
  packageTransports.push(transport);
64
86
  }
65
87
  }
88
+ return packageTransports;
66
89
  }
67
- if (packageTransports.length > 0) {
68
- return yield transport_1.Transport.getLatest(packageTransports);
90
+ else {
91
+ return transports;
69
92
  }
70
- return null;
71
93
  });
72
94
  }
73
95
  getSourceTrkorr(refresh) {
@@ -231,7 +253,7 @@ class SystemConnectorBase {
231
253
  var aSkipTrkorr = yield this.getIgnoredTrkorr();
232
254
  trm_commons_1.Logger.log(`Ignored trkorr ${JSON.stringify(aSkipTrkorr)}`, true);
233
255
  var aMigrationTrkorr;
234
- var aActualTrkorr = (yield this.readTable('E071', [{ fieldName: 'TRKORR' }], `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}' AND TRKORR EQ 'RSTK906391'`)).map(o => o.trkorr);
256
+ var aActualTrkorr = (yield this.readTable('E071', [{ fieldName: 'TRKORR' }], `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}'`)).map(o => o.trkorr);
235
257
  aActualTrkorr = Array.from(new Set(aActualTrkorr));
236
258
  try {
237
259
  aMigrationTrkorr = (yield this.readTable('ZTRM_E070', [{ fieldName: 'TRM_TROKRR' }])).map(o => o.trmTrokrr);
@@ -16,7 +16,8 @@ export declare class Transport {
16
16
  private _e070;
17
17
  private _e071;
18
18
  private _docs;
19
- private _trmRelevant;
19
+ private _trmPackageName;
20
+ private _trmPackageVersion;
20
21
  private _linkedTrmPackage;
21
22
  private _rootDevclass;
22
23
  trmIdentifier?: TrmTransportIdentifier;
@@ -29,6 +30,8 @@ export declare class Transport {
29
30
  getTasks(): Promise<Transport[]>;
30
31
  getDevclass(aTdevc?: TDEVC[]): Promise<DEVCLASS>;
31
32
  getDate(): Promise<Date>;
33
+ getTrmPackageName(): Promise<string>;
34
+ getTrmPackageVersion(): Promise<string>;
32
35
  isTrmRelevant(): Promise<boolean>;
33
36
  download(): Promise<{
34
37
  binaries: BinaryTransport;
@@ -183,17 +183,46 @@ class Transport {
183
183
  return (0, commons_1.fromAbapToDate)(e070.as4Date, e070.as4Time);
184
184
  });
185
185
  }
186
- isTrmRelevant() {
186
+ getTrmPackageName() {
187
187
  return __awaiter(this, void 0, void 0, function* () {
188
- if (this._trmRelevant === undefined) {
188
+ if (this._trmPackageName === undefined) {
189
189
  const e071 = yield this.getE071();
190
190
  const trmComments = e071.filter(o => o.pgmid === '*' && o.object === exports.COMMENT_OBJ);
191
- const hasName = trmComments.find(o => /name=/i.test(o.objName));
192
- const hasVersion = trmComments.find(o => /version=/i.test(o.objName));
193
- const hasDocumentation = (yield this.getDocumentation()).length > 0;
194
- this._trmRelevant = (hasName && hasVersion && hasDocumentation) ? true : false;
191
+ trmComments.forEach(s => {
192
+ if (!this._trmPackageName) {
193
+ try {
194
+ this._trmPackageName = /name=(\S*)/i.exec(s.objName)[1];
195
+ }
196
+ catch (e) { }
197
+ }
198
+ });
199
+ }
200
+ return this._trmPackageName;
201
+ });
202
+ }
203
+ getTrmPackageVersion() {
204
+ return __awaiter(this, void 0, void 0, function* () {
205
+ if (this._trmPackageVersion === undefined) {
206
+ const e071 = yield this.getE071();
207
+ const trmComments = e071.filter(o => o.pgmid === '*' && o.object === exports.COMMENT_OBJ);
208
+ trmComments.forEach(s => {
209
+ if (!this._trmPackageVersion) {
210
+ try {
211
+ this._trmPackageVersion = /version=(\S*)/i.exec(s.objName)[1];
212
+ }
213
+ catch (e) { }
214
+ }
215
+ });
195
216
  }
196
- return this._trmRelevant;
217
+ return this._trmPackageVersion;
218
+ });
219
+ }
220
+ isTrmRelevant() {
221
+ return __awaiter(this, void 0, void 0, function* () {
222
+ const packageName = yield this.getTrmPackageName();
223
+ const packageVersion = yield this.getTrmPackageVersion();
224
+ const hasDocumentation = (yield this.getDocumentation()).length > 0;
225
+ return !!(packageName && packageVersion && hasDocumentation);
197
226
  });
198
227
  }
199
228
  download() {
@@ -368,31 +397,14 @@ class Transport {
368
397
  }
369
398
  release(lock, skipLog, tmpFolder, secondsTimeout) {
370
399
  return __awaiter(this, void 0, void 0, function* () {
371
- var rc;
372
400
  trm_commons_1.Logger.loading('Releasing transport...', skipLog);
373
401
  yield systemConnector_1.SystemConnector.releaseTrkorr(this.trkorr, lock, secondsTimeout);
374
402
  yield systemConnector_1.SystemConnector.dequeueTransport(this.trkorr);
375
403
  if (tmpFolder) {
376
- rc = yield this.readReleaseLog(tmpFolder, secondsTimeout);
404
+ yield this.readReleaseLog(tmpFolder, secondsTimeout);
377
405
  }
378
406
  else {
379
- rc = yield this._isInTmsQueue(skipLog, false, secondsTimeout);
380
- }
381
- if (!skipLog && !tmpFolder) {
382
- switch (rc) {
383
- case 4:
384
- trm_commons_1.Logger.warning(`${this.trkorr} release ended with warning.`);
385
- break;
386
- case 8:
387
- trm_commons_1.Logger.error(`${this.trkorr} release ended with error.`);
388
- break;
389
- case 12:
390
- trm_commons_1.Logger.error(`${this.trkorr} release was cancelled.`);
391
- break;
392
- case 16:
393
- trm_commons_1.Logger.error(`${this.trkorr} release was cancelled.`);
394
- break;
395
- }
407
+ yield this._isInTmsQueue(skipLog, false, secondsTimeout);
396
408
  }
397
409
  });
398
410
  }
@@ -559,7 +571,6 @@ class Transport {
559
571
  var inQueue = false;
560
572
  var rc = 12;
561
573
  if (this._trTarget) {
562
- var sLog = `status unknown`;
563
574
  var inQueueAttempts = 0;
564
575
  while (!inQueue && (new Date()).getTime() < timeoutDate.getTime()) {
565
576
  inQueueAttempts++;
@@ -570,14 +581,17 @@ class Transport {
570
581
  tmsQueue = tmsQueue.filter(o => o.trkorr === this.trkorr);
571
582
  tmsQueue = tmsQueue.sort((a, b) => parseInt(b.bufpos) - parseInt(a.bufpos));
572
583
  if (!checkImpSing) {
573
- sLog = `released`;
574
584
  inQueue = tmsQueue.length > 0;
575
585
  }
576
586
  else {
577
- sLog = `imported`;
578
587
  if (tmsQueue.length > 0) {
579
588
  inQueue = tmsQueue[0].impsing !== 'X';
580
- rc = parseInt(tmsQueue[0].maxrc);
589
+ if (!tmsQueue[0].maxrc) {
590
+ rc = -1;
591
+ }
592
+ else {
593
+ rc = parseInt(tmsQueue[0].maxrc);
594
+ }
581
595
  }
582
596
  else {
583
597
  inQueue = false;
@@ -588,7 +602,10 @@ class Transport {
588
602
  throw new Error(`${this.trkorr} not found in queue, timed out after ${inQueueAttempts + 1} attempts`);
589
603
  }
590
604
  else {
591
- trm_commons_1.Logger.success(`${this.trkorr} ${sLog}.`, skipLog);
605
+ if (!checkImpSing) {
606
+ trm_commons_1.Logger.success(`${this.trkorr} released.`, skipLog);
607
+ rc = -1;
608
+ }
592
609
  }
593
610
  }
594
611
  else {
@@ -754,6 +771,12 @@ class Transport {
754
771
  const rc = yield this._isInTmsQueue(false, true, timeout);
755
772
  trm_commons_1.Logger.log(`Transport ${this.trkorr} import ended: return code ${rc}`, true);
756
773
  switch (rc) {
774
+ case -1:
775
+ trm_commons_1.Logger.error(`${this.trkorr} import has no return code!`);
776
+ break;
777
+ case 0:
778
+ trm_commons_1.Logger.success(`${this.trkorr} import ended with success.`);
779
+ break;
757
780
  case 4:
758
781
  trm_commons_1.Logger.warning(`${this.trkorr} import ended with warning.`);
759
782
  break;
@@ -84,7 +84,7 @@ class TrmArtifact {
84
84
  return this._manifest;
85
85
  }
86
86
  replaceManifest(oManifest) {
87
- const manifestBuffer = Buffer.from(JSON.stringify(oManifest.get(false), null, 2), 'utf8');
87
+ const manifestBuffer = Buffer.from(oManifest.getJSON(), 'utf8');
88
88
  this._zip.updateFile('manifest.json', manifestBuffer);
89
89
  }
90
90
  getDistFolder() {
@@ -218,10 +218,8 @@ class TrmArtifact {
218
218
  trm_commons_1.Logger.error(`Couldn't add source code to TRM artifact!`);
219
219
  }
220
220
  }
221
- var oManifest = data.manifest.get(false);
222
- var oSapEntries = oManifest.sapEntries;
223
- delete oManifest.sapEntries;
224
- const manifestBuffer = Buffer.from(JSON.stringify(oManifest, null, 2), 'utf8');
221
+ const oSapEntries = data.manifest.get().sapEntries;
222
+ const manifestBuffer = Buffer.from(data.manifest.getJSON(["sapEntries"]), 'utf8');
225
223
  trm_commons_1.Logger.log(`Adding manifest.json`, true);
226
224
  artifact.addFile(`manifest.json`, manifestBuffer, `manifest`);
227
225
  if (oSapEntries && Object.keys(oSapEntries).length > 0) {