UNPKG

@hsui/sdk

Version:

Hundsun frontend framework JSSDK

241 lines (236 loc) 9.31 kB
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime"; import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator"; import axios from 'axios'; import { ajaxSchema, storageSchema, report, runningError, isObject, isPlainObject, validate } from './utils'; var logger; /** * ajaxPromise(调用ajax函数得到)和cancel函数(取消请求函数)关系对应 * 其中,key 为 ajaxPromise ,value 为 cancel 函数 */ export var ajaxCancelMap = new WeakMap(); export function setConfig(opts) { logger = opts.logger; } export function ajax(options) { var cancel; // 存储当前请求取消函数 var ajaxPromise = new Promise(function (resolve, reject) { var validationError = validate(ajaxSchema, options); if (validationError) { throw report('-1', validationError); } var url = options.url, _options$method = options.method, method = _options$method === void 0 ? 'post' : _options$method, _options$data = options.data, data = _options$data === void 0 ? {} : _options$data, _options$timeout = options.timeout, timeout = _options$timeout === void 0 ? 5000 : _options$timeout, _options$headers = options.headers, headers = _options$headers === void 0 ? {} : _options$headers, _options$withCredenti = options.withCredentials, withCredentials = _options$withCredenti === void 0 ? false : _options$withCredenti, _options$responseType = options.responseType, responseType = _options$responseType === void 0 ? 'json' : _options$responseType; var requestConfig = { url: url, method: method, params: method === 'get' ? data : {}, data: method === 'post' ? data : {}, timeout: timeout, headers: headers, // request headers withCredentials: withCredentials, responseType: responseType, cancelToken: new axios.CancelToken(function (c) { cancel = c; }) }; logger && logger.debug("\u53D1\u9001\u8BF7\u6C42 ".concat(requestConfig.url, " \u914D\u7F6E\u9879"), requestConfig); axios(requestConfig).then(function (response) { var data = response.data, headers = response.headers, status = response.status, statusText = response.statusText; logger && logger.debug("\u8BF7\u6C42 ".concat(requestConfig.url, " \u5E94\u7B54\u5934\u90E8\u5B57\u6BB5"), headers); var result = {}; if (options.forceWrappedInData) { result.data = data; } else { result = data; } if (isPlainObject(result)) { // request config if (options.includeRequestConfig) { result.config = requestConfig; } // response headers if (options.includeResponseHeaders) { result.headers = headers; } if (options.includeResponseStatusInfo) { result.status = status; result.statusText = statusText; } } resolve(result); }).catch(function (error) { if (axios.isCancel(error)) { logger && logger.info("".concat(requestConfig.url, " \u53D6\u6D88\u8BF7\u6C42")); reject(report('-1', "".concat(requestConfig.url, " \u53D6\u6D88\u8BF7\u6C42 "))); return; } logger && logger.error("\u8BF7\u6C42 ".concat(requestConfig.url, " \u5F02\u5E38")); if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx var _error$response = error.response, status = _error$response.status, statusText = _error$response.statusText, _data = _error$response.data, _headers = _error$response.headers; logger && logger.error("\u8BF7\u6C42 ".concat(requestConfig.url, " \u5E94\u7B54\u5934\u90E8\u5B57\u6BB5"), _headers); var result = {}; if (options.forceWrappedInData) { result.data = _data; } else { result = _data; } if (isPlainObject(result)) { // request config if (options.includeRequestConfig) { result.config = requestConfig; } // response headers if (options.includeResponseHeaders) { result.headers = _headers; } if (options.includeResponseStatusInfo) { result.status = status; result.statusText = statusText; } } return reject(report(status, statusText, result)); } else if (error.request) { // The request was made but no response was received // `error.request` is an instance of XMLHttpRequest in the browser and an instance of // http.ClientRequest in node.js logger && logger.error(runningError('INVALID_REQUEST')); reject(report('-1', runningError('INVALID_REQUEST'))); } else { // Something happened in setting up the request that triggered an Error logger && logger.error(error.message); reject(report('-1', error.message)); } }); }); // 建立关联,ajaxPromise 和 cancel 函数 ajaxCancelMap.set(ajaxPromise, cancel); return ajaxPromise; } export var storage = { setData: function setData(options) { return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { var validationError, key, value; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: validationError = validate(storageSchema, options); if (!validationError) { _context.next = 4; break; } logger && logger.error('本地数据写入异常', validationError); throw report('-1', validationError); case 4: key = options.key, value = options.value; if (isObject(value)) { value = JSON.stringify(value); } value = value.toString(); _context.prev = 7; logger && logger.debug('本地数据写入成功', key); return _context.abrupt("return", localStorage.setItem(key, value)); case 12: _context.prev = 12; _context.t0 = _context["catch"](7); logger && logger.error('本地数据写入异常', 'fail to set local data, value could exceed the quota'); throw report('-1', 'fail to set local data, value could exceed the quota'); case 16: case "end": return _context.stop(); } }, _callee, null, [[7, 12]]); }))(); }, getData: function getData(options) { return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { var validationError, key, value; return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: validationError = validate(storageSchema, options); if (!validationError) { _context2.next = 4; break; } logger && logger.debug('本地数据读取异常', validationError); throw report('-1', validationError); case 4: key = options.key; if (!localStorage.hasOwnProperty(key)) { _context2.next = 11; break; } value = localStorage.getItem(key); logger && logger.debug('读取本地数据成功', key); return _context2.abrupt("return", value); case 11: logger && logger.debug('本地数据读取异常', runningError('NOT_FOUND', { key: key })); throw report('-1', runningError('NOT_FOUND', { key: key })); case 13: case "end": return _context2.stop(); } }, _callee2); }))(); }, deleteData: function deleteData(options) { return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() { var validationError, key; return _regeneratorRuntime().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: validationError = validate(storageSchema, options); if (!validationError) { _context3.next = 4; break; } logger && logger.error('本地数据删除异常', validationError); throw report('-1', validationError); case 4: key = options.key; if (!localStorage.hasOwnProperty(key)) { _context3.next = 10; break; } logger && logger.debug('删除本地数据成功', key); return _context3.abrupt("return", localStorage.removeItem(key)); case 10: logger && logger.error('本地数据删除异常', runningError('NOT_FOUND', { key: key })); throw report('-1', runningError('NOT_FOUND', { key: key })); case 12: case "end": return _context3.stop(); } }, _callee3); }))(); } };