import * as process from "process"
import {Task} from "./task"
import {TaskQueue} from "./taskQueue"
import {FetchAdapter, FetchAdapterResponse} from "./fetchAdapter"
import {NextNetwork} from "./nextNetwork"
import {BaseError} from "./errors/baseError";
import {HttpStatusError} from "./errors/httpStatusError";
import {ResponseHelpers} from "./utils/responseHelpers";
//解决node环境下esmodule模式导入失败问题
const {browser} = process
/**
* ## 暴露的接口方法对象
* ## {Task, TaskQueue, FetchAdapter, NextNetwork, FetchAdapterResponse, BaseError, HttpStatusError}
* 1. Task **任务实体**
* 作用:定义了一个任务实体上应该有的方法
* 2. TaskQueue **任务队列管理**
* 作用:管理每个任务的执行状态和重试报错等机制
* 3. FetchAdapter **http适配器**
* 作用:请求请求接口数据的方法 可以根据自己的实际情况继承适配器再作修改
* 4. NextNetwork **网络管理器**
* 作用:对任务队列和http适配器集中调度
* 5. FetchAdapterResponse **http响应体**
* 作用:统一的响应体结构
* 6. BaseError **基础错误类**
* 作用:错误信息继承的基础对象
* 7. HttpStatusError **http code 错误**
* 作用:默认 http status 不在 successStatusCode 列表里面 则会报错
* 8. ResponseHelpers **response工具类**
* 作用:提供一些Response辅助的工具类
* **/
const index: {
Task: Task,
TaskQueue: TaskQueue,
FetchAdapter: FetchAdapter,
NextNetwork: NextNetwork,
FetchAdapterResponse: FetchAdapterResponse,
BaseError: BaseError,
HttpStatusError: HttpStatusError,
ResponseHelpers: ResponseHelpers
// @ts-ignore
} = {Task, TaskQueue, FetchAdapter, NextNetwork, FetchAdapterResponse, BaseError, HttpStatusError, ResponseHelpers}
if (browser) {
// @ts-ignore
window.NextNetworkBrowser = index
}
export {Task, TaskQueue, FetchAdapter, NextNetwork, FetchAdapterResponse, BaseError, HttpStatusError, ResponseHelpers}
export default index