http/src/constant.ts
2023-06-19 09:19:48 +08:00

63 lines
1.5 KiB
TypeScript

import type { InitHttpCallback } from './init-http'
import type { CramiHttpOptions } from './typing'
export interface HttpObjType extends Partial<InitHttpCallback>{
__isMerging?: boolean
[key: string]: any
}
// 去除vue中的白名单
const ALLOW_WHITE_LIST = [
'__isVue',
'__v_isRef',
'__v_isReadonly',
'__v_isReactive',
]
const ERROR_LIST = [
'request',
'get',
'post',
'put',
'delete',
'option',
]
const httpObj: HttpObjType = {
__isMerging: false,
}
export const Http: InitHttpCallback = new Proxy(
httpObj, {
get: (target, key) => {
const isExist = Reflect.has(target, key)
// 如果我们想要的属性不存在,就给他报错
if (!isExist && !target.__isMerging && !ALLOW_WHITE_LIST.includes(String(key))) {
if (ERROR_LIST.includes(String(key)))
console.error(`Http.${String(key)} is not exist,maybe you forgot to import {createHttp} from "@crami/http" to init it`)
return undefined
}
return Reflect.get(target, key)
},
set(target, key, value) {
return Reflect.set(target, key, value)
},
},
) as InitHttpCallback
interface AppOptions{
hooks: Omit<CramiHttpOptions, 'headers'>
}
export const app: AppOptions = {
hooks: {},
}
export enum ContentTypeEnum {
// json
JSON = 'application/json;charset=UTF-8',
// form-data qs
FORM = 'application/x-www-form-urlencoded;charset=UTF-8',
// form-data upload
UPLOAD = 'multipart/form-data;charset=UTF-8',
}