mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-12-24 21:40:22 +08:00
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
import type { AxiosHeaderValue, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
|
|
import type { ResponseType } from './type';
|
|
|
|
export function getContentType(config: InternalAxiosRequestConfig) {
|
|
const contentType: AxiosHeaderValue = config.headers?.['Content-Type'] || 'application/json';
|
|
|
|
return contentType;
|
|
}
|
|
|
|
/**
|
|
* check if http status is success
|
|
*
|
|
* @param status
|
|
*/
|
|
export function isHttpSuccess(status: number) {
|
|
const isSuccessCode = status >= 200 && status < 300;
|
|
return isSuccessCode || status === 304;
|
|
}
|
|
|
|
/**
|
|
* is response json
|
|
*
|
|
* @param response axios response
|
|
*/
|
|
export function isResponseJson(response: AxiosResponse) {
|
|
const { responseType } = response.config;
|
|
|
|
return responseType === 'json' || responseType === undefined;
|
|
}
|
|
|
|
export async function transformResponse(response: AxiosResponse) {
|
|
const responseType: ResponseType = (response.config?.responseType as ResponseType) || 'json';
|
|
if (responseType === 'json') return;
|
|
|
|
const isJson = response.headers['content-type']?.includes('application/json');
|
|
if (!isJson) return;
|
|
|
|
if (responseType === 'blob') {
|
|
await transformBlobToJson(response);
|
|
}
|
|
|
|
if (responseType === 'arrayBuffer') {
|
|
await transformArrayBufferToJson(response);
|
|
}
|
|
}
|
|
|
|
export async function transformBlobToJson(response: AxiosResponse) {
|
|
try {
|
|
let data = response.data;
|
|
|
|
if (typeof data === 'string') {
|
|
data = JSON.parse(data);
|
|
}
|
|
|
|
if (Object.prototype.toString.call(data) === '[object Blob]') {
|
|
const json = await data.text();
|
|
data = JSON.parse(json);
|
|
}
|
|
|
|
response.data = data;
|
|
} catch {}
|
|
}
|
|
|
|
export async function transformArrayBufferToJson(response: AxiosResponse) {
|
|
try {
|
|
let data = response.data;
|
|
|
|
if (typeof data === 'string') {
|
|
data = JSON.parse(data);
|
|
}
|
|
|
|
if (Object.prototype.toString.call(data) === '[object ArrayBuffer]') {
|
|
const json = new TextDecoder().decode(data);
|
|
data = JSON.parse(json);
|
|
}
|
|
|
|
response.data = data;
|
|
} catch {}
|
|
}
|