Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions app/composables/useInstallSizeDiff.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,15 @@ const DEP_INCREASE_THRESHOLD = 5
function getComparisonVersion(pkg: SlimPackument, resolvedVersion: string): string | null {
const isCurrentPrerelease = prerelease(resolvedVersion) !== null

if (isCurrentPrerelease) {
const latest = pkg['dist-tags']?.latest
if (!latest || latest === resolvedVersion) return null
return latest
}

// Find the previous version in time that was stable
const stableVersions = Object.keys(pkg.time)
.filter(v => v !== 'modified' && v !== 'created' && valid(v) !== null && prerelease(v) === null)
.sort((a, b) => compare(a, b))

if (isCurrentPrerelease) {
// Find the highest stable version before this prerelease in semver order
return stableVersions.findLast(v => compare(v, resolvedVersion) < 0) ?? null
}

const currentIdx = stableVersions.indexOf(resolvedVersion)
// Don't compare the second version against the first as the first
// has no baseline so a large size difference is expected
Expand Down
26 changes: 17 additions & 9 deletions test/nuxt/composables/use-install-size-diff.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ describe('useInstallSizeDiff', () => {
expect(comparisonVersion.value).toBe('1.0.0')
})

it('uses the latest dist-tag for a prerelease version', () => {
it('compares a prerelease against the previous stable version', () => {
const pkg = createPackage(
'test',
{ '1.0.0': '2020-01-01', '2.0.0-beta.1': '2021-01-01' },
Expand All @@ -95,20 +95,28 @@ describe('useInstallSizeDiff', () => {
expect(comparisonVersion.value).toBe('1.0.0')
})

it('returns null when the prerelease version is already latest', () => {
it('compares an old prerelease against the stable version before it, not latest', () => {
const pkg = createPackage(
'test',
{ '2.0.0-beta.1': '2021-01-01' },
{ latest: '2.0.0-beta.1' },
{
'1.16.0': '2024-01-01',
'1.17.0-alpha.0': '2024-02-01',
'1.18.0': '2024-03-01',
'1.50.0': '2025-01-01',
},
{ latest: '1.50.0' },
)

const { comparisonVersion } = useInstallSizeDiff('test', '2.0.0-beta.1', pkg, null)
expect(comparisonVersion.value).toBeNull()
const { comparisonVersion } = useInstallSizeDiff('test', '1.17.0-alpha.0', pkg, null)
expect(comparisonVersion.value).toBe('1.16.0')
})

it('returns null for a prerelease when there is no latest tag', () => {
const pkg = createPackage('test', { '2.0.0-beta.1': '2021-01-01' }, {})
pkg['dist-tags'] = {}
it('returns null for a prerelease with no prior stable versions', () => {
const pkg = createPackage(
'test',
{ '2.0.0-beta.1': '2021-01-01' },
{ latest: '2.0.0-beta.1' },
)

const { comparisonVersion } = useInstallSizeDiff('test', '2.0.0-beta.1', pkg, null)
expect(comparisonVersion.value).toBeNull()
Expand Down
Loading