resty-client
Version:
Simple HTTP and REST client library for Browser and Node
289 lines (241 loc) • 7.9 kB
JavaScript
import axios from 'axios';
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var Client = /*#__PURE__*/function () {
function Client(common, serverMap, apiMap) {
_classCallCheck(this, Client);
_defineProperty(this, "common", void 0);
_defineProperty(this, "base", void 0);
_defineProperty(this, "serverMap", void 0);
_defineProperty(this, "apiMap", void 0);
_defineProperty(this, "apis", void 0);
_defineProperty(this, "instance", void 0);
this.common = common || {};
this.instance = axios.create(common);
this.serverMap = serverMap || {};
this.apiMap = apiMap || {};
this.apis = {};
if (Object.keys(this.serverMap).length && Object.keys(this.apiMap).length) {
this.base = this.getDefault();
this.formatConfigUrl();
this.combine2Request();
}
this.middleware();
}
/**
* 获取默认的配置
* @returns
*/
_createClass(Client, [{
key: "getDefault",
value: function getDefault() {
var base = '';
for (var _i = 0, _Object$keys = Object.keys(this.serverMap); _i < _Object$keys.length; _i++) {
var key = _Object$keys[_i];
if (this.serverMap[key]["default"]) {
base = key;
}
}
if (!base) {
console.error('apis: 找不到默认服务器配置');
}
return base;
}
/**
* 配置正确的baseURL,如果没有baseURL就读默认的
* @returns
*/
}, {
key: "formatConfigUrl",
value: function formatConfigUrl() {
for (var _i2 = 0, _Object$keys2 = Object.keys(this.apiMap); _i2 < _Object$keys2.length; _i2++) {
var key = _Object$keys2[_i2];
var item = this.apiMap[key];
if (!item.server) {
item.server = this.base;
}
this.apiMap[key] = _objectSpread(_objectSpread({}, this.serverMap[item.server]), item);
}
}
}, {
key: "get",
value: function get(url, request) {
request = _objectSpread(_objectSpread({}, request), {}, {
method: 'GET'
});
return this.request(url, request);
}
}, {
key: "delete",
value: function _delete(url, request) {
request = _objectSpread(_objectSpread({}, request), {}, {
method: 'DELETE'
});
return this.request(url, request);
}
}, {
key: "post",
value: function post(url, request) {
request = _objectSpread(_objectSpread({}, request), {}, {
method: 'POST'
});
return this.request(url, request);
}
}, {
key: "put",
value: function put(url, request) {
request = _objectSpread(_objectSpread({}, request), {}, {
method: 'PUT'
});
return this.request(url, request);
}
}, {
key: "patch",
value: function patch(url, request) {
request = _objectSpread(_objectSpread({}, request), {}, {
method: 'PATCH'
});
return this.request(url, request);
}
}, {
key: "request",
value: function request(url, _request) {
var rest = _request.rest || {};
var path = url;
if (Object.keys(rest).length) {
path = this.restful(url, rest);
} // 合并公共配置
var options = _objectSpread(_objectSpread({}, this.common), _request);
return this.instance.request(_objectSpread(_objectSpread({}, options), {}, {
url: path
}));
}
/**
* 将url转换为restful风格
* @param url
* @param rest
* @returns
*/
}, {
key: "restful",
value: function restful(url, rest) {
var regex = /:[^/]*/g;
return url.replace(regex, function (p) {
var key = p.slice(1);
if (rest[key]) {
return rest[key];
}
return p;
});
}
/**
* 将restful config配置合并
* @param config1 apis文件的基本配置信息
* @param config2 用户传入的配置信息
* @returns
*/
}, {
key: "rest2Combine",
value: function rest2Combine(config1, config2) {
var reConf = _objectSpread({}, config2);
if (config2.rest) {
reConf.url = this.restful(config1.url, config2.rest);
}
return _objectSpread(_objectSpread({}, config1), reConf);
}
/**
* 合并配置,转化为请求方法
* @returns
*/
}, {
key: "combine2Request",
value: function combine2Request() {
var _this = this;
var _loop = function _loop() {
var key = _Object$keys3[_i3];
_this.apis[key] = function (config) {
var result = _this.apiMap[key];
if (config) {
result = _this.rest2Combine(_this.apiMap[key], config);
}
return _this.instance.request(result);
};
};
for (var _i3 = 0, _Object$keys3 = Object.keys(this.apiMap); _i3 < _Object$keys3.length; _i3++) {
_loop();
}
}
/**
* client拦截器处理
*/
}, {
key: "middleware",
value: function middleware() {
var _this2 = this;
Client.reqMiddleware.map(function (middleware) {
return _this2.instance.interceptors.request.use(middleware.onFulfilled, middleware.onRejected);
});
Client.resMiddleware.map(function (middleware) {
return _this2.instance.interceptors.response.use(middleware.onFulfilled, middleware.onRejected);
});
}
}], [{
key: "useReq",
value: function useReq(onFulfilled, onRejected) {
Client.reqMiddleware.push({
onFulfilled: onFulfilled,
onRejected: onRejected
});
}
}, {
key: "useRes",
value: function useRes(onFulfilled, onRejected) {
Client.resMiddleware.push({
onFulfilled: onFulfilled,
onRejected: onRejected
});
}
}, {
key: "create",
value: function create(common, serverMap, apiMap) {
var client = new Client(common, serverMap, apiMap);
return client;
}
}]);
return Client;
}();
_defineProperty(Client, "reqMiddleware", []);
_defineProperty(Client, "resMiddleware", []);
export { Client as default };