Skip to content

Commit 84b9a0a

Browse files
committed
fix
1 parent 3efce54 commit 84b9a0a

File tree

3 files changed

+42
-41
lines changed

3 files changed

+42
-41
lines changed

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

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
getTypesPackageName,
1212
getCreatePackageName,
1313
hasBuiltInTypes,
14+
fetchPackageWithTypesAndFiles,
1415
} from '#shared/utils/package-analysis'
1516
import {
1617
getDevDependencySuggestion,
@@ -76,46 +77,6 @@ export default defineCachedEventHandler(
7677
},
7778
)
7879

79-
export async function fetchPackageWithTypesAndFiles(
80-
packageName: string,
81-
version?: string,
82-
): Promise<{
83-
pkg: AnalysisPackageJson
84-
typesPackage?: TypesPackageInfo
85-
files?: Set<string>
86-
}> {
87-
// Fetch main package data
88-
const encodedName = encodePackageName(packageName)
89-
const versionSuffix = version ? `/${version}` : '/latest'
90-
91-
const pkg = await $fetch<AnalysisPackageJson>(`${NPM_REGISTRY}/${encodedName}${versionSuffix}`)
92-
93-
let typesPackage: TypesPackageInfo | undefined
94-
let files: Set<string> | undefined
95-
96-
// Only attempt to fetch @types + file tree when the package doesn't ship its own types
97-
if (!hasBuiltInTypes(pkg)) {
98-
const typesPkgName = getTypesPackageName(packageName)
99-
const resolvedVersion = pkg.version ?? version ?? 'latest'
100-
101-
// Fetch both in parallel — they're independent
102-
const [typesResult, fileTreeResult] = await Promise.allSettled([
103-
fetchTypesPackageInfo(typesPkgName),
104-
getPackageFileTree(packageName, resolvedVersion),
105-
])
106-
107-
if (typesResult.status === 'fulfilled') {
108-
typesPackage = typesResult.value
109-
}
110-
111-
if (fileTreeResult.status === 'fulfilled') {
112-
files = flattenFileTree(fileTreeResult.value.tree)
113-
}
114-
}
115-
116-
return { pkg, typesPackage, files }
117-
}
118-
11980
/**
12081
* Fetch @types package info including deprecation status using fast-npm-meta.
12182
* Returns undefined if the package doesn't exist.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { PackageRouteParamsSchema } from '#shared/schemas/package'
66
import { CACHE_MAX_AGE_ONE_HOUR, ERROR_NPM_FETCH_FAILED } from '#shared/utils/constants'
77
import { fetchNpmPackage } from '#server/utils/npm'
88
import { assertValidPackageName } from '#shared/utils/npm'
9-
import { detectTypesStatus } from '#shared/utils/package-analysis'
9+
import { detectTypesStatus, fetchPackageWithTypesAndFiles } from '#shared/utils/package-analysis'
1010
import { handleApiError } from '#server/utils/error-handler'
1111

1212
const NPM_DOWNLOADS_API = 'https://api.npmjs.org/downloads/point'

shared/utils/package-analysis.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,46 @@ interface ExportsAnalysis {
106106
hasTypes: boolean
107107
}
108108

109+
export async function fetchPackageWithTypesAndFiles(
110+
packageName: string,
111+
version?: string,
112+
): Promise<{
113+
pkg: AnalysisPackageJson
114+
typesPackage?: TypesPackageInfo
115+
files?: Set<string>
116+
}> {
117+
// Fetch main package data
118+
const encodedName = encodePackageName(packageName)
119+
const versionSuffix = version ? `/${version}` : '/latest'
120+
121+
const pkg = await $fetch<AnalysisPackageJson>(`${NPM_REGISTRY}/${encodedName}${versionSuffix}`)
122+
123+
let typesPackage: TypesPackageInfo | undefined
124+
let files: Set<string> | undefined
125+
126+
// Only attempt to fetch @types + file tree when the package doesn't ship its own types
127+
if (!hasBuiltInTypes(pkg)) {
128+
const typesPkgName = getTypesPackageName(packageName)
129+
const resolvedVersion = pkg.version ?? version ?? 'latest'
130+
131+
// Fetch both in parallel — they're independent
132+
const [typesResult, fileTreeResult] = await Promise.allSettled([
133+
fetchTypesPackageInfo(typesPkgName),
134+
getPackageFileTree(packageName, resolvedVersion),
135+
])
136+
137+
if (typesResult.status === 'fulfilled') {
138+
typesPackage = typesResult.value
139+
}
140+
141+
if (fileTreeResult.status === 'fulfilled') {
142+
files = flattenFileTree(fileTreeResult.value.tree)
143+
}
144+
}
145+
146+
return { pkg, typesPackage, files }
147+
}
148+
109149
/**
110150
* Recursively analyze exports field for module format indicators
111151
*/

0 commit comments

Comments
 (0)