Skip to content

Commit 8226686

Browse files
committed
fix(readme): cancel unread jsdelivr batch responses on early return
1 parent 4e00761 commit 8226686

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

server/utils/readme-loaders.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff 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+
2835
function 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
}

test/unit/server/utils/readme-loaders.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)