trm-core 9.1.1 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.txt +12 -3
- package/dist/actions/cg3z/upload.js +2 -3
- package/dist/actions/install/addNamespace.js +5 -1
- package/dist/actions/install/checkAlreadyInstalled.js +18 -1
- package/dist/actions/install/checkTransports.js +1 -1
- package/dist/actions/install/generateInstallTransport.js +1 -1
- package/dist/actions/install/importCustTransport.js +2 -3
- package/dist/actions/install/importDevcTransport.js +13 -4
- package/dist/actions/install/importLangTransport.js +2 -3
- package/dist/actions/install/importTadirTransport.js +2 -3
- package/dist/actions/install/init.js +1 -1
- package/dist/actions/install/setInstallDevclass.js +4 -18
- package/dist/actions/install/updatePackageData.js +3 -1
- package/dist/actions/publish/findDependencies.js +1 -1
- package/dist/client/RESTClient.d.ts +4 -1
- package/dist/client/RESTClient.js +8 -3
- package/dist/client/RFCClient.d.ts +4 -1
- package/dist/client/RFCClient.js +5 -2
- package/dist/client/struct/ZTRM_DIRTY.d.ts +2 -1
- package/dist/dependencies/ObjectDependencies.js +1 -1
- package/dist/dependencies/PackageDependencies.d.ts +1 -1
- package/dist/dependencies/PackageDependencies.js +10 -35
- package/dist/lockfile/Lockfile.js +2 -2
- package/dist/registry/AbstractRegistry.d.ts +2 -2
- package/dist/registry/RegistryV2.d.ts +2 -2
- package/dist/registry/RegistryV2.js +17 -54
- package/dist/systemConnector/ISystemConnectorBase.d.ts +5 -2
- package/dist/systemConnector/RESTSystemConnector.d.ts +4 -1
- package/dist/systemConnector/RESTSystemConnector.js +2 -2
- package/dist/systemConnector/RFCSystemConnector.d.ts +4 -1
- package/dist/systemConnector/RFCSystemConnector.js +2 -2
- package/dist/systemConnector/SystemConnector.d.ts +5 -2
- package/dist/systemConnector/SystemConnector.js +4 -4
- package/dist/systemConnector/SystemConnectorBase.d.ts +9 -3
- package/dist/systemConnector/SystemConnectorBase.js +10 -52
- package/dist/transport/Transport.d.ts +1 -5
- package/dist/transport/Transport.js +2 -27
- package/package.json +6 -8
package/changelog.txt
CHANGED
|
@@ -8,9 +8,18 @@ Legend
|
|
|
8
8
|
+ : added
|
|
9
9
|
- : removed
|
|
10
10
|
|
|
11
|
-
2026-04-
|
|
12
|
-
-------------------
|
|
13
|
-
|
|
11
|
+
2026-04-21 v9.2.0
|
|
12
|
+
-------------------
|
|
13
|
+
* avoid useless transport unpack for reading transport number
|
|
14
|
+
! usage with devc transport import when replacements are like original
|
|
15
|
+
* ignore namespace import error when doesnt exist
|
|
16
|
+
+ optional filter installed packages
|
|
17
|
+
- optional log parameter
|
|
18
|
+
* install transport update in table
|
|
19
|
+
+ confirm overwrite on dirty package
|
|
20
|
+
! trm-server ^6.1.0
|
|
21
|
+
! trm-commons ^4.0.0
|
|
22
|
+
! node-r3trans ^2.0.2
|
|
14
23
|
|
|
15
24
|
2026-04-21 v9.1.0
|
|
16
25
|
-------------------
|
|
@@ -79,13 +79,12 @@ exports.upload = {
|
|
|
79
79
|
throw new Error(`Transport header and data don't match!`);
|
|
80
80
|
}
|
|
81
81
|
trm_commons_1.Logger.loading(`Uploading transport ${transport_1.Transport.getTransportIcon()} ${context.output.trkorr}...`);
|
|
82
|
-
yield transport_1.Transport.upload({
|
|
82
|
+
yield transport_1.Transport.upload(context.output.trkorr, {
|
|
83
83
|
binary: {
|
|
84
84
|
header: aHeader[0].getData(),
|
|
85
85
|
data: aData[0].getData()
|
|
86
86
|
},
|
|
87
|
-
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
88
|
-
r3transOption: context.rawInput.r3transOptions
|
|
87
|
+
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
89
88
|
});
|
|
90
89
|
trm_commons_1.Logger.loading(`Forwarding transport ${transport_1.Transport.getTransportIcon()} ${context.output.trkorr}...`);
|
|
91
90
|
yield systemConnector_1.SystemConnector.forwardTransport(context.output.trkorr, systemConnector_1.SystemConnector.getDest(), systemConnector_1.SystemConnector.getDest(), true);
|
|
@@ -41,8 +41,12 @@ exports.addNamespace = {
|
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
|
+
if (context.rawInput.installData.installDevclass.keepOriginal) {
|
|
45
|
+
trm_commons_1.Logger.warning(`Install will continue without importing namespace ${context.runtime.installData.namespace}. Run install with namespace import or manually add namespace in SE03.`, context.runtime.installData.namespace === '/ATRM/');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
44
48
|
if (context.rawInput.installData.installDevclass.skipNamespace) {
|
|
45
|
-
throw new Error(`Cannot generate packages without namespace ${context.runtime.installData.namespace}. Run install with namespace import or
|
|
49
|
+
throw new Error(`Cannot generate packages without namespace ${context.runtime.installData.namespace}. Run install with namespace import or avoid renaming packages.`);
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
52
|
var replicense;
|
|
@@ -13,6 +13,7 @@ exports.checkAlreadyInstalled = void 0;
|
|
|
13
13
|
const trm_commons_1 = require("trm-commons");
|
|
14
14
|
const manifest_1 = require("../../manifest");
|
|
15
15
|
const semver_1 = require("semver");
|
|
16
|
+
const systemConnector_1 = require("../../systemConnector");
|
|
16
17
|
exports.checkAlreadyInstalled = {
|
|
17
18
|
name: 'check-already-installed',
|
|
18
19
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -27,7 +28,7 @@ exports.checkAlreadyInstalled = {
|
|
|
27
28
|
context.runtime.update = true;
|
|
28
29
|
if ((0, semver_1.eq)(installVersion, installedVersion)) {
|
|
29
30
|
if (context.rawInput.packageData.overwrite) {
|
|
30
|
-
trm_commons_1.Logger.info(`Package "${trmManifest.name}" version ${installedVersion} already installed.`);
|
|
31
|
+
trm_commons_1.Logger.info(`Package "${trmManifest.name}" version ${installedVersion} already installed, overwriting.`);
|
|
31
32
|
}
|
|
32
33
|
else {
|
|
33
34
|
throw new Error(`Package "${trmManifest.name}" version ${installedVersion} already installed.`);
|
|
@@ -41,6 +42,22 @@ exports.checkAlreadyInstalled = {
|
|
|
41
42
|
trm_commons_1.Logger.warning(`Downgrading ${installedVersion} -> ${installVersion}`);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
45
|
+
if (context.runtime.installData.upgradingPackage.isDirty()) {
|
|
46
|
+
var ignoreDirty = false;
|
|
47
|
+
trm_commons_1.Logger.warning(`There are some changes on ${systemConnector_1.SystemConnector.getDest()} that may be overwritten!`);
|
|
48
|
+
trm_commons_1.Logger.warning(`Consider analyzing dirty entries for package "${trmManifest.name}"`);
|
|
49
|
+
if (!context.rawInput.contextData.noInquirer) {
|
|
50
|
+
ignoreDirty = (yield trm_commons_1.Inquirer.prompt({
|
|
51
|
+
message: `Continue with install?`,
|
|
52
|
+
type: 'confirm',
|
|
53
|
+
default: false,
|
|
54
|
+
name: 'ignoreDirty'
|
|
55
|
+
})).ignoreDirty;
|
|
56
|
+
}
|
|
57
|
+
if (!ignoreDirty) {
|
|
58
|
+
throw new Error(`Install of package "${trmManifest.name}" aborted.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
44
61
|
}
|
|
45
62
|
else {
|
|
46
63
|
context.runtime.update = false;
|
|
@@ -21,7 +21,7 @@ exports.checkTransports = {
|
|
|
21
21
|
trm_commons_1.Logger.log('Check transports step', true);
|
|
22
22
|
var checkExistance = [];
|
|
23
23
|
try {
|
|
24
|
-
context.runtime.packageTransportsData = yield context.rawInput.packageData.registry.contents(context.rawInput.packageData.name, context.rawInput.packageData.version || 'latest'
|
|
24
|
+
context.runtime.packageTransportsData = yield context.rawInput.packageData.registry.contents(context.rawInput.packageData.name, context.rawInput.packageData.version || 'latest');
|
|
25
25
|
context.runtime.remotePackageData.contents = true;
|
|
26
26
|
}
|
|
27
27
|
catch (_a) {
|
|
@@ -159,12 +159,12 @@ exports.generateInstallTransport = {
|
|
|
159
159
|
if (o.success) {
|
|
160
160
|
if (o.len > 0) {
|
|
161
161
|
trm_commons_1.Logger.success(`Use ${o.type === transport_1.TrmTransportIdentifier.TADIR ? 'workbench' : 'customizing'} transport ${chalk_1.default.bold(o.trkorr)} in ${systemConnector_1.SystemConnector.getDest()} landscape transports.`);
|
|
162
|
-
context.runtime.installData.transports = context.runtime.installData.transports.filter(o => o.transport.trkorr !== o.transport.trkorr);
|
|
163
162
|
}
|
|
164
163
|
}
|
|
165
164
|
else {
|
|
166
165
|
if (o.len > 0) {
|
|
167
166
|
trm_commons_1.Logger.error(`Error on release of ${o.type === transport_1.TrmTransportIdentifier.TADIR ? 'workbench' : 'customizing'} transport ${chalk_1.default.bold(o.trkorr)}.`);
|
|
167
|
+
context.runtime.installData.transports = context.runtime.installData.transports.filter(o => o.transport.trkorr !== o.transport.trkorr);
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
});
|
|
@@ -40,10 +40,9 @@ exports.importCustTransport = {
|
|
|
40
40
|
context.runtime.stopWarningShown = true;
|
|
41
41
|
(0, stopWarning_1.stopWarning)('install');
|
|
42
42
|
}
|
|
43
|
-
transport.instance = yield transport_1.Transport.upload({
|
|
43
|
+
transport.instance = yield transport_1.Transport.upload(transport.binaries.trkorr, {
|
|
44
44
|
binary: transport.binaries.binaries,
|
|
45
|
-
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
46
|
-
r3transOption: context.rawInput.contextData.r3transOptions
|
|
45
|
+
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
47
46
|
});
|
|
48
47
|
yield transport.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
|
|
49
48
|
const originalLPrefix = trm_commons_1.Logger.getPrefix();
|
|
@@ -35,10 +35,9 @@ exports.importDevcTransport = {
|
|
|
35
35
|
(0, stopWarning_1.stopWarning)('install');
|
|
36
36
|
}
|
|
37
37
|
trm_commons_1.Logger.loading(`Uploading ${context.runtime.packageTransports.devc.binaries.trkorr}`, true);
|
|
38
|
-
context.runtime.packageTransports.devc.instance = yield transport_1.Transport.upload({
|
|
38
|
+
context.runtime.packageTransports.devc.instance = yield transport_1.Transport.upload(context.runtime.packageTransports.devc.binaries.trkorr, {
|
|
39
39
|
binary: context.runtime.packageTransports.devc.binaries.binaries,
|
|
40
|
-
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
41
|
-
r3transOption: context.rawInput.contextData.r3transOptions
|
|
40
|
+
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
42
41
|
});
|
|
43
42
|
yield context.runtime.packageTransports.devc.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
|
|
44
43
|
const originalLPrefix = trm_commons_1.Logger.getPrefix();
|
|
@@ -77,7 +76,17 @@ exports.importDevcTransport = {
|
|
|
77
76
|
srcsystem: 'TRM'
|
|
78
77
|
};
|
|
79
78
|
trm_commons_1.Logger.log(`Running TADIR interface for object ${object.pgmid} ${object.object} ${object.objName}, devclass ${object.devclass} -> src system ${object.srcsystem}`, true);
|
|
80
|
-
|
|
79
|
+
try {
|
|
80
|
+
yield systemConnector_1.SystemConnector.tadirInterface(object);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
if (e.sapMessage && e.sapMessage.class === 'TO' && e.sapMessage.no === '123') {
|
|
84
|
+
trm_commons_1.Logger.log(e.toString(), true);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
throw e;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
81
90
|
}
|
|
82
91
|
for (const tdevc of context.runtime.packageTransportsData.tdevc) {
|
|
83
92
|
trm_commons_1.Logger.log(`Running TDEVC interface for devclass ${tdevc.devclass} -> transport layer ${context.rawInput.installData.installDevclass.transportLayer}`, true);
|
|
@@ -39,10 +39,9 @@ exports.importLangTransport = {
|
|
|
39
39
|
context.runtime.stopWarningShown = true;
|
|
40
40
|
(0, stopWarning_1.stopWarning)('install');
|
|
41
41
|
}
|
|
42
|
-
context.runtime.packageTransports.lang.instance = yield transport_1.Transport.upload({
|
|
42
|
+
context.runtime.packageTransports.lang.instance = yield transport_1.Transport.upload(context.runtime.packageTransports.lang.binaries.trkorr, {
|
|
43
43
|
binary: context.runtime.packageTransports.lang.binaries.binaries,
|
|
44
|
-
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
45
|
-
r3transOption: context.rawInput.contextData.r3transOptions
|
|
44
|
+
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
46
45
|
});
|
|
47
46
|
yield context.runtime.packageTransports.lang.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
|
|
48
47
|
const originalLPrefix = trm_commons_1.Logger.getPrefix();
|
|
@@ -28,10 +28,9 @@ exports.importTadirTransport = {
|
|
|
28
28
|
context.runtime.stopWarningShown = true;
|
|
29
29
|
(0, stopWarning_1.stopWarning)('install');
|
|
30
30
|
}
|
|
31
|
-
context.runtime.packageTransports.tadir.instance = yield transport_1.Transport.upload({
|
|
31
|
+
context.runtime.packageTransports.tadir.instance = yield transport_1.Transport.upload(context.runtime.packageTransports.tadir.binaries.trkorr, {
|
|
32
32
|
binary: context.runtime.packageTransports.tadir.binaries.binaries,
|
|
33
|
-
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
34
|
-
r3transOption: context.rawInput.contextData.r3transOptions
|
|
33
|
+
trTarget: systemConnector_1.SystemConnector.getDest()
|
|
35
34
|
});
|
|
36
35
|
yield context.runtime.packageTransports.tadir.instance.deleteFromTms(systemConnector_1.SystemConnector.getDest());
|
|
37
36
|
const originalLPrefix = trm_commons_1.Logger.getPrefix();
|
|
@@ -40,7 +40,7 @@ exports.init = {
|
|
|
40
40
|
if (registry.getRegistryType() !== registry_1.RegistryType.LOCAL) {
|
|
41
41
|
trm_commons_1.Logger.loading(`Fetching package in registry ${registry.name}...`);
|
|
42
42
|
packageData = yield registry.getPackage(context.rawInput.packageData.name, context.rawInput.packageData.version || 'latest');
|
|
43
|
-
artifact = yield registry.downloadArtifact(packageData.name, packageData.manifest.version
|
|
43
|
+
artifact = yield registry.downloadArtifact(packageData.name, packageData.manifest.version);
|
|
44
44
|
const checksum = (0, crypto_1.createHash)("sha512").update(artifact.binary).digest("base64");
|
|
45
45
|
if (checksum !== packageData.checksum) {
|
|
46
46
|
var ping;
|
|
@@ -40,18 +40,8 @@ exports.setInstallDevclass = {
|
|
|
40
40
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
41
|
var _a;
|
|
42
42
|
trm_commons_1.Logger.log('Set install devclass step', true);
|
|
43
|
-
if (context.rawInput.installData.installDevclass.
|
|
44
|
-
context.rawInput.installData.installDevclass.replacements = context.
|
|
45
|
-
return {
|
|
46
|
-
originalDevclass: o.devclass,
|
|
47
|
-
installDevclass: o.devclass
|
|
48
|
-
};
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
if (context.rawInput.installData.installDevclass.replacements.length <= 0) {
|
|
53
|
-
context.rawInput.installData.installDevclass.replacements = yield systemConnector_1.SystemConnector.getInstallPackages(context.rawInput.packageData.name, context.rawInput.packageData.registry);
|
|
54
|
-
}
|
|
43
|
+
if (context.rawInput.installData.installDevclass.replacements.length <= 0) {
|
|
44
|
+
context.rawInput.installData.installDevclass.replacements = yield systemConnector_1.SystemConnector.getInstallPackages(context.rawInput.packageData.name, context.rawInput.packageData.registry);
|
|
55
45
|
}
|
|
56
46
|
var rootDevclass = (_a = context.rawInput.installData.installDevclass.replacements.find(o => o.originalDevclass === context.runtime.originalData.hierarchy.devclass)) === null || _a === void 0 ? void 0 : _a.installDevclass;
|
|
57
47
|
if (!rootDevclass) {
|
|
@@ -134,15 +124,11 @@ exports.setInstallDevclass = {
|
|
|
134
124
|
});
|
|
135
125
|
});
|
|
136
126
|
yield systemConnector_1.SystemConnector.setInstallDevc(installDevc);
|
|
137
|
-
|
|
127
|
+
context.rawInput.installData.installDevclass.keepOriginal = true;
|
|
138
128
|
context.rawInput.installData.installDevclass.replacements.forEach(o => {
|
|
139
129
|
if (o.installDevclass !== o.originalDevclass) {
|
|
140
|
-
|
|
130
|
+
context.rawInput.installData.installDevclass.keepOriginal = false;
|
|
141
131
|
}
|
|
142
132
|
});
|
|
143
|
-
if (allEqual) {
|
|
144
|
-
trm_commons_1.Logger.log(`All packages name are identical, setting DEVC import flag to true`, true);
|
|
145
|
-
context.rawInput.installData.installDevclass.keepOriginal = true;
|
|
146
|
-
}
|
|
147
133
|
})
|
|
148
134
|
};
|
|
@@ -22,7 +22,9 @@ exports.updatePackageData = {
|
|
|
22
22
|
trm_commons_1.Logger.loading(`Finalizing install...`);
|
|
23
23
|
const originalTransport = context.runtime.packageTransports.tadir.binaries.trkorr;
|
|
24
24
|
const installTransport = context.runtime.installData.transports.find(o => o.type === transport_1.TrmTransportIdentifier.TADIR);
|
|
25
|
-
const devclass = context.rawInput.installData.installDevclass.
|
|
25
|
+
const devclass = context.rawInput.installData.installDevclass.keepOriginal ?
|
|
26
|
+
context.runtime.originalData.hierarchy.devclass :
|
|
27
|
+
context.rawInput.installData.installDevclass.replacements.find(o => o.originalDevclass = context.runtime.originalData.hierarchy.devclass).installDevclass;
|
|
26
28
|
yield systemConnector_1.SystemConnector.updateTrmPackageData({
|
|
27
29
|
package_name: context.rawInput.packageData.name,
|
|
28
30
|
package_registry: context.runtime.registry.getRegistryType() === registry_1.RegistryType.PUBLIC ? registry_1.PUBLIC_RESERVED_KEYWORD : context.runtime.registry.endpoint,
|
|
@@ -61,7 +61,7 @@ exports.findDependencies = {
|
|
|
61
61
|
}),
|
|
62
62
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
63
|
trm_commons_1.Logger.log('Find dependencies step', true);
|
|
64
|
-
const dependencies = yield systemConnector_1.SystemConnector.getPackageDependencies(context.rawInput.packageData.devclass, true
|
|
64
|
+
const dependencies = yield systemConnector_1.SystemConnector.getPackageDependencies(context.rawInput.packageData.devclass, true);
|
|
65
65
|
const trmDependencies = dependencies.trmPackageDependencies;
|
|
66
66
|
const trmLocalDependencies = trmDependencies.filter(o => o.trmPackage.registry.getRegistryType() === registry_1.RegistryType.LOCAL);
|
|
67
67
|
const sapDependencies = dependencies.abapPackageDependencies.filter(o => !o.isCustomerPackage);
|
|
@@ -61,7 +61,10 @@ export declare class RESTClient implements IClient {
|
|
|
61
61
|
messages: struct.SYMSG[];
|
|
62
62
|
execute?: boolean;
|
|
63
63
|
}>;
|
|
64
|
-
getInstalledPackagesBackend(
|
|
64
|
+
getInstalledPackagesBackend(filter?: {
|
|
65
|
+
name: string;
|
|
66
|
+
registry: string;
|
|
67
|
+
}): Promise<struct.ZTRM_PACKAGE[]>;
|
|
65
68
|
isServerApisAllowed(): Promise<true | RESTClientError>;
|
|
66
69
|
changeTrOwner(trkorr: components.TRKORR, owner: components.TR_AS4USER): Promise<void>;
|
|
67
70
|
getPackageDependencies(devclass: components.DEVCLASS, includeSubPackages: boolean, logId?: components.ZTRM_POLLING_ID): Promise<struct.ZTRM_OBJECT_DEPENDENCIES[]>;
|
|
@@ -590,7 +590,7 @@ class RESTClient {
|
|
|
590
590
|
}
|
|
591
591
|
});
|
|
592
592
|
try {
|
|
593
|
-
const boundary = headers['content-type'].match(/boundary=([-0-9A-Za-z]+)/i)[1];
|
|
593
|
+
const boundary = (headers['content-type']).toString().match(/boundary=([-0-9A-Za-z]+)/i)[1];
|
|
594
594
|
const parsedData = (0, parse_multipart_data_1.parse)(data, boundary);
|
|
595
595
|
return {
|
|
596
596
|
zip: parsedData.find(o => o.name === 'zip').data,
|
|
@@ -616,9 +616,14 @@ class RESTClient {
|
|
|
616
616
|
};
|
|
617
617
|
});
|
|
618
618
|
}
|
|
619
|
-
getInstalledPackagesBackend() {
|
|
619
|
+
getInstalledPackagesBackend(filter) {
|
|
620
620
|
return __awaiter(this, void 0, void 0, function* () {
|
|
621
|
-
const result = (yield this._axiosInstance.get('/get_installed_packages'
|
|
621
|
+
const result = (yield this._axiosInstance.get('/get_installed_packages', filter ? {
|
|
622
|
+
data: {
|
|
623
|
+
package_name: filter.name,
|
|
624
|
+
package_registry: filter.registry
|
|
625
|
+
}
|
|
626
|
+
} : undefined)).data;
|
|
622
627
|
return result.packages.map(o => {
|
|
623
628
|
return Object.assign(Object.assign({}, o), {
|
|
624
629
|
manifest: Buffer.from(o.manifest, 'base64').toString('utf8'),
|
|
@@ -62,7 +62,10 @@ export declare class RFCClient implements IClient {
|
|
|
62
62
|
messages: struct.SYMSG[];
|
|
63
63
|
execute?: boolean;
|
|
64
64
|
}>;
|
|
65
|
-
getInstalledPackagesBackend(
|
|
65
|
+
getInstalledPackagesBackend(filter?: {
|
|
66
|
+
name: string;
|
|
67
|
+
registry: string;
|
|
68
|
+
}): Promise<struct.ZTRM_PACKAGE[]>;
|
|
66
69
|
isServerApisAllowed(): Promise<true | RFCClientError>;
|
|
67
70
|
changeTrOwner(trkorr: components.TRKORR, owner: components.TR_AS4USER): Promise<void>;
|
|
68
71
|
getPackageDependencies(devclass: components.DEVCLASS, includeSubPackages: boolean, logId?: components.ZTRM_POLLING_ID): Promise<struct.ZTRM_OBJECT_DEPENDENCIES[]>;
|
package/dist/client/RFCClient.js
CHANGED
|
@@ -615,9 +615,12 @@ class RFCClient {
|
|
|
615
615
|
};
|
|
616
616
|
});
|
|
617
617
|
}
|
|
618
|
-
getInstalledPackagesBackend() {
|
|
618
|
+
getInstalledPackagesBackend(filter) {
|
|
619
619
|
return __awaiter(this, void 0, void 0, function* () {
|
|
620
|
-
const result = yield this._call("/ATRM/GET_INSTALLED_PACKAGES"
|
|
620
|
+
const result = yield this._call("/ATRM/GET_INSTALLED_PACKAGES", filter ? {
|
|
621
|
+
package_name: filter.name,
|
|
622
|
+
package_registry: filter.registry
|
|
623
|
+
} : undefined);
|
|
621
624
|
return result['packages'].map(o => {
|
|
622
625
|
return Object.assign(Object.assign({}, o), {
|
|
623
626
|
manifest: o.manifest.toString()
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { PGMID, TRKORR, TROBJ_NAME, TROBJTYPE } from "../components";
|
|
1
|
+
import { AS4TEXT, PGMID, TRKORR, TROBJ_NAME, TROBJTYPE } from "../components";
|
|
2
2
|
export type ZTRM_DIRTY = {
|
|
3
3
|
trkorr: TRKORR;
|
|
4
4
|
pgmid: PGMID;
|
|
5
5
|
object: TROBJTYPE;
|
|
6
6
|
objName: TROBJ_NAME;
|
|
7
|
+
as4Text: AS4TEXT;
|
|
7
8
|
};
|
|
@@ -25,7 +25,7 @@ class ObjectDependencies {
|
|
|
25
25
|
for (const d of dependencies) {
|
|
26
26
|
const tabkey = yield this.addTableKey(d.tabname, d.tabkey);
|
|
27
27
|
if (d.trmPackageName) {
|
|
28
|
-
var trmPackage = (yield systemConnector_1.SystemConnector.getInstalledPackages(
|
|
28
|
+
var trmPackage = (yield systemConnector_1.SystemConnector.getInstalledPackages(false, true)).find(o => o.compareName(d.trmPackageName) && o.compareRegistry(registry_1.RegistryProvider.getRegistry(d.trmPackageRegistry)));
|
|
29
29
|
if (trmPackage) {
|
|
30
30
|
var iTrmPackage = this.trmPackages.findIndex(o => o.trmPackage.compareName(trmPackage.packageName) && o.trmPackage.compareRegistry(trmPackage.registry));
|
|
31
31
|
if (iTrmPackage < 0) {
|
|
@@ -29,6 +29,6 @@ export declare class PackageDependencies {
|
|
|
29
29
|
readonly abapPackageDependencies: AbapPackageDependency[];
|
|
30
30
|
private devclasses;
|
|
31
31
|
constructor(devclass: DEVCLASS);
|
|
32
|
-
setDependencies(packageDependencies: ZTRM_OBJECT_DEPENDENCIES[]
|
|
32
|
+
setDependencies(packageDependencies: ZTRM_OBJECT_DEPENDENCIES[]): Promise<PackageDependencies>;
|
|
33
33
|
private getDevclasses;
|
|
34
34
|
}
|
|
@@ -47,7 +47,6 @@ const trm_commons_1 = require("trm-commons");
|
|
|
47
47
|
const systemConnector_1 = require("../systemConnector");
|
|
48
48
|
const ObjectDependencies_1 = require("./ObjectDependencies");
|
|
49
49
|
const _ = __importStar(require("lodash"));
|
|
50
|
-
const cliProgress = __importStar(require("cli-progress"));
|
|
51
50
|
class PackageDependencies {
|
|
52
51
|
constructor(devclass) {
|
|
53
52
|
this.devclass = devclass;
|
|
@@ -55,40 +54,20 @@ class PackageDependencies {
|
|
|
55
54
|
this.trmPackageDependencies = [];
|
|
56
55
|
this.abapPackageDependencies = [];
|
|
57
56
|
}
|
|
58
|
-
setDependencies(packageDependencies
|
|
57
|
+
setDependencies(packageDependencies) {
|
|
59
58
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
59
|
var i = 0;
|
|
61
|
-
var logProgress;
|
|
62
|
-
|
|
63
|
-
i = 0;
|
|
64
|
-
logProgress = new cliProgress.SingleBar({
|
|
65
|
-
clearOnComplete: true,
|
|
66
|
-
hideCursor: true,
|
|
67
|
-
format: 'Analyzing dependencies [{bar}] {percentage}% ({value}/{total})',
|
|
68
|
-
barGlue: '>'
|
|
69
|
-
}, cliProgress.Presets.legacy);
|
|
70
|
-
trm_commons_1.Logger.forceStop();
|
|
71
|
-
logProgress.start(packageDependencies.length, 0);
|
|
72
|
-
}
|
|
60
|
+
var logProgress = trm_commons_1.Logger.progressbar('Analyzing dependencies [{bar}] {percentage}% ({value}/{total})', '>');
|
|
61
|
+
logProgress.start(packageDependencies.length, 0);
|
|
73
62
|
for (const d of packageDependencies) {
|
|
74
63
|
this.allDependencies.push(yield (new ObjectDependencies_1.ObjectDependencies(d.object, d.objName).setDependencies(d.dependencies || [])));
|
|
75
64
|
i++;
|
|
76
|
-
|
|
77
|
-
logProgress.update(i);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (log) {
|
|
81
|
-
logProgress.stop();
|
|
82
|
-
i = 0;
|
|
83
|
-
logProgress = new cliProgress.SingleBar({
|
|
84
|
-
clearOnComplete: true,
|
|
85
|
-
hideCursor: true,
|
|
86
|
-
format: 'Building dependency tree [{bar}] {percentage}% ({value}/{total})',
|
|
87
|
-
barGlue: '>'
|
|
88
|
-
}, cliProgress.Presets.legacy);
|
|
89
|
-
trm_commons_1.Logger.forceStop();
|
|
90
|
-
logProgress.start(this.allDependencies.length, 0);
|
|
65
|
+
logProgress.update(i);
|
|
91
66
|
}
|
|
67
|
+
logProgress.stop();
|
|
68
|
+
i = 0;
|
|
69
|
+
logProgress = trm_commons_1.Logger.progressbar('Building dependency tree [{bar}] {percentage}% ({value}/{total})', '>');
|
|
70
|
+
logProgress.start(this.allDependencies.length, 0);
|
|
92
71
|
for (const o of this.allDependencies) {
|
|
93
72
|
for (const trmPackage of o.trmPackages) {
|
|
94
73
|
if (trmPackage.trmPackage.getDevclass() !== this.devclass) {
|
|
@@ -144,13 +123,9 @@ class PackageDependencies {
|
|
|
144
123
|
}
|
|
145
124
|
}
|
|
146
125
|
i++;
|
|
147
|
-
|
|
148
|
-
logProgress.update(i);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
if (log) {
|
|
152
|
-
logProgress.stop();
|
|
126
|
+
logProgress.update(i);
|
|
153
127
|
}
|
|
128
|
+
logProgress.stop();
|
|
154
129
|
return this;
|
|
155
130
|
});
|
|
156
131
|
}
|
|
@@ -28,7 +28,7 @@ class Lockfile {
|
|
|
28
28
|
packages: []
|
|
29
29
|
};
|
|
30
30
|
if (!packages) {
|
|
31
|
-
packages = yield systemConnector_1.SystemConnector.getInstalledPackages(true, true
|
|
31
|
+
packages = yield systemConnector_1.SystemConnector.getInstalledPackages(true, true);
|
|
32
32
|
}
|
|
33
33
|
const rootManifest = root.manifest.get();
|
|
34
34
|
var dependencies = rootManifest.dependencies || [];
|
|
@@ -93,7 +93,7 @@ class Lockfile {
|
|
|
93
93
|
const registry = registry_1.RegistryProvider.getRegistry(lock.registry);
|
|
94
94
|
const ping = yield registry.ping();
|
|
95
95
|
const release = yield registry.getPackage(lock.name, lock.version);
|
|
96
|
-
const artifact = yield registry.downloadArtifact(lock.name, lock.version
|
|
96
|
+
const artifact = yield registry.downloadArtifact(lock.name, lock.version);
|
|
97
97
|
const checksum = (0, crypto_1.createHash)("sha512").update(artifact.binary).digest("base64");
|
|
98
98
|
if (release.checksum !== lock.integrity || checksum !== lock.integrity) {
|
|
99
99
|
trm_commons_1.Logger.error(`SECURITY ISSUE! Release "${lock.name}", registry "${lock.registry}", integrity in lockfile does NOT match!`);
|
|
@@ -11,12 +11,12 @@ export declare abstract class AbstractRegistry {
|
|
|
11
11
|
abstract ping: () => Promise<Ping>;
|
|
12
12
|
abstract whoAmI: () => Promise<WhoAmI>;
|
|
13
13
|
abstract getPackage: (fullName: string, version: string) => Promise<Package>;
|
|
14
|
-
abstract downloadArtifact: (fullName: string, version: string
|
|
14
|
+
abstract downloadArtifact: (fullName: string, version: string) => Promise<TrmArtifact>;
|
|
15
15
|
abstract validatePublish: (fullName: string, version: string, isPrivate: boolean) => Promise<void>;
|
|
16
16
|
abstract publish: (fullName: string, version: string, artifact: TrmArtifact, readme?: string, tags?: string) => Promise<Package>;
|
|
17
17
|
abstract unpublish: (fullName: string, version: string) => Promise<void>;
|
|
18
18
|
abstract deprecate: (fullName: string, version: string, deprecate: Deprecate) => Promise<void>;
|
|
19
19
|
abstract addDistTag: (fullName: string, distTag: DistTagAdd) => Promise<void>;
|
|
20
20
|
abstract rmDistTag: (fullName: string, distTag: DistTagRm) => Promise<void>;
|
|
21
|
-
abstract contents: (fullName: string, version: string
|
|
21
|
+
abstract contents: (fullName: string, version: string) => Promise<any>;
|
|
22
22
|
}
|
|
@@ -24,12 +24,12 @@ export declare class RegistryV2 implements AbstractRegistry {
|
|
|
24
24
|
ping(): Promise<Ping>;
|
|
25
25
|
whoAmI(): Promise<WhoAmI>;
|
|
26
26
|
getPackage(fullName: string, version?: string): Promise<Package>;
|
|
27
|
-
downloadArtifact(fullName: string, version?: string
|
|
27
|
+
downloadArtifact(fullName: string, version?: string): Promise<TrmArtifact>;
|
|
28
28
|
validatePublish(fullName: string, version: string, isPrivate: boolean): Promise<void>;
|
|
29
29
|
publish(fullName: string, version: string, artifact: TrmArtifact, readme?: string, tags?: string): Promise<Package>;
|
|
30
30
|
unpublish(fullName: string, version: string): Promise<void>;
|
|
31
31
|
deprecate(fullName: string, version: string, deprecate: Deprecate): Promise<void>;
|
|
32
32
|
addDistTag(fullName: string, distTag: DistTagAdd): Promise<void>;
|
|
33
33
|
rmDistTag(fullName: string, distTag: DistTagRm): Promise<void>;
|
|
34
|
-
contents(fullName: string, version?: string
|
|
34
|
+
contents(fullName: string, version?: string): Promise<any>;
|
|
35
35
|
}
|
|
@@ -58,7 +58,6 @@ const protocol_1 = require("../protocol");
|
|
|
58
58
|
const opener_1 = __importDefault(require("opener"));
|
|
59
59
|
const commons_1 = require("../commons");
|
|
60
60
|
const node_cache_1 = __importDefault(require("node-cache"));
|
|
61
|
-
const cliProgress = __importStar(require("cli-progress"));
|
|
62
61
|
const AXIOS_CTX = "RegistryV2";
|
|
63
62
|
exports.PUBLIC_RESERVED_KEYWORD = 'public';
|
|
64
63
|
class RegistryV2 {
|
|
@@ -398,20 +397,12 @@ class RegistryV2 {
|
|
|
398
397
|
});
|
|
399
398
|
}
|
|
400
399
|
downloadArtifact(fullName_1) {
|
|
401
|
-
return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest'
|
|
400
|
+
return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest') {
|
|
402
401
|
var _a;
|
|
403
402
|
const packageData = yield this.getPackage(fullName, version);
|
|
404
403
|
const chunks = [];
|
|
405
404
|
let buffer;
|
|
406
|
-
|
|
407
|
-
if (log) {
|
|
408
|
-
logProgress = new cliProgress.SingleBar({
|
|
409
|
-
clearOnComplete: true,
|
|
410
|
-
hideCursor: true,
|
|
411
|
-
format: `${fullName} ${version} [{bar}] {percentage}% | {value}/{total} bytes`,
|
|
412
|
-
barGlue: '>'
|
|
413
|
-
}, cliProgress.Presets.legacy);
|
|
414
|
-
}
|
|
405
|
+
const logProgress = trm_commons_1.Logger.progressbar(`${fullName} ${version} [{bar}] {percentage}% | {value}/{total} bytes`, '>');
|
|
415
406
|
try {
|
|
416
407
|
const response = yield this._axiosInstance.get(packageData.download_link, {
|
|
417
408
|
headers: {
|
|
@@ -423,32 +414,22 @@ class RegistryV2 {
|
|
|
423
414
|
});
|
|
424
415
|
const totalBytes = Number((_a = response.headers['content-length']) !== null && _a !== void 0 ? _a : 0);
|
|
425
416
|
let downloadedBytes = 0;
|
|
426
|
-
if (
|
|
427
|
-
|
|
428
|
-
trm_commons_1.Logger.forceStop();
|
|
429
|
-
logProgress.start(totalBytes, 0);
|
|
430
|
-
}
|
|
431
|
-
else {
|
|
432
|
-
trm_commons_1.Logger.warning('content-length header missing, percentage progress is unavailable');
|
|
433
|
-
}
|
|
417
|
+
if (totalBytes > 0) {
|
|
418
|
+
logProgress.start(totalBytes, 0);
|
|
434
419
|
}
|
|
435
420
|
yield new Promise((resolve, reject) => {
|
|
436
421
|
response.data.on('data', (chunk) => {
|
|
437
422
|
chunks.push(chunk);
|
|
438
423
|
downloadedBytes += chunk.length;
|
|
439
|
-
if (
|
|
440
|
-
|
|
441
|
-
logProgress.update(downloadedBytes);
|
|
442
|
-
}
|
|
424
|
+
if (totalBytes > 0) {
|
|
425
|
+
logProgress.update(downloadedBytes);
|
|
443
426
|
}
|
|
444
427
|
});
|
|
445
428
|
response.data.on('end', () => resolve());
|
|
446
429
|
response.data.on('error', reject);
|
|
447
430
|
});
|
|
448
|
-
if (
|
|
449
|
-
|
|
450
|
-
logProgress.stop();
|
|
451
|
-
}
|
|
431
|
+
if (totalBytes > 0) {
|
|
432
|
+
logProgress.stop();
|
|
452
433
|
}
|
|
453
434
|
buffer = Buffer.concat(chunks);
|
|
454
435
|
}
|
|
@@ -541,18 +522,10 @@ class RegistryV2 {
|
|
|
541
522
|
});
|
|
542
523
|
}
|
|
543
524
|
contents(fullName_1) {
|
|
544
|
-
return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest'
|
|
525
|
+
return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest') {
|
|
545
526
|
var _a;
|
|
546
527
|
const chunks = [];
|
|
547
|
-
|
|
548
|
-
if (log) {
|
|
549
|
-
logProgress = new cliProgress.SingleBar({
|
|
550
|
-
clearOnComplete: true,
|
|
551
|
-
hideCursor: true,
|
|
552
|
-
format: `${fullName} ${version} contents [{bar}] {percentage}% | {value}/{total} bytes`,
|
|
553
|
-
barGlue: '>'
|
|
554
|
-
}, cliProgress.Presets.legacy);
|
|
555
|
-
}
|
|
528
|
+
const logProgress = trm_commons_1.Logger.progressbar(`${fullName} ${version} contents [{bar}] {percentage}% | {value}/{total} bytes`, '>');
|
|
556
529
|
try {
|
|
557
530
|
const response = yield this._axiosInstance.get(`/package/contents/${fullName}`, {
|
|
558
531
|
params: {
|
|
@@ -562,32 +535,22 @@ class RegistryV2 {
|
|
|
562
535
|
});
|
|
563
536
|
const totalBytes = Number((_a = response.headers['content-length']) !== null && _a !== void 0 ? _a : 0);
|
|
564
537
|
let downloadedBytes = 0;
|
|
565
|
-
if (
|
|
566
|
-
|
|
567
|
-
trm_commons_1.Logger.forceStop();
|
|
568
|
-
logProgress.start(totalBytes, 0);
|
|
569
|
-
}
|
|
570
|
-
else {
|
|
571
|
-
trm_commons_1.Logger.warning('content-length header missing, percentage progress is unavailable');
|
|
572
|
-
}
|
|
538
|
+
if (totalBytes > 0) {
|
|
539
|
+
logProgress.start(totalBytes, 0);
|
|
573
540
|
}
|
|
574
541
|
yield new Promise((resolve, reject) => {
|
|
575
542
|
response.data.on('data', (chunk) => {
|
|
576
543
|
chunks.push(chunk);
|
|
577
544
|
downloadedBytes += chunk.length;
|
|
578
|
-
if (
|
|
579
|
-
|
|
580
|
-
logProgress.update(downloadedBytes);
|
|
581
|
-
}
|
|
545
|
+
if (totalBytes > 0) {
|
|
546
|
+
logProgress.update(downloadedBytes);
|
|
582
547
|
}
|
|
583
548
|
});
|
|
584
549
|
response.data.on('end', () => resolve());
|
|
585
550
|
response.data.on('error', reject);
|
|
586
551
|
});
|
|
587
|
-
if (
|
|
588
|
-
|
|
589
|
-
logProgress.stop();
|
|
590
|
-
}
|
|
552
|
+
if (totalBytes > 0) {
|
|
553
|
+
logProgress.stop();
|
|
591
554
|
}
|
|
592
555
|
const buffer = Buffer.concat(chunks);
|
|
593
556
|
return JSON.parse(buffer.toString('utf-8'));
|
|
@@ -598,7 +561,7 @@ class RegistryV2 {
|
|
|
598
561
|
}
|
|
599
562
|
catch (_b) { }
|
|
600
563
|
trm_commons_1.Logger.error(e.toString(), true);
|
|
601
|
-
trm_commons_1.Logger.error(`Failed to fetch contents for ${fullName}: ${e.message}
|
|
564
|
+
trm_commons_1.Logger.error(`Failed to fetch contents for ${fullName}: ${e.message}`, true);
|
|
602
565
|
throw e;
|
|
603
566
|
}
|
|
604
567
|
});
|
|
@@ -9,7 +9,10 @@ export interface ISystemConnectorBase {
|
|
|
9
9
|
getSourceTrkorr: () => Promise<components.TRKORR[]>;
|
|
10
10
|
getIgnoredTrkorr: () => Promise<components.TRKORR[]>;
|
|
11
11
|
getObject: (pgmid: components.PGMID, object: components.TROBJTYPE, objName: components.SOBJ_NAME) => Promise<struct.TADIR>;
|
|
12
|
-
getInstalledPackages: (
|
|
12
|
+
getInstalledPackages: (refresh?: boolean, includeLocals?: boolean, filter?: {
|
|
13
|
+
name: string;
|
|
14
|
+
registry: string;
|
|
15
|
+
}) => Promise<TrmPackage[]>;
|
|
13
16
|
getDevclass: (devclass: components.DEVCLASS) => Promise<struct.TDEVC>;
|
|
14
17
|
getSubpackages: (devclass: components.DEVCLASS) => Promise<struct.TDEVC[]>;
|
|
15
18
|
getDevclassObjects: (devclass: components.DEVCLASS, includeSubpackages: boolean) => Promise<struct.TADIR[]>;
|
|
@@ -31,7 +34,7 @@ export interface ISystemConnectorBase {
|
|
|
31
34
|
getTrmServerPackage: () => Promise<TrmPackage>;
|
|
32
35
|
getTrmRestPackage: () => Promise<TrmPackage>;
|
|
33
36
|
readClassDescriptions: (clsname: components.SEOCLSNAME) => Promise<struct.SEOCLASSTX[]>;
|
|
34
|
-
getPackageDependencies: (devclass: components.DEVCLASS, includeSubPackages: boolean
|
|
37
|
+
getPackageDependencies: (devclass: components.DEVCLASS, includeSubPackages: boolean) => Promise<PackageDependencies>;
|
|
35
38
|
getObjectDependencies: (object: components.TROBJTYPE, objName: components.SOBJ_NAME) => Promise<ObjectDependencies>;
|
|
36
39
|
getTableKeys: (tabname: components.TABNAME) => Promise<struct.DD03L[]>;
|
|
37
40
|
getRootDevclass: (devclass: components.DEVCLASS) => Promise<components.DEVCLASS>;
|
|
@@ -31,7 +31,10 @@ export declare class RESTSystemConnector extends SystemConnectorBase implements
|
|
|
31
31
|
protected listDevclassObjects(devclass: DEVCLASS): Promise<TADIR[]>;
|
|
32
32
|
protected tdevcInterface(devclass: components.DEVCLASS, parentcl?: components.DEVCLASS, rmParentCl?: boolean, devlayer?: components.DEVLAYER): Promise<void>;
|
|
33
33
|
protected getR3transInfo(): Promise<string>;
|
|
34
|
-
protected getInstalledPackagesBackend(
|
|
34
|
+
protected getInstalledPackagesBackend(filter?: {
|
|
35
|
+
name: string;
|
|
36
|
+
registry: string;
|
|
37
|
+
}): Promise<struct.ZTRM_PACKAGE[]>;
|
|
35
38
|
protected getPackageDependenciesInternal(devclass: DEVCLASS, includeSubPackages: boolean, logId?: components.ZTRM_POLLING_ID): Promise<struct.ZTRM_OBJECT_DEPENDENCIES[]>;
|
|
36
39
|
protected getObjectDependenciesInternal(object: components.TROBJTYPE, objName: components.SOBJ_NAME): Promise<struct.ZTRM_OBJECT_DEPENDENCY[]>;
|
|
37
40
|
getConnectionData(): RESTConnection;
|
|
@@ -103,8 +103,8 @@ class RESTSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
|
|
|
103
103
|
return this._client.getR3transInfo();
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
|
-
getInstalledPackagesBackend() {
|
|
107
|
-
return this._client.getInstalledPackagesBackend();
|
|
106
|
+
getInstalledPackagesBackend(filter) {
|
|
107
|
+
return this._client.getInstalledPackagesBackend(filter);
|
|
108
108
|
}
|
|
109
109
|
getPackageDependenciesInternal(devclass, includeSubPackages, logId) {
|
|
110
110
|
return this._client.getPackageDependencies(devclass, includeSubPackages, logId);
|
|
@@ -31,7 +31,10 @@ export declare class RFCSystemConnector extends SystemConnectorBase implements I
|
|
|
31
31
|
protected listDevclassObjects(devclass: DEVCLASS): Promise<TADIR[]>;
|
|
32
32
|
protected tdevcInterface(devclass: components.DEVCLASS, parentcl?: components.DEVCLASS, rmParentCl?: boolean, devlayer?: components.DEVLAYER): Promise<void>;
|
|
33
33
|
protected getR3transInfo(): Promise<string>;
|
|
34
|
-
protected getInstalledPackagesBackend(
|
|
34
|
+
protected getInstalledPackagesBackend(filter?: {
|
|
35
|
+
name: string;
|
|
36
|
+
registry: string;
|
|
37
|
+
}): Promise<struct.ZTRM_PACKAGE[]>;
|
|
35
38
|
protected getPackageDependenciesInternal(devclass: DEVCLASS, includeSubPackages: boolean, logId?: components.ZTRM_POLLING_ID): Promise<struct.ZTRM_OBJECT_DEPENDENCIES[]>;
|
|
36
39
|
protected getObjectDependenciesInternal(object: components.TROBJTYPE, objName: components.SOBJ_NAME): Promise<struct.ZTRM_OBJECT_DEPENDENCY[]>;
|
|
37
40
|
getConnectionData(): RFCConnection;
|
|
@@ -83,8 +83,8 @@ class RFCSystemConnector extends SystemConnectorBase_1.SystemConnectorBase {
|
|
|
83
83
|
return this._client.getR3transInfo();
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
|
-
getInstalledPackagesBackend() {
|
|
87
|
-
return this._client.getInstalledPackagesBackend();
|
|
86
|
+
getInstalledPackagesBackend(filter) {
|
|
87
|
+
return this._client.getInstalledPackagesBackend(filter);
|
|
88
88
|
}
|
|
89
89
|
getPackageDependenciesInternal(devclass, includeSubPackages, logId) {
|
|
90
90
|
return this._client.getPackageDependencies(devclass, includeSubPackages, logId);
|
|
@@ -21,7 +21,10 @@ export declare namespace SystemConnector {
|
|
|
21
21
|
function closeConnection(): Promise<void>;
|
|
22
22
|
function checkConnection(): Promise<boolean>;
|
|
23
23
|
function getTransportStatus(trkorr: TRKORR): Promise<string>;
|
|
24
|
-
function getInstalledPackages(
|
|
24
|
+
function getInstalledPackages(refresh?: boolean, includeLocals?: boolean, filter?: {
|
|
25
|
+
name: string;
|
|
26
|
+
registry: string;
|
|
27
|
+
}): Promise<TrmPackage[]>;
|
|
25
28
|
function getDevclass(devclass: DEVCLASS): Promise<TDEVC>;
|
|
26
29
|
function getTransportTargets(): Promise<components.TARSYSTEM[]>;
|
|
27
30
|
function getSubpackages(devclass: DEVCLASS): Promise<TDEVC[]>;
|
|
@@ -91,7 +94,7 @@ export declare namespace SystemConnector {
|
|
|
91
94
|
function readClassDescriptions(clsname: components.SEOCLSNAME): Promise<struct.SEOCLASSTX[]>;
|
|
92
95
|
function isServerApisAllowed(): Promise<true | ClientError>;
|
|
93
96
|
function changeTrOwner(trkorr: components.TRKORR, owner: components.TR_AS4USER): Promise<void>;
|
|
94
|
-
function getPackageDependencies(devclass: components.DEVCLASS, includeSubPackages: boolean
|
|
97
|
+
function getPackageDependencies(devclass: components.DEVCLASS, includeSubPackages: boolean): Promise<PackageDependencies>;
|
|
95
98
|
function getObjectDependencies(object: TROBJTYPE, objName: SOBJ_NAME): Promise<ObjectDependencies>;
|
|
96
99
|
function getTableKeys(tabname: components.TABNAME): Promise<struct.DD03L[]>;
|
|
97
100
|
function getRootDevclass(devclass: DEVCLASS): Promise<DEVCLASS>;
|
|
@@ -89,10 +89,10 @@ var SystemConnector;
|
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
SystemConnector.getTransportStatus = getTransportStatus;
|
|
92
|
-
function getInstalledPackages(
|
|
92
|
+
function getInstalledPackages(refresh, includeLocals, filter) {
|
|
93
93
|
return __awaiter(this, void 0, void 0, function* () {
|
|
94
94
|
yield checkSystemConnector();
|
|
95
|
-
return SystemConnector.systemConnector.getInstalledPackages(
|
|
95
|
+
return SystemConnector.systemConnector.getInstalledPackages(refresh, includeLocals, filter);
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
98
|
SystemConnector.getInstalledPackages = getInstalledPackages;
|
|
@@ -516,10 +516,10 @@ var SystemConnector;
|
|
|
516
516
|
});
|
|
517
517
|
}
|
|
518
518
|
SystemConnector.changeTrOwner = changeTrOwner;
|
|
519
|
-
function getPackageDependencies(devclass, includeSubPackages
|
|
519
|
+
function getPackageDependencies(devclass, includeSubPackages) {
|
|
520
520
|
return __awaiter(this, void 0, void 0, function* () {
|
|
521
521
|
yield checkSystemConnector();
|
|
522
|
-
return SystemConnector.systemConnector.getPackageDependencies(devclass, includeSubPackages
|
|
522
|
+
return SystemConnector.systemConnector.getPackageDependencies(devclass, includeSubPackages);
|
|
523
523
|
});
|
|
524
524
|
}
|
|
525
525
|
SystemConnector.getPackageDependencies = getPackageDependencies;
|
|
@@ -29,7 +29,10 @@ export declare abstract class SystemConnectorBase implements ISystemConnectorBas
|
|
|
29
29
|
protected abstract listDevclassObjects(devclass: components.DEVCLASS): Promise<struct.TADIR[]>;
|
|
30
30
|
protected abstract tdevcInterface(devclass: components.DEVCLASS, parentcl?: components.DEVCLASS, rmParentCl?: boolean, devlayer?: components.DEVLAYER): Promise<void>;
|
|
31
31
|
protected abstract getR3transInfo(): Promise<string>;
|
|
32
|
-
protected abstract getInstalledPackagesBackend(
|
|
32
|
+
protected abstract getInstalledPackagesBackend(filter?: {
|
|
33
|
+
name: string;
|
|
34
|
+
registry: string;
|
|
35
|
+
}): Promise<struct.ZTRM_PACKAGE[]>;
|
|
33
36
|
protected abstract getPackageDependenciesInternal(devclass: components.DEVCLASS, includeSubPackages: boolean, logId?: components.ZTRM_POLLING_ID): Promise<struct.ZTRM_OBJECT_DEPENDENCIES[]>;
|
|
34
37
|
protected abstract getObjectDependenciesInternal(object: components.TROBJTYPE, objName: components.SOBJ_NAME): Promise<struct.ZTRM_OBJECT_DEPENDENCY[]>;
|
|
35
38
|
constructor();
|
|
@@ -39,7 +42,10 @@ export declare abstract class SystemConnectorBase implements ISystemConnectorBas
|
|
|
39
42
|
getIgnoredTrkorr(refresh?: boolean): Promise<components.TRKORR[]>;
|
|
40
43
|
getTrmServerPackage(): Promise<TrmPackage>;
|
|
41
44
|
getTrmRestPackage(): Promise<TrmPackage>;
|
|
42
|
-
getInstalledPackages(refresh?: boolean, includeLocals?: boolean
|
|
45
|
+
getInstalledPackages(refresh?: boolean, includeLocals?: boolean, filter?: {
|
|
46
|
+
name: string;
|
|
47
|
+
registry: string;
|
|
48
|
+
}): Promise<TrmPackage[]>;
|
|
43
49
|
getDevclass(devclass: components.DEVCLASS): Promise<TDEVC>;
|
|
44
50
|
getSubpackages(devclass: components.DEVCLASS): Promise<TDEVC[]>;
|
|
45
51
|
getDevclassObjects(devclass: components.DEVCLASS, includeSubpackages?: boolean): Promise<TADIR[]>;
|
|
@@ -59,7 +65,7 @@ export declare abstract class SystemConnectorBase implements ISystemConnectorBas
|
|
|
59
65
|
getR3transUnicode(): Promise<boolean>;
|
|
60
66
|
isTransportLayerExist(devlayer: components.DEVLAYER): Promise<boolean>;
|
|
61
67
|
readClassDescriptions(clsname: components.SEOCLSNAME): Promise<struct.SEOCLASSTX[]>;
|
|
62
|
-
getPackageDependencies(devclass: components.DEVCLASS, includeSubPackages: boolean
|
|
68
|
+
getPackageDependencies(devclass: components.DEVCLASS, includeSubPackages: boolean): Promise<PackageDependencies>;
|
|
63
69
|
getObjectDependencies(object: components.TROBJTYPE, objName: components.SOBJ_NAME): Promise<ObjectDependencies>;
|
|
64
70
|
getTableKeys(tabname: components.TABNAME): Promise<struct.DD03L[]>;
|
|
65
71
|
getRootDevclass(devclass: components.DEVCLASS): Promise<components.DEVCLASS>;
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -52,7 +19,6 @@ const registry_1 = require("../registry");
|
|
|
52
19
|
const node_r3trans_1 = require("node-r3trans");
|
|
53
20
|
const dependencies_1 = require("../dependencies");
|
|
54
21
|
const SystemConnector_1 = require("./SystemConnector");
|
|
55
|
-
const cliProgress = __importStar(require("cli-progress"));
|
|
56
22
|
exports.TRM_SERVER_PACKAGE_NAME = 'trm-server';
|
|
57
23
|
exports.TRM_SERVER_INTF = '/ATRM/IF_SERVER';
|
|
58
24
|
exports.TRM_REST_INTF = '/ATRM/IF_REST';
|
|
@@ -168,7 +134,7 @@ class SystemConnectorBase {
|
|
|
168
134
|
return oPackage;
|
|
169
135
|
});
|
|
170
136
|
}
|
|
171
|
-
getInstalledPackages(refresh, includeLocals) {
|
|
137
|
+
getInstalledPackages(refresh, includeLocals, filter) {
|
|
172
138
|
return __awaiter(this, void 0, void 0, function* () {
|
|
173
139
|
var trmPackages = [];
|
|
174
140
|
var fromBackend = false;
|
|
@@ -180,7 +146,7 @@ class SystemConnectorBase {
|
|
|
180
146
|
if (serverExists.length === 1) {
|
|
181
147
|
trm_commons_1.Logger.log(`INTF ${exports.TRM_SERVER_INTF} exists, reading packages from backend API`, true);
|
|
182
148
|
try {
|
|
183
|
-
var installedPackagesBackend = yield this.getInstalledPackagesBackend();
|
|
149
|
+
var installedPackagesBackend = yield this.getInstalledPackagesBackend(filter);
|
|
184
150
|
installedPackagesBackend = installedPackagesBackend.sort((a, b) => Number(`${b.as4Date}${b.as4Time}`) - Number(`${a.as4Date}${a.as4Time}`));
|
|
185
151
|
if (!includeLocals) {
|
|
186
152
|
installedPackagesBackend = installedPackagesBackend.filter(o => o.packageRegistry !== registry_1.LOCAL_RESERVED_KEYWORD);
|
|
@@ -419,23 +385,15 @@ class SystemConnectorBase {
|
|
|
419
385
|
return yield this.readTable('SEOCLASSTX', [{ fieldName: 'CLSNAME' }, { fieldName: 'LANGU' }, { fieldName: 'DESCRIPT' }], `CLSNAME EQ '${clsname.trim().toUpperCase()}'`);
|
|
420
386
|
});
|
|
421
387
|
}
|
|
422
|
-
getPackageDependencies(devclass, includeSubPackages
|
|
388
|
+
getPackageDependencies(devclass, includeSubPackages) {
|
|
423
389
|
return __awaiter(this, void 0, void 0, function* () {
|
|
424
390
|
var packageDependencies;
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
barGlue: '>'
|
|
432
|
-
}, cliProgress.Presets.legacy);
|
|
433
|
-
logProgress.start(100, 0);
|
|
434
|
-
const isStateless = SystemConnector_1.SystemConnector.isStateless();
|
|
435
|
-
const newConnection = isStateless ? SystemConnector_1.SystemConnector.systemConnector : SystemConnector_1.SystemConnector.getNewConnection();
|
|
436
|
-
if (!isStateless) {
|
|
437
|
-
yield newConnection.connect(true);
|
|
438
|
-
}
|
|
391
|
+
const logProgress = trm_commons_1.Logger.progressbar('Finding dependencies [{bar}] {percentage}%', '>');
|
|
392
|
+
logProgress.start(100, 0);
|
|
393
|
+
const isStateless = SystemConnector_1.SystemConnector.isStateless();
|
|
394
|
+
const newConnection = isStateless ? SystemConnector_1.SystemConnector.systemConnector : SystemConnector_1.SystemConnector.getNewConnection();
|
|
395
|
+
if (!isStateless) {
|
|
396
|
+
yield newConnection.connect(true);
|
|
439
397
|
const logId = yield newConnection.createLogPolling('DEVCLASS_D');
|
|
440
398
|
const job = this.getPackageDependenciesInternal(devclass, includeSubPackages, logId);
|
|
441
399
|
var stopped = false;
|
|
@@ -475,7 +433,7 @@ class SystemConnectorBase {
|
|
|
475
433
|
}
|
|
476
434
|
catch (_b) { }
|
|
477
435
|
logProgress.stop();
|
|
478
|
-
return (yield new dependencies_1.PackageDependencies(devclass).setDependencies(packageDependencies || []
|
|
436
|
+
return (yield new dependencies_1.PackageDependencies(devclass).setDependencies(packageDependencies || []));
|
|
479
437
|
}
|
|
480
438
|
else {
|
|
481
439
|
packageDependencies = yield this.getPackageDependenciesInternal(devclass, includeSubPackages);
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { BinaryTransport } from "./BinaryTransport";
|
|
2
2
|
import { FileNames } from "./FileNames";
|
|
3
3
|
import { FilePaths } from "./FilePaths";
|
|
4
|
-
import { R3transOptions } from "node-r3trans";
|
|
5
|
-
import { TransportContent } from "./TransportContent";
|
|
6
4
|
import { Documentation } from "./Documentation";
|
|
7
5
|
import { TrmTransportIdentifier } from "./TrmTransportIdentifier";
|
|
8
6
|
import { TrmPackage } from "../trmPackage";
|
|
@@ -76,11 +74,9 @@ export declare class Transport {
|
|
|
76
74
|
text: AS4TEXT;
|
|
77
75
|
target?: TR_TARGET;
|
|
78
76
|
}): Promise<Transport>;
|
|
79
|
-
static
|
|
80
|
-
static upload(data: {
|
|
77
|
+
static upload(trkorr: any, data: {
|
|
81
78
|
binary: BinaryTransport;
|
|
82
79
|
trTarget?: TR_TARGET;
|
|
83
|
-
r3transOption?: R3transOptions;
|
|
84
80
|
}): Promise<Transport>;
|
|
85
81
|
static getTransportsFromObject(objectKeys: {
|
|
86
82
|
pgmid: PGMID;
|
|
@@ -53,7 +53,6 @@ const manifest_1 = require("../manifest");
|
|
|
53
53
|
const promises_1 = require("timers/promises");
|
|
54
54
|
const fs = __importStar(require("fs"));
|
|
55
55
|
const path_1 = __importDefault(require("path"));
|
|
56
|
-
const cliProgress = __importStar(require("cli-progress"));
|
|
57
56
|
const trm_commons_1 = require("trm-commons");
|
|
58
57
|
const systemConnector_1 = require("../systemConnector");
|
|
59
58
|
const chalk_1 = __importDefault(require("chalk"));
|
|
@@ -427,13 +426,7 @@ class Transport {
|
|
|
427
426
|
const systemR3transUnicode = yield systemConnector_1.SystemConnector.getR3transUnicode();
|
|
428
427
|
trm_commons_1.Logger.log(`System R3trans: ${systemR3transVersion}`, true);
|
|
429
428
|
trm_commons_1.Logger.log(`System R3trans unicode: ${systemR3transUnicode}`, true);
|
|
430
|
-
trm_commons_1.Logger.
|
|
431
|
-
const multibar = new cliProgress.MultiBar({
|
|
432
|
-
clearOnComplete: true,
|
|
433
|
-
hideCursor: true,
|
|
434
|
-
format: '{stage} [{bar}] {exitCode} {result}',
|
|
435
|
-
barGlue: Transport.getTransportIcon()
|
|
436
|
-
}, cliProgress.Presets.legacy);
|
|
429
|
+
const multibar = trm_commons_1.Logger.multibar('{stage} [{bar}] {exitCode} {result}', Transport.getTransportIcon());
|
|
437
430
|
var iEtp182 = 0;
|
|
438
431
|
var iEtp183 = 0;
|
|
439
432
|
var iEtp150 = 0;
|
|
@@ -732,27 +725,9 @@ class Transport {
|
|
|
732
725
|
return new Transport(trkorr, null);
|
|
733
726
|
});
|
|
734
727
|
}
|
|
735
|
-
static
|
|
736
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
737
|
-
const r3trans = new node_r3trans_1.R3trans(r3transOption);
|
|
738
|
-
const trkorr = yield r3trans.getTransportTrkorr(data);
|
|
739
|
-
var transportContent = {
|
|
740
|
-
trkorr,
|
|
741
|
-
tdevc: [],
|
|
742
|
-
tdevct: [],
|
|
743
|
-
tadir: []
|
|
744
|
-
};
|
|
745
|
-
transportContent.tdevc = yield r3trans.getTableEntries(data, 'TDEVC');
|
|
746
|
-
transportContent.tdevct = yield r3trans.getTableEntries(data, 'TDEVCT');
|
|
747
|
-
transportContent.tadir = yield r3trans.getTableEntries(data, 'TADIR');
|
|
748
|
-
return transportContent;
|
|
749
|
-
});
|
|
750
|
-
}
|
|
751
|
-
static upload(data) {
|
|
728
|
+
static upload(trkorr, data) {
|
|
752
729
|
return __awaiter(this, void 0, void 0, function* () {
|
|
753
730
|
trm_commons_1.Logger.loading(`Reading binary content...`, true);
|
|
754
|
-
const fileContent = yield Transport.getContent(data.binary.data, data.r3transOption);
|
|
755
|
-
const trkorr = fileContent.trkorr;
|
|
756
731
|
trm_commons_1.Logger.success(`Transport ${trkorr} read success.`, true);
|
|
757
732
|
const fileNames = Transport._getFileNames(trkorr, systemConnector_1.SystemConnector.getDest());
|
|
758
733
|
const filePaths = yield Transport._getFilePaths(fileNames);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trm-core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.0",
|
|
4
4
|
"description": "TRM (Transport Request Manager) Core",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"trmDependencies": {
|
|
37
|
-
"trm-server": "^6.
|
|
37
|
+
"trm-server": "^6.1.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@esm2cjs/normalize-url": "^8.0.0",
|
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"adm-zip": "^0.5.10",
|
|
45
45
|
"axios": "^1.7.9",
|
|
46
46
|
"chalk": "^4.1.2",
|
|
47
|
-
"cli-progress": "^3.12.0",
|
|
48
47
|
"dotenv": "^17.2.2",
|
|
49
48
|
"email-validator": "^2.0.4",
|
|
50
49
|
"express": "^4.18.2",
|
|
@@ -55,7 +54,7 @@
|
|
|
55
54
|
"minimatch": "^10.0.1",
|
|
56
55
|
"node-cache": "^5.1.2",
|
|
57
56
|
"node-html-parser": "^7.0.1",
|
|
58
|
-
"node-r3trans": "^2.0.
|
|
57
|
+
"node-r3trans": "^2.0.2",
|
|
59
58
|
"object-keys-normalizer": "^1.0.1",
|
|
60
59
|
"opener": "^1.5.2",
|
|
61
60
|
"parse-multipart-data": "^1.5.0",
|
|
@@ -64,16 +63,15 @@
|
|
|
64
63
|
"semver-sort": "^1.0.0",
|
|
65
64
|
"spdx-license-ids": "^3.0.13",
|
|
66
65
|
"trm-registry-types": "^2.1.0",
|
|
67
|
-
"uuid": "^
|
|
66
|
+
"uuid": "^14.0.0",
|
|
68
67
|
"xml-beautify": "^1.2.3",
|
|
69
68
|
"xml-js": "^1.6.11"
|
|
70
69
|
},
|
|
71
70
|
"peerDependencies": {
|
|
72
|
-
"trm-commons": "^
|
|
71
|
+
"trm-commons": "^4.0.0"
|
|
73
72
|
},
|
|
74
73
|
"devDependencies": {
|
|
75
74
|
"@types/adm-zip": "^0.5.0",
|
|
76
|
-
"@types/cli-progress": "^3.11.3",
|
|
77
75
|
"@types/debug": "^4.1.12",
|
|
78
76
|
"@types/express": "^4.17.17",
|
|
79
77
|
"@types/inquirer": "^9.0.3",
|
|
@@ -86,7 +84,7 @@
|
|
|
86
84
|
"@types/stack-trace": "^0.0.33",
|
|
87
85
|
"@types/uuid": "^9.0.8",
|
|
88
86
|
"rimraf": "^6.0.1",
|
|
89
|
-
"trm-commons": "^
|
|
87
|
+
"trm-commons": "^4.0.0",
|
|
90
88
|
"ts-node": "^10.9.2",
|
|
91
89
|
"typescript": "^5.8.2"
|
|
92
90
|
},
|