UNPKG

icemilk

Version:

Shanghai jinbaozheng easy network technology Co.,Ltd sdk

1,343 lines (1,320 loc) 80.5 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('axios'), require('moment')) : typeof define === 'function' && define.amd ? define(['exports', 'axios', 'moment'], factory) : (global = global || self, factory(global.icemilk = {}, global.axios, global.moment)); }(this, (function (exports, axios, moment) { 'use strict'; axios = axios && axios.hasOwnProperty('default') ? axios['default'] : axios; moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } var __assign = function() { __assign = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; function __spreadArrays() { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; } var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var urlPattern = createCommonjsModule(function (module, exports) { // Generated by CoffeeScript 1.10.0 var slice = [].slice; (function(root, factory) { if ( exports !== null) { return module.exports = factory(); } else { return root.UrlPattern = factory(); } })(commonjsGlobal, function() { var P, UrlPattern, astNodeContainsSegmentsForProvidedParams, astNodeToNames, astNodeToRegexString, baseAstNodeToRegexString, concatMap, defaultOptions, escapeForRegex, getParam, keysAndValuesToObject, newParser, regexGroupCount, stringConcatMap, stringify; escapeForRegex = function(string) { return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); }; concatMap = function(array, f) { var i, length, results; results = []; i = -1; length = array.length; while (++i < length) { results = results.concat(f(array[i])); } return results; }; stringConcatMap = function(array, f) { var i, length, result; result = ''; i = -1; length = array.length; while (++i < length) { result += f(array[i]); } return result; }; regexGroupCount = function(regex) { return (new RegExp(regex.toString() + '|')).exec('').length - 1; }; keysAndValuesToObject = function(keys, values) { var i, key, length, object, value; object = {}; i = -1; length = keys.length; while (++i < length) { key = keys[i]; value = values[i]; if (value == null) { continue; } if (object[key] != null) { if (!Array.isArray(object[key])) { object[key] = [object[key]]; } object[key].push(value); } else { object[key] = value; } } return object; }; P = {}; P.Result = function(value, rest) { this.value = value; this.rest = rest; }; P.Tagged = function(tag, value) { this.tag = tag; this.value = value; }; P.tag = function(tag, parser) { return function(input) { var result, tagged; result = parser(input); if (result == null) { return; } tagged = new P.Tagged(tag, result.value); return new P.Result(tagged, result.rest); }; }; P.regex = function(regex) { return function(input) { var matches, result; matches = regex.exec(input); if (matches == null) { return; } result = matches[0]; return new P.Result(result, input.slice(result.length)); }; }; P.sequence = function() { var parsers; parsers = 1 <= arguments.length ? slice.call(arguments, 0) : []; return function(input) { var i, length, parser, rest, result, values; i = -1; length = parsers.length; values = []; rest = input; while (++i < length) { parser = parsers[i]; result = parser(rest); if (result == null) { return; } values.push(result.value); rest = result.rest; } return new P.Result(values, rest); }; }; P.pick = function() { var indexes, parsers; indexes = arguments[0], parsers = 2 <= arguments.length ? slice.call(arguments, 1) : []; return function(input) { var array, result; result = P.sequence.apply(P, parsers)(input); if (result == null) { return; } array = result.value; result.value = array[indexes]; return result; }; }; P.string = function(string) { var length; length = string.length; return function(input) { if (input.slice(0, length) === string) { return new P.Result(string, input.slice(length)); } }; }; P.lazy = function(fn) { var cached; cached = null; return function(input) { if (cached == null) { cached = fn(); } return cached(input); }; }; P.baseMany = function(parser, end, stringResult, atLeastOneResultRequired, input) { var endResult, parserResult, rest, results; rest = input; results = stringResult ? '' : []; while (true) { if (end != null) { endResult = end(rest); if (endResult != null) { break; } } parserResult = parser(rest); if (parserResult == null) { break; } if (stringResult) { results += parserResult.value; } else { results.push(parserResult.value); } rest = parserResult.rest; } if (atLeastOneResultRequired && results.length === 0) { return; } return new P.Result(results, rest); }; P.many1 = function(parser) { return function(input) { return P.baseMany(parser, null, false, true, input); }; }; P.concatMany1Till = function(parser, end) { return function(input) { return P.baseMany(parser, end, true, true, input); }; }; P.firstChoice = function() { var parsers; parsers = 1 <= arguments.length ? slice.call(arguments, 0) : []; return function(input) { var i, length, parser, result; i = -1; length = parsers.length; while (++i < length) { parser = parsers[i]; result = parser(input); if (result != null) { return result; } } }; }; newParser = function(options) { var U; U = {}; U.wildcard = P.tag('wildcard', P.string(options.wildcardChar)); U.optional = P.tag('optional', P.pick(1, P.string(options.optionalSegmentStartChar), P.lazy(function() { return U.pattern; }), P.string(options.optionalSegmentEndChar))); U.name = P.regex(new RegExp("^[" + options.segmentNameCharset + "]+")); U.named = P.tag('named', P.pick(1, P.string(options.segmentNameStartChar), P.lazy(function() { return U.name; }))); U.escapedChar = P.pick(1, P.string(options.escapeChar), P.regex(/^./)); U["static"] = P.tag('static', P.concatMany1Till(P.firstChoice(P.lazy(function() { return U.escapedChar; }), P.regex(/^./)), P.firstChoice(P.string(options.segmentNameStartChar), P.string(options.optionalSegmentStartChar), P.string(options.optionalSegmentEndChar), U.wildcard))); U.token = P.lazy(function() { return P.firstChoice(U.wildcard, U.optional, U.named, U["static"]); }); U.pattern = P.many1(P.lazy(function() { return U.token; })); return U; }; defaultOptions = { escapeChar: '\\', segmentNameStartChar: ':', segmentValueCharset: 'a-zA-Z0-9-_~ %', segmentNameCharset: 'a-zA-Z0-9', optionalSegmentStartChar: '(', optionalSegmentEndChar: ')', wildcardChar: '*' }; baseAstNodeToRegexString = function(astNode, segmentValueCharset) { if (Array.isArray(astNode)) { return stringConcatMap(astNode, function(node) { return baseAstNodeToRegexString(node, segmentValueCharset); }); } switch (astNode.tag) { case 'wildcard': return '(.*?)'; case 'named': return "([" + segmentValueCharset + "]+)"; case 'static': return escapeForRegex(astNode.value); case 'optional': return '(?:' + baseAstNodeToRegexString(astNode.value, segmentValueCharset) + ')?'; } }; astNodeToRegexString = function(astNode, segmentValueCharset) { if (segmentValueCharset == null) { segmentValueCharset = defaultOptions.segmentValueCharset; } return '^' + baseAstNodeToRegexString(astNode, segmentValueCharset) + '$'; }; astNodeToNames = function(astNode) { if (Array.isArray(astNode)) { return concatMap(astNode, astNodeToNames); } switch (astNode.tag) { case 'wildcard': return ['_']; case 'named': return [astNode.value]; case 'static': return []; case 'optional': return astNodeToNames(astNode.value); } }; getParam = function(params, key, nextIndexes, sideEffects) { var index, maxIndex, result, value; if (sideEffects == null) { sideEffects = false; } value = params[key]; if (value == null) { if (sideEffects) { throw new Error("no values provided for key `" + key + "`"); } else { return; } } index = nextIndexes[key] || 0; maxIndex = Array.isArray(value) ? value.length - 1 : 0; if (index > maxIndex) { if (sideEffects) { throw new Error("too few values provided for key `" + key + "`"); } else { return; } } result = Array.isArray(value) ? value[index] : value; if (sideEffects) { nextIndexes[key] = index + 1; } return result; }; astNodeContainsSegmentsForProvidedParams = function(astNode, params, nextIndexes) { var i, length; if (Array.isArray(astNode)) { i = -1; length = astNode.length; while (++i < length) { if (astNodeContainsSegmentsForProvidedParams(astNode[i], params, nextIndexes)) { return true; } } return false; } switch (astNode.tag) { case 'wildcard': return getParam(params, '_', nextIndexes, false) != null; case 'named': return getParam(params, astNode.value, nextIndexes, false) != null; case 'static': return false; case 'optional': return astNodeContainsSegmentsForProvidedParams(astNode.value, params, nextIndexes); } }; stringify = function(astNode, params, nextIndexes) { if (Array.isArray(astNode)) { return stringConcatMap(astNode, function(node) { return stringify(node, params, nextIndexes); }); } switch (astNode.tag) { case 'wildcard': return getParam(params, '_', nextIndexes, true); case 'named': return getParam(params, astNode.value, nextIndexes, true); case 'static': return astNode.value; case 'optional': if (astNodeContainsSegmentsForProvidedParams(astNode.value, params, nextIndexes)) { return stringify(astNode.value, params, nextIndexes); } else { return ''; } } }; UrlPattern = function(arg1, arg2) { var groupCount, options, parsed, parser, withoutWhitespace; if (arg1 instanceof UrlPattern) { this.isRegex = arg1.isRegex; this.regex = arg1.regex; this.ast = arg1.ast; this.names = arg1.names; return; } this.isRegex = arg1 instanceof RegExp; if (!(('string' === typeof arg1) || this.isRegex)) { throw new TypeError('argument must be a regex or a string'); } if (this.isRegex) { this.regex = arg1; if (arg2 != null) { if (!Array.isArray(arg2)) { throw new Error('if first argument is a regex the second argument may be an array of group names but you provided something else'); } groupCount = regexGroupCount(this.regex); if (arg2.length !== groupCount) { throw new Error("regex contains " + groupCount + " groups but array of group names contains " + arg2.length); } this.names = arg2; } return; } if (arg1 === '') { throw new Error('argument must not be the empty string'); } withoutWhitespace = arg1.replace(/\s+/g, ''); if (withoutWhitespace !== arg1) { throw new Error('argument must not contain whitespace'); } options = { escapeChar: (arg2 != null ? arg2.escapeChar : void 0) || defaultOptions.escapeChar, segmentNameStartChar: (arg2 != null ? arg2.segmentNameStartChar : void 0) || defaultOptions.segmentNameStartChar, segmentNameCharset: (arg2 != null ? arg2.segmentNameCharset : void 0) || defaultOptions.segmentNameCharset, segmentValueCharset: (arg2 != null ? arg2.segmentValueCharset : void 0) || defaultOptions.segmentValueCharset, optionalSegmentStartChar: (arg2 != null ? arg2.optionalSegmentStartChar : void 0) || defaultOptions.optionalSegmentStartChar, optionalSegmentEndChar: (arg2 != null ? arg2.optionalSegmentEndChar : void 0) || defaultOptions.optionalSegmentEndChar, wildcardChar: (arg2 != null ? arg2.wildcardChar : void 0) || defaultOptions.wildcardChar }; parser = newParser(options); parsed = parser.pattern(arg1); if (parsed == null) { throw new Error("couldn't parse pattern"); } if (parsed.rest !== '') { throw new Error("could only partially parse pattern"); } this.ast = parsed.value; this.regex = new RegExp(astNodeToRegexString(this.ast, options.segmentValueCharset)); this.names = astNodeToNames(this.ast); }; UrlPattern.prototype.match = function(url) { var groups, match; match = this.regex.exec(url); if (match == null) { return null; } groups = match.slice(1); if (this.names) { return keysAndValuesToObject(this.names, groups); } else { return groups; } }; UrlPattern.prototype.stringify = function(params) { if (params == null) { params = {}; } if (this.isRegex) { throw new Error("can't stringify patterns generated from a regex"); } if (params !== Object(params)) { throw new Error("argument must be an object or undefined"); } return stringify(this.ast, params, {}); }; UrlPattern.escapeForRegex = escapeForRegex; UrlPattern.concatMap = concatMap; UrlPattern.stringConcatMap = stringConcatMap; UrlPattern.regexGroupCount = regexGroupCount; UrlPattern.keysAndValuesToObject = keysAndValuesToObject; UrlPattern.P = P; UrlPattern.newParser = newParser; UrlPattern.defaultOptions = defaultOptions; UrlPattern.astNodeToRegexString = astNodeToRegexString; UrlPattern.astNodeToNames = astNodeToNames; UrlPattern.getParam = getParam; UrlPattern.astNodeContainsSegmentsForProvidedParams = astNodeContainsSegmentsForProvidedParams; UrlPattern.stringify = stringify; return UrlPattern; }); }); /** * 网络地址工具类 */ var UrlTool = /** @class */ (function () { function UrlTool() { } /** * 合成URL完整地址 * @param baseUrl 基础地址 * @param subUrl 相对地址 * @param parameters 参数 * @returns 返回拼接后的地址 */ UrlTool.urlFromPortion = function (baseUrl, subUrl, parameters) { if (!parameters) { parameters = {}; } var params = []; for (var key in parameters) { if (!parameters.hasOwnProperty(key)) { continue; } if (parameters[key] !== undefined) { params.push(key + '=' + parameters[key]); } } var iUrl = baseUrl + subUrl; if (params.length > 0) { iUrl = iUrl + '?' + params.join('&'); } return iUrl; }; /** * 分析Url并解析为对象结构 * @param url 待分析Url * @param options 分析Url配置 * @return 返回解析后的结果,url无效时返回Null */ UrlTool.portionFromUrl = function (url, options) { options = __assign({ complete: false }, options); try { var urlObj = null; try { urlObj = new URL(url); } catch (e) { return null; } if (urlObj) { var _getKV = function (obj) { var queryMap = {}; if (obj) { for (var _i = 0, _a = obj.split('&'); _i < _a.length; _i++) { var kv = _a[_i]; var kv_l = kv.split('='); if (kv_l.length < 2) continue; queryMap[kv_l[0]] = kv_l[1]; } } return queryMap; }; var query = new urlPattern(/^\??(.*)$/, ['query']).match(urlObj.search).query; var queryMap = _getKV(query); var hashObj = new urlPattern(/^#?(([\w-]*(\/)?)+)?((\?)+(.*))?$/, ['hashpath', '', '', 'hashsearch', '', '_hashsearch']).match(urlObj.hash); var hashMap = _getKV(hashObj._hashsearch); var p = { host: urlObj.host, href: urlObj.href, pathname: urlObj.pathname, protocol: urlObj.protocol, query: queryMap, hashpath: hashObj.hashpath, hashquery: hashMap }; if (options.complete) { p = __assign(__assign({}, p), { origin: urlObj.origin, hostname: urlObj.hostname, port: urlObj.port, search: urlObj.search, username: urlObj.username, password: urlObj.password, hashsearch: hashObj.hashsearch, hash: urlObj.hash }); } return p; } else { return null; } } catch (e) { throw e; } }; return UrlTool; }()); var DEFAULT_DELEGATE = { globalParams: function () { }, globalHeaders: function () { }, globalBodyData: function () { }, requestInterceptor: function (config) { // Do something before request is sent console.log(config.method + " " + UrlTool.urlFromPortion(config.url, '', config.params)); return config; }, requestInterceptorError: function (error) { // Do something with request error return Promise.reject(error); }, responseInterceptor: function (response) { // Do something with response data return response; }, responseInterceptorError: function (error) { // Do something with response error return Promise.reject(error); }, responseDataInterceptor: function (data, response) { return data; }, responseErrorInterceptor: function (error, response) { return error; } }; var CancelPromiseFactory = /** @class */ (function () { function CancelPromiseFactory(args) { return __assign(__assign({}, new Promise(args)), { terminate: function () { } }); } CancelPromiseFactory.createJPromise = function (para) { var promise = null; if (typeof para == "function") { promise = new Promise(para); } else { promise = para; } var hasCanceled_ = false; var wrappedPromise = new Promise(function (resolve, reject) { promise.then(function (val) { return hasCanceled_ ? function () { } : resolve(val); }, function () { // 不写会有警告 }); promise.catch(function (error) { return hasCanceled_ ? function () { } : reject(error); }); }); wrappedPromise.terminate = function () { hasCanceled_ = true; }; return wrappedPromise; }; return CancelPromiseFactory; }()); /** * Created by cuppi on 2017/5/10. */ /** * 对象工具类 */ var ObjectTool = /** @class */ (function () { function ObjectTool() { } /** * 删除对象某个属性 * @param target 对象 * @param propertyKey 属性 * @returns 是否删除成功 */ ObjectTool.deleteProperty = function (target, propertyKey) { if (target) { return Reflect.deleteProperty(target, propertyKey); } return true; }; /** * 安全的获取链式属性 eg: a.b.c.d * @param target 目标对象 * @param pChain 对象链式属性 * @returns {*} */ ObjectTool.safeGet = function (target) { var pChain = []; for (var _i = 1; _i < arguments.length; _i++) { pChain[_i - 1] = arguments[_i]; } if (!target || !pChain || pChain.length <= 0) { return undefined; } var property = target; var chainIndex = 0; do { property = property[pChain[chainIndex++]]; } while (property && (chainIndex < pChain.length)); return chainIndex === pChain.length ? property : undefined; }; ObjectTool.isEmptyObject = function (obj) { return Object.keys(obj).length === 0 && obj.constructor === Object; }; /** * 如果未知参数是对象 f返回该对象 如果是方法 则返回方法该方法的运行结果 * @param obj 未知参数 * @param args 如果是方法,则为方法参数 */ ObjectTool.getObjOrFuncResult = function (obj) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var o = null; if (obj) { if (typeof obj == "function") { o = obj.apply(void 0, args); } if (typeof obj == "object") { o = obj; } } return o || {}; }; return ObjectTool; }()); var REQUESTER_COUNT = 0; var JRequester = /** @class */ (function () { function JRequester(method, baseUrl, url, parameters, headers, bodyData, otherObject, delegate) { this.method = method; this.baseUrl = baseUrl; this.url = url; this.parameters = parameters; this.headers = headers; this.bodyData = bodyData; this.otherObject = otherObject; this.delegate = delegate; this.requesterId = ++REQUESTER_COUNT; } /** * 包裹可取消的请求 (使用fetch请求时使用,目前通过axios请求,无需使用) * @private * @param promise 异步请求块 * @returns {Promise} 被包裹后的异步请求块 */ JRequester.wrapCancelablePromise = function (promise) { return CancelPromiseFactory.createJPromise(promise); }; /** * 发送请求 * @param method 方法类型 * @param baseUrl 基地址 * @param url 相对地址 * @param parameters 参数 * @param bodyData data参数 * @param headers 头参数 * @param otherObject 其他相关设置 * @param delegate 网络请求代理 * @returns {CancelPromiseFactory<any>} */ JRequester.create = function (method, baseUrl, url, parameters, bodyData, headers, otherObject, delegate) { var requester = new JRequester(method, baseUrl, url, parameters, headers, bodyData, otherObject, delegate); if (ObjectTool.isEmptyObject(bodyData)) { bodyData = null; } var axiosProps = __assign({ method: method, params: parameters, baseURL: baseUrl, data: bodyData, headers: headers }, otherObject); /** * 只传指定的属性 或 忽略某些属性 * 只传 a 参数 头参数正常 * specific: { * params: ['a'] * } * 参数 a 将被忽略 * ignore: { * params: ['a'] * } */ if (otherObject.hasOwnProperty('specific') || otherObject.hasOwnProperty('ignore')) { [{ k: 'params', ak: 'params' }, { k: 'headers', ak: 'headers' }, { k: 'bodyData', ak: 'data' }].forEach(function (_) { var specV = otherObject.specific ? otherObject.specific[_.k] : null; var ignoV = otherObject.ignore ? otherObject.ignore[_.k] : null; var apl = Object.keys(axiosProps[_.ak]) || []; specV && (axiosProps[_.ak] = apl .filter(function (_) { return specV.some(function (__) { return _ === __; }); }) .map(function (k) { return ({ k: k, v: axiosProps[_.ak][k] }); }) .reduce(function (_, _a) { var _b; var k = _a.k, v = _a.v; return (__assign(__assign({}, _), (_b = {}, _b[k] = v, _b))); }, {})); ignoV && (axiosProps[_.ak] = apl .filter(function (_) { return ignoV.some(function (__) { return _ !== __; }); }) .map(function (k) { return ({ k: k, v: axiosProps[_.ak][k] }); }) .reduce(function (_, _a) { var _b; var k = _a.k, v = _a.v; return (__assign(__assign({}, _), (_b = {}, _b[k] = v, _b))); }, {})); }); } var jaxios = axios.create(axiosProps); delegate = __assign(__assign({}, DEFAULT_DELEGATE), (delegate || {})); requester.jaxios = jaxios; jaxios.interceptors.request.use(function (config) { config.params = __assign({}, parameters); config.headers = __assign({}, headers); return delegate.requestInterceptor(config); }, function (error) { return delegate.requestInterceptorError(error); }); jaxios.interceptors.response.use(function (response) { return delegate.responseInterceptor(response); }, function (error) { return delegate.responseInterceptorError(error); }); return requester; }; JRequester.prototype.request = function () { var _this = this; return CancelPromiseFactory.createJPromise(function (resolve, reject) { _this.jaxios.request({ url: _this.url }).then(function (response) { resolve(response); }, function (error) { reject(error); }); }); }; JRequester.prototype.repeat = function () { var _this = this; return CancelPromiseFactory.createJPromise(function (resolve, reject) { _this.jaxios.request({ url: _this.url }).then(function (response) { resolve(response); }, function (error) { reject(error); }); }); }; return JRequester; }()); var DEFAULT_CONFIG = { baseUrl: '', delegate: DEFAULT_DELEGATE, carryParams: {}, carryHeaders: {}, carryBodyData: {}, axiosConfig: { timeout: 10 * 1000 }, otherContent: null }; /** * @private */ var Jparam = /** @class */ (function () { function Jparam() { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } this._params = []; for (var _a = 0, params_1 = params; _a < params_1.length; _a++) { var para = params_1[_a]; this._params.push(para); } this.isJpara = true; } Jparam.prototype.items = function () { return this._params; }; Jparam.emptyPara = function () { return new Jparam(); }; return Jparam; }()); /** * 辅助任务类 * @private */ var Jtask = /** @class */ (function () { function Jtask(task, paramsPicker, resolve, reject) { this._task = task; this._resolve = resolve; this._reject = reject; this._paramsPicker = paramsPicker; } Jtask.prototype.setNextTask = function (task) { this._nextTask = task; }; Jtask.prototype.do = function (params) { var _this = this; params = params ? params : this._paramsPicker(); this._task.apply(this, this.paraItems(params)).then(function (data) { var nextPara = _this._resolve.apply(_this, __spreadArrays([data], _this.paraItems(params))); if (_this._nextTask) { _this._nextTask.do(nextPara); } }, function (error) { if (_this._reject) { _this._reject.apply(_this, __spreadArrays([error], _this.paraItems(params))); } else { console.log('ERROR: Don\'t find the error handler for task (' + _this._task.name + ')'); } }); }; Jtask.prototype.paraItems = function (nextPara) { if (nextPara && nextPara.isJpara) { return nextPara.items(); } return Jparam.emptyPara().items(); }; return Jtask; }()); /** * * 任务连接类 * @private */ var Jlink = /** @class */ (function () { function Jlink() { var tasks = []; for (var _i = 0; _i < arguments.length; _i++) { tasks[_i] = arguments[_i]; } this._tasks = []; for (var _a = 0, tasks_1 = tasks; _a < tasks_1.length; _a++) { var task = tasks_1[_a]; this._tasks.push(task); } this._taskIndex = 0; } Jlink.prototype.para = function (para) { this._headTaskPara = para; return this; }; Jlink.prototype.params = function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } this._allTaskPara = params; return this; }; Jlink.prototype.next = function (resolve, reject) { if (this._taskIndex >= this._tasks.length) { return this; } var nextTask = new Jtask(this._tasks[this._taskIndex], this._paramsPicker(this._taskIndex), resolve, reject); this._taskIndex++; if (this._nextTask) { this._nextTask.setNextTask(nextTask); } else { this._headTask = nextTask; } this._nextTask = nextTask; return this; }; Jlink.prototype.run = function () { this._headTask.do(this._paramsPicker(0)()); return this; }; /** * 指定任务的params的获取者 (目前实现会浪费内存,多个相同函数推入函数栈,后期优化) * @returns {Array} * @private */ Jlink.prototype._paramsPicker = function (index) { var _this = this; return function () { if (_this._allTaskPara && _this._allTaskPara.length > index) { return _this._allTaskPara[index]; } if (index === 0 && _this._headTaskPara) { return _this._headTaskPara; } return Jparam.emptyPara(); }; }; return Jlink; }()); // let pro1 = () => { // return new Promise() // }; // // let pro2 = () => { // return new Promise // }; // let l = jlink(pro1, pro2).next( // (data) => { // console.log(data); // }, // error => { // console.log(error); // }).next( // (data) => { // console.log(data); // }, // error => { // console.log(error); // } // ).run(); /** * 任务组合类 * @private */ // class Jcombine { // _tasks: Function[]; // _headTaskPara: object; // _taskIndex: number; // _paramsPicker: Function; // _headTask: Jtask; // // constructor(...tasks) { // this._tasks = []; // for (var task of tasks) { // this._tasks.push(task); // } // this._taskIndex = 0; // } // // para(para) { // this._headTaskPara = para; // return this; // } // // params(...params) { // this._allTaskPara = params; // return this; // } // // next(resolve, reject) { // if (this._taskIndex >= this._tasks.length) { // return this; // } // let nextTask = new Jtask(this._tasks[this._taskIndex], this._paramsPicker(this._taskIndex), resolve, reject); // this._taskIndex++; // if (this._nextTask) { // this._nextTask.setNextTask(nextTask); // } else { // this._headTask = nextTask; // } // this._nextTask = nextTask; // return this; // } // // run() { // this._headTask.do(this._paramsPicker(0)()); // return this; // } // } /** * 任务连接类 * @alias other/jlink * @param tasks * @returns {Jlink} */ function jlink() { var tasks = []; for (var _i = 0; _i < arguments.length; _i++) { tasks[_i] = arguments[_i]; } return new (Jlink.bind.apply(Jlink, __spreadArrays([void 0], tasks)))(); } /** * @private * @param params * @returns {Jpara} */ function jparam() { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } return new (Jparam.bind.apply(Jparam, __spreadArrays([void 0], params)))(); } /** * @alias other/jcombine * @param tasks * @returns {Jcombine} */ // function jcombine(...tasks) { // return new Jcombine(...tasks); // } /** * * @param {GlobalValueRegistry | ((delegate: INetworkDelegate) => GlobalValueRegistry)} x * @return {x is (delegate: INetworkDelegate) => GlobalValueRegistry} */ function isGlobalValueRegistry(x) { return typeof x === 'function'; } function isGlobalValueRegistryObject(x) { return typeof x === 'object'; } function isGlobalValueRegistryFunction(x) { return typeof x === 'function'; } /** * 获取全局指定参数 * @param extraValues 全局参数列表 * @param delegate 全局代理 * @param globalValueRegistryPicker 全局参数代理对象 * @return {{}} */ function jgetGlobalValue(extraValues, delegate, globalValueRegistryPicker) { var jgetGlobalValueWithKey = function (key) { var otherValues = {}; if (!globalValueRegistryPicker) { throw new Error('未找到全局参数,请确认是否设置global代理'); } var globalValueRegistry; if (isGlobalValueRegistry(globalValueRegistryPicker)) { globalValueRegistry = globalValueRegistryPicker(delegate); } else { globalValueRegistry = globalValueRegistryPicker; } var globalParaFunc = null; if (isGlobalValueRegistryObject(globalValueRegistry)) { globalParaFunc = globalValueRegistry[key]; } if (isGlobalValueRegistryFunction(globalValueRegistry)) { globalParaFunc = globalValueRegistry()[key]; } if (globalParaFunc !== null) { var globalPara = null; if (typeof globalParaFunc == "function") { globalPara = globalParaFunc(); } else { globalPara = globalParaFunc; } if (typeof globalPara == "object") { otherValues = __assign(__assign({}, otherValues), globalPara); } else if (typeof globalPara === 'string' || typeof globalPara === 'number') { otherValues[key] = globalPara; } else { throw new Error("\u5168\u5C40\u53D8\u91CF\u7C7B\u578B\u4E0D\u6B63\u786E:" + key); } } else { throw new Error("\u4E0D\u5B58\u5728\u7684\u5168\u5C40\u53D8\u91CF:" + key); } return otherValues; }; var globalOtherValues = {}; extraValues.forEach(function (key) { if (typeof key == "object") { globalOtherValues = __assign(__assign({}, globalOtherValues), key); } else { if (!delegate) return; globalOtherValues = __assign(__assign({}, globalOtherValues), jgetGlobalValueWithKey(key)); } }); return globalOtherValues; } var JNetworkError = /** @class */ (function (_super) { __extends(JNetworkError, _super); function JNetworkError(errorMessage, code) { var _this = this; if (typeof errorMessage === 'string') { _this = _super.call(this, errorMessage) || this; } else if (errorMessage instanceof Error) { _this = _super.call(this, errorMessage.message) || this; } else { throw new Error('JNetworkError: 构造函数非法类型'); } _this.errorCode = code; return _this; // Reflect.defineProperty(this, 'errorCode', {value: code}); } return JNetworkError; }(Error)); var JRequestEngine = /** @class */ (function () { // private readonly reactor; function JRequestEngine() { this.isRunning = false; this.runQueue = []; // let reactor = new Reactor(); // this.reactor = reactor; // reactor.registerEvent('requestCanLoad'); } JRequestEngine.prototype._pushRunQueue = function (request, resolve, reject) { this.runQueue.push({ request: request, resolve: resolve, reject: reject }); }; JRequestEngine.prototype._popRunQueue = function () { return this.runQueue.shift(); }; JRequestEngine.prototype.addRequest = function (request) { var _this = this; return CancelPromiseFactory.createJPromise(function (resolve, reject) { if (!_this.isRunning) { _this.isRunning = true; _this.do(request, resolve, reject); } else { _this._pushRunQueue(request, resolve, reject); } }); }; JRequestEngine.prototype.do = function (request, resolve, reject) { var _this = this; request.request().then(function (data) { setTimeout(resolve(data), 0); var task = _this._popRunQueue(); if (task) { _this.do(task.request, task.resolve, task.reject); } else { _this.isRunning = false; } }, function (error) { reject(error); }); }; return JRequestEngine; }()); var JNetworkRoot = /** @class */ (function () { function JNetworkRoot() { this.extraParams = []; this.extraHeaders = []; this.extraBodyData = []; } JNetworkRoot.prototype.useParams = function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } this.extraParams = params; return this; }; JNetworkRoot.prototype.useHeaders = function () { var headers = []; for (var _i = 0; _i < arguments.length; _i++) { headers[_i] = arguments[_i]; } this.extraHeaders = headers; return this; }; JNetworkRoot.prototype.useBodyData = function () { var bodyData = []; for (var _i = 0; _i < arguments.length; _i++) { bodyData[_i] = arguments[_i]; } this.extraBodyData = bodyData; return this; }; JNetworkRoot.prototype.clearExtraData = function () { this.extraParams = []; this.extraHeaders = []; this.extraBodyData = []; }; return JNetworkRoot; }()); var GROUP_COUNT = 0; var JNetworkGroup = /** @class */ (function (_super) { __extends(JNetworkGroup, _super); function JNetworkGroup(baseUrl, axiosConfig, delegate, options) { var _this = _super.call(this) || this; _this.requestEngine = new JRequestEngine(); _this.baseUrl = baseUrl; _this.axiosConfig = axiosConfig || {}; _this.delegate = delegate || null; _this.groupId = ++GROUP_COUNT; if (options) { _this.freezeParams = options.freezeParams || []; _this.freezeHeaders = options.freezeHeaders || []; _this.freezeBodyData = options.freezeBodyData || []; _this.freezeCarryParams = options.freezeCarryParams || {}; _this.freezeCarryHeaders = options.freezeCarryHeaders || {}; _this.freezeCarryBodyData = options.freezeCarryBodyData || {}; _this.isSync = options.isSync; _this.parent = options.parent; } return _this; } JNetworkGroup.prototype.pickInjectParams = function () { return __assign(__assign({}, ObjectTool.getObjOrFuncResult(this.freezeCarryParams)), jgetGlobalValue(__spreadArrays(this.freezeParams, this.extraParams), this.delegate, function (_) { return _.globalParams; })); }; JNetworkGroup.prototype.pickInjectHeaders = function () { return __assign(__assign({}, ObjectTool.getObjOrFuncResult(this.freezeCarryHeaders)), jgetGlobalValue(__spreadArrays(this.freezeHeaders, this.extraHeaders), this.delegate, function (_) { return _.globalHeaders; })); }; JNetworkGroup.prototype.pickInjectBodyData = function () { return __assign(__assign({}, ObjectTool.getObjOrFuncResult(this.freezeCarryBodyData)), jgetGlobalValue(__spreadArrays(this.freezeBodyData, this.extraBodyData), this.delegate, function (_) { return _.globalBodyData; })); }; /** * 发送请求 * @param method 方法类型 * @param baseUrl 基地址 * @param url 相对地址 * @param parameters 参数 * @param data data参数 * @param headers 头参数 * @param otherObject 其他相关设置 * @returns {CancelPromiseFactory<any>} */ JNetworkGroup.prototype.fetchRequest = function (method, baseUrl, url, parameters, data, headers, otherObject) { if (otherObject === void 0) { otherObject = {}; } var carryParams = ObjectTool.getObjOrFuncResult(this.freezeCarryParams); var carryHeaders = ObjectTool.getObjOrFuncResult(this.freezeHeaders); var carryBodyData = ObjectTool.getObjOrFuncResult(this.freezeCarryBodyData); var delegate = this.delegate; var globalOtherParams = this.pickInjectParams(); var globalOtherHeaders = this.pickInjectHeaders(); var globalOtherBodyData = this.pickInjectBodyData(); this.clearExtraData(); var request = JRequester.create(method, baseUrl, url, __assign(__assign(__assign({}, carryParams), globalOtherParams), parameters), otherObject.notTransformData ? data : __assign(__assign(__assign({}, carryBodyData), globalOtherBodyData), data), __assign(__assign(__assign({ 'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' }, carryHeaders), globalOtherHeaders), headers), __assign({ axiosConfig: this.axiosConfig }, otherObject), delegate); if (this.isSync) { return this.requestEngine.addRequest(request); } else { return CancelPromiseFactory.createJPromise(function (resolve, reject) { request.request().then(function (response) { if (response.status === 200) { resolve(response); } else { var errorMessage = void 0, errorStatus = void 0; if (response.hasOwnProperty('status')) { errorMessage = response.statusText; errorStatus = response.status; } else { if (response.hasOwnProperty('message')) { errorMessage = response['message']; } } reject(new JNetworkError(errorMessage, errorStatus)); } }).catch(function (