Files
Tony 08a38f0a5e refactor: typing house-keeping (#23074)
* refactor: typing house-keeping

* fix: fix parse date not accepting strict mode

* refactor: use npm package

* fix: address review
2026-08-22 23:58:30 +08:00

91 lines
3.0 KiB
TypeScript

import { destr } from 'destr';
import ofetch from '@/utils/ofetch';
import { getSearchParamsString } from './helpers';
const getFakeGot = (defaultOptions?: any) => {
const fakeGot = async (request, options?: any) => {
if (!(request instanceof Request) && request.url) {
options = {
...request,
...options,
};
request = request.url;
}
if (options?.hooks?.beforeRequest) {
for (const hook of options.hooks.beforeRequest) {
hook(options);
}
delete options.hooks;
}
options = {
...defaultOptions,
...options,
};
if (options?.json && !options.body) {
options.body = options.json;
delete options.json;
}
if (options?.form && !options.body) {
options.body = new URLSearchParams(options.form).toString();
if (!options.headers) {
options.headers = {};
}
options.headers['content-type'] = 'application/x-www-form-urlencoded';
delete options.form;
}
if (options?.searchParams) {
request += '?' + getSearchParamsString(options.searchParams);
delete options.searchParams;
}
// 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;
}
if (options.cookieJar) {
const cookies = options.cookieJar.getCookiesSync(request);
if (cookies.length) {
if (!options.headers) {
options.headers = {};
}
options.headers.cookie = cookies.join('; ');
}
delete options.cookieJar;
}
const response = ofetch(request, options);
if (options?.responseType === 'arrayBuffer') {
const responseData = await response;
return {
data: Buffer.from(responseData),
body: Buffer.from(responseData),
};
}
return response;
};
fakeGot.get = (request, options?) => fakeGot(request, { ...options, method: 'GET' });
fakeGot.post = (request, options?) => fakeGot(request, { ...options, method: 'POST' });
fakeGot.put = (request, options?) => fakeGot(request, { ...options, method: 'PUT' });
fakeGot.patch = (request, options?) => fakeGot(request, { ...options, method: 'PATCH' });
fakeGot.head = (request, options?) => fakeGot(request, { ...options, method: 'HEAD' });
fakeGot.delete = (request, options?) => fakeGot(request, { ...options, method: 'DELETE' });
fakeGot.extend = (options) => getFakeGot(options);
return fakeGot;
};
export default getFakeGot();