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.
- package/changelog.txt +15 -0
- package/dist/actions/checkPackageDependencies/analyze.js +5 -51
- package/dist/actions/checkPackageDependencies/index.d.ts +2 -5
- package/dist/actions/checkPackageDependencies/init.js +5 -7
- package/dist/actions/checkSapEntries/analyze.js +2 -2
- package/dist/actions/checkSapEntries/index.d.ts +2 -2
- package/dist/actions/checkSapEntries/init.js +1 -4
- package/dist/actions/findDependencies/index.d.ts +0 -2
- package/dist/actions/findDependencies/setTrmDependencies.js +11 -55
- package/dist/actions/install/addNamespace.js +14 -9
- package/dist/actions/install/checkAlreadyInstalled.js +2 -2
- package/dist/actions/install/checkDependencies.js +2 -16
- package/dist/actions/install/checkSapEntries.js +1 -1
- package/dist/actions/install/checkTransports.js +2 -2
- package/dist/actions/install/executePostActivities.js +3 -3
- package/dist/actions/install/generateInstallTransport.js +40 -5
- package/dist/actions/install/index.d.ts +6 -10
- package/dist/actions/install/index.js +2 -4
- package/dist/actions/install/init.js +37 -45
- package/dist/actions/install/installDependencies.js +0 -1
- package/dist/actions/install/setPackageIntegrity.js +1 -1
- package/dist/actions/install/setTrmServerUpgradeService.js +1 -1
- package/dist/actions/installDependency/findInstallRelease.js +18 -18
- package/dist/actions/installDependency/index.d.ts +0 -1
- package/dist/actions/installDependency/init.js +0 -7
- package/dist/actions/installDependency/installRelease.js +0 -1
- package/dist/actions/publish/findDependencies.js +0 -12
- package/dist/actions/publish/generateCustTransport.js +0 -3
- package/dist/actions/publish/generateDevcTransport.js +0 -4
- package/dist/actions/publish/generateLangTransport.js +0 -3
- package/dist/actions/publish/getSourceCode.js +1 -1
- package/dist/actions/publish/index.d.ts +1 -1
- package/dist/actions/publish/init.js +71 -95
- package/dist/actions/publish/setManifestValues.js +4 -13
- package/dist/commons/getAxiosInstance.d.ts +1 -1
- package/dist/manifest/Manifest.d.ts +2 -0
- package/dist/manifest/Manifest.js +47 -17
- package/dist/manifest/TrmManifestDependency.d.ts +0 -1
- package/dist/registry/AbstractRegistry.d.ts +7 -7
- package/dist/registry/FileSystem.d.ts +7 -6
- package/dist/registry/FileSystem.js +35 -34
- package/dist/registry/RegistryProvider.js +4 -4
- package/dist/registry/{Registry.d.ts → RegistryV2.d.ts} +11 -10
- package/dist/registry/{Registry.js → RegistryV2.js} +146 -74
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/systemConnector/ISystemConnectorBase.d.ts +1 -1
- package/dist/systemConnector/SystemConnector.d.ts +1 -1
- package/dist/systemConnector/SystemConnector.js +3 -3
- package/dist/systemConnector/SystemConnectorBase.d.ts +1 -1
- package/dist/systemConnector/SystemConnectorBase.js +33 -11
- package/dist/transport/Transport.d.ts +4 -1
- package/dist/transport/Transport.js +54 -31
- package/dist/trmPackage/TrmArtifact.js +3 -5
- package/dist/trmPackage/TrmPackage.d.ts +0 -16
- package/dist/trmPackage/TrmPackage.js +10 -133
- package/dist/validators/validatePackageVisibility.d.ts +1 -1
- package/dist/validators/validatePackageVisibility.js +2 -16
- package/package.json +4 -3
- package/dist/actions/install/checkIntegrity.d.ts +0 -3
- 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.
|
|
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
|
|
60
|
+
const node_cache_1 = __importDefault(require("node-cache"));
|
|
61
|
+
const AXIOS_CTX = "RegistryV2";
|
|
61
62
|
exports.PUBLIC_RESERVED_KEYWORD = 'public';
|
|
62
|
-
class
|
|
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
|
|
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.
|
|
114
|
-
if (ping.
|
|
115
|
-
if (ping.
|
|
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.
|
|
132
|
+
if (ping.authentication_type === trm_registry_types_1.AuthenticationType.OAUTH2) {
|
|
119
133
|
yield this._oauth2(defaultData);
|
|
120
134
|
}
|
|
121
|
-
if (ping.
|
|
135
|
+
if (ping.authentication_type === trm_registry_types_1.AuthenticationType.TOKEN) {
|
|
122
136
|
yield this._tokenAuth(defaultData);
|
|
123
137
|
}
|
|
124
138
|
}
|
|
125
|
-
this.
|
|
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 =
|
|
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 =
|
|
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(`
|
|
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.
|
|
265
|
+
const oAuth2 = ping.authentication_data;
|
|
252
266
|
const oAuth2ProtocolPath = "//oauth2";
|
|
253
267
|
const sRedirectUri = `trm:${oAuth2ProtocolPath}`;
|
|
254
|
-
const oAuth2Url = new URL(oAuth2.
|
|
268
|
+
const oAuth2Url = new URL(oAuth2.authorization_url);
|
|
255
269
|
const oAuth2State = (0, crypto_1.randomUUID)();
|
|
256
|
-
oAuth2Url.searchParams.append("client_id", oAuth2.
|
|
257
|
-
oAuth2Url.searchParams.append("response_type", oAuth2.
|
|
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 =
|
|
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
|
-
|
|
322
|
+
var data = this._cache.get('ping');
|
|
323
|
+
if (!data) {
|
|
309
324
|
try {
|
|
310
|
-
|
|
325
|
+
data = (yield this._axiosInstance.get('/', {
|
|
326
|
+
headers: {}
|
|
327
|
+
})).data;
|
|
311
328
|
}
|
|
312
329
|
catch (e) {
|
|
313
|
-
|
|
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
|
-
|
|
322
|
-
|
|
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
|
-
|
|
328
|
-
return __awaiter(this,
|
|
329
|
-
var
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
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
|
-
}
|
|
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
|
-
|
|
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
|
|
415
|
+
return new TrmArtifact_1.TrmArtifact(buffer);
|
|
342
416
|
});
|
|
343
417
|
}
|
|
344
|
-
|
|
345
|
-
return __awaiter(this, arguments, void 0, function* (
|
|
346
|
-
const
|
|
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
|
-
})).
|
|
352
|
-
|
|
424
|
+
})).status;
|
|
425
|
+
if (status !== 204) {
|
|
426
|
+
throw new Error(`Package cannot be published`);
|
|
427
|
+
}
|
|
353
428
|
});
|
|
354
429
|
}
|
|
355
|
-
|
|
356
|
-
return __awaiter(this,
|
|
357
|
-
const
|
|
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(
|
|
452
|
+
unpublish(fullName, version) {
|
|
382
453
|
return __awaiter(this, void 0, void 0, function* () {
|
|
383
|
-
yield this._axiosInstance.post(
|
|
384
|
-
|
|
385
|
-
|
|
454
|
+
yield this._axiosInstance.post(`/unpublish/${fullName}`, null, {
|
|
455
|
+
params: {
|
|
456
|
+
version
|
|
457
|
+
}
|
|
386
458
|
});
|
|
387
459
|
});
|
|
388
460
|
}
|
|
389
|
-
|
|
461
|
+
deprecate(fullName, version, reason) {
|
|
390
462
|
return __awaiter(this, void 0, void 0, function* () {
|
|
391
|
-
|
|
463
|
+
yield this._axiosInstance.post(`/deprecate/${fullName}`, {
|
|
464
|
+
deprecate_note: reason
|
|
465
|
+
}, {
|
|
392
466
|
params: {
|
|
393
|
-
|
|
394
|
-
version: versionRange
|
|
467
|
+
version
|
|
395
468
|
}
|
|
396
|
-
})
|
|
397
|
-
return response;
|
|
469
|
+
});
|
|
398
470
|
});
|
|
399
471
|
}
|
|
400
472
|
}
|
|
401
|
-
exports.
|
|
473
|
+
exports.RegistryV2 = RegistryV2;
|
package/dist/registry/index.d.ts
CHANGED
package/dist/registry/index.js
CHANGED
|
@@ -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("./
|
|
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
|
-
|
|
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
|
|
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
|
|
82
|
+
function getWbTransports(trmPackage) {
|
|
83
83
|
return __awaiter(this, void 0, void 0, function* () {
|
|
84
84
|
yield checkSystemConnector();
|
|
85
|
-
return SystemConnector.systemConnector.
|
|
85
|
+
return SystemConnector.systemConnector.getWbTransports(trmPackage);
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
|
-
SystemConnector.
|
|
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
|
-
|
|
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
|
-
|
|
39
|
+
getWbTransports(trmPackage) {
|
|
40
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
-
var
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
|
|
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
|
-
|
|
68
|
-
return
|
|
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}'
|
|
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
|
|
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
|
-
|
|
186
|
+
getTrmPackageName() {
|
|
187
187
|
return __awaiter(this, void 0, void 0, function* () {
|
|
188
|
-
if (this.
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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.
|
|
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
|
-
|
|
404
|
+
yield this.readReleaseLog(tmpFolder, secondsTimeout);
|
|
377
405
|
}
|
|
378
406
|
else {
|
|
379
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
222
|
-
|
|
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) {
|