instruct-request-axios
Version:
153 lines (136 loc) • 3.92 kB
TypeScript
import {
ResponseSuccess,
RequestConfigInstruction,
ResponseData,
RequestResponse,
DefaultRequestConfigInstruction
} from '../../type';
import {
CacheStorageType,
} from '../cache/type.d';
import {
StorageSetOption
} from '../cache/control/control';
import { AxiosError } from 'axios';
import UploadContxt from './slice/uploadContxt';
export {
CacheStorageType
}
import UploadExtend from './slice/uploadExtend';
export interface SliceRequestExtend {
// 创建cache对象处理
slice:(options?:RequestUploadCache)=> UploadExtend,
}
interface RequestTypeMode {
requestMode?:'upload' | 'request'
}
export interface RequestUploadParams {
index:number,
total:number,
file:Blob,
size:number,
hash:string,
name:string,
__analysis?:number,
__merge?:number
}
interface RequestUploadFileSlice {
// 是否使用分片
slice?:{
// 根据size进行分割切片
size:number,
// 唯一值生成 最终会进行 md5加密
unique?:Array<keyof File> | ((file:File)=>string) | string
}
}
export interface RequestContxtParams {
// 成功的数量
success:Record<string,number>,
// 剩余将被执行的分片
surplus:Array<number>,
// 失败的分片
fail?:Array<number>,
// 正在执行的分片
running?:Record<string,number>,
// 是否使用 storage
cache?:RequestUploadCache,
// 是否暂停
suspend?:boolean,
// 总数
total:number,
// 名称
name:string,
// 唯一值
unique:string,
// 自定义存储信息
storage?:Record<string,any>,
// 分析文件是否纳入进度 (注意,纳入进度后)
analysis?:number,
// 合并是否纳入进度
mergeAnalysis?:number,
// 暂存内容
storageContent?:Record<string,any>
}
export interface RequestUploadCache extends StorageSetOption{
storage: CacheStorageType
}
export interface UploadExtendSpeedParams {
// 名称
name:string,
// 唯一值
unique:string,
// 自定义存储信息
storage?:Record<string,any>,
// 上传分片数量
loaded:number,
// 总数
total:number,
// 实际分片数
relayTotal: number,
// 分析文件进度
analysis: number,
// 合并进度
mergeAnalysis: number
}
export interface RequestUploadInstructionFile<T=RequestResponse,I=Record<string,any>,D=AxiosError> extends ResponseSuccess{
// 名称
name?:string,
// 如果不支持提交的地址
supportURL?:string,
// 如果不支持 回调
support?: (requestData:RequestConfigInstruction<T,I,D>)=> void
// 如果file存有记录 是否依照记录继续执行
record?:boolean,
// 自定义存储信息
storage?:Record<string,any>,
// 文件
file?:Blob,
// 分割大小
splitSize?:number,
// 控制器
controller?:UploadContxt
// 唯一值
unique?:string,
// 分析文件是否纳入进度 (注意,纳入进度后)
analysis?:number,
// 合并进程是否纳入进度统计
mergeAnalysis?:number,
// 使用模式
mode?:'queue' | 'many' | 'all',
// 是否使用 cache
cache?:CacheStorageType | RequestUploadCache
// 设置模式控制 ,多少个一起执行
manyNumber?:number,
// 合并,如果需要通知后台合并使用
merge?:RequestConfigInstruction<T,I,D> & {
// 使用data 获取的的字段
replaceData?:{
[key in string]: keyof RequestUploadParams
}
} & RequestTypeMode & I | ((response:ResponseData,params:RequestUploadParams)=> T & RequestConfigInstruction<T,I,D> & RequestTypeMode)
// 使用data 获取的的字段
replaceData?:{
[key in string]: keyof RequestUploadParams
}
}
export type SlicePluginOption<T = RequestResponse,I = Record<string,any>,D = AxiosError> = RequestUploadInstructionFile<T,I,D>;