UNPKG

apib

Version:

An API basic client.

110 lines (100 loc) 2.73 kB
'use strict' import { version } from '../package.json' class API { version = version /** * 将对象转为 URL QueryString * * @param {object} data */ param(data) { // https://jsperf.com/array-push-vs-string-concat /* let ret = [] Object.keys(data).forEach(v => { ret.push(`${encodeURIComponent(v)}=${encodeURIComponent(data[v])}`) }) return ret.join('&') */ let ret = '' Object.keys(data).forEach(v => { ret = ret + `${encodeURIComponent(v)}=${encodeURIComponent(data[v])}&` }) return ret.slice(0, -1) } /** * 类型判断 * * @param {any} unknown * @param {boolen} keepCase 保持大小写 * @return {string} */ type(unknown, keepCase) { const type = Object.prototype.toString.call(unknown).slice(8, -1) // https://jsperf.com/replace-vs-slice/5 // return type.replace('[object ', '').replace(']', '').toLowerCase() return keepCase ? type : type.toLowerCase() } /** * 将参数列表转为对象形式 * * @param {array} list 参数原始对象,即 arguments * @param {array} names 参数名称对应的数组,可以给默认值,默认值需要能被 JSON.parse 解析。 * * 注意: * - 参数的值支持覆盖 * - 在遇到对象之后直接退出 * * 示例: * > args([1, 2, {xor: true}], ['offset', 'count']) * < {offset: 1, count: 2, xor: true} */ args(list, names = []) { const options = {} names.forEach((item, index) => { if (item.indexOf('=') > -1) { const temp = item.split('=') const name = temp[0] names[index] = name try { options[name] = JSON.parse(temp.slice(1).join('=')) } catch (e) { // ignore } } }) for (let i = 0; i < list.length; i++) { const item = list[i] const name = names[i] if (this.type(item) === 'object') { Object.assign(options, item) break } else if ( this.type(item) !== 'undefined' && this.type(name) !== 'undefined' ) { options[name] = item } } return options } /** * 拼接链接地址 * * @param {array<string>} args */ join(...args) { let result = args[0] || '' for (let i = 1; i < args.length; i++) { if (args[i]) { result = result.replace(/\/+$/, '') + '/' + args[i].replace(/^\/+/, '') } } return result } // 需要自行实现 request 方法,基础方法不再进行提供 request() { throw new Error('Not implemented yet') } } export default API