@@ -259,6 +259,79 @@ describe('resolvePackageReadmeSource', () => {
259259 expect ( fetchMock ) . toHaveBeenNthCalledWith ( 1 , 'https://cdn.jsdelivr.net/npm/pkg/DOCS.md' )
260260 } )
261261
262+ it ( 'tries a provided readmeFilename before starting the fallback batch' , async ( ) => {
263+ let resolveDocs ! : ( value : { ok : false } ) => void
264+ let resolveReadmeMd ! : ( value : { ok : false } ) => void
265+ let resolveLowercase ! : ( value : { ok : false } ) => void
266+ let resolveReadmeCase ! : ( value : { ok : true ; text : ( ) => Promise < string > } ) => void
267+
268+ fetchNpmPackageMock . mockResolvedValue ( {
269+ readme : undefined ,
270+ readmeFilename : 'DOCS.md' ,
271+ repository : undefined ,
272+ versions : { } ,
273+ } )
274+ parseRepositoryInfoMock . mockReturnValue ( undefined )
275+
276+ const fetchMock = vi . fn ( ( url : string ) => {
277+ if ( url . endsWith ( '/DOCS.md' ) ) {
278+ return new Promise ( resolve => {
279+ resolveDocs = resolve
280+ } )
281+ }
282+
283+ if ( url . endsWith ( '/README.md' ) ) {
284+ return new Promise ( resolve => {
285+ resolveReadmeMd = resolve
286+ } )
287+ }
288+
289+ if ( url . endsWith ( '/readme.md' ) ) {
290+ return new Promise ( resolve => {
291+ resolveLowercase = resolve
292+ } )
293+ }
294+
295+ if ( url . endsWith ( '/Readme.md' ) ) {
296+ return new Promise ( resolve => {
297+ resolveReadmeCase = resolve
298+ } )
299+ }
300+
301+ return Promise . resolve ( { ok : false } )
302+ } )
303+ vi . stubGlobal ( 'fetch' , fetchMock )
304+
305+ const resultPromise = resolvePackageReadmeSource ( 'pkg' )
306+
307+ await new Promise ( resolve => setTimeout ( resolve , 0 ) )
308+ expect ( fetchMock ) . toHaveBeenCalledTimes ( 1 )
309+ expect ( fetchMock ) . toHaveBeenNthCalledWith ( 1 , 'https://cdn.jsdelivr.net/npm/pkg/DOCS.md' )
310+
311+ resolveDocs ( { ok : false } )
312+
313+ await new Promise ( resolve => setTimeout ( resolve , 0 ) )
314+ expect ( fetchMock ) . toHaveBeenCalledTimes ( 4 )
315+ expect ( fetchMock . mock . calls . slice ( 1 ) . map ( ( [ url ] ) => url ) ) . toEqual ( [
316+ 'https://cdn.jsdelivr.net/npm/pkg/README.md' ,
317+ 'https://cdn.jsdelivr.net/npm/pkg/readme.md' ,
318+ 'https://cdn.jsdelivr.net/npm/pkg/Readme.md' ,
319+ ] )
320+
321+ resolveReadmeMd ( { ok : false } )
322+ resolveLowercase ( { ok : false } )
323+ resolveReadmeCase ( {
324+ ok : true ,
325+ text : async ( ) => '# From fallback batch' ,
326+ } )
327+
328+ await expect ( resultPromise ) . resolves . toMatchObject ( {
329+ packageName : 'pkg' ,
330+ markdown : '# From fallback batch' ,
331+ repoInfo : undefined ,
332+ } )
333+ } )
334+
262335 it ( 'returns undefined markdown when no content and jsdelivr fails' , async ( ) => {
263336 fetchNpmPackageMock . mockResolvedValue ( {
264337 readme : undefined ,
0 commit comments