File tree Expand file tree Collapse file tree 2 files changed +14
-1
lines changed
Expand file tree Collapse file tree 2 files changed +14
-1
lines changed Original file line number Diff line number Diff line change @@ -25,6 +25,13 @@ export function isStandardReadme(filename: string | undefined): boolean {
2525 return ! ! filename && standardReadmePattern . test ( filename )
2626}
2727
28+ async function cancelUnreadBatchResponses (
29+ responses : Array < Response | null > ,
30+ startIndex : number ,
31+ ) : Promise < void > {
32+ await Promise . allSettled ( responses . slice ( startIndex ) . map ( response => response ?. body ?. cancel ( ) ) )
33+ }
34+
2835function buildReadmeFetchCandidates ( readmeFilename : string | undefined ) : string [ ] {
2936 return readmeFilename
3037 ? standardReadmeFilenames . filter ( name => name !== readmeFilename )
@@ -60,9 +67,10 @@ export async function fetchReadmeFromJsdelivr(
6067 } ) ,
6168 )
6269
63- for ( const response of responses ) {
70+ for ( const [ responseIndex , response ] of responses . entries ( ) ) {
6471 const text = await response ?. text ( )
6572 if ( text ?. trim ( ) ) {
73+ await cancelUnreadBatchResponses ( responses , responseIndex + 1 )
6674 return text
6775 }
6876 }
Original file line number Diff line number Diff line change @@ -139,6 +139,7 @@ describe('fetchReadmeFromJsdelivr', () => {
139139 it ( 'reads only the matched successful response body' , async ( ) => {
140140 const firstTextMock = vi . fn ( ) . mockResolvedValue ( '# First' )
141141 const secondTextMock = vi . fn ( ) . mockResolvedValue ( '# Second' )
142+ const secondCancelMock = vi . fn ( ) . mockResolvedValue ( undefined )
142143 const fetchMock = vi
143144 . fn ( )
144145 . mockResolvedValueOnce ( {
@@ -148,6 +149,9 @@ describe('fetchReadmeFromJsdelivr', () => {
148149 . mockResolvedValueOnce ( {
149150 ok : true ,
150151 text : secondTextMock ,
152+ body : {
153+ cancel : secondCancelMock ,
154+ } ,
151155 } )
152156 vi . stubGlobal ( 'fetch' , fetchMock )
153157
@@ -156,6 +160,7 @@ describe('fetchReadmeFromJsdelivr', () => {
156160 expect ( result ) . toBe ( '# First' )
157161 expect ( firstTextMock ) . toHaveBeenCalledTimes ( 1 )
158162 expect ( secondTextMock ) . not . toHaveBeenCalled ( )
163+ expect ( secondCancelMock ) . toHaveBeenCalledTimes ( 1 )
159164 } )
160165} )
161166
You can’t perform that action at this time.
0 commit comments