ayano-react
Version:
react app creator
134 lines (114 loc) • 4.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.bodyDataBuilder = exports.searchParamsBuilder = exports.methods = undefined;
var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _ayanoUtils = require('ayano-utils');
var _axios = require('axios');
var _axios2 = _interopRequireDefault(_axios);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _methods = ['get', 'post', 'delete', 'put', 'patch', 'options', 'head'];
var methods = exports.methods = _methods.reduce(function (pre, cur) {
pre[cur] = cur;
return pre;
}, {});
var DEFAULT_METHOD = methods.get;
var searchParamsBuilder = exports.searchParamsBuilder = function searchParamsBuilder(data, api) {
var method = api.method || DEFAULT_METHOD;
if ([methods.get, methods.delete, methods.headers, methods.options].indexOf(method.toLowerCase()) > -1) {
return data;
} else {
return void 0;
}
};
var bodyDataBuilder = exports.bodyDataBuilder = function bodyDataBuilder(data, api) {
var method = api.method || DEFAULT_METHOD;
if ([methods.get, methods.delete, methods.headers, methods.options].indexOf(method.toLowerCase()) > -1) {
return void 0;
} else {
return data;
}
};
var Request = function () {
/**
* config.baseURL
* config.headers
* config.timeout
* config.searchParamsBuilder
* config.bodyDataBuilder
*/
function Request(config) {
_classCallCheck(this, Request);
this.apis = {};
this.setConfig(config);
}
_createClass(Request, [{
key: 'toApis',
value: function toApis() {
var handler = {
get: function get(target, name) {
return target.apis[name];
},
set: function set(target, name, value) {
throw new Error("禁止为apis设置属性");
}
};
return new Proxy(this, handler);
}
}, {
key: 'setConfig',
value: function setConfig(config) {
var apis = config.apis;
config = Object.assign({}, config);
delete config.apis;
this.defaultConfig = Object.assign({}, Request.defaultConfig, config);
var axiosConfig = Object.assign({}, this.defaultConfig);
delete axiosConfig.searchParamsBuilder;
delete axiosConfig.bodyDataBuilder;
this.axios = _axios2.default.create(axiosConfig);
if (apis) {
this.setApis(apis);
}
}
}, {
key: 'buildRequest',
value: function buildRequest(api) {
var _this = this;
var method = api.method || DEFAULT_METHOD;
return function (data, config) {
config = Object.assign({}, config);
var bodyDataBuilder = config.bodyDataBuilder || api.bodyDataBuilder || _this.defaultConfig.bodyDataBuilder;
var searchParamsBuilder = config.searchParamsBuilder || api.searchParamsBuilder || _this.defaultConfig.searchParamsBuilder;
var sender = config.sender || _this.axios;
delete config.bodyDataBuilder;
delete config.searchParamsBuilder;
delete config.sender;
delete config.onError;
delete config.handleResponse;
var url = (0, _ayanoUtils.is)(_ayanoUtils.TYPES.Function)(api.path) ? api.path(data) : api.path;
var params = searchParamsBuilder(data, { method: api.method });
var bodyData = bodyDataBuilder(data, { method: api.method });
return sender(Object.assign({ url: url, params: params, data: bodyData, method: api.method }, config));
};
}
}, {
key: 'setApis',
value: function setApis(apis) {
var _this2 = this;
this._apis = apis;
this.apis = Object.keys(apis).reduce(function (pre, key) {
var api = apis[key];
pre[key] = _this2.buildRequest(api);
return pre;
}, {});
}
}]);
return Request;
}();
Request.defaultConfig = {
timeout: 10000,
searchParamsBuilder: searchParamsBuilder,
bodyDataBuilder: bodyDataBuilder };
exports.default = Request;