初始化仓库

This commit is contained in:
wangxiaowei
2026-04-14 16:54:04 +08:00
commit 967c25b397
553 changed files with 106514 additions and 0 deletions

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,83 @@
const path = require('path')
const CONFIG = {
includes: ['path', 'aliasPath', 'name']
}
const rootPath = path.resolve(process.cwd(), 'node_modules');
/** 解析绝对路径
* @param {Object} dir
*/
function resolvePath(dir) {
return path.resolve(rootPath, dir);
}
class TransformPages {
constructor(config) {
config = {
...CONFIG,
...config
};
this.CONFIG = config;
this.webpack = require(resolvePath('webpack'));
this.uniPagesJSON = require(resolvePath('@dcloudio/uni-cli-shared/lib/pages.js'));
this.routes = this.getPagesRoutes().concat(this.getNotMpRoutes());
}
/**
* 获取所有pages.json下的内容 返回json
*/
get pagesJson() {
return this.uniPagesJSON.getPagesJson();
}
/**
* 通过读取pages.json文件 生成直接可用的routes
*/
getPagesRoutes(pages = this.pagesJson.pages, rootPath = null) {
const routes = [];
for (let i = 0; i < pages.length; i++) {
const item = pages[i];
const route = {};
for (let j = 0; j < this.CONFIG.includes.length; j++) {
const key = this.CONFIG.includes[j];
let value = item[key];
if (key === 'path') {
value = rootPath ? `/${rootPath}/${value}` : `/${value}`
}
if (key === 'aliasPath' && i == 0 && rootPath == null) {
route[key] = route[key] || '/'
} else if (value !== undefined) {
route[key] = value;
}
}
routes.push(route);
}
return routes;
}
/**
* 解析小程序分包路径
*/
getNotMpRoutes() {
const {
subPackages
} = this.pagesJson;
let routes = [];
if (subPackages == null || subPackages.length == 0) {
return [];
}
for (let i = 0; i < subPackages.length; i++) {
const subPages = subPackages[i].pages;
const root = subPackages[i].root;
const subRoutes = this.getPagesRoutes(subPages, root);
routes = routes.concat(subRoutes)
}
return routes
}
/**
* 单条page对象解析
* @param {Object} pageCallback
* @param {Object} subPageCallback
*/
parsePages(pageCallback, subPageCallback) {
this.uniPagesJSON.parsePages(this.pagesJson, pageCallback, subPageCallback)
}
}
module.exports = TransformPages

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,79 @@
<template>
<view @click.stop="gotoPage()"><slot></slot></view>
</template>
<script>
const navType = {
push: 'push',
replace: 'replace',
replaceAll: 'replaceAll',
pushTab: 'pushTab',
back:'back'
};
export default {
props: {
to: {
type: [String, Object],
required: true
},
stopNavto: {
type: Boolean,
default: false,
},
navType: {
type: String,
default: 'push',
},
level: {
type: Number,
default: 1,
},
append: {
type: Boolean,
default: false,
},
},
methods: {
formatNav(text) {
if (text != null && text.constructor === String) {
text = text.replace(/\'/g, '');
text = text.replace(/(\w+)(?=:)/g, function (val) {
return `"${val}"`;
});
text = text.replace(/:\s*([^,{}\s"]+)/g, function (val) {
const arr = val.split(':');
return `:"${arr[1].trim()}"`;
});
try {
text = JSON.parse(text);
} catch (e) {}
}
if (this.append) {
let pathArr = this.$Route.path.split('/');
pathArr.splice(pathArr.length - this.level, this.level);
pathArr = pathArr.join('/');
if (text.constructor === Object) {
if (text.path) {
text.path = pathArr + text.path;
}
} else {
text = pathArr + text;
}
}
return text;
},
gotoPage() {
if (this.stopNavto) {
return true;
}
const type = navType[this.navType];
if (type == null) {
return console.error(` "navType" unknown type \n\n value${Object.values(navType).join('、')}`);
}
const navInfo = this.formatNav(this.to);
this.$Router[type](navInfo);
},
},
};
</script>

View File

@ -0,0 +1,11 @@
{
"id": "hhyang-uni-simple-router",
"name": "路由、拦截、最优雅解决方案",
"version": "2.0.6",
"description": "一个完全相似Vue-router的路由插件",
"keywords": [
"路由守卫",
"路由拦截",
"页面路由"
]
}

View File

@ -0,0 +1,330 @@
export declare interface AppConfig {
registerLoadingPage?: boolean;
loadingPageStyle?: () => object;
loadingPageHook?: (view: any) => void;
launchedHook?: () => void;
animation?: startAnimationRule;
}
export declare interface appletConfig {
animationDuration?: number;
}
export declare interface appletsVueHookConfig {
app: appVueHookConfig;
page: pageVueHookConfig;
component: baseAppHookConfig[];
}
export declare interface appVueHookConfig extends baseAppHookConfig {
onLaunch: Array<hookObjectRule | Function>;
onShow: Array<hookObjectRule | Function>;
onHide: Array<hookObjectRule | Function>;
}
export declare type appVueSortHookRule = 'beforeCreate' | 'created' | 'beforeMount' | 'mounted' | 'onLaunch' | 'onShow' | 'onHide' | 'beforeDestroy' | 'destroyed';
export declare type backTypeRule = 'backbutton' | 'navigateBack';
export declare interface baseAppHookConfig {
[key: string]: Array<hookObjectRule | Function>;
created: Array<hookObjectRule | Function>;
beforeMount: Array<hookObjectRule | Function>;
mounted: Array<hookObjectRule | Function>;
beforeDestroy: Array<hookObjectRule | Function>;
destroyed: Array<hookObjectRule | Function>;
}
export declare type comVueSortHookRule = 'beforeCreate' | 'created' | 'beforeMount' | 'mounted' | 'beforeDestroy' | 'destroyed';
export declare function createRouter(params: InstantiateConfig): Router;
export declare interface debuggerArrayConfig {
error?: boolean;
warn?: boolean;
log?: boolean;
}
export declare type debuggerConfig = boolean | debuggerArrayConfig;
export declare interface endAnimationRule {
animationType?: endAnimationType;
animationDuration?: number;
}
export declare type endAnimationType = 'slide-out-right' | 'slide-out-left' | 'slide-out-top' | 'slide-out-bottom' | 'pop-out' | 'fade-out' | 'zoom-in' | 'zoom-fade-in' | 'none';
export declare type guardHookRule = (to: totalNextRoute, from: totalNextRoute, next: (rule?: navtoRule | false) => void) => void;
export declare interface H5Config {
paramsToQuery?: boolean;
vueRouterDev?: boolean;
vueNext?: boolean;
mode?: string;
base?: string;
linkActiveClass?: string;
linkExactActiveClass?: string;
scrollBehavior?: Function;
fallback?: boolean;
}
export declare interface h5NextRule {
fullPath?: string | undefined;
hash?: string | undefined;
matched?: Array<object>;
meta?: object;
name?: undefined | string;
type?: undefined | string;
}
export declare type hookListRule = Array<(router: Router, to: totalNextRoute, from: totalNextRoute, toRoute: RoutesRule, next: Function) => void>;
export declare interface hookObjectRule {
options: Array<any>;
hook: Function;
}
export declare enum hookToggle {
'beforeHooks' = "beforeEach",
'afterHooks' = "afterEach",
'enterHooks' = "beforeEnter"
}
export declare interface InstantiateConfig {
[key: string]: any;
keepUniOriginNav?: boolean;
platform: 'h5' | 'app-plus' | 'app-lets' | 'mp-weixin' | 'mp-baidu' | 'mp-alipay' | 'mp-toutiao' | 'mp-qq' | 'mp-360';
h5?: H5Config;
APP?: AppConfig;
applet?: appletConfig;
debugger?: debuggerConfig;
routerBeforeEach?: (to: navtoRule, from: navtoRule, next: (rule?: navtoRule | false) => void) => void;
routerAfterEach?: (to: navtoRule, from: navtoRule, next?: Function) => void;
routerErrorEach?: (error: navErrorRule, router: Router) => void;
resolveQuery?: (jsonQuery: objectAny) => objectAny;
parseQuery?: (jsonQuery: objectAny) => objectAny;
detectBeforeLock?: (router: Router, to: string | number | totalNextRoute | navRoute, navType: NAVTYPE) => void;
routes: RoutesRule[];
}
export declare interface LifeCycleConfig {
beforeHooks: hookListRule;
afterHooks: hookListRule;
routerBeforeHooks: hookListRule;
routerAfterHooks: hookListRule;
routerErrorHooks: Array<(error: navErrorRule, router: Router) => void>;
}
export declare interface navErrorRule {
type: navRuleStatus;
msg: string;
to?: totalNextRoute;
from?: totalNextRoute;
nextTo?: any;
[propName: string]: any;
}
export declare type navMethodRule = Promise<void | undefined | navRuleStatus>;
export declare interface navRoute extends h5NextRule, navtoRule {
}
export declare type navRuleStatus = 0 | 1 | 2 | 3;
export declare interface navtoRule {
NAVTYPE?: NAVTYPE;
path?: string;
name?: string | undefined;
query?: objectAny;
params?: objectAny;
animationType?: startAnimationType | endAnimationType;
animationDuration?: number;
events?: objectAny;
success?: Function;
fail?: Function;
complete?: Function;
}
export declare type NAVTYPE = 'push' | 'replace' | 'replaceAll' | 'pushTab' | 'back';
export declare enum navtypeToggle {
'push' = "navigateTo",
'replace' = "redirectTo",
'replaceAll' = "reLaunch",
'pushTab' = "switchTab",
'back' = "navigateBack"
}
export declare type notCallProxyHookRule = 'onHide' | 'beforeDestroy' | 'destroyed' | 'onUnload' | 'onResize';
export declare type objectAny = {
[propName: string]: any;
};
export declare interface originMixins extends uniNavApiRule {
BACKTYPE: '' | backTypeRule;
}
export declare type pageTypeRule = 'app' | 'page' | 'component';
export declare interface pageVueHookConfig extends baseAppHookConfig {
onShow: Array<hookObjectRule | Function>;
onHide: Array<hookObjectRule | Function>;
onLoad: Array<hookObjectRule | Function>;
onReady: Array<hookObjectRule | Function>;
onUnload: Array<hookObjectRule | Function>;
onResize: Array<hookObjectRule | Function>;
}
export declare type pageVueSortHookRule = 'beforeCreate' | 'created' | 'beforeMount' | 'mounted' | 'onLoad' | 'onReady' | 'onShow' | 'onResize' | 'onHide' | 'beforeDestroy' | 'destroyed' | 'onUnload';
export declare type PromiseResolve = (value?: void | PromiseLike<void> | undefined) => void;
export declare type proxyHookName = 'beforeHooks' | 'afterHooks';
export declare type reloadNavRule = totalNextRoute | false | undefined | string;
export declare type reNavMethodRule = 'navigateTo' | 'redirectTo' | 'reLaunch' | 'switchTab';
export declare type reNotNavMethodRule = 'navigateBack';
export declare enum rewriteMethodToggle {
'navigateTo' = "push",
'navigate' = "push",
'redirectTo' = "replace",
'reLaunch' = "replaceAll",
'switchTab' = "pushTab",
'navigateBack' = "back"
}
export declare interface Router {
[key: string]: any;
readonly lifeCycle: LifeCycleConfig;
readonly options: InstantiateConfig;
$lockStatus: boolean;
$route: object | null;
enterPath: string;
Vue: any;
appProxyHook: {
app: appVueHookConfig;
};
appMain: {
NAVTYPE: reNavMethodRule | reNotNavMethodRule;
path: string;
} | {};
appletsProxyHook: appletsVueHookConfig;
routesMap: routesMapRule | {};
mount: Array<{
app: any;
el: string;
}>;
install(Vue: any): void;
push(to: totalNextRoute | navRoute | string, from?: totalNextRoute): void;
replace(to: totalNextRoute | navRoute | string, from?: totalNextRoute): void;
replaceAll(to: totalNextRoute | navRoute | string, from?: totalNextRoute): void;
pushTab(to: totalNextRoute | navRoute | string, from?: totalNextRoute): void;
back(level: number | undefined, origin?: uniBackRule | uniBackApiRule): void;
forceGuardEach(navType: NAVTYPE | undefined, forceNav: boolean): void;
beforeEach(userGuard: guardHookRule): void;
afterEach(userGuard: (to: totalNextRoute, from: totalNextRoute) => void): void;
}
export declare function RouterMount(Vim: any, router: Router, el?: string | undefined): void | never;
export declare interface routeRule {
name: string | undefined;
meta: objectAny;
path: string;
query: objectAny;
params: objectAny;
fullPath: string;
NAVTYPE: NAVTYPE | '';
BACKTYPE?: backTypeRule | '';
[propName: string]: any;
}
export declare type routesMapKeysRule = 'finallyPathList' | 'finallyPathMap' | 'aliasPathMap' | 'pathMap' | 'nameMap' | 'vueRouteMap';
export declare interface routesMapRule {
[key: string]: any;
finallyPathList: Array<string>;
finallyPathMap: RoutesRule;
aliasPathMap: RoutesRule;
pathMap: RoutesRule;
nameMap: RoutesRule;
vueRouteMap: objectAny;
}
export declare interface RoutesRule {
path: string;
component?: object;
name?: string;
components?: object;
redirect?: string | Function;
props?: boolean | object | Function;
aliasPath?: string;
alias?: string | Array<string>;
children?: Array<RoutesRule>;
beforeEnter?: guardHookRule;
meta?: any;
[propName: string]: any;
}
export declare function runtimeQuit(title?: string | undefined): void;
export declare interface startAnimationRule {
animationType?: startAnimationType;
animationDuration?: number;
}
export declare type startAnimationType = 'slide-in-right' | 'slide-in-left' | 'slide-in-top' | 'slide-in-bottom' | 'pop-in' | 'fade-in' | 'zoom-out' | 'zoom-fade-out' | 'none';
export declare interface totalNextRoute extends h5NextRule, navtoRule {
path: string;
delta?: number;
[propName: string]: any;
}
export declare interface uniBackApiRule {
delta?: number;
animationDuration?: number;
animationType?: endAnimationType;
}
export declare interface uniBackRule {
from: backTypeRule;
}
export declare interface uniNavApiRule {
url: string;
openType?: 'appLaunch';
query?: objectAny;
path?: string;
delta?: number;
detail?: {
[propName: string]: any;
};
animationType?: startAnimationType;
animationDuration?: number;
events?: {
[propName: string]: any;
};
success?: Function;
fail?: Function;
complete?: Function;
animation?: {
animationType?: startAnimationType;
animationDuration?: number;
};
}
export { }
// @ts-ignore
declare module 'vue/types/vue' {
interface Vue {
$Router: Router;
$Route: routeRule;
}
}

View File

@ -0,0 +1,640 @@
/* !
* uni-axios-ts
* library v0.0.4
* github address https://gitee.com/codeweb/uni-axios-ts.git
*
* (c) 2019.12 xtshadow
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.axios = factory());
}(this, (function () { 'use strict';
/**
* 请求Method类型
*/
var Method;
(function (Method) {
Method["GET"] = "GET";
Method["POST"] = "POST";
Method["PUT"] = "PUT";
Method["HEAD"] = "HEAD";
Method["DELETE"] = "DELETE";
Method["TRACE"] = "TRACE";
Method["CONNECT"] = "CONNECT";
Method["OPTIONS"] = "OPTIONS";
})(Method || (Method = {}));
/**
* 响应的数据类型
*/
var HttpResponseType;
(function (HttpResponseType) {
HttpResponseType["TEXT"] = "text";
HttpResponseType["ARRAYBUFFER"] = "arraybuffer";
})(HttpResponseType || (HttpResponseType = {}));
var AxiosError =
/*@__PURE__*/
function (Error) {
function AxiosError(message, statusCode, config, request, response) {
Error.call(this, message);
this.config = config;
this.statusCode = statusCode;
this.request = request;
this.response = response;
Object.setPrototypeOf(this, AxiosError.prototype);
}
if (Error) AxiosError.__proto__ = Error;
AxiosError.prototype = Object.create(Error && Error.prototype);
AxiosError.prototype.constructor = AxiosError;
return AxiosError;
}(Error);
function createError(message, statusCode, config, request, response) {
var error = new AxiosError(message, statusCode, config, request, response);
return error;
}
/**
* 执行请求,调用微信Request方法
* @param config
*/
function wxRequest(config) {
var url = config.url;
var method = config.method;
if (method === void 0) method = Method.GET;
var data = config.data;
if (data === void 0) data = {};
var header = config.header;
if (header === void 0) header = {};
var responseType = config.responseType;
if (responseType === void 0) responseType = HttpResponseType.TEXT;
var cancelToken = config.cancelToken;
var validateStatus = config.validateStatus;
return new Promise(function (resolve, reject) {
// @ts-ignore
var requestTask = uni.request({
url: url,
header: header,
method: method,
data: data,
responseType: responseType,
success: function success(res) {
var response = {
data: res.data,
statusCode: res.statusCode,
header: res.header
};
if (!validateStatus || validateStatus(res.statusCode)) {
resolve(response);
} else {
reject(createError("Request failed with status code " + response.statusCode, response.statusCode, config, requestTask, response));
}
},
fail: function fail(error) {
reject(createError("Net Error", 1001, config, requestTask));
}
}); // 请求取消
if (cancelToken) {
cancelToken.promise.then(function (reason) {
requestTask.abort();
reject(reason);
});
}
});
}
function _typeof(obj) {
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
var toString = Object.prototype.toString;
/**
* Determine if a value is an Array
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an Array, otherwise false
*/
function isArray(val) {
return toString.call(val) === '[object Array]';
}
/**
* 确定值是否为对象
*
* @param {Object} val 要测试的值
* @returns {boolean} 如果值是对象则为true否则为false
*/
function isObject(val) {
return val !== null && _typeof(val) === 'object';
}
/**
* 迭代Array或为每个项目调用函数的对象。
*
* 如果`obj`为数组回调将被调用传递。
* 每项的值、索引和完整数组。
*
* 如果`obj`是一个对象回调将被调用传递。
* 每个属性的值、键和Complete对象。
*
* @param{object|Array} obj要迭代的对象。
* @param{function} fn要为每个项调用的回调。
*/
function forEach(obj, fn) {
if (obj !== null && typeof obj !== 'undefined') {
// Force an array if not already something iterable
// 数组也属于对象
if (_typeof(obj) !== 'object') {
/*eslint no-param-reassign:0*/
obj = [obj];
}
if (isArray(obj)) {
// Iterate over array values
for (var i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
// Iterate over object keys
Object.getOwnPropertyNames(obj).forEach(function (key) {
if (Object.prototype.hasOwnProperty.call(obj, key) && key !== 'constructor') {
fn.call(null, obj[key], key, obj);
}
}); // for (let key in obj) {
// console.log(`forin key:${key}`);
// if (Object.prototype.hasOwnProperty.call(obj, key)) {
// console.log(`callback:${key}`)
// fn.call(null, obj[key], key, obj);
// }
// }
}
}
}
/**
* 通过可变地向`对象A`添加`对象B`的属性来扩展`对象A`
*
* @param {Object} a 要扩展的对象
* @param {Object} b 要从中复制属性的对象
* @param {Object} thisArg 要将函数绑定到的对象
* @return {Object} 对象a的结果
*/
function extend(a, b, thisArg) {
forEach(b, function assignValue(val, key) {
if (thisArg && typeof val === 'function') {
// a[key] = bind(val, thisArg);
a[key] = val.bind(thisArg);
} else {
a[key] = val;
}
});
return a;
}
/**
* 函数等于merge差值为无引用
* 保留为原始对象
* @see merge
* @param {Object} obj1 Object to merge
* @returns {Object} Result of all merge properties
*/
function deepMerge() {
var objs = [],
len = arguments.length;
while (len--) {
objs[len] = arguments[len];
}
var result = Object.create(null);
function assignValue(val, key) {
if (isObject(result[key] && isObject(val))) {
result[key] = deepMerge(result[key], val);
} else if (isObject(val)) {
result[key] = deepMerge({}, val);
} else {
result[key] = val;
}
}
for (var i = 0; i < objs.length; i++) {
var obj = objs[i];
for (var key in obj) {
assignValue(obj[key], key);
}
}
return result;
}
/**
* 标准格式化请求头
* @param headers 请求头对象
* @param normalizeName 标准名称
*/
function normalizeHeaderName(header, normalizeName) {
Object.keys(header).forEach(function (name) {
if (name !== normalizeName && name.toUpperCase() === normalizeName.toUpperCase()) {
header[normalizeName] = header[name];
delete header[name];
}
});
}
/**
* 格式化加工 Header请求头
* @param headers
*/
function processHeaders(header) {
normalizeHeaderName(header, 'Content-Type');
normalizeHeaderName(header, 'appId');
normalizeHeaderName(header, 'sessionId');
return header;
}
/**
* 请求头扁平化
*
* @param headers
* @param method
*/
function flattenHeaders(headers, method) {
if (!headers) {
return headers;
}
headers = deepMerge(headers.common || {}, headers[method.toLocaleLowerCase()] || {}, headers);
var methodsToDelete = ['delete', 'get', 'head', 'options', 'post', 'put', 'patch', 'common'];
methodsToDelete.forEach(function (method) {
delete headers[method];
});
return headers;
}
/**
* 组合URL
* @param baseURL
* @param relativeUrl
*/
function combineURL(baseURL, relativeURL) {
return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
}
/**
* 判断`URL`是否是绝对路径
* @param url
* @return {boolean}
*/
function isAbsoluteURL(url) {
// 如果URL以“<scheme>//”或“//”协议相对URL开头则该URL被视为绝对值。
// RFC 3986将方案名称定义为以字母开头的字符序列
// 后跟字母,数字,加号,句点或连字符的任意组合。
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
}
/**
* 处理请求头
* @param config
*/
function transformHeaders(config) {
var header = config.header;
if (header === void 0) header = {};
var method = config.method;
if (method === void 0) method = Method.GET;
header = processHeaders(header);
return flattenHeaders(header, method);
}
/**
* 处理请求地址 URL
* @param config
*/
function transformUrl(config) {
var url = config.url;
if (url === void 0) url = '';
var baseURL = config.baseURL;
if (baseURL === void 0) baseURL = '';
if (baseURL && !isAbsoluteURL(url)) {
url = combineURL(baseURL, url);
}
return url;
}
/**
* 抛出异常
*
* 如果当前`cancelToken`已经取消请求,则抛出异常
* @param config
*/
function throwIfCancellationRequested(config) {
if (config.cancelToken) {
config.cancelToken.throwIfRequested();
}
}
/**
* 预处理配置文件
* @param config 配置文件
*/
function processConfig(config) {
config.header = transformHeaders(config);
config.url = transformUrl(config);
}
/**
* 执行请求
* @param config 配置文件
*/
function dispatchRequest(config) {
throwIfCancellationRequested(config);
processConfig(config);
return wxRequest(config);
}
var InterceptorManager = function InterceptorManager() {
this.handlers = [];
};
InterceptorManager.prototype.use = function use(resolved, rejected) {
this.handlers.push({
resolved: resolved,
rejected: rejected
});
return this.handlers.length - 1;
};
InterceptorManager.prototype.eject = function eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
};
InterceptorManager.prototype.forEach = function forEach(fn) {
this.handlers.forEach(function (interceptor) {
if (interceptor !== null) {
fn(interceptor);
}
});
};
function mergeConfig(defaultConfig, userConfig) {
var config = Object.create(null); // 创建空对象,作为最终的合并结果
// 1.常规属性,如果用户配置了就用用户配置的,如果用户没配置,则用默认配置的;
var defaultToUserConfig = ["baseURL", "transformRequest", "transformResponse", "paramsSerializer", "timeout", "withCredentials", "adapter", "responseType", "xsrfCookieName", "xsrfHeaderName", "onUploadProgress", "onDownloadProgress", "maxContentLength", "validateStatus", "maxRedirects", "httpAgent", "httpsAgent", "cancelToken", "socketPath"];
defaultToUserConfig.forEach(function (prop) {
userConfig = userConfig || {}; // 如果用户配置里有
if (typeof userConfig[prop] !== "undefined") {
// 则用用户配置里的
config[prop] = userConfig[prop]; // 如果用户配置里没有,默认配置里有
} else if (typeof defaultConfig[prop] !== "undefined") {
// 则用默认配置里的
config[prop] = defaultConfig[prop];
}
}); // 2.只接受用户配置,不管默认配置对象里面有没有,我们只取用户配置的;
var valueFromUserConfig = ["url", "method", "params", "data"];
valueFromUserConfig.forEach(function (prop) {
userConfig = userConfig || {};
if (typeof userConfig[prop] !== 'undefined') {
config[prop] = userConfig[prop];
}
}); // 3.复杂对象深度合并
var mergeDeepProperties = ["header", "auth", "proxy"];
mergeDeepProperties.forEach(function (prop) {
userConfig = userConfig || {};
if (isObject(userConfig[prop])) {
config[prop] = deepMerge(defaultConfig[prop], userConfig[prop]);
} else if (typeof userConfig[prop] !== 'undefined') {
config[prop] = userConfig[prop];
} else if (isObject(defaultConfig[prop])) {
config[prop] = deepMerge(defaultConfig[prop]);
} else if (typeof defaultConfig[prop] !== 'undefined') {
config[prop] = defaultConfig[prop];
}
});
return config;
}
var Axios = function Axios(defaultConfig) {
this.defaults = defaultConfig;
this.interceptors = {
request: new InterceptorManager(),
response: new InterceptorManager()
};
};
Axios.prototype.request = function request(config) {
// 合并参数
config = mergeConfig(this.defaults, config); // 拦截器
var promise = Promise.resolve(config);
var chain = [{
resolved: dispatchRequest,
rejected: undefined
}]; // let chain:AxiosInterceptor<any>[] = [
// {
// resolved: dispatchRequest,
// rejected: undefined
// }
// ];
this.interceptors.request.forEach(function (interceptor) {
chain.unshift(interceptor);
});
this.interceptors.response.forEach(function (interceptor) {
chain.push(interceptor);
});
while (chain.length > 0) {
var ref = chain.shift();
var resolved = ref.resolved;
var rejected = ref.rejected;
promise = promise.then(resolved, rejected);
}
return promise; // return dispatchRequest(config);
};
Axios.prototype.get = function get(url, config) {
return this._requestMethodWithoutData(Method.GET, url, config);
};
Axios.prototype.post = function post(url, data, config) {
return this._requestMethodWithData(Method.POST, url, data, config);
};
Axios.prototype.put = function put(url, data, config) {
return this._requestMethodWithData(Method.PUT, url, data, config);
};
Axios.prototype["delete"] = function delete$1(url, config) {
return this._requestMethodWithoutData(Method.DELETE, url, config);
};
Axios.prototype.connect = function connect(url, config) {
return this._requestMethodWithoutData(Method.CONNECT, url, config);
};
Axios.prototype.head = function head(url, config) {
return this._requestMethodWithoutData(Method.HEAD, url, config);
};
Axios.prototype.options = function options(url, config) {
return this._requestMethodWithoutData(Method.OPTIONS, url, config);
};
Axios.prototype.trace = function trace(url, config) {
return this._requestMethodWithoutData(Method.TRACE, url, config);
};
Axios.prototype._requestMethodWithData = function _requestMethodWithData(method, url, data, config) {
return this.request(Object.assign(config || {}, {
method: method,
url: url,
data: data
}));
};
Axios.prototype._requestMethodWithoutData = function _requestMethodWithoutData(method, url, config) {
return this.request(Object.assign(config || {}, {
method: method,
url: url
}));
};
/**
* 根据传入的请求配置对象返回一个请求的`URL`
* @param config 请求配置
* @returns {string} 请求`URL`
*/
Axios.prototype.getUri = function getUri(config) {
config = mergeConfig(this.defaults, config);
return transformUrl(config);
};
/**
* 默认配置
*/
var defaults = {
baseURL: '',
header: {},
method: Method.GET,
responseType: HttpResponseType.TEXT,
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
}
};
var Cancel = function Cancel(message) {
if (message === void 0) message = '';
this.message = message;
};
var CancelToken = function CancelToken(executor) {
var this$1 = this;
var resolvePromise;
this.promise = new Promise(function (resolve) {
resolvePromise = resolve;
}); // executor 括号内为 一个回调函数作为参数该函数接收一个string类型的取消原因作为参数
// 调用该回调函数时,会修改 Promise状态为 resolve
executor(function (message) {
if (this$1.reason) {
return;
}
this$1.reason = new Cancel(message);
resolvePromise(this$1.reason); // 修改 Promise状态为 resolve
});
};
CancelToken.source = function source() {
var cancel;
var token = new CancelToken(function (fn) {
cancel = fn;
});
return {
cancel: cancel,
token: token
};
};
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
if (this.reason) {
throw this.reason;
}
};
function isCancel(val) {
return val instanceof Cancel;
}
function getAxios(config) {
var context = new Axios(config); // Axios 实例,用于给 axios继承自身属性
var axios = Axios.prototype.request.bind(context); // 复制原型方法,并绑定函数`this` Copy axios.prototype to instance
extend(axios, Axios.prototype, context); // 复制实例属性 Copy context to instance
extend(axios, context);
return axios;
}
var axios = getAxios(defaults);
axios.create = function create(config) {
return getAxios(mergeConfig(defaults, config));
};
axios.CancelToken = CancelToken;
axios.Cancel = Cancel;
axios.isCancel = isCancel;
axios.all = function (promises) {
return Promise.all(promises);
};
axios.spread = function (callback) {
return function wrap(arr) {
return callback.apply(null, arr);
};
};
return axios;
})));

1
js_sdk/xtshadow-axios/axios.min.js vendored Normal file

File diff suppressed because one or more lines are too long