Skip to content

Commit f97af41

Browse files
committed
fix: throw 404 statusCode instead of 400
1 parent 2437ca0 commit f97af41

7 files changed

Lines changed: 18 additions & 20 deletions

File tree

app/pages/[...package].vue

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<script setup lang="ts">
22
import type { NpmVersionDist, PackumentVersion, ReadmeResponse } from '#shared/types'
33
import type { JsrPackageInfo } from '#shared/types/jsr'
4+
import { assertValidPackageName } from '#shared/utils/npm'
45
import { onKeyStroke } from '@vueuse/core'
56
import { joinURL } from 'ufo'
67
import { areUrlsEquivalent } from '#shared/utils/url'
7-
import validatePackageName from 'validate-npm-package-name'
88
99
definePageMeta({
1010
name: 'package',
@@ -17,18 +17,8 @@ const { packageName, requestedVersion, orgName } = usePackageRoute()
1717
const selectedPM = useSelectedPackageManager()
1818
const activePmId = computed(() => selectedPM.value ?? 'npm')
1919
20-
// Validate package name on server and show proper error page if invalid
2120
if (import.meta.server) {
22-
const validation = validatePackageName(packageName.value)
23-
if (!validation.validForNewPackages && !validation.validForOldPackages) {
24-
const errorMessage =
25-
validation.errors?.[0] ?? validation.warnings?.[0] ?? 'Invalid package name'
26-
showError({
27-
statusCode: 400,
28-
statusMessage: 'Invalid Package Name',
29-
message: errorMessage,
30-
})
31-
}
21+
assertValidPackageName(packageName.value)
3222
}
3323
3424
const { data: downloads } = usePackageDownloads(packageName, 'last-week')

server/api/registry/badge/[...pkg].get.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export default defineCachedEventHandler(
1414
async event => {
1515
const pkgParamSegments = getRouterParam(event, 'pkg')?.split('/') ?? []
1616
if (pkgParamSegments.length === 0) {
17-
throw createError({ statusCode: 400, message: 'Package name is required.' })
17+
// TODO: throwing 404 rather than 400 as it's cacheable
18+
throw createError({ statusCode: 404, message: 'Package name is required.' })
1819
}
1920

2021
const { rawPackageName, rawVersion } = parsePackageParams(pkgParamSegments)

server/api/registry/docs/[...pkg].get.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ export default defineCachedEventHandler(
88
async event => {
99
const pkgParam = getRouterParam(event, 'pkg')
1010
if (!pkgParam) {
11-
throw createError({ statusCode: 400, message: 'Package name is required' })
11+
// TODO: throwing 404 rather than 400 as it's cacheable
12+
throw createError({ statusCode: 404, message: 'Package name is required' })
1213
}
1314

1415
const { packageName, version: requestedVersion } = parsePackageParam(pkgParam)
1516

1617
if (!packageName) {
17-
throw createError({ statusCode: 400, message: 'Package name is required' })
18+
// TODO: throwing 404 rather than 400 as it's cacheable
19+
throw createError({ statusCode: 404, message: 'Package name is required' })
1820
}
1921
assertValidPackageName(packageName)
2022

server/api/registry/file/[...pkg].get.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ export default defineCachedEventHandler(
106106

107107
if (versionSegments.length < 2) {
108108
throw createError({
109-
statusCode: 400,
109+
// TODO: throwing 404 rather than 400 as it's cacheable
110+
statusCode: 404,
110111
message: ERROR_PACKAGE_VERSION_AND_FILE_FAILED,
111112
})
112113
}

server/api/registry/org/[org]/packages.get.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ const NPM_ORG_NAME_RE = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i
88
function validateOrgName(name: string): void {
99
if (!name || name.length > 50 || !NPM_ORG_NAME_RE.test(name)) {
1010
throw createError({
11-
statusCode: 400,
11+
// TODO: throwing 404 rather than 400 as it's cacheable
12+
statusCode: 404,
1213
message: `Invalid org name: ${name}`,
1314
})
1415
}
@@ -20,7 +21,8 @@ export default defineCachedEventHandler(
2021

2122
if (!org) {
2223
throw createError({
23-
statusCode: 400,
24+
// TODO: throwing 404 rather than 400 as it's cacheable
25+
statusCode: 404,
2426
message: 'Org name is required',
2527
})
2628
}

server/utils/error-handler.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ export function handleApiError(error: unknown, fallback: ErrorOptions): never {
1616
// Handle Valibot validation errors
1717
if (v.isValiError(error)) {
1818
throw createError({
19-
statusCode: 400,
19+
// TODO: throwing 404 rather than 400 as it's cacheable
20+
statusCode: 404,
2021
message: error.issues[0].message,
2122
})
2223
}

shared/utils/npm.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export function assertValidPackageName(name: string): void {
1010
if (!result.validForNewPackages && !result.validForOldPackages) {
1111
const errors = [...(result.errors ?? []), ...(result.warnings ?? [])]
1212
throw createError({
13-
statusCode: 400,
13+
// TODO: throwing 404 rather than 400 as it's cacheable
14+
statusCode: 404,
1415
message: `Invalid package name: ${errors[0] ?? 'unknown error'}`,
1516
})
1617
}

0 commit comments

Comments
 (0)