@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.
Files changed (46) hide show
  1. package/README.md +165 -0
  2. package/dist/artifact-client.d.ts +112 -0
  3. package/dist/artifact-client.d.ts.map +1 -0
  4. package/dist/artifact-client.js +167 -0
  5. package/dist/artifact-client.js.map +1 -0
  6. package/dist/cli/config-manager.d.ts +27 -0
  7. package/dist/cli/config-manager.d.ts.map +1 -0
  8. package/dist/cli/config-manager.js +107 -0
  9. package/dist/cli/config-manager.js.map +1 -0
  10. package/dist/cli/setup.d.ts +7 -0
  11. package/dist/cli/setup.d.ts.map +1 -0
  12. package/dist/cli/setup.js +366 -0
  13. package/dist/cli/setup.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +7 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/index.d.ts +6 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +13 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/providers/azure-provider.d.ts +40 -0
  23. package/dist/providers/azure-provider.d.ts.map +1 -0
  24. package/dist/providers/azure-provider.js +336 -0
  25. package/dist/providers/azure-provider.js.map +1 -0
  26. package/dist/providers/oss-provider.d.ts +39 -0
  27. package/dist/providers/oss-provider.d.ts.map +1 -0
  28. package/dist/providers/oss-provider.js +342 -0
  29. package/dist/providers/oss-provider.js.map +1 -0
  30. package/dist/providers/storage-provider.d.ts +50 -0
  31. package/dist/providers/storage-provider.d.ts.map +1 -0
  32. package/dist/providers/storage-provider.js +11 -0
  33. package/dist/providers/storage-provider.js.map +1 -0
  34. package/dist/types.d.ts +62 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +6 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/utils/format.d.ts +9 -0
  39. package/dist/utils/format.d.ts.map +1 -0
  40. package/dist/utils/format.js +17 -0
  41. package/dist/utils/format.js.map +1 -0
  42. package/dist/utils/semver.d.ts +46 -0
  43. package/dist/utils/semver.d.ts.map +1 -0
  44. package/dist/utils/semver.js +112 -0
  45. package/dist/utils/semver.js.map +1 -0
  46. 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"}
@@ -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"}