fix(mod_update): try private registry (verdaccio.lossless.digital) first when fetching package versions; fall back to public npm; handle unknown latest versions gracefully in output
This commit is contained in:
@@ -128,8 +128,28 @@ export class PackageManagerUtil {
|
||||
|
||||
/**
|
||||
* Get the latest version of a package from npm registry
|
||||
* Tries private registry (verdaccio.lossless.digital) first via API, then falls back to public npm
|
||||
*/
|
||||
public async getLatestVersion(packageName: string): Promise<string | null> {
|
||||
// URL-encode the package name for scoped packages (@scope/name -> @scope%2fname)
|
||||
const encodedName = packageName.replace('/', '%2f');
|
||||
|
||||
// Try private registry first via direct API call (npm view doesn't work reliably)
|
||||
try {
|
||||
const result = await this.shell.execSilent(
|
||||
`curl -sf "https://verdaccio.lossless.digital/${encodedName}" 2>/dev/null`
|
||||
);
|
||||
if (result.exitCode === 0 && result.stdout.trim()) {
|
||||
const data = JSON.parse(result.stdout.trim());
|
||||
if (data['dist-tags']?.latest) {
|
||||
return data['dist-tags'].latest;
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// Continue to public registry
|
||||
}
|
||||
|
||||
// Fall back to public npm
|
||||
try {
|
||||
const result = await this.shell.execSilent(`npm view ${packageName} version 2>/dev/null`);
|
||||
if (result.exitCode === 0 && result.stdout.trim()) {
|
||||
|
||||
Reference in New Issue
Block a user