trm-core 9.0.0 → 9.1.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 +6 -0
- package/dist/actions/install/addNamespace.js +19 -46
- package/dist/actions/install/checkTransports.js +37 -20
- package/dist/actions/install/index.d.ts +1 -0
- package/dist/actions/install/init.js +3 -2
- package/dist/actions/install/readDevc.js +6 -2
- package/dist/actions/install/readTadir.js +3 -1
- package/dist/lockfile/Lockfile.js +1 -1
- package/dist/registry/AbstractRegistry.d.ts +2 -1
- package/dist/registry/FileSystem.d.ts +1 -0
- package/dist/registry/FileSystem.js +5 -0
- package/dist/registry/RegistryV2.d.ts +2 -1
- package/dist/registry/RegistryV2.js +116 -6
- package/dist/trmPackage/TrmArtifact.d.ts +1 -1
- package/dist/trmPackage/TrmArtifact.js +9 -2
- package/package.json +1 -1
package/changelog.txt
CHANGED
|
@@ -8,6 +8,12 @@ Legend
|
|
|
8
8
|
+ : added
|
|
9
9
|
- : removed
|
|
10
10
|
|
|
11
|
+
2026-04-21 v9.1.0
|
|
12
|
+
-------------------
|
|
13
|
+
! abstract registry log for downloads
|
|
14
|
+
! abstract registry contents endpoint (wip)
|
|
15
|
+
! skip usage of r3trans when registry provides content (wip)
|
|
16
|
+
|
|
11
17
|
2026-04-14 v9.0.0
|
|
12
18
|
-------------------
|
|
13
19
|
! moved to namespace /ATRM/
|
|
@@ -30,12 +30,6 @@ exports.addNamespace = {
|
|
|
30
30
|
trm_commons_1.Logger.log(`Package install namespace is ${context.runtime.installData.namespace}`, true);
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
else {
|
|
34
|
-
if (context.rawInput.installData.installDevclass.skipNamespace) {
|
|
35
|
-
trm_commons_1.Logger.info(`Skipping install of namespace ${context.runtime.installData.namespace}`, false);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
33
|
trm_commons_1.Logger.loading(`Checking namespace ${context.runtime.installData.namespace}...`);
|
|
40
34
|
var namespace;
|
|
41
35
|
const namespaceCheck = yield systemConnector_1.SystemConnector.getNamespace(context.runtime.installData.namespace);
|
|
@@ -46,8 +40,13 @@ exports.addNamespace = {
|
|
|
46
40
|
trm_commons_1.Logger.log(`Namespace ${context.runtime.installData.namespace} already defined`, true);
|
|
47
41
|
return;
|
|
48
42
|
}
|
|
43
|
+
else {
|
|
44
|
+
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 do not rename install packages.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
49
48
|
var replicense;
|
|
50
|
-
var
|
|
49
|
+
var text;
|
|
51
50
|
var aTexts = [];
|
|
52
51
|
if (context.runtime.installData.namespace !== originalNamespace) {
|
|
53
52
|
if (!context.rawInput.contextData.noInquirer) {
|
|
@@ -64,7 +63,7 @@ exports.addNamespace = {
|
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
})).replicense;
|
|
67
|
-
|
|
66
|
+
text = yield trm_commons_1.Inquirer.prompt([{
|
|
68
67
|
message: `dummy`,
|
|
69
68
|
name: 'namespace',
|
|
70
69
|
type: 'input',
|
|
@@ -77,61 +76,35 @@ exports.addNamespace = {
|
|
|
77
76
|
}, {
|
|
78
77
|
message: `Namespace language`,
|
|
79
78
|
name: 'spras',
|
|
80
|
-
type: 'input'
|
|
79
|
+
type: 'input',
|
|
80
|
+
default: systemConnector_1.SystemConnector.getLogonLanguage(true)
|
|
81
81
|
}, {
|
|
82
82
|
message: `Namespace description`,
|
|
83
83
|
name: 'descriptn',
|
|
84
84
|
type: 'input'
|
|
85
85
|
}]);
|
|
86
|
+
aTexts.push(text);
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
else {
|
|
89
90
|
if (context.runtime.remotePackageData.manifest.namespace) {
|
|
90
91
|
replicense = context.runtime.remotePackageData.manifest.namespace.replicense;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
if (!context.rawInput.contextData.noInquirer) {
|
|
102
|
-
texts = (yield trm_commons_1.Inquirer.prompt({
|
|
103
|
-
type: 'list',
|
|
104
|
-
message: 'Choose namespace install text',
|
|
105
|
-
name: 'choice',
|
|
106
|
-
choices: context.runtime.remotePackageData.manifest.namespace.texts.map(o => {
|
|
107
|
-
return {
|
|
108
|
-
name: `${o.language} ${o.description} ${o.owner}`,
|
|
109
|
-
value: {
|
|
110
|
-
namespace: context.runtime.installData.namespace,
|
|
111
|
-
descriptn: o.description,
|
|
112
|
-
owner: o.owner,
|
|
113
|
-
spras: o.language
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
})
|
|
117
|
-
})).choice;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
92
|
+
aTexts = context.runtime.remotePackageData.manifest.namespace.texts.map(o => {
|
|
93
|
+
return {
|
|
94
|
+
namespace: context.runtime.remotePackageData.manifest.namespace.ns || context.runtime.installData.namespace,
|
|
95
|
+
spras: o.language,
|
|
96
|
+
descriptn: o.description,
|
|
97
|
+
owner: o.owner
|
|
98
|
+
};
|
|
99
|
+
});
|
|
121
100
|
}
|
|
122
101
|
}
|
|
123
102
|
if (!replicense) {
|
|
124
103
|
throw new Error(`Cannot use namespace ${context.runtime.installData.namespace}: repair license missing.`);
|
|
125
104
|
}
|
|
126
|
-
if (
|
|
105
|
+
if (aTexts.length === 0) {
|
|
127
106
|
throw new Error(`Cannot use namespace ${context.runtime.installData.namespace}: data missing.`);
|
|
128
107
|
}
|
|
129
|
-
else {
|
|
130
|
-
aTexts.push(texts);
|
|
131
|
-
if (texts.spras != systemConnector_1.SystemConnector.getLogonLanguage(true)) {
|
|
132
|
-
aTexts.push(Object.assign(Object.assign({}, texts), { spras: systemConnector_1.SystemConnector.getLogonLanguage(true) }));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
108
|
if (!context.runtime.stopWarningShown) {
|
|
136
109
|
context.runtime.stopWarningShown = true;
|
|
137
110
|
(0, stopWarning_1.stopWarning)('install');
|
|
@@ -20,8 +20,15 @@ exports.checkTransports = {
|
|
|
20
20
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
21
|
trm_commons_1.Logger.log('Check transports step', true);
|
|
22
22
|
var checkExistance = [];
|
|
23
|
+
try {
|
|
24
|
+
context.runtime.packageTransportsData = yield context.rawInput.packageData.registry.contents(context.rawInput.packageData.name, context.rawInput.packageData.version || 'latest', true);
|
|
25
|
+
context.runtime.remotePackageData.contents = true;
|
|
26
|
+
}
|
|
27
|
+
catch (_a) {
|
|
28
|
+
context.runtime.remotePackageData.contents = false;
|
|
29
|
+
}
|
|
23
30
|
trm_commons_1.Logger.loading(`Checking package transports...`);
|
|
24
|
-
const aTransports = yield context.runtime.remotePackageData.artifact.getTransportBinaries(context.rawInput.contextData.r3transOptions);
|
|
31
|
+
const aTransports = yield context.runtime.remotePackageData.artifact.getTransportBinaries(context.rawInput.contextData.r3transOptions, context.runtime.remotePackageData.contents);
|
|
25
32
|
trm_commons_1.Logger.log(`Package content: ${aTransports.map(o => {
|
|
26
33
|
return {
|
|
27
34
|
trkorr: o.trkorr,
|
|
@@ -61,9 +68,11 @@ exports.checkTransports = {
|
|
|
61
68
|
context.runtime.packageTransports.tadir.binaries = aTadirTransports[0];
|
|
62
69
|
trm_commons_1.Logger.log(`TADIR transport is ${context.runtime.packageTransports.tadir.binaries.trkorr}.`, true);
|
|
63
70
|
checkExistance.push(context.runtime.packageTransports.tadir.binaries.trkorr);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
72
|
+
const tadirE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.tadir.binaries.binaries.data, 'E071'));
|
|
73
|
+
trm_commons_1.Logger.log(`TADIR E071: ${JSON.stringify(tadirE071)}`, true);
|
|
74
|
+
context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(tadirE071);
|
|
75
|
+
}
|
|
67
76
|
}
|
|
68
77
|
if (aLangTransports.length > 0) {
|
|
69
78
|
if (context.rawInput.installData.import.noLang === undefined) {
|
|
@@ -84,9 +93,11 @@ exports.checkTransports = {
|
|
|
84
93
|
context.runtime.packageTransports.lang.binaries = aLangTransports[0];
|
|
85
94
|
trm_commons_1.Logger.log(`LANG transport is ${context.runtime.packageTransports.lang.binaries.trkorr}.`, true);
|
|
86
95
|
checkExistance.push(context.runtime.packageTransports.lang.binaries.trkorr);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
96
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
97
|
+
const langE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.lang.binaries.binaries.data, 'E071'));
|
|
98
|
+
trm_commons_1.Logger.log(`LANG E071: ${JSON.stringify(langE071)}`, true);
|
|
99
|
+
context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(langE071);
|
|
100
|
+
}
|
|
90
101
|
}
|
|
91
102
|
}
|
|
92
103
|
if (aCustTransports.length > 0) {
|
|
@@ -108,24 +119,30 @@ exports.checkTransports = {
|
|
|
108
119
|
});
|
|
109
120
|
trm_commons_1.Logger.log(`CUST transport are ${context.runtime.packageTransports.cust.map(o => o.binaries.trkorr)}.`, true);
|
|
110
121
|
checkExistance = checkExistance.concat(context.runtime.packageTransports.cust.map(o => o.binaries.trkorr));
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
122
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
123
|
+
var custE071 = [];
|
|
124
|
+
for (const transport of context.runtime.packageTransports.cust) {
|
|
125
|
+
custE071 = custE071.concat((0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(transport.binaries.binaries.data, 'E071')));
|
|
126
|
+
}
|
|
127
|
+
trm_commons_1.Logger.log(`CUST E071: ${JSON.stringify(custE071)}`, true);
|
|
128
|
+
context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(custE071);
|
|
114
129
|
}
|
|
115
|
-
trm_commons_1.Logger.log(`CUST E071: ${JSON.stringify(custE071)}`, true);
|
|
116
|
-
context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(custE071);
|
|
117
130
|
}
|
|
118
131
|
}
|
|
119
|
-
if (context.runtime.
|
|
120
|
-
|
|
132
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
133
|
+
if (context.runtime.packageTransportsData.e071.find(o => o.pgmid === 'R3TR' && o.object === 'DEVC')) {
|
|
134
|
+
throw new Error(`Package has undeclared devclass.`);
|
|
135
|
+
}
|
|
121
136
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
137
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
138
|
+
var devcE071 = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.devc.binaries.binaries.data, 'E071'));
|
|
139
|
+
trm_commons_1.Logger.log(`DEVC E071: ${JSON.stringify(devcE071)}`, true);
|
|
140
|
+
devcE071 = devcE071.filter(o => o.pgmid === 'R3TR' && o.object === 'DEVC');
|
|
141
|
+
if (devcE071.length === 0) {
|
|
142
|
+
throw new Error(`Package has no devclass.`);
|
|
143
|
+
}
|
|
144
|
+
context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(devcE071);
|
|
127
145
|
}
|
|
128
|
-
context.runtime.packageTransportsData.e071 = context.runtime.packageTransportsData.e071.concat(devcE071);
|
|
129
146
|
context.runtime.installData.entries = context.runtime.packageTransportsData.e071;
|
|
130
147
|
trm_commons_1.Logger.loading(`Checking package transports...`);
|
|
131
148
|
trm_commons_1.Logger.loading(`Checking if ${checkExistance.length} transports exist before importing them`, true);
|
|
@@ -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, true);
|
|
44
44
|
const checksum = (0, crypto_1.createHash)("sha512").update(artifact.binary).digest("base64");
|
|
45
45
|
if (checksum !== packageData.checksum) {
|
|
46
46
|
var ping;
|
|
@@ -66,7 +66,8 @@ exports.init = {
|
|
|
66
66
|
remotePackageData: {
|
|
67
67
|
data: packageData,
|
|
68
68
|
artifact,
|
|
69
|
-
manifest
|
|
69
|
+
manifest,
|
|
70
|
+
contents: false
|
|
70
71
|
},
|
|
71
72
|
dependenciesToInstall: [],
|
|
72
73
|
r3trans: undefined,
|
|
@@ -17,13 +17,17 @@ exports.readDevc = {
|
|
|
17
17
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
18
|
trm_commons_1.Logger.log('Read DEVC step', true);
|
|
19
19
|
trm_commons_1.Logger.loading(`Checking package transports...`);
|
|
20
|
-
|
|
20
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
21
|
+
context.runtime.packageTransportsData.tdevc = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.devc.binaries.binaries.data, 'TDEVC'));
|
|
22
|
+
}
|
|
21
23
|
if (context.runtime.packageTransportsData.tdevc.length === 0) {
|
|
22
24
|
throw new Error(`Package has no devclass.`);
|
|
23
25
|
}
|
|
24
26
|
trm_commons_1.Logger.log(`DEVC TDEVC: ${JSON.stringify(context.runtime.packageTransportsData.tdevc)}`, true);
|
|
25
27
|
context.runtime.originalData.hierarchy = (0, commons_1.getPackageHierarchy)(context.runtime.packageTransportsData.tdevc);
|
|
26
|
-
|
|
28
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
29
|
+
context.runtime.packageTransportsData.tdevct = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.devc.binaries.binaries.data, 'TDEVCT'));
|
|
30
|
+
}
|
|
27
31
|
trm_commons_1.Logger.log(`DEVC TDEVCT: ${JSON.stringify(context.runtime.packageTransportsData.tdevct)}`, true);
|
|
28
32
|
})
|
|
29
33
|
};
|
|
@@ -18,7 +18,9 @@ exports.readTadir = {
|
|
|
18
18
|
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
19
|
trm_commons_1.Logger.log('Read tadir step', true);
|
|
20
20
|
trm_commons_1.Logger.loading(`Checking package transports...`);
|
|
21
|
-
|
|
21
|
+
if (!context.runtime.remotePackageData.contents) {
|
|
22
|
+
context.runtime.packageTransportsData.tadir = (0, commons_1.normalize)(yield context.runtime.r3trans.getTableEntries(context.runtime.packageTransports.tadir.binaries.binaries.data, 'TADIR'));
|
|
23
|
+
}
|
|
22
24
|
trm_commons_1.Logger.log(`TADIR TADIR: ${JSON.stringify(context.runtime.packageTransportsData.tadir)}`, true);
|
|
23
25
|
var existingObjects = [];
|
|
24
26
|
if (!systemConnector_1.SystemConnector.getSupportedBulk().getTransportObjects) {
|
|
@@ -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, true);
|
|
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,11 +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) => Promise<TrmArtifact>;
|
|
14
|
+
abstract downloadArtifact: (fullName: string, version: string, log?: boolean) => 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, log?: boolean) => Promise<any>;
|
|
21
22
|
}
|
|
@@ -24,4 +24,5 @@ export declare class FileSystem implements AbstractRegistry {
|
|
|
24
24
|
deprecate(fullName: string, version: string, deprecate: Deprecate): Promise<void>;
|
|
25
25
|
addDistTag(fullName: string, distTag: DistTagAdd): Promise<void>;
|
|
26
26
|
rmDistTag(fullName: string, distTag: DistTagRm): Promise<void>;
|
|
27
|
+
contents(fullName: string, version: string): Promise<any>;
|
|
27
28
|
}
|
|
@@ -174,5 +174,10 @@ class FileSystem {
|
|
|
174
174
|
throw new Error(`File system can't remove dist tags!`);
|
|
175
175
|
});
|
|
176
176
|
}
|
|
177
|
+
contents(fullName, version) {
|
|
178
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
179
|
+
throw new Error(`File system can't see contents!`);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
177
182
|
}
|
|
178
183
|
exports.FileSystem = FileSystem;
|
|
@@ -24,11 +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): Promise<TrmArtifact>;
|
|
27
|
+
downloadArtifact(fullName: string, version?: string, log?: boolean): 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, log?: boolean): Promise<any>;
|
|
34
35
|
}
|
|
@@ -58,6 +58,7 @@ 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"));
|
|
61
62
|
const AXIOS_CTX = "RegistryV2";
|
|
62
63
|
exports.PUBLIC_RESERVED_KEYWORD = 'public';
|
|
63
64
|
class RegistryV2 {
|
|
@@ -397,20 +398,66 @@ class RegistryV2 {
|
|
|
397
398
|
});
|
|
398
399
|
}
|
|
399
400
|
downloadArtifact(fullName_1) {
|
|
400
|
-
return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest') {
|
|
401
|
-
var
|
|
401
|
+
return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest', log) {
|
|
402
|
+
var _a;
|
|
402
403
|
const packageData = yield this.getPackage(fullName, version);
|
|
404
|
+
const chunks = [];
|
|
405
|
+
let buffer;
|
|
406
|
+
var logProgress;
|
|
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
|
+
}
|
|
403
415
|
try {
|
|
404
|
-
|
|
416
|
+
const response = yield this._axiosInstance.get(packageData.download_link, {
|
|
405
417
|
headers: {
|
|
406
|
-
|
|
418
|
+
Accept: 'application/octet-stream',
|
|
407
419
|
},
|
|
408
420
|
maxRedirects: 10,
|
|
409
|
-
responseType: '
|
|
421
|
+
responseType: 'stream',
|
|
410
422
|
validateStatus: s => s >= 200 && s < 400,
|
|
411
|
-
})
|
|
423
|
+
});
|
|
424
|
+
const totalBytes = Number((_a = response.headers['content-length']) !== null && _a !== void 0 ? _a : 0);
|
|
425
|
+
let downloadedBytes = 0;
|
|
426
|
+
if (log) {
|
|
427
|
+
if (totalBytes > 0) {
|
|
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
|
+
}
|
|
434
|
+
}
|
|
435
|
+
yield new Promise((resolve, reject) => {
|
|
436
|
+
response.data.on('data', (chunk) => {
|
|
437
|
+
chunks.push(chunk);
|
|
438
|
+
downloadedBytes += chunk.length;
|
|
439
|
+
if (log) {
|
|
440
|
+
if (totalBytes > 0) {
|
|
441
|
+
logProgress.update(downloadedBytes);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
response.data.on('end', () => resolve());
|
|
446
|
+
response.data.on('error', reject);
|
|
447
|
+
});
|
|
448
|
+
if (log) {
|
|
449
|
+
if (totalBytes > 0) {
|
|
450
|
+
logProgress.stop();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
buffer = Buffer.concat(chunks);
|
|
412
454
|
}
|
|
413
455
|
catch (e) {
|
|
456
|
+
try {
|
|
457
|
+
logProgress.stop();
|
|
458
|
+
}
|
|
459
|
+
catch (_b) {
|
|
460
|
+
}
|
|
414
461
|
trm_commons_1.Logger.error(e.toString(), true);
|
|
415
462
|
trm_commons_1.Logger.error(`Failed to fetch package at ${packageData.download_link}: ${e.message}`);
|
|
416
463
|
throw e;
|
|
@@ -493,5 +540,68 @@ class RegistryV2 {
|
|
|
493
540
|
}
|
|
494
541
|
});
|
|
495
542
|
}
|
|
543
|
+
contents(fullName_1) {
|
|
544
|
+
return __awaiter(this, arguments, void 0, function* (fullName, version = 'latest', log) {
|
|
545
|
+
var _a;
|
|
546
|
+
const chunks = [];
|
|
547
|
+
var logProgress;
|
|
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
|
+
}
|
|
556
|
+
try {
|
|
557
|
+
const response = yield this._axiosInstance.get(`/package/contents/${fullName}`, {
|
|
558
|
+
params: {
|
|
559
|
+
version: encodeURIComponent(version),
|
|
560
|
+
},
|
|
561
|
+
responseType: 'stream',
|
|
562
|
+
});
|
|
563
|
+
const totalBytes = Number((_a = response.headers['content-length']) !== null && _a !== void 0 ? _a : 0);
|
|
564
|
+
let downloadedBytes = 0;
|
|
565
|
+
if (log) {
|
|
566
|
+
if (totalBytes > 0) {
|
|
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
|
+
}
|
|
573
|
+
}
|
|
574
|
+
yield new Promise((resolve, reject) => {
|
|
575
|
+
response.data.on('data', (chunk) => {
|
|
576
|
+
chunks.push(chunk);
|
|
577
|
+
downloadedBytes += chunk.length;
|
|
578
|
+
if (log) {
|
|
579
|
+
if (totalBytes > 0) {
|
|
580
|
+
logProgress.update(downloadedBytes);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
response.data.on('end', () => resolve());
|
|
585
|
+
response.data.on('error', reject);
|
|
586
|
+
});
|
|
587
|
+
if (log) {
|
|
588
|
+
if (totalBytes > 0) {
|
|
589
|
+
logProgress.stop();
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
const buffer = Buffer.concat(chunks);
|
|
593
|
+
return JSON.parse(buffer.toString('utf-8'));
|
|
594
|
+
}
|
|
595
|
+
catch (e) {
|
|
596
|
+
try {
|
|
597
|
+
logProgress.stop();
|
|
598
|
+
}
|
|
599
|
+
catch (_b) { }
|
|
600
|
+
trm_commons_1.Logger.error(e.toString(), true);
|
|
601
|
+
trm_commons_1.Logger.error(`Failed to fetch contents for ${fullName}: ${e.message}`);
|
|
602
|
+
throw e;
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
}
|
|
496
606
|
}
|
|
497
607
|
exports.RegistryV2 = RegistryV2;
|
|
@@ -16,7 +16,7 @@ export declare class TrmArtifact {
|
|
|
16
16
|
getManifest(): Manifest | null;
|
|
17
17
|
replaceManifest(oManifest: Manifest): void;
|
|
18
18
|
getDistFolder(): string | null;
|
|
19
|
-
getTransportBinaries(r3transOption?: R3transOptions): Promise<TransportBinary[]>;
|
|
19
|
+
getTransportBinaries(r3transOption?: R3transOptions, noCheck?: boolean): Promise<TransportBinary[]>;
|
|
20
20
|
getContent(r3transConfig?: R3transOptions): Promise<any>;
|
|
21
21
|
static create(data: {
|
|
22
22
|
transports: Transport[];
|
|
@@ -94,7 +94,7 @@ class TrmArtifact {
|
|
|
94
94
|
}
|
|
95
95
|
return this._distFolder;
|
|
96
96
|
}
|
|
97
|
-
getTransportBinaries(r3transOption) {
|
|
97
|
+
getTransportBinaries(r3transOption, noCheck) {
|
|
98
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
99
99
|
var _a, _b;
|
|
100
100
|
if (!this._binaries) {
|
|
@@ -114,7 +114,14 @@ class TrmArtifact {
|
|
|
114
114
|
const oHeader = (_a = aPackedTransportEntries.find(o => o.comment === 'header')) === null || _a === void 0 ? void 0 : _a.getData();
|
|
115
115
|
const oData = (_b = aPackedTransportEntries.find(o => o.comment === 'data')) === null || _b === void 0 ? void 0 : _b.getData();
|
|
116
116
|
if (oHeader && oData) {
|
|
117
|
-
|
|
117
|
+
var trkorr;
|
|
118
|
+
if (noCheck) {
|
|
119
|
+
const filename = aPackedTransportEntries.find(o => o.comment === 'header').entryName;
|
|
120
|
+
trkorr = (filename.slice(-3) + filename.slice(0, -3)).slice(0, -1);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
trkorr = yield r3trans.getTransportTrkorr(oData);
|
|
124
|
+
}
|
|
118
125
|
aResult.push({
|
|
119
126
|
trkorr,
|
|
120
127
|
type: type,
|