Skip to content

Commit 8e10a10

Browse files
committed
wip
1 parent fa7f5da commit 8e10a10

File tree

4 files changed

+45
-43
lines changed

4 files changed

+45
-43
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import type {
88
import {
99
analyzePackage,
1010
getCreatePackageName,
11-
fetchPackageWithTypesAndFiles,
1211
} from '#shared/utils/package-analysis'
1312
import {
1413
getDevDependencySuggestion,
@@ -21,6 +20,7 @@ import {
2120
} from '#shared/utils/constants'
2221
import { parseRepoUrl } from '#shared/utils/git-providers'
2322
import { encodePackageName } from '#shared/utils/npm'
23+
import { fetchPackageWithTypesAndFiles } from '#server/utils/file-tree'
2424
import { getLatestVersionBatch } from 'fast-npm-meta'
2525

2626
export default defineCachedEventHandler(

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, fetchPackageWithTypesAndFiles } from '#shared/utils/package-analysis'
9+
import { fetchPackageWithTypesAndFiles } from '#server/utils/file-tree'
1010
import { handleApiError } from '#server/utils/error-handler'
1111

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

server/utils/file-tree.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { flattenFileTree } from '#server/utils/import-resolver'
2+
13
/**
24
* Fetch the file tree from jsDelivr API.
35
* Returns a nested tree structure of all files in the package.
@@ -83,3 +85,44 @@ export async function getPackageFileTree(
8385
tree,
8486
}
8587
}
88+
89+
export async function fetchPackageWithTypesAndFiles(
90+
packageName: string,
91+
version?: string,
92+
): Promise<{
93+
pkg: AnalysisPackageJson
94+
typesPackage?: TypesPackageInfo
95+
files?: Set<string>
96+
}> {
97+
// Fetch main package data
98+
const encodedName = encodePackageName(packageName)
99+
const versionSuffix = version ? `/${version}` : '/latest'
100+
101+
const pkg = await $fetch<AnalysisPackageJson>(`${NPM_REGISTRY}/${encodedName}${versionSuffix}`)
102+
103+
let typesPackage: TypesPackageInfo | undefined
104+
let files: Set<string> | undefined
105+
106+
// Only attempt to fetch @types + file tree when the package doesn't ship its own types
107+
if (!hasBuiltInTypes(pkg)) {
108+
const typesPkgName = getTypesPackageName(packageName)
109+
const resolvedVersion = pkg.version ?? version ?? 'latest'
110+
111+
// Fetch both in parallel — they're independent
112+
const [typesResult, fileTreeResult] = await Promise.allSettled([
113+
fetchTypesPackageInfo(typesPkgName),
114+
getPackageFileTree(packageName, resolvedVersion),
115+
])
116+
117+
if (typesResult.status === 'fulfilled') {
118+
typesPackage = typesResult.value
119+
}
120+
121+
if (fileTreeResult.status === 'fulfilled') {
122+
files = flattenFileTree(fileTreeResult.value.tree)
123+
}
124+
}
125+
126+
return { pkg, typesPackage, files }
127+
}
128+

shared/utils/package-analysis.ts

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
*/
44

55
import { getLatestVersion } from 'fast-npm-meta'
6-
import { flattenFileTree } from '#server/utils/import-resolver'
76

87
export type ModuleFormat = 'esm' | 'cjs' | 'dual' | 'unknown'
98

@@ -128,46 +127,6 @@ async function fetchTypesPackageInfo(packageName: string): Promise<TypesPackageI
128127
}
129128
}
130129

131-
export async function fetchPackageWithTypesAndFiles(
132-
packageName: string,
133-
version?: string,
134-
): Promise<{
135-
pkg: AnalysisPackageJson
136-
typesPackage?: TypesPackageInfo
137-
files?: Set<string>
138-
}> {
139-
// Fetch main package data
140-
const encodedName = encodePackageName(packageName)
141-
const versionSuffix = version ? `/${version}` : '/latest'
142-
143-
const pkg = await $fetch<AnalysisPackageJson>(`${NPM_REGISTRY}/${encodedName}${versionSuffix}`)
144-
145-
let typesPackage: TypesPackageInfo | undefined
146-
let files: Set<string> | undefined
147-
148-
// Only attempt to fetch @types + file tree when the package doesn't ship its own types
149-
if (!hasBuiltInTypes(pkg)) {
150-
const typesPkgName = getTypesPackageName(packageName)
151-
const resolvedVersion = pkg.version ?? version ?? 'latest'
152-
153-
// Fetch both in parallel — they're independent
154-
const [typesResult, fileTreeResult] = await Promise.allSettled([
155-
fetchTypesPackageInfo(typesPkgName),
156-
getPackageFileTree(packageName, resolvedVersion),
157-
])
158-
159-
if (typesResult.status === 'fulfilled') {
160-
typesPackage = typesResult.value
161-
}
162-
163-
if (fileTreeResult.status === 'fulfilled') {
164-
files = flattenFileTree(fileTreeResult.value.tree)
165-
}
166-
}
167-
168-
return { pkg, typesPackage, files }
169-
}
170-
171130
/**
172131
* Recursively analyze exports field for module format indicators
173132
*/

0 commit comments

Comments
 (0)