UNPKG

resty-client

Version:

Simple HTTP and REST client library for Browser and Node

289 lines (241 loc) 7.9 kB
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 };