Skip to content

Commit 99ec409

Browse files
fix(main-page): fix some releases not being marked as maintenance
1 parent 051f846 commit 99ec409

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

src/routes/package/[...package]/+page.svelte

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,22 @@
3636
? undefined
3737
: data.releases.toSorted((a, b) => semver.rcompare(a.cleanVersion, b.cleanVersion))[0]
3838
);
39-
let earliestOfLatestMajor = $derived(
40-
data.currentPackage.category.slug === ALL_SLUG
41-
? undefined
42-
: data.releases
43-
.filter(
44-
({ prerelease, cleanVersion }) =>
45-
(latestRelease
46-
? semver.major(cleanVersion) === semver.major(latestRelease.cleanVersion)
47-
: false) && !prerelease
48-
)
49-
.sort((a, b) => semver.compare(a.cleanVersion, b.cleanVersion))[0]
50-
);
39+
let earliestForMajors = $derived.by<Record<number, (typeof data.releases)[number]>>(() => {
40+
if (data.currentPackage.category.slug === ALL_SLUG) return {};
41+
const allWithSemver = data.releases
42+
.map(release => ({ coerced: semver.coerce(release.cleanVersion), ...release }))
43+
.filter(({ coerced }) => coerced);
44+
const uniqueMajors = [...new Set(allWithSemver.map(({ coerced }) => coerced!.major))];
45+
return Object.fromEntries(
46+
uniqueMajors.map(major => {
47+
const sorted = allWithSemver
48+
.filter(({ coerced, prerelease }) => coerced!.major === major && !prerelease)
49+
.sort((a, b) => semver.compare(a.coerced!, b.coerced!));
50+
const { coerced, ...rest } = sorted[0]!;
51+
return [major, rest];
52+
})
53+
);
54+
});
5155
const sharedSettings = getPackageSettings();
5256
let packageSettings = $derived(sharedSettings.get(data.currentPackage.pkg.name));
5357
@@ -242,25 +246,27 @@
242246
{/if}
243247
{#each displayableReleases as release, index (release.id)}
244248
{@const semVersion = semver.coerce(release.cleanVersion)}
249+
{@const semLatest = semver.coerce(latestRelease?.cleanVersion)}
245250
{@const isMajorRelease =
246251
!release.prerelease &&
247252
semVersion?.minor === 0 &&
248253
semVersion?.patch === 0 &&
249254
!semVersion?.prerelease.length}
250-
{@const releaseDate = new Date(release.published_at ?? release.created_at)}
251-
{@const isLatest = release.id === latestRelease?.id}
252-
{@const isMaintenance = earliestOfLatestMajor
253-
? !isMajorRelease &&
254-
/* `semVersion` and `latestRelease` can't be undefined here */
255-
semVersion!.major < semver.major(latestRelease!.cleanVersion) &&
256-
releaseDate >
257-
new Date(earliestOfLatestMajor.published_at ?? earliestOfLatestMajor.created_at)
258-
: false}
255+
{@const earliestOfNextMajor = semVersion
256+
? earliestForMajors[semVersion.major + 1]
257+
: undefined}
258+
{@const isMaintenance =
259+
semVersion && semLatest && earliestOfNextMajor
260+
? !isMajorRelease &&
261+
semVersion.major < semLatest.major &&
262+
new Date(release.published_at ?? release.created_at) >
263+
new Date(earliestOfNextMajor.published_at ?? earliestOfNextMajor.created_at)
264+
: false}
259265
<ReleaseCard
260266
{index}
261267
repo={{ owner: data.currentPackage.repoOwner, name: data.currentPackage.repoName }}
262268
{release}
263-
{isLatest}
269+
isLatest={release.id === latestRelease?.id}
264270
{isMaintenance}
265271
/>
266272
{:else}

0 commit comments

Comments
 (0)