diff --git a/app/composables/useInstallSizeDiff.ts b/app/composables/useInstallSizeDiff.ts index 91e7d01b95..eaaaeedb8c 100644 --- a/app/composables/useInstallSizeDiff.ts +++ b/app/composables/useInstallSizeDiff.ts @@ -20,10 +20,10 @@ const SIZE_DECREASE_THRESHOLD = 0.2 const DEP_DECREASE_THRESHOLD = 3 function getComparisonVersion(pkg: SlimPackument, resolvedVersion: string): string | null { - const isCurrentPrerelease = getPrerelease(resolvedVersion) !== null + const isCurrentPrerelease = getPrerelease(resolvedVersion)?.length const stableVersions = Object.keys(pkg.time) - .filter(v => v !== 'modified' && v !== 'created' && isValid(v) && getPrerelease(v) === null) + .filter(v => v !== 'modified' && v !== 'created' && isValid(v) && !getPrerelease(v)?.length) .sort((a, b) => compare(a, b)) if (isCurrentPrerelease) { diff --git a/app/utils/versions.ts b/app/utils/versions.ts index f909751030..2d31c2cdc1 100644 --- a/app/utils/versions.ts +++ b/app/utils/versions.ts @@ -23,27 +23,6 @@ export interface ParsedVersion { prerelease: string } -/** - * Parse a semver stable version string into its components - * `@param` version - The version string (e.g., "1.2.3") - * `@returns` Parsed version object with major, minor, patch, or null for - * invalid versions and for prerelease versions (e.g., "1.0.0-beta.1") - */ -export function parseVersion(version: string): ParsedVersion { - const parsedVersion = tryParse(version) - - if (!parsedVersion) { - return { major: 0, minor: 0, patch: 0, prerelease: '' } - } - - return { - major: parsedVersion.major, - minor: parsedVersion.minor, - patch: parsedVersion.patch, - prerelease: parsedVersion.prerelease.join('.'), - } -} - /** * Parse a semver stable version string into its components * @param version - The version string (e.g., "1.2.3" or "1.0.0-beta.1") @@ -52,7 +31,7 @@ export function parseVersion(version: string): ParsedVersion { export function parseStableVersion(version: string): Omit | null { const parsedVersion = tryParse(version) - if (!parsedVersion || parsedVersion.prerelease.length > 0) { + if (!parsedVersion || parsedVersion.prerelease?.length) { return null } @@ -69,9 +48,9 @@ export function parseStableVersion(version: string): Omit=18.12.0'} vfile-location@5.0.3: @@ -22605,7 +22605,7 @@ snapshots: transitivePeerDependencies: - '@vue/composition-api' - verkit@0.1.2: {} + verkit@0.3.1: {} vfile-location@5.0.3: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1dacefae3d..0944327411 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -43,7 +43,6 @@ ignoreWorkspaceRootCheck: true minimumReleaseAgeExclude: - vue-data-ui@3.22.13 - - verkit@0.1.2 - module-replacements@3.1.0 overrides: diff --git a/test/unit/app/utils/versions.spec.ts b/test/unit/app/utils/versions.spec.ts index eeb58c60c5..9dd6f8359a 100644 --- a/test/unit/app/utils/versions.spec.ts +++ b/test/unit/app/utils/versions.spec.ts @@ -11,7 +11,6 @@ import { getVersionGroupLabel, isExactVersion, isSameVersionGroup, - parseVersion, parseStableVersion, sortTags, } from '~/utils/versions' @@ -49,55 +48,6 @@ describe('isExactVersion', () => { }) }) -describe('parseVersion', () => { - it('parses stable versions', () => { - expect(parseVersion('1.2.3')).toEqual({ - major: 1, - minor: 2, - patch: 3, - prerelease: '', - }) - }) - - it('parses prerelease versions', () => { - expect(parseVersion('1.0.0-beta.1')).toEqual({ - major: 1, - minor: 0, - patch: 0, - prerelease: 'beta.1', - }) - }) - - it('handles invalid versions gracefully', () => { - expect(parseVersion('invalid')).toEqual({ - major: 0, - minor: 0, - patch: 0, - prerelease: '', - }) - }) - - it('parses TypeScript-style versions', () => { - // TypeScript uses versions like 5.8.0-beta, 5.8.0-rc - expect(parseVersion('5.8.0-beta')).toEqual({ - major: 5, - minor: 8, - patch: 0, - prerelease: 'beta', - }) - }) - - it('parses Next.js canary versions', () => { - // Next.js uses versions like 15.3.0-canary.1 - expect(parseVersion('15.3.0-canary.1')).toEqual({ - major: 15, - minor: 3, - patch: 0, - prerelease: 'canary.1', - }) - }) -}) - describe('getPrereleaseChannel', () => { it('returns empty string for stable versions', () => { expect(getPrereleaseChannel('1.0.0')).toBe('') @@ -122,6 +72,11 @@ describe('getPrereleaseChannel', () => { it('handles versions with just channel name (TypeScript style)', () => { expect(getPrereleaseChannel('5.8.0-beta')).toBe('beta') }) + + it('handles versions with numerical prerelease channel name', () => { + expect(getPrereleaseChannel('3.0.0-0')).toBe('') + expect(getPrereleaseChannel('3.0.0-1')).toBe('') + }) }) describe('sortTags', () => {