static compareVersions(a: string, b: string): number {
const parse = (v: string) =>
v.split('.').map(part => parseInt(part, 10))
.map(n => (Number.isNaN(n) ? 0 : n));
const pa = parse(a);
const pb = parse(b);
const len = Math.max(pa.length, pb.length);
for (let i = 0; i < len; i++) {
const na = pa[i] ?? 0;
const nb = pb[i] ?? 0;
if (na < nb) return -1;
if (na > nb) return 1;
}
return 0;
}