| import { destr } from 'destr'; |
|
|
| import ofetch from '@/utils/ofetch'; |
|
|
| import { getSearchParamsString } from './helpers'; |
|
|
| const getFakeGot = (defaultOptions?: any) => { |
| const fakeGot = (request, options?: any) => { |
| if (!(typeof request === 'string' || 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 as Record<string, string>).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; |
| } |
|
|
| |
| 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') { |
| return response.then((responseData) => ({ |
| 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(); |
|
|