zhuxiuping 2 gadi atpakaļ
vecāks
revīzija
a05f287da6
100 mainītis faili ar 44935 papildinājumiem un 0 dzēšanām
  1. 16 0
      .hbuilderx/launch.json
  2. 40 0
      App.vue
  3. 12 0
      admin.config.js
  4. 11 0
      common/animate.min.css
  5. 6 0
      common/bus.js
  6. 534 0
      common/db.js
  7. 70 0
      common/func.js
  8. 80 0
      common/http.js
  9. 253 0
      common/iconfont.css
  10. 1580 0
      common/main.css
  11. 372 0
      common/uni.css
  12. 201 0
      components/popups_goods.vue
  13. 262 0
      components/tree_select.vue
  14. 99 0
      components/use-table/use-table.vue
  15. 20 0
      index.html
  16. 103 0
      main.js
  17. 81 0
      manifest.json
  18. 12 0
      node_modules/.bin/nanoid
  19. 17 0
      node_modules/.bin/nanoid.cmd
  20. 28 0
      node_modules/.bin/nanoid.ps1
  21. 12 0
      node_modules/.bin/parser
  22. 17 0
      node_modules/.bin/parser.cmd
  23. 28 0
      node_modules/.bin/parser.ps1
  24. 239 0
      node_modules/.package-lock.json
  25. 1073 0
      node_modules/@babel/parser/CHANGELOG.md
  26. 19 0
      node_modules/@babel/parser/LICENSE
  27. 19 0
      node_modules/@babel/parser/README.md
  28. 15 0
      node_modules/@babel/parser/bin/babel-parser.js
  29. 5 0
      node_modules/@babel/parser/index.cjs
  30. 14379 0
      node_modules/@babel/parser/lib/index.js
  31. 1 0
      node_modules/@babel/parser/lib/index.js.map
  32. 46 0
      node_modules/@babel/parser/package.json
  33. 241 0
      node_modules/@babel/parser/typings/babel-parser.d.ts
  34. 21 0
      node_modules/@vue/compiler-sfc/LICENSE
  35. 454 0
      node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts
  36. 17902 0
      node_modules/@vue/compiler-sfc/dist/compiler-sfc.js
  37. 34 0
      node_modules/@vue/compiler-sfc/package.json
  38. 26 0
      node_modules/async-validator/HISTORY.md
  39. 9 0
      node_modules/async-validator/LICENSE.md
  40. 365 0
      node_modules/async-validator/README.md
  41. 262 0
      node_modules/async-validator/es/index.js
  42. 56 0
      node_modules/async-validator/es/messages.js
  43. 22 0
      node_modules/async-validator/es/rule/enum.js
  44. 15 0
      node_modules/async-validator/es/rule/index.js
  45. 33 0
      node_modules/async-validator/es/rule/pattern.js
  46. 58 0
      node_modules/async-validator/es/rule/range.js
  47. 20 0
      node_modules/async-validator/es/rule/required.js
  48. 88 0
      node_modules/async-validator/es/rule/type.js
  49. 20 0
      node_modules/async-validator/es/rule/whitespace.js
  50. 188 0
      node_modules/async-validator/es/util.js
  51. 29 0
      node_modules/async-validator/es/validator/array.js
  52. 29 0
      node_modules/async-validator/es/validator/boolean.js
  53. 32 0
      node_modules/async-validator/es/validator/date.js
  54. 30 0
      node_modules/async-validator/es/validator/enum.js
  55. 30 0
      node_modules/async-validator/es/validator/float.js
  56. 33 0
      node_modules/async-validator/es/validator/index.js
  57. 30 0
      node_modules/async-validator/es/validator/integer.js
  58. 29 0
      node_modules/async-validator/es/validator/method.js
  59. 30 0
      node_modules/async-validator/es/validator/number.js
  60. 29 0
      node_modules/async-validator/es/validator/object.js
  61. 32 0
      node_modules/async-validator/es/validator/pattern.js
  62. 29 0
      node_modules/async-validator/es/validator/regexp.js
  63. 11 0
      node_modules/async-validator/es/validator/required.js
  64. 34 0
      node_modules/async-validator/es/validator/string.js
  65. 20 0
      node_modules/async-validator/es/validator/type.js
  66. 281 0
      node_modules/async-validator/lib/index.js
  67. 62 0
      node_modules/async-validator/lib/messages.js
  68. 34 0
      node_modules/async-validator/lib/rule/enum.js
  69. 41 0
      node_modules/async-validator/lib/rule/index.js
  70. 44 0
      node_modules/async-validator/lib/rule/pattern.js
  71. 69 0
      node_modules/async-validator/lib/rule/range.js
  72. 31 0
      node_modules/async-validator/lib/rule/required.js
  73. 107 0
      node_modules/async-validator/lib/rule/type.js
  74. 31 0
      node_modules/async-validator/lib/rule/whitespace.js
  75. 210 0
      node_modules/async-validator/lib/util.js
  76. 42 0
      node_modules/async-validator/lib/validator/array.js
  77. 41 0
      node_modules/async-validator/lib/validator/boolean.js
  78. 44 0
      node_modules/async-validator/lib/validator/date.js
  79. 43 0
      node_modules/async-validator/lib/validator/enum.js
  80. 42 0
      node_modules/async-validator/lib/validator/float.js
  81. 83 0
      node_modules/async-validator/lib/validator/index.js
  82. 42 0
      node_modules/async-validator/lib/validator/integer.js
  83. 41 0
      node_modules/async-validator/lib/validator/method.js
  84. 42 0
      node_modules/async-validator/lib/validator/number.js
  85. 41 0
      node_modules/async-validator/lib/validator/object.js
  86. 44 0
      node_modules/async-validator/lib/validator/pattern.js
  87. 41 0
      node_modules/async-validator/lib/validator/regexp.js
  88. 25 0
      node_modules/async-validator/lib/validator/required.js
  89. 46 0
      node_modules/async-validator/lib/validator/string.js
  90. 32 0
      node_modules/async-validator/lib/validator/type.js
  91. 58 0
      node_modules/async-validator/package.json
  92. 685 0
      node_modules/axios/CHANGELOG.md
  93. 19 0
      node_modules/axios/LICENSE
  94. 800 0
      node_modules/axios/README.md
  95. 162 0
      node_modules/axios/UPGRADE_GUIDE.md
  96. 1756 0
      node_modules/axios/dist/axios.js
  97. 1 0
      node_modules/axios/dist/axios.map
  98. 3 0
      node_modules/axios/dist/axios.min.js
  99. 1 0
      node_modules/axios/dist/axios.min.map
  100. 0 0
      node_modules/axios/index.d.ts

+ 16 - 0
.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 40 - 0
App.vue

@@ -0,0 +1,40 @@
+<script>
+	import {
+		mapGetters,
+		mapActions
+	} from 'vuex'
+	import config from '@/admin.config.js'
+	import { version } from './package.json'
+	export default {
+		globalData: {
+			baseurl: 'https://www.xn--gmq052a5d255v.com/cloud-mall',
+		},
+		computed: {
+			...mapGetters({
+				isTokenValid: 'user/isTokenValid'
+			})
+		},
+		methods: {
+			
+		},
+		onPageNotFound(msg) {
+			uni.redirectTo({
+				url: config.error.url
+			})
+		},
+		onLaunch: function() {
+			console.log(this.isTokenValid)
+			if (!this.isTokenValid) {
+				// uni.redirectTo({
+				// 	url: config.login.url
+				// })
+			} else {
+				// this.init()
+			}
+		}
+	}
+</script>
+
+<style>
+	@import '@/common/uni.css';
+</style>

+ 12 - 0
admin.config.js

@@ -0,0 +1,12 @@
+export default {
+	login: {
+		url: '/pages/login' // 登录页面路径
+	},
+	index: {
+		// url: '/pages/shop/home/page' // 登录后跳转的第一个页面/pages/home
+	},
+	error: {
+		url: '/pages/error/404' // 404 Not Found 错误页面路径
+	},
+	debug: process.env.NODE_ENV !== 'production', // true: 开发 false: 线上
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 11 - 0
common/animate.min.css


+ 6 - 0
common/bus.js

@@ -0,0 +1,6 @@
+import Vue from 'vue';
+
+// 使用 Event Bus
+const bus = new Vue();
+
+export default bus;

+ 534 - 0
common/db.js

@@ -0,0 +1,534 @@
+import {
+	Message,
+	Loading
+} from 'element-ui';
+
+import config from '@/admin.config.js'
+
+let db = {};
+let unidb = uniCloud.database();
+
+db = new Proxy(db, {
+	get: function(target, key) {
+		// console.log(target, key);
+		if (key === '$cmd') return unidb.command;
+		return new DbContext(key);
+	}
+});
+
+function DbContext(name) {
+	this.table = name;
+	this.where_obj = {};
+	this.where_arr = [];
+	this.where_str = '';
+	this.isgroup = false;
+	this.group = {};
+	
+	this.response = {
+		code: 200,
+		datas: {},
+		msg: ''
+	}
+}
+
+DbContext.prototype = {
+	table: '', // 数据集合|表名
+	field: '',
+	isgroup: false,
+	group: {},
+	where_obj: {}, // where 条件
+	where_arr: [], // where 条件
+	where_str: '', // where 条件
+	response: {} // 统一响应格式
+};
+
+DbContext.prototype.where = function(params) {
+	if (typeof params === 'object') {
+		Object.assign(this.where_obj, params);
+	}
+	if (typeof params === 'string') {
+		this.where_arr.push(params);
+	}
+	return this
+}
+DbContext.prototype.whereif = function(_flag, _obj) {
+	if (_flag) this.where(_obj);
+	return this;
+}
+
+DbContext.prototype.field = function(params) {
+	this.filed = params;
+	return this;
+}
+
+DbContext.prototype.collection = function() {
+	return unidb.collection(this.table);
+}
+
+DbContext.prototype.add = function(obj) {
+	uni.showLoading({
+		title: '请求中'
+	})
+	return this.collection()
+		.add(obj)
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' add', res);
+			}
+			if (res.result) {
+				this.response.datas = res.result;
+				if (res.result.errCode === 0) this.response.code = 200;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' add catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			uni.hideLoading();
+		});
+}
+
+DbContext.prototype.remove = function(_id) {
+	uni.showLoading({
+		title: '请求中'
+	})
+
+	if (_id) {
+		return this.collection()
+			.doc(_id)
+			.remove()
+			.then(res => {
+				if (config.debug) {
+					console.log(this.table + ' remove', res);
+				}
+				if (res.result) {
+					this.response.datas = res.result;
+					if (res.result.errCode === 0) this.response.code = 200;
+
+					return Promise.resolve(this.response);
+				}
+
+				return Promise.reject(res);
+			})
+			.catch(err => {
+				if (config.debug) {
+					console.log(this.table + ' remove catch', err);
+					Message.error(err.message);
+				}
+				return Promise.reject(err);
+			})
+			.finally(res => {
+				uni.hideLoading();
+			});
+	}
+	this.where_str = this.where_arr.join(' && ');
+	return this.collection()
+		.where(this.where_str || this.where_obj)
+		.remove()
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' remove', res);
+			}
+			if (res.result) {
+				this.response.datas = res.result;
+				if (res.result.errCode === 0) this.response.code = 200;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' remove catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			uni.hideLoading();
+		});
+}
+
+DbContext.prototype.set = function(_id, obj) {
+	uni.showLoading({
+		title: '请求中'
+	})
+	return this.collection()
+		.doc(_id)
+		.set(obj)
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' set', res);
+			}
+			if (res.result) {
+				this.response.datas = res.result;
+				if (res.result.errCode === 0) this.response.code = 200;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' set catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			uni.hideLoading();
+		});
+}
+
+DbContext.prototype.update = function(_id, obj) {
+	uni.showLoading({
+		title: '请求中'
+	})
+	if (_id) {
+		return this.collection()
+			.doc(_id)
+			.update(obj)
+			.then(res => {
+				if (config.debug) {
+					console.log(this.table + ' update', res);
+				}
+				if (res.result) {
+					this.response.datas = res.result;
+					if (res.result.errCode === 0) this.response.code = 200;
+
+					return Promise.resolve(this.response);
+				}
+
+				return Promise.reject(res);
+			})
+			.catch(err => {
+				if (config.debug) {
+					console.log(this.table + ' update catch', err);
+					Message.error(err.message);
+				}
+				return Promise.reject(err);
+			})
+			.finally(res => {
+				uni.hideLoading();
+			});
+	}
+
+	this.where_str = this.where_arr.join(' && ');
+	return this.collection()
+		.where(this.where_str || this.where_obj)
+		.update(obj)
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' update', res);
+			}
+			if (res.result) {
+				this.response.datas = res.result;
+				if (res.result.errCode === 0) this.response.code = 200;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' update catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			uni.hideLoading();
+		});
+}
+
+DbContext.prototype.tofirst = function(_obj) {
+	let _id = '';
+	let _loading = true;
+	if (typeof _obj === 'object') {
+		_id = _obj._id || '';
+		if (typeof _obj.loadding === 'boolean') _loading = _obj.loadding;
+	}
+	if (typeof _obj === 'string') {
+		_id = _obj;
+	}
+	
+	if (_loading) {
+		uni.showLoading({
+			title: '请求中'
+		})
+	}
+	
+	let ctx = this.collection();
+	
+	if (_id) {
+		ctx = ctx.doc(_id);
+		if (this.filed) { ctx = ctx.field(this.filed); }
+		return ctx.get()
+			.then(res => {
+				if (config.debug) {
+					console.log(this.table + ' tofirst', res);
+				}
+				const data = res.result.data[0];
+				if (res.result.errCode === 0) {
+					this.response.code = 200;
+					this.response.datas = data;
+
+					return Promise.resolve(this.response);
+				}
+
+				return Promise.reject(res);
+			})
+			.catch(err => {
+				if (config.debug) {
+					console.log(this.table + ' tofirst catch', err);
+					Message.error(err.message);
+				}
+				return Promise.reject(err);
+			})
+			.finally(res => {
+				if (_loading) {
+					uni.hideLoading();
+				}
+			});
+	}
+	this.where_str = this.where_arr.join(' && ');
+	ctx = ctx.where(this.where_str || this.where_obj);
+	if (this.filed) { ctx = ctx.field(this.filed); }
+	return ctx.get({
+			getOne: true
+		})
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' tofirst', res);
+			}
+			const data = res.result.data;
+			if (res.result.errCode === 0) {
+				this.response.code = 200;
+				this.response.datas = data;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' tofirst catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			uni.hideLoading();
+		});
+}
+
+DbContext.prototype.totree = function(req) {
+	// 页码 页数 排序
+	req = Object.assign({
+		page: 1,
+		rows: 50,
+		orderby: '',
+		loadding: true
+	}, req);
+	
+	if (req.loadding) {
+		uni.showLoading({
+			title: '请求中'
+		})
+	}
+	
+	return this.collection()
+		.orderBy(req.orderby)
+		.get({
+			getTree: {
+				limitLevel: 15,
+				startWith: req.startWith
+			}
+		})
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' totree', res);
+			}
+			if (res.result) {
+				this.response.datas = res.result.data;
+
+				if (res.result.errCode === 0) this.response.code = 200;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' totree catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			if (req.loadding) {
+				uni.hideLoading();
+			}
+		});
+}
+
+DbContext.prototype.tolist = function(req) {
+	// 页码 页数 排序
+	req = Object.assign({
+		page: 1,
+		rows: 30,
+		orderby: ''
+	}, req);
+	uni.showLoading({
+		title: '请求中'
+	})
+	this.where_str = this.where_arr.join(' && ');
+	return this.collection()
+		.where(this.where_str || this.where_obj)
+		.orderBy(req.orderby)
+		.skip((req.page - 1) * req.rows)
+		.limit(req.rows)
+		.get()
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' tolist', res);
+			}
+			if (res.result) {
+				this.response.datas = res.result.data;
+
+				if (res.result.errCode === 0) this.response.code = 200;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' tolist catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			uni.hideLoading();
+		});
+}
+
+DbContext.prototype.withgroup = function (param) {
+	this.isgroup = true;
+	this.group = param;
+	return this;
+}
+
+DbContext.prototype.totable = async function(req) {
+	// 页码 页数 排序
+	req = Object.assign({
+		page: 1,
+		rows: 10,
+		orderby: ''
+	}, req);
+	uni.showLoading({
+		title: '请求中'
+	})
+	this.where_str = this.where_arr.join(' && ');
+	
+	if (this.isgroup) {
+		this.response.datas.groupDatas = [];
+		let groupWhereStr = this.where_arr.filter(x => x.indexOf(this.group.field) == -1).join(' && ');
+		let groupWhereObj = Object.assign({}, this.where_obj);
+		delete groupWhereObj[this.group.field];
+		const $ = unidb.command.aggregate;
+		const groupRes = await this.collection()
+					.aggregate()
+					.match(groupWhereStr || groupWhereObj)
+					.group({
+						_id: '$' + this.group.field,
+						cnt: $.sum(1)
+					})
+					.end();
+		
+		if (groupRes.result && groupRes.result.data) {
+			this.response.datas.groupDatas = groupRes.result.data;
+			this.response.datas.group = this.group;
+			this.group.datas = [];
+			this.group.total = 0;
+			
+			for (let key in this.group.obj) {
+				this.group.obj[key] = 0;
+			}
+			
+			this.response.datas.groupDatas.forEach(x =>{
+				x.name = x._id;
+				
+				if(Object.keys(this.group.obj).includes(x._id)) {
+					this.group.obj[x._id] = x.cnt;
+					this.group.total += x.cnt;
+				}
+			})
+			if (Object.keys(this.group.obj).includes('全部')) {
+				this.group.obj['全部'] = this.group.total;
+			}
+			
+			for (let key in this.group.obj) {
+				this.group.datas.push({
+					name: key,
+					cnt: this.group.obj[key]
+				})
+			}
+		}
+	}
+	
+	let ctx = this.collection();
+	
+	if (this.where_obj) { ctx = ctx.where(this.where_obj); }
+	if (this.where_str) { ctx = ctx.where(this.where_str); }
+	if (this.filed) { ctx = ctx.field(this.filed); }
+	
+	return ctx.skip((req.page - 1) * req.rows)
+		.orderBy(req.orderby)
+		.limit(req.rows)
+		.get({
+			getCount: true
+		})
+		.then(res => {
+			if (config.debug) {
+				console.log(this.table + ' totable', res);
+			}
+			if (res.result) {
+				this.response.datas.rows = res.result.data;
+				this.response.datas.total = res.result.count;
+
+				if (res.result.errCode === 0) this.response.code = 200;
+
+				return Promise.resolve(this.response);
+			}
+
+			return Promise.reject(res);
+		})
+		.catch(err => {
+			if (config.debug) {
+				console.log(this.table + ' totable catch', err);
+				Message.error(err.message);
+			}
+			return Promise.reject(err);
+		})
+		.finally(res => {
+			uni.hideLoading();
+		});
+}
+
+export default db;

+ 70 - 0
common/func.js

@@ -0,0 +1,70 @@
+import {
+	Message,
+	Loading
+} from 'element-ui';
+
+import $config from '@/admin.config.js'
+
+let func = {};
+
+func = new Proxy(func, {
+	get: function(target, key) {
+		return new FuncContext(key);
+	}
+});
+
+function FuncContext(name) {
+	this.funcname = name;
+	this.response = {
+		code: 200,
+		datas: {},
+		msg: ''
+	}
+}
+
+FuncContext.prototype = {
+	funcname: '',	// 云函数名称
+	response: {} 	// 统一响应格式
+};
+
+/**
+ * 调用云函数
+ * action controller 函数路径
+ * data controller 数据参数
+ * */
+FuncContext.prototype.call = function(action, data) {
+	uni.showLoading({
+		title: '请求中'
+	})
+	return uniCloud.callFunction({
+		name: this.funcname,
+		data: {
+			action,
+			data
+		}
+	}).then(res => {
+		if ($config.debug) {
+			console.log(this.funcname + '/' + action + ' call', res);
+		}
+		if (res.result) {
+			this.response.code = res.result.code === 0 ? 200 : res.result.code;
+			if (this.response.code != 200) {
+				this.response.msg = res.result.msg || res.result.message;
+			}
+			this.response.datas = res.result;
+			return Promise.resolve(this.response);
+		}
+		
+		return Promise.reject(res);
+	}).catch(err => {
+		if ($config.debug) {
+			console.log(this.funcname + ' call catch', err);
+			Message.error(err.message);
+		}
+		return Promise.reject(err);
+	}).finally(res => {
+		uni.hideLoading();
+	});
+}
+
+export default func;

+ 80 - 0
common/http.js

@@ -0,0 +1,80 @@
+// 导入axios
+import { Message, Loading } from 'element-ui';
+import axios from 'axios'
+
+// 创建一个副本 设置基地址
+axios.defaults.baseURL = 'https://www.jinganrenjiams.com/cloud-mall';
+let loading;
+window.$axios_config = {};
+// axios的拦截器
+axios.interceptors.request.use(
+    function (config) {
+
+        if (window.$axios_config && window.$axios_config.loading) {
+            loading = Loading.service({
+                lock: true,
+                text: '加载中……',
+                background: 'rgba(255, 255, 255, 0)',
+            })
+        }
+		config.url=config.baseURL+config.url
+
+        if (config.method === 'get' || config.method === 'delete') {
+            //  给data赋值以绕过if判断
+            config.data = 1
+        }
+
+        // 统一的设置token
+        config.headers['access_token'] = window.localStorage.getItem('token');
+        config.headers['content-type'] = 'application/json; charset=utf-8';
+        // 在发请求之后干一些事
+        return config
+    },
+    function (error) {
+        window.$axios_config.loading = true;
+        // 隐藏 loading
+        loading && loading.close()
+        // 在请求失败的时候干一些事
+        return Promise.reject(error)
+    }
+)
+
+let cnt_401 = 0;
+// 响应拦截器
+axios.interceptors.response.use(
+    function (response) {
+        window.$axios_config.loading = true;
+
+        if (response.data.code != 200) {
+            if (response.data.msg) {
+                if (response.data.code == 401) {
+                    cnt_401++;
+                    if (cnt_401 <= 1) {
+                        Message.error(response.data.msg);
+                    }
+                } else {
+                    Message.error(response.data.msg);
+                }
+            }
+        } else {
+            cnt_401 = 0;
+        }
+
+        window.$axios_config.loading = true;
+
+        // 隐藏 loading
+        loading && loading.close();
+        return response.data;
+    },
+    function (error) {
+        // 在响应出错的时候
+
+        window.$axios_config.loading = true;
+
+        // 隐藏 loading
+        loading && loading.close()
+        return Promise.reject(error)
+    }
+)
+
+export default axios

+ 253 - 0
common/iconfont.css

