fix(tooling): migrate project config and test tooling while hardening fuzzy version parsing

This commit is contained in:
2026-04-07 16:13:35 +00:00
parent d152a5d684
commit 028bb19a10
9 changed files with 7249 additions and 4812 deletions

View File

@@ -1,8 +1,8 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
* autocreated commitinfo by @push.rocks/commitinfo
*/
export const commitinfo = {
name: '@push.rocks/smartversion',
version: '3.0.5',
description: 'handle semver with ease'
version: '3.0.6',
description: 'A library to handle semantic versioning with ease.'
}

View File

@@ -2,10 +2,14 @@ import * as plugins from './smartversion.plugins.js';
export class SmartVersion {
public static fromFuzzyString(fuzzyString: string): SmartVersion {
return new SmartVersion(plugins.semver.minVersion(fuzzyString).version, fuzzyString);
const minVersion = plugins.semver.minVersion(fuzzyString);
if (!minVersion) {
throw new Error(`Cannot determine a minimum version from fuzzy string "${fuzzyString}".`);
}
return new SmartVersion(minVersion.version, fuzzyString);
}
public originalVersionString: string;
public originalVersionString: string | undefined;
public semver: plugins.semver.SemVer;
public get versionString(): string {
return this.semver.version;
@@ -53,13 +57,14 @@ export class SmartVersion {
/**
* tries to get the best match from a range of available versions
*/
public getBestMatch(availableVersions: string[]): string {
let bestMatchingVersion: string;
public getBestMatch(availableVersions: string[]): string | undefined {
const range = this.originalVersionString ?? this.versionString;
let bestMatchingVersion: string | undefined;
for (const versionArg of availableVersions) {
if (!plugins.semver.satisfies(versionArg, this.originalVersionString)) {
if (!plugins.semver.satisfies(versionArg, range)) {
continue;
}
if(!bestMatchingVersion) {
if (!bestMatchingVersion) {
bestMatchingVersion = versionArg;
} else {
if (plugins.semver.lt(bestMatchingVersion, versionArg)) {