@guanjinke/artifact-client 1.0.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/README.md +165 -0
- package/dist/artifact-client.d.ts +112 -0
- package/dist/artifact-client.d.ts.map +1 -0
- package/dist/artifact-client.js +167 -0
- package/dist/artifact-client.js.map +1 -0
- package/dist/cli/config-manager.d.ts +27 -0
- package/dist/cli/config-manager.d.ts.map +1 -0
- package/dist/cli/config-manager.js +107 -0
- package/dist/cli/config-manager.js.map +1 -0
- package/dist/cli/setup.d.ts +7 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +366 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/azure-provider.d.ts +40 -0
- package/dist/providers/azure-provider.d.ts.map +1 -0
- package/dist/providers/azure-provider.js +336 -0
- package/dist/providers/azure-provider.js.map +1 -0
- package/dist/providers/oss-provider.d.ts +39 -0
- package/dist/providers/oss-provider.d.ts.map +1 -0
- package/dist/providers/oss-provider.js +342 -0
- package/dist/providers/oss-provider.js.map +1 -0
- package/dist/providers/storage-provider.d.ts +50 -0
- package/dist/providers/storage-provider.d.ts.map +1 -0
- package/dist/providers/storage-provider.js +11 -0
- package/dist/providers/storage-provider.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/format.d.ts +9 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +17 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/semver.d.ts +46 -0
- package/dist/utils/semver.d.ts.map +1 -0
- package/dist/utils/semver.js +112 -0
- package/dist/utils/semver.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,342 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.OSSProvider = void 0;
|
|
40
|
+
const fs = __importStar(require("fs/promises"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const ali_oss_1 = __importDefault(require("ali-oss"));
|
|
43
|
+
const storage_provider_1 = require("./storage-provider");
|
|
44
|
+
const semver_1 = require("../utils/semver");
|
|
45
|
+
const format_1 = require("../utils/format");
|
|
46
|
+
const PLUGIN_ARTIFACTS_PREFIX = 'plugin_artifacts/';
|
|
47
|
+
/**
|
|
48
|
+
* Aliyun OSS (Object Storage Service) provider.
|
|
49
|
+
* Connects via access key ID + access key secret.
|
|
50
|
+
*/
|
|
51
|
+
class OSSProvider extends storage_provider_1.StorageProvider {
|
|
52
|
+
client;
|
|
53
|
+
constructor(config) {
|
|
54
|
+
super();
|
|
55
|
+
if (!config.keyId || !config.key) {
|
|
56
|
+
throw new Error('OSS config requires both keyId and key.');
|
|
57
|
+
}
|
|
58
|
+
this.client = new ali_oss_1.default({
|
|
59
|
+
region: config.region || 'oss-cn-hangzhou',
|
|
60
|
+
accessKeyId: config.keyId,
|
|
61
|
+
accessKeySecret: config.key,
|
|
62
|
+
bucket: config.bucket,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// ============================================================
|
|
66
|
+
// listPlugins
|
|
67
|
+
// ============================================================
|
|
68
|
+
async listPlugins(options) {
|
|
69
|
+
const includeSize = options?.includeSize ?? false;
|
|
70
|
+
const plugins = [];
|
|
71
|
+
const result = await this.client.list({ prefix: PLUGIN_ARTIFACTS_PREFIX, delimiter: '/' }, {});
|
|
72
|
+
if (result.prefixes) {
|
|
73
|
+
for (const prefix of result.prefixes) {
|
|
74
|
+
// Prefix looks like "plugin_artifacts/myPlugin/"
|
|
75
|
+
const name = prefix
|
|
76
|
+
.slice(PLUGIN_ARTIFACTS_PREFIX.length)
|
|
77
|
+
.replace(/\/$/, '');
|
|
78
|
+
if (!name)
|
|
79
|
+
continue;
|
|
80
|
+
const plugin = {
|
|
81
|
+
name,
|
|
82
|
+
path: prefix,
|
|
83
|
+
};
|
|
84
|
+
if (includeSize) {
|
|
85
|
+
plugin.totalSizeMB = await this.calculatePrefixSize(prefix);
|
|
86
|
+
}
|
|
87
|
+
plugins.push(plugin);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return plugins.sort((a, b) => a.name.localeCompare(b.name));
|
|
91
|
+
}
|
|
92
|
+
// ============================================================
|
|
93
|
+
// listMajorVersions
|
|
94
|
+
// ============================================================
|
|
95
|
+
async listMajorVersions(pluginName, options) {
|
|
96
|
+
const includeSize = options?.includeSize ?? false;
|
|
97
|
+
const majorMap = new Map();
|
|
98
|
+
const pluginPrefix = (0, semver_1.getPluginPrefix)(pluginName);
|
|
99
|
+
// List all entries under the plugin directory
|
|
100
|
+
const result = await this.client.list({ prefix: pluginPrefix, delimiter: '/' }, {});
|
|
101
|
+
if (result.prefixes) {
|
|
102
|
+
for (const prefix of result.prefixes) {
|
|
103
|
+
const dirName = prefix
|
|
104
|
+
.slice(pluginPrefix.length)
|
|
105
|
+
.replace(/\/$/, '');
|
|
106
|
+
if (!dirName)
|
|
107
|
+
continue;
|
|
108
|
+
const major = (0, semver_1.extractMajorMinor)(dirName);
|
|
109
|
+
if (!majorMap.has(major)) {
|
|
110
|
+
majorMap.set(major, {
|
|
111
|
+
majorVersion: major,
|
|
112
|
+
minorCount: 0,
|
|
113
|
+
path: `${pluginPrefix}${major}/`,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const entry = majorMap.get(major);
|
|
117
|
+
entry.minorCount++;
|
|
118
|
+
if (includeSize) {
|
|
119
|
+
const dirSize = await this.calculatePrefixSize(prefix);
|
|
120
|
+
entry.totalSizeMB = (entry.totalSizeMB ?? 0) + dirSize;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Read latest version tags from version files
|
|
125
|
+
for (const [major, info] of majorMap) {
|
|
126
|
+
try {
|
|
127
|
+
const latestVersion = await this.readLatestVersionFromFile(pluginName, major);
|
|
128
|
+
if (latestVersion) {
|
|
129
|
+
info.latestVersion = latestVersion;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// Version file may not exist yet
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const resultList = Array.from(majorMap.values());
|
|
137
|
+
// Sort
|
|
138
|
+
if (options?.sortOrder !== 'asc') {
|
|
139
|
+
resultList.sort((a, b) => {
|
|
140
|
+
if (a.majorVersion === 'dev')
|
|
141
|
+
return 1;
|
|
142
|
+
if (b.majorVersion === 'dev')
|
|
143
|
+
return -1;
|
|
144
|
+
return -this.compareMajorVersions(a.majorVersion, b.majorVersion);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
resultList.sort((a, b) => {
|
|
149
|
+
if (a.majorVersion === 'dev')
|
|
150
|
+
return 1;
|
|
151
|
+
if (b.majorVersion === 'dev')
|
|
152
|
+
return -1;
|
|
153
|
+
return this.compareMajorVersions(a.majorVersion, b.majorVersion);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return resultList;
|
|
157
|
+
}
|
|
158
|
+
// ============================================================
|
|
159
|
+
// getLatestVersion
|
|
160
|
+
// ============================================================
|
|
161
|
+
async getLatestVersion(pluginName, majorVersion, options) {
|
|
162
|
+
const latestVersion = await this.readLatestVersionFromFile(pluginName, majorVersion);
|
|
163
|
+
if (!latestVersion) {
|
|
164
|
+
throw new Error(`No latest version found for plugin "${pluginName}" major "${majorVersion}". ` +
|
|
165
|
+
`The version file may not exist or has no latestversion tag.`);
|
|
166
|
+
}
|
|
167
|
+
const version = {
|
|
168
|
+
version: latestVersion,
|
|
169
|
+
path: (0, semver_1.getVersionPrefix)(pluginName, latestVersion),
|
|
170
|
+
};
|
|
171
|
+
if (options?.includeSize) {
|
|
172
|
+
version.totalSizeMB = await this.calculatePrefixSize(version.path);
|
|
173
|
+
}
|
|
174
|
+
return version;
|
|
175
|
+
}
|
|
176
|
+
// ============================================================
|
|
177
|
+
// listMinorVersions
|
|
178
|
+
// ============================================================
|
|
179
|
+
async listMinorVersions(pluginName, majorVersion, options) {
|
|
180
|
+
const includeSize = options?.includeSize ?? false;
|
|
181
|
+
const versions = [];
|
|
182
|
+
const pluginPrefix = (0, semver_1.getPluginPrefix)(pluginName);
|
|
183
|
+
const result = await this.client.list({ prefix: pluginPrefix, delimiter: '/' }, {});
|
|
184
|
+
if (result.prefixes) {
|
|
185
|
+
for (const prefix of result.prefixes) {
|
|
186
|
+
const dirName = prefix
|
|
187
|
+
.slice(pluginPrefix.length)
|
|
188
|
+
.replace(/\/$/, '');
|
|
189
|
+
if (!dirName)
|
|
190
|
+
continue;
|
|
191
|
+
const major = (0, semver_1.extractMajorMinor)(dirName);
|
|
192
|
+
if (major !== majorVersion)
|
|
193
|
+
continue;
|
|
194
|
+
const version = {
|
|
195
|
+
version: dirName,
|
|
196
|
+
path: prefix,
|
|
197
|
+
};
|
|
198
|
+
if (includeSize) {
|
|
199
|
+
version.totalSizeMB = await this.calculatePrefixSize(prefix);
|
|
200
|
+
}
|
|
201
|
+
versions.push(version);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const versionStrings = versions.map(v => v.version);
|
|
205
|
+
const sorted = (0, semver_1.sortVersions)(versionStrings, options?.sortOrder ?? 'desc');
|
|
206
|
+
const versionMap = new Map(versions.map(v => [v.version, v]));
|
|
207
|
+
return sorted.map(v => versionMap.get(v)).filter(Boolean);
|
|
208
|
+
}
|
|
209
|
+
// ============================================================
|
|
210
|
+
// listArtifacts
|
|
211
|
+
// ============================================================
|
|
212
|
+
async listArtifacts(pluginName, version, options) {
|
|
213
|
+
const includeSize = options?.includeSize ?? false;
|
|
214
|
+
const artifacts = [];
|
|
215
|
+
const versionPrefix = (0, semver_1.getVersionPrefix)(pluginName, version);
|
|
216
|
+
const result = await this.client.list({ prefix: versionPrefix, delimiter: '/' }, {});
|
|
217
|
+
if (result.objects) {
|
|
218
|
+
for (const obj of result.objects) {
|
|
219
|
+
const fileName = obj.name.slice(versionPrefix.length);
|
|
220
|
+
if (!fileName)
|
|
221
|
+
continue;
|
|
222
|
+
const artifact = {
|
|
223
|
+
name: fileName,
|
|
224
|
+
path: obj.name,
|
|
225
|
+
};
|
|
226
|
+
if (includeSize && obj.size !== undefined) {
|
|
227
|
+
artifact.sizeMB = (0, format_1.bytesToMB)(obj.size);
|
|
228
|
+
}
|
|
229
|
+
artifacts.push(artifact);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return artifacts.sort((a, b) => a.name.localeCompare(b.name));
|
|
233
|
+
}
|
|
234
|
+
// ============================================================
|
|
235
|
+
// uploadArtifact
|
|
236
|
+
// ============================================================
|
|
237
|
+
async uploadArtifact(pluginName, version, artifactName, localFilePath) {
|
|
238
|
+
const objectName = (0, semver_1.getArtifactPath)(pluginName, version, artifactName);
|
|
239
|
+
// Upload the file
|
|
240
|
+
await this.client.put(objectName, localFilePath);
|
|
241
|
+
// Update the version file tag
|
|
242
|
+
const major = (0, semver_1.extractMajorMinor)(version);
|
|
243
|
+
await this.updateLatestVersion(pluginName, major, version);
|
|
244
|
+
}
|
|
245
|
+
// ============================================================
|
|
246
|
+
// downloadArtifactByPath
|
|
247
|
+
// ============================================================
|
|
248
|
+
async downloadArtifactByPath(fullPath, localDir) {
|
|
249
|
+
await fs.mkdir(localDir, { recursive: true });
|
|
250
|
+
const fileName = fullPath.split('/').pop() || 'artifact';
|
|
251
|
+
const localPath = path.join(localDir, fileName);
|
|
252
|
+
await this.client.get(fullPath, localPath);
|
|
253
|
+
}
|
|
254
|
+
// ============================================================
|
|
255
|
+
// downloadArtifact
|
|
256
|
+
// ============================================================
|
|
257
|
+
async downloadArtifact(pluginName, version, fileName, localDir) {
|
|
258
|
+
const objectPath = (0, semver_1.getArtifactPath)(pluginName, version, fileName);
|
|
259
|
+
return this.downloadArtifactByPath(objectPath, localDir);
|
|
260
|
+
}
|
|
261
|
+
// ============================================================
|
|
262
|
+
// Private helpers
|
|
263
|
+
// ============================================================
|
|
264
|
+
/**
|
|
265
|
+
* Calculate the total size in MB of all objects under a given prefix.
|
|
266
|
+
*/
|
|
267
|
+
async calculatePrefixSize(prefix) {
|
|
268
|
+
let totalBytes = 0;
|
|
269
|
+
let nextMarker;
|
|
270
|
+
do {
|
|
271
|
+
const result = await this.client.list({
|
|
272
|
+
prefix,
|
|
273
|
+
'max-keys': 1000,
|
|
274
|
+
marker: nextMarker,
|
|
275
|
+
}, {});
|
|
276
|
+
if (result.objects) {
|
|
277
|
+
for (const obj of result.objects) {
|
|
278
|
+
if (obj.size) {
|
|
279
|
+
totalBytes += obj.size;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
nextMarker = result.nextMarker || undefined;
|
|
284
|
+
} while (nextMarker);
|
|
285
|
+
return (0, format_1.bytesToMB)(totalBytes);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Read the latestversion tag from a version file.
|
|
289
|
+
*/
|
|
290
|
+
async readLatestVersionFromFile(pluginName, majorVersion) {
|
|
291
|
+
const filePath = (0, semver_1.getVersionFilePath)(pluginName, majorVersion);
|
|
292
|
+
try {
|
|
293
|
+
const tagging = await this.client.getObjectTagging(filePath);
|
|
294
|
+
return tagging?.latestversion ?? null;
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
if (err?.code === 'NoSuchKey' || err?.status === 404) {
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
throw err;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Create or update a version file with the latestversion tag.
|
|
305
|
+
*/
|
|
306
|
+
async updateLatestVersion(pluginName, majorVersion, latestVersion) {
|
|
307
|
+
const filePath = (0, semver_1.getVersionFilePath)(pluginName, majorVersion);
|
|
308
|
+
// Check if the version file exists
|
|
309
|
+
let exists = false;
|
|
310
|
+
try {
|
|
311
|
+
await this.client.head(filePath);
|
|
312
|
+
exists = true;
|
|
313
|
+
}
|
|
314
|
+
catch (err) {
|
|
315
|
+
if (err?.code !== 'NoSuchKey' && err?.status !== 404) {
|
|
316
|
+
throw err;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (!exists) {
|
|
320
|
+
// Create the version file with version as content
|
|
321
|
+
await this.client.put(filePath, Buffer.from(latestVersion));
|
|
322
|
+
}
|
|
323
|
+
// Set/update the latestversion tag
|
|
324
|
+
await this.client.putObjectTagging(filePath, { latestversion: latestVersion });
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Compare two major version strings.
|
|
328
|
+
*/
|
|
329
|
+
compareMajorVersions(a, b) {
|
|
330
|
+
const partsA = a.split('.').map(Number);
|
|
331
|
+
const partsB = b.split('.').map(Number);
|
|
332
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
333
|
+
const numA = partsA[i] ?? 0;
|
|
334
|
+
const numB = partsB[i] ?? 0;
|
|
335
|
+
if (numA !== numB)
|
|
336
|
+
return numA - numB;
|
|
337
|
+
}
|
|
338
|
+
return 0;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
exports.OSSProvider = OSSProvider;
|
|
342
|
+
//# sourceMappingURL=oss-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oss-provider.js","sourceRoot":"","sources":["../../src/providers/oss-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PluginInfo, MajorVersionInfo, VersionInfo, ArtifactInfo, ListOptions, GetLatestOptions } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Abstract base class for storage providers.
|
|
4
|
+
* Both Azure and OSS providers must implement all methods defined here.
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class StorageProvider {
|
|
7
|
+
/**
|
|
8
|
+
* List all plugins under the plugin_artifacts/ root directory.
|
|
9
|
+
*/
|
|
10
|
+
abstract listPlugins(options?: {
|
|
11
|
+
includeSize?: boolean;
|
|
12
|
+
}): Promise<PluginInfo[]>;
|
|
13
|
+
/**
|
|
14
|
+
* List all major versions for a given plugin.
|
|
15
|
+
* Major versions are derived from version files (version{major.minor}.txt / versiondev.txt)
|
|
16
|
+
* and directory scanning.
|
|
17
|
+
*/
|
|
18
|
+
abstract listMajorVersions(pluginName: string, options?: ListOptions): Promise<MajorVersionInfo[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Get the latest minor (patch) version for a given major version.
|
|
21
|
+
* This reads the latestversion metadata/tag from the version file.
|
|
22
|
+
*/
|
|
23
|
+
abstract getLatestVersion(pluginName: string, majorVersion: string, options?: GetLatestOptions): Promise<VersionInfo>;
|
|
24
|
+
/**
|
|
25
|
+
* List all minor (patch) versions under a given major version.
|
|
26
|
+
*/
|
|
27
|
+
abstract listMinorVersions(pluginName: string, majorVersion: string, options?: ListOptions): Promise<VersionInfo[]>;
|
|
28
|
+
/**
|
|
29
|
+
* List all artifacts for a specific version.
|
|
30
|
+
*/
|
|
31
|
+
abstract listArtifacts(pluginName: string, version: string, options?: {
|
|
32
|
+
includeSize?: boolean;
|
|
33
|
+
}): Promise<ArtifactInfo[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Upload a local file as an artifact to a specific plugin version directory.
|
|
36
|
+
* Also updates the latestversion metadata/tag on the corresponding version file.
|
|
37
|
+
*/
|
|
38
|
+
abstract uploadArtifact(pluginName: string, version: string, artifactName: string, localFilePath: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Download an artifact by its full storage path.
|
|
41
|
+
* e.g. "plugin_artifacts/myPlugin/1.0.5/foo.zip"
|
|
42
|
+
*/
|
|
43
|
+
abstract downloadArtifactByPath(fullPath: string, localDir: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Download an artifact by plugin name, version, and file name.
|
|
46
|
+
* The full path is constructed as plugin_artifacts/{plugin}/{version}/{fileName}.
|
|
47
|
+
*/
|
|
48
|
+
abstract downloadArtifact(pluginName: string, version: string, fileName: string, localDir: string): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=storage-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-provider.d.ts","sourceRoot":"","sources":["../../src/providers/storage-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,8BAAsB,eAAe;IACnC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAEhF;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAE9B;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CACvB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,WAAW,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CACxB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,WAAW,EAAE,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,aAAa,CACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAClC,OAAO,CAAC,YAAY,EAAE,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,sBAAsB,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageProvider = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base class for storage providers.
|
|
6
|
+
* Both Azure and OSS providers must implement all methods defined here.
|
|
7
|
+
*/
|
|
8
|
+
class StorageProvider {
|
|
9
|
+
}
|
|
10
|
+
exports.StorageProvider = StorageProvider;
|
|
11
|
+
//# sourceMappingURL=storage-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-provider.js","sourceRoot":"","sources":["../../src/providers/storage-provider.ts"],"names":[],"mappings":";;;AASA;;;GAGG;AACH,MAAsB,eAAe;CA0EpC;AA1ED,0CA0EC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export type StorageType = 'az' | 'oss';
|
|
2
|
+
export interface AzureConfig {
|
|
3
|
+
sasUrl: string;
|
|
4
|
+
}
|
|
5
|
+
export interface OSSConfig {
|
|
6
|
+
keyId: string;
|
|
7
|
+
key: string;
|
|
8
|
+
bucket?: string;
|
|
9
|
+
region?: string;
|
|
10
|
+
}
|
|
11
|
+
export type StorageConfig = AzureConfig | OSSConfig;
|
|
12
|
+
export interface CLIConfig {
|
|
13
|
+
az?: AzureConfig;
|
|
14
|
+
oss?: OSSConfig;
|
|
15
|
+
}
|
|
16
|
+
export interface PluginInfo {
|
|
17
|
+
/** Plugin name (directory name under plugin_artifacts) */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Full path prefix for this plugin, e.g. "plugin_artifacts/myPlugin/" */
|
|
20
|
+
path: string;
|
|
21
|
+
/** Total storage size in MB (optional) */
|
|
22
|
+
totalSizeMB?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface MajorVersionInfo {
|
|
25
|
+
/** Major version string, e.g. "1.0" or "dev" */
|
|
26
|
+
majorVersion: string;
|
|
27
|
+
/** Latest full semver under this major, e.g. "1.0.5" or "1.0.5-beta" */
|
|
28
|
+
latestVersion?: string;
|
|
29
|
+
/** Number of minor (patch) versions under this major */
|
|
30
|
+
minorCount: number;
|
|
31
|
+
/** Full path for this major version's directory prefix */
|
|
32
|
+
path: string;
|
|
33
|
+
/** Total storage size in MB of all minor versions under this major (optional) */
|
|
34
|
+
totalSizeMB?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface VersionInfo {
|
|
37
|
+
/** Full semantic version string, e.g. "1.0.5" */
|
|
38
|
+
version: string;
|
|
39
|
+
/** Full path to this version's directory, e.g. "plugin_artifacts/foo/1.0.5/" */
|
|
40
|
+
path: string;
|
|
41
|
+
/** Total storage size in MB (optional) */
|
|
42
|
+
totalSizeMB?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ArtifactInfo {
|
|
45
|
+
/** File name of the artifact */
|
|
46
|
+
name: string;
|
|
47
|
+
/** Full path to the artifact, e.g. "plugin_artifacts/foo/1.0.5/foo.zip" */
|
|
48
|
+
path: string;
|
|
49
|
+
/** File size in MB (optional) */
|
|
50
|
+
sizeMB?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface ListOptions {
|
|
53
|
+
/** Sort order for version lists. Default: 'desc' */
|
|
54
|
+
sortOrder?: 'asc' | 'desc';
|
|
55
|
+
/** Whether to include size calculations */
|
|
56
|
+
includeSize?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface GetLatestOptions {
|
|
59
|
+
/** Whether to include size calculations */
|
|
60
|
+
includeSize?: boolean;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC;AAMvC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;AAMpD,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAMD,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Storage type discriminator
|
|
4
|
+
// ============================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,6BAA6B;AAC7B,+DAA+D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format bytes to a human-readable MB string.
|
|
3
|
+
*/
|
|
4
|
+
export declare function bytesToMB(bytes: number): number;
|
|
5
|
+
/**
|
|
6
|
+
* Format a number to 2 decimal places for display.
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatSize(mb: number): string;
|
|
9
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bytesToMB = bytesToMB;
|
|
4
|
+
exports.formatSize = formatSize;
|
|
5
|
+
/**
|
|
6
|
+
* Format bytes to a human-readable MB string.
|
|
7
|
+
*/
|
|
8
|
+
function bytesToMB(bytes) {
|
|
9
|
+
return Math.round((bytes / (1024 * 1024)) * 100) / 100;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Format a number to 2 decimal places for display.
|
|
13
|
+
*/
|
|
14
|
+
function formatSize(mb) {
|
|
15
|
+
return `${mb.toFixed(2)} MB`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":";;AAGA,8BAEC;AAKD,gCAEC;AAZD;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAa;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,EAAU;IACnC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare two version strings following semver rules.
|
|
3
|
+
* Returns negative if a < b, zero if a == b, positive if a > b.
|
|
4
|
+
* Supports pre-release tags (e.g., 1.0.5-beta < 1.0.5).
|
|
5
|
+
*/
|
|
6
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
7
|
+
/**
|
|
8
|
+
* Sort an array of version strings by semver rules.
|
|
9
|
+
* Default order is descending (newest first).
|
|
10
|
+
*/
|
|
11
|
+
export declare function sortVersions(versions: string[], order?: 'asc' | 'desc'): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Extract the major.minor portion from a full semver string.
|
|
14
|
+
* e.g. "1.0.5" → "1.0", "2.3.1-beta" → "2.3", "0.0.3" → "dev"
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractMajorMinor(version: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a version is a dev version (major === 0 and minor === 0).
|
|
19
|
+
*/
|
|
20
|
+
export declare function isDevVersion(version: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Get the version file name for a given major version string.
|
|
23
|
+
* "1.0" → "version1.0.txt", "dev" → "versiondev.txt"
|
|
24
|
+
*/
|
|
25
|
+
export declare function getVersionFileName(majorVersion: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Build the version file path (blob/object key).
|
|
28
|
+
* e.g. "plugin_artifacts/myPlugin/version1.0.txt"
|
|
29
|
+
*/
|
|
30
|
+
export declare function getVersionFilePath(pluginName: string, majorVersion: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Build the directory prefix for a plugin.
|
|
33
|
+
* e.g. "plugin_artifacts/myPlugin/"
|
|
34
|
+
*/
|
|
35
|
+
export declare function getPluginPrefix(pluginName: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Build the directory prefix for a specific version of a plugin.
|
|
38
|
+
* e.g. "plugin_artifacts/myPlugin/1.0.5/"
|
|
39
|
+
*/
|
|
40
|
+
export declare function getVersionPrefix(pluginName: string, version: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Build the full path for a specific artifact.
|
|
43
|
+
* e.g. "plugin_artifacts/myPlugin/1.0.5/foo.zip"
|
|
44
|
+
*/
|
|
45
|
+
export declare function getArtifactPath(pluginName: string, version: string, fileName: string): string;
|
|
46
|
+
//# sourceMappingURL=semver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../../src/utils/semver.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,GAAE,KAAK,GAAG,MAAe,GAC7B,MAAM,EAAE,CAGV;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAezD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrD;AASD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,CAER"}
|