@@ -0,0 +1,253 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 1751054 */
+  src: url('//at.alicdn.com/t/font_1751054_z2gkxsdpjle.eot?t=1628408532803'); /* IE9 */
+  src: url('//at.alicdn.com/t/font_1751054_z2gkxsdpjle.eot?t=1628408532803#iefix') format('embedded-opentype'), /* IE6-IE8 */
+       url('//at.alicdn.com/t/font_1751054_z2gkxsdpjle.woff2?t=1628408532803') format('woff2'),
+       url('//at.alicdn.com/t/font_1751054_z2gkxsdpjle.woff?t=1628408532803') format('woff'),
+       url('//at.alicdn.com/t/font_1751054_z2gkxsdpjle.ttf?t=1628408532803') format('truetype'),
+       url('//at.alicdn.com/t/font_1751054_z2gkxsdpjle.svg?t=1628408532803#iconfont') format('svg');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.iconjifen:before {
+  content: "\e65e";
+}
+
+.iconyiwancheng:before {
+  content: "\e610";
+}
+
+.iconfenxiao:before {
+  content: "\e643";
+}
+
+.iconfanxuan:before {
+  content: "\e60f";
+}
+
+.iconyanse1:before {
+  content: "\e607";
+}
+
+.iconyanse2:before {
+  content: "\e663";
+}
+
+.iconyanse:before {
+  content: "\e60a";
+}
+
+.iconiconfontzhizuobiaozhunbduan17:before {
+  content: "\e6d8";
+}
+
+.iconshoucang:before {
+  content: "\e604";
+}
+
+.iconchakan3:before {
+  content: "\ed3d";
+}
+
+.iconfenxiang:before {
+  content: "\e605";
+}
+
+.iconhuo:before {
+  content: "\e603";
+}
+
+.iconzuorigaikuang:before {
+  content: "\e7b9";
+}
+
+.iconjinri1:before {
+  content: "\e601";
+}
+
+.iconpay:before {
+  content: "\e600";
+}
+
+.iconjinri:before {
+  content: "\e60e";
+}
+
+.iconzuori:before {
+  content: "\e602";
+}
+
+.iconxiaofei1:before {
+  content: "\e907";
+}
+
+.iconjin7tian:before {
+  content: "\e61f";
+}
+
+.iconguanli_zongyonghu:before {
+  content: "\e609";
+}
+
+.iconkong:before {
+  content: "\e632";
+}
+
+.iconyishouhuo:before {
+  content: "\e650";
+}
+
+.iconzhifu:before {
+  content: "\e64d";
+}
+
+.iconwlcx:before {
+  content: "\e692";
+}
+
+.icondingdanyiwancheng:before {
+  content: "\e622";
+}
+
+.iconxiugaijiage:before {
+  content: "\e6d1";
+}
+
+.iconwancheng:before {
+  content: "\e65f";
+}
+
+.iconxiangqing1:before {
+  content: "\e629";
+}
+
+.iconicon_huabanfuben:before {
+  content: "\e62c";
+}
+
+.iconjiaoseshouquan1:before {
+  content: "\e634";
+}
+
+.iconjiaoseshouquan2:before {
+  content: "\e6ca";
+}
+
+.iconpingjia1:before {
+  content: "\e72d";
+}
+
+.iconxiajia1:before {
+  content: "\e63b";
+}
+
+.iconshangjia:before {
+  content: "\e617";
+}
+
+.iconerweima:before {
+  content: "\e714";
+}
+
+.iconjiantou1:before {
+  content: "\e6fd";
+}
+
+.iconxinzeng:before {
+  content: "\e6fb";
+}
+
+.iconxiangqing:before {
+  content: "\e6f7";
+}
+
+.icontianjia:before {
+  content: "\e6f6";
+}
+
+.iconbianji:before {
+  content: "\e6f3";
+}
+
+.iconshanchu:before {
+  content: "\e6f4";
+}
+
+.iconsousuo:before {
+  content: "\e6f5";
+}
+
+.iconshuaxin:before {
+  content: "\e6f2";
+}
+
+.iconweixuanzhongzhuangtai:before {
+  content: "\e6f0";
+}
+
+.iconxuanzhongzhuangtai:before {
+  content: "\e6f1";
+}
+
+.iconrizhi:before {
+  content: "\e6ed";
+}
+
+.iconxitongshezhi:before {
+  content: "\e6ee";
+}
+
+.iconyingyong:before {
+  content: "\e6ef";
+}
+
+.iconchanpin:before {
+  content: "\e6eb";
+}
+
+.iconshuju:before {
+  content: "\e6ec";
+}
+
+.icondianpu:before {
+  content: "\e6ea";
+}
+
+.iconshouye01-01:before {
+  content: "\e6e9";
+}
+
+.iconyonghu:before {
+  content: "\e6e8";
+}
+
+.iconshijian:before {
+  content: "\e6e3";
+}
+
+.iconquanbudingdan:before {
+  content: "\e6e4";
+}
+
+.iconxiaofei:before {
+  content: "\e6e5";
+}
+
+.iconjiantou:before {
+  content: "\e6e6";
+}
+
+.iconxiadan:before {
+  content: "\e6e7";
+}
+
+.icontongzhi:before {
+  content: "\e6e2";
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1580 - 0
common/main.css


+ 372 - 0
common/uni.css

@@ -0,0 +1,372 @@
+/* 全局公共样式 */
+
+body,
+html {
+	-webkit-user-select: auto;
+	user-select: auto;
+	font: menu;
+	font-size: 16px;
+}
+
+/* #ifdef H5 */
+uni-main {
+	background-color: #f5f5f5;
+	/* position: relative; */
+	top: var(--top-window-height);
+	left: var(--window-left);
+	bottom: 0;
+	right: 0;
+	width: initial;
+	transition: all 0.3s ease-in-out;
+}
+
+.uni-mask+.uni-left-window,
+.uni-mask+.uni-right-window {
+	position: fixed;
+}
+
+uni-page-head .uni-page-head {
+	color: #333 !important;
+	/* margin-right: 15px; */
+}
+
+uni-page-head .uni-btn-icon {
+	color: #333 !important;
+}
+
+uni-page-head[uni-page-head-type=default]~uni-page-wrapper {
+	height: auto;
+	padding-top: 59px;
+}
+
+uni-page-head~uni-page-wrapper uni-page-body {
+	/* padding-top: 44px; */
+}
+
+uni-page-wrapper {
+	
+}
+
+uni-page-body {
+	position: absolute;
+	inset: 0;
+	box-sizing: border-box;
+	background-color: #F5F5F5;
+	width: 100%;
+	min-height: 100%;
+	box-sizing: border-box;
+	padding: 0 16px 16px 16px;
+	margin-top: 16px;
+	overflow-y: auto;
+	overflow-y: overlay;
+}
+
+.uni-container .uni-forms {
+	padding: 15px;
+	max-width: 460px;
+}
+
+/* #endif */
+
+/* #ifndef H5 */
+.uni-nav-menu {
+	height: 100vh;
+}
+
+/* #endif */
+
+.pointer {
+	cursor: pointer;
+}
+
+.uni-top-window {
+	z-index: 998;
+	overflow: visible;
+}
+
+.uni-tips {
+	font-size: 12px;
+	color: #666;
+}
+
+/* 容器 */
+.uni-container {
+	padding: 15px;
+	box-sizing: border-box;
+}
+
+/* 标题栏 */
+.uni-header {
+	padding: 0 15px;
+	display: flex;
+	height: 55px;
+	align-items: center;
+	justify-content: space-between;
+	border-bottom: 1px #f5f5f5 solid;
+}
+
+.uni-title {
+	margin-right: 10px;
+	font-size: 16px;
+	font-weight: 500;
+	color: #333;
+}
+
+.uni-sub-title {
+	margin-top: 3px;
+	font-size: 14px;
+	color: #999;
+}
+
+.uni-link {
+	color: #3A8EE6;
+	cursor: pointer;
+	text-decoration: underline;
+}
+
+.uni-group {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	word-break: keep-all;
+}
+
+/* 按钮样式 */
+.uni-button-group {
+	margin-top: 30px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.uni-button {
+	padding: 10px 20px;
+	font-size: 14px;
+	border-radius: 4px;
+	line-height: 1;
+	margin: 0;
+	box-sizing: border-box;
+	overflow: initial;
+}
+
+.uni-button+.uni-button {
+	margin-left: 10px;
+}
+
+
+.uni-button:hover,
+.uni-button:focus {
+	opacity: 0.9;
+}
+
+.uni-button:active {
+	opacity: 1;
+}
+
+.uni-button-full {
+	width: 100%;
+}
+
+/* 搜索框样式 */
+.uni-search {
+	height: 28px;
+	line-height: 28px;
+	font-size: 12px;
+	color: #606266;
+	padding: 0 10px;
+	border: 1px #dcdfe6 solid;
+	margin-right: 10px;
+	border-radius: 3px;
+}
+
+/* 分页容器 */
+.uni-pagination-box {
+	margin-top: 20px;
+}
+
+
+.uni-input-border,
+.uni-textarea-border {
+	width: 100%;
+	font-size: 14px;
+	color: #666;
+	border: 1px #e5e5e5 solid;
+	border-radius: 5px;
+	box-sizing: border-box;
+}
+
+.uni-input-border {
+	padding: 0 10px;
+	height: 35px;
+
+}
+
+.uni-textarea-border {
+	padding: 10px;
+	height: 80px;
+}
+
+.uni-disabled {
+	background-color: #F5F7FA;
+	color: #C0C4CC;
+}
+
+.uni-icon-password-eye {
+	position: absolute;
+	right: 8px;
+	top: 6px;
+	font-family: uniicons;
+	font-size: 20px;
+	font-weight: normal;
+	font-style: normal;
+	width: 24px;
+	height: 24px;
+	line-height: 24px;
+	color: #999999;
+}
+
+.uni-eye-active {
+	color: #007AFF;
+}
+
+.uni-tabs__header {
+	position: relative;
+	background-color: #f5f7fa;
+	border-bottom: 1px solid #e4e7ed;
+}
+
+.uni-tabs__nav-wrap {
+	overflow: hidden;
+	margin-bottom: -1px;
+	position: relative;
+}
+
+.uni-tabs__nav-scroll {
+	overflow: hidden;
+}
+
+.uni-tabs__nav {
+	position: relative;
+	white-space: nowrap;
+}
+
+
+.uni-tabs__item {
+	position: relative;
+	padding: 0 20px;
+	height: 40px;
+	box-sizing: border-box;
+	line-height: 40px;
+	display: inline-block;
+	list-style: none;
+	font-size: 14px;
+	font-weight: 500;
+	color: #909399;
+	margin-top: -1px;
+	margin-left: -1px;
+	border: 1px solid transparent;
+	cursor: pointer;
+}
+
+.uni-tabs__item.is-active {
+	color: #007aff;
+	background-color: #fff;
+	border-right-color: #dcdfe6;
+	border-left-color: #dcdfe6;
+}
+
+.uni-form-item-tips {
+	color: #999;
+	font-size: 12px;
+	margin-top: 3px;
+	position: absolute;
+
+}
+
+.uni-form-item-empty {
+	color: #999;
+	min-height: 36px;
+	line-height: 36px;
+}
+
+/* #ifdef H5 */
+@media screen and (max-width: 450px) {
+	.hide-on-phone {
+		display: none;
+	}
+}
+
+@media screen and (min-width: 450px) {
+	::v-deep .uni-forms-item__label {
+		margin-right: 50px !important;
+	}
+}
+
+/* #endif */
+
+::v-deep .uni-forms-item__label .label-text {
+	color: #606266 !important;
+}
+
+/* button 重置样式 */
+
+
+::v-deep uni-button[size=mini] {
+	line-height: 2.4;
+	font-size: 12px;
+	border-radius: 3px;
+}
+
+uni-button {
+	background: #fff;
+	border: 1px solid #dcdfe6;
+	color: #606266;
+	box-sizing: border-box;
+}
+
+uni-button[type=primary] {
+	background-color: #409EFF;
+	border-color: #409EFF;
+	border-width: 0;
+}
+
+uni-button[type=warn] {
+	background-color: #f56c6c;
+	border-color: #f56c6c;
+	border-width: 0;
+}
+
+uni-button[type=default] {
+	background: #fff;
+	border: 1px solid #dcdfe6;
+	color: #606266;
+	box-sizing: border-box;
+}
+
+uni-button[type=primary][plain] {
+	border-color: #409EFF;
+	color: #409EFF;
+}
+
+uni-button[type=warn][plain] {
+	border-color: #f56c6c;
+	color: #f56c6c;
+}
+
+uni-button[type=default][plain] {
+	border-color: #dcdfe6;
+	color: #606266;
+}
+
+uni-button[plain] {
+	border-color: #dcdfe6;
+	color: #606266;
+}
+
+uni-button:after {
+	border-width: 0;
+}
+
+.uni-input-placeholder {
+	color: #999;
+}

+ 201 - 0
components/popups_goods.vue

@@ -0,0 +1,201 @@
+<template>
+	<el-dialog width="70%" class="goods_popups" title="选择商品" :visible.sync="goodsDialog" :append-to-body="true">
+		<div class="dflex_sb">
+			<div></div>
+			<div class="dflex_vertical_c margin_b_20">
+				<div class="search_name">商品名称:</div>
+				<el-input v-model="req.name" placeholder="请输入" class="search_input" @input="search" clearable></el-input>
+			</div>
+		</div>
+		<el-table ref="goods" height="60vh" :data="tableDatas" highlight-current-row @selection-change="selectionChange" @row-click="choice">
+			<el-table-column type="selection"></el-table-column>
+			<el-table-column label="商品" width="400" align="center">
+				<template slot-scope="scope">
+					<div class="dflex_vertical_c">
+						<el-image class="e_table_side_img100 margin_r_10" :src="scope.row.imgs" fit="cover"></el-image>
+						<div class="left_just">
+							<div class="ellipsis">{{ scope.row.name }}</div>
+						</div>
+					</div>
+				</template>
+			</el-table-column>
+			<el-table-column label="价格" align="center">
+				<template slot-scope="scope">
+					<div class="price">{{ scope.row.price}}</div>
+					<div class="m_price">{{ scope.row.marketPrice}}</div>
+				</template>
+			</el-table-column>
+			<el-table-column label="状态" align="center">
+				<template slot-scope="scope">
+					<template v-if="scope.row.state==0">下架</template>
+					<template v-if="scope.row.state==1">在售</template>
+					<template v-if="scope.row.state==2">待审核</template>
+				</template>
+			</el-table-column>
+			<el-table-column label="数据统计" align="left" width="100">
+				<template slot-scope="scope">
+					<div class="left_just">
+						<div>已售数:{{ scope.row.saleCnt }}</div>
+						<div>访问数:{{ scope.row.visitCnt }}</div>
+						<div>收藏数:{{ scope.row.collectCnt }}</div>
+						<!-- <div>分享数:{{ scope.row.shareCnt }}</div> -->
+					</div>
+				</template>
+			</el-table-column>
+			<el-table-column label="标签" align="center" width="220">
+				<template slot-scope="scope">
+					<el-tag effect="plain" type="info" class="margin_r_5 margin_t_5" v-for="(item, i) in scope.row.goodsServiceTags" :key="i">{{ item.tagName }}</el-tag>
+				</template>
+			</el-table-column>
+		</el-table>
+		<el-pagination
+			:current-page="req.page"
+			:page-sizes="[10, 20, 30, 50, 100]"
+			:page-size="req.rows"
+			layout="total, sizes, prev, pager, next, jumper"
+			:total="tableTotal"
+			@size-change="sizeChange"
+			@current-change="currentChange"
+		></el-pagination>
+		<div class="btn pos_a">
+			<el-button class="confirm_btn" @click="confirm">确 定</el-button>
+			<el-button @click="goodsDialog = false">取 消</el-button>
+		</div>
+	</el-dialog>
+</template>
+
+<script>
+const __name = 'usemall-goods';
+export default {
+	// props: {
+	//     limited: {
+	//       type: String,
+	//       required: true
+	//     }
+	//   },
+	data() {
+		return {
+			goodsDialog: false,
+			where_obj: {},
+			req: {
+				page: 1,
+				rows: 10,
+				orderby: 'sort asc',
+				name: ''
+			},
+			tableDatas: [],
+			tableTotal: 0,
+			selectDatas: [],
+			limited:'',
+			hot:''
+		};
+	},
+	methods: {
+		loadData() {
+			this.$axios.get("/goods/admin/list",
+			{
+				params:{
+					'curPage':this.req.page,
+					'pageSize':this.req.rows,
+					'goodsName':this.req.name,//商品名称搜索
+					'limited':this.limited,//是否限时精选;0否1是
+					'hot':this.hot,//是否热门;0否1是
+				},
+				headers:{
+					'Mall-Token': uni.getStorageSync("token")
+				}
+			}).then(response => {
+				let res = response
+				console.log(res)
+				if (res.success) {
+					this.tableDatas = res.data.list;
+					this.tableTotal = res.data.totalCount;
+				} else {
+				}
+			}).catch(res =>{
+			});
+			// this.$db[__name]
+			// 	.whereif(this.req.name, { name: new RegExp(this.req.name) })
+			// 	.where(this.where_obj)
+			// 	.totable(this.req)
+			// 	.then(res => {
+			// 		if (res.code == 200) {
+			// 			this.tableDatas = res.datas.rows;
+			// 			this.tableTotal = res.datas.total;
+			// 		}
+			// 	});
+		},
+		search(e) {
+			this.req.page = 1;
+			this.req.name=e
+			this.loadData();
+		},
+		show(data) {
+			this.limited=data.limited
+			this.hot=data.hot
+			for (const key in data) {
+				if (data.hasOwnProperty(key)) {
+					this.where_obj[key] = data[key];
+				}
+			}
+			this.goodsDialog = true;
+			this.loadData();
+		},
+		choice(row) {
+			this.$refs.goods.toggleRowSelection(row);
+		},
+		selectionChange(val) {
+			this.selectDatas = val;
+		},
+		confirm() {
+			if (this.selectDatas.length <= 0) {
+				this.$message('请选择商品');
+				return;
+			}
+
+			this.$emit('choiceGoods', this.selectDatas);
+			let data = this.selectDatas.map(x => x.id);
+			if(this.limited==0){
+				var type='2'
+			}else if(this.hot==0){
+				var type='1'
+			}
+			this.$axios.put("/goods/admin/hot-limited-change",
+			{
+				"action": type,//1热门推荐、2限时精选
+				"goodIds": data,
+				"type": 1//1新增、0取消
+			},
+			{
+				headers:{
+					'Mall-Token': uni.getStorageSync("token")
+				}
+			}).then(response => {
+				let res = response
+				if (res.success) {
+					this.loadData();
+					this.goodsDialog = false;
+				} else {
+				}
+			}).catch(res =>{
+			});
+			
+		},
+		sizeChange(size) {
+			this.req.rows = size;
+			this.loadData();
+		},
+		currentChange(current) {
+			this.req.page = current;
+			this.loadData();
+		}
+	}
+};
+</script>
+
+<style>
+.goods_popups .btn {
+	bottom: 20px;
+	right: 20px;
+}
+</style>

+ 262 - 0
components/tree_select.vue

@@ -0,0 +1,262 @@
+<template>
+	<div>
+		<div class="mask" v-show="isShowSelect" @click="isShowSelect = !isShowSelect"></div>
+		<el-popover placement="bottom-start" :width="width" trigger="manual" v-model="isShowSelect" @hide="popoverHide">
+			<el-tree class="common-tree" :style="style" ref="tree" :data="data" :props="defaultProps"
+				:show-checkbox="multiple" :node-key="nodeKey" :check-strictly="checkStrictly" default-expand-all
+				:expand-on-click-node="false" :check-on-click-node="multiple" :highlight-current="true"
+				@node-click="handleNodeClick" @check-change="handleCheckChange"></el-tree>
+			<el-select :style="selectStyle" slot="reference" ref="select" :size="size" v-model="selectedData"
+				:multiple="multiple" :clearable="clearable" :collapse-tags="collapseTags"
+				@click.native="isShowSelect = !isShowSelect" @remove-tag="removeSelectedNodes"
+				@clear="removeSelectedNode" @change="changeSelectedNodes" class="tree-select">
+				<el-option v-for="(item, idx) in options" :key="idx" :label="item.label" :value="item.value">
+				</el-option>
+			</el-select>
+		</el-popover>
+	</div>
+</template>
+
+<script>
+	export default {
+		name: "tree-select",
+		props: {
+			// 树结构数据
+			data: {
+				type: Array,
+				default () {
+					return [];
+				}
+			},
+			defaultProps: {
+				type: Object,
+				default () {
+					return {};
+				}
+			},
+			// 配置是否可多选
+			multiple: {
+				type: Boolean,
+				default () {
+					return false;
+				}
+			},
+			// 配置是否可清空选择
+			clearable: {
+				type: Boolean,
+				default () {
+					return false;
+				}
+			},
+			// 配置多选时是否将选中值按文字的形式展示
+			collapseTags: {
+				type: Boolean,
+				default () {
+					return false;
+				}
+			},
+			nodeKey: {
+				type: String,
+				default () {
+					return "id";
+				}
+			},
+			// 显示复选框情况下,是否严格遵循父子不互相关联
+			checkStrictly: {
+				type: Boolean,
+				default () {
+					return false;
+				}
+			},
+			// 默认选中的节点key数组
+			checkedKeys: {
+				type: Array,
+				default () {
+					return [];
+				}
+			},
+			size: {
+				type: String,
+				default () {
+					return "";
+				}
+			},
+			width: {
+				type: Number,
+				default () {
+					return 250;
+				}
+			},
+			height: {
+				type: Number,
+				default () {
+					return 300;
+				}
+			}
+		},
+		data() {
+			return {
+				isShowSelect: false, // 是否显示树状选择器
+				options: [],
+				selectedData: [], // 选中的节点
+				style: "width:" + this.width + "px;" + "height:" + this.height + "px;",
+				selectStyle: "width:" + (this.width + 24) + "px;",
+				checkedIds: [],
+				checkedData: []
+			};
+		},
+		mounted() {
+			this.initCheckedData();
+		},
+		methods: {
+			// 单选时点击tree节点,设置select选项
+			setSelectOption(node) {
+				let tmpMap = {};
+				tmpMap.value = node.key;
+				tmpMap.label = node.label;
+				this.options = [];
+				this.options.push(tmpMap);
+				this.selectedData = node.key;
+			},
+			// 单选,选中传进来的节点
+			checkSelectedNode(checkedKeys) {
+				var item = checkedKeys[0];
+				this.$refs.tree.setCurrentKey(item);
+				var node = this.$refs.tree.getNode(item);
+				this.setSelectOption(node);
+			},
+			// 多选,勾选上传进来的节点
+			checkSelectedNodes(checkedKeys) {
+				this.$refs.tree.setCheckedKeys(checkedKeys);
+			},
+			// 单选,清空选中
+			clearSelectedNode() {
+				this.selectedData = "";
+				this.$refs.tree.setCurrentKey(null);
+			},
+			// 多选,清空所有勾选
+			clearSelectedNodes() {
+				var checkedKeys = this.$refs.tree.getCheckedKeys(); // 所有被选中的节点的 key 所组成的数组数据
+				for (let i = 0; i < checkedKeys.length; i++) {
+					this.$refs.tree.setChecked(checkedKeys[i], false);
+				}
+			},
+			initCheckedData() {
+				if (this.multiple) {
+					// 多选
+					if (this.checkedKeys.length > 0) {
+						this.checkSelectedNodes(this.checkedKeys);
+					} else {
+						this.clearSelectedNodes();
+					}
+				} else {
+					// 单选
+					if (this.checkedKeys.length > 0) {
+						this.checkSelectedNode(this.checkedKeys);
+					} else {
+						this.clearSelectedNode();
+					}
+				}
+			},
+			popoverHide() {
+				if (this.multiple) {
+					this.checkedIds = this.$refs.tree.getCheckedKeys(); // 所有被选中的节点的 key 所组成的数组数据
+					this.checkedData = this.$refs.tree.getCheckedNodes(); // 所有被选中的节点所组成的数组数据
+				} else {
+					this.checkedIds = this.$refs.tree.getCurrentKey();
+					this.checkedData = this.$refs.tree.getCurrentNode();
+				}
+				this.$emit("popoverHide", this.checkedIds, this.checkedData);
+			},
+			// 单选,节点被点击时的回调,返回被点击的节点数据
+			handleNodeClick(data, node) {
+				if (!this.multiple) {
+					this.setSelectOption(node);
+					this.isShowSelect = !this.isShowSelect;
+					this.$emit("change", this.selectedData);
+				}
+			},
+			// 多选,节点勾选状态发生变化时的回调
+			handleCheckChange() {
+				var checkedKeys = this.$refs.tree.getCheckedKeys(); // 所有被选中的节点的 key 所组成的数组数据
+				this.options = checkedKeys.map(item => {
+					var node = this.$refs.tree.getNode(item); // 所有被选中的节点对应的node
+					let tmpMap = {};
+					tmpMap.value = node.key;
+					tmpMap.label = node.label;
+					return tmpMap;
+				});
+				this.selectedData = this.options.map(item => {
+					return item.value;
+				});
+				this.$emit("change", this.selectedData);
+			},
+			// 多选,删除任一select选项的回调
+			removeSelectedNodes(val) {
+				this.$refs.tree.setChecked(val, false);
+				var node = this.$refs.tree.getNode(val);
+				if (!this.checkStrictly && node.childNodes.length > 0) {
+					this.treeToList(node).map(item => {
+						if (item.childNodes.length <= 0) {
+							this.$refs.tree.setChecked(item, false);
+						}
+					});
+					this.handleCheckChange();
+				}
+				this.$emit("change", this.selectedData);
+			},
+			treeToList(tree) {
+				var queen = [];
+				var out = [];
+				queen = queen.concat(tree);
+				while (queen.length) {
+					var first = queen.shift();
+					if (first.childNodes) {
+						queen = queen.concat(first.childNodes);
+					}
+					out.push(first);
+				}
+				return out;
+			},
+			// 单选,清空select输入框的回调
+			removeSelectedNode() {
+				this.clearSelectedNode();
+				this.$emit("change", this.selectedData);
+			},
+			// 选中的select选项改变的回调
+			changeSelectedNodes(selectedData) {
+				// 多选,清空select输入框时,清除树勾选
+				if (this.multiple && selectedData.length <= 0) {
+					this.clearSelectedNodes();
+				}
+				this.$emit("change", this.selectedData);
+			}
+		},
+		watch: {
+			isShowSelect() {
+				// 隐藏select自带的下拉框
+				this.$refs.select.blur();
+			}
+		}
+	};
+</script>
+
+<style>
+	.mask {
+		width: 100%;
+		height: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		opacity: 0;
+		z-index: 11;
+	}
+
+	.common-tree {
+		overflow: auto;
+	}
+
+	.tree-select {
+		z-index: 111;
+	}
+</style>

+ 99 - 0
components/use-table/use-table.vue

@@ -0,0 +1,99 @@
+<template>
+	<div ref="useTable"></div>
+</template>
+
+<script>
+import bus from '@/common/bus';
+export default {
+	props: {
+		navHeight: {
+			type: Number,
+			default: 0
+		},
+		bottom: {
+			type: Number,
+			default: 15
+		},
+		right: {
+			type: Number,
+			default: 15
+		},
+		top: {
+			type: Number,
+			default: 0
+		}
+	},
+	data() {
+		return {
+			height: 0,
+			tblHeight: 0,
+			body: null,
+			containers: [],
+			tableObj: null,
+			tableButtonHeight: 0,
+			tablePaginationHeight: 0
+		};
+	},
+	mounted() {
+		this.body = document.getElementsByTagName('uni-page-body')[0];
+		this.__height = this.body.clientHeight;
+
+		this.containers = this.$refs.useTable.parentElement.querySelectorAll('.container');
+
+		this.tableStyle();
+		this.tableChange();
+
+		window.onresize = () => {
+			this.tableChange();
+		};
+	},
+
+	methods: {
+		tableStyle() {
+			if (this.tableObj && this.tableObj.ele) {
+				return;
+			}
+			this.containers.forEach(ele => {
+				if (![...ele.classList].includes('use-table')) {
+					this.__height -= ele.clientHeight - 15;
+				} else {
+					this.tableObj = { offset: this.$api.offset(ele), ele };
+				}
+			});
+			this.tableObj.ele.style.position = 'fixed';
+			this.tableObj.ele.style.top = this.tableObj.offset.t + 'px';
+			this.tableObj.ele.style.left = this.tableObj.offset.l + 'px';
+			this.tableObj.ele.style.bottom = this.bottom + 'px';
+			this.tableObj.ele.style.right = this.right + 'px';
+
+			if (this.tableObj.ele.childNodes.length) {
+				this.tableObj.ele.childNodes.forEach(ele => {
+					if ([...ele.classList].includes('el-pagination')) {
+						this.tablePaginationHeight = 35;
+					} else if ([...ele.classList].includes('el-table')) {
+						// 当前表格
+					} else {
+						this.tableButtonHeight = 55;
+					}
+				});
+			}
+		},
+		tableChange() {
+			// 40 为上下 padding 20
+			this.tblHeight = this.tableObj.ele.clientHeight - 40 - this.tableButtonHeight - this.tablePaginationHeight;
+			this.tableObj.ele.querySelector('.el-table').style.height = this.tblHeight + 'px';
+		}
+	},
+	created() {
+		bus.$on('fold', res => {
+			if (res) {
+				this.tableObj.ele.style.left = this.tableObj.offset.l - 116 + 'px';
+			} else {
+				this.tableObj.ele.style.left = this.tableObj.offset.l + 'px';
+			}
+		});
+	}
+};
+</script>
+
+<style></style>

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 103 - 0
main.js

@@ -0,0 +1,103 @@
+import Vue from 'vue'
+import App from './App'
+import store from './store'
+
+Vue.config.productionTip = false
+
+// 饿了么ui相关
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+Vue.use(ElementUI)
+
+// 引入echarts
+import * as echarts from 'echarts';
+Vue.prototype.$echarts = echarts
+
+// 全局导入样式
+import './common/main.css'
+import './common/animate.min.css'
+import $db from './common/db.js'
+import './common/iconfont.css'
+
+import axios from './common/http'
+Vue.prototype.$axios = axios
+
+// import db from './common/db'
+// Vue.prototype.$db = db
+
+import func from './common/func'
+Vue.prototype.$func = func
+Vue.prototype.$db = $db
+
+let $api = {
+	offset: function(a) {
+		var b, st;
+		if (document.documentElement) {
+			b = document.documentElement.scrollLeft;
+			st = document.documentElement.scrollTop
+		} else {
+			b = document.body.scrollLeft;
+			st = document.body.scrollTop
+		}
+		var c = a.getBoundingClientRect();
+		return {
+			c,
+			l: c.left + b,
+			t: c.top + st,
+			w: a.offsetWidth,
+			h: a.offsetHeight
+		}
+	},
+	get_form_prop: function(obj) {
+		let _name = '';
+		for (let _key in obj) {
+			_name = _key;
+			break;
+		}
+		return _name;
+	},
+	// 设置未验证 form
+	set_unvalidated_form_focus: function(_this, obj) {
+		let _name = this.get_form_prop(obj);
+		if (!_name) return;
+		try {
+			try { 
+				_this.$refs[_name].$el.querySelector("textarea").focus();
+			} catch (error) {
+				_this.$refs[_name].$el.querySelector("input").focus();
+			}
+		} catch (error) {
+			_this.$refs[_name].$el.scrollIntoViewIfNeeded(true)
+		}
+	}
+};
+Vue.prototype.$api = $api;
+
+Date.prototype.format = function(fmt) {
+	fmt = fmt || "yyyy-MM-dd hh:mm:ss"
+	var o = {
+		"M+": this.getMonth() + 1, //月份   
+		"d+": this.getDate(), //日   
+		"h+": this.getHours(), //小时   
+		"m+": this.getMinutes(), //分   
+		"s+": this.getSeconds(), //秒   
+		"q+": Math.floor((this.getMonth() + 3) / 3), //季度   
+		"S": this.getMilliseconds() //毫秒   
+	};
+	if (/(y+)/.test(fmt))
+		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+	for (var k in o)
+		if (new RegExp("(" + k + ")").test(fmt))
+			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k])
+				.length)));
+	return fmt;
+}
+
+
+App.mpType = 'app'
+
+const app = new Vue({
+	store,
+	...App
+})
+app.$mount()

+ 81 - 0
manifest.json

@@ -0,0 +1,81 @@
+{
+    "name" : "yundianshang_manage",
+    "appid" : "__UNI__35E4053",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "usingComponents" : true,
+        "nvueCompiler" : "uni-app",
+        "nvueStyleCompiler" : "uni-app",
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "modules" : {},
+        /* 模块配置 */
+        "distribute" : {
+            /* 应用发布信息 */
+            "android" : {
+                /* android打包配置 */
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            "ios" : {},
+            /* ios打包配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* SDK配置 */
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "h5" : {
+        "router" : {
+            "base" : "/homestay-manage/",
+            "mode" : "hash"
+        },
+        "devServer" : {
+            "port" : 8000, //浏览器运行端口
+            "https" : false,
+            "proxy" : {
+                "/api" : {
+                    //http://218.82.143.204:8054
+                    "target" : "https://www.jinganrenjiams.com/cloud-mall",
+                    "changeOrigin" : true,
+                    "secure" : false,
+                    "pathRewrite" : {
+                        "/api" : ""
+                    }
+                }
+            }
+        }
+    },
+    "vueVersion" : "2"
+}

+ 12 - 0
node_modules/.bin/nanoid

@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../nanoid/bin/nanoid.cjs" "$@"
+else 
+  exec node  "$basedir/../nanoid/bin/nanoid.cjs" "$@"
+fi

+ 17 - 0
node_modules/.bin/nanoid.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\nanoid\bin\nanoid.cjs" %*

+ 28 - 0
node_modules/.bin/nanoid.ps1

@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../nanoid/bin/nanoid.cjs" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../nanoid/bin/nanoid.cjs" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../nanoid/bin/nanoid.cjs" $args
+  } else {
+    & "node$exe"  "$basedir/../nanoid/bin/nanoid.cjs" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 12 - 0
node_modules/.bin/parser

@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
+else 
+  exec node  "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
+fi

+ 17 - 0
node_modules/.bin/parser.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\@babel\parser\bin\babel-parser.js" %*

+ 28 - 0
node_modules/.bin/parser.ps1

@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../@babel/parser/bin/babel-parser.js" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../@babel/parser/bin/babel-parser.js" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../@babel/parser/bin/babel-parser.js" $args
+  } else {
+    & "node$exe"  "$basedir/../@babel/parser/bin/babel-parser.js" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 239 - 0
node_modules/.package-lock.json

@@ -0,0 +1,239 @@
+{
+    "name": "Usecloud.uniCloud.admin.usemall",
+    "version": "1.0.9",
+    "lockfileVersion": 2,
+    "requires": true,
+    "packages": {
+        "node_modules/@babel/parser": {
+            "version": "7.22.16",
+            "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.16.tgz",
+            "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
+            "bin": {
+                "parser": "bin/babel-parser.js"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@vue/compiler-sfc": {
+            "version": "2.7.14",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
+            "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+            "dependencies": {
+                "@babel/parser": "^7.18.4",
+                "postcss": "^8.4.14",
+                "source-map": "^0.6.1"
+            }
+        },
+        "node_modules/async-validator": {
+            "version": "1.8.5",
+            "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz",
+            "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
+            "dependencies": {
+                "babel-runtime": "6.x"
+            }
+        },
+        "node_modules/axios": {
+            "version": "0.21.1",
+            "resolved": "https://registry.npmmirror.com/axios/-/axios-0.21.1.tgz",
+            "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
+            "dependencies": {
+                "follow-redirects": "^1.10.0"
+            }
+        },
+        "node_modules/babel-helper-vue-jsx-merge-props": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+            "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
+        },
+        "node_modules/babel-runtime": {
+            "version": "6.26.0",
+            "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz",
+            "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+            "dependencies": {
+                "core-js": "^2.4.0",
+                "regenerator-runtime": "^0.11.0"
+            }
+        },
+        "node_modules/core-js": {
+            "version": "2.6.12",
+            "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
+            "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+            "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+            "hasInstallScript": true
+        },
+        "node_modules/countup.js": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz",
+            "integrity": "sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A=="
+        },
+        "node_modules/csstype": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz",
+            "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+        },
+        "node_modules/deepmerge": {
+            "version": "1.5.2",
+            "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz",
+            "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/echarts": {
+            "version": "4.9.0",
+            "resolved": "https://registry.npmmirror.com/echarts/-/echarts-4.9.0.tgz",
+            "integrity": "sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==",
+            "dependencies": {
+                "zrender": "4.3.2"
+            }
+        },
+        "node_modules/echarts-map": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmmirror.com/echarts-map/-/echarts-map-3.0.1.tgz",
+            "integrity": "sha512-ZsfP4U75v9p2sdSCP4Fqhh8O43EglFwjeV/FbaIfeDn6G1MEvbp3CF0XRNAVhwoTfBK0zILuGcpcwcWq6z8CYw==",
+            "dependencies": {
+                "echarts": "~3.0.1"
+            }
+        },
+        "node_modules/echarts-map/node_modules/echarts": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmmirror.com/echarts/-/echarts-3.0.1.tgz",
+            "integrity": "sha512-8Hvaa+hOUAYaFAgQjRISWN/2LKZ4g66nE33dHNjG8wT3S/SU7m2ENJ2+96mEkLQN5m9VvQKhmjCMqiky3J/png==",
+            "deprecated": "deprecated",
+            "dependencies": {
+                "zrenderjs": "~3.0.2"
+            }
+        },
+        "node_modules/element-ui": {
+            "version": "2.15.1",
+            "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.1.tgz",
+            "integrity": "sha512-TqlScAKGH97XndSScUDeEHIzL1x7yg7DvQdKPEOUdiDcyIz3y3FJJBlpHYaJT96FOn1xpIcUZb+I2FJeU9EcrQ==",
+            "dependencies": {
+                "async-validator": "~1.8.1",
+                "babel-helper-vue-jsx-merge-props": "^2.0.0",
+                "deepmerge": "^1.2.0",
+                "normalize-wheel": "^1.0.1",
+                "resize-observer-polyfill": "^1.5.0",
+                "throttle-debounce": "^1.0.1"
+            },
+            "peerDependencies": {
+                "vue": "^2.5.17"
+            }
+        },
+        "node_modules/follow-redirects": {
+            "version": "1.15.2",
+            "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
+            "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+            "engines": {
+                "node": ">=4.0"
+            },
+            "peerDependenciesMeta": {
+                "debug": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/nanoid": {
+            "version": "3.3.6",
+            "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
+            "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+            "bin": {
+                "nanoid": "bin/nanoid.cjs"
+            },
+            "engines": {
+                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+            }
+        },
+        "node_modules/normalize-wheel": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+            "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA=="
+        },
+        "node_modules/picocolors": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+        },
+        "node_modules/postcss": {
+            "version": "8.4.29",
+            "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.29.tgz",
+            "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
+            "dependencies": {
+                "nanoid": "^3.3.6",
+                "picocolors": "^1.0.0",
+                "source-map-js": "^1.0.2"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            }
+        },
+        "node_modules/regenerator-runtime": {
+            "version": "0.11.1",
+            "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+            "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+        },
+        "node_modules/resize-observer-polyfill": {
+            "version": "1.5.1",
+            "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+            "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+        },
+        "node_modules/source-map": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/source-map-js": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+            "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/throttle-debounce": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+            "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==",
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/vue": {
+            "version": "2.7.14",
+            "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz",
+            "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
+            "dependencies": {
+                "@vue/compiler-sfc": "2.7.14",
+                "csstype": "^3.1.0"
+            }
+        },
+        "node_modules/vue-countupjs": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmmirror.com/vue-countupjs/-/vue-countupjs-1.0.0.tgz",
+            "integrity": "sha512-60zdL918nRuC93jZBOY1L3jw72OYYVDxQkIW0B73dPY44XXDg+BS+ImvrNXVDWz6bREwQ3kkKE4LlxM53F4ilA==",
+            "dependencies": {
+                "countup.js": "^1.8.5",
+                "vue": "^2.3.3"
+            }
+        },
+        "node_modules/wangeditor": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmmirror.com/wangeditor/-/wangeditor-3.1.1.tgz",
+            "integrity": "sha512-co18zRS96xVKhLyhTIqgqWs5khSbNPlZeoT8/B2dxnVKQMntRGu1D8ks+nbNOvZcIjyrdhhtde6LjqzVECL6DA=="
+        },
+        "node_modules/zrender": {
+            "version": "4.3.2",
+            "resolved": "https://registry.npmmirror.com/zrender/-/zrender-4.3.2.tgz",
+            "integrity": "sha512-bIusJLS8c4DkIcdiK+s13HiQ/zjQQVgpNohtd8d94Y2DnJqgM1yjh/jpDb8DoL6hd7r8Awagw8e3qK/oLaWr3g=="
+        },
+        "node_modules/zrenderjs": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmmirror.com/zrenderjs/-/zrenderjs-3.0.3.tgz",
+            "integrity": "sha512-+WsvUsqButmQXmdFENN4AJFbiNMf+9j0xKupRQoAxuxiFHU4y142X/i3O/Q6GGJ4YwXh8YbBNsWxkbCAxB3C/A=="
+        }
+    }
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1073 - 0
node_modules/@babel/parser/CHANGELOG.md


+ 19 - 0
node_modules/@babel/parser/LICENSE

@@ -0,0 +1,19 @@
+Copyright (C) 2012-2014 by various contributors (see AUTHORS)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 19 - 0
node_modules/@babel/parser/README.md

@@ -0,0 +1,19 @@
+# @babel/parser
+
+> A JavaScript parser
+
+See our website [@babel/parser](https://babeljs.io/docs/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%22+is%3Aopen) associated with this package.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save-dev @babel/parser
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/parser --dev
+```

+ 15 - 0
node_modules/@babel/parser/bin/babel-parser.js

@@ -0,0 +1,15 @@
+#!/usr/bin/env node
+/* eslint no-var: 0 */
+
+var parser = require("..");
+var fs = require("fs");
+
+var filename = process.argv[2];
+if (!filename) {
+  console.error("no filename specified");
+} else {
+  var file = fs.readFileSync(filename, "utf8");
+  var ast = parser.parse(file);
+
+  console.log(JSON.stringify(ast, null, "  "));
+}

+ 5 - 0
node_modules/@babel/parser/index.cjs

@@ -0,0 +1,5 @@
+try {
+  module.exports = require("./lib/index.cjs");
+} catch {
+  module.exports = require("./lib/index.js");
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 14379 - 0
node_modules/@babel/parser/lib/index.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
node_modules/@babel/parser/lib/index.js.map


+ 46 - 0
node_modules/@babel/parser/package.json

@@ -0,0 +1,46 @@
+{
+  "name": "@babel/parser",
+  "version": "7.22.16",
+  "description": "A JavaScript parser",
+  "author": "The Babel Team (https://babel.dev/team)",
+  "homepage": "https://babel.dev/docs/en/next/babel-parser",
+  "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A+parser+%28babylon%29%22+is%3Aopen",
+  "license": "MIT",
+  "publishConfig": {
+    "access": "public"
+  },
+  "keywords": [
+    "babel",
+    "javascript",
+    "parser",
+    "tc39",
+    "ecmascript",
+    "@babel/parser"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/babel/babel.git",
+    "directory": "packages/babel-parser"
+  },
+  "main": "./lib/index.js",
+  "types": "./typings/babel-parser.d.ts",
+  "files": [
+    "bin",
+    "lib",
+    "typings/babel-parser.d.ts",
+    "index.cjs"
+  ],
+  "engines": {
+    "node": ">=6.0.0"
+  },
+  "devDependencies": {
+    "@babel/code-frame": "^7.22.13",
+    "@babel/helper-check-duplicate-nodes": "^7.22.5",
+    "@babel/helper-fixtures": "^7.22.13",
+    "@babel/helper-string-parser": "^7.22.5",
+    "@babel/helper-validator-identifier": "^7.22.15",
+    "charcodes": "^0.2.0"
+  },
+  "bin": "./bin/babel-parser.js",
+  "type": "commonjs"
+}

+ 241 - 0
node_modules/@babel/parser/typings/babel-parser.d.ts

@@ -0,0 +1,241 @@
+// This file is auto-generated! Do not modify it directly.
+/* eslint-disable import/no-extraneous-dependencies, @typescript-eslint/consistent-type-imports, prettier/prettier */
+import * as _babel_types from '@babel/types';
+
+type Plugin =
+  | "asyncDoExpressions"
+  | "asyncGenerators"
+  | "bigInt"
+  | "classPrivateMethods"
+  | "classPrivateProperties"
+  | "classProperties"
+  | "classStaticBlock" // Enabled by default
+  | "decimal"
+  | "decorators-legacy"
+  | "decoratorAutoAccessors"
+  | "destructuringPrivate"
+  | "doExpressions"
+  | "dynamicImport"
+  | "explicitResourceManagement"
+  | "exportDefaultFrom"
+  | "exportNamespaceFrom" // deprecated
+  | "flow"
+  | "flowComments"
+  | "functionBind"
+  | "functionSent"
+  | "importMeta"
+  | "jsx"
+  | "logicalAssignment"
+  | "importAssertions" // deprecated
+  | "importAttributes"
+  | "importReflection"
+  | "moduleBlocks"
+  | "moduleStringNames"
+  | "nullishCoalescingOperator"
+  | "numericSeparator"
+  | "objectRestSpread"
+  | "optionalCatchBinding"
+  | "optionalChaining"
+  | "partialApplication"
+  | "placeholders"
+  | "privateIn" // Enabled by default
+  | "regexpUnicodeSets" // Enabled by default
+  | "throwExpressions"
+  | "topLevelAwait"
+  | "v8intrinsic"
+  | ParserPluginWithOptions[0];
+
+type ParserPluginWithOptions =
+  | ["decorators", DecoratorsPluginOptions]
+  | ["estree", { classFeatures?: boolean }]
+  | ["importAttributes", { deprecatedAssertSyntax: boolean }]
+  // @deprecated
+  | ["moduleAttributes", { version: "may-2020" }]
+  | ["pipelineOperator", PipelineOperatorPluginOptions]
+  | ["recordAndTuple", RecordAndTuplePluginOptions]
+  | ["flow", FlowPluginOptions]
+  | ["typescript", TypeScriptPluginOptions];
+
+type PluginConfig = Plugin | ParserPluginWithOptions;
+
+interface DecoratorsPluginOptions {
+  decoratorsBeforeExport?: boolean;
+  allowCallParenthesized?: boolean;
+}
+
+interface PipelineOperatorPluginOptions {
+  proposal: "minimal" | "fsharp" | "hack" | "smart";
+  topicToken?: "%" | "#" | "@@" | "^^" | "^";
+}
+
+interface RecordAndTuplePluginOptions {
+  syntaxType: "bar" | "hash";
+}
+
+interface FlowPluginOptions {
+  all?: boolean;
+  enums?: boolean;
+}
+
+interface TypeScriptPluginOptions {
+  dts?: boolean;
+  disallowAmbiguousJSXLike?: boolean;
+}
+
+// Type definitions for @babel/parser
+// Project: https://github.com/babel/babel/tree/main/packages/babel-parser
+// Definitions by: Troy Gerwien <https://github.com/yortus>
+//                 Marvin Hagemeister <https://github.com/marvinhagemeister>
+//                 Avi Vahl <https://github.com/AviVahl>
+// TypeScript Version: 2.9
+
+/**
+ * Parse the provided code as an entire ECMAScript program.
+ */
+declare function parse(
+  input: string,
+  options?: ParserOptions
+): ParseResult<_babel_types.File>;
+
+/**
+ * Parse the provided code as a single expression.
+ */
+declare function parseExpression(
+  input: string,
+  options?: ParserOptions
+): ParseResult<_babel_types.Expression>;
+
+interface ParserOptions {
+  /**
+   * By default, import and export declarations can only appear at a program's top level.
+   * Setting this option to true allows them anywhere where a statement is allowed.
+   */
+  allowImportExportEverywhere?: boolean;
+
+  /**
+   * By default, await use is not allowed outside of an async function.
+   * Set this to true to accept such code.
+   */
+  allowAwaitOutsideFunction?: boolean;
+
+  /**
+   * By default, a return statement at the top level raises an error.
+   * Set this to true to accept such code.
+   */
+  allowReturnOutsideFunction?: boolean;
+
+  /**
+   * By default, new.target use is not allowed outside of a function or class.
+   * Set this to true to accept such code.
+   */
+  allowNewTargetOutsideFunction?: boolean;
+
+  allowSuperOutsideMethod?: boolean;
+
+  /**
+   * By default, exported identifiers must refer to a declared variable.
+   * Set this to true to allow export statements to reference undeclared variables.
+   */
+  allowUndeclaredExports?: boolean;
+
+  /**
+   * By default, Babel parser JavaScript code according to Annex B syntax.
+   * Set this to `false` to disable such behavior.
+   */
+  annexB?: boolean;
+
+  /**
+   * By default, Babel attaches comments to adjacent AST nodes.
+   * When this option is set to false, comments are not attached.
+   * It can provide up to 30% performance improvement when the input code has many comments.
+   * @babel/eslint-parser will set it for you.
+   * It is not recommended to use attachComment: false with Babel transform,
+   * as doing so removes all the comments in output code, and renders annotations such as
+   * /* istanbul ignore next *\/ nonfunctional.
+   */
+  attachComment?: boolean;
+
+  /**
+   * By default, Babel always throws an error when it finds some invalid code.
+   * When this option is set to true, it will store the parsing error and
+   * try to continue parsing the invalid input file.
+   */
+  errorRecovery?: boolean;
+
+  /**
+   * Indicate the mode the code should be parsed in.
+   * Can be one of "script", "module", or "unambiguous". Defaults to "script".
+   * "unambiguous" will make @babel/parser attempt to guess, based on the presence
+   * of ES6 import or export statements.
+   * Files with ES6 imports and exports are considered "module" and are otherwise "script".
+   */
+  sourceType?: "script" | "module" | "unambiguous";
+
+  /**
+   * Correlate output AST nodes with their source filename.
+   * Useful when generating code and source maps from the ASTs of multiple input files.
+   */
+  sourceFilename?: string;
+
+  /**
+   * By default, the first line of code parsed is treated as line 1.
+   * You can provide a line number to alternatively start with.
+   * Useful for integration with other source tools.
+   */
+  startLine?: number;
+
+  /**
+   * By default, the parsed code is treated as if it starts from line 1, column 0.
+   * You can provide a column number to alternatively start with.
+   * Useful for integration with other source tools.
+   */
+  startColumn?: number;
+
+  /**
+   * Array containing the plugins that you want to enable.
+   */
+  plugins?: ParserPlugin[];
+
+  /**
+   * Should the parser work in strict mode.
+   * Defaults to true if sourceType === 'module'. Otherwise, false.
+   */
+  strictMode?: boolean;
+
+  /**
+   * Adds a ranges property to each node: [node.start, node.end]
+   */
+  ranges?: boolean;
+
+  /**
+   * Adds all parsed tokens to a tokens property on the File node.
+   */
+  tokens?: boolean;
+
+  /**
+   * By default, the parser adds information about parentheses by setting
+   * `extra.parenthesized` to `true` as needed.
+   * When this option is `true` the parser creates `ParenthesizedExpression`
+   * AST nodes instead of using the `extra` property.
+   */
+  createParenthesizedExpressions?: boolean;
+}
+
+type ParserPlugin = PluginConfig;
+
+
+declare const tokTypes: {
+  // todo(flow->ts) real token type
+  [name: string]: any;
+};
+
+interface ParseError {
+  code: string;
+  reasonCode: string;
+}
+
+type ParseResult<Result> = Result & {
+  errors: ParseError[];
+};
+
+export { DecoratorsPluginOptions, FlowPluginOptions, ParseError, ParseResult, ParserOptions, ParserPlugin, ParserPluginWithOptions, PipelineOperatorPluginOptions, RecordAndTuplePluginOptions, TypeScriptPluginOptions, parse, parseExpression, tokTypes };

+ 21 - 0
node_modules/@vue/compiler-sfc/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-present, Yuxi (Evan) You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 454 - 0
node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts

@@ -0,0 +1,454 @@
+import { LazyResult } from 'postcss';
+import { ParserPlugin } from '@babel/parser';
+
+declare interface AssetURLOptions {
+    [name: string]: string | string[];
+}
+
+declare type ASTAttr = {
+    name: string;
+    value: any;
+    dynamic?: boolean;
+    start?: number;
+    end?: number;
+};
+
+declare type ASTDirective = {
+    name: string;
+    rawName: string;
+    value: string;
+    arg: string | null;
+    isDynamicArg: boolean;
+    modifiers: ASTModifiers | null;
+    start?: number;
+    end?: number;
+};
+
+declare type ASTElement = {
+    type: 1;
+    tag: string;
+    attrsList: Array<ASTAttr>;
+    attrsMap: {
+        [key: string]: any;
+    };
+    rawAttrsMap: {
+        [key: string]: ASTAttr;
+    };
+    parent: ASTElement | void;
+    children: Array<ASTNode>;
+    start?: number;
+    end?: number;
+    processed?: true;
+    static?: boolean;
+    staticRoot?: boolean;
+    staticInFor?: boolean;
+    staticProcessed?: boolean;
+    hasBindings?: boolean;
+    text?: string;
+    attrs?: Array<ASTAttr>;
+    dynamicAttrs?: Array<ASTAttr>;
+    props?: Array<ASTAttr>;
+    plain?: boolean;
+    pre?: true;
+    ns?: string;
+    component?: string;
+    inlineTemplate?: true;
+    transitionMode?: string | null;
+    slotName?: string | null;
+    slotTarget?: string | null;
+    slotTargetDynamic?: boolean;
+    slotScope?: string | null;
+    scopedSlots?: {
+        [name: string]: ASTElement;
+    };
+    ref?: string;
+    refInFor?: boolean;
+    if?: string;
+    ifProcessed?: boolean;
+    elseif?: string;
+    else?: true;
+    ifConditions?: ASTIfConditions;
+    for?: string;
+    forProcessed?: boolean;
+    key?: string;
+    alias?: string;
+    iterator1?: string;
+    iterator2?: string;
+    staticClass?: string;
+    classBinding?: string;
+    staticStyle?: string;
+    styleBinding?: string;
+    events?: ASTElementHandlers;
+    nativeEvents?: ASTElementHandlers;
+    transition?: string | true;
+    transitionOnAppear?: boolean;
+    model?: {
+        value: string;
+        callback: string;
+        expression: string;
+    };
+    directives?: Array<ASTDirective>;
+    forbidden?: true;
+    once?: true;
+    onceProcessed?: boolean;
+    wrapData?: (code: string) => string;
+    wrapListeners?: (code: string) => string;
+    ssrOptimizability?: number;
+};
+
+declare type ASTElementHandler = {
+    value: string;
+    params?: Array<any>;
+    modifiers: ASTModifiers | null;
+    dynamic?: boolean;
+    start?: number;
+    end?: number;
+};
+
+declare type ASTElementHandlers = {
+    [key: string]: ASTElementHandler | Array<ASTElementHandler>;
+};
+
+declare type ASTExpression = {
+    type: 2;
+    expression: string;
+    text: string;
+    tokens: Array<string | Object>;
+    static?: boolean;
+    ssrOptimizability?: number;
+    start?: number;
+    end?: number;
+};
+
+declare type ASTIfCondition = {
+    exp: string | null;
+    block: ASTElement;
+};
+
+declare type ASTIfConditions = Array<ASTIfCondition>;
+
+declare type ASTModifiers = {
+    [key: string]: boolean;
+};
+
+declare type ASTNode = ASTElement | ASTText | ASTExpression;
+
+declare type ASTText = {
+    type: 3;
+    text: string;
+    static?: boolean;
+    isComment?: boolean;
+    ssrOptimizability?: number;
+    start?: number;
+    end?: number;
+};
+
+declare type BindingMetadata = {
+    [key: string]: BindingTypes | undefined;
+} & {
+    __isScriptSetup?: boolean;
+};
+
+declare const enum BindingTypes {
+    /**
+     * returned from data()
+     */
+    DATA = "data",
+    /**
+     * declared as a prop
+     */
+    PROPS = "props",
+    /**
+     * a local alias of a `<script setup>` destructured prop.
+     * the original is stored in __propsAliases of the bindingMetadata object.
+     */
+    PROPS_ALIASED = "props-aliased",
+    /**
+     * a let binding (may or may not be a ref)
+     */
+    SETUP_LET = "setup-let",
+    /**
+     * a const binding that can never be a ref.
+     * these bindings don't need `unref()` calls when processed in inlined
+     * template expressions.
+     */
+    SETUP_CONST = "setup-const",
+    /**
+     * a const binding that does not need `unref()`, but may be mutated.
+     */
+    SETUP_REACTIVE_CONST = "setup-reactive-const",
+    /**
+     * a const binding that may be a ref.
+     */
+    SETUP_MAYBE_REF = "setup-maybe-ref",
+    /**
+     * bindings that are guaranteed to be refs
+     */
+    SETUP_REF = "setup-ref",
+    /**
+     * declared by other options, e.g. computed, inject
+     */
+    OPTIONS = "options"
+}
+
+declare type CompiledResult = {
+    ast: ASTElement | null;
+    render: string;
+    staticRenderFns: Array<string>;
+    stringRenderFns?: Array<string>;
+    errors?: Array<string | WarningMessage>;
+    tips?: Array<string | WarningMessage>;
+};
+
+export declare type CompilerOptions = {
+    warn?: Function;
+    modules?: Array<ModuleOptions>;
+    directives?: {
+        [key: string]: Function;
+    };
+    staticKeys?: string;
+    isUnaryTag?: (tag: string) => boolean | undefined;
+    canBeLeftOpenTag?: (tag: string) => boolean | undefined;
+    isReservedTag?: (tag: string) => boolean | undefined;
+    preserveWhitespace?: boolean;
+    whitespace?: 'preserve' | 'condense';
+    optimize?: boolean;
+    mustUseProp?: (tag: string, type: string | null, name: string) => boolean;
+    isPreTag?: (attr: string) => boolean | null;
+    getTagNamespace?: (tag: string) => string | undefined;
+    expectHTML?: boolean;
+    isFromDOM?: boolean;
+    shouldDecodeTags?: boolean;
+    shouldDecodeNewlines?: boolean;
+    shouldDecodeNewlinesForHref?: boolean;
+    outputSourceRange?: boolean;
+    shouldKeepComment?: boolean;
+    delimiters?: [string, string];
+    comments?: boolean;
+    scopeId?: string;
+    bindings?: BindingMetadata;
+};
+
+/**
+ * Compile `<script setup>`
+ * It requires the whole SFC descriptor because we need to handle and merge
+ * normal `<script>` + `<script setup>` if both are present.
+ */
+export declare function compileScript(sfc: SFCDescriptor, options?: SFCScriptCompileOptions): SFCScriptBlock;
+
+export declare function compileStyle(options: SFCStyleCompileOptions): SFCStyleCompileResults;
+
+export declare function compileStyleAsync(options: SFCStyleCompileOptions): Promise<SFCStyleCompileResults>;
+
+export declare function compileTemplate(options: SFCTemplateCompileOptions): SFCTemplateCompileResults;
+
+export declare function generateCodeFrame(source: string, start?: number, end?: number): string;
+
+declare interface ImportBinding {
+    isType: boolean;
+    imported: string;
+    source: string;
+    isFromSetup: boolean;
+    isUsedInTemplate: boolean;
+}
+
+declare type ModuleOptions = {
+    preTransformNode?: (el: ASTElement) => ASTElement | null | void;
+    transformNode?: (el: ASTElement) => ASTElement | null | void;
+    postTransformNode?: (el: ASTElement) => void;
+    genData?: (el: ASTElement) => string;
+    transformCode?: (el: ASTElement, code: string) => string;
+    staticKeys?: Array<string>;
+};
+
+export declare function parse(options: SFCParseOptions): SFCDescriptor;
+
+/**
+ * Parse a single-file component (*.vue) file into an SFC Descriptor Object.
+ */
+export declare function parseComponent(source: string, options?: VueTemplateCompilerParseOptions): SFCDescriptor;
+
+declare interface RawSourceMap extends StartOfSourceMap {
+    version: string;
+    sources: string[];
+    names: string[];
+    sourcesContent?: string[];
+    mappings: string;
+}
+
+/**
+ * Utility for rewriting `export default` in a script block into a variable
+ * declaration so that we can inject things into it
+ */
+export declare function rewriteDefault(input: string, as: string, parserPlugins?: ParserPlugin[]): string;
+
+export declare interface SFCBlock extends SFCCustomBlock {
+    lang?: string;
+    scoped?: boolean;
+    module?: string | boolean;
+}
+
+export declare interface SFCCustomBlock {
+    type: string;
+    content: string;
+    attrs: {
+        [key: string]: string | true;
+    };
+    start: number;
+    end: number;
+    src?: string;
+    map?: RawSourceMap;
+}
+
+export declare interface SFCDescriptor {
+    source: string;
+    filename: string;
+    template: SFCBlock | null;
+    script: SFCScriptBlock | null;
+    scriptSetup: SFCScriptBlock | null;
+    styles: SFCBlock[];
+    customBlocks: SFCCustomBlock[];
+    cssVars: string[];
+    errors: (string | WarningMessage)[];
+    /**
+     * compare with an existing descriptor to determine whether HMR should perform
+     * a reload vs. re-render.
+     *
+     * Note: this comparison assumes the prev/next script are already identical,
+     * and only checks the special case where `<script setup lang="ts">` unused
+     * import pruning result changes due to template changes.
+     */
+    shouldForceReload: (prevImports: Record<string, ImportBinding>) => boolean;
+}
+
+export declare interface SFCParseOptions {
+    source: string;
+    filename?: string;
+    compiler?: TemplateCompiler;
+    compilerParseOptions?: VueTemplateCompilerParseOptions;
+    sourceRoot?: string;
+    sourceMap?: boolean;
+    /**
+     * @deprecated use `sourceMap` instead.
+     */
+    needMap?: boolean;
+}
+
+export declare interface SFCScriptBlock extends SFCBlock {
+    type: 'script';
+    setup?: string | boolean;
+    bindings?: BindingMetadata;
+    imports?: Record<string, ImportBinding>;
+    /**
+     * import('\@babel/types').Statement
+     */
+    scriptAst?: any[];
+    /**
+     * import('\@babel/types').Statement
+     */
+    scriptSetupAst?: any[];
+}
+
+export declare interface SFCScriptCompileOptions {
+    /**
+     * Scope ID for prefixing injected CSS variables.
+     * This must be consistent with the `id` passed to `compileStyle`.
+     */
+    id: string;
+    /**
+     * Production mode. Used to determine whether to generate hashed CSS variables
+     */
+    isProd?: boolean;
+    /**
+     * Enable/disable source map. Defaults to true.
+     */
+    sourceMap?: boolean;
+    /**
+     * https://babeljs.io/docs/en/babel-parser#plugins
+     */
+    babelParserPlugins?: ParserPlugin[];
+}
+
+export declare interface SFCStyleCompileOptions {
+    source: string;
+    filename: string;
+    id: string;
+    map?: any;
+    scoped?: boolean;
+    trim?: boolean;
+    preprocessLang?: string;
+    preprocessOptions?: any;
+    postcssOptions?: any;
+    postcssPlugins?: any[];
+    isProd?: boolean;
+}
+
+export declare interface SFCStyleCompileResults {
+    code: string;
+    map: any | void;
+    rawResult: LazyResult | void;
+    errors: string[];
+}
+
+export declare interface SFCTemplateCompileOptions {
+    source: string;
+    filename: string;
+    compiler?: TemplateCompiler;
+    compilerOptions?: CompilerOptions;
+    transformAssetUrls?: AssetURLOptions | boolean;
+    transformAssetUrlsOptions?: TransformAssetUrlsOptions;
+    preprocessLang?: string;
+    preprocessOptions?: any;
+    transpileOptions?: any;
+    isProduction?: boolean;
+    isFunctional?: boolean;
+    optimizeSSR?: boolean;
+    prettify?: boolean;
+    isTS?: boolean;
+    bindings?: BindingMetadata;
+}
+
+export declare interface SFCTemplateCompileResults {
+    ast: Object | undefined;
+    code: string;
+    source: string;
+    tips: (string | WarningMessage)[];
+    errors: (string | WarningMessage)[];
+}
+
+declare interface StartOfSourceMap {
+    file?: string;
+    sourceRoot?: string;
+}
+
+export declare interface TemplateCompiler {
+    parseComponent(source: string, options?: any): SFCDescriptor;
+    compile(template: string, options: CompilerOptions): CompiledResult;
+    ssrCompile(template: string, options: CompilerOptions): CompiledResult;
+}
+
+declare interface TransformAssetUrlsOptions {
+    /**
+     * If base is provided, instead of transforming relative asset urls into
+     * imports, they will be directly rewritten to absolute urls.
+     */
+    base?: string;
+    /**
+     * If true, also processes absolute urls.
+     */
+    includeAbsolute?: boolean;
+}
+
+declare interface VueTemplateCompilerParseOptions {
+    pad?: 'line' | 'space' | boolean;
+    deindent?: boolean;
+    outputSourceRange?: boolean;
+}
+
+export declare type WarningMessage = {
+    msg: string;
+    start?: number;
+    end?: number;
+};
+
+export { }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 17902 - 0
node_modules/@vue/compiler-sfc/dist/compiler-sfc.js


+ 34 - 0
node_modules/@vue/compiler-sfc/package.json

@@ -0,0 +1,34 @@
+{
+  "name": "@vue/compiler-sfc",
+  "version": "2.7.14",
+  "description": "compiler-sfc for Vue 2",
+  "main": "dist/compiler-sfc.js",
+  "types": "dist/compiler-sfc.d.ts",
+  "files": [
+    "dist"
+  ],
+  "dependencies": {
+    "@babel/parser": "^7.18.4",
+    "postcss": "^8.4.14",
+    "source-map": "^0.6.1"
+  },
+  "devDependencies": {
+    "@babel/types": "^7.19.4",
+    "@types/estree": "^0.0.48",
+    "@types/hash-sum": "^1.0.0",
+    "@types/lru-cache": "^5.1.1",
+    "@vue/consolidate": "^0.17.3",
+    "de-indent": "^1.0.2",
+    "estree-walker": "^2.0.2",
+    "hash-sum": "^2.0.0",
+    "less": "^4.1.3",
+    "lru-cache": "^5.1.1",
+    "magic-string": "^0.25.9",
+    "merge-source-map": "^1.1.0",
+    "postcss-modules": "^4.3.1",
+    "postcss-selector-parser": "^6.0.10",
+    "pug": "^3.0.2",
+    "sass": "^1.52.3",
+    "stylus": "^0.58.1"
+  }
+}

+ 26 - 0
node_modules/async-validator/HISTORY.md

@@ -0,0 +1,26 @@
+# History
+----
+
+## 1.8.0 / 2017-08-16
+
+- validator support return promise.
+
+## 1.7.0 / 2017-06/09
+
+- add es
+- support string patter
+
+## 1.6.0 / 2016-03-30
+
+- support defaultField
+
+## 1.5.0 / 2016-02-02
+
+- support deep merge with default messages
+- support rule message of any type(exp: jsx)
+
+## 1.4.0 / 2015-01-12
+
+- fix first option. 
+- add firstFields option.
+- see tests/validator.spec.js

+ 9 - 0
node_modules/async-validator/LICENSE.md

@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-present yiminghe
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 365 - 0
node_modules/async-validator/README.md

@@ -0,0 +1,365 @@
+# async-validator
+---
+
+Validate form asynchronous. A variation of https://github.com/freeformsystems/async-validate
+
+[![NPM version][npm-image]][npm-url]
+[![build status][travis-image]][travis-url]
+[![Test coverage][coveralls-image]][coveralls-url]
+[![gemnasium deps][gemnasium-image]][gemnasium-url]
+[![node version][node-image]][node-url]
+[![npm download][download-image]][download-url]
+
+[npm-image]: http://img.shields.io/npm/v/async-validator.svg?style=flat-square
+[npm-url]: http://npmjs.org/package/async-validator
+[travis-image]: https://img.shields.io/travis/yiminghe/async-validator.svg?style=flat-square
+[travis-url]: https://travis-ci.org/yiminghe/async-validator
+[coveralls-image]: https://img.shields.io/coveralls/yiminghe/async-validator.svg?style=flat-square
+[coveralls-url]: https://coveralls.io/r/yiminghe/async-validator?branch=master
+[gemnasium-image]: http://img.shields.io/gemnasium/yiminghe/async-validator.svg?style=flat-square
+[gemnasium-url]: https://gemnasium.com/yiminghe/async-validator
+[node-image]: https://img.shields.io/badge/node.js-%3E=4.0.0-green.svg?style=flat-square
+[node-url]: http://nodejs.org/download/
+[download-image]: https://img.shields.io/npm/dm/async-validator.svg?style=flat-square
+[download-url]: https://npmjs.org/package/async-validator
+
+
+## API
+
+The following is modified from earlier version of [async-validate](https://github.com/freeformsystems/async-validate).
+
+### Usage
+
+Basic usage involves defining a descriptor, assigning it to a schema and passing the object to be validated and a callback function to the `validate` method of the schema:
+
+```javascript
+var schema = require('async-validator');
+var descriptor = {
+  name: {type: "string", required: true}
+}
+var validator = new schema(descriptor);
+validator.validate({name: "muji"}, (errors, fields) => {
+  if(errors) {
+    // validation failed, errors is an array of all errors
+    // fields is an object keyed by field name with an array of
+    // errors per field
+    return handleErrors(errors, fields);
+  }
+  // validation passed
+});
+```
+
+### Validate
+
+```javascript
+function(source, [options], callback)
+```
+
+* `source`: The object to validate (required).
+* `options`: An object describing processing options for the validation (optional).
+* `callback`: A callback function to invoke when validation completes (required).
+
+### Options
+
+* `first`: Boolean, Invoke `callback` when the first validation rule generates an error, 
+no more validation rules are processed. 
+If your validation involves multiple asynchronous calls (for example, database queries) and you only need the first error use this option.
+
+* `firstFields`: Boolean|String[], Invoke `callback` when the first validation rule of the specified field generates an error, 
+no more validation rules of the same field are processed.  `true` means all fields.
+
+### Rules
+
+Rules may be functions that perform validation.
+
+```javascript
+function(rule, value, callback, source, options)
+```
+
+* `rule`: The validation rule in the source descriptor that corresponds to the field name being validated. It is always assigned a `field` property with the name of the field being validated.
+* `value`: The value of the source object property being validated.
+* `callback`: A callback function to invoke once validation is complete. It expects to be passed an array of `Error` instances to indicate validation failure.
+* `source`: The source object that was passed to the `validate` method.
+* `options`: Additional options.
+* `options.messages`: The object containing validation error messages, will be deep merged with defaultMessages.
+
+The options passed to `validate` are passed on to the validation functions so that you may reference transient data (such as model references) in validation functions. However, some option names are reserved; if you use these properties of the options object they are overwritten. The reserved properties are `messages`, `exception` and `error`.
+
+```javascript
+var schema = require('async-validator');
+var descriptor = {
+  name(rule, value, callback, source, options) {
+    var errors = [];
+    if(!/^[a-z0-9]+$/.test(value)) {
+      errors.push(
+        new Error(
+          util.format("%s must be lowercase alphanumeric characters",
+            rule.field)));
+    }
+    callback(errors);
+  }
+}
+var validator = new schema(descriptor);
+validator.validate({name: "Firstname"}, (errors, fields) => {
+  if(errors) {
+    return handleErrors(errors, fields);
+  }
+  // validation passed
+});
+```
+
+It is often useful to test against multiple validation rules for a single field, to do so make the rule an array of objects, for example:
+
+```javascript
+var descriptor = {
+  email: [
+    {type: "string", required: true, pattern: schema.pattern.email},
+    {validator(rule, value, callback, source, options) {
+      var errors = [];
+      // test if email address already exists in a database
+      // and add a validation error to the errors array if it does
+      callback(errors);
+    }}
+  ]
+}
+```
+
+#### Type
+
+Indicates the `type` of validator to use. Recognised type values are:
+
+* `string`: Must be of type `string`. `This is the default type.`
+* `number`: Must be of type `number`.
+* `boolean`: Must be of type `boolean`.
+* `method`: Must be of type `function`.
+* `regexp`: Must be an instance of `RegExp` or a string that does not generate an exception when creating a new `RegExp`.
+* `integer`: Must be of type `number` and an integer.
+* `float`: Must be of type `number` and a floating point number.
+* `array`: Must be an array as determined by `Array.isArray`.
+* `object`: Must be of type `object` and not `Array.isArray`.
+* `enum`: Value must exist in the `enum`.
+* `date`: Value must be valid as determined by `Date`
+* `url`: Must be of type `url`.
+* `hex`: Must be of type `hex`.
+* `email`: Must be of type `email`.
+
+#### Required
+
+The `required` rule property indicates that the field must exist on the source object being validated.
+
+#### Pattern
+
+The `pattern` rule property indicates a regular expression that the value must match to pass validation.
+
+#### Range
+
+A range is defined using the `min` and `max` properties. For `string` and `array` types comparison is performed against the `length`, for `number` types the number must not be less than `min` nor greater than `max`.
+
+#### Length
+
+To validate an exact length of a field specify the `len` property. For `string` and `array` types comparison is performed on the `length` property, for the `number` type this property indicates an exact match for the `number`, ie, it may only be strictly equal to `len`.
+
+If the `len` property is combined with the `min` and `max` range properties, `len` takes precedence.
+
+#### Enumerable
+
+To validate a value from a list of possible values use the `enum` type with a `enum` property listing the valid values for the field, for example:
+
+```javascript
+var descriptor = {
+  role: {type: "enum", enum: ['admin', 'user', 'guest']}
+}
+```
+
+#### Whitespace
+
+It is typical to treat required fields that only contain whitespace as errors. To add an additional test for a string that consists solely of whitespace add a `whitespace` property to a rule with a value of `true`. The rule must be a `string` type.
+
+You may wish to sanitize user input instead of testing for whitespace, see [transform](#transform) for an example that would allow you to strip whitespace.
+
+
+#### Deep Rules
+
+If you need to validate deep object properties you may do so for validation rules that are of the `object` or `array` type by assigning nested rules to a `fields` property of the rule.
+
+```javascript
+var descriptor = {
+  address: {
+    type: "object", required: true,
+    fields: {
+      street: {type: "string", required: true},
+      city: {type: "string", required: true},
+      zip: {type: "string", required: true, len: 8, message: "invalid zip"}
+    }
+  },
+  name: {type: "string", required: true}
+}
+var validator = new schema(descriptor);
+validator.validate({ address: {} }, (errors, fields) => {
+  // errors for street, address.city, address.zip and address.name
+});
+```
+
+Note that if you do not specify the `required` property on the parent rule it is perfectly valid for the field not to be declared on the source object and the deep validation rules will not be executed as there is nothing to validate against.
+
+Deep rule validation creates a schema for the nested rules so you can also specify the `options` passed to the `schema.validate()` method.
+
+```javascript
+var descriptor = {
+  address: {
+    type: "object", required: true, options: {single: true, first: true},
+    fields: {
+      street: {type: "string", required: true},
+      city: {type: "string", required: true},
+      zip: {type: "string", required: true, len: 8, message: "invalid zip"}
+    }
+  },
+  name: {type: "string", required: true}
+}
+var validator = new schema(descriptor);
+validator.validate({ address: {} }, (errors, fields) => {
+  // now only errors for street and name
+});
+```
+
+The parent rule is also validated so if you have a set of rules such as:
+
+```javascript
+var descriptor = {
+  roles: {
+    type: "array", required: true, len: 3,
+    fields: {
+      0: {type: "string", required: true},
+      1: {type: "string", required: true},
+      2: {type: "string", required: true}
+    }
+  }
+}
+```
+
+And supply a source object of `{roles: ["admin", "user"]}` then two errors will be created. One for the array length mismatch and one for the missing required array entry at index 2.
+
+#### defaultField
+
+The `defaultField` property can be used with the `array` or `object` type for validating all values of the container.
+It may be an `object` or `array` containing validation rules. For example:
+
+```javascript
+var descriptor = {
+  urls: {
+    type: "array", required: true,
+    defaultField: {type: "url"}
+  }
+}
+```
+
+Note that `defaultField` is expanded to `fields`, see [deep rules](#deep-rules).
+
+#### Transform
+
+Sometimes it is necessary to transform a value before validation, possibly to coerce the value or to sanitize it in some way. To do this add a `transform` function to the validation rule. The property is transformed prior to validation and re-assigned to the source object to mutate the value of the property in place.
+
+```javascript
+var schema = require('async-validator');
+var sanitize = require('validator').sanitize;
+var descriptor = {
+  name: {
+    type: "string",
+    required: true, pattern: /^[a-z]+$/,
+    transform(value) {
+      return sanitize(value).trim();
+    }
+  }
+}
+var validator = new schema(descriptor);
+var source = {name: " user  "};
+validator.validate(source, (errors, fields) => {
+  assert.equal(source.name, "user");
+});
+```
+
+Without the `transform` function validation would fail due to the pattern not matching as the input contains leading and trailing whitespace, but by adding the transform function validation passes and the field value is sanitized at the same time.
+
+
+### Messages
+
+Depending upon your application requirements, you may need i18n support or you may prefer different validation error messages.
+
+The easiest way to achieve this is to assign a `message` to a rule:
+
+```javascript
+{name:{type: "string", required: true, message: "Name is required"}}
+```
+
+Message can be any type, such as jsx format.
+
+```javascript
+{name:{type: "string", required: true, message: <b>Name is required</b>}}
+```
+
+Potentially you may require the same schema validation rules for different languages, in which case duplicating the schema rules for each language does not make sense.
+
+In this scenario you could just provide your own messages for the language and assign it to the schema:
+
+```javascript
+var schema = require('async-validator');
+var cn = {
+  required: '%s 必填',
+};
+var descriptor = {name:{type: "string", required: true}};
+var validator = new schema(descriptor);
+// deep merge with defaultMessages
+validator.messages(cn);
+...
+```
+
+If you are defining your own validation functions it is better practice to assign the message strings to a messages object and then access the messages via the `options.messages` property within the validation function.
+
+### validator
+
+you can custom validate function for specified field:
+
+```js
+const fields = {
+  asyncField:{
+    validator(rule,value,callback){
+      ajax({
+        url:'xx',
+        value:value
+      }).then(function(data){
+        callback();
+      },function(error){
+        callback(new Error(error))
+      });
+    }
+  },
+ 
+  promiseField:{
+      validator(rule, value){
+        return ajax({
+          url:'xx',
+          value:value
+        });
+      }
+    }
+};
+```
+
+## Test Case
+
+```
+npm test
+npm run chrome-test
+```
+
+## Coverage
+
+```
+npm run coverage
+```
+
+open coverage/ dir
+
+## License
+
+Everything is [MIT](http://en.wikipedia.org/wiki/MIT_License).

+ 262 - 0
node_modules/async-validator/es/index.js

@@ -0,0 +1,262 @@
+import _extends from 'babel-runtime/helpers/extends';
+import _typeof from 'babel-runtime/helpers/typeof';
+import { format, complementError, asyncMap, warning, deepMerge } from './util';
+import validators from './validator/';
+import { messages as defaultMessages, newMessages } from './messages';
+
+/**
+ *  Encapsulates a validation schema.
+ *
+ *  @param descriptor An object declaring validation rules
+ *  for this schema.
+ */
+function Schema(descriptor) {
+  this.rules = null;
+  this._messages = defaultMessages;
+  this.define(descriptor);
+}
+
+Schema.prototype = {
+  messages: function messages(_messages) {
+    if (_messages) {
+      this._messages = deepMerge(newMessages(), _messages);
+    }
+    return this._messages;
+  },
+  define: function define(rules) {
+    if (!rules) {
+      throw new Error('Cannot configure a schema with no rules');
+    }
+    if ((typeof rules === 'undefined' ? 'undefined' : _typeof(rules)) !== 'object' || Array.isArray(rules)) {
+      throw new Error('Rules must be an object');
+    }
+    this.rules = {};
+    var z = void 0;
+    var item = void 0;
+    for (z in rules) {
+      if (rules.hasOwnProperty(z)) {
+        item = rules[z];
+        this.rules[z] = Array.isArray(item) ? item : [item];
+      }
+    }
+  },
+  validate: function validate(source_) {
+    var _this = this;
+
+    var o = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+    var oc = arguments[2];
+
+    var source = source_;
+    var options = o;
+    var callback = oc;
+    if (typeof options === 'function') {
+      callback = options;
+      options = {};
+    }
+    if (!this.rules || Object.keys(this.rules).length === 0) {
+      if (callback) {
+        callback();
+      }
+      return;
+    }
+    function complete(results) {
+      var i = void 0;
+      var field = void 0;
+      var errors = [];
+      var fields = {};
+
+      function add(e) {
+        if (Array.isArray(e)) {
+          errors = errors.concat.apply(errors, e);
+        } else {
+          errors.push(e);
+        }
+      }
+
+      for (i = 0; i < results.length; i++) {
+        add(results[i]);
+      }
+      if (!errors.length) {
+        errors = null;
+        fields = null;
+      } else {
+        for (i = 0; i < errors.length; i++) {
+          field = errors[i].field;
+          fields[field] = fields[field] || [];
+          fields[field].push(errors[i]);
+        }
+      }
+      callback(errors, fields);
+    }
+
+    if (options.messages) {
+      var messages = this.messages();
+      if (messages === defaultMessages) {
+        messages = newMessages();
+      }
+      deepMerge(messages, options.messages);
+      options.messages = messages;
+    } else {
+      options.messages = this.messages();
+    }
+    var arr = void 0;
+    var value = void 0;
+    var series = {};
+    var keys = options.keys || Object.keys(this.rules);
+    keys.forEach(function (z) {
+      arr = _this.rules[z];
+      value = source[z];
+      arr.forEach(function (r) {
+        var rule = r;
+        if (typeof rule.transform === 'function') {
+          if (source === source_) {
+            source = _extends({}, source);
+          }
+          value = source[z] = rule.transform(value);
+        }
+        if (typeof rule === 'function') {
+          rule = {
+            validator: rule
+          };
+        } else {
+          rule = _extends({}, rule);
+        }
+        rule.validator = _this.getValidationMethod(rule);
+        rule.field = z;
+        rule.fullField = rule.fullField || z;
+        rule.type = _this.getType(rule);
+        if (!rule.validator) {
+          return;
+        }
+        series[z] = series[z] || [];
+        series[z].push({
+          rule: rule,
+          value: value,
+          source: source,
+          field: z
+        });
+      });
+    });
+    var errorFields = {};
+    asyncMap(series, options, function (data, doIt) {
+      var rule = data.rule;
+      var deep = (rule.type === 'object' || rule.type === 'array') && (_typeof(rule.fields) === 'object' || _typeof(rule.defaultField) === 'object');
+      deep = deep && (rule.required || !rule.required && data.value);
+      rule.field = data.field;
+      function addFullfield(key, schema) {
+        return _extends({}, schema, {
+          fullField: rule.fullField + '.' + key
+        });
+      }
+
+      function cb() {
+        var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+
+        var errors = e;
+        if (!Array.isArray(errors)) {
+          errors = [errors];
+        }
+        if (errors.length) {
+          warning('async-validator:', errors);
+        }
+        if (errors.length && rule.message) {
+          errors = [].concat(rule.message);
+        }
+
+        errors = errors.map(complementError(rule));
+
+        if (options.first && errors.length) {
+          errorFields[rule.field] = 1;
+          return doIt(errors);
+        }
+        if (!deep) {
+          doIt(errors);
+        } else {
+          // if rule is required but the target object
+          // does not exist fail at the rule level and don't
+          // go deeper
+          if (rule.required && !data.value) {
+            if (rule.message) {
+              errors = [].concat(rule.message).map(complementError(rule));
+            } else if (options.error) {
+              errors = [options.error(rule, format(options.messages.required, rule.field))];
+            } else {
+              errors = [];
+            }
+            return doIt(errors);
+          }
+
+          var fieldsSchema = {};
+          if (rule.defaultField) {
+            for (var k in data.value) {
+              if (data.value.hasOwnProperty(k)) {
+                fieldsSchema[k] = rule.defaultField;
+              }
+            }
+          }
+          fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);
+          for (var f in fieldsSchema) {
+            if (fieldsSchema.hasOwnProperty(f)) {
+              var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];
+              fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));
+            }
+          }
+          var schema = new Schema(fieldsSchema);
+          schema.messages(options.messages);
+          if (data.rule.options) {
+            data.rule.options.messages = options.messages;
+            data.rule.options.error = options.error;
+          }
+          schema.validate(data.value, data.rule.options || options, function (errs) {
+            doIt(errs && errs.length ? errors.concat(errs) : errs);
+          });
+        }
+      }
+
+      var res = rule.validator(rule, data.value, cb, data.source, options);
+      if (res && res.then) {
+        res.then(function () {
+          return cb();
+        }, function (e) {
+          return cb(e);
+        });
+      }
+    }, function (results) {
+      complete(results);
+    });
+  },
+  getType: function getType(rule) {
+    if (rule.type === undefined && rule.pattern instanceof RegExp) {
+      rule.type = 'pattern';
+    }
+    if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {
+      throw new Error(format('Unknown rule type %s', rule.type));
+    }
+    return rule.type || 'string';
+  },
+  getValidationMethod: function getValidationMethod(rule) {
+    if (typeof rule.validator === 'function') {
+      return rule.validator;
+    }
+    var keys = Object.keys(rule);
+    var messageIndex = keys.indexOf('message');
+    if (messageIndex !== -1) {
+      keys.splice(messageIndex, 1);
+    }
+    if (keys.length === 1 && keys[0] === 'required') {
+      return validators.required;
+    }
+    return validators[this.getType(rule)] || false;
+  }
+};
+
+Schema.register = function register(type, validator) {
+  if (typeof validator !== 'function') {
+    throw new Error('Cannot register a validator by type, validator is not a function');
+  }
+  validators[type] = validator;
+};
+
+Schema.messages = defaultMessages;
+
+export default Schema;

+ 56 - 0
node_modules/async-validator/es/messages.js

@@ -0,0 +1,56 @@
+export function newMessages() {
+  return {
+    'default': 'Validation error on field %s',
+    required: '%s is required',
+    'enum': '%s must be one of %s',
+    whitespace: '%s cannot be empty',
+    date: {
+      format: '%s date %s is invalid for format %s',
+      parse: '%s date could not be parsed, %s is invalid ',
+      invalid: '%s date %s is invalid'
+    },
+    types: {
+      string: '%s is not a %s',
+      method: '%s is not a %s (function)',
+      array: '%s is not an %s',
+      object: '%s is not an %s',
+      number: '%s is not a %s',
+      date: '%s is not a %s',
+      boolean: '%s is not a %s',
+      integer: '%s is not an %s',
+      float: '%s is not a %s',
+      regexp: '%s is not a valid %s',
+      email: '%s is not a valid %s',
+      url: '%s is not a valid %s',
+      hex: '%s is not a valid %s'
+    },
+    string: {
+      len: '%s must be exactly %s characters',
+      min: '%s must be at least %s characters',
+      max: '%s cannot be longer than %s characters',
+      range: '%s must be between %s and %s characters'
+    },
+    number: {
+      len: '%s must equal %s',
+      min: '%s cannot be less than %s',
+      max: '%s cannot be greater than %s',
+      range: '%s must be between %s and %s'
+    },
+    array: {
+      len: '%s must be exactly %s in length',
+      min: '%s cannot be less than %s in length',
+      max: '%s cannot be greater than %s in length',
+      range: '%s must be between %s and %s in length'
+    },
+    pattern: {
+      mismatch: '%s value %s does not match pattern %s'
+    },
+    clone: function clone() {
+      var cloned = JSON.parse(JSON.stringify(this));
+      cloned.clone = this.clone;
+      return cloned;
+    }
+  };
+}
+
+export var messages = newMessages();

+ 22 - 0
node_modules/async-validator/es/rule/enum.js

@@ -0,0 +1,22 @@
+import * as util from '../util';
+var ENUM = 'enum';
+
+/**
+ *  Rule for validating a value exists in an enumerable list.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function enumerable(rule, value, source, errors, options) {
+  rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
+  if (rule[ENUM].indexOf(value) === -1) {
+    errors.push(util.format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));
+  }
+}
+
+export default enumerable;

+ 15 - 0
node_modules/async-validator/es/rule/index.js

@@ -0,0 +1,15 @@
+import required from './required';
+import whitespace from './whitespace';
+import type from './type';
+import range from './range';
+import enumRule from './enum';
+import pattern from './pattern';
+
+export default {
+  required: required,
+  whitespace: whitespace,
+  type: type,
+  range: range,
+  'enum': enumRule,
+  pattern: pattern
+};

+ 33 - 0
node_modules/async-validator/es/rule/pattern.js

@@ -0,0 +1,33 @@
+import * as util from '../util';
+
+/**
+ *  Rule for validating a regular expression pattern.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function pattern(rule, value, source, errors, options) {
+  if (rule.pattern) {
+    if (rule.pattern instanceof RegExp) {
+      // if a RegExp instance is passed, reset `lastIndex` in case its `global`
+      // flag is accidentally set to `true`, which in a validation scenario
+      // is not necessary and the result might be misleading
+      rule.pattern.lastIndex = 0;
+      if (!rule.pattern.test(value)) {
+        errors.push(util.format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+      }
+    } else if (typeof rule.pattern === 'string') {
+      var _pattern = new RegExp(rule.pattern);
+      if (!_pattern.test(value)) {
+        errors.push(util.format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+      }
+    }
+  }
+}
+
+export default pattern;

+ 58 - 0
node_modules/async-validator/es/rule/range.js

@@ -0,0 +1,58 @@
+import * as util from '../util';
+
+/**
+ *  Rule for validating minimum and maximum allowed values.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function range(rule, value, source, errors, options) {
+  var len = typeof rule.len === 'number';
+  var min = typeof rule.min === 'number';
+  var max = typeof rule.max === 'number';
+  // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
+  var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+  var val = value;
+  var key = null;
+  var num = typeof value === 'number';
+  var str = typeof value === 'string';
+  var arr = Array.isArray(value);
+  if (num) {
+    key = 'number';
+  } else if (str) {
+    key = 'string';
+  } else if (arr) {
+    key = 'array';
+  }
+  // if the value is not of a supported type for range validation
+  // the validation rule rule should use the
+  // type property to also test for a particular type
+  if (!key) {
+    return false;
+  }
+  if (arr) {
+    val = value.length;
+  }
+  if (str) {
+    // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
+    val = value.replace(spRegexp, '_').length;
+  }
+  if (len) {
+    if (val !== rule.len) {
+      errors.push(util.format(options.messages[key].len, rule.fullField, rule.len));
+    }
+  } else if (min && !max && val < rule.min) {
+    errors.push(util.format(options.messages[key].min, rule.fullField, rule.min));
+  } else if (max && !min && val > rule.max) {
+    errors.push(util.format(options.messages[key].max, rule.fullField, rule.max));
+  } else if (min && max && (val < rule.min || val > rule.max)) {
+    errors.push(util.format(options.messages[key].range, rule.fullField, rule.min, rule.max));
+  }
+}
+
+export default range;

+ 20 - 0
node_modules/async-validator/es/rule/required.js

@@ -0,0 +1,20 @@
+import * as util from '../util';
+
+/**
+ *  Rule for validating required fields.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function required(rule, value, source, errors, options, type) {
+  if (rule.required && (!source.hasOwnProperty(rule.field) || util.isEmptyValue(value, type || rule.type))) {
+    errors.push(util.format(options.messages.required, rule.fullField));
+  }
+}
+
+export default required;

+ 88 - 0
node_modules/async-validator/es/rule/type.js

@@ -0,0 +1,88 @@
+import _typeof from 'babel-runtime/helpers/typeof';
+import * as util from '../util';
+import required from './required';
+
+/* eslint max-len:0 */
+
+var pattern = {
+  // http://emailregex.com/
+  email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+  url: new RegExp('^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', 'i'),
+  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
+};
+
+var types = {
+  integer: function integer(value) {
+    return types.number(value) && parseInt(value, 10) === value;
+  },
+  float: function float(value) {
+    return types.number(value) && !types.integer(value);
+  },
+  array: function array(value) {
+    return Array.isArray(value);
+  },
+  regexp: function regexp(value) {
+    if (value instanceof RegExp) {
+      return true;
+    }
+    try {
+      return !!new RegExp(value);
+    } catch (e) {
+      return false;
+    }
+  },
+  date: function date(value) {
+    return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function';
+  },
+  number: function number(value) {
+    if (isNaN(value)) {
+      return false;
+    }
+    return typeof value === 'number';
+  },
+  object: function object(value) {
+    return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && !types.array(value);
+  },
+  method: function method(value) {
+    return typeof value === 'function';
+  },
+  email: function email(value) {
+    return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
+  },
+  url: function url(value) {
+    return typeof value === 'string' && !!value.match(pattern.url);
+  },
+  hex: function hex(value) {
+    return typeof value === 'string' && !!value.match(pattern.hex);
+  }
+};
+
+/**
+ *  Rule for validating the type of a value.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function type(rule, value, source, errors, options) {
+  if (rule.required && value === undefined) {
+    required(rule, value, source, errors, options);
+    return;
+  }
+  var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
+  var ruleType = rule.type;
+  if (custom.indexOf(ruleType) > -1) {
+    if (!types[ruleType](value)) {
+      errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));
+    }
+    // straight typeof check
+  } else if (ruleType && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== rule.type) {
+    errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));
+  }
+}
+
+export default type;

+ 20 - 0
node_modules/async-validator/es/rule/whitespace.js

@@ -0,0 +1,20 @@
+import * as util from '../util';
+
+/**
+ *  Rule for validating whitespace.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function whitespace(rule, value, source, errors, options) {
+  if (/^\s+$/.test(value) || value === '') {
+    errors.push(util.format(options.messages.whitespace, rule.fullField));
+  }
+}
+
+export default whitespace;

+ 188 - 0
node_modules/async-validator/es/util.js

@@ -0,0 +1,188 @@
+import _extends from 'babel-runtime/helpers/extends';
+import _typeof from 'babel-runtime/helpers/typeof';
+var formatRegExp = /%[sdj%]/g;
+
+export var warning = function warning() {};
+
+// don't print warning message when in production env or node runtime
+if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {
+  warning = function warning(type, errors) {
+    if (typeof console !== 'undefined' && console.warn) {
+      if (errors.every(function (e) {
+        return typeof e === 'string';
+      })) {
+        console.warn(type, errors);
+      }
+    }
+  };
+}
+
+export function format() {
+  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  var i = 1;
+  var f = args[0];
+  var len = args.length;
+  if (typeof f === 'function') {
+    return f.apply(null, args.slice(1));
+  }
+  if (typeof f === 'string') {
+    var str = String(f).replace(formatRegExp, function (x) {
+      if (x === '%%') {
+        return '%';
+      }
+      if (i >= len) {
+        return x;
+      }
+      switch (x) {
+        case '%s':
+          return String(args[i++]);
+        case '%d':
+          return Number(args[i++]);
+        case '%j':
+          try {
+            return JSON.stringify(args[i++]);
+          } catch (_) {
+            return '[Circular]';
+          }
+          break;
+        default:
+          return x;
+      }
+    });
+    for (var arg = args[i]; i < len; arg = args[++i]) {
+      str += ' ' + arg;
+    }
+    return str;
+  }
+  return f;
+}
+
+function isNativeStringType(type) {
+  return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';
+}
+
+export function isEmptyValue(value, type) {
+  if (value === undefined || value === null) {
+    return true;
+  }
+  if (type === 'array' && Array.isArray(value) && !value.length) {
+    return true;
+  }
+  if (isNativeStringType(type) && typeof value === 'string' && !value) {
+    return true;
+  }
+  return false;
+}
+
+export function isEmptyObject(obj) {
+  return Object.keys(obj).length === 0;
+}
+
+function asyncParallelArray(arr, func, callback) {
+  var results = [];
+  var total = 0;
+  var arrLength = arr.length;
+
+  function count(errors) {
+    results.push.apply(results, errors);
+    total++;
+    if (total === arrLength) {
+      callback(results);
+    }
+  }
+
+  arr.forEach(function (a) {
+    func(a, count);
+  });
+}
+
+function asyncSerialArray(arr, func, callback) {
+  var index = 0;
+  var arrLength = arr.length;
+
+  function next(errors) {
+    if (errors && errors.length) {
+      callback(errors);
+      return;
+    }
+    var original = index;
+    index = index + 1;
+    if (original < arrLength) {
+      func(arr[original], next);
+    } else {
+      callback([]);
+    }
+  }
+
+  next([]);
+}
+
+function flattenObjArr(objArr) {
+  var ret = [];
+  Object.keys(objArr).forEach(function (k) {
+    ret.push.apply(ret, objArr[k]);
+  });
+  return ret;
+}
+
+export function asyncMap(objArr, option, func, callback) {
+  if (option.first) {
+    var flattenArr = flattenObjArr(objArr);
+    return asyncSerialArray(flattenArr, func, callback);
+  }
+  var firstFields = option.firstFields || [];
+  if (firstFields === true) {
+    firstFields = Object.keys(objArr);
+  }
+  var objArrKeys = Object.keys(objArr);
+  var objArrLength = objArrKeys.length;
+  var total = 0;
+  var results = [];
+  var next = function next(errors) {
+    results.push.apply(results, errors);
+    total++;
+    if (total === objArrLength) {
+      callback(results);
+    }
+  };
+  objArrKeys.forEach(function (key) {
+    var arr = objArr[key];
+    if (firstFields.indexOf(key) !== -1) {
+      asyncSerialArray(arr, func, next);
+    } else {
+      asyncParallelArray(arr, func, next);
+    }
+  });
+}
+
+export function complementError(rule) {
+  return function (oe) {
+    if (oe && oe.message) {
+      oe.field = oe.field || rule.fullField;
+      return oe;
+    }
+    return {
+      message: oe,
+      field: oe.field || rule.fullField
+    };
+  };
+}
+
+export function deepMerge(target, source) {
+  if (source) {
+    for (var s in source) {
+      if (source.hasOwnProperty(s)) {
+        var value = source[s];
+        if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && _typeof(target[s]) === 'object') {
+          target[s] = _extends({}, target[s], value);
+        } else {
+          target[s] = value;
+        }
+      }
+    }
+  }
+  return target;
+}

+ 29 - 0
node_modules/async-validator/es/validator/array.js

@@ -0,0 +1,29 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+/**
+ *  Validates an array.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function array(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value, 'array') && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options, 'array');
+    if (!isEmptyValue(value, 'array')) {
+      rules.type(rule, value, source, errors, options);
+      rules.range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default array;

+ 29 - 0
node_modules/async-validator/es/validator/boolean.js

@@ -0,0 +1,29 @@
+import { isEmptyValue } from '../util';
+import rules from '../rule/';
+
+/**
+ *  Validates a boolean.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function boolean(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      rules.type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default boolean;

+ 32 - 0
node_modules/async-validator/es/validator/date.js

@@ -0,0 +1,32 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+function date(rule, value, callback, source, options) {
+  // console.log('integer rule called %j', rule);
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  // console.log('validate on %s value', value);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (!isEmptyValue(value)) {
+      var dateObject = void 0;
+
+      if (typeof value === 'number') {
+        dateObject = new Date(value);
+      } else {
+        dateObject = value;
+      }
+
+      rules.type(rule, dateObject, source, errors, options);
+      if (dateObject) {
+        rules.range(rule, dateObject.getTime(), source, errors, options);
+      }
+    }
+  }
+  callback(errors);
+}
+
+export default date;

+ 30 - 0
node_modules/async-validator/es/validator/enum.js

@@ -0,0 +1,30 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+var ENUM = 'enum';
+
+/**
+ *  Validates an enumerable list.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function enumerable(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (value) {
+      rules[ENUM](rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default enumerable;

+ 30 - 0
node_modules/async-validator/es/validator/float.js

@@ -0,0 +1,30 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Validates a number is a floating point number.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function floatFn(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      rules.type(rule, value, source, errors, options);
+      rules.range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default floatFn;

+ 33 - 0
node_modules/async-validator/es/validator/index.js

@@ -0,0 +1,33 @@
+import string from './string';
+import method from './method';
+import number from './number';
+import boolean from './boolean';
+import regexp from './regexp';
+import integer from './integer';
+import float from './float';
+import array from './array';
+import object from './object';
+import enumValidator from './enum';
+import pattern from './pattern';
+import date from './date';
+import required from './required';
+import type from './type';
+
+export default {
+  string: string,
+  method: method,
+  number: number,
+  boolean: boolean,
+  regexp: regexp,
+  integer: integer,
+  float: float,
+  array: array,
+  object: object,
+  'enum': enumValidator,
+  pattern: pattern,
+  date: date,
+  url: type,
+  hex: type,
+  email: type,
+  required: required
+};

+ 30 - 0
node_modules/async-validator/es/validator/integer.js

@@ -0,0 +1,30 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Validates a number is an integer.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function integer(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      rules.type(rule, value, source, errors, options);
+      rules.range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default integer;

+ 29 - 0
node_modules/async-validator/es/validator/method.js

@@ -0,0 +1,29 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Validates a function.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function method(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      rules.type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default method;

+ 30 - 0
node_modules/async-validator/es/validator/number.js

@@ -0,0 +1,30 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Validates a number.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function number(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      rules.type(rule, value, source, errors, options);
+      rules.range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default number;

+ 29 - 0
node_modules/async-validator/es/validator/object.js

@@ -0,0 +1,29 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Validates an object.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function object(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      rules.type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default object;

+ 32 - 0
node_modules/async-validator/es/validator/pattern.js

@@ -0,0 +1,32 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Validates a regular expression pattern.
+ *
+ *  Performs validation when a rule only contains
+ *  a pattern property but is not declared as a string type.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function pattern(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value, 'string') && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (!isEmptyValue(value, 'string')) {
+      rules.pattern(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default pattern;

+ 29 - 0
node_modules/async-validator/es/validator/regexp.js

@@ -0,0 +1,29 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Validates the regular expression type.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function regexp(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options);
+    if (!isEmptyValue(value)) {
+      rules.type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default regexp;

+ 11 - 0
node_modules/async-validator/es/validator/required.js

@@ -0,0 +1,11 @@
+import _typeof from 'babel-runtime/helpers/typeof';
+import rules from '../rule/';
+
+function required(rule, value, callback, source, options) {
+  var errors = [];
+  var type = Array.isArray(value) ? 'array' : typeof value === 'undefined' ? 'undefined' : _typeof(value);
+  rules.required(rule, value, source, errors, options, type);
+  callback(errors);
+}
+
+export default required;

+ 34 - 0
node_modules/async-validator/es/validator/string.js

@@ -0,0 +1,34 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+/**
+ *  Performs validation for string types.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function string(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value, 'string') && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options, 'string');
+    if (!isEmptyValue(value, 'string')) {
+      rules.type(rule, value, source, errors, options);
+      rules.range(rule, value, source, errors, options);
+      rules.pattern(rule, value, source, errors, options);
+      if (rule.whitespace === true) {
+        rules.whitespace(rule, value, source, errors, options);
+      }
+    }
+  }
+  callback(errors);
+}
+
+export default string;

+ 20 - 0
node_modules/async-validator/es/validator/type.js

@@ -0,0 +1,20 @@
+import rules from '../rule/';
+import { isEmptyValue } from '../util';
+
+function type(rule, value, callback, source, options) {
+  var ruleType = rule.type;
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if (isEmptyValue(value, ruleType) && !rule.required) {
+      return callback();
+    }
+    rules.required(rule, value, source, errors, options, ruleType);
+    if (!isEmptyValue(value, ruleType)) {
+      rules.type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+export default type;

+ 281 - 0
node_modules/async-validator/lib/index.js

@@ -0,0 +1,281 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _extends2 = require('babel-runtime/helpers/extends');
+
+var _extends3 = _interopRequireDefault(_extends2);
+
+var _typeof2 = require('babel-runtime/helpers/typeof');
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _util = require('./util');
+
+var _validator = require('./validator/');
+
+var _validator2 = _interopRequireDefault(_validator);
+
+var _messages2 = require('./messages');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Encapsulates a validation schema.
+ *
+ *  @param descriptor An object declaring validation rules
+ *  for this schema.
+ */
+function Schema(descriptor) {
+  this.rules = null;
+  this._messages = _messages2.messages;
+  this.define(descriptor);
+}
+
+Schema.prototype = {
+  messages: function messages(_messages) {
+    if (_messages) {
+      this._messages = (0, _util.deepMerge)((0, _messages2.newMessages)(), _messages);
+    }
+    return this._messages;
+  },
+  define: function define(rules) {
+    if (!rules) {
+      throw new Error('Cannot configure a schema with no rules');
+    }
+    if ((typeof rules === 'undefined' ? 'undefined' : (0, _typeof3['default'])(rules)) !== 'object' || Array.isArray(rules)) {
+      throw new Error('Rules must be an object');
+    }
+    this.rules = {};
+    var z = void 0;
+    var item = void 0;
+    for (z in rules) {
+      if (rules.hasOwnProperty(z)) {
+        item = rules[z];
+        this.rules[z] = Array.isArray(item) ? item : [item];
+      }
+    }
+  },
+  validate: function validate(source_) {
+    var _this = this;
+
+    var o = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+    var oc = arguments[2];
+
+    var source = source_;
+    var options = o;
+    var callback = oc;
+    if (typeof options === 'function') {
+      callback = options;
+      options = {};
+    }
+    if (!this.rules || Object.keys(this.rules).length === 0) {
+      if (callback) {
+        callback();
+      }
+      return;
+    }
+    function complete(results) {
+      var i = void 0;
+      var field = void 0;
+      var errors = [];
+      var fields = {};
+
+      function add(e) {
+        if (Array.isArray(e)) {
+          errors = errors.concat.apply(errors, e);
+        } else {
+          errors.push(e);
+        }
+      }
+
+      for (i = 0; i < results.length; i++) {
+        add(results[i]);
+      }
+      if (!errors.length) {
+        errors = null;
+        fields = null;
+      } else {
+        for (i = 0; i < errors.length; i++) {
+          field = errors[i].field;
+          fields[field] = fields[field] || [];
+          fields[field].push(errors[i]);
+        }
+      }
+      callback(errors, fields);
+    }
+
+    if (options.messages) {
+      var messages = this.messages();
+      if (messages === _messages2.messages) {
+        messages = (0, _messages2.newMessages)();
+      }
+      (0, _util.deepMerge)(messages, options.messages);
+      options.messages = messages;
+    } else {
+      options.messages = this.messages();
+    }
+    var arr = void 0;
+    var value = void 0;
+    var series = {};
+    var keys = options.keys || Object.keys(this.rules);
+    keys.forEach(function (z) {
+      arr = _this.rules[z];
+      value = source[z];
+      arr.forEach(function (r) {
+        var rule = r;
+        if (typeof rule.transform === 'function') {
+          if (source === source_) {
+            source = (0, _extends3['default'])({}, source);
+          }
+          value = source[z] = rule.transform(value);
+        }
+        if (typeof rule === 'function') {
+          rule = {
+            validator: rule
+          };
+        } else {
+          rule = (0, _extends3['default'])({}, rule);
+        }
+        rule.validator = _this.getValidationMethod(rule);
+        rule.field = z;
+        rule.fullField = rule.fullField || z;
+        rule.type = _this.getType(rule);
+        if (!rule.validator) {
+          return;
+        }
+        series[z] = series[z] || [];
+        series[z].push({
+          rule: rule,
+          value: value,
+          source: source,
+          field: z
+        });
+      });
+    });
+    var errorFields = {};
+    (0, _util.asyncMap)(series, options, function (data, doIt) {
+      var rule = data.rule;
+      var deep = (rule.type === 'object' || rule.type === 'array') && ((0, _typeof3['default'])(rule.fields) === 'object' || (0, _typeof3['default'])(rule.defaultField) === 'object');
+      deep = deep && (rule.required || !rule.required && data.value);
+      rule.field = data.field;
+      function addFullfield(key, schema) {
+        return (0, _extends3['default'])({}, schema, {
+          fullField: rule.fullField + '.' + key
+        });
+      }
+
+      function cb() {
+        var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+
+        var errors = e;
+        if (!Array.isArray(errors)) {
+          errors = [errors];
+        }
+        if (errors.length) {
+          (0, _util.warning)('async-validator:', errors);
+        }
+        if (errors.length && rule.message) {
+          errors = [].concat(rule.message);
+        }
+
+        errors = errors.map((0, _util.complementError)(rule));
+
+        if (options.first && errors.length) {
+          errorFields[rule.field] = 1;
+          return doIt(errors);
+        }
+        if (!deep) {
+          doIt(errors);
+        } else {
+          // if rule is required but the target object
+          // does not exist fail at the rule level and don't
+          // go deeper
+          if (rule.required && !data.value) {
+            if (rule.message) {
+              errors = [].concat(rule.message).map((0, _util.complementError)(rule));
+            } else if (options.error) {
+              errors = [options.error(rule, (0, _util.format)(options.messages.required, rule.field))];
+            } else {
+              errors = [];
+            }
+            return doIt(errors);
+          }
+
+          var fieldsSchema = {};
+          if (rule.defaultField) {
+            for (var k in data.value) {
+              if (data.value.hasOwnProperty(k)) {
+                fieldsSchema[k] = rule.defaultField;
+              }
+            }
+          }
+          fieldsSchema = (0, _extends3['default'])({}, fieldsSchema, data.rule.fields);
+          for (var f in fieldsSchema) {
+            if (fieldsSchema.hasOwnProperty(f)) {
+              var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];
+              fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));
+            }
+          }
+          var schema = new Schema(fieldsSchema);
+          schema.messages(options.messages);
+          if (data.rule.options) {
+            data.rule.options.messages = options.messages;
+            data.rule.options.error = options.error;
+          }
+          schema.validate(data.value, data.rule.options || options, function (errs) {
+            doIt(errs && errs.length ? errors.concat(errs) : errs);
+          });
+        }
+      }
+
+      var res = rule.validator(rule, data.value, cb, data.source, options);
+      if (res && res.then) {
+        res.then(function () {
+          return cb();
+        }, function (e) {
+          return cb(e);
+        });
+      }
+    }, function (results) {
+      complete(results);
+    });
+  },
+  getType: function getType(rule) {
+    if (rule.type === undefined && rule.pattern instanceof RegExp) {
+      rule.type = 'pattern';
+    }
+    if (typeof rule.validator !== 'function' && rule.type && !_validator2['default'].hasOwnProperty(rule.type)) {
+      throw new Error((0, _util.format)('Unknown rule type %s', rule.type));
+    }
+    return rule.type || 'string';
+  },
+  getValidationMethod: function getValidationMethod(rule) {
+    if (typeof rule.validator === 'function') {
+      return rule.validator;
+    }
+    var keys = Object.keys(rule);
+    var messageIndex = keys.indexOf('message');
+    if (messageIndex !== -1) {
+      keys.splice(messageIndex, 1);
+    }
+    if (keys.length === 1 && keys[0] === 'required') {
+      return _validator2['default'].required;
+    }
+    return _validator2['default'][this.getType(rule)] || false;
+  }
+};
+
+Schema.register = function register(type, validator) {
+  if (typeof validator !== 'function') {
+    throw new Error('Cannot register a validator by type, validator is not a function');
+  }
+  _validator2['default'][type] = validator;
+};
+
+Schema.messages = _messages2.messages;
+
+exports['default'] = Schema;
+module.exports = exports['default'];

+ 62 - 0
node_modules/async-validator/lib/messages.js

@@ -0,0 +1,62 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.newMessages = newMessages;
+function newMessages() {
+  return {
+    'default': 'Validation error on field %s',
+    required: '%s is required',
+    'enum': '%s must be one of %s',
+    whitespace: '%s cannot be empty',
+    date: {
+      format: '%s date %s is invalid for format %s',
+      parse: '%s date could not be parsed, %s is invalid ',
+      invalid: '%s date %s is invalid'
+    },
+    types: {
+      string: '%s is not a %s',
+      method: '%s is not a %s (function)',
+      array: '%s is not an %s',
+      object: '%s is not an %s',
+      number: '%s is not a %s',
+      date: '%s is not a %s',
+      boolean: '%s is not a %s',
+      integer: '%s is not an %s',
+      float: '%s is not a %s',
+      regexp: '%s is not a valid %s',
+      email: '%s is not a valid %s',
+      url: '%s is not a valid %s',
+      hex: '%s is not a valid %s'
+    },
+    string: {
+      len: '%s must be exactly %s characters',
+      min: '%s must be at least %s characters',
+      max: '%s cannot be longer than %s characters',
+      range: '%s must be between %s and %s characters'
+    },
+    number: {
+      len: '%s must equal %s',
+      min: '%s cannot be less than %s',
+      max: '%s cannot be greater than %s',
+      range: '%s must be between %s and %s'
+    },
+    array: {
+      len: '%s must be exactly %s in length',
+      min: '%s cannot be less than %s in length',
+      max: '%s cannot be greater than %s in length',
+      range: '%s must be between %s and %s in length'
+    },
+    pattern: {
+      mismatch: '%s value %s does not match pattern %s'
+    },
+    clone: function clone() {
+      var cloned = JSON.parse(JSON.stringify(this));
+      cloned.clone = this.clone;
+      return cloned;
+    }
+  };
+}
+
+var messages = exports.messages = newMessages();

+ 34 - 0
node_modules/async-validator/lib/rule/enum.js

@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _util = require('../util');
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+var ENUM = 'enum';
+
+/**
+ *  Rule for validating a value exists in an enumerable list.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function enumerable(rule, value, source, errors, options) {
+  rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
+  if (rule[ENUM].indexOf(value) === -1) {
+    errors.push(util.format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));
+  }
+}
+
+exports['default'] = enumerable;
+module.exports = exports['default'];

+ 41 - 0
node_modules/async-validator/lib/rule/index.js

@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _required = require('./required');
+
+var _required2 = _interopRequireDefault(_required);
+
+var _whitespace = require('./whitespace');
+
+var _whitespace2 = _interopRequireDefault(_whitespace);
+
+var _type = require('./type');
+
+var _type2 = _interopRequireDefault(_type);
+
+var _range = require('./range');
+
+var _range2 = _interopRequireDefault(_range);
+
+var _enum = require('./enum');
+
+var _enum2 = _interopRequireDefault(_enum);
+
+var _pattern = require('./pattern');
+
+var _pattern2 = _interopRequireDefault(_pattern);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+exports['default'] = {
+  required: _required2['default'],
+  whitespace: _whitespace2['default'],
+  type: _type2['default'],
+  range: _range2['default'],
+  'enum': _enum2['default'],
+  pattern: _pattern2['default']
+};
+module.exports = exports['default'];

+ 44 - 0
node_modules/async-validator/lib/rule/pattern.js

@@ -0,0 +1,44 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _util = require('../util');
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+/**
+ *  Rule for validating a regular expression pattern.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function pattern(rule, value, source, errors, options) {
+  if (rule.pattern) {
+    if (rule.pattern instanceof RegExp) {
+      // if a RegExp instance is passed, reset `lastIndex` in case its `global`
+      // flag is accidentally set to `true`, which in a validation scenario
+      // is not necessary and the result might be misleading
+      rule.pattern.lastIndex = 0;
+      if (!rule.pattern.test(value)) {
+        errors.push(util.format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+      }
+    } else if (typeof rule.pattern === 'string') {
+      var _pattern = new RegExp(rule.pattern);
+      if (!_pattern.test(value)) {
+        errors.push(util.format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+      }
+    }
+  }
+}
+
+exports['default'] = pattern;
+module.exports = exports['default'];

+ 69 - 0
node_modules/async-validator/lib/rule/range.js

@@ -0,0 +1,69 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _util = require('../util');
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+/**
+ *  Rule for validating minimum and maximum allowed values.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function range(rule, value, source, errors, options) {
+  var len = typeof rule.len === 'number';
+  var min = typeof rule.min === 'number';
+  var max = typeof rule.max === 'number';
+  // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
+  var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+  var val = value;
+  var key = null;
+  var num = typeof value === 'number';
+  var str = typeof value === 'string';
+  var arr = Array.isArray(value);
+  if (num) {
+    key = 'number';
+  } else if (str) {
+    key = 'string';
+  } else if (arr) {
+    key = 'array';
+  }
+  // if the value is not of a supported type for range validation
+  // the validation rule rule should use the
+  // type property to also test for a particular type
+  if (!key) {
+    return false;
+  }
+  if (arr) {
+    val = value.length;
+  }
+  if (str) {
+    // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
+    val = value.replace(spRegexp, '_').length;
+  }
+  if (len) {
+    if (val !== rule.len) {
+      errors.push(util.format(options.messages[key].len, rule.fullField, rule.len));
+    }
+  } else if (min && !max && val < rule.min) {
+    errors.push(util.format(options.messages[key].min, rule.fullField, rule.min));
+  } else if (max && !min && val > rule.max) {
+    errors.push(util.format(options.messages[key].max, rule.fullField, rule.max));
+  } else if (min && max && (val < rule.min || val > rule.max)) {
+    errors.push(util.format(options.messages[key].range, rule.fullField, rule.min, rule.max));
+  }
+}
+
+exports['default'] = range;
+module.exports = exports['default'];

+ 31 - 0
node_modules/async-validator/lib/rule/required.js

@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _util = require('../util');
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+/**
+ *  Rule for validating required fields.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function required(rule, value, source, errors, options, type) {
+  if (rule.required && (!source.hasOwnProperty(rule.field) || util.isEmptyValue(value, type || rule.type))) {
+    errors.push(util.format(options.messages.required, rule.fullField));
+  }
+}
+
+exports['default'] = required;
+module.exports = exports['default'];

+ 107 - 0
node_modules/async-validator/lib/rule/type.js

@@ -0,0 +1,107 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof2 = require('babel-runtime/helpers/typeof');
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _util = require('../util');
+
+var util = _interopRequireWildcard(_util);
+
+var _required = require('./required');
+
+var _required2 = _interopRequireDefault(_required);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/* eslint max-len:0 */
+
+var pattern = {
+  // http://emailregex.com/
+  email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+  url: new RegExp('^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', 'i'),
+  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
+};
+
+var types = {
+  integer: function integer(value) {
+    return types.number(value) && parseInt(value, 10) === value;
+  },
+  float: function float(value) {
+    return types.number(value) && !types.integer(value);
+  },
+  array: function array(value) {
+    return Array.isArray(value);
+  },
+  regexp: function regexp(value) {
+    if (value instanceof RegExp) {
+      return true;
+    }
+    try {
+      return !!new RegExp(value);
+    } catch (e) {
+      return false;
+    }
+  },
+  date: function date(value) {
+    return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function';
+  },
+  number: function number(value) {
+    if (isNaN(value)) {
+      return false;
+    }
+    return typeof value === 'number';
+  },
+  object: function object(value) {
+    return (typeof value === 'undefined' ? 'undefined' : (0, _typeof3['default'])(value)) === 'object' && !types.array(value);
+  },
+  method: function method(value) {
+    return typeof value === 'function';
+  },
+  email: function email(value) {
+    return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
+  },
+  url: function url(value) {
+    return typeof value === 'string' && !!value.match(pattern.url);
+  },
+  hex: function hex(value) {
+    return typeof value === 'string' && !!value.match(pattern.hex);
+  }
+};
+
+/**
+ *  Rule for validating the type of a value.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function type(rule, value, source, errors, options) {
+  if (rule.required && value === undefined) {
+    (0, _required2['default'])(rule, value, source, errors, options);
+    return;
+  }
+  var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
+  var ruleType = rule.type;
+  if (custom.indexOf(ruleType) > -1) {
+    if (!types[ruleType](value)) {
+      errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));
+    }
+    // straight typeof check
+  } else if (ruleType && (typeof value === 'undefined' ? 'undefined' : (0, _typeof3['default'])(value)) !== rule.type) {
+    errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));
+  }
+}
+
+exports['default'] = type;
+module.exports = exports['default'];

+ 31 - 0
node_modules/async-validator/lib/rule/whitespace.js

@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _util = require('../util');
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+/**
+ *  Rule for validating whitespace.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param source The source object being validated.
+ *  @param errors An array of errors that this rule may add
+ *  validation errors to.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function whitespace(rule, value, source, errors, options) {
+  if (/^\s+$/.test(value) || value === '') {
+    errors.push(util.format(options.messages.whitespace, rule.fullField));
+  }
+}
+
+exports['default'] = whitespace;
+module.exports = exports['default'];

+ 210 - 0
node_modules/async-validator/lib/util.js

@@ -0,0 +1,210 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.warning = undefined;
+
+var _extends2 = require('babel-runtime/helpers/extends');
+
+var _extends3 = _interopRequireDefault(_extends2);
+
+var _typeof2 = require('babel-runtime/helpers/typeof');
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+exports.format = format;
+exports.isEmptyValue = isEmptyValue;
+exports.isEmptyObject = isEmptyObject;
+exports.asyncMap = asyncMap;
+exports.complementError = complementError;
+exports.deepMerge = deepMerge;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var formatRegExp = /%[sdj%]/g;
+
+var warning = exports.warning = function warning() {};
+
+// don't print warning message when in production env or node runtime
+if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {
+  exports.warning = warning = function warning(type, errors) {
+    if (typeof console !== 'undefined' && console.warn) {
+      if (errors.every(function (e) {
+        return typeof e === 'string';
+      })) {
+        console.warn(type, errors);
+      }
+    }
+  };
+}
+
+function format() {
+  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  var i = 1;
+  var f = args[0];
+  var len = args.length;
+  if (typeof f === 'function') {
+    return f.apply(null, args.slice(1));
+  }
+  if (typeof f === 'string') {
+    var str = String(f).replace(formatRegExp, function (x) {
+      if (x === '%%') {
+        return '%';
+      }
+      if (i >= len) {
+        return x;
+      }
+      switch (x) {
+        case '%s':
+          return String(args[i++]);
+        case '%d':
+          return Number(args[i++]);
+        case '%j':
+          try {
+            return JSON.stringify(args[i++]);
+          } catch (_) {
+            return '[Circular]';
+          }
+          break;
+        default:
+          return x;
+      }
+    });
+    for (var arg = args[i]; i < len; arg = args[++i]) {
+      str += ' ' + arg;
+    }
+    return str;
+  }
+  return f;
+}
+
+function isNativeStringType(type) {
+  return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';
+}
+
+function isEmptyValue(value, type) {
+  if (value === undefined || value === null) {
+    return true;
+  }
+  if (type === 'array' && Array.isArray(value) && !value.length) {
+    return true;
+  }
+  if (isNativeStringType(type) && typeof value === 'string' && !value) {
+    return true;
+  }
+  return false;
+}
+
+function isEmptyObject(obj) {
+  return Object.keys(obj).length === 0;
+}
+
+function asyncParallelArray(arr, func, callback) {
+  var results = [];
+  var total = 0;
+  var arrLength = arr.length;
+
+  function count(errors) {
+    results.push.apply(results, errors);
+    total++;
+    if (total === arrLength) {
+      callback(results);
+    }
+  }
+
+  arr.forEach(function (a) {
+    func(a, count);
+  });
+}
+
+function asyncSerialArray(arr, func, callback) {
+  var index = 0;
+  var arrLength = arr.length;
+
+  function next(errors) {
+    if (errors && errors.length) {
+      callback(errors);
+      return;
+    }
+    var original = index;
+    index = index + 1;
+    if (original < arrLength) {
+      func(arr[original], next);
+    } else {
+      callback([]);
+    }
+  }
+
+  next([]);
+}
+
+function flattenObjArr(objArr) {
+  var ret = [];
+  Object.keys(objArr).forEach(function (k) {
+    ret.push.apply(ret, objArr[k]);
+  });
+  return ret;
+}
+
+function asyncMap(objArr, option, func, callback) {
+  if (option.first) {
+    var flattenArr = flattenObjArr(objArr);
+    return asyncSerialArray(flattenArr, func, callback);
+  }
+  var firstFields = option.firstFields || [];
+  if (firstFields === true) {
+    firstFields = Object.keys(objArr);
+  }
+  var objArrKeys = Object.keys(objArr);
+  var objArrLength = objArrKeys.length;
+  var total = 0;
+  var results = [];
+  var next = function next(errors) {
+    results.push.apply(results, errors);
+    total++;
+    if (total === objArrLength) {
+      callback(results);
+    }
+  };
+  objArrKeys.forEach(function (key) {
+    var arr = objArr[key];
+    if (firstFields.indexOf(key) !== -1) {
+      asyncSerialArray(arr, func, next);
+    } else {
+      asyncParallelArray(arr, func, next);
+    }
+  });
+}
+
+function complementError(rule) {
+  return function (oe) {
+    if (oe && oe.message) {
+      oe.field = oe.field || rule.fullField;
+      return oe;
+    }
+    return {
+      message: oe,
+      field: oe.field || rule.fullField
+    };
+  };
+}
+
+function deepMerge(target, source) {
+  if (source) {
+    for (var s in source) {
+      if (source.hasOwnProperty(s)) {
+        var value = source[s];
+        if ((typeof value === 'undefined' ? 'undefined' : (0, _typeof3['default'])(value)) === 'object' && (0, _typeof3['default'])(target[s]) === 'object') {
+          target[s] = (0, _extends3['default'])({}, target[s], value);
+        } else {
+          target[s] = value;
+        }
+      }
+    }
+  }
+  return target;
+}

+ 42 - 0
node_modules/async-validator/lib/validator/array.js

@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates an array.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function array(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value, 'array') && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options, 'array');
+    if (!(0, _util.isEmptyValue)(value, 'array')) {
+      _rule2['default'].type(rule, value, source, errors, options);
+      _rule2['default'].range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = array;
+module.exports = exports['default'];

+ 41 - 0
node_modules/async-validator/lib/validator/boolean.js

@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _util = require('../util');
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates a boolean.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function boolean(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      _rule2['default'].type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = boolean;
+module.exports = exports['default'];

+ 44 - 0
node_modules/async-validator/lib/validator/date.js

@@ -0,0 +1,44 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function date(rule, value, callback, source, options) {
+  // console.log('integer rule called %j', rule);
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  // console.log('validate on %s value', value);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (!(0, _util.isEmptyValue)(value)) {
+      var dateObject = void 0;
+
+      if (typeof value === 'number') {
+        dateObject = new Date(value);
+      } else {
+        dateObject = value;
+      }
+
+      _rule2['default'].type(rule, dateObject, source, errors, options);
+      if (dateObject) {
+        _rule2['default'].range(rule, dateObject.getTime(), source, errors, options);
+      }
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = date;
+module.exports = exports['default'];

+ 43 - 0
node_modules/async-validator/lib/validator/enum.js

@@ -0,0 +1,43 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var ENUM = 'enum';
+
+/**
+ *  Validates an enumerable list.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function enumerable(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (value) {
+      _rule2['default'][ENUM](rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = enumerable;
+module.exports = exports['default'];

+ 42 - 0
node_modules/async-validator/lib/validator/float.js

@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates a number is a floating point number.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function floatFn(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      _rule2['default'].type(rule, value, source, errors, options);
+      _rule2['default'].range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = floatFn;
+module.exports = exports['default'];

+ 83 - 0
node_modules/async-validator/lib/validator/index.js

@@ -0,0 +1,83 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _string = require('./string');
+
+var _string2 = _interopRequireDefault(_string);
+
+var _method = require('./method');
+
+var _method2 = _interopRequireDefault(_method);
+
+var _number = require('./number');
+
+var _number2 = _interopRequireDefault(_number);
+
+var _boolean = require('./boolean');
+
+var _boolean2 = _interopRequireDefault(_boolean);
+
+var _regexp = require('./regexp');
+
+var _regexp2 = _interopRequireDefault(_regexp);
+
+var _integer = require('./integer');
+
+var _integer2 = _interopRequireDefault(_integer);
+
+var _float = require('./float');
+
+var _float2 = _interopRequireDefault(_float);
+
+var _array = require('./array');
+
+var _array2 = _interopRequireDefault(_array);
+
+var _object = require('./object');
+
+var _object2 = _interopRequireDefault(_object);
+
+var _enum = require('./enum');
+
+var _enum2 = _interopRequireDefault(_enum);
+
+var _pattern = require('./pattern');
+
+var _pattern2 = _interopRequireDefault(_pattern);
+
+var _date = require('./date');
+
+var _date2 = _interopRequireDefault(_date);
+
+var _required = require('./required');
+
+var _required2 = _interopRequireDefault(_required);
+
+var _type = require('./type');
+
+var _type2 = _interopRequireDefault(_type);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+exports['default'] = {
+  string: _string2['default'],
+  method: _method2['default'],
+  number: _number2['default'],
+  boolean: _boolean2['default'],
+  regexp: _regexp2['default'],
+  integer: _integer2['default'],
+  float: _float2['default'],
+  array: _array2['default'],
+  object: _object2['default'],
+  'enum': _enum2['default'],
+  pattern: _pattern2['default'],
+  date: _date2['default'],
+  url: _type2['default'],
+  hex: _type2['default'],
+  email: _type2['default'],
+  required: _required2['default']
+};
+module.exports = exports['default'];

+ 42 - 0
node_modules/async-validator/lib/validator/integer.js

@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates a number is an integer.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function integer(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      _rule2['default'].type(rule, value, source, errors, options);
+      _rule2['default'].range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = integer;
+module.exports = exports['default'];

+ 41 - 0
node_modules/async-validator/lib/validator/method.js

@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates a function.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function method(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      _rule2['default'].type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = method;
+module.exports = exports['default'];

+ 42 - 0
node_modules/async-validator/lib/validator/number.js

@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates a number.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function number(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      _rule2['default'].type(rule, value, source, errors, options);
+      _rule2['default'].range(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = number;
+module.exports = exports['default'];

+ 41 - 0
node_modules/async-validator/lib/validator/object.js

@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates an object.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function object(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (value !== undefined) {
+      _rule2['default'].type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = object;
+module.exports = exports['default'];

+ 44 - 0
node_modules/async-validator/lib/validator/pattern.js

@@ -0,0 +1,44 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates a regular expression pattern.
+ *
+ *  Performs validation when a rule only contains
+ *  a pattern property but is not declared as a string type.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function pattern(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value, 'string') && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (!(0, _util.isEmptyValue)(value, 'string')) {
+      _rule2['default'].pattern(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = pattern;
+module.exports = exports['default'];

+ 41 - 0
node_modules/async-validator/lib/validator/regexp.js

@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Validates the regular expression type.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function regexp(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options);
+    if (!(0, _util.isEmptyValue)(value)) {
+      _rule2['default'].type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = regexp;
+module.exports = exports['default'];

+ 25 - 0
node_modules/async-validator/lib/validator/required.js

@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof2 = require('babel-runtime/helpers/typeof');
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function required(rule, value, callback, source, options) {
+  var errors = [];
+  var type = Array.isArray(value) ? 'array' : typeof value === 'undefined' ? 'undefined' : (0, _typeof3['default'])(value);
+  _rule2['default'].required(rule, value, source, errors, options, type);
+  callback(errors);
+}
+
+exports['default'] = required;
+module.exports = exports['default'];

+ 46 - 0
node_modules/async-validator/lib/validator/string.js

@@ -0,0 +1,46 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ *  Performs validation for string types.
+ *
+ *  @param rule The validation rule.
+ *  @param value The value of the field on the source object.
+ *  @param callback The callback function.
+ *  @param source The source object being validated.
+ *  @param options The validation options.
+ *  @param options.messages The validation messages.
+ */
+function string(rule, value, callback, source, options) {
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value, 'string') && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options, 'string');
+    if (!(0, _util.isEmptyValue)(value, 'string')) {
+      _rule2['default'].type(rule, value, source, errors, options);
+      _rule2['default'].range(rule, value, source, errors, options);
+      _rule2['default'].pattern(rule, value, source, errors, options);
+      if (rule.whitespace === true) {
+        _rule2['default'].whitespace(rule, value, source, errors, options);
+      }
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = string;
+module.exports = exports['default'];

+ 32 - 0
node_modules/async-validator/lib/validator/type.js

@@ -0,0 +1,32 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _rule = require('../rule/');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _util = require('../util');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function type(rule, value, callback, source, options) {
+  var ruleType = rule.type;
+  var errors = [];
+  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+  if (validate) {
+    if ((0, _util.isEmptyValue)(value, ruleType) && !rule.required) {
+      return callback();
+    }
+    _rule2['default'].required(rule, value, source, errors, options, ruleType);
+    if (!(0, _util.isEmptyValue)(value, ruleType)) {
+      _rule2['default'].type(rule, value, source, errors, options);
+    }
+  }
+  callback(errors);
+}
+
+exports['default'] = type;
+module.exports = exports['default'];

+ 58 - 0
node_modules/async-validator/package.json

@@ -0,0 +1,58 @@
+{
+  "name": "async-validator",
+  "version": "1.8.5",
+  "description": "validate form asynchronous",
+  "keywords": [
+    "validator",
+    "validate",
+    "async"
+  ],
+  "homepage": "http://github.com/yiminghe/async-validator",
+  "author": "yiminghe@gmail.com",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:yiminghe/async-validator.git"
+  },
+  "files": [
+    "lib",
+    "es"
+  ],
+  "main": "./lib/index",
+  "module": "./es/index",
+  "jest": {
+    "collectCoverageFrom": [
+      "src/*"
+    ],
+    "transform": {
+      "\\.jsx?$": "./node_modules/rc-tools/scripts/jestPreprocessor.js"
+    }
+  },
+  "bugs": {
+    "url": "http://github.com/yiminghe/async-validator/issues"
+  },
+  "licenses": "MIT",
+  "config": {
+    "port": 8010
+  },
+  "scripts": {
+    "build": "rc-tools run build",
+    "gh-pages": "rc-tools run gh-pages",
+    "start": "rc-tools run server",
+    "pub": "rc-tools run pub --babel-runtime",
+    "lint": "rc-tools run lint",
+    "test": "jest",
+    "coverage": "jest --coverage && cat ./coverage/lcov.info | coveralls"
+  },
+  "devDependencies": {
+    "coveralls": "^2.13.1",
+    "jest": "20.x",
+    "pre-commit": "1.x",
+    "rc-tools": "6.x"
+  },
+  "pre-commit": [
+    "lint"
+  ],
+  "dependencies": {
+    "babel-runtime": "6.x"
+  }
+}

+ 685 - 0
node_modules/axios/CHANGELOG.md

@@ -0,0 +1,685 @@
+# Changelog
+
+### 0.21.1 (December 21, 2020)
+
+Fixes and Functionality:
+
+- Hotfix: Prevent SSRF (#3410)
+- Protocol not parsed when setting proxy config from env vars (#3070)
+- Updating axios in types to be lower case (#2797)
+- Adding a type guard for `AxiosError` (#2949)
+
+Internal and Tests:
+
+- Remove the skipping of the `socket` http test (#3364)
+- Use different socket for Win32 test (#3375)
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- Daniel Lopretto <timemachine3030@users.noreply.github.com>
+- Jason Kwok <JasonHK@users.noreply.github.com>
+- Jay <jasonsaayman@gmail.com>
+- Jonathan Foster <jonathan@jonathanfoster.io>
+- Remco Haszing <remcohaszing@gmail.com>
+- Xianming Zhong <chinesedfan@qq.com>
+
+### 0.21.0 (October 23, 2020)
+
+Fixes and Functionality:
+
+- Fixing requestHeaders.Authorization ([#3287](https://github.com/axios/axios/pull/3287))
+- Fixing node types ([#3237](https://github.com/axios/axios/pull/3237))
+- Fixing axios.delete ignores config.data ([#3282](https://github.com/axios/axios/pull/3282))
+- Revert "Fixing overwrite Blob/File type as Content-Type in browser. (#1773)" ([#3289](https://github.com/axios/axios/pull/3289))
+- Fixing an issue that type 'null' and 'undefined' is not assignable to validateStatus when typescript strict option is enabled ([#3200](https://github.com/axios/axios/pull/3200))
+
+Internal and Tests:
+
+- Lock travis to not use node v15 ([#3361](https://github.com/axios/axios/pull/3361))
+
+Documentation:
+
+- Fixing simple typo, existant -> existent ([#3252](https://github.com/axios/axios/pull/3252))
+- Fixing typos ([#3309](https://github.com/axios/axios/pull/3309))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- Allan Cruz <57270969+Allanbcruz@users.noreply.github.com>
+- George Cheng <Gerhut@GMail.com>
+- Jay <jasonsaayman@gmail.com>
+- Kevin Kirsche <Kev.Kirsche+GitHub@gmail.com>
+- Remco Haszing <remcohaszing@gmail.com>
+- Taemin Shin <cprayer13@gmail.com>
+- Tim Gates <tim.gates@iress.com>
+- Xianming Zhong <chinesedfan@qq.com>
+
+### 0.20.0 (August 20, 2020)
+
+Release of 0.20.0-pre as a full release with no other changes.
+
+### 0.20.0-pre (July 15, 2020)
+
+Fixes and Functionality:
+
+- Fixing response with utf-8 BOM can not parse to json ([#2419](https://github.com/axios/axios/pull/2419))
+  - fix: remove byte order marker (UTF-8 BOM) when transform response
+  - fix: remove BOM only utf-8
+  - test: utf-8 BOM
+  - fix: incorrect param name
+- Refactor mergeConfig without utils.deepMerge ([#2844](https://github.com/axios/axios/pull/2844))
+  - Adding failing test
+  - Fixing #2587 default custom config persisting
+  - Adding Concat keys and filter duplicates
+  - Fixed value from CPE
+  - update for review feedbacks
+  - no deepMerge
+  - only merge between plain objects
+  - fix rename
+  - always merge config by mergeConfig
+  - extract function mergeDeepProperties
+  - refactor mergeConfig with all keys, and add special logic for validateStatus
+  - add test for resetting headers
+  - add lots of tests and fix a bug
+  - should not inherit `data`
+  - use simple toString
+- Fixing overwrite Blob/File type as Content-Type in browser. ([#1773](https://github.com/axios/axios/pull/1773))
+- Fixing an issue that type 'null' is not assignable to validateStatus ([#2773](https://github.com/axios/axios/pull/2773))
+- Fixing special char encoding ([#1671](https://github.com/axios/axios/pull/1671))
+  - removing @ character from replacement list since it is a reserved character
+  - Updating buildURL test to not include the @ character
+  - Removing console logs
+- Fixing password encoding with special characters in basic authentication ([#1492](https://github.com/axios/axios/pull/1492))
+  - Fixing password encoding with special characters in basic authentication
+  - Adding test to check if password with non-Latin1 characters pass
+- Fixing 'Network Error' in react native android ([#1487](https://github.com/axios/axios/pull/1487))
+  There is a bug in react native Android platform when using get method. It will trigger a 'Network Error' when passing the requestData which is an empty string to request.send function. So if the requestData is an empty string we can set it to null as well to fix the bug.
+- Fixing Cookie Helper with Asyc Components ([#1105](https://github.com/axios/axios/pull/1105)) ([#1107](https://github.com/axios/axios/pull/1107))
+- Fixing 'progressEvent' type ([#2851](https://github.com/axios/axios/pull/2851))
+  - Fix 'progressEvent' type
+  - Update axios.ts
+- Fixing getting local files (file://) failed ([#2470](https://github.com/axios/axios/pull/2470))
+  - fix issue #2416, #2396
+  - fix Eslint warn
+  - Modify judgment conditions
+  - add unit test
+  - update unit test
+  - update unit test
+- Allow PURGE method in typings ([#2191](https://github.com/axios/axios/pull/2191))
+- Adding option to disable automatic decompression ([#2661](https://github.com/axios/axios/pull/2661))
+  - Adding ability to disable auto decompression
+  - Updating decompress documentation in README
+  - Fixing test\unit\adapters\http.js lint errors
+  - Adding test for disabling auto decompression
+  - Removing changes that fixed lint errors in tests
+  - Removing formatting change to unit test
+- Add independent `maxBodyLength` option ([#2781](https://github.com/axios/axios/pull/2781))
+  - Add independent option to set the maximum size of the request body
+  - Remove maxBodyLength check
+  - Update README
+  - Assert for error code and message
+- Adding responseEncoding to mergeConfig ([#1745](https://github.com/axios/axios/pull/1745))
+- Compatible with follow-redirect aborts the request ([#2689](https://github.com/axios/axios/pull/2689))
+  - Compatible with follow-redirect aborts the request
+  - Use the error code
+- Fix merging of params ([#2656](https://github.com/axios/axios/pull/2656))
+  - Name function to avoid ESLint func-names warning
+  - Switch params config to merge list and update tests
+  - Restore testing of both false and null
+  - Restore test cases for keys without defaults
+  - Include test for non-object values that aren't false-y.
+- Revert `finally` as `then` ([#2683](https://github.com/axios/axios/pull/2683))
+
+Internal and Tests:
+
+- Fix stale bot config ([#3049](https://github.com/axios/axios/pull/3049))
+  - fix stale bot config
+  - fix multiple lines
+- Add days and change name to work ([#3035](https://github.com/axios/axios/pull/3035))
+- Update close-issues.yml ([#3031](https://github.com/axios/axios/pull/3031))
+  - Update close-issues.yml
+    Update close message to read better 😄
+  - Fix use of quotations
+    Use single quotes as per other .yml files
+  - Remove user name form message
+- Add GitHub actions to close stale issues/prs ([#3029](https://github.com/axios/axios/pull/3029))
+  - prepare stale actions
+  - update messages
+  - Add exempt labels and lighten up comments
+- Add GitHub actions to close invalid issues ([#3022](https://github.com/axios/axios/pull/3022))
+  - add close actions
+  - fix with checkout
+  - update issue templates
+  - add reminder
+  - update close message
+- Add test with Node.js 12 ([#2860](https://github.com/axios/axios/pull/2860))
+  - test with Node.js 12
+  - test with latest
+- Adding console log on sandbox server startup ([#2210](https://github.com/axios/axios/pull/2210))
+  - Adding console log on sandbox server startup
+  - Update server.js
+    Add server error handling
+  - Update server.js
+    Better error message, remove retry.
+- Adding tests for method `options` type definitions ([#1996](https://github.com/axios/axios/pull/1996))
+  Update tests.
+- Add test for redirecting with too large response ([#2695](https://github.com/axios/axios/pull/2695))
+- Fixing unit test failure in Windows OS ([#2601](https://github.com/axios/axios/pull/2601))
+- Fixing issue for HEAD method and gzipped response ([#2666](https://github.com/axios/axios/pull/2666))
+- Fix tests in browsers ([#2748](https://github.com/axios/axios/pull/2748))
+- chore: add `jsdelivr` and `unpkg` support ([#2443](https://github.com/axios/axios/pull/2443))
+
+Documentation:
+
+- Adding support for URLSearchParams in node ([#1900](https://github.com/axios/axios/pull/1900))
+  - Adding support for URLSearchParams in node
+  - Remove un-needed code
+  - Update utils.js
+  - Make changes as suggested
+- Adding table of content (preview) ([#3050](https://github.com/axios/axios/pull/3050))
+  - add toc (preview)
+  - remove toc in toc
+    Signed-off-by: Moni <usmoni@gmail.com>
+  - fix sublinks
+  - fix indentation
+  - remove redundant table links
+  - update caps and indent
+  - remove axios
+- Replace 'blacklist' with 'blocklist' ([#3006](https://github.com/axios/axios/pull/3006))
+- docs(): Detailed config options environment. ([#2088](https://github.com/axios/axios/pull/2088))
+  - docs(): Detailed config options environment.
+  - Update README.md
+- Include axios-data-unpacker in ECOSYSTEM.md ([#2080](https://github.com/axios/axios/pull/2080))
+- Allow opening examples in Gitpod ([#1958](https://github.com/axios/axios/pull/1958))
+- Remove axios.all() and axios.spread() from Readme.md ([#2727](https://github.com/axios/axios/pull/2727))
+  - remove axios.all(), axios.spread()
+  - replace example
+  - axios.all() -> Promise.all()
+  - axios.spread(function (acct, perms)) -> function (acct, perms)
+  - add deprecated mark
+- Update README.md ([#2887](https://github.com/axios/axios/pull/2887))
+  Small change to the data attribute doc of the config. A request body can also be set for DELETE methods but this wasn't mentioned in the documentation (it only mentioned POST, PUT and PATCH). Took my some 10-20 minutes until I realized that I don't need to manipulate the request body with transformRequest in the case of DELETE.
+- Include swagger-taxos-codegen in ECOSYSTEM.md ([#2162](https://github.com/axios/axios/pull/2162))
+- Add CDNJS version badge in README.md ([#878](https://github.com/axios/axios/pull/878))
+  This badge will show the version on CDNJS!
+- Documentation update to clear up ambiguity in code examples ([#2928](https://github.com/axios/axios/pull/2928))
+  - Made an adjustment to the documentation to clear up any ambiguity around the use of "fs". This should help clear up that the code examples with "fs" cannot be used on the client side.
+- Update README.md about validateStatus ([#2912](https://github.com/axios/axios/pull/2912))
+  Rewrote the comment from "Reject only if the status code is greater than or equal to 500" to "Resolve only if the status code is less than 500"
+- Updating documentation for usage form-data ([#2805](https://github.com/axios/axios/pull/2805))
+  Closes #2049
+- Fixing CHANGELOG.md issue link ([#2784](https://github.com/axios/axios/pull/2784))
+- Include axios-hooks in ECOSYSTEM.md ([#2003](https://github.com/axios/axios/pull/2003))
+- Added Response header access instructions ([#1901](https://github.com/axios/axios/pull/1901))
+  - Added Response header access instructions
+  - Added note about using bracket notation
+- Add `onUploadProgress` and `onDownloadProgress` are browser only ([#2763](https://github.com/axios/axios/pull/2763))
+  Saw in #928 and #1966 that `onUploadProgress` and `onDownloadProgress` only work in the browser and was missing that from the README.
+- Update ' sign to ` in proxy spec ([#2778](https://github.com/axios/axios/pull/2778))
+- Adding jsDelivr link in README ([#1110](https://github.com/axios/axios/pull/1110))
+  - Adding jsDelivr link
+  - Add SRI
+  - Remove SRI
+
+Huge thanks to everyone who contributed to this release via code (authors listed
+below) or via reviews and triaging on GitHub:
+
+- Alan Wang <wp_scut@163.com>
+- Alexandru Ungureanu <khakcarot@gmail.com>
+- Anubhav Srivastava <anubhav.srivastava00@gmail.com>
+- Benny Neugebauer <bn@bennyn.de>
+- Cr <631807682@qq.com>
+- David <cygnidavid@gmail.com>
+- David Ko <david.ko@pvtmethod.com>
+- David Tanner <david.tanner@lifeomic.com>
+- Emily Morehouse <emilyemorehouse@gmail.com>
+- Felipe Martins <felipewmartins@gmail.com>
+- Fonger <5862369+Fonger@users.noreply.github.com>
+- Frostack <soulburn007@gmail.com>
+- George Cheng <Gerhut@GMail.com>
+- grumblerchester <grumblerchester@users.noreply.github.com>
+- Gustavo López <gualopezb@gmail.com>
+- hexaez <45806662+hexaez@users.noreply.github.com>
+- huangzuizui <huangzuizui@gmail.com>
+- Ian Wijma <ian@wij.ma>
+- Jay <jasonsaayman@gmail.com>
+- jeffjing <zgayjjf@qq.com>
+- jennynju <46782518+jennynju@users.noreply.github.com>
+- Jimmy Liao <52391190+jimmy-liao-gogoro@users.noreply.github.com>
+- Jonathan Sharpe <j.r.sharpe@gmail.com>
+- JounQin <admin@1stg.me>
+- Justin Beckwith <justin.beckwith@gmail.com>
+- Kamil Posiadała <3dcreator.pl@gmail.com>
+- Lukas Drgon <lukas.drgon@gmail.com>
+- marcinx <mail@marcinx.com>
+- Martti Laine <martti@codeclown.net>
+- Michał Zarach <michal.m.zarach@gmail.com>
+- Moni <usmoni@gmail.com>
+- Motonori Iwata <121048+iwata@users.noreply.github.com>
+- Nikita Galkin <nikita@galk.in>
+- Petr Mares <petr@mares.tw>
+- Philippe Recto <precto1285@gmal.com>
+- Remco Haszing <remcohaszing@gmail.com>
+- rockcs1992 <chengshi1219@gmail.com>
+- Ryan Bown <rbown@niftee.com.au>
+- Samina Fu <sufuf3@gmail.com>
+- Simone Busoli <simone.busoli@gmail.com>
+- Spencer von der Ohe <s.vonderohe40@gmail.com>
+- Sven Efftinge <sven.efftinge@typefox.io>
+- Taegyeoung Oh <otk1090@naver.com>
+- Taemin Shin <cprayer13@gmail.com>
+- Thibault Ehrhart <1208424+ehrhart@users.noreply.github.com>
+- Xianming Zhong <chinesedfan@qq.com>
+- Yasu Flores <carlosyasu91@gmail.com>
+- Zac Delventhal <delventhalz@gmail.com>
+
+### 0.19.2 (Jan 20, 2020)
+
+- Remove unnecessary XSS check ([#2679](https://github.com/axios/axios/pull/2679)) (see ([#2646](https://github.com/axios/axios/issues/2646)) for discussion)
+
+### 0.19.1 (Jan 7, 2020)
+
+Fixes and Functionality:
+
+- Fixing invalid agent issue ([#1904](https://github.com/axios/axios/pull/1904))
+- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582))
+- Delete useless default to hash ([#2458](https://github.com/axios/axios/pull/2458))
+- Fix HTTP/HTTPs agents passing to follow-redirect ([#1904](https://github.com/axios/axios/pull/1904))
+- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582))
+- Fix CI build failure ([#2570](https://github.com/axios/axios/pull/2570))
+- Remove dependency on is-buffer from package.json ([#1816](https://github.com/axios/axios/pull/1816))
+- Adding options typings ([#2341](https://github.com/axios/axios/pull/2341))
+- Adding Typescript HTTP method definition for LINK and UNLINK. ([#2444](https://github.com/axios/axios/pull/2444))
+- Update dist with newest changes, fixes Custom Attributes issue
+- Change syntax to see if build passes ([#2488](https://github.com/axios/axios/pull/2488))
+- Update Webpack + deps, remove now unnecessary polyfills ([#2410](https://github.com/axios/axios/pull/2410))
+- Fix to prevent XSS, throw an error when the URL contains a JS script ([#2464](https://github.com/axios/axios/pull/2464))
+- Add custom timeout error copy in config ([#2275](https://github.com/axios/axios/pull/2275))
+- Add error toJSON example ([#2466](https://github.com/axios/axios/pull/2466))
+- Fixing Vulnerability A Fortify Scan finds a critical Cross-Site Scrip… ([#2451](https://github.com/axios/axios/pull/2451))
+- Fixing subdomain handling on no_proxy ([#2442](https://github.com/axios/axios/pull/2442))
+- Make redirection from HTTP to HTTPS work ([#2426](https://github.com/axios/axios/pull/2426)) and ([#2547](https://github.com/axios/axios/pull/2547))
+- Add toJSON property to AxiosError type ([#2427](https://github.com/axios/axios/pull/2427))
+- Fixing socket hang up error on node side for slow response. ([#1752](https://github.com/axios/axios/pull/1752))
+- Alternative syntax to send data into the body ([#2317](https://github.com/axios/axios/pull/2317))
+- Fixing custom config options ([#2207](https://github.com/axios/axios/pull/2207))
+- Fixing set `config.method` after mergeConfig for Axios.prototype.request ([#2383](https://github.com/axios/axios/pull/2383))
+- Axios create url bug ([#2290](https://github.com/axios/axios/pull/2290))
+- Do not modify config.url when using a relative baseURL (resolves [#1628](https://github.com/axios/axios/issues/1098)) ([#2391](https://github.com/axios/axios/pull/2391))
+- Add typescript HTTP method definition for LINK and UNLINK ([#2444](https://github.com/axios/axios/pull/2444))
+
+Internal:
+
+- Revert "Update Webpack + deps, remove now unnecessary polyfills" ([#2479](https://github.com/axios/axios/pull/2479))
+- Order of if/else blocks is causing unit tests mocking XHR. ([#2201](https://github.com/axios/axios/pull/2201))
+- Add license badge ([#2446](https://github.com/axios/axios/pull/2446))
+- Fix travis CI build [#2386](https://github.com/axios/axios/pull/2386)
+- Fix cancellation error on build master. #2290 #2207 ([#2407](https://github.com/axios/axios/pull/2407))
+
+Documentation:
+
+- Fixing typo in CHANGELOG.md: s/Functionallity/Functionality ([#2639](https://github.com/axios/axios/pull/2639))
+- Fix badge, use master branch ([#2538](https://github.com/axios/axios/pull/2538))
+- Fix typo in changelog [#2193](https://github.com/axios/axios/pull/2193)
+- Document fix ([#2514](https://github.com/axios/axios/pull/2514))
+- Update docs with no_proxy change, issue #2484 ([#2513](https://github.com/axios/axios/pull/2513))
+- Fixing missing words in docs template ([#2259](https://github.com/axios/axios/pull/2259))
+- 🐛Fix request finally documentation in README ([#2189](https://github.com/axios/axios/pull/2189))
+- updating spelling and adding link to docs ([#2212](https://github.com/axios/axios/pull/2212))
+- docs: minor tweak ([#2404](https://github.com/axios/axios/pull/2404))
+- Update response interceptor docs ([#2399](https://github.com/axios/axios/pull/2399))
+- Update README.md ([#2504](https://github.com/axios/axios/pull/2504))
+- Fix word 'sintaxe' to 'syntax' in README.md ([#2432](https://github.com/axios/axios/pull/2432))
+- updating README: notes on CommonJS autocomplete ([#2256](https://github.com/axios/axios/pull/2256))
+- Fix grammar in README.md ([#2271](https://github.com/axios/axios/pull/2271))
+- Doc fixes, minor examples cleanup ([#2198](https://github.com/axios/axios/pull/2198))
+
+### 0.19.0 (May 30, 2019)
+
+Fixes and Functionality:
+
+- Added support for no_proxy env variable ([#1693](https://github.com/axios/axios/pull/1693/files)) - Chance Dickson
+- Unzip response body only for statuses != 204 ([#1129](https://github.com/axios/axios/pull/1129)) - drawski
+- Destroy stream on exceeding maxContentLength (fixes [#1098](https://github.com/axios/axios/issues/1098)) ([#1485](https://github.com/axios/axios/pull/1485)) - Gadzhi Gadzhiev
+- Makes Axios error generic to use AxiosResponse ([#1738](https://github.com/axios/axios/pull/1738)) - Suman Lama
+- Fixing Mocha tests by locking follow-redirects version to 1.5.10 ([#1993](https://github.com/axios/axios/pull/1993)) - grumblerchester
+- Allow uppercase methods in typings. ([#1781](https://github.com/axios/axios/pull/1781)) - Ken Powers
+- Fixing building url with hash mark ([#1771](https://github.com/axios/axios/pull/1771)) - Anatoly Ryabov
+- This commit fix building url with hash map (fragment identifier) when parameters are present: they must not be added after `#`, because client cut everything after `#`
+- Preserve HTTP method when following redirect ([#1758](https://github.com/axios/axios/pull/1758)) - Rikki Gibson
+- Add `getUri` signature to TypeScript definition. ([#1736](https://github.com/axios/axios/pull/1736)) - Alexander Trauzzi
+- Adding isAxiosError flag to errors thrown by axios ([#1419](https://github.com/axios/axios/pull/1419)) - Ayush Gupta
+
+Internal:
+
+- Fixing .eslintrc without extension ([#1789](https://github.com/axios/axios/pull/1789)) - Manoel
+- Fix failing SauceLabs tests by updating configuration - Emily Morehouse
+- Add issue templates - Emily Morehouse
+
+Documentation:
+
+- Consistent coding style in README ([#1787](https://github.com/axios/axios/pull/1787)) - Ali Servet Donmez
+- Add information about auth parameter to README ([#2166](https://github.com/axios/axios/pull/2166)) - xlaguna
+- Add DELETE to list of methods that allow data as a config option ([#2169](https://github.com/axios/axios/pull/2169)) - Daniela Borges Matos de Carvalho
+- Update ECOSYSTEM.md - Add Axios Endpoints ([#2176](https://github.com/axios/axios/pull/2176)) - Renan
+- Add r2curl in ECOSYSTEM ([#2141](https://github.com/axios/axios/pull/2141)) - 유용우 / CX
+- Update README.md - Add instructions for installing with yarn ([#2036](https://github.com/axios/axios/pull/2036)) - Victor Hermes
+- Fixing spacing for README.md ([#2066](https://github.com/axios/axios/pull/2066)) - Josh McCarty
+- Update README.md. - Change `.then` to `.finally` in example code ([#2090](https://github.com/axios/axios/pull/2090)) - Omar Cai
+- Clarify what values responseType can have in Node ([#2121](https://github.com/axios/axios/pull/2121)) - Tyler Breisacher
+- docs(ECOSYSTEM): add axios-api-versioning ([#2020](https://github.com/axios/axios/pull/2020)) - Weffe
+- It seems that `responseType: 'blob'` doesn't actually work in Node (when I tried using it, response.data was a string, not a Blob, since Node doesn't have Blobs), so this clarifies that this option should only be used in the browser
+- Update README.md. - Add Querystring library note ([#1896](https://github.com/axios/axios/pull/1896)) - Dmitriy Eroshenko
+- Add react-hooks-axios to Libraries section of ECOSYSTEM.md ([#1925](https://github.com/axios/axios/pull/1925)) - Cody Chan
+- Clarify in README that default timeout is 0 (no timeout) ([#1750](https://github.com/axios/axios/pull/1750)) - Ben Standefer
+
+### 0.19.0-beta.1 (Aug 9, 2018)
+
+**NOTE:** This is a beta version of this release. There may be functionality that is broken in
+certain browsers, though we suspect that builds are hanging and not erroring. See
+https://saucelabs.com/u/axios for the most up-to-date information.
+
+New Functionality:
+
+- Add getUri method ([#1712](https://github.com/axios/axios/issues/1712))
+- Add support for no_proxy env variable ([#1693](https://github.com/axios/axios/issues/1693))
+- Add toJSON to decorated Axios errors to facilitate serialization ([#1625](https://github.com/axios/axios/issues/1625))
+- Add second then on axios call ([#1623](https://github.com/axios/axios/issues/1623))
+- Typings: allow custom return types
+- Add option to specify character set in responses (with http adapter)
+
+Fixes:
+
+- Fix Keep defaults local to instance ([#385](https://github.com/axios/axios/issues/385))
+- Correctly catch exception in http test ([#1475](https://github.com/axios/axios/issues/1475))
+- Fix accept header normalization ([#1698](https://github.com/axios/axios/issues/1698))
+- Fix http adapter to allow HTTPS connections via HTTP ([#959](https://github.com/axios/axios/issues/959))
+- Fix Removes usage of deprecated Buffer constructor. ([#1555](https://github.com/axios/axios/issues/1555), [#1622](https://github.com/axios/axios/issues/1622))
+- Fix defaults to use httpAdapter if available ([#1285](https://github.com/axios/axios/issues/1285))
+  - Fixing defaults to use httpAdapter if available
+  - Use a safer, cross-platform method to detect the Node environment
+- Fix Reject promise if request is cancelled by the browser ([#537](https://github.com/axios/axios/issues/537))
+- [Typescript] Fix missing type parameters on delete/head methods
+- [NS]: Send `false` flag isStandardBrowserEnv for Nativescript
+- Fix missing type parameters on delete/head
+- Fix Default method for an instance always overwritten by get
+- Fix type error when socketPath option in AxiosRequestConfig
+- Capture errors on request data streams
+- Decorate resolve and reject to clear timeout in all cases
+
+Huge thanks to everyone who contributed to this release via code (authors listed
+below) or via reviews and triaging on GitHub:
+
+- Andrew Scott <ascott18@gmail.com>
+- Anthony Gauthier <antho325@hotmail.com>
+- arpit <arpit2438735@gmail.com>
+- ascott18
+- Benedikt Rötsch <axe312ger@users.noreply.github.com>
+- Chance Dickson <me@chancedickson.com>
+- Dave Stewart <info@davestewart.co.uk>
+- Deric Cain <deric.cain@gmail.com>
+- Guillaume Briday <guillaumebriday@gmail.com>
+- Jacob Wejendorp <jacob@wejendorp.dk>
+- Jim Lynch <mrdotjim@gmail.com>
+- johntron
+- Justin Beckwith <beckwith@google.com>
+- Justin Beckwith <justin.beckwith@gmail.com>
+- Khaled Garbaya <khaledgarbaya@gmail.com>
+- Lim Jing Rong <jjingrong@users.noreply.github.com>
+- Mark van den Broek <mvdnbrk@gmail.com>
+- Martti Laine <martti@codeclown.net>
+- mattridley
+- mattridley <matt.r@joinblink.com>
+- Nicolas Del Valle <nicolas.delvalle@gmail.com>
+- Nilegfx
+- pbarbiero
+- Rikki Gibson <rikkigibson@gmail.com>
+- Sako Hartounian <sakohartounian@yahoo.com>
+- Shane Fitzpatrick <fitzpasd@gmail.com>
+- Stephan Schneider <stephanschndr@gmail.com>
+- Steven <steven@ceriously.com>
+- Tim Garthwaite <tim.garthwaite@jibo.com>
+- Tim Johns <timjohns@yahoo.com>
+- Yutaro Miyazaki <yutaro@studio-rubbish.com>
+
+### 0.18.0 (Feb 19, 2018)
+
+- Adding support for UNIX Sockets when running with Node.js ([#1070](https://github.com/axios/axios/pull/1070))
+- Fixing typings ([#1177](https://github.com/axios/axios/pull/1177)):
+  - AxiosRequestConfig.proxy: allows type false
+  - AxiosProxyConfig: added auth field
+- Adding function signature in AxiosInstance interface so AxiosInstance can be invoked ([#1192](https://github.com/axios/axios/pull/1192), [#1254](https://github.com/axios/axios/pull/1254))
+- Allowing maxContentLength to pass through to redirected calls as maxBodyLength in follow-redirects config ([#1287](https://github.com/axios/axios/pull/1287))
+- Fixing configuration when using an instance - method can now be set ([#1342](https://github.com/axios/axios/pull/1342))
+
+### 0.17.1 (Nov 11, 2017)
+
+- Fixing issue with web workers ([#1160](https://github.com/axios/axios/pull/1160))
+- Allowing overriding transport ([#1080](https://github.com/axios/axios/pull/1080))
+- Updating TypeScript typings ([#1165](https://github.com/axios/axios/pull/1165), [#1125](https://github.com/axios/axios/pull/1125), [#1131](https://github.com/axios/axios/pull/1131))
+
+### 0.17.0 (Oct 21, 2017)
+
+- **BREAKING** Fixing issue with `baseURL` and interceptors ([#950](https://github.com/axios/axios/pull/950))
+- **BREAKING** Improving handing of duplicate headers ([#874](https://github.com/axios/axios/pull/874))
+- Adding support for disabling proxies ([#691](https://github.com/axios/axios/pull/691))
+- Updating TypeScript typings with generic type parameters ([#1061](https://github.com/axios/axios/pull/1061))
+
+### 0.16.2 (Jun 3, 2017)
+
+- Fixing issue with including `buffer` in bundle ([#887](https://github.com/axios/axios/pull/887))
+- Including underlying request in errors ([#830](https://github.com/axios/axios/pull/830))
+- Convert `method` to lowercase ([#930](https://github.com/axios/axios/pull/930))
+
+### 0.16.1 (Apr 8, 2017)
+
+- Improving HTTP adapter to return last request in case of redirects ([#828](https://github.com/axios/axios/pull/828))
+- Updating `follow-redirects` dependency ([#829](https://github.com/axios/axios/pull/829))
+- Adding support for passing `Buffer` in node ([#773](https://github.com/axios/axios/pull/773))
+
+### 0.16.0 (Mar 31, 2017)
+
+- **BREAKING** Removing `Promise` from axios typings in favor of built-in type declarations ([#480](https://github.com/axios/axios/issues/480))
+- Adding `options` shortcut method ([#461](https://github.com/axios/axios/pull/461))
+- Fixing issue with using `responseType: 'json'` in browsers incompatible with XHR Level 2 ([#654](https://github.com/axios/axios/pull/654))
+- Improving React Native detection ([#731](https://github.com/axios/axios/pull/731))
+- Fixing `combineURLs` to support empty `relativeURL` ([#581](https://github.com/axios/axios/pull/581))
+- Removing `PROTECTION_PREFIX` support ([#561](https://github.com/axios/axios/pull/561))
+
+### 0.15.3 (Nov 27, 2016)
+
+- Fixing issue with custom instances and global defaults ([#443](https://github.com/axios/axios/issues/443))
+- Renaming `axios.d.ts` to `index.d.ts` ([#519](https://github.com/axios/axios/issues/519))
+- Adding `get`, `head`, and `delete` to `defaults.headers` ([#509](https://github.com/axios/axios/issues/509))
+- Fixing issue with `btoa` and IE ([#507](https://github.com/axios/axios/issues/507))
+- Adding support for proxy authentication ([#483](https://github.com/axios/axios/pull/483))
+- Improving HTTP adapter to use `http` protocol by default ([#493](https://github.com/axios/axios/pull/493))
+- Fixing proxy issues ([#491](https://github.com/axios/axios/pull/491))
+
+### 0.15.2 (Oct 17, 2016)
+
+- Fixing issue with calling `cancel` after response has been received ([#482](https://github.com/axios/axios/issues/482))
+
+### 0.15.1 (Oct 14, 2016)
+
+- Fixing issue with UMD ([#485](https://github.com/axios/axios/issues/485))
+
+### 0.15.0 (Oct 10, 2016)
+
+- Adding cancellation support ([#452](https://github.com/axios/axios/pull/452))
+- Moving default adapter to global defaults ([#437](https://github.com/axios/axios/pull/437))
+- Fixing issue with `file` URI scheme ([#440](https://github.com/axios/axios/pull/440))
+- Fixing issue with `params` objects that have no prototype ([#445](https://github.com/axios/axios/pull/445))
+
+### 0.14.0 (Aug 27, 2016)
+
+- **BREAKING** Updating TypeScript definitions ([#419](https://github.com/axios/axios/pull/419))
+- **BREAKING** Replacing `agent` option with `httpAgent` and `httpsAgent` ([#387](https://github.com/axios/axios/pull/387))
+- **BREAKING** Splitting `progress` event handlers into `onUploadProgress` and `onDownloadProgress` ([#423](https://github.com/axios/axios/pull/423))
+- Adding support for `http_proxy` and `https_proxy` environment variables ([#366](https://github.com/axios/axios/pull/366))
+- Fixing issue with `auth` config option and `Authorization` header ([#397](https://github.com/axios/axios/pull/397))
+- Don't set XSRF header if `xsrfCookieName` is `null` ([#406](https://github.com/axios/axios/pull/406))
+
+### 0.13.1 (Jul 16, 2016)
+
+- Fixing issue with response data not being transformed on error ([#378](https://github.com/axios/axios/issues/378))
+
+### 0.13.0 (Jul 13, 2016)
+
+- **BREAKING** Improved error handling ([#345](https://github.com/axios/axios/pull/345))
+- **BREAKING** Response transformer now invoked in dispatcher not adapter ([10eb238](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e))
+- **BREAKING** Request adapters now return a `Promise` ([157efd5](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a))
+- Fixing issue with `withCredentials` not being overwritten ([#343](https://github.com/axios/axios/issues/343))
+- Fixing regression with request transformer being called before request interceptor ([#352](https://github.com/axios/axios/issues/352))
+- Fixing custom instance defaults ([#341](https://github.com/axios/axios/issues/341))
+- Fixing instances created from `axios.create` to have same API as default axios ([#217](https://github.com/axios/axios/issues/217))
+
+### 0.12.0 (May 31, 2016)
+
+- Adding support for `URLSearchParams` ([#317](https://github.com/axios/axios/pull/317))
+- Adding `maxRedirects` option ([#307](https://github.com/axios/axios/pull/307))
+
+### 0.11.1 (May 17, 2016)
+
+- Fixing IE CORS support ([#313](https://github.com/axios/axios/pull/313))
+- Fixing detection of `FormData` ([#325](https://github.com/axios/axios/pull/325))
+- Adding `Axios` class to exports ([#321](https://github.com/axios/axios/pull/321))
+
+### 0.11.0 (Apr 26, 2016)
+
+- Adding support for Stream with HTTP adapter ([#296](https://github.com/axios/axios/pull/296))
+- Adding support for custom HTTP status code error ranges ([#308](https://github.com/axios/axios/pull/308))
+- Fixing issue with ArrayBuffer ([#299](https://github.com/axios/axios/pull/299))
+
+### 0.10.0 (Apr 20, 2016)
+
+- Fixing issue with some requests sending `undefined` instead of `null` ([#250](https://github.com/axios/axios/pull/250))
+- Fixing basic auth for HTTP adapter ([#252](https://github.com/axios/axios/pull/252))
+- Fixing request timeout for XHR adapter ([#227](https://github.com/axios/axios/pull/227))
+- Fixing IE8 support by using `onreadystatechange` instead of `onload` ([#249](https://github.com/axios/axios/pull/249))
+- Fixing IE9 cross domain requests ([#251](https://github.com/axios/axios/pull/251))
+- Adding `maxContentLength` option ([#275](https://github.com/axios/axios/pull/275))
+- Fixing XHR support for WebWorker environment ([#279](https://github.com/axios/axios/pull/279))
+- Adding request instance to response ([#200](https://github.com/axios/axios/pull/200))
+
+### 0.9.1 (Jan 24, 2016)
+
+- Improving handling of request timeout in node ([#124](https://github.com/axios/axios/issues/124))
+- Fixing network errors not rejecting ([#205](https://github.com/axios/axios/pull/205))
+- Fixing issue with IE rejecting on HTTP 204 ([#201](https://github.com/axios/axios/issues/201))
+- Fixing host/port when following redirects ([#198](https://github.com/axios/axios/pull/198))
+
+### 0.9.0 (Jan 18, 2016)
+
+- Adding support for custom adapters
+- Fixing Content-Type header being removed when data is false ([#195](https://github.com/axios/axios/pull/195))
+- Improving XDomainRequest implementation ([#185](https://github.com/axios/axios/pull/185))
+- Improving config merging and order of precedence ([#183](https://github.com/axios/axios/pull/183))
+- Fixing XDomainRequest support for only <= IE9 ([#182](https://github.com/axios/axios/pull/182))
+
+### 0.8.1 (Dec 14, 2015)
+
+- Adding support for passing XSRF token for cross domain requests when using `withCredentials` ([#168](https://github.com/axios/axios/pull/168))
+- Fixing error with format of basic auth header ([#178](https://github.com/axios/axios/pull/173))
+- Fixing error with JSON payloads throwing `InvalidStateError` in some cases ([#174](https://github.com/axios/axios/pull/174))
+
+### 0.8.0 (Dec 11, 2015)
+
+- Adding support for creating instances of axios ([#123](https://github.com/axios/axios/pull/123))
+- Fixing http adapter to use `Buffer` instead of `String` in case of `responseType === 'arraybuffer'` ([#128](https://github.com/axios/axios/pull/128))
+- Adding support for using custom parameter serializer with `paramsSerializer` option ([#121](https://github.com/axios/axios/pull/121))
+- Fixing issue in IE8 caused by `forEach` on `arguments` ([#127](https://github.com/axios/axios/pull/127))
+- Adding support for following redirects in node ([#146](https://github.com/axios/axios/pull/146))
+- Adding support for transparent decompression if `content-encoding` is set ([#149](https://github.com/axios/axios/pull/149))
+- Adding support for transparent XDomainRequest to handle cross domain requests in IE9 ([#140](https://github.com/axios/axios/pull/140))
+- Adding support for HTTP basic auth via Authorization header ([#167](https://github.com/axios/axios/pull/167))
+- Adding support for baseURL option ([#160](https://github.com/axios/axios/pull/160))
+
+### 0.7.0 (Sep 29, 2015)
+
+- Fixing issue with minified bundle in IE8 ([#87](https://github.com/axios/axios/pull/87))
+- Adding support for passing agent in node ([#102](https://github.com/axios/axios/pull/102))
+- Adding support for returning result from `axios.spread` for chaining ([#106](https://github.com/axios/axios/pull/106))
+- Fixing typescript definition ([#105](https://github.com/axios/axios/pull/105))
+- Fixing default timeout config for node ([#112](https://github.com/axios/axios/pull/112))
+- Adding support for use in web workers, and react-native ([#70](https://github.com/axios/axios/issue/70)), ([#98](https://github.com/axios/axios/pull/98))
+- Adding support for fetch like API `axios(url[, config])` ([#116](https://github.com/axios/axios/issues/116))
+
+### 0.6.0 (Sep 21, 2015)
+
+- Removing deprecated success/error aliases
+- Fixing issue with array params not being properly encoded ([#49](https://github.com/axios/axios/pull/49))
+- Fixing issue with User-Agent getting overridden ([#69](https://github.com/axios/axios/issues/69))
+- Adding support for timeout config ([#56](https://github.com/axios/axios/issues/56))
+- Removing es6-promise dependency
+- Fixing issue preventing `length` to be used as a parameter ([#91](https://github.com/axios/axios/pull/91))
+- Fixing issue with IE8 ([#85](https://github.com/axios/axios/pull/85))
+- Converting build to UMD
+
+### 0.5.4 (Apr 08, 2015)
+
+- Fixing issue with FormData not being sent ([#53](https://github.com/axios/axios/issues/53))
+
+### 0.5.3 (Apr 07, 2015)
+
+- Using JSON.parse unconditionally when transforming response string ([#55](https://github.com/axios/axios/issues/55))
+
+### 0.5.2 (Mar 13, 2015)
+
+- Adding support for `statusText` in response ([#46](https://github.com/axios/axios/issues/46))
+
+### 0.5.1 (Mar 10, 2015)
+
+- Fixing issue using strict mode ([#45](https://github.com/axios/axios/issues/45))
+- Fixing issue with standalone build ([#47](https://github.com/axios/axios/issues/47))
+
+### 0.5.0 (Jan 23, 2015)
+
+- Adding support for intercepetors ([#14](https://github.com/axios/axios/issues/14))
+- Updating es6-promise dependency
+
+### 0.4.2 (Dec 10, 2014)
+
+- Fixing issue with `Content-Type` when using `FormData` ([#22](https://github.com/axios/axios/issues/22))
+- Adding support for TypeScript ([#25](https://github.com/axios/axios/issues/25))
+- Fixing issue with standalone build ([#29](https://github.com/axios/axios/issues/29))
+- Fixing issue with verbs needing to be capitalized in some browsers ([#30](https://github.com/axios/axios/issues/30))
+
+### 0.4.1 (Oct 15, 2014)
+
+- Adding error handling to request for node.js ([#18](https://github.com/axios/axios/issues/18))
+
+### 0.4.0 (Oct 03, 2014)
+
+- Adding support for `ArrayBuffer` and `ArrayBufferView` ([#10](https://github.com/axios/axios/issues/10))
+- Adding support for utf-8 for node.js ([#13](https://github.com/axios/axios/issues/13))
+- Adding support for SSL for node.js ([#12](https://github.com/axios/axios/issues/12))
+- Fixing incorrect `Content-Type` header ([#9](https://github.com/axios/axios/issues/9))
+- Adding standalone build without bundled es6-promise ([#11](https://github.com/axios/axios/issues/11))
+- Deprecating `success`/`error` in favor of `then`/`catch`
+
+### 0.3.1 (Sep 16, 2014)
+
+- Fixing missing post body when using node.js ([#3](https://github.com/axios/axios/issues/3))
+
+### 0.3.0 (Sep 16, 2014)
+
+- Fixing `success` and `error` to properly receive response data as individual arguments ([#8](https://github.com/axios/axios/issues/8))
+- Updating `then` and `catch` to receive response data as a single object ([#6](https://github.com/axios/axios/issues/6))
+- Fixing issue with `all` not working ([#7](https://github.com/axios/axios/issues/7))
+
+### 0.2.2 (Sep 14, 2014)
+
+- Fixing bundling with browserify ([#4](https://github.com/axios/axios/issues/4))
+
+### 0.2.1 (Sep 12, 2014)
+
+- Fixing build problem causing ridiculous file sizes
+
+### 0.2.0 (Sep 12, 2014)
+
+- Adding support for `all` and `spread`
+- Adding support for node.js ([#1](https://github.com/axios/axios/issues/1))
+
+### 0.1.0 (Aug 29, 2014)
+
+- Initial release

+ 19 - 0
node_modules/axios/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2014-present Matt Zabriskie
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 800 - 0
node_modules/axios/README.md


+ 162 - 0
node_modules/axios/UPGRADE_GUIDE.md

@@ -0,0 +1,162 @@
+# Upgrade Guide
+
+### 0.15.x -> 0.16.0
+
+#### `Promise` Type Declarations
+
+The `Promise` type declarations have been removed from the axios typings in favor of the built-in type declarations. If you use axios in a TypeScript project that targets `ES5`, please make sure to include the `es2015.promise` lib. Please see [this post](https://blog.mariusschulz.com/2016/11/25/typescript-2-0-built-in-type-declarations) for details.
+
+### 0.13.x -> 0.14.0
+
+#### TypeScript Definitions
+
+The axios TypeScript definitions have been updated to match the axios API and use the ES2015 module syntax.
+
+Please use the following `import` statement to import axios in TypeScript:
+
+```typescript
+import axios from 'axios';
+
+axios.get('/foo')
+  .then(response => console.log(response))
+  .catch(error => console.log(error));
+```
+
+#### `agent` Config Option
+
+The `agent` config option has been replaced with two new options: `httpAgent` and `httpsAgent`. Please use them instead.
+
+```js
+{
+  // Define a custom agent for HTTP
+  httpAgent: new http.Agent({ keepAlive: true }),
+  // Define a custom agent for HTTPS
+  httpsAgent: new https.Agent({ keepAlive: true })
+}
+```
+
+#### `progress` Config Option
+
+The `progress` config option has been replaced with the `onUploadProgress` and `onDownloadProgress` options.
+
+```js
+{
+  // Define a handler for upload progress events
+  onUploadProgress: function (progressEvent) {
+    // ...
+  },
+
+  // Define a handler for download progress events
+  onDownloadProgress: function (progressEvent) {
+    // ...
+  }
+}
+```
+
+### 0.12.x -> 0.13.0
+
+The `0.13.0` release contains several changes to custom adapters and error handling.
+
+#### Error Handling
+
+Previous to this release an error could either be a server response with bad status code or an actual `Error`. With this release Promise will always reject with an `Error`. In the case that a response was received, the `Error` will also include the response.
+
+```js
+axios.get('/user/12345')
+  .catch((error) => {
+    console.log(error.message);
+    console.log(error.code); // Not always specified
+    console.log(error.config); // The config that was used to make the request
+    console.log(error.response); // Only available if response was received from the server
+  });
+```
+
+#### Request Adapters
+
+This release changes a few things about how request adapters work. Please take note if you are using your own custom adapter.
+
+1. Response transformer is now called outside of adapter.
+2. Request adapter returns a `Promise`.
+
+This means that you no longer need to invoke `transformData` on response data. You will also no longer receive `resolve` and `reject` as arguments in your adapter.
+
+Previous code:
+
+```js
+function myAdapter(resolve, reject, config) {
+  var response = {
+    data: transformData(
+      responseData,
+      responseHeaders,
+      config.transformResponse
+    ),
+    status: request.status,
+    statusText: request.statusText,
+    headers: responseHeaders
+  };
+  settle(resolve, reject, response);
+}
+```
+
+New code:
+
+```js
+function myAdapter(config) {
+  return new Promise(function (resolve, reject) {
+    var response = {
+      data: responseData,
+      status: request.status,
+      statusText: request.statusText,
+      headers: responseHeaders
+    };
+    settle(resolve, reject, response);
+  });
+}
+```
+
+See the related commits for more details:
+- [Response transformers](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e)
+- [Request adapter Promise](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a)
+
+### 0.5.x -> 0.6.0
+
+The `0.6.0` release contains mostly bug fixes, but there are a couple things to be aware of when upgrading.
+
+#### ES6 Promise Polyfill
+
+Up until the `0.6.0` release ES6 `Promise` was being polyfilled using [es6-promise](https://github.com/jakearchibald/es6-promise). With this release, the polyfill has been removed, and you will need to supply it yourself if your environment needs it.
+
+```js
+require('es6-promise').polyfill();
+var axios = require('axios');
+```
+
+This will polyfill the global environment, and only needs to be done once.
+
+#### `axios.success`/`axios.error`
+
+The `success`, and `error` aliases were deprecated in [0.4.0](https://github.com/axios/axios/blob/master/CHANGELOG.md#040-oct-03-2014). As of this release they have been removed entirely. Instead please use `axios.then`, and `axios.catch` respectively.
+
+```js
+axios.get('some/url')
+  .then(function (res) {
+    /* ... */
+  })
+  .catch(function (err) {
+    /* ... */
+  });
+```
+
+#### UMD
+
+Previous versions of axios shipped with an AMD, CommonJS, and Global build. This has all been rolled into a single UMD build.
+
+```js
+// AMD
+require(['bower_components/axios/dist/axios'], function (axios) {
+  /* ... */
+});
+
+// CommonJS
+var axios = require('axios/dist/axios');
+```

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1756 - 0
node_modules/axios/dist/axios.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
node_modules/axios/dist/axios.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 3 - 0
node_modules/axios/dist/axios.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
node_modules/axios/dist/axios.min.map


+ 0 - 0
node_modules/axios/index.d.ts


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels