Skip to content

Commit

Permalink
fix: more accurate scoring, remove scoring for empty packages (jsr-io#73
Browse files Browse the repository at this point in the history
)
  • Loading branch information
crowlKats authored Mar 1, 2024
1 parent 12fc5ca commit 8ab53c9
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 38 deletions.
9 changes: 6 additions & 3 deletions api/src/api/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ impl From<(&PackageVersionMeta, &Package)> for ApiPackageScore {
}

// You only need to document 80% of your symbols to get all the points.
score += ((meta.percentage_documented_symbols + 0.2).min(1.0) * 5.0).floor()
score += ((meta.percentage_documented_symbols / 0.8).min(1.0) * 5.0).floor()
as u32;

if meta.all_fast_check {
Expand Down Expand Up @@ -427,7 +427,7 @@ pub struct ApiPackage {
pub updated_at: DateTime<Utc>,
pub created_at: DateTime<Utc>,
pub version_count: u64,
pub score: u32,
pub score: Option<u32>,
pub latest_version: Option<String>,
pub when_featured: Option<DateTime<Utc>>,
}
Expand All @@ -447,7 +447,10 @@ impl From<PackageWithGitHubRepoAndMeta> for ApiPackage {
updated_at: package.updated_at,
created_at: package.created_at,
version_count: package.version_count as u64,
score: score.score_percentage(),
score: package
.latest_version
.as_ref()
.map(|_| score.score_percentage()),
latest_version: package.latest_version,
when_featured: package.when_featured,
}
Expand Down
5 changes: 4 additions & 1 deletion api/src/orama.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@ impl OramaClient {
package: &Package,
meta: &PackageVersionMeta,
) -> Result<(), anyhow::Error> {
let score = ApiPackageScore::from((meta, package)).score_percentage();
let score = package
.latest_version
.as_ref()
.map(|_| ApiPackageScore::from((meta, package)).score_percentage());

let id = format!("@{}/{}", package.scope, package.name);
let res = self
Expand Down
23 changes: 13 additions & 10 deletions frontend/components/PackageHit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,22 @@ export function PackageHit(pkg: OramaPackageHit | Package): ListDisplayItem {
<RuntimeCompatIndicator
runtimeCompat={pkg.runtimeCompat}
hideUnknown
compact
/>

<div
class={`rounded-full aspect-square p-0.5 ${
getScoreBgColorClass(pkg.score)
}`}
style={`background-image: conic-gradient(transparent, transparent ${pkg.score}%, #e7e8e8 ${pkg.score}%)`}
title="Package score"
>
<div class="rounded-full aspect-square bg-white text-xs flex items-center justify-center font-semibold min-w-6">
{pkg.score}
{pkg.score !== null && (
<div
class={`rounded-full aspect-square p-0.5 ${
getScoreBgColorClass(pkg.score)
}`}
style={`background-image: conic-gradient(transparent, transparent ${pkg.score}%, #e7e8e8 ${pkg.score}%)`}
title="Package score"
>
<div class="rounded-full aspect-square bg-white text-xs flex items-center justify-center font-semibold min-w-6">
{pkg.score}
</div>
</div>
</div>
)}
</div>
</div>
),
Expand Down
9 changes: 7 additions & 2 deletions frontend/components/RuntimeCompatIndicator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ export const RUNTIME_COMPAT_KEYS: [
];

export function RuntimeCompatIndicator(
{ runtimeCompat, labeled, hideUnknown }: {
{ runtimeCompat, labeled, hideUnknown, compact }: {
runtimeCompat: RuntimeCompat;
labeled?: boolean;
hideUnknown?: boolean;
compact?: boolean;
},
) {
const hasExplicitCompat = Object.values(runtimeCompat).some((v) => v);
Expand All @@ -28,7 +29,11 @@ export function RuntimeCompatIndicator(
return (
<div class="min-w-content font-semibold flex items-center gap-2">
{labeled && <div>Works with</div>}
<div class="flex items-center *:-mx-1 flex-row-reverse">
<div
class={`flex items-center ${
compact ? "*:-mx-1" : "*:mx-0.5"
} flex-row-reverse`}
>
{RUNTIME_COMPAT_KEYS.toReversed().map(
([key, name, icon, w, h]) => {
const value = runtimeCompat[key];
Expand Down
4 changes: 4 additions & 0 deletions frontend/routes/badges/package_score.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ export const handler: Handlers<unknown, State> = {
throw packageResp;
}
} else {
if (packageResp.data.score === null) {
return new Response(null, { status: 404 });
}

return new Response(
JSON.stringify({
schemaVersion: 1,
Expand Down
32 changes: 17 additions & 15 deletions frontend/routes/package/(_components)/PackageHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,22 +49,24 @@ export function PackageHeader(
</div>
</div>
<div class="flex items-center gap-8">
<a
href={`/@${pkg.scope}/${pkg.name}/score`}
class="flex items-center gap-2 select-none text-sm font-medium"
>
<span class="max-sm:hidden">Score</span>
<div
class={`flex w-full max-w-24 items-center justify-center aspect-square rounded-full p-1 ${
getScoreBgColorClass(pkg.score)
}`}
style={`background-image: conic-gradient(transparent, transparent ${pkg.score}%, #e7e8e8 ${pkg.score}%)`}
{pkg.score !== null && (
<a
href={`/@${pkg.scope}/${pkg.name}/score`}
class="flex items-center gap-2 select-none text-sm font-medium"
>
<span class="rounded-full w-full h-full bg-white flex justify-center items-center text-center font-bold p-1 min-w-11">
{pkg.score}%
</span>
</div>
</a>
<span class="max-sm:hidden">Score</span>
<div
class={`flex w-full max-w-24 items-center justify-center aspect-square rounded-full p-1 ${
getScoreBgColorClass(pkg.score)
}`}
style={`background-image: conic-gradient(transparent, transparent ${pkg.score}%, #e7e8e8 ${pkg.score}%)`}
>
<span class="rounded-full w-full h-full bg-white flex justify-center items-center text-center font-bold p-1 min-w-11">
{pkg.score}%
</span>
</div>
</a>
)}

{selectedVersion && pkg.latestVersion !== selectedVersion.version && (
<a class="button-primary" href={`/@${pkg.scope}/${pkg.name}`}>
Expand Down
10 changes: 5 additions & 5 deletions frontend/routes/package/score.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ interface Data {
member: ScopeMember | null;
}

export const MAX_SCORE = 17;

export default function Score(
{ data, params, state }: PageProps<Data, State>,
) {
Expand Down Expand Up @@ -68,12 +66,12 @@ export default function Score(
</div>
<div
class={`flex w-full max-w-32 items-center justify-center aspect-square rounded-full p-1.5 ${
getScoreBgColorClass(data.package.score)
getScoreBgColorClass(data.package.score!)
}`}
style={`background-image: conic-gradient(transparent, transparent ${data.package.score}%, #e7e8e8 ${data.package.score}%)`}
>
<span class="rounded-full w-full h-full bg-white flex justify-center items-center text-center text-3xl font-bold">
{data.package.score}%
{data.package.score!}%
</span>
</div>
<div class="text-gray-500 text-sm text-center mt-6">
Expand Down Expand Up @@ -120,7 +118,9 @@ export default function Score(
summarizing what is defined in that module.
</ScoreItem>
<ScoreItem
value={Math.min(1, data.score.percentageDocumentedSymbols + 0.2)}
value={Math.floor(
Math.min(data.score.percentageDocumentedSymbols / 0.8, 1) * 5,
)}
scoreValue={5}
title="Has docs for most symbols"
>
Expand Down
2 changes: 1 addition & 1 deletion frontend/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export interface OramaPackageHit {
name: string;
description: string;
runtimeCompat: RuntimeCompat;
score: number;
score: number | null;
}

export interface PaginationData {
Expand Down
2 changes: 1 addition & 1 deletion frontend/utils/api_types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export interface Package {
updatedAt: string;
createdAt: string;
versionCount: number;
score: number;
score: number | null;
latestVersion: string | null;
whenFeatured: string | null;
}
Expand Down

0 comments on commit 8ab53c9

Please sign in to comment.