MCPcopy
hub / github.com/npmx-dev/npmx.dev / fetchReadmeFromJsdelivr

Function fetchReadmeFromJsdelivr

server/utils/readme-loaders.ts:45–80  ·  view source on GitHub ↗
(
  packageName: string,
  readmeFilenames: string[],
  version?: string,
)

Source from the content-addressed store, hash-verified

43 * Falls back through candidate README filenames in small parallel batches.
44 */
45export async function fetchReadmeFromJsdelivr(
46 packageName: string,
47 readmeFilenames: string[],
48 version?: string,
49): Promise<string | null> {
50 const versionSuffix = version ? `@${version}` : ''
51
52 for (let index = 0; index < readmeFilenames.length; index += JSDELIVR_README_FETCH_BATCH_SIZE) {
53 const batch = readmeFilenames.slice(index, index + JSDELIVR_README_FETCH_BATCH_SIZE)
54 const responses = await Promise.all(
55 batch.map(async filename => {
56 try {
57 const url = `https://cdn.jsdelivr.net/npm/${packageName}${versionSuffix}/${filename}`
58 const response = await fetch(url)
59 if (!response.ok) {
60 return null
61 }
62
63 return response
64 } catch {
65 return null
66 }
67 }),
68 )
69
70 for (const [responseIndex, response] of responses.entries()) {
71 const text = await response?.text()
72 if (text?.trim()) {
73 await cancelUnreadBatchResponses(responses, responseIndex + 1)
74 return text
75 }
76 }
77 }
78
79 return null
80}
81
82export const resolvePackageReadmeSource = defineCachedFunction(
83 async (packagePath: string) => {

Callers 2

readme-loaders.tsFile · 0.85

Calls 1

Tested by

no test coverage detected