apib
Version:
An API basic client.
133 lines (112 loc) • 3.61 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.apib = factory());
}(this, (function () { 'use strict';
var version = "0.2.0";
var API = /*#__PURE__*/function () {
function API() {
this.version = version;
}
var _proto = API.prototype;
/**
* 将对象转为 URL QueryString
*
* @param {object} data
*/
_proto.param = function 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('&')
*/
var ret = '';
Object.keys(data).forEach(function (v) {
ret = ret + "".concat(encodeURIComponent(v), "=").concat(encodeURIComponent(data[v]), "&");
});
return ret.slice(0, -1);
}
/**
* 类型判断
*
* @param {any} unknown
* @param {boolen} keepCase 保持大小写
* @return {string}
*/
;
_proto.type = function type(unknown, keepCase) {
var 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}
*/
;
_proto.args = function args(list) {
var names = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var options = {};
names.forEach(function (item, index) {
if (item.indexOf('=') > -1) {
var temp = item.split('=');
var name = temp[0];
names[index] = name;
try {
options[name] = JSON.parse(temp.slice(1).join('='));
} catch (e) {// ignore
}
}
});
for (var i = 0; i < list.length; i++) {
var item = list[i];
var 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
*/
;
_proto.join = function join() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var result = args[0] || '';
for (var i = 1; i < args.length; i++) {
if (args[i]) {
result = result.replace(/\/+$/, '') + '/' + args[i].replace(/^\/+/, '');
}
}
return result;
} // 需要自行实现 request 方法,基础方法不再进行提供
;
_proto.request = function request() {
throw new Error('Not implemented yet');
};
return API;
}();
return API;
})));
//# sourceMappingURL=apib.js.map