import buildURL from '../helpers/buildURL' 
 | 
import buildFullPath from '../core/buildFullPath' 
 | 
import settle from '../core/settle' 
 | 
import { isUndefined } from '../utils' 
 | 
  
 | 
/** 
 | 
 * 返回可选值存在的配置 
 | 
 * @param {Array} keys - 可选值数组 
 | 
 * @param {Object} config2 - 配置 
 | 
 * @return {{}} - 存在的配置项 
 | 
 */ 
 | 
const mergeKeys = (keys, config2) => { 
 | 
    const config = {} 
 | 
    keys.forEach((prop) => { 
 | 
        if (!isUndefined(config2[prop])) { 
 | 
            config[prop] = config2[prop] 
 | 
        } 
 | 
    }) 
 | 
    return config 
 | 
} 
 | 
export default (config) => new Promise((resolve, reject) => { 
 | 
    const fullPath = buildURL(buildFullPath(config.baseURL, config.url), config.params) 
 | 
    const _config = { 
 | 
        url: fullPath, 
 | 
        header: config.header, 
 | 
        complete: (response) => { 
 | 
            config.fullPath = fullPath 
 | 
            response.config = config 
 | 
            try { 
 | 
                // 对可能字符串不是json 的情况容错 
 | 
                if (typeof response.data === 'string') { 
 | 
                    response.data = JSON.parse(response.data) 
 | 
                } 
 | 
                // eslint-disable-next-line no-empty 
 | 
            } catch (e) { 
 | 
            } 
 | 
            settle(resolve, reject, response) 
 | 
        } 
 | 
    } 
 | 
    let requestTask 
 | 
    if (config.method === 'UPLOAD') { 
 | 
        delete _config.header['content-type'] 
 | 
        delete _config.header['Content-Type'] 
 | 
        const otherConfig = { 
 | 
        // #ifdef MP-ALIPAY 
 | 
            fileType: config.fileType, 
 | 
            // #endif 
 | 
            filePath: config.filePath, 
 | 
            name: config.name 
 | 
        } 
 | 
        const optionalKeys = [ 
 | 
        // #ifdef APP-PLUS || H5 
 | 
            'files', 
 | 
            // #endif 
 | 
            // #ifdef H5 
 | 
            'file', 
 | 
            // #endif 
 | 
            // #ifdef H5 || APP-PLUS 
 | 
            'timeout', 
 | 
            // #endif 
 | 
            'formData' 
 | 
        ] 
 | 
        requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys(optionalKeys, config) }) 
 | 
    } else if (config.method === 'DOWNLOAD') { 
 | 
        // #ifdef H5 || APP-PLUS 
 | 
        if (!isUndefined(config.timeout)) { 
 | 
            _config.timeout = config.timeout 
 | 
        } 
 | 
        // #endif 
 | 
        requestTask = uni.downloadFile(_config) 
 | 
    } else { 
 | 
        const optionalKeys = [ 
 | 
            'data', 
 | 
            'method', 
 | 
            // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN 
 | 
            'timeout', 
 | 
            // #endif 
 | 
            'dataType', 
 | 
            // #ifndef MP-ALIPAY 
 | 
            'responseType', 
 | 
            // #endif 
 | 
            // #ifdef APP-PLUS 
 | 
            'sslVerify', 
 | 
            // #endif 
 | 
            // #ifdef H5 
 | 
            'withCredentials', 
 | 
            // #endif 
 | 
            // #ifdef APP-PLUS 
 | 
            'firstIpv4' 
 | 
        // #endif 
 | 
        ] 
 | 
        requestTask = uni.request({ ..._config, ...mergeKeys(optionalKeys, config) }) 
 | 
    } 
 | 
    if (config.getTask) { 
 | 
        config.getTask(requestTask, config) 
 | 
    } 
 | 
}) 
 |