fix(core): buffer responseType (#15083)

This commit is contained in:
JimenezLi
2024-04-03 23:01:02 +08:00
committed by GitHub
parent 71100ca0a1
commit 690b06e680
3 changed files with 30 additions and 10 deletions
+8
View File
@@ -48,4 +48,12 @@ describe('got', () => {
expect(response.body).toBe('{"test":"rsshub"}');
expect(response.data.test).toBe('rsshub');
});
it('buffer-get', async () => {
const response = await got.get('http://example.com', {
responseType: 'buffer',
});
expect(response.body instanceof Buffer).toBe(true);
expect(response.data instanceof Buffer).toBe(true);
});
});
+20 -8
View File
@@ -1,13 +1,6 @@
import { destr } from 'destr';
import ofetch from '@/utils/ofetch';
const gotofetch = ofetch.create({
parseResponse: (responseText) => ({
data: destr(responseText),
body: responseText,
}),
});
const getFakeGot = (defaultOptions?: any) => {
const fakeGot = (request, options?: any) => {
if (!(typeof request === 'string' || request instanceof Request) && request.url) {
@@ -49,7 +42,26 @@ const getFakeGot = (defaultOptions?: any) => {
delete options.searchParams;
}
return gotofetch(request, options);
// Add support for buffer responseType, to be compatible with got
options.parseResponse = (responseText) => ({
data: destr(responseText),
body: responseText,
});
if (options?.responseType === 'buffer' || options?.responseType === 'arrayBuffer') {
options.responseType = 'arrayBuffer';
delete options.parseResponse;
}
const response = ofetch(request, options);
if (options?.responseType === 'arrayBuffer') {
return response.then((responseData) => ({
data: Buffer.from(responseData),
body: Buffer.from(responseData),
}));
}
return response;
};
fakeGot.get = (request, options) => fakeGot(request, { ...options, method: 'GET' });