Files
weRequest/build/weRequest.js

1065 lines
77 KiB
JavaScript
Raw Normal View History

2018-12-19 19:26:38 +08:00
/*!
* weRequest 1.1.0
* https://github.com/IvinWu/weRequest
*/
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
2018-12-19 19:26:38 +08:00
/******/ return __webpack_require__(__webpack_require__.s = "./src/index.js");
/******/ })
/************************************************************************/
/******/ ({
2018-12-19 19:26:38 +08:00
/***/ "./src/api/getConfig.js":
/*!******************************!*\
!*** ./src/api/getConfig.js ***!
\******************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
/* harmony import */ var _store_status__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store/status */ "./src/store/status.js");
/* harmony default export */ __webpack_exports__["default"] = (() => {
return {
urlPerfix: _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].urlPerfix,
sessionExpireTime: _store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpireTime,
sessionExpireKey: _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].sessionExpireKey,
sessionExpire: _store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpire
}
});
/***/ }),
/***/ "./src/api/getSession.js":
/*!*******************************!*\
!*** ./src/api/getSession.js ***!
\*******************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_status__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/status */ "./src/store/status.js");
/* harmony default export */ __webpack_exports__["default"] = (() => {
return _store_status__WEBPACK_IMPORTED_MODULE_0__["default"].session
});
/***/ }),
/***/ "./src/api/init.js":
/*!*************************!*\
2018-12-19 19:26:38 +08:00
!*** ./src/api/init.js ***!
\*************************/
2018-12-19 19:26:38 +08:00
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
2018-12-19 19:26:38 +08:00
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
/* harmony import */ var _store_status__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store/status */ "./src/store/status.js");
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = ((params) => {
Object.assign(_store_config__WEBPACK_IMPORTED_MODULE_0__["default"], params);
// 如果配置更改了session的存储名字则重新获取一次session
if (params.sessionName) {
try {
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session = wx.getStorageSync(_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].sessionName) || '';
} catch (e) {
console.error('wx.getStorageSync:fail, can not get session.')
}
}
// 如果配置更改了session过期时间的存储名字则重新获取一次session的过期时间
if (params.sessionExpireKey) {
try {
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpire = wx.getStorageSync(_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].sessionExpireKey) || Infinity;
} catch (e) {
console.error('wx.getStorageSync:fail, can not get sessionExpire.')
}
}
2018-12-19 19:26:38 +08:00
});
2018-12-19 19:26:38 +08:00
/***/ }),
/***/ "./src/api/login.js":
/*!**************************!*\
!*** ./src/api/login.js ***!
\**************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _module_sessionManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../module/sessionManager */ "./src/module/sessionManager.js");
/* harmony default export */ __webpack_exports__["default"] = ((callback) => {
Object(_module_sessionManager__WEBPACK_IMPORTED_MODULE_0__["default"])(callback, {})
});
/***/ }),
2018-12-19 19:26:38 +08:00
/***/ "./src/api/request.js":
/*!****************************!*\
!*** ./src/api/request.js ***!
\****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
2018-12-19 19:26:38 +08:00
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _module_requestHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../module/requestHandler */ "./src/module/requestHandler.js");
/* harmony default export */ __webpack_exports__["default"] = ((obj) => {
_module_requestHandler__WEBPACK_IMPORTED_MODULE_0__["default"].request(obj)
});
/***/ }),
/***/ "./src/api/setSession.js":
/*!*******************************!*\
!*** ./src/api/setSession.js ***!
\*******************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_status__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/status */ "./src/store/status.js");
/* harmony default export */ __webpack_exports__["default"] = ((session) => {
_store_status__WEBPACK_IMPORTED_MODULE_0__["default"].session = session;
_store_status__WEBPACK_IMPORTED_MODULE_0__["default"].sessionIsFresh = true;
});
/***/ }),
/***/ "./src/api/uploadFile.js":
/*!*******************************!*\
!*** ./src/api/uploadFile.js ***!
\*******************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _module_requestHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../module/requestHandler */ "./src/module/requestHandler.js");
/* harmony default export */ __webpack_exports__["default"] = ((obj) => {
_module_requestHandler__WEBPACK_IMPORTED_MODULE_0__["default"].uploadFile(obj)
});
/***/ }),
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/*! exports provided: init, request, uploadFile, setSession, login, getSession, getConfig */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _api_init__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./api/init */ "./src/api/init.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "init", function() { return _api_init__WEBPACK_IMPORTED_MODULE_0__["default"]; });
/* harmony import */ var _api_request__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./api/request */ "./src/api/request.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "request", function() { return _api_request__WEBPACK_IMPORTED_MODULE_1__["default"]; });
/* harmony import */ var _api_uploadFile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./api/uploadFile */ "./src/api/uploadFile.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "uploadFile", function() { return _api_uploadFile__WEBPACK_IMPORTED_MODULE_2__["default"]; });
/* harmony import */ var _api_setSession__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./api/setSession */ "./src/api/setSession.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSession", function() { return _api_setSession__WEBPACK_IMPORTED_MODULE_3__["default"]; });
/* harmony import */ var _api_login__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./api/login */ "./src/api/login.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "login", function() { return _api_login__WEBPACK_IMPORTED_MODULE_4__["default"]; });
/* harmony import */ var _api_getSession__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./api/getSession */ "./src/api/getSession.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSession", function() { return _api_getSession__WEBPACK_IMPORTED_MODULE_5__["default"]; });
/* harmony import */ var _api_getConfig__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./api/getConfig */ "./src/api/getConfig.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getConfig", function() { return _api_getConfig__WEBPACK_IMPORTED_MODULE_6__["default"]; });
/***/ }),
/***/ "./src/module/cacheManager.js":
/*!************************************!*\
!*** ./src/module/cacheManager.js ***!
\************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
function get(obj) {
wx.getStorage({
key: obj.originUrl,
success: function (res) {
if (typeof obj.cache === "function" && obj.cache(res.data)) {
if (typeof obj.success === "function") {
obj.success(res.data, {isCache: true})
}
} else if (obj.cache == true) {
if (typeof obj.success === "function") {
obj.success(res.data, {isCache: true})
}
}
typeof obj.complete === "function" && obj.complete();
}
})
}
2018-12-19 19:26:38 +08:00
function set(obj, realData) {
if (obj.cache === true || (typeof obj.cache === "function" && obj.cache(realData))) {
wx.setStorage({
key: obj.originUrl,
data: realData
})
}
}
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = ({
get,
set
});
/***/ }),
/***/ "./src/module/durationReporter.js":
/*!****************************************!*\
!*** ./src/module/durationReporter.js ***!
\****************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
function start(obj, name) {
switch (name) {
case 'checkSession':
obj._checkSessionStartTime = new Date().getTime();
break;
case 'login':
obj._loginStartTime = new Date().getTime();
break;
default:
if (obj.report) {
obj._reportStartTime = new Date().getTime();
}
}
}
2018-12-19 19:26:38 +08:00
function end(obj, name) {
switch (name) {
case 'checkSession':
// wx.checkSession 耗时上报
obj._checkSessionEndTime = new Date().getTime();
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].reportCGI === "function") {
_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].reportCGI('wx_checkSession', obj._checkSessionStartTime, obj._checkSessionEndTime);
}
break;
case 'login':
// wx.login 耗时上报
obj._loginEndTime = new Date().getTime();
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].reportCGI === "function") {
_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].reportCGI('wx_login', obj._loginStartTime, obj._loginEndTime);
}
break;
default:
// 其他CGI接口
if (obj.report && typeof _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].reportCGI === "function") {
obj._reportEndTime = new Date().getTime();
_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].reportCGI(obj.report, obj._reportStartTime, obj._reportEndTime);
}
break;
}
}
/* harmony default export */ __webpack_exports__["default"] = ({
start,
end
});
/***/ }),
2018-12-19 19:26:38 +08:00
/***/ "./src/module/errorHandler.js":
/*!************************************!*\
!*** ./src/module/errorHandler.js ***!
\************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
2018-12-19 19:26:38 +08:00
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = ((obj, res) => {
if (typeof obj.fail === "function") {
obj.fail(res);
} else {
let title = "";
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorTitle === "function") {
try {
title = _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorTitle(res.data)
} catch (e) {
}
} else if (typeof errorTitle === "string") {
title = _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorTitle;
}
let content = "";
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorContent === "function") {
try {
content = _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorContent(res.data)
} catch (e) {
}
2018-12-19 19:26:38 +08:00
} else if (typeof _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorContent === "string") {
content = _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorContent;
}
wx.showModal({
title: title,
content: content || "网络或服务异常,请稍后重试",
showCancel: false
})
}
2018-12-19 19:26:38 +08:00
// 如果有配置统一错误回调函数,则执行它
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorCallback === "function") {
_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].errorCallback(obj, res);
}
console.error(res);
});
/***/ }),
/***/ "./src/module/mockManager.js":
/*!***********************************!*\
!*** ./src/module/mockManager.js ***!
\***********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
/* harmony import */ var _responseHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./responseHandler */ "./src/module/responseHandler.js");
function get(obj, method) {
if(!_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].mockJson[obj.url] && !_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].mockJson[obj.originUrl]) {
// mock 没有对应接口的数据
console.error('mock 没有对应接口的数据');
return false;
}
let data = _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].mockJson[obj.url] || _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].mockJson[obj.originUrl];
// deep copy
data = JSON.parse(JSON.stringify(data));
let res = {
data: data,
statusCode: 200
};
Object(_responseHandler__WEBPACK_IMPORTED_MODULE_1__["default"])(res, obj, method)
}
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = ({
get
});
/***/ }),
/***/ "./src/module/requestHandler.js":
/*!**************************************!*\
!*** ./src/module/requestHandler.js ***!
\**************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _util_loading__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/loading */ "./src/util/loading.js");
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
/* harmony import */ var _store_status__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store/status */ "./src/store/status.js");
/* harmony import */ var _mockManager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mockManager */ "./src/module/mockManager.js");
/* harmony import */ var _cacheManager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cacheManager */ "./src/module/cacheManager.js");
/* harmony import */ var _sessionManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sessionManager */ "./src/module/sessionManager.js");
/* harmony import */ var _errorHandler__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.js");
/* harmony import */ var _responseHandler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./responseHandler */ "./src/module/responseHandler.js");
/* harmony import */ var _durationReporter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.js");
// 格式化url
function format(url) {
if (url.startsWith('http')) {
return url
} else {
2018-12-19 19:26:38 +08:00
let urlPerfix = _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].urlPerfix;
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].urlPerfix === "function") {
urlPerfix = _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].urlPerfix()
}
return urlPerfix + url;
}
}
2018-12-19 19:26:38 +08:00
// 所有请求发出前需要做的事情
function preDo(obj) {
2018-12-19 19:26:38 +08:00
if(typeof obj.beforeSend === "function") {
obj.beforeSend();
}
// 登录态失效,重复登录计数
if (typeof obj.reLoginLimit === "undefined") {
obj.reLoginLimit = 0;
} else {
obj.reLoginLimit++;
}
if (typeof obj.count === "undefined") {
obj.count = 0;
}
if (obj.showLoading) {
2018-12-19 19:26:38 +08:00
_util_loading__WEBPACK_IMPORTED_MODULE_0__["default"].show(obj.showLoading);
obj.complete = ((fn) => {
return ()=> {
_util_loading__WEBPACK_IMPORTED_MODULE_0__["default"].hide();
typeof fn === "function" && fn.apply(this, arguments);
}
})(obj.complete)
}
2018-12-19 19:26:38 +08:00
obj.originUrl = obj.url;
obj.url = format(obj.url);
return obj;
}
2018-12-19 19:26:38 +08:00
// 格式化处理请求的obj内容
function initialize(obj, container) {
if (!obj[container]) {
obj[container] = {};
}
2018-12-19 19:26:38 +08:00
if (obj.originUrl !== _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].codeToSession.url && _store_status__WEBPACK_IMPORTED_MODULE_2__["default"].session) {
obj[container][_store_config__WEBPACK_IMPORTED_MODULE_1__["default"].sessionName] = _store_status__WEBPACK_IMPORTED_MODULE_2__["default"].session;
}
// 如果有全局参数,则添加
2018-12-19 19:26:38 +08:00
let gd = {};
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].globalData === "function") {
gd = _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].globalData();
} else if (typeof _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].globalData === "object") {
gd = _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].globalData;
}
2018-12-19 19:26:38 +08:00
obj[container] = Object.assign({}, gd, obj[container]);
obj.method = obj.method || 'GET';
2018-12-19 19:26:38 +08:00
obj.dataType = obj.dataType || 'json';
// 如果请求不是GET则在URL中自动加上登录态和全局参数
2018-12-19 19:26:38 +08:00
if (obj.method !== "GET") {
2018-12-19 19:26:38 +08:00
if (_store_status__WEBPACK_IMPORTED_MODULE_2__["default"].session) {
if (obj.url.indexOf('?') >= 0) {
obj.url += '&' + _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].sessionName + '=' + encodeURIComponent(_store_status__WEBPACK_IMPORTED_MODULE_2__["default"].session);
} else {
2018-12-19 19:26:38 +08:00
obj.url += '?' + _store_config__WEBPACK_IMPORTED_MODULE_1__["default"].sessionName + '=' + encodeURIComponent(_store_status__WEBPACK_IMPORTED_MODULE_2__["default"].session);
}
}
// 如果有全局参数则在URL中添加
2018-12-19 19:26:38 +08:00
for (let i in gd) {
if (obj.url.indexOf('?') >= 0) {
obj.url += '&' + i + '=' + gd[i];
} else {
2018-12-19 19:26:38 +08:00
obj.url += '?' + i + '=' + gd[i];
}
}
}
2018-12-19 19:26:38 +08:00
_durationReporter__WEBPACK_IMPORTED_MODULE_8__["default"].start(obj);
return obj;
}
2018-12-19 19:26:38 +08:00
function doRequest(obj) {
obj = initialize(obj, 'data');
obj.count++;
wx.request({
2018-12-19 19:26:38 +08:00
url: obj.url,
data: obj.data,
method: obj.method,
header: obj.header || {},
dataType: obj.dataType || 'json',
success: function (res) {
2018-12-19 19:26:38 +08:00
Object(_responseHandler__WEBPACK_IMPORTED_MODULE_7__["default"])(res, obj, 'request')
},
fail: function (res) {
2018-12-19 19:26:38 +08:00
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_6__["default"])(obj, res);
console.error(res);
},
complete: function () {
obj.count--;
2018-12-19 19:26:38 +08:00
typeof obj.complete === "function" && obj.count === 0 && obj.complete();
}
})
}
2018-12-19 19:26:38 +08:00
function doUploadFile(obj) {
obj.count++;
wx.uploadFile({
2018-12-19 19:26:38 +08:00
url: obj.url,
filePath: obj.filePath || '',
name: obj.name || '',
2018-12-19 19:26:38 +08:00
method: 'POST',
formData: obj.formData,
success: function (res) {
2018-12-19 19:26:38 +08:00
Object(_responseHandler__WEBPACK_IMPORTED_MODULE_7__["default"])(res, obj, 'uploadFile')
},
fail: function (res) {
2018-12-19 19:26:38 +08:00
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_6__["default"])(obj, res);
console.error(res);
},
complete: function () {
obj.count--;
2018-12-19 19:26:38 +08:00
typeof obj.complete === "function" && obj.count === 0 && obj.complete();
}
})
}
2018-12-19 19:26:38 +08:00
function request(obj) {
obj = preDo(obj);
if(_store_config__WEBPACK_IMPORTED_MODULE_1__["default"].mockJson) {
_mockManager__WEBPACK_IMPORTED_MODULE_3__["default"].get(obj, 'request');
return false;
}
if(obj.cache) {
_cacheManager__WEBPACK_IMPORTED_MODULE_4__["default"].get(obj);
}
Object(_sessionManager__WEBPACK_IMPORTED_MODULE_5__["default"])(()=>{
doRequest(obj)
}, obj)
}
function uploadFile(obj) {
obj = preDo(obj);
if(_store_config__WEBPACK_IMPORTED_MODULE_1__["default"].mockJson) {
_mockManager__WEBPACK_IMPORTED_MODULE_3__["default"].get(obj, 'uploadFile');
return false;
}
if(obj.cache) {
_cacheManager__WEBPACK_IMPORTED_MODULE_4__["default"].get(obj);
}
Object(_sessionManager__WEBPACK_IMPORTED_MODULE_5__["default"])(()=>{
doUploadFile(obj)
}, obj)
}
/* harmony default export */ __webpack_exports__["default"] = ({
request,
uploadFile
});
/***/ }),
/***/ "./src/module/responseHandler.js":
/*!***************************************!*\
!*** ./src/module/responseHandler.js ***!
\***************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
/* harmony import */ var _store_status__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store/status */ "./src/store/status.js");
/* harmony import */ var _requestHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.js");
/* harmony import */ var _errorHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.js");
/* harmony import */ var _cacheManager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cacheManager */ "./src/module/cacheManager.js");
/* harmony import */ var _durationReporter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.js");
function response(res, obj, method) {
if (res.statusCode === 200) {
// 兼容uploadFile返回的res.data可能是字符串
if(typeof res.data === "string") {
try {
2018-12-19 19:26:38 +08:00
res.data = JSON.parse(res.data);
} catch (e) {
2018-12-19 19:26:38 +08:00
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_3__["default"])(obj, res);
return false;
}
}
2018-12-19 19:26:38 +08:00
_durationReporter__WEBPACK_IMPORTED_MODULE_5__["default"].end(obj);
if (obj.isLogin) {
// 登录请求
let s = "";
try {
2018-12-19 19:26:38 +08:00
s = _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].codeToSession.success(res.data);
} catch (e) {
}
2018-12-19 19:26:38 +08:00
if (s) {
obj.success(s);
} else {
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_3__["default"])(obj, res);
}
} else if (_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].loginTrigger(res.data) && obj.reLoginLimit < _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].reLoginLimit) {
// 登录态失效,且重试次数不超过配置
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session = '';
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionIsFresh = true;
wx.removeStorage({
key: _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].sessionName,
complete: function () {
_requestHandler__WEBPACK_IMPORTED_MODULE_2__["default"][method](obj)
}
})
} else if (_store_config__WEBPACK_IMPORTED_MODULE_0__["default"].successTrigger(res.data) && typeof obj.success === "function") {
// 接口返回成功码
let realData = null;
try {
realData = _store_config__WEBPACK_IMPORTED_MODULE_0__["default"].successData(res.data);
} catch (e) {
console.error("Function successData occur error: " + e);
}
if(!obj.noCacheFlash) {
// 如果为了保证页面不闪烁,则不回调,只是缓存最新数据,待下次进入再用
obj.success(realData);
}
// 缓存存储
_cacheManager__WEBPACK_IMPORTED_MODULE_4__["default"].set(obj, realData);
} else {
// 接口返回失败码
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_3__["default"])(obj, res);
}
2018-12-19 19:26:38 +08:00
} else {
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_3__["default"])(obj, res);
}
2018-12-19 19:26:38 +08:00
}
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = (response);
2018-12-19 19:26:38 +08:00
/***/ }),
/***/ "./src/module/sessionManager.js":
/*!**************************************!*\
!*** ./src/module/sessionManager.js ***!
\**************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _util_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/flow */ "./src/util/flow.js");
/* harmony import */ var _store_status__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store/status */ "./src/store/status.js");
/* harmony import */ var _store_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store/config */ "./src/store/config.js");
/* harmony import */ var _requestHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.js");
/* harmony import */ var _errorHandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.js");
/* harmony import */ var _durationReporter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.js");
function checkSession(callback, obj) {
if (_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].isCheckingSession) {
_util_flow__WEBPACK_IMPORTED_MODULE_0__["default"].wait('checkSessionFinished', () => {
checkSession(callback, obj)
})
} else if (!_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionIsFresh && _store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session) {
// 如果本地有登录态但还没检验过session_key是否有效则需要检验一次
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].isCheckingSession = true;
obj.count++;
_durationReporter__WEBPACK_IMPORTED_MODULE_5__["default"].start(obj, 'checkSession');
wx.checkSession({
success: function () {
// 登录态有效,且在本生命周期内无须再检验了
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionIsFresh = true;
},
fail: function () {
// 登录态过期
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session = '';
},
2018-12-19 19:26:38 +08:00
complete: function () {
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].isCheckingSession = false;
obj.count--;
_durationReporter__WEBPACK_IMPORTED_MODULE_5__["default"].end(obj, 'checkSession');
doLogin(callback, obj);
_util_flow__WEBPACK_IMPORTED_MODULE_0__["default"].emit('checkSessionFinished');
}
})
} else {
2018-12-19 19:26:38 +08:00
// 已经检验过了
doLogin(callback, obj);
}
}
2018-12-19 19:26:38 +08:00
function doLogin(callback, obj) {
if (obj.isLogin) {
// 登录接口,直接放过
typeof callback === "function" && callback();
} else if (_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session) {
// 缓存中有session
if (_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpireTime && new Date().getTime() > _store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpire) {
// 如果有设置本地session缓存时间且缓存时间已到
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session = '';
doLogin(callback, obj);
} else {
typeof callback === "function" && callback();
2018-09-24 21:58:20 +08:00
}
2018-12-19 19:26:38 +08:00
} else if (_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].logining) {
// 正在登录中,请求轮询稍后,避免重复调用登录接口
_util_flow__WEBPACK_IMPORTED_MODULE_0__["default"].wait('doLoginFinished', function () {
doLogin(callback, obj);
})
} else {
// 缓存中无session
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].logining = true;
obj.count++;
_durationReporter__WEBPACK_IMPORTED_MODULE_5__["default"].start(obj, 'login');
console.log('wx.login');
wx.login({
complete: function () {
obj.count--;
_durationReporter__WEBPACK_IMPORTED_MODULE_5__["default"].end(obj, 'login');
typeof obj.complete === "function" && obj.count === 0 && obj.complete();
},
success: function (res) {
if (res.code) {
code2Session(obj, res.code, callback)
} else {
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_4__["default"])(obj, res);
console.error(res);
// 登录失败,解除锁,防止死锁
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].logining = false;
_util_flow__WEBPACK_IMPORTED_MODULE_0__["default"].emit('doLoginFinished');
}
},
fail: function (res) {
Object(_errorHandler__WEBPACK_IMPORTED_MODULE_4__["default"])(obj, res);
console.error(res);
// 登录失败,解除锁,防止死锁
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].logining = false;
_util_flow__WEBPACK_IMPORTED_MODULE_0__["default"].emit('doLoginFinished');
}
})
}
}
2018-12-19 19:26:38 +08:00
function code2Session(obj, code, callback) {
let data;
// codeToSession.data支持函数
if (typeof _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.data === "function") {
data = _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.data();
} else {
2018-12-19 19:26:38 +08:00
data = _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.data || {};
}
2018-12-19 19:26:38 +08:00
data[_store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.codeName] = code;
obj.count++;
_requestHandler__WEBPACK_IMPORTED_MODULE_3__["default"].request({
url: _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.url,
data: data,
method: _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.method || 'GET',
isLogin: true,
report: _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.report || _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.url,
success: function (s) {
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session = s;
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionIsFresh = true;
// 如果有设置本地session过期时间
if (_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpireTime) {
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpire = new Date().getTime() + _store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpireTime;
wx.setStorage({
key: _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].sessionExpireKey,
data: _store_status__WEBPACK_IMPORTED_MODULE_1__["default"].sessionExpire
})
}
typeof callback === "function" && callback();
wx.setStorage({
key: _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].sessionName,
data: _store_status__WEBPACK_IMPORTED_MODULE_1__["default"].session
})
},
complete: function () {
obj.count--;
typeof obj.complete === "function" && obj.count === 0 && obj.complete();
_store_status__WEBPACK_IMPORTED_MODULE_1__["default"].logining = false;
_util_flow__WEBPACK_IMPORTED_MODULE_0__["default"].emit('doLoginFinished');
},
fail: _store_config__WEBPACK_IMPORTED_MODULE_2__["default"].codeToSession.fail || null
})
}
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = (checkSession);
/***/ }),
/***/ "./src/store/config.js":
/*!*****************************!*\
!*** ./src/store/config.js ***!
\*****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = ({
sessionName: "session",
loginTrigger() {
return false
},
codeToSession: {},
successTrigger() {
return true
},
urlPerfix: "",
successData(res) {
return res
},
doNotCheckSession: false,
errorTitle: "操作失败",
errorContent(res) {
return res
},
reLoginLimit: 3,
errorCallback: null,
reportCGI: false,
mockJson: false,
globalData: false,
// session在本地缓存的key
sessionExpireKey: "sessionExpireKey"
});
/***/ }),
/***/ "./src/store/status.js":
/*!*****************************!*\
!*** ./src/store/status.js ***!
\*****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = ({
session: '',
// session在本地缓存的有效时间
sessionExpireTime: null,
// session过期的时间点
sessionExpire: Infinity,
sessionIsFresh: false,
// 正在登录中,其他请求轮询稍后,避免重复调用登录接口
logining: false,
// 正在查询session有效期中避免重复调用接口
isCheckingSession: false
});
/***/ }),
/***/ "./src/util/flow.js":
/*!**************************!*\
!*** ./src/util/flow.js ***!
\**************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
let store = {};
function emit(key) {
let flow = getFlow(key);
let currentLength = flow.waitingList.length;
for (let i = 0; i < currentLength; i++) {
let callback = flow.waitingList.shift();
typeof callback == "function" && callback();
}
}
2018-12-19 19:26:38 +08:00
function wait(key, callback) {
var flow = getFlow(key);
flow.waitingList.push(callback)
}
2018-12-19 19:26:38 +08:00
function getFlow(key) {
if (!store[key]) {
store[key] = {
waitingList: []
}
}
2018-12-19 19:26:38 +08:00
return store[key];
}
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = ({
wait,
emit
});
/***/ }),
/***/ "./src/util/loading.js":
/*!*****************************!*\
!*** ./src/util/loading.js ***!
\*****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
function show(txt) {
wx.showToast({
title: typeof txt === 'boolean' ? '加载中' : txt,
icon: 'loading',
mask: true,
duration: 60000
})
}
2018-12-19 19:26:38 +08:00
function hide() {
wx.hideToast();
}
2018-12-19 19:26:38 +08:00
/* harmony default export */ __webpack_exports__["default"] = ({
show,
hide
});
2018-09-24 21:58:20 +08:00
/***/ })
/******/ });
2018-12-19 19:26:38 +08:00
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcuanMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLmpzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC5qcyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLmpzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC5qcyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24uanMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLmpzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci5qcyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIuanMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci5qcyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLmpzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLmpzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLmpzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2Zsb3cuanMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvbG9hZGluZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbkVBO0FBQ0E7OytEQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ0pBO0FBQ0E7OytEQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDckJBOztBQUVBO0FBQ0EsdUZBQStCO0FBQy9COzs7Ozs7Ozs7Ozs7Ozs7QUNKQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ0pBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNMQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBVUE7Ozs7Ozs7Ozs7Ozs7QUNoQkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsY0FBYztBQUN6RDtBQUNBLGFBQWE7QUFDYjtBQUNBLDJDQUEyQyxjQUFjO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDOUJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzlDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Q0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0F