From 382f3edb8a6225b63e4440a92b316d1e0580723e Mon Sep 17 00:00:00 2001 From: bluwy Date: Fri, 6 Feb 2026 10:56:54 +0800 Subject: [PATCH] refactor: share `encodePackageName` utility function --- app/utils/package-name.ts | 7 ++----- server/api/registry/analysis/[...pkg].get.ts | 8 +------- server/utils/dependency-resolver.ts | 7 ++----- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/app/utils/package-name.ts b/app/utils/package-name.ts index 64aa7bbaa..3b93fb6ce 100644 --- a/app/utils/package-name.ts +++ b/app/utils/package-name.ts @@ -1,4 +1,5 @@ import validatePackageName from 'validate-npm-package-name' +import { encodePackageName } from '#shared/utils/npm' /** * Normalize a package name for comparison by removing common variations. @@ -77,11 +78,7 @@ export async function checkPackageExists( options: Parameters[1] = {}, ): Promise { try { - const encodedName = name.startsWith('@') - ? `@${encodeURIComponent(name.slice(1))}` - : encodeURIComponent(name) - - await $fetch(`${NPM_REGISTRY}/${encodedName}`, { + await $fetch(`${NPM_REGISTRY}/${encodePackageName(name)}`, { ...options, method: 'HEAD', }) diff --git a/server/api/registry/analysis/[...pkg].get.ts b/server/api/registry/analysis/[...pkg].get.ts index 2fd7166db..a397f4cb6 100644 --- a/server/api/registry/analysis/[...pkg].get.ts +++ b/server/api/registry/analysis/[...pkg].get.ts @@ -18,6 +18,7 @@ import { ERROR_PACKAGE_ANALYSIS_FAILED, } from '#shared/utils/constants' import { parseRepoUrl } from '#shared/utils/git-providers' +import { encodePackageName } from '#shared/utils/npm' import { getLatestVersion, getLatestVersionBatch } from 'fast-npm-meta' export default defineCachedEventHandler( @@ -76,13 +77,6 @@ export default defineCachedEventHandler( }, ) -function encodePackageName(name: string): string { - if (name.startsWith('@')) { - return `@${encodeURIComponent(name.slice(1))}` - } - return encodeURIComponent(name) -} - /** * Fetch @types package info including deprecation status using fast-npm-meta. * Returns undefined if the package doesn't exist. diff --git a/server/utils/dependency-resolver.ts b/server/utils/dependency-resolver.ts index 1b007e636..2b89a3c87 100644 --- a/server/utils/dependency-resolver.ts +++ b/server/utils/dependency-resolver.ts @@ -1,5 +1,6 @@ import type { Packument, PackumentVersion, DependencyDepth } from '#shared/types' import { mapWithConcurrency } from '#shared/utils/async' +import { encodePackageName } from '#shared/utils/npm' import { maxSatisfying } from 'semver' /** Concurrency limit for fetching packuments during dependency resolution */ @@ -21,11 +22,7 @@ export const TARGET_PLATFORM = { export const fetchPackument = defineCachedFunction( async (name: string): Promise => { try { - const encodedName = name.startsWith('@') - ? `@${encodeURIComponent(name.slice(1))}` - : encodeURIComponent(name) - - return await $fetch(`https://registry.npmjs.org/${encodedName}`) + return await $fetch(`https://registry.npmjs.org/${encodePackageName(name)}`) } catch (error) { if (import.meta.dev) { // oxlint-disable-next-line no-console -- log npm registry failures for debugging