diff --git a/app/composables/useInstallSizeDiff.ts b/app/composables/useInstallSizeDiff.ts index 0dd85206e..f28b4510d 100644 --- a/app/composables/useInstallSizeDiff.ts +++ b/app/composables/useInstallSizeDiff.ts @@ -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 diff --git a/test/nuxt/composables/use-install-size-diff.spec.ts b/test/nuxt/composables/use-install-size-diff.spec.ts index 100ca89f9..3faba4232 100644 --- a/test/nuxt/composables/use-install-size-diff.spec.ts +++ b/test/nuxt/composables/use-install-size-diff.spec.ts @@ -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' }, @@ -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()