@guanjinke/artifact-client 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -39,7 +39,6 @@ const path = __importStar(require("path"));
39
39
  const storage_blob_1 = require("@azure/storage-blob");
40
40
  const storage_provider_1 = require("./storage-provider");
41
41
  const semver_1 = require("../utils/semver");
42
- const semver_2 = require("semver");
43
42
  const format_1 = require("../utils/format");
44
43
  class AzureProvider extends storage_provider_1.StorageProvider {
45
44
  containerClient;
@@ -70,6 +69,7 @@ class AzureProvider extends storage_provider_1.StorageProvider {
70
69
  async listMajorVersions(pluginName, options) {
71
70
  const majorMap = new Map();
72
71
  const pluginPrefix = (0, semver_1.getPluginPrefix)(this.base, pluginName);
72
+ const fileNames = [];
73
73
  for await (const item of this.containerClient.listBlobsByHierarchy('/', {
74
74
  prefix: pluginPrefix,
75
75
  })) {
@@ -79,7 +79,8 @@ class AzureProvider extends storage_provider_1.StorageProvider {
79
79
  continue;
80
80
  const major = (0, semver_1.extractMajorMinor)(dirName);
81
81
  if (!majorMap.has(major)) {
82
- majorMap.set(major, { majorVersion: major, minorCount: 0, path: pluginPrefix + major + '/' });
82
+ // The dev major has no "dev/" directory, so keep the real 0.x path.
83
+ majorMap.set(major, { majorVersion: major, minorCount: 0, path: pluginPrefix + (0, semver_1.extractRawMajorMinor)(dirName) + '/' });
83
84
  }
84
85
  const entry = majorMap.get(major);
85
86
  entry.minorCount++;
@@ -87,28 +88,42 @@ class AzureProvider extends storage_provider_1.StorageProvider {
87
88
  entry.totalSizeMB = (entry.totalSizeMB ?? 0) + await this.calculatePrefixSize(item.name);
88
89
  }
89
90
  }
91
+ else if (item.kind === 'blob') {
92
+ fileNames.push(item.name.slice(pluginPrefix.length));
93
+ }
94
+ }
95
+ // Channel majors ("9.1-hotfix1", "9.0-en", ...) exist only as version files:
96
+ // their artifacts live in plain directories, so they cannot be counted.
97
+ for (const majorLabel of this.declaredMajorsIn(fileNames)) {
98
+ if (majorMap.has(majorLabel))
99
+ continue;
100
+ majorMap.set(majorLabel, { majorVersion: majorLabel, minorCount: 0, path: pluginPrefix });
90
101
  }
91
102
  for (const [major, info] of majorMap) {
92
103
  try {
93
104
  const v = await this.readLatestVersion(pluginName, major);
94
105
  if (v)
95
106
  info.latestVersion = v;
107
+ // A file-only major has no directory of its own: point at the version it names.
108
+ if (v && info.path === pluginPrefix)
109
+ info.path = (0, semver_1.getVersionPrefix)(this.base, pluginName, v);
96
110
  }
97
111
  catch { /* ok */ }
98
112
  }
99
- const result = Array.from(majorMap.values());
113
+ // Drop majors with neither directories nor a release pointer: an empty
114
+ // version file (e.g. a reserved "version10.0.txt") carries no information.
115
+ const result = Array.from(majorMap.values()).filter(info => info.minorCount > 0 || info.latestVersion);
100
116
  result.sort((a, b) => {
101
- if (a.majorVersion === 'dev')
102
- return 1;
103
- if (b.majorVersion === 'dev')
104
- return -1;
117
+ const rank = this.majorRank(a.majorVersion) - this.majorRank(b.majorVersion);
118
+ if (rank !== 0)
119
+ return rank;
105
120
  const cmp = this.compareMajorVersions(a.majorVersion, b.majorVersion);
106
121
  return options?.sortOrder === 'asc' ? cmp : -cmp;
107
122
  });
108
123
  return result;
109
124
  }
110
125
  async getLatestVersion(pluginName, majorVersion, options) {
111
- const latest = await this.readLatestVersion(pluginName, majorVersion);
126
+ const latest = await this.readLatestVersion(pluginName, (0, semver_1.normalizeMajorLabel)(majorVersion));
112
127
  if (!latest)
113
128
  throw new Error(`No latest version found for plugin "${pluginName}" major "${majorVersion}".`);
114
129
  const version = { version: latest, path: (0, semver_1.getVersionPrefix)(this.base, pluginName, latest) };
@@ -119,6 +134,7 @@ class AzureProvider extends storage_provider_1.StorageProvider {
119
134
  async listMinorVersions(pluginName, majorVersion, options) {
120
135
  const versions = [];
121
136
  const pluginPrefix = (0, semver_1.getPluginPrefix)(this.base, pluginName);
137
+ const majorLabel = (0, semver_1.normalizeMajorLabel)(majorVersion);
122
138
  for await (const item of this.containerClient.listBlobsByHierarchy('/', {
123
139
  prefix: pluginPrefix,
124
140
  })) {
@@ -126,7 +142,7 @@ class AzureProvider extends storage_provider_1.StorageProvider {
126
142
  const dirName = item.name.slice(pluginPrefix.length).replace(/\/$/, '');
127
143
  if (!dirName)
128
144
  continue;
129
- if ((0, semver_1.extractMajorMinor)(dirName) !== majorVersion)
145
+ if (!(0, semver_1.dirBelongsToMajor)(dirName, majorLabel))
130
146
  continue;
131
147
  const v = { version: dirName, path: item.name };
132
148
  if (options?.includeSize)
@@ -134,6 +150,13 @@ class AzureProvider extends storage_provider_1.StorageProvider {
134
150
  versions.push(v);
135
151
  }
136
152
  }
153
+ if (!versions.length) {
154
+ // A channel major such as "9.1-hotfix1" publishes into plain directories, so
155
+ // it cannot be enumerated; report the version its release points at.
156
+ const pointer = await this.readLatestVersion(pluginName, majorLabel);
157
+ if (pointer)
158
+ versions.push({ version: pointer, path: (0, semver_1.getVersionPrefix)(this.base, pluginName, pointer) });
159
+ }
137
160
  const sorted = (0, semver_1.sortVersions)(versions.map(v => v.version), options?.sortOrder ?? 'desc');
138
161
  const map = new Map(versions.map(v => [v.version, v]));
139
162
  return sorted.map(v => map.get(v)).filter(Boolean);
@@ -154,10 +177,10 @@ class AzureProvider extends storage_provider_1.StorageProvider {
154
177
  return artifacts.sort((a, b) => a.name.localeCompare(b.name));
155
178
  }
156
179
  async uploadArtifact(pluginName, version, artifactName, localFilePath) {
180
+ // Purely a write into the version directory: the major version pointers are
181
+ // updated separately via updateLatestVersion.
157
182
  const blobPath = (0, semver_1.getArtifactPath)(this.base, pluginName, version, artifactName);
158
183
  await this.containerClient.getBlockBlobClient(blobPath).uploadFile(localFilePath);
159
- const major = (0, semver_1.extractMajorMinor)(version);
160
- await this.updateLatestVersion(pluginName, major, version);
161
184
  }
162
185
  async downloadArtifactByPath(fullPath, localDir) {
163
186
  const fileName = fullPath.split('/').pop() || 'artifact';
@@ -200,22 +223,25 @@ class AzureProvider extends storage_provider_1.StorageProvider {
200
223
  // Fallback: scan directories
201
224
  return this.scanLatest(pluginName, majorVersion);
202
225
  }
203
- /** Scan version directories to find the latest matching major. */
204
- async scanLatest(pluginName, majorVersion) {
226
+ /** Scan version directories to find the latest version belonging to a major. */
227
+ async scanLatest(pluginName, majorLabel) {
205
228
  const pluginPrefix = (0, semver_1.getPluginPrefix)(this.base, pluginName);
206
229
  const versions = [];
207
230
  for await (const item of this.containerClient.listBlobsByHierarchy('/', { prefix: pluginPrefix })) {
208
231
  if (item.kind === 'prefix') {
209
232
  const v = item.name.slice(pluginPrefix.length).replace(/\/$/, '');
210
- if (v && (0, semver_1.extractMajorMinor)(v) === majorVersion)
233
+ if (v && (0, semver_1.dirBelongsToMajor)(v, majorLabel))
211
234
  versions.push(v);
212
235
  }
213
236
  }
214
237
  if (!versions.length)
215
238
  return null;
216
- versions.sort(semver_2.rcompare);
217
- return versions[0];
239
+ return (0, semver_1.sortVersions)(versions, 'desc')[0];
218
240
  }
241
+ /**
242
+ * Record `latestVersion` as the latest version of a major version: creates the
243
+ * majorLabel's version file when absent and refreshes its `latestversion` metadata.
244
+ */
219
245
  async updateLatestVersion(pluginName, majorVersion, latestVersion) {
220
246
  const fp = (0, semver_1.getVersionFilePath)(this.base, pluginName, majorVersion);
221
247
  const client = this.containerClient.getBlockBlobClient(fp);
@@ -235,13 +261,38 @@ class AzureProvider extends storage_provider_1.StorageProvider {
235
261
  await client.upload(latestVersion, latestVersion.length, { metadata: { latestversion: latestVersion } });
236
262
  }
237
263
  }
264
+ /** Version majors declared by the version files present in a plugin directory. */
265
+ declaredMajorsIn(fileNames) {
266
+ const majors = new Set();
267
+ for (const name of fileNames) {
268
+ const majorLabel = (0, semver_1.majorFromVersionFileName)(name);
269
+ if (majorLabel)
270
+ majors.add(majorLabel);
271
+ }
272
+ return Array.from(majors);
273
+ }
274
+ /**
275
+ * Sort rank for a major version: numeric product majors first, then labels whose
276
+ * shape we do not recognise (e.g. a legacy "sa3"), and dev last.
277
+ */
278
+ majorRank(majorLabel) {
279
+ if (majorLabel === 'dev')
280
+ return 2;
281
+ return (0, semver_1.parseMajorLabel)(majorLabel).core ? 0 : 1;
282
+ }
238
283
  compareMajorVersions(a, b) {
239
- const pa = a.split('.').map(Number), pb = b.split('.').map(Number);
284
+ const pa = this.majorParts(a), pb = this.majorParts(b);
240
285
  for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
241
286
  if ((pa[i] ?? 0) !== (pb[i] ?? 0))
242
287
  return (pa[i] ?? 0) - (pb[i] ?? 0);
243
288
  }
244
- return 0;
289
+ // Same numeric core (e.g. "9.1" vs "9.1-hotfix1"): order by the label itself.
290
+ return a.localeCompare(b);
291
+ }
292
+ /** Numeric core segments of a major version, e.g. "9.1-hotfix1" → [9, 1]. */
293
+ majorParts(majorLabel) {
294
+ const core = (0, semver_1.parseMajorLabel)(majorLabel).core;
295
+ return core ? core.split('.').map(Number) : [];
245
296
  }
246
297
  }
247
298
  exports.AzureProvider = AzureProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"azure-provider.js","sourceRoot":"","sources":["../../src/providers/azure-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"azure-provider.js","sourceRoot":"","sources":["../../src/providers/azure-provider.ts"],"names":[],"mappings":"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"}
@@ -17,12 +17,35 @@ export declare class OSSProvider extends StorageProvider {
17
17
  downloadArtifactByPath(fullPath: string, localDir: string): Promise<void>;
18
18
  downloadArtifact(pluginName: string, version: string, fileName: string, localDir: string): Promise<void>;
19
19
  downloadVersion(pluginName: string, version: string, localDir: string): Promise<string[]>;
20
+ /**
21
+ * List every prefix and object matching a query, following OSS pagination.
22
+ *
23
+ * A single ListObjects call only returns one page: the server defaults to 100
24
+ * entries and `max-keys` caps it at 1000. Callers that issue one request lose
25
+ * everything beyond the first page, which silently under-reports plugins,
26
+ * versions and artifacts. Keep requesting pages until the backend reports
27
+ * `isTruncated === false`.
28
+ */
29
+ private listAll;
20
30
  private calculatePrefixSize;
21
31
  /** Read latest version from tag, falling back to directory scanning. */
22
32
  private readLatestVersion;
23
- /** Scan version directories to find the latest matching major. */
33
+ /** Scan version directories to find the latest version belonging to a major. */
24
34
  private scanLatest;
25
- private updateLatestVersion;
35
+ /**
36
+ * Record `latestVersion` as the latest version of a major version: creates the
37
+ * majorLabel's version file when absent and refreshes its `latestversion` tag.
38
+ */
39
+ updateLatestVersion(pluginName: string, majorVersion: string, latestVersion: string): Promise<void>;
40
+ /** Version majors declared by the version files present in a plugin directory. */
41
+ private declaredMajorsIn;
42
+ /**
43
+ * Sort rank for a major version: numeric product majors first, then labels whose
44
+ * shape we do not recognise (e.g. a legacy "sa3"), and dev last.
45
+ */
46
+ private majorRank;
26
47
  private compareMajorVersions;
48
+ /** Numeric core segments of a major version, e.g. "9.1-hotfix1" → [9, 1]. */
49
+ private majorParts;
27
50
  }
28
51
  //# sourceMappingURL=oss-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oss-provider.d.ts","sourceRoot":"","sources":["../../src/providers/oss-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAYlB,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,EAAE,SAAS;IAYvB,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBvE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAqCzF,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ5G,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAsB1G,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmBhH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/G,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAUjF,mBAAmB;IAUjC,wEAAwE;YAC1D,iBAAiB;IAa/B,kEAAkE;YACpD,UAAU;YAYV,mBAAmB;IAUjC,OAAO,CAAC,oBAAoB;CAO7B"}
1
+ {"version":3,"file":"oss-provider.d.ts","sourceRoot":"","sources":["../../src/providers/oss-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AA0BlB,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,EAAE,SAAS;IAYvB,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiBvE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiDzF,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ5G,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4B1G,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiBhH,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAOV,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU/F;;;;;;;;OAQG;YACW,OAAO;YA0BP,mBAAmB;IASjC,wEAAwE;YAC1D,iBAAiB;IAa/B,gFAAgF;YAClE,UAAU;IAUxB;;;OAGG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzG,kFAAkF;IAClF,OAAO,CAAC,gBAAgB;IASxB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,oBAAoB;IAS5B,6EAA6E;IAC7E,OAAO,CAAC,UAAU;CAInB"}
@@ -42,8 +42,9 @@ const path = __importStar(require("path"));
42
42
  const ali_oss_1 = __importDefault(require("ali-oss"));
43
43
  const storage_provider_1 = require("./storage-provider");
44
44
  const semver_1 = require("../utils/semver");
45
- const semver_2 = require("semver");
46
45
  const format_1 = require("../utils/format");
46
+ /** Entries requested per ListObjects call. OSS caps `max-keys` at 1000. */
47
+ const LIST_PAGE_SIZE = 1000;
47
48
  class OSSProvider extends storage_provider_1.StorageProvider {
48
49
  client;
49
50
  base;
@@ -62,58 +63,66 @@ class OSSProvider extends storage_provider_1.StorageProvider {
62
63
  async listPlugins(options) {
63
64
  const plugins = [];
64
65
  const prefix = this.base ? this.base + '/' : '';
65
- const result = await this.client.list({ prefix, delimiter: '/' }, {});
66
- if (result.prefixes) {
67
- for (const p of result.prefixes) {
68
- const name = p.slice(prefix.length).replace(/\/$/, '');
69
- if (!name)
70
- continue;
71
- const plugin = { name, path: p };
72
- if (options?.includeSize)
73
- plugin.totalSizeMB = await this.calculatePrefixSize(p);
74
- plugins.push(plugin);
75
- }
66
+ const { prefixes } = await this.listAll({ prefix, delimiter: '/' });
67
+ for (const p of prefixes) {
68
+ const name = p.slice(prefix.length).replace(/\/$/, '');
69
+ if (!name)
70
+ continue;
71
+ const plugin = { name, path: p };
72
+ if (options?.includeSize)
73
+ plugin.totalSizeMB = await this.calculatePrefixSize(p);
74
+ plugins.push(plugin);
76
75
  }
77
76
  return plugins.sort((a, b) => a.name.localeCompare(b.name));
78
77
  }
79
78
  async listMajorVersions(pluginName, options) {
80
79
  const majorMap = new Map();
81
80
  const pluginPrefix = (0, semver_1.getPluginPrefix)(this.base, pluginName);
82
- const result = await this.client.list({ prefix: pluginPrefix, delimiter: '/' }, {});
83
- if (result.prefixes) {
84
- for (const p of result.prefixes) {
85
- const dirName = p.slice(pluginPrefix.length).replace(/\/$/, '');
86
- if (!dirName)
87
- continue;
88
- const major = (0, semver_1.extractMajorMinor)(dirName);
89
- if (!majorMap.has(major)) {
90
- majorMap.set(major, { majorVersion: major, minorCount: 0, path: pluginPrefix + major + '/' });
91
- }
92
- const entry = majorMap.get(major);
93
- entry.minorCount++;
94
- if (options?.includeSize) {
95
- entry.totalSizeMB = (entry.totalSizeMB ?? 0) + await this.calculatePrefixSize(p);
96
- }
81
+ const { prefixes, objects } = await this.listAll({ prefix: pluginPrefix, delimiter: '/' });
82
+ for (const p of prefixes) {
83
+ const dirName = p.slice(pluginPrefix.length).replace(/\/$/, '');
84
+ if (!dirName)
85
+ continue;
86
+ const major = (0, semver_1.extractMajorMinor)(dirName);
87
+ if (!majorMap.has(major)) {
88
+ // The dev major has no "dev/" directory, so keep the real 0.x path.
89
+ majorMap.set(major, { majorVersion: major, minorCount: 0, path: pluginPrefix + (0, semver_1.extractRawMajorMinor)(dirName) + '/' });
90
+ }
91
+ const entry = majorMap.get(major);
92
+ entry.minorCount++;
93
+ if (options?.includeSize) {
94
+ entry.totalSizeMB = (entry.totalSizeMB ?? 0) + await this.calculatePrefixSize(p);
97
95
  }
98
96
  }
97
+ // Channel majors ("9.1-hotfix1", "9.0-en", ...) exist only as version files:
98
+ // their artifacts live in plain directories, so they cannot be counted.
99
+ for (const majorLabel of this.declaredMajorsIn(objects.map(o => o.name.slice(pluginPrefix.length)))) {
100
+ if (majorMap.has(majorLabel))
101
+ continue;
102
+ majorMap.set(majorLabel, { majorVersion: majorLabel, minorCount: 0, path: pluginPrefix });
103
+ }
99
104
  for (const [major, info] of majorMap) {
100
105
  const v = await this.readLatestVersion(pluginName, major);
101
106
  if (v)
102
107
  info.latestVersion = v;
108
+ // A file-only major has no directory of its own: point at the version it names.
109
+ if (v && info.path === pluginPrefix)
110
+ info.path = (0, semver_1.getVersionPrefix)(this.base, pluginName, v);
103
111
  }
104
- const resultList = Array.from(majorMap.values());
112
+ // Drop majors with neither directories nor a release pointer: an empty
113
+ // version file (e.g. a reserved "version10.0.txt") carries no information.
114
+ const resultList = Array.from(majorMap.values()).filter(info => info.minorCount > 0 || info.latestVersion);
105
115
  resultList.sort((a, b) => {
106
- if (a.majorVersion === 'dev')
107
- return 1;
108
- if (b.majorVersion === 'dev')
109
- return -1;
116
+ const rank = this.majorRank(a.majorVersion) - this.majorRank(b.majorVersion);
117
+ if (rank !== 0)
118
+ return rank;
110
119
  const cmp = this.compareMajorVersions(a.majorVersion, b.majorVersion);
111
120
  return options?.sortOrder === 'asc' ? cmp : -cmp;
112
121
  });
113
122
  return resultList;
114
123
  }
115
124
  async getLatestVersion(pluginName, majorVersion, options) {
116
- const latest = await this.readLatestVersion(pluginName, majorVersion);
125
+ const latest = await this.readLatestVersion(pluginName, (0, semver_1.normalizeMajorLabel)(majorVersion));
117
126
  if (!latest)
118
127
  throw new Error(`No latest version found for plugin "${pluginName}" major "${majorVersion}".`);
119
128
  const version = { version: latest, path: (0, semver_1.getVersionPrefix)(this.base, pluginName, latest) };
@@ -124,19 +133,25 @@ class OSSProvider extends storage_provider_1.StorageProvider {
124
133
  async listMinorVersions(pluginName, majorVersion, options) {
125
134
  const versions = [];
126
135
  const pluginPrefix = (0, semver_1.getPluginPrefix)(this.base, pluginName);
127
- const result = await this.client.list({ prefix: pluginPrefix, delimiter: '/' }, {});
128
- if (result.prefixes) {
129
- for (const p of result.prefixes) {
130
- const dirName = p.slice(pluginPrefix.length).replace(/\/$/, '');
131
- if (!dirName)
132
- continue;
133
- if ((0, semver_1.extractMajorMinor)(dirName) !== majorVersion)
134
- continue;
135
- const v = { version: dirName, path: p };
136
- if (options?.includeSize)
137
- v.totalSizeMB = await this.calculatePrefixSize(p);
138
- versions.push(v);
139
- }
136
+ const majorLabel = (0, semver_1.normalizeMajorLabel)(majorVersion);
137
+ const { prefixes } = await this.listAll({ prefix: pluginPrefix, delimiter: '/' });
138
+ for (const p of prefixes) {
139
+ const dirName = p.slice(pluginPrefix.length).replace(/\/$/, '');
140
+ if (!dirName)
141
+ continue;
142
+ if (!(0, semver_1.dirBelongsToMajor)(dirName, majorLabel))
143
+ continue;
144
+ const v = { version: dirName, path: p };
145
+ if (options?.includeSize)
146
+ v.totalSizeMB = await this.calculatePrefixSize(p);
147
+ versions.push(v);
148
+ }
149
+ if (!versions.length) {
150
+ // A channel major such as "9.1-hotfix1" publishes into plain directories, so
151
+ // it cannot be enumerated; report the version its release points at.
152
+ const pointer = await this.readLatestVersion(pluginName, majorLabel);
153
+ if (pointer)
154
+ versions.push({ version: pointer, path: (0, semver_1.getVersionPrefix)(this.base, pluginName, pointer) });
140
155
  }
141
156
  const sorted = (0, semver_1.sortVersions)(versions.map(v => v.version), options?.sortOrder ?? 'desc');
142
157
  const map = new Map(versions.map(v => [v.version, v]));
@@ -145,25 +160,23 @@ class OSSProvider extends storage_provider_1.StorageProvider {
145
160
  async listArtifacts(pluginName, version, options) {
146
161
  const artifacts = [];
147
162
  const versionPrefix = (0, semver_1.getVersionPrefix)(this.base, pluginName, version);
148
- const result = await this.client.list({ prefix: versionPrefix }, {});
149
- if (result.objects) {
150
- for (const obj of result.objects) {
151
- const fileName = obj.name.slice(versionPrefix.length);
152
- if (!fileName)
153
- continue;
154
- const a = { name: fileName, path: obj.name };
155
- if (options?.includeSize && obj.size !== undefined)
156
- a.sizeMB = (0, format_1.bytesToMB)(obj.size);
157
- artifacts.push(a);
158
- }
163
+ const { objects } = await this.listAll({ prefix: versionPrefix });
164
+ for (const obj of objects) {
165
+ const fileName = obj.name.slice(versionPrefix.length);
166
+ if (!fileName)
167
+ continue;
168
+ const a = { name: fileName, path: obj.name };
169
+ if (options?.includeSize && obj.size !== undefined)
170
+ a.sizeMB = (0, format_1.bytesToMB)(obj.size);
171
+ artifacts.push(a);
159
172
  }
160
173
  return artifacts.sort((a, b) => a.name.localeCompare(b.name));
161
174
  }
162
175
  async uploadArtifact(pluginName, version, artifactName, localFilePath) {
176
+ // Purely a write into the version directory: the major version pointers are
177
+ // updated separately via updateLatestVersion.
163
178
  const objectName = (0, semver_1.getArtifactPath)(this.base, pluginName, version, artifactName);
164
179
  await this.client.put(objectName, localFilePath);
165
- const major = (0, semver_1.extractMajorMinor)(version);
166
- await this.updateLatestVersion(pluginName, major, version);
167
180
  }
168
181
  async downloadArtifactByPath(fullPath, localDir) {
169
182
  await fs.mkdir(localDir, { recursive: true });
@@ -183,17 +196,42 @@ class OSSProvider extends storage_provider_1.StorageProvider {
183
196
  }
184
197
  return downloaded;
185
198
  }
199
+ /**
200
+ * List every prefix and object matching a query, following OSS pagination.
201
+ *
202
+ * A single ListObjects call only returns one page: the server defaults to 100
203
+ * entries and `max-keys` caps it at 1000. Callers that issue one request lose
204
+ * everything beyond the first page, which silently under-reports plugins,
205
+ * versions and artifacts. Keep requesting pages until the backend reports
206
+ * `isTruncated === false`.
207
+ */
208
+ async listAll(query) {
209
+ const prefixSet = new Set();
210
+ const objects = [];
211
+ let marker;
212
+ for (;;) {
213
+ const result = await this.client.list({ ...query, 'max-keys': LIST_PAGE_SIZE, ...(marker ? { marker } : {}) }, {});
214
+ for (const p of result.prefixes ?? [])
215
+ prefixSet.add(p);
216
+ for (const obj of result.objects ?? [])
217
+ objects.push(obj);
218
+ if (!result.isTruncated)
219
+ break;
220
+ // Defensive: never loop forever if the backend truncates without a marker.
221
+ const next = result.nextMarker ?? undefined;
222
+ if (!next || next === marker)
223
+ break;
224
+ marker = next;
225
+ }
226
+ return { prefixes: Array.from(prefixSet), objects };
227
+ }
186
228
  async calculatePrefixSize(prefix) {
187
- let bytes = 0, marker;
188
- do {
189
- const result = await this.client.list({ prefix, 'max-keys': 1000, marker }, {});
190
- if (result.objects)
191
- for (const obj of result.objects) {
192
- if (obj.size)
193
- bytes += obj.size;
194
- }
195
- marker = result.nextMarker || undefined;
196
- } while (marker);
229
+ const { objects } = await this.listAll({ prefix });
230
+ let bytes = 0;
231
+ for (const obj of objects) {
232
+ if (obj.size)
233
+ bytes += obj.size;
234
+ }
197
235
  return (0, format_1.bytesToMB)(bytes);
198
236
  }
199
237
  /** Read latest version from tag, falling back to directory scanning. */
@@ -212,20 +250,21 @@ class OSSProvider extends storage_provider_1.StorageProvider {
212
250
  // Fallback: scan directories
213
251
  return this.scanLatest(pluginName, majorVersion);
214
252
  }
215
- /** Scan version directories to find the latest matching major. */
216
- async scanLatest(pluginName, majorVersion) {
253
+ /** Scan version directories to find the latest version belonging to a major. */
254
+ async scanLatest(pluginName, majorLabel) {
217
255
  const pluginPrefix = (0, semver_1.getPluginPrefix)(this.base, pluginName);
218
- const result = await this.client.list({ prefix: pluginPrefix, delimiter: '/' }, {});
219
- if (!result.prefixes)
220
- return null;
221
- const versions = result.prefixes
256
+ const { prefixes } = await this.listAll({ prefix: pluginPrefix, delimiter: '/' });
257
+ const versions = prefixes
222
258
  .map(p => p.slice(pluginPrefix.length).replace(/\/$/, ''))
223
- .filter(v => v && (0, semver_1.extractMajorMinor)(v) === majorVersion);
259
+ .filter(v => v && (0, semver_1.dirBelongsToMajor)(v, majorLabel));
224
260
  if (!versions.length)
225
261
  return null;
226
- versions.sort(semver_2.rcompare);
227
- return versions[0];
262
+ return (0, semver_1.sortVersions)(versions, 'desc')[0];
228
263
  }
264
+ /**
265
+ * Record `latestVersion` as the latest version of a major version: creates the
266
+ * majorLabel's version file when absent and refreshes its `latestversion` tag.
267
+ */
229
268
  async updateLatestVersion(pluginName, majorVersion, latestVersion) {
230
269
  const fp = (0, semver_1.getVersionFilePath)(this.base, pluginName, majorVersion);
231
270
  let exists = false;
@@ -241,13 +280,38 @@ class OSSProvider extends storage_provider_1.StorageProvider {
241
280
  await this.client.put(fp, Buffer.from(latestVersion));
242
281
  await this.client.putObjectTagging(fp, { latestversion: latestVersion });
243
282
  }
283
+ /** Version majors declared by the version files present in a plugin directory. */
284
+ declaredMajorsIn(fileNames) {
285
+ const majors = new Set();
286
+ for (const name of fileNames) {
287
+ const majorLabel = (0, semver_1.majorFromVersionFileName)(name);
288
+ if (majorLabel)
289
+ majors.add(majorLabel);
290
+ }
291
+ return Array.from(majors);
292
+ }
293
+ /**
294
+ * Sort rank for a major version: numeric product majors first, then labels whose
295
+ * shape we do not recognise (e.g. a legacy "sa3"), and dev last.
296
+ */
297
+ majorRank(majorLabel) {
298
+ if (majorLabel === 'dev')
299
+ return 2;
300
+ return (0, semver_1.parseMajorLabel)(majorLabel).core ? 0 : 1;
301
+ }
244
302
  compareMajorVersions(a, b) {
245
- const pa = a.split('.').map(Number), pb = b.split('.').map(Number);
303
+ const pa = this.majorParts(a), pb = this.majorParts(b);
246
304
  for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
247
305
  if ((pa[i] ?? 0) !== (pb[i] ?? 0))
248
306
  return (pa[i] ?? 0) - (pb[i] ?? 0);
249
307
  }
250
- return 0;
308
+ // Same numeric core (e.g. "9.1" vs "9.1-hotfix1"): order by the label itself.
309
+ return a.localeCompare(b);
310
+ }
311
+ /** Numeric core segments of a major version, e.g. "9.1-hotfix1" → [9, 1]. */
312
+ majorParts(majorLabel) {
313
+ const core = (0, semver_1.parseMajorLabel)(majorLabel).core;
314
+ return core ? core.split('.').map(Number) : [];
251
315
  }
252
316
  }
253
317
  exports.OSSProvider = OSSProvider;