trm-client 7.3.5 → 7.4.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 +12 -0
- package/dist/command/AbstractCommand.js +2 -2
- package/dist/command/implementations/Info.d.ts +1 -1
- package/dist/command/implementations/Info.js +68 -68
- package/dist/command/implementations/Install.js +1 -3
- package/dist/command/implementations/Publish.js +0 -2
- package/dist/command/prompts/connect.js +6 -6
- package/dist/registryAlias/RegistryAlias.js +1 -1
- package/dist/utils/CacheData.d.ts +1 -0
- package/dist/utils/DummyConnector.d.ts +3 -1
- package/dist/utils/DummyConnector.js +7 -1
- package/dist/utils/GlobalContext.d.ts +3 -2
- package/dist/utils/GlobalContext.js +65 -25
- package/dist/utils/SettingsData.d.ts +2 -1
- package/dist/utils/checkCliUpdate.js +2 -11
- package/dist/utils/getClientNodeDependencies.js +2 -1
- package/dist/utils/getClientVersion.js +2 -1
- package/dist/utils/getCoreVersion.d.ts +1 -0
- package/dist/utils/getCoreVersion.js +9 -0
- package/dist/utils/getNodeRfcPackage.d.ts +1 -0
- package/dist/utils/getNodeRfcPackage.js +12 -0
- package/dist/utils/getNpmPackageLatestVersion.d.ts +4 -1
- package/dist/utils/getNpmPackageLatestVersion.js +12 -2
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/package.json +5 -5
package/changelog.txt
CHANGED
|
@@ -8,6 +8,18 @@ Legend
|
|
|
8
8
|
+ : added
|
|
9
9
|
- : removed
|
|
10
10
|
|
|
11
|
+
2026-03-03 v7.4.1
|
|
12
|
+
-------------------
|
|
13
|
+
! trm-core ^8.4.1
|
|
14
|
+
* fix version not satisfied in info command
|
|
15
|
+
|
|
16
|
+
2026-03-03 v7.4.0
|
|
17
|
+
-------------------
|
|
18
|
+
! trm-core ^8.4.0
|
|
19
|
+
! removed npm global path from settings
|
|
20
|
+
! update cache usage
|
|
21
|
+
! info command with latest in range
|
|
22
|
+
|
|
11
23
|
2026-02-23 v7.3.5
|
|
12
24
|
-------------------
|
|
13
25
|
* info command
|
|
@@ -162,7 +162,7 @@ class AbstractCommand {
|
|
|
162
162
|
return __awaiter(this, void 0, void 0, function* () {
|
|
163
163
|
if (!this.trmDependenciesCheck) {
|
|
164
164
|
const packages = yield this.getSystemPackages();
|
|
165
|
-
this.trmDependenciesCheck = yield Core.checkCoreTrmDependencies(packages);
|
|
165
|
+
this.trmDependenciesCheck = yield Core.checkCoreTrmDependencies(packages, utils_1.GlobalContext.getInstance().getGlobalNodeModules());
|
|
166
166
|
}
|
|
167
167
|
return this.trmDependenciesCheck;
|
|
168
168
|
});
|
|
@@ -252,7 +252,7 @@ class AbstractCommand {
|
|
|
252
252
|
checkTrmDependencies() {
|
|
253
253
|
return __awaiter(this, void 0, void 0, function* () {
|
|
254
254
|
const trmDependenciesCheck = yield this.getTrmDependenciesCheck();
|
|
255
|
-
const trmDependencies = Core.getCoreTrmDependencies();
|
|
255
|
+
const trmDependencies = Core.getCoreTrmDependencies(utils_1.GlobalContext.getInstance().getGlobalNodeModules());
|
|
256
256
|
trmDependenciesCheck.missingDependencies.forEach(missingDependency => {
|
|
257
257
|
if (this.onTrmDepMissing(missingDependency)) {
|
|
258
258
|
throw new Error(`Package "${missingDependency}" is not installed on ${Core.SystemConnector.getDest()}.`);
|
|
@@ -4,7 +4,7 @@ export declare class Info extends AbstractCommand {
|
|
|
4
4
|
protected init(): void;
|
|
5
5
|
protected onTrmDepMissing(dependency: string): boolean;
|
|
6
6
|
protected onTrmDepVersionNotSatisfied(trmPackage: TrmPackage): boolean;
|
|
7
|
-
private getNodeRfcVersion;
|
|
8
7
|
private getNpmLatestForText;
|
|
8
|
+
private flat;
|
|
9
9
|
protected handler(): Promise<void>;
|
|
10
10
|
}
|
|
@@ -34,29 +34,21 @@ class Info extends AbstractCommand_1.AbstractCommand {
|
|
|
34
34
|
onTrmDepVersionNotSatisfied(trmPackage) {
|
|
35
35
|
return false;
|
|
36
36
|
}
|
|
37
|
-
|
|
38
|
-
var file;
|
|
39
|
-
try {
|
|
40
|
-
file = (0, fs_1.readFileSync)((0, path_1.join)(npmGlobal, `/node-rfc/package.json`));
|
|
41
|
-
}
|
|
42
|
-
catch (e) {
|
|
43
|
-
}
|
|
44
|
-
if (!file) {
|
|
45
|
-
trm_commons_1.Logger.warning(`Library node-rfc was not found!`, true);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return JSON.parse(file.toString()).version;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
getNpmLatestForText(packageName, installedVersion, text) {
|
|
37
|
+
getNpmLatestForText(packageName, installedVersion, range) {
|
|
52
38
|
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
var text = ``;
|
|
53
40
|
try {
|
|
54
|
-
const latestVersion = yield (0, utils_1.getNpmPackageLatestVersion)(packageName);
|
|
55
|
-
if ((0, semver_1.gte)(installedVersion, latestVersion)) {
|
|
56
|
-
|
|
41
|
+
const latestVersion = yield (0, utils_1.getNpmPackageLatestVersion)(packageName, range);
|
|
42
|
+
if ((0, semver_1.gte)(installedVersion, latestVersion.latest)) {
|
|
43
|
+
if (!(0, semver_1.eq)(latestVersion.latest, latestVersion.actualLatest)) {
|
|
44
|
+
text += ` ${chalk_1.default.bgGreen('LATEST COMPATIBLE')}`;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
text += ` ${chalk_1.default.bgGreen('LATEST')}`;
|
|
48
|
+
}
|
|
57
49
|
}
|
|
58
50
|
else {
|
|
59
|
-
text += ` ${chalk_1.default.bold('v' + latestVersion + ' available')}`;
|
|
51
|
+
text += ` ${chalk_1.default.bold('v' + latestVersion.latest + ' available')}`;
|
|
60
52
|
}
|
|
61
53
|
}
|
|
62
54
|
catch (e) {
|
|
@@ -65,41 +57,61 @@ class Info extends AbstractCommand_1.AbstractCommand {
|
|
|
65
57
|
return text;
|
|
66
58
|
});
|
|
67
59
|
}
|
|
60
|
+
flat(deps, globalNodeModulesPath) {
|
|
61
|
+
var _a;
|
|
62
|
+
const isWanted = (k) => k.startsWith("trm-") || k === "node-r3trans";
|
|
63
|
+
const out = {};
|
|
64
|
+
const seen = new Set();
|
|
65
|
+
const q = Object.entries(deps).filter(([k]) => isWanted(k));
|
|
66
|
+
while (q.length) {
|
|
67
|
+
const [k, v] = q.pop();
|
|
68
|
+
if (seen.has(k))
|
|
69
|
+
continue;
|
|
70
|
+
seen.add(k);
|
|
71
|
+
const pkg = (0, trm_core_1.getNodePackage)(globalNodeModulesPath, k);
|
|
72
|
+
const installedVersion = pkg === null || pkg === void 0 ? void 0 : pkg.version;
|
|
73
|
+
if (!out[k]) {
|
|
74
|
+
out[k] = {
|
|
75
|
+
range: v,
|
|
76
|
+
installedVersion
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const d = (_a = pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) !== null && _a !== void 0 ? _a : {};
|
|
80
|
+
for (const [kk, vv] of Object.entries(d)) {
|
|
81
|
+
if (isWanted(kk) && !seen.has(kk)) {
|
|
82
|
+
q.push([kk, vv]);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
68
88
|
handler() {
|
|
69
89
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
var _a, _b;
|
|
71
90
|
trm_commons_1.Logger.loading(`Reading data...`);
|
|
72
|
-
const
|
|
91
|
+
const globalNodeModulesPath = utils_1.GlobalContext.getInstance().getGlobalNodeModules();
|
|
73
92
|
const clientLatest = yield this.getCliVersionStatus();
|
|
74
93
|
const clientVersion = (0, utils_1.getClientVersion)();
|
|
75
|
-
const
|
|
76
|
-
const trmDependencies = (0, trm_core_1.getCoreTrmDependencies)();
|
|
94
|
+
const dependencies = this.flat((0, utils_1.getClientNodeDependencies)(), globalNodeModulesPath);
|
|
95
|
+
const trmDependencies = (0, trm_core_1.getCoreTrmDependencies)(globalNodeModulesPath);
|
|
77
96
|
const trmDependenciesInstances = (yield this.getTrmDependenciesCheck()).dependencies;
|
|
78
97
|
const trmMissingDependencies = (yield this.getTrmDependenciesCheck()).missingDependencies;
|
|
79
|
-
const
|
|
98
|
+
const trmNotSatisfiedDependencies = (yield this.getTrmDependenciesCheck()).versionNotSatisfiedDependencies;
|
|
99
|
+
const nodeRfcPackage = (0, utils_1.getNodeRfcPackage)();
|
|
80
100
|
const packages = yield this.getSystemPackages();
|
|
81
101
|
const trmRest = packages.find(o => o.compareName("trm-rest") && o.compareRegistry(trm_core_1.RegistryProvider.getRegistry()));
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
dText = ` -> ${dInstalledVersion}`;
|
|
90
|
-
dText = yield this.getNpmLatestForText(d, dInstalledVersion, dText);
|
|
91
|
-
}
|
|
92
|
-
clientDependenciesTree.push({
|
|
93
|
-
text: `${d} ${clientDependencies[d]}${dText}`,
|
|
94
|
-
children: []
|
|
95
|
-
});
|
|
96
|
-
}
|
|
102
|
+
var dependenciesTree = [];
|
|
103
|
+
for (const d of Object.keys(dependencies)) {
|
|
104
|
+
const dText = ` -> ${dependencies[d].installedVersion} ${yield this.getNpmLatestForText(d, dependencies[d].installedVersion, dependencies[d].range)}`;
|
|
105
|
+
dependenciesTree.push({
|
|
106
|
+
text: `${d} ${dependencies[d].range}${dText}`,
|
|
107
|
+
children: []
|
|
108
|
+
});
|
|
97
109
|
}
|
|
98
110
|
var serverDependenciesTree = [];
|
|
99
111
|
if (trmDependencies) {
|
|
100
112
|
for (const d of Object.keys(trmDependencies)) {
|
|
101
113
|
var dText = ``;
|
|
102
|
-
const oTrmPackage = trmDependenciesInstances.find(o => o.compareName(d));
|
|
114
|
+
const oTrmPackage = trmDependenciesInstances.concat(trmNotSatisfiedDependencies).find(o => o.compareName(d));
|
|
103
115
|
if (oTrmPackage) {
|
|
104
116
|
var dInstalledVersion;
|
|
105
117
|
try {
|
|
@@ -111,12 +123,18 @@ class Info extends AbstractCommand_1.AbstractCommand {
|
|
|
111
123
|
if (dInstalledVersion) {
|
|
112
124
|
dText = ` -> ${dInstalledVersion}`;
|
|
113
125
|
try {
|
|
114
|
-
const dLatestVersion =
|
|
115
|
-
|
|
116
|
-
|
|
126
|
+
const dLatestVersion = yield oTrmPackage.registry.getPackage(oTrmPackage.packageName, 'latest');
|
|
127
|
+
const dMax = (0, semver_1.maxSatisfying)(dLatestVersion.versions, trmDependencies[d]);
|
|
128
|
+
if ((0, semver_1.gte)(dInstalledVersion, dMax)) {
|
|
129
|
+
if (!(0, semver_1.eq)(dLatestVersion.dist_tags.latest, dMax)) {
|
|
130
|
+
dText += ` ${chalk_1.default.bgGreen('LATEST COMPATIBLE')}`;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
dText += ` ${chalk_1.default.bgGreen('LATEST')}`;
|
|
134
|
+
}
|
|
117
135
|
}
|
|
118
136
|
else {
|
|
119
|
-
dText += ` ${chalk_1.default.bold('v' + dLatestVersion + ' available')}`;
|
|
137
|
+
dText += ` ${chalk_1.default.bold('v' + dLatestVersion.dist_tags.latest + ' available')}`;
|
|
120
138
|
}
|
|
121
139
|
}
|
|
122
140
|
catch (e) {
|
|
@@ -125,13 +143,7 @@ class Info extends AbstractCommand_1.AbstractCommand {
|
|
|
125
143
|
}
|
|
126
144
|
}
|
|
127
145
|
else {
|
|
128
|
-
const missingDependency = trmMissingDependencies.find(o =>
|
|
129
|
-
if (typeof (o) === 'string') {
|
|
130
|
-
if (o === d) {
|
|
131
|
-
return o;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
});
|
|
146
|
+
const missingDependency = trmMissingDependencies.find(o => o === d);
|
|
135
147
|
if (missingDependency) {
|
|
136
148
|
try {
|
|
137
149
|
dText = ` -> ${chalk_1.default.bgRed(missingDependency.manifest.get().version)}`;
|
|
@@ -155,11 +167,11 @@ class Info extends AbstractCommand_1.AbstractCommand {
|
|
|
155
167
|
}
|
|
156
168
|
var clientChildrenTree = [{
|
|
157
169
|
text: `trm-client ${clientVersion} ${(0, semver_1.gte)(clientLatest.localVersion, clientLatest.latestVersion) ? chalk_1.default.bgGreen('LATEST') : chalk_1.default.bold('v' + clientLatest.latestVersion + ' available')}`,
|
|
158
|
-
children:
|
|
170
|
+
children: dependenciesTree
|
|
159
171
|
}];
|
|
160
|
-
if (
|
|
172
|
+
if (nodeRfcPackage && nodeRfcPackage.version) {
|
|
161
173
|
clientChildrenTree.push({
|
|
162
|
-
text: yield this.getNpmLatestForText('node-rfc',
|
|
174
|
+
text: `node-rfc ${nodeRfcPackage.version} ${yield this.getNpmLatestForText('node-rfc', nodeRfcPackage.version)}`,
|
|
163
175
|
children: []
|
|
164
176
|
});
|
|
165
177
|
}
|
|
@@ -169,18 +181,6 @@ class Info extends AbstractCommand_1.AbstractCommand {
|
|
|
169
181
|
children: []
|
|
170
182
|
});
|
|
171
183
|
}
|
|
172
|
-
if (nodeR3transVersion) {
|
|
173
|
-
clientChildrenTree.push({
|
|
174
|
-
text: yield this.getNpmLatestForText('node-r3trans', nodeR3transVersion, `node-r3trans ${nodeR3transVersion}`),
|
|
175
|
-
children: []
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
clientChildrenTree.push({
|
|
180
|
-
text: `node-r3trans ${chalk_1.default.bold('not found')}`,
|
|
181
|
-
children: []
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
184
|
const clientTree = {
|
|
185
185
|
text: chalk_1.default.bold(`Client`),
|
|
186
186
|
children: clientChildrenTree
|
|
@@ -197,11 +197,11 @@ class Info extends AbstractCommand_1.AbstractCommand {
|
|
|
197
197
|
try {
|
|
198
198
|
const installedVersion = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(plugin.location, 'package.json')).toString()).version;
|
|
199
199
|
pluginsTree.children.push({
|
|
200
|
-
text: yield this.getNpmLatestForText(plugin.name, installedVersion
|
|
200
|
+
text: `${plugin.name} ${installedVersion} ${yield this.getNpmLatestForText(plugin.name, installedVersion)}`,
|
|
201
201
|
children: []
|
|
202
202
|
});
|
|
203
203
|
}
|
|
204
|
-
catch (
|
|
204
|
+
catch (_a) {
|
|
205
205
|
pluginsTree.children.push({
|
|
206
206
|
text: plugin.name,
|
|
207
207
|
children: []
|
|
@@ -49,7 +49,6 @@ class Install extends AbstractCommand_1.AbstractCommand {
|
|
|
49
49
|
this.command.argument(`<filename>`, `Name (or path) of the file.`);
|
|
50
50
|
this.command.description(`Import a package (as a file) into system.`);
|
|
51
51
|
}
|
|
52
|
-
this.command.option(`-t, --timeout <seconds>`, `Transport import timeout (in seconds)`, `180`);
|
|
53
52
|
this.command.option(`-T, --transport-layer <transport layer>`, `Package transport layer. (default: System default)`);
|
|
54
53
|
this.command.option(`--no-deps`, `Do not install dependencies.`);
|
|
55
54
|
this.command.option(`--no-obj-type`, `Do not check object types before import.`);
|
|
@@ -58,7 +57,7 @@ class Install extends AbstractCommand_1.AbstractCommand {
|
|
|
58
57
|
this.command.option(`--no-lang-tr`, `Do not import language (translation) transport.`);
|
|
59
58
|
this.command.option(`--no-cust-tr`, `Do not import customizing transports.`);
|
|
60
59
|
this.command.option(`--no-install-tr`, `Do not create install transport.`);
|
|
61
|
-
this.command.option(`--
|
|
60
|
+
this.command.option(`--namespace`, `Import customer namespace.`);
|
|
62
61
|
this.command.option(`--package-replacements <replacements>`, `SAP Package replacements (JSON or path to JSON file)`);
|
|
63
62
|
this.command.option(`--install-tr-target <target>`, `Install transport target system`);
|
|
64
63
|
this.command.option(`--no-prompts`, `No prompts (will force some decisions).`);
|
|
@@ -177,7 +176,6 @@ class Install extends AbstractCommand_1.AbstractCommand {
|
|
|
177
176
|
import: {
|
|
178
177
|
noLang: !this.args.langTr,
|
|
179
178
|
noCust: !this.args.custTr,
|
|
180
|
-
timeout: this.parseNumberArg('timeout'),
|
|
181
179
|
replaceExistingTransports: false
|
|
182
180
|
},
|
|
183
181
|
installDevclass: {
|
|
@@ -39,7 +39,6 @@ class Publish extends AbstractCommand_1.AbstractCommand {
|
|
|
39
39
|
this.command.option(`--no-keep-manifest`, `Don't default to previous release manifest values.`);
|
|
40
40
|
}
|
|
41
41
|
this.command.option(`-P, --sap-package <sap package>`, `SAP Package.`);
|
|
42
|
-
this.command.option(`-t, --timeout <seconds>`, `Transport release timeout (in seconds)`, `180`);
|
|
43
42
|
this.command.option(`-T, --target <target>`, `Transport release target.`);
|
|
44
43
|
this.command.option(`--no-lang-tr`, `Do not generate language (translation) transport.`);
|
|
45
44
|
this.command.option(`--no-cust-tr`, `Do not generate customizing transport.`);
|
|
@@ -134,7 +133,6 @@ class Publish extends AbstractCommand_1.AbstractCommand {
|
|
|
134
133
|
readme: this.parseTextArg('readme')
|
|
135
134
|
},
|
|
136
135
|
systemData: {
|
|
137
|
-
releaseTimeout: this.parseNumberArg('timeout'),
|
|
138
136
|
transportTarget: this.args.target
|
|
139
137
|
}
|
|
140
138
|
});
|
|
@@ -71,13 +71,13 @@ function connect(commandArgs_1) {
|
|
|
71
71
|
const force = commandArgs.force ? true : false;
|
|
72
72
|
var type = commandArgs.type;
|
|
73
73
|
var aInputType = [];
|
|
74
|
-
var aSapLogonConnections;
|
|
74
|
+
var aSapLogonConnections = [];
|
|
75
75
|
const aAlias = systemAlias_1.SystemAlias.getAll();
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
76
|
+
if ((0, utils_1.getNodeRfcPackage)()) {
|
|
77
|
+
try {
|
|
78
|
+
aSapLogonConnections = yield (0, utils_1.getSapLogonConnections)();
|
|
79
|
+
}
|
|
80
|
+
catch (_a) { }
|
|
81
81
|
}
|
|
82
82
|
if (addNoConnection) {
|
|
83
83
|
aInputType.push({
|
|
@@ -58,7 +58,7 @@ class RegistryAlias {
|
|
|
58
58
|
return this;
|
|
59
59
|
}
|
|
60
60
|
getRegistry() {
|
|
61
|
-
return new trm_core_1.RegistryV2(this._endpoint, this._name);
|
|
61
|
+
return new trm_core_1.RegistryV2(this._endpoint, this._name, (0, utils_1.getCoreVersion)());
|
|
62
62
|
}
|
|
63
63
|
static generateFile(content, filePath) {
|
|
64
64
|
if (!filePath) {
|
|
@@ -7,7 +7,7 @@ export declare class DummyConnector implements ISystemConnector {
|
|
|
7
7
|
getLogonLanguage: (c: boolean) => "X" | "XX";
|
|
8
8
|
getLogonUser: () => string;
|
|
9
9
|
connect: () => Promise<void>;
|
|
10
|
-
closeConnection: () => Promise<
|
|
10
|
+
closeConnection: () => Promise<void>;
|
|
11
11
|
checkConnection: () => Promise<boolean>;
|
|
12
12
|
ping: () => Promise<string>;
|
|
13
13
|
getFileSystem: () => Promise<any>;
|
|
@@ -88,4 +88,6 @@ export declare class DummyConnector implements ISystemConnector {
|
|
|
88
88
|
getObjectDependencies: () => Promise<any>;
|
|
89
89
|
getTableKeys: () => Promise<any>;
|
|
90
90
|
getRootDevclass: () => Promise<any>;
|
|
91
|
+
getTransportImportStatus: () => Promise<any>;
|
|
92
|
+
getTimezone: () => Promise<string>;
|
|
91
93
|
}
|
|
@@ -30,7 +30,9 @@ class DummyConnector {
|
|
|
30
30
|
this.connect = () => __awaiter(this, void 0, void 0, function* () {
|
|
31
31
|
return;
|
|
32
32
|
});
|
|
33
|
-
this.closeConnection = () => __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
this.closeConnection = () => __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
return;
|
|
35
|
+
});
|
|
34
36
|
this.checkConnection = () => __awaiter(this, void 0, void 0, function* () { return true; });
|
|
35
37
|
this.ping = () => __awaiter(this, void 0, void 0, function* () { return 'PONG'; });
|
|
36
38
|
this.getFileSystem = () => __awaiter(this, void 0, void 0, function* () { return this._throw(); });
|
|
@@ -115,6 +117,10 @@ class DummyConnector {
|
|
|
115
117
|
this.getObjectDependencies = () => __awaiter(this, void 0, void 0, function* () { return this._throw(); });
|
|
116
118
|
this.getTableKeys = () => __awaiter(this, void 0, void 0, function* () { return this._throw(); });
|
|
117
119
|
this.getRootDevclass = () => __awaiter(this, void 0, void 0, function* () { return this._throw(); });
|
|
120
|
+
this.getTransportImportStatus = () => __awaiter(this, void 0, void 0, function* () { return this._throw(); });
|
|
121
|
+
this.getTimezone = () => __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
return 'UTC';
|
|
123
|
+
});
|
|
118
124
|
}
|
|
119
125
|
_throw() {
|
|
120
126
|
throw new Error(`No connection to SAP server.`);
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { CacheData } from ".";
|
|
2
1
|
import { SettingsData } from ".";
|
|
3
2
|
import { IConnect, PluginModule } from "trm-commons";
|
|
4
3
|
export declare class GlobalContext {
|
|
@@ -10,7 +9,8 @@ export declare class GlobalContext {
|
|
|
10
9
|
private _plugins;
|
|
11
10
|
constructor();
|
|
12
11
|
getSettings(): SettingsData;
|
|
13
|
-
|
|
12
|
+
getGlobalNodeModules(): string;
|
|
13
|
+
getLatestVersion(): string;
|
|
14
14
|
load(): Promise<void>;
|
|
15
15
|
getPlugins(): PluginModule[];
|
|
16
16
|
getConnections(): IConnect[];
|
|
@@ -21,6 +21,7 @@ export declare class GlobalContext {
|
|
|
21
21
|
private getSettingsFilePath;
|
|
22
22
|
private getCacheFilePath;
|
|
23
23
|
private getDefaultSettings;
|
|
24
|
+
private setGlobalNpmPathInternal;
|
|
24
25
|
private getSettingsInternal;
|
|
25
26
|
private getCacheInternal;
|
|
26
27
|
private generateSettingsFile;
|
|
@@ -63,7 +63,7 @@ class RESTConnectExtended extends trm_commons_1.RESTConnect {
|
|
|
63
63
|
class RFCConnectExtended extends trm_commons_1.RFCConnect {
|
|
64
64
|
getSystemConnector() {
|
|
65
65
|
const data = this.getData();
|
|
66
|
-
return new trm_core_1.RFCSystemConnector(data, data, (0, _1.getTempFolder)(), GlobalContext.getInstance().
|
|
66
|
+
return new trm_core_1.RFCSystemConnector(data, data, (0, _1.getTempFolder)(), GlobalContext.getInstance().getGlobalNodeModules());
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
class GlobalContext {
|
|
@@ -83,15 +83,32 @@ class GlobalContext {
|
|
|
83
83
|
getSettings() {
|
|
84
84
|
return this._settings;
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
getGlobalNodeModules() {
|
|
87
|
+
if (!this._cache.globalNpmPath) {
|
|
88
|
+
this.setGlobalNpmPathInternal();
|
|
89
|
+
}
|
|
90
|
+
return this._cache.globalNpmPath.data;
|
|
91
|
+
}
|
|
92
|
+
getLatestVersion() {
|
|
93
|
+
return this._cache.latestVersion.data;
|
|
88
94
|
}
|
|
89
95
|
load() {
|
|
90
96
|
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
this.setGlobalNpmPathInternal();
|
|
98
|
+
const latestVersionCache = this._cache.latestVersion;
|
|
99
|
+
if (!latestVersionCache || (latestVersionCache.ts && Date.now() - latestVersionCache.ts > this.getSettings().cliUpdateCheckCache * 1000)) {
|
|
100
|
+
trm_commons_1.Logger.loading(`Cache expired, setting client latest version...`, true);
|
|
101
|
+
const version = (yield (0, _1.getNpmPackageLatestVersion)('trm-client')).latest;
|
|
102
|
+
trm_commons_1.Logger.log(`Client latest version set to ${version}`, true);
|
|
103
|
+
this.setCache('latestVersion', version);
|
|
104
|
+
}
|
|
91
105
|
if (!this._pluginsLoaded) {
|
|
106
|
+
trm_commons_1.Logger.loading(`Loading plugins...`, true);
|
|
92
107
|
this._plugins = yield trm_commons_1.Plugin.load({
|
|
93
|
-
globalNodeModulesPath: this.
|
|
108
|
+
globalNodeModulesPath: this.getGlobalNodeModules()
|
|
94
109
|
});
|
|
110
|
+
trm_commons_1.Logger.log(`Loaded ${this._plugins.length} plugins: ${this._plugins.map(o => o.name).join(', ')}`, true);
|
|
111
|
+
trm_commons_1.Logger.loading(`Calling event onContextLoadConnections...`, true);
|
|
95
112
|
this._connections = yield trm_commons_1.Plugin.call("client", "onContextLoadConnections", [new RESTConnectExtended(), new RFCConnectExtended()]);
|
|
96
113
|
this._pluginsLoaded = true;
|
|
97
114
|
}
|
|
@@ -132,39 +149,62 @@ class GlobalContext {
|
|
|
132
149
|
return path_1.default.join((0, _1.getRoamingFolder)(), CACHE_FILE_NAME);
|
|
133
150
|
}
|
|
134
151
|
getDefaultSettings() {
|
|
135
|
-
var sapLandscape
|
|
136
|
-
|
|
152
|
+
var sapLandscape;
|
|
153
|
+
switch (process.platform) {
|
|
154
|
+
case 'win32':
|
|
155
|
+
sapLandscape = path_1.default.join((0, _1.getRoamingPath)(), 'SAP', 'Common', 'SAPUILandscape.xml');
|
|
156
|
+
break;
|
|
157
|
+
case 'darwin':
|
|
158
|
+
sapLandscape = path_1.default.join((0, _1.getRoamingPath)(), 'SAP', 'SAPGUILandscape.xml');
|
|
159
|
+
break;
|
|
160
|
+
default:
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
if (!sapLandscape || !fs.existsSync(sapLandscape)) {
|
|
137
164
|
sapLandscape = undefined;
|
|
138
165
|
}
|
|
139
166
|
return {
|
|
140
167
|
loggerType: 'CLI',
|
|
141
168
|
logOutputFolder: 'default',
|
|
142
|
-
|
|
169
|
+
cliUpdateCheckCache: 60,
|
|
170
|
+
npmGlobalPathCheckCache: 180,
|
|
143
171
|
sapLandscape
|
|
144
172
|
};
|
|
145
173
|
}
|
|
174
|
+
setGlobalNpmPathInternal() {
|
|
175
|
+
const globalNpmPathCache = this._cache.globalNpmPath;
|
|
176
|
+
if (!globalNpmPathCache || (globalNpmPathCache.ts && Date.now() - globalNpmPathCache.ts > this.getSettings().npmGlobalPathCheckCache * 1000)) {
|
|
177
|
+
trm_commons_1.Logger.loading(`Cache expired, setting npm global modules path...`, true);
|
|
178
|
+
const path = (0, trm_commons_1.getGlobalNodeModules)();
|
|
179
|
+
trm_commons_1.Logger.log(`Npm global modules path set to ${path}`, true);
|
|
180
|
+
this.setCache('globalNpmPath', path);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
146
183
|
getSettingsInternal() {
|
|
147
|
-
|
|
184
|
+
const defaultSettings = this.getDefaultSettings();
|
|
148
185
|
const filePath = this.getSettingsFilePath();
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (!settingsData.globalNodeModules) {
|
|
156
|
-
settingsData.globalNodeModules = defaultSettings.globalNodeModules;
|
|
157
|
-
}
|
|
158
|
-
if (!settingsData.sapLandscape) {
|
|
159
|
-
settingsData.sapLandscape = defaultSettings.sapLandscape;
|
|
160
|
-
}
|
|
161
|
-
this.generateSettingsFile(settingsData, filePath);
|
|
162
|
-
}
|
|
163
|
-
return settingsData;
|
|
186
|
+
try {
|
|
187
|
+
const sIni = fs.readFileSync(filePath).toString();
|
|
188
|
+
const settingsData = ini.decode(sIni);
|
|
189
|
+
if (!settingsData.sapLandscape) {
|
|
190
|
+
settingsData.sapLandscape = defaultSettings.sapLandscape;
|
|
191
|
+
this.generateSettingsFile(settingsData, filePath);
|
|
164
192
|
}
|
|
165
|
-
|
|
193
|
+
if (!settingsData.cliUpdateCheckCache) {
|
|
194
|
+
settingsData.cliUpdateCheckCache = defaultSettings.cliUpdateCheckCache;
|
|
195
|
+
this.generateSettingsFile(settingsData, filePath);
|
|
196
|
+
}
|
|
197
|
+
if (!settingsData.npmGlobalPathCheckCache) {
|
|
198
|
+
settingsData.npmGlobalPathCheckCache = defaultSettings.npmGlobalPathCheckCache;
|
|
199
|
+
this.generateSettingsFile(settingsData, filePath);
|
|
200
|
+
}
|
|
201
|
+
if (settingsData.globalNodeModules) {
|
|
202
|
+
delete settingsData.globalNodeModules;
|
|
203
|
+
this.generateSettingsFile(settingsData, filePath);
|
|
204
|
+
}
|
|
205
|
+
return settingsData;
|
|
166
206
|
}
|
|
167
|
-
|
|
207
|
+
catch (e) { }
|
|
168
208
|
this.generateSettingsFile(defaultSettings, filePath);
|
|
169
209
|
return defaultSettings;
|
|
170
210
|
}
|
|
@@ -16,26 +16,17 @@ exports.checkCliUpdate = checkCliUpdate;
|
|
|
16
16
|
const semver_1 = require("semver");
|
|
17
17
|
const getClientVersion_1 = require("./getClientVersion");
|
|
18
18
|
const chalk_1 = __importDefault(require("chalk"));
|
|
19
|
-
const getNpmPackageLatestVersion_1 = require("./getNpmPackageLatestVersion");
|
|
20
19
|
const trm_commons_1 = require("trm-commons");
|
|
21
20
|
const GlobalContext_1 = require("./GlobalContext");
|
|
22
21
|
function checkCliUpdate(print) {
|
|
23
22
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24
23
|
try {
|
|
25
|
-
|
|
26
|
-
const cache = GlobalContext_1.GlobalContext.getInstance().getCache().latestVersion;
|
|
27
|
-
if (cache && cache.ts && Date.now() - cache.ts <= 60000) {
|
|
28
|
-
latestVersion = cache.data;
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
latestVersion = yield (0, getNpmPackageLatestVersion_1.getNpmPackageLatestVersion)('trm-client');
|
|
32
|
-
GlobalContext_1.GlobalContext.getInstance().setCache('latestVersion', latestVersion);
|
|
33
|
-
}
|
|
24
|
+
const latestVersion = GlobalContext_1.GlobalContext.getInstance().getLatestVersion();
|
|
34
25
|
const localVersion = (0, getClientVersion_1.getClientVersion)();
|
|
35
26
|
const versionDiff = (0, semver_1.diff)(localVersion, latestVersion);
|
|
36
27
|
if ((versionDiff === 'minor' || versionDiff === 'major') && (0, semver_1.gt)(latestVersion, localVersion)) {
|
|
37
28
|
if (print) {
|
|
38
|
-
trm_commons_1.Logger.warning(`A
|
|
29
|
+
trm_commons_1.Logger.warning(`A new ${chalk_1.default.bold(versionDiff)} release of trm-client (v${chalk_1.default.bold(latestVersion)}) is available.`);
|
|
39
30
|
trm_commons_1.Logger.warning(`New releases can introduce features and bug fixes.`);
|
|
40
31
|
trm_commons_1.Logger.warning(`It is recommended to update your client by running the command`);
|
|
41
32
|
trm_commons_1.Logger.warning(` ${chalk_1.default.bold('trm update')}`);
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getClientNodeDependencies = getClientNodeDependencies;
|
|
4
4
|
const trm_core_1 = require("trm-core");
|
|
5
|
+
const GlobalContext_1 = require("./GlobalContext");
|
|
5
6
|
function getClientNodeDependencies() {
|
|
6
|
-
const trmClientPackage = (0, trm_core_1.getNodePackage)("trm-client");
|
|
7
|
+
const trmClientPackage = (0, trm_core_1.getNodePackage)(GlobalContext_1.GlobalContext.getInstance().getGlobalNodeModules(), "trm-client");
|
|
7
8
|
return trmClientPackage.dependencies || {};
|
|
8
9
|
}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getClientVersion = getClientVersion;
|
|
4
4
|
const trm_core_1 = require("trm-core");
|
|
5
|
+
const GlobalContext_1 = require("./GlobalContext");
|
|
5
6
|
function getClientVersion() {
|
|
6
|
-
const trmClientPackage = (0, trm_core_1.getNodePackage)("trm-client");
|
|
7
|
+
const trmClientPackage = (0, trm_core_1.getNodePackage)(GlobalContext_1.GlobalContext.getInstance().getGlobalNodeModules(), "trm-client");
|
|
7
8
|
return trmClientPackage.version;
|
|
8
9
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getCoreVersion(): string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCoreVersion = getCoreVersion;
|
|
4
|
+
const trm_core_1 = require("trm-core");
|
|
5
|
+
const GlobalContext_1 = require("./GlobalContext");
|
|
6
|
+
function getCoreVersion() {
|
|
7
|
+
const trmCorePackage = (0, trm_core_1.getNodePackage)(GlobalContext_1.GlobalContext.getInstance().getGlobalNodeModules());
|
|
8
|
+
return trmCorePackage.version;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getNodeRfcPackage(): any;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNodeRfcPackage = getNodeRfcPackage;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const GlobalContext_1 = require("./GlobalContext");
|
|
7
|
+
function getNodeRfcPackage() {
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(GlobalContext_1.GlobalContext.getInstance().getGlobalNodeModules(), `/node-rfc/package.json`)).toString());
|
|
10
|
+
}
|
|
11
|
+
catch (_a) { }
|
|
12
|
+
}
|
|
@@ -14,9 +14,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.getNpmPackageLatestVersion = getNpmPackageLatestVersion;
|
|
16
16
|
const axios_1 = __importDefault(require("axios"));
|
|
17
|
-
|
|
17
|
+
const semver_1 = require("semver");
|
|
18
|
+
function getNpmPackageLatestVersion(packageName, range) {
|
|
18
19
|
return __awaiter(this, void 0, void 0, function* () {
|
|
19
20
|
const response = yield axios_1.default.get(`https://registry.npmjs.org/${packageName}`);
|
|
20
|
-
|
|
21
|
+
const actualLatest = response.data['dist-tags'].latest;
|
|
22
|
+
if (!range) {
|
|
23
|
+
return { actualLatest, latest: actualLatest };
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return {
|
|
27
|
+
latest: (0, semver_1.maxSatisfying)(Object.keys(response.data.versions || {}), range),
|
|
28
|
+
actualLatest
|
|
29
|
+
};
|
|
30
|
+
}
|
|
21
31
|
});
|
|
22
32
|
}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from "./getSapLogonConnections";
|
|
|
5
5
|
export * from "./logError";
|
|
6
6
|
export * from "./checkCliUpdate";
|
|
7
7
|
export * from "./getClientVersion";
|
|
8
|
+
export * from "./getCoreVersion";
|
|
8
9
|
export * from "./getTempFolder";
|
|
9
10
|
export * from "./getLogFolder";
|
|
10
11
|
export * from "./getClientNodeDependencies";
|
|
@@ -14,3 +15,4 @@ export * from "./SettingsData";
|
|
|
14
15
|
export * from "./CacheData";
|
|
15
16
|
export * from "./GlobalContext";
|
|
16
17
|
export * from "./isDockerRunning";
|
|
18
|
+
export * from "./getNodeRfcPackage";
|
package/dist/utils/index.js
CHANGED
|
@@ -21,6 +21,7 @@ __exportStar(require("./getSapLogonConnections"), exports);
|
|
|
21
21
|
__exportStar(require("./logError"), exports);
|
|
22
22
|
__exportStar(require("./checkCliUpdate"), exports);
|
|
23
23
|
__exportStar(require("./getClientVersion"), exports);
|
|
24
|
+
__exportStar(require("./getCoreVersion"), exports);
|
|
24
25
|
__exportStar(require("./getTempFolder"), exports);
|
|
25
26
|
__exportStar(require("./getLogFolder"), exports);
|
|
26
27
|
__exportStar(require("./getClientNodeDependencies"), exports);
|
|
@@ -30,3 +31,4 @@ __exportStar(require("./SettingsData"), exports);
|
|
|
30
31
|
__exportStar(require("./CacheData"), exports);
|
|
31
32
|
__exportStar(require("./GlobalContext"), exports);
|
|
32
33
|
__exportStar(require("./isDockerRunning"), exports);
|
|
34
|
+
__exportStar(require("./getNodeRfcPackage"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trm-client",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.4.1",
|
|
4
4
|
"description": "TRM (Transport Request Manager) Client",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
"i": "^0.3.7",
|
|
46
46
|
"ini": "^4.1.1",
|
|
47
47
|
"lodash": "^4.17.21",
|
|
48
|
-
"semver": "^7.
|
|
49
|
-
"trm-commons": "^3.5.
|
|
50
|
-
"trm-core": "^8.
|
|
48
|
+
"semver": "^7.7.4",
|
|
49
|
+
"trm-commons": "^3.5.1",
|
|
50
|
+
"trm-core": "^8.4.1",
|
|
51
51
|
"trm-registry-types": "^2.1.0",
|
|
52
52
|
"xml2js": "^0.6.2"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
|
-
"trm-commons": "^3.5.
|
|
55
|
+
"trm-commons": "^3.5.1"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/ini": "^1.3.31",
|