mux-fetch
Version:
44 lines (39 loc) • 1.21 kB
text/typescript
import { FetchConfig, GlobalConfig } from "../@types/";
import { compose } from "./compose";
import globalConfig from "../globalConfig";
import { isArray } from "mux-lib";
import { DEFAULT_CONFIG } from "../constant";
export const configFactory = (
config: FetchConfig,
base: FetchConfig = globalConfig.get("config") || DEFAULT_CONFIG
): GlobalConfig => {
// 合并 prefix
const prefix = config.prefix || base.prefix;
// 合并 responseHandle
const responseHandle = config.responseHandle || base.responseHandle;
// 合并 fetchOption
const fetchOption = Object.assign(
{},
base.fetchOption || {},
config.fetchOption || {}
);
// 合并 interceptor
const interceptor = Object.keys(DEFAULT_CONFIG.interceptor).reduce(
(p, key) => {
const configInterceptor = (config.interceptor || {})[key] || [];
const baseInterceptor = (base.interceptor || {})[key] || [];
const baseKeyInterceptor = isArray(baseInterceptor)
? baseInterceptor
: [baseInterceptor];
p[key] = compose(...baseKeyInterceptor, ...configInterceptor);
return p;
},
{}
);
return {
prefix,
fetchOption,
responseHandle,
interceptor
};
};