Skip to content

Commit 5c606dc

Browse files
committed
fix: show error page if org doesn't exist
resolves #94
1 parent d0ee386 commit 5c606dc

3 files changed

Lines changed: 29 additions & 12 deletions

File tree

app/composables/useNpmRegistry.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,16 +287,25 @@ export function useNpmSearch(
287287
/**
288288
* Fetch all package names in an npm organization
289289
* Uses the /-/org/{org}/package endpoint
290-
* Returns empty array if org doesn't exist or has no packages
290+
* Throws error with statusCode 404 if org doesn't exist
291+
* Returns empty array if org exists but has no packages
291292
*/
292293
async function fetchOrgPackageNames(orgName: string): Promise<string[]> {
293294
try {
294295
const data = await $fetch<Record<string, string>>(
295296
`${NPM_REGISTRY}/-/org/${encodeURIComponent(orgName)}/package`,
296297
)
297298
return Object.keys(data)
298-
} catch {
299-
// Org doesn't exist or has no packages
299+
} catch (err) {
300+
// Check if this is a 404 (org not found)
301+
if (err && typeof err === 'object' && 'statusCode' in err && err.statusCode === 404) {
302+
throw createError({
303+
statusCode: 404,
304+
statusMessage: 'Organization not found',
305+
message: `The organization "@${orgName}" does not exist on npm`,
306+
})
307+
}
308+
// For other errors (network, etc.), return empty array to be safe
300309
return []
301310
}
302311
}

app/error.vue

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ const props = defineProps<{
55
error: NuxtError
66
}>()
77
8-
const statusCode = computed(() => props.error.statusCode || 500)
9-
const statusMessage = computed(() => {
10-
if (props.error.statusMessage) return props.error.statusMessage
11-
switch (statusCode.value) {
8+
const status = computed(() => props.error.status || 500)
9+
const statusText = computed(() => {
10+
if (props.error.statusText) return props.error.statusText
11+
switch (status.value) {
1212
case 404:
1313
return 'Page not found'
1414
case 500:
@@ -25,7 +25,7 @@ function handleError() {
2525
}
2626
2727
useHead({
28-
title: `${statusCode.value} - ${statusMessage.value}`,
28+
title: `${status.value} - ${statusText.value}`,
2929
})
3030
</script>
3131

@@ -35,15 +35,15 @@ useHead({
3535

3636
<main class="flex-1 container flex flex-col items-center justify-center py-20 text-center">
3737
<p class="font-mono text-8xl sm:text-9xl font-medium text-fg-subtle mb-4">
38-
{{ statusCode }}
38+
{{ status }}
3939
</p>
4040

4141
<h1 class="font-mono text-2xl sm:text-3xl font-medium mb-4">
42-
{{ statusMessage }}
42+
{{ statusText }}
4343
</h1>
4444

4545
<p
46-
v-if="error.message && error.message !== statusMessage"
46+
v-if="error.message && error.message !== statusText"
4747
class="text-fg-muted text-base max-w-md mb-8"
4848
>
4949
{{ error.message }}

app/pages/@[org].vue

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,15 @@ watch([filterText, sortOption], ([filter, sort]) => {
3737
})
3838
3939
// Fetch all packages in this org using the org packages API
40-
const { data: results, status, error } = useOrgPackages(orgName)
40+
const { data: results, status, error } = await useOrgPackages(orgName)
41+
42+
if (status.value === 'error' && error.value?.statusCode === 404) {
43+
throw createError({
44+
statusCode: 404,
45+
statusMessage: 'Organization not found',
46+
message: `The organization "@${orgName.value}" does not exist on npm`,
47+
})
48+
}
4149
4250
const packages = computed(() => results.value?.objects ?? [])
4351
const packageCount = computed(() => packages.value.length)

0 commit comments

Comments
 (0)