instruct-request-axios
Version:
83 lines (63 loc) • 3.37 kB
text/typescript
import {AxiosError} from 'axios';
import Request from './request';
import UploadSlice from './plugins/slice/slice';
import PromiseExtend from "../extend/ProsmiseExtend";
import { RequestConfigInstruction,DefaultRequestConfigInstruction,OutsideRequestObject,RequestResponse,ResponseData,RequestPlugin,InstructionPostOption,ResponseSuccess,InstructionOption,ExitTriggers,InstructionExit,ResponseTypeStatus,ResponseExtendChain,RequestExtend,RequestMessageOption } from './type.d';
export { RequestConfigInstruction,RequestResponse,ResponseData,RequestPlugin,InstructionPostOption,ResponseSuccess,InstructionOption,ExitTriggers,InstructionExit,ResponseTypeStatus,ResponseExtendChain,RequestExtend,RequestMessageOption }
export {
Request
}
class OutsideRequest <T = RequestResponse,I = Record<string,any>,D = AxiosError<RequestConfigInstruction<T,I,AxiosError>>> implements OutsideRequestObject<T,I,D>{
private _$request$_:Request<T,D>;
constructor(config:RequestConfigInstruction<T,I,D>) {
// @ts-ignore
this._$request$_ = new Request<T,D,I & RequestConfigInstruction<T,I,D>>(config);
}
$all<T0=T,T1=T,T2=T,T3=T,T4=T,T5=T,T6=T,T7=T>(data:Array<PromiseExtend<T0 | T1 | T2 | T3 | T4 | T5 | T6 | T7>> | ((config:DefaultRequestConfigInstruction)=> Array<PromiseExtend<T0 | T1 | T2 | T3 | T4 | T5 | T6 | T7>>),requestConfig:I & RequestConfigInstruction<T,I,D>){
return this._$request$_.all<T0,T1,T2,T3,T4,T5,T6,T7>(data,requestConfig);
}
/*
* 请求接口
* @param requestConfig 请求接口的配置参数 详细参考 RequestConfigInstruction
* */
$request<childT=T,childD=D>(requestConfig:I & RequestConfigInstruction<childT,I,childD>){
let agentTarget = this._$request$_.getAgentTarget<childT & ResponseExtendChain,I & RequestConfigInstruction<childT,I,childD>,childD>('$request');
if(agentTarget) {
return agentTarget(requestConfig);
} else {
return this._$request$_.request<childT & ResponseExtendChain,childD>(requestConfig);
}
}
private uploadSlice:UploadSlice<T,I,D>;
/*
* 上传图片
* @param requestConfig 请求接口的配置参数 详细参考 RequestConfigInstruction
*/
$upload<childT = T,childD = D>(requestConfig:I & RequestConfigInstruction<childT,I,childD>){
let agentTarget = this._$request$_.getAgentTarget<childT & ResponseExtendChain,I & RequestConfigInstruction<childT,I,childD>,childD>('$upload');
if(agentTarget) {
return agentTarget(requestConfig);
} else {
return this._$request$_.upload<childT & ResponseExtendChain,childD>(requestConfig);
}
}
/*
* 注册插件
* @param plugin 插件
* @param option 插件配置表
* */
$use<T>(plugin:RequestPlugin,option?:T){
this._$request$_.use(plugin,option);
return this;
}
/* 向外界扩展 */
extend<T extends keyof RequestExtend>(key:T):RequestExtend[T]{
return this._$request$_.extendValues[key].trigger;
}
}
export default {
// 返回实例
create<T=RequestResponse,I = Record<string, any>,D = AxiosError<RequestConfigInstruction<T,I,AxiosError>> >(config:RequestConfigInstruction<T,I,D>):OutsideRequestObject<T,I,D>{
return new OutsideRequest<T,I,D>(config);
}
}