diff --git a/.vscode/settings.json b/.vscode/settings.json
index aadbc0e..7089ff0 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -12,8 +12,6 @@
"git.autofetch": true,
"git.enableSmartCommit": true,
- "svn.enableProposedApi": "product",
-
"files.trimTrailingWhitespace": true,
"typescript.tsdk": "./node_modules/typescript/lib",
diff --git a/.vscode/vue.code-snippets b/.vscode/vue.code-snippets
index 85e2d91..0df724e 100644
--- a/.vscode/vue.code-snippets
+++ b/.vscode/vue.code-snippets
@@ -225,41 +225,28 @@
"} from 'vuex-module-decorators'",
"import store from '${3:../}'",
"",
- "/** ${1:动态模块}",
- " */",
+ "/** ${1:动态模块} */",
"interface ${4:IDynamic} {",
- " /** 是否动态",
- " */",
+ " /** 是否动态 */",
" dynamic: boolean",
"",
" // ...",
"}",
"",
- "/** ${1:动态模块}",
- " */",
+ "/** ${1:动态模块} */",
"@Module({ dynamic: true, namespaced: true, name: '${5:dynamic}', store })",
"class ${6:Dynamic} extends VuexModule implements ${4:IDynamic} {",
" /// State & Getter(public) ///",
" dynamic = true",
"",
- " /// Mutation 无法调用/commit 必须通过Action ///",
+ " /// Mutation ///",
" @Mutation",
- " private DYNAMIC(dynamic: boolean) {",
+ " DYNAMIC(dynamic: boolean) {",
" this.dynamic = dynamic",
" }",
"",
" /// Action ///",
- " /** 设置动态【同步】",
- " * @param {Boolean} dynamic 是否动态",
- " */",
- " @Action",
- " setDynamic(dynamic: boolean) {",
- " // this.context.commit('DYNAMIC', dynamic) // 非动态模块",
- " this.DYNAMIC(dynamic) // 动态模块",
- " }",
- "",
- " /** 初始化是否动态属性【异步】",
- " */",
+ " /** 初始化是否动态属性 */",
" @Action",
" async initDynamic() {",
" const dynamic = await Promise.resolve(true)",
@@ -291,31 +278,20 @@
"} from 'vuex-module-decorators'",
"import store from '${3:../}'",
"",
- "/** ${1:动态模块}",
- " */",
+ "/** ${1:动态模块} */",
"@Module({ dynamic: true, namespaced: true, name: '${4:dynamic}', store })",
"class ${5:Dynamic} extends VuexModule {",
" /// State & Getter(public) ///",
" dynamic = true",
"",
- " /// Mutation 无法调用/commit 必须通过Action ///",
+ " /// Mutation ///",
" @Mutation",
" DYNAMIC(dynamic) {",
" this.dynamic = dynamic",
" }",
"",
" /// Action ///",
- " /** 设置动态【同步】",
- " * @param {Boolean} dynamic 是否动态",
- " */",
- " @Action",
- " setDynamic(dynamic) {",
- " // this.context.commit('DYNAMIC', dynamic) // 非动态模块",
- " this.DYNAMIC(dynamic) // 动态模块",
- " }",
- "",
- " /** 初始化是否动态属性【异步】",
- " */",
+ " /** 初始化是否动态属性 */",
" @Action",
" async initDynamic() {",
" const dynamic = await Promise.resolve(true)",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ec4c0e9..5bba19a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# 更新日志
+## v 1.2.10
+
+- banner插件
+- 工具函数优化
+- 文件/图片下载内存管理
+
## v 1.2.9
- 修复异步css chunk包含不定数量(皮肤/默认)文件问题等
diff --git a/README.md b/README.md
index 853587c..6993c94 100644
--- a/README.md
+++ b/README.md
@@ -310,6 +310,7 @@ yarn vue-cli-service help # [命令] : 比如 yarn vue-cli-service help test:e2e
- Vue实例**私有属性**命名规则(避免 [属性名](https://cn.vuejs.org/v2/style-guide/#私有属性名-必要) 冲突):
- `$_` 实例命名空间(在保证易维护的前提下可以使用单字母, 但应尽量避免)
- `_$` **全局/跨组件/hack**命名空间, 命名前应**先全局搜索**是否有重复
+ - `/^[$_]+_$/` 注入**vue data 选项**命名空间应满足该正则, 即以`_`结尾(因为以`$_`其中一个字符开头的Vue不会劫持), 命名前应**先全局搜索**是否有重复
- 除了以下样式可以使用全局:
@@ -604,8 +605,8 @@ yarn vue-cli-service help # [命令] : 比如 yarn vue-cli-service help test:e2e
// ...
```
-- 路由视图不需要被缓存的, 可以在自己的`deactivated`钩子销毁实例`this.$destroy()`
-- 所有响应路由变化的可缓存组件(不缓存如上), 应确保失活/休眠后不再响应路由变化, 推荐使用 `@com/ChooserAsyncFunctional` 包裹
+- 所有视图组件可接收props:`route`代替`this.$route`, 区别是: **只在首次进入当前视图或当前视图url发生变化时改变**
+- 路由视图不需要被缓存的, 可以在`deactivated`钩子销毁实例(`this.$destroy()`)或者`activated`钩子进行更新
- 为避免渲染错误, 请务必为循环创建的组件**加上 `key`**, 特别是 `tsx/ts/jsx/js` 中
### 配置和优化
diff --git a/package.json b/package.json
index f96c392..3b0a07a 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"crypto-js": "3.3.0",
"d3": "^5.15.1",
"echarts": "^4.7.0",
- "element-ui": "^2.13.0",
+ "element-ui": "^2.13.1",
"jsencrypt": "^3.0.0-rc.1",
"luma.gl": "^7.3.2",
"normalize.css": "^8.0.1",
@@ -28,10 +28,10 @@
"three": "^0.115.0",
"vue": "^2.6.11",
"vue-class-component": "^7.2.3",
- "vue-i18n": "^8.16.0",
+ "vue-i18n": "^8.17.3",
"vue-property-decorator": "^8.4.1",
"vue-router": "^3.1.6",
- "vuex": "^3.1.3",
+ "vuex": "^3.2.0",
"vuex-class": "^0.3.2",
"vuex-module-decorators": "^0.16.1",
"zdog": "^1.1.2",
@@ -44,10 +44,10 @@
"@babel/plugin-proposal-private-methods": "^7.8.3",
"@types/crypto-js": "3.1.44",
"@types/d3": "^5.7.2",
- "@types/echarts": "^4.4.5",
+ "@types/echarts": "^4.4.6",
"@types/jest": "^25.2.1",
- "@typescript-eslint/eslint-plugin": "^2.27.0",
- "@typescript-eslint/parser": "^2.27.0",
+ "@typescript-eslint/eslint-plugin": "^2.28.0",
+ "@typescript-eslint/parser": "^2.28.0",
"@vue/cli-plugin-babel": "~4.3.1",
"@vue/cli-plugin-e2e-cypress": "~4.3.1",
"@vue/cli-plugin-eslint": "~4.3.1",
@@ -70,14 +70,14 @@
"eslint-plugin-vue": "^6.2.2",
"fibers": "^4.0.2",
"hard-source-webpack-plugin": "^0.13.1",
- "lint-staged": "^10.1.3",
+ "lint-staged": "^10.1.6",
"postcss-preset-env": "^6.7.0",
"regenerate": "^1.4.0",
"regjsgen": "^0.5.1",
"regjsparser": "^0.6.4",
"sass": "^1.26.3",
"sass-loader": "^8.0.2",
- "stylelint": "^13.3.1",
+ "stylelint": "^13.3.2",
"stylelint-config-scss-maorey": "^1.1.1",
"stylelint-webpack-plugin": "^1.2.3",
"typescript": "~3.8.3",
diff --git a/src/components/ChooserAsync.tsx b/src/components/ChooserAsync.tsx
index 30b52ae..d6d4bb8 100644
--- a/src/components/ChooserAsync.tsx
+++ b/src/components/ChooserAsync.tsx
@@ -24,24 +24,36 @@ export const enum status {
loading = 2,
error = 3,
empty = 4,
+ success = 5,
}
type component = status | string | Comp
type filter = (data: any) => { data: any; comp: component } | void
-/// 选项 name,directives,filters,extends,mixins ///
+const DIC_SLOT = {
+ [status.none]: 'none',
+ [status.loading]: 'loading',
+ [status.error]: 'error',
+ [status.empty]: 'empty',
+}
/** 异步选择器组件, 最终渲染组件将得到一个prop: data, 即异步结果
*
- * props: 见: @Prop 【注意】: get/error 变化时会重新请求
+ * props: 见: Prop 【注意】: get/error 变化时会重新请求
+ *
* events: 见: const enum status 键值
- * slots: 支持默认插槽/默认作用域插槽 二选一 (二者都有时无法确定顺序, 所以只能二选一)
+ *
+ * slots: 见: const enum status 键值, 支持对应作用域插槽/插槽【二选一】作用域插槽优先(二者都有时无法确定顺序, 故)
+ *
* 示例:
*
*
+ * 啥也没有
+ *
*
*
*
*
*
+ *
* ( import 咋没得文档呢, 因为tsx么... ┐(: ´ ゞ`)┌ )
*/
@Component
@@ -130,34 +142,43 @@ export default class extends Vue {
// see: https://github.com/vuejs/jsx#installation
// eslint-disable-next-line @typescript-eslint/no-unused-vars
private render(h: CreateElement) {
- const Comp: any = this.is // for 依赖收集
- // for 依赖收集 失活返回缓存
if (this.isSleep) {
return this.$_vnode
}
- let temp: any
+ let Comp: any = this.is // for 依赖收集
+ let slot
+ if ((slot = DIC_SLOT[Comp as keyof typeof DIC_SLOT])) {
+ this.$emit(slot)
+ slot = this.$scopedSlots[slot]
+ ? (this.$scopedSlots[slot] as any)(this.$_data)
+ : this.$slots[slot]
+ if (slot && slot.length) {
+ Comp = this.tag
+ return (this.$_vnode = {slot})
+ }
+ }
+
switch (Comp) {
case status.none:
- this.$emit('none')
return (this.$_vnode = undefined)
case status.loading:
- this.$emit('loading')
return (this.$_vnode = )
case status.empty:
- this.$emit('empty')
return (this.$_vnode = (
))
case status.error:
- this.$emit('error')
return (this.$_vnode = )
default:
this.$emit('success')
+ slot = this.$scopedSlots
+ slot = slot.success || slot.default
return (this.$_vnode = (
-
- {this.$slots.default ||
- ((temp = this.$scopedSlots.default) && temp(this.$_data.props))}
+
+ {slot
+ ? slot(this.$_data)
+ : (slot = this.$slots).success || slot.default}
))
}
diff --git a/src/components/ChooserAsyncFunctional.tsx b/src/components/ChooserAsyncFunctional.tsx
index 31d187c..1f8393d 100644
--- a/src/components/ChooserAsyncFunctional.tsx
+++ b/src/components/ChooserAsyncFunctional.tsx
@@ -11,7 +11,7 @@ import Vue, { Component, RenderContext, VNode } from 'vue'
import Info from './Info'
import Loading from './Loading'
-import { hasOwnProperty, isFn } from '@/utils'
+import { hasOwnProperty, isFn, setHook } from '@/utils'
/// 常量(UPPER_CASE),单例/变量(camelCase),函数(无副作用,camelCase) ///
// const ModuleOne: any = getAsync(() =>
@@ -28,7 +28,7 @@ export const enum status {
}
export type component = status | string | Component
export type filter = (data: any) => { data: any; comp: component } | void
-type state = {
+interface IState {
/// props ///
/** 未匹配到任何组件但有数据时使用的组件[默认‘div’] 若字典存在, tag为字符串, 则优先从字典取
*/
@@ -44,7 +44,7 @@ type state = {
error?: status | ((err: Error) => component)
/** 组件字典 当filter返回string时即从字典取对应组件
*/
- components?: IObject
+ components?: { [name: string]: Component }
/** 类似 v-once, 默认 false
*/
once?: boolean
@@ -80,7 +80,7 @@ type state = {
c?: component
}
-function watch(state: state) {
+function watch(state: IState) {
const data = state.o
const DEFAULT_TAG = 'div'
if (data) {
@@ -103,7 +103,7 @@ function watch(state: state) {
state.i.i = status.empty
}
-function get(state: state) {
+function get(state: IState) {
state.i.i = status.loading
// eslint-disable-next-line prefer-promise-reject-errors
;(state.get ? state.get() : Promise.reject())
@@ -127,14 +127,14 @@ const DIC_PROPS = {
tag: 1,
components: 1,
}
-const DIC_EVENTS: IObject = {
+const DIC_EVENTS = {
none: status.none,
loading: status.loading,
error: status.error,
empty: status.empty,
success: status.success,
}
-function init(state: state, context: RenderContext) {
+function init(state: IState, context: RenderContext) {
const {
props,
data: { attrs = {}, on = {} },
@@ -157,7 +157,7 @@ function init(state: state, context: RenderContext) {
/// on ///
for (prop in DIC_EVENTS) {
- state.f[DIC_EVENTS[prop]] = on[prop]
+ state.f[DIC_EVENTS[prop as keyof typeof DIC_EVENTS] as status] = on[prop]
}
if (isSame) {
@@ -172,13 +172,14 @@ function init(state: state, context: RenderContext) {
const activated = 'hook:activated'
const deactivated = 'hook:deactivated'
+const destroyed = 'hook:destroyed'
function getState(vm: Vue, key: any) {
const CACHE = (vm as any)._$c || ((vm as any)._$c = {})
- let state: state = CACHE[key]
+ let state: IState = CACHE[key]
if (!state) {
state = CACHE[key] = {
f: {},
- i: Vue.observable({ i: status.loading, d: 0 } as state['i']),
+ i: Vue.observable({ i: status.loading, d: 0 as 0 | 1 }),
h: {
$: () => {
get(state)
@@ -195,24 +196,14 @@ function getState(vm: Vue, key: any) {
// LifeCycle hooks for parent
vm.$on(activated, state.h.a)
vm.$on(deactivated, state.h.d)
- vm.$on('hook:destroyed', () => {
+ vm.$on(destroyed, () => {
delete CACHE[key]
})
}
return state
}
-function hook(on: IObject, hook: string, fn: Function) {
- if (!on[hook]) {
- on[hook] = fn
- } else if (Array.isArray(on[hook])) {
- ;(hook = on[hook] as any).includes(fn) || (hook as any).push(fn)
- } else if (on[hook] !== fn) {
- on[hook] = [on[hook] as Function, fn]
- }
-}
-
-function call(hooks: state['f'][status], context: RenderContext) {
+function call(hooks: IState['f'][status], context: RenderContext) {
if (!hooks) {
return
}
@@ -226,18 +217,27 @@ function call(hooks: state['f'][status], context: RenderContext) {
}
}
+const DEFAULT_KEY = String.fromCharCode(0)
+const DIC_SLOT = {
+ [status.none]: 'none',
+ [status.loading]: 'loading',
+ [status.error]: 'error',
+ [status.empty]: 'empty',
+}
/** 异步选择器组件(functional), 最终渲染组件将得到一个prop: data, 即异步结果
* 【相同父组件(functional当然不算)存在多个选择器时, 必须提供key作为唯一标识】
*
- * props: 见: type state 注释 【注意】: get/error 变化时会重新请求
+ * props: 见: interface state 注释 【注意】: get/error 变化时会重新请求
*
* events: 见: const enum status 键值
*
- * slots: 支持默认插槽/默认作用域插槽【二选一】(二者都有时无法确定顺序, 故)
+ * slots: 见: const enum status 键值, 支持对应作用域插槽/插槽【二选一】作用域插槽优先(二者都有时无法确定顺序, 故)
*
* 示例:
*
*
+ * 啥也没有
+ *
*
*
*
@@ -249,21 +249,22 @@ function call(hooks: state['f'][status], context: RenderContext) {
export default (context: RenderContext) => {
// identify/mark this functional component by/to parent._$c use key
let temp // 工具人
+ let data // 工具人
temp = context.parent
- const data = context.data
+ data = context.data
const state = getState(
temp,
- hasOwnProperty(data, 'key') ? data.key : (data.key = '')
+ hasOwnProperty(data, 'key') ? data.key : (data.key = DEFAULT_KEY)
)
// situations to use VNode cache
if (state.i.d || (temp.$el && !temp.$el.parentNode)) {
- return state.n // 父组件失活/休眠等
+ return state.n // 父/此组件失活等
}
// init state with diff
temp = init(state, context)
- const Comp: any = state.i.i // 收集依赖
+ let Comp: any = state.i.i
if (temp && Comp === state.c) {
return state.n // once & 自身未变化
}
@@ -271,22 +272,39 @@ export default (context: RenderContext) => {
// LifeCycle hooks for Comp & emit events
state.c = Comp
temp = data.on || (data.on = {})
- hook(temp, activated, state.h.a)
- hook(temp, deactivated, state.h.d)
+ temp.$ = state.h.$ // reload
+ setHook(temp, activated, state.h.a)
+ setHook(temp, deactivated, state.h.d)
call(state.f[Comp as status] || state.f[status.success], context)
// save & return VNode
+ let slot
+ if ((slot = DIC_SLOT[Comp as keyof typeof DIC_SLOT])) {
+ // scopedSlots first
+ slot = context.scopedSlots[slot]
+ ? context.scopedSlots[slot](state.d)
+ : context.slots()[slot]
+ if (slot && slot.length) {
+ data = data.key + Comp
+ Comp = state.tag
+ return (state.n = (
+
+ {slot}
+
+ ))
+ }
+ }
switch (Comp) {
case status.none:
return (state.n = (
-
+
))
case status.loading:
- return (state.n = )
+ return (state.n = )
case status.empty:
return (state.n = (
{
/>
))
case status.error:
- temp.$ = state.h.$ // reload
- return (state.n = )
+ return (state.n = )
default:
- // add props
+ // add props: data
data.props = context.props
data.props.data = state.d.data
- temp = context.scopedSlots.default // scopedSlots first
+ slot = context.scopedSlots
+ slot = slot.success || slot.default
return (state.n = (
- {temp ? temp(state.d) : context.slots().default}
+
+ {slot
+ ? slot(state.d)
+ : (slot = context.slots()).success || slot.default}
+
))
}
}
diff --git a/src/components/File.tsx b/src/components/File.tsx
index 80de3fc..795a388 100644
--- a/src/components/File.tsx
+++ b/src/components/File.tsx
@@ -6,27 +6,18 @@
*/
import { CreateElement, VNode } from 'vue'
// see: https://github.com/kaorun343/vue-property-decorator
-import { Component, Vue, Prop, Watch } from 'vue-property-decorator'
+import { Component, Vue, Prop } from 'vue-property-decorator'
/// [import] vue组件,其他,CSS Module ///
// import { getAsync } from '@/utils/highOrder'
// import STYLE from './index.module.scss'
import ElLink from 'element-ui/lib/link'
-
-import { isEqual } from '@/utils'
-import { download, free, IFile, save } from '@/utils/downloader'
+import storeFile, { STATE, ITask } from '@/store/file'
/// 常量(UPPER_CASE),单例/变量(camelCase),函数(无副作用,camelCase) ///
// const ModuleOne: any = getAsync(() =>
// import(/* webpackChunkName: "ihOne" */ './ModuleOne')
// )
-const enum status {
- init = 0,
- loading = 1,
- error = 2,
- success = 3,
-}
-const ALIVE = 30 * 1000 // 下载的文件缓存 30s
/// 选项 name,directives,filters,extends,mixins ///
@Component
@@ -39,21 +30,41 @@ export default class extends Vue {
@Prop() readonly query?: IObject
/** 文件名 */
@Prop() readonly fileName?: string
- /** 显示文字 */
+ /** 显示文字(文件名, 与默认slot二选一) */
@Prop() readonly text?: string
- /** 禁用 */
+ /** 是否禁用 */
@Prop() readonly disabled?: boolean
- /** 类型 */
- @Prop({ default: 'primary' }) readonly type?: string
- /** 图标 */
- @Prop({ default: 'el-icon-document' }) readonly icon?: string
+ /** 图标(TODO: 默认取文件名后缀) */
+ @Prop({ default: 'el-icon-document' }) readonly icon!: string
/// [data] (attr: string = '响应式属性' // 除了 undefined) ///
- private status: status = status.init
private isSleep = false // 是否失活/休眠
+ private isDel = 0
/// 非响应式属性 (attr?: string // undefined) ///
- private $_file?: IFile
private $_vnode?: VNode
/// [computed] (get attr() {} set attr(){}) ///
+ /** 【必须重写】文件管理数据仓库 */
+ protected get store(): storeFile {
+ throw new Error('File: 必须重写store以提供文件管理数据仓库!')
+ }
+
+ protected get task() {
+ let task: any = this.isDel
+ this.store.ADD_TASK({
+ task: {
+ task: {
+ url: this.href,
+ query: this.query,
+ name: this.fileName,
+ },
+ state: STATE.pause,
+ },
+ callback(t) {
+ task = t
+ },
+ })
+ return task as ITask
+ }
+
/// [LifeCycle] (private beforeCreate(){}/.../destroyed(){}) ///
private activated() {
this.isSleep = false
@@ -63,83 +74,85 @@ export default class extends Vue {
this.isSleep = true
}
- private beforeDestroy() {
- this.$_file && free(this.$_file)
- }
-
/// [watch] (@Watch('attr') onAttrChange(val, oldVal) {}) ///
- @Watch('href')
- @Watch('query')
- private reset(value: any, old: any) {
- // diff
- if (old && isEqual(value, old)) {
- return
- }
-
- this.status = status.init
- this.$_file && free(this.$_file)
+ /// [methods] (method(){}) ///
+ protected load() {
+ this.store.SET_STATE({
+ task: this.task as ITask,
+ state: STATE.loading,
+ })
}
- /// [methods] (method(){}) ///
- private load() {
- const href = this.href
- if (href) {
- this.status = status.loading
- download(href, this.query, this.fileName)
- .then(res => {
- this.$_file && free(this.$_file)
- this.$_file = res
- this.status = status.success
- this.save()
- setTimeout(this.reset.bind(this), ALIVE)
- })
- .catch(() => {
- this.status = status.error
- })
- }
+ protected save() {
+ this.store.SAVE(this.task as ITask)
}
- private save() {
- save(this.$_file as IFile)
+ protected reLoad() {
+ this.isDel++
}
// see: https://github.com/vuejs/jsx#installation
// eslint-disable-next-line @typescript-eslint/no-unused-vars
- private render(h: CreateElement) {
+ protected render(h: CreateElement) {
if (this.isSleep) {
return this.$_vnode
}
- // 依赖收集
- switch (this.status) {
- case status.loading:
+ const text = this.text || this.$slots.default
+ const icon = this.icon // TODO: 未指定图标时根据文件名后缀设置图标
+
+ switch (this.task.state) {
+ case STATE.del:
return (this.$_vnode = (
-
- {this.text}
- {this.$slots.default}
+
+ {text}
))
- case status.error:
+ case STATE.wait:
+ return (this.$_vnode = (
+
+ {text}
+
+ ))
+ case STATE.loading:
+ return (this.$_vnode = (
+
+ {text}
+
+ ))
+ case STATE.pause:
+ return (this.$_vnode = (
+
+ {text}
+
+ ))
+ case STATE.failed:
return (this.$_vnode = (
- {this.text}
- {this.$slots.default}
+ {text}
))
+ case STATE.success:
+ this.save() // 下载完成自动保存
+ // eslint-disable-next-line no-fallthrough
default:
return (this.$_vnode = (
-
- {this.text}
- {this.$slots.default}
+
+ {text}
))
}
diff --git a/src/components/Image.tsx b/src/components/Image.tsx
index 990716e..b904979 100644
--- a/src/components/Image.tsx
+++ b/src/components/Image.tsx
@@ -5,28 +5,21 @@
*/
import { CreateElement, VNode } from 'vue'
// see: https://github.com/kaorun343/vue-property-decorator
-import { Component, Vue, Prop, Watch } from 'vue-property-decorator'
+import { Component, Vue, Prop } from 'vue-property-decorator'
/// [import] vue组件,其他,CSS Module ///
// import { getAsync } from '@/utils/highOrder'
// import STYLE from './index.module.scss'
import Info from './Info'
-import { isEqual } from '@/utils'
-import { download, free, IFile } from '@/utils/downloader'
+import { isPassive } from '@/utils'
+import { debounce } from '@/utils/performance'
+import storeImage, { STATE, ITask } from '@/store/image'
/// 常量(UPPER_CASE),单例/变量(camelCase),函数(无副作用,camelCase) ///
// const ModuleOne: any = getAsync(() =>
// import(/* webpackChunkName: "ihOne" */ './ModuleOne')
// )
-const enum status {
- init = 0,
- loading = 1,
- error = 2,
- success = 3,
-}
-
-// TODO: lazy/大图预览/保存图片
/// 选项 name,directives,filters,extends,mixins ///
@Component
@@ -37,15 +30,69 @@ export default class extends Vue {
@Prop() readonly src!: string
/** 查询参数 */
@Prop() readonly query?: IObject
+ /** 同 */
@Prop() readonly alt?: string
+ /** 滚动容器选择器(document.querySelector), 若设置则懒加载 */
+ @Prop() readonly el?: string
/// [data] (attr: string = '响应式属性' // 除了 undefined) ///
- private status: status = status.init
private isSleep = false // 是否失活/休眠
+ private isDel = 0
/// 非响应式属性 (attr?: string // undefined) ///
- private $_file?: IFile
private $_vnode?: VNode
/// [computed] (get attr() {} set attr(){}) ///
+ /** 【必须重写】文件管理数据仓库 */
+ protected get store(): storeImage {
+ throw new Error('Image: 必须重写store以提供图片管理数据仓库!')
+ }
+
+ protected get task() {
+ let task
+ this.isDel &&
+ this.store.LOAD({
+ task: { url: this.src, query: this.query },
+ callback(t) {
+ task = t
+ },
+ })
+ return (task as any) as ITask
+ }
+
/// [LifeCycle] (private beforeCreate(){}/.../destroyed(){}) ///
+ private created() {
+ if (this.el) {
+ const el = document.querySelector(this.el)
+ if (el) {
+ const onScroll = debounce(() => {
+ if (this.isDel) {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ return removeListener()
+ }
+
+ const top = el.scrollTop
+ const bottom = top + el.clientHeight
+
+ const left = el.scrollLeft
+ const right = left + el.clientWidth
+
+ const dom = this.$el as HTMLElement
+ const y = dom.offsetTop // + (dom.offsetHeight >> 1)
+ const x = dom.offsetLeft // + (dom.offsetWidth >> 1)
+
+ if (y > top && y < bottom && x > left && x < right) {
+ this.isDel++
+ }
+ }, 99)
+ const removeListener = () => {
+ el.removeEventListener('scroll', onScroll)
+ }
+ el.addEventListener('scroll', onScroll, isPassive())
+ this.$on('hook:destroyed', removeListener)
+ return this.$nextTick(onScroll)
+ }
+ }
+ this.isDel++
+ }
+
private activated() {
this.isSleep = false
}
@@ -54,57 +101,41 @@ export default class extends Vue {
this.isSleep = true
}
- private beforeDestroy() {
- this.$_file && free(this.$_file)
- }
-
/// [watch] (@Watch('attr') onAttrChange(val, oldVal) {}) ///
/// [methods] (method(){}) ///
- @Watch('src', { immediate: true })
- @Watch('query')
- private load(value: any, old: any) {
- const src = this.src
- if (!src) {
- return
- }
-
- // diff
- if (old && isEqual(value, old)) {
- return
- }
-
- this.status = status.loading
- download(src, this.query)
- .then(res => {
- this.$_file && free(this.$_file)
- this.$_file = res
- this.status = status.success
- })
- .catch(() => {
- this.status = status.error
- })
+ protected reLoad() {
+ this.isDel++
}
// see: https://github.com/vuejs/jsx#installation
// eslint-disable-next-line @typescript-eslint/no-unused-vars
private render(h: CreateElement) {
- if (this.isSleep) {
- return this.$_vnode
+ const task = this.task
+ if (this.isSleep || !task) {
+ return this.$_vnode || (this.$_vnode = )
}
- // 依赖收集
- switch (this.status) {
- case status.init:
+ switch (task.state) {
+ case STATE.drop:
return (this.$_vnode = (
))
- case status.loading:
+ case STATE.wait:
+ return (this.$_vnode = (
+
+ ))
+ case STATE.loading:
return (this.$_vnode = (
))
- case status.error:
+ case STATE.failed:
return (this.$_vnode = (
))
default:
- return (this.$_vnode = (
-
- ))
+ return (this.$_vnode = )
}
}
}
diff --git a/src/components/RouterViewTransparent.ts b/src/components/RouterViewTransparent.ts
index 08de118..e16d59e 100644
--- a/src/components/RouterViewTransparent.ts
+++ b/src/components/RouterViewTransparent.ts
@@ -16,7 +16,7 @@ import getKey from '@/utils/getKey'
// )
/** 透明分发路由(支持嵌套)
- * 以下情况可以给个key防止复用:
+ * 可以给个key防止复用:
*
*
*
@@ -24,22 +24,36 @@ import getKey from '@/utils/getKey'
export default {
name: 'RVT',
data() {
- return { d: 0 } // 是否失活/休眠
+ return { d: 0 } // 是否失活/离开
+ },
+ beforeRouteUpdate(this: any, to, from, next) {
+ this.d = 0
+ setTimeout(next)
},
activated(this: any) {
this.d = 0
},
+ beforeRouteLeave(this: any, to, from, next) {
+ this.d = to.matched.length // for 刷新
+ setTimeout(next)
+ },
deactivated(this: any) {
this.d = 1
},
render(this: any, h) {
- const exclude = this.$router.$.e // for 依赖收集
- const meta = this.$route.meta // for 依赖收集
+ if (this.d) {
+ return this.c
+ }
+
+ const exclude = this.$router.$.e
+ const meta = this.$route.meta
- return this.d // for 依赖收集
- ? this.c
- : (this.c = h('KeepAlive', { props: { max: 5, exclude } }, [
- h('RouterView', { key: meta.k || (meta.k = getKey()) }),
- ]))
+ return (this.c = h('KeepAlive', { props: { max: 5, exclude } }, [
+ h(
+ 'RouterView',
+ { key: meta.k || (meta.k = getKey()) },
+ this.$slots.default
+ ),
+ ]))
},
} as Component
diff --git a/src/pages/index/App.vue b/src/pages/index/App.vue
index 824d9d6..99c8923 100644
--- a/src/pages/index/App.vue
+++ b/src/pages/index/App.vue
@@ -93,7 +93,7 @@ export default class extends Vue {
}
set skin(skin: string) {
- statePrefer.setSkin(skin)
+ statePrefer.SET_SKIN(skin)
}
}
diff --git a/src/pages/index/router.ts b/src/pages/index/router.ts
index 4d442f3..33e9696 100644
--- a/src/pages/index/router.ts
+++ b/src/pages/index/router.ts
@@ -7,8 +7,8 @@ import Vue from 'vue'
import Router, { RouterOptions, RouteConfig, Route, Location } from 'vue-router'
import configRoute from '@iRoute' // 使用别名
-import { cancel } from '@/utils/ajax'
import getKey from '@/utils/getKey'
+import { cancel } from '@/utils/ajax'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
@@ -57,7 +57,7 @@ function restoreName(this: any) {
(temp = temp.Ctor.options) &&
(temp.name = this._$a)
}
-const refreshRoute = (route: Route) => {
+function refreshRoute(route: Route) {
if (route.matched) {
route = route.matched as any // 最后一个match一定是当前路由
route = (route as any)[(route as any).length - 1]
@@ -118,28 +118,23 @@ router.beforeEach((to, from, next) => {
NProgress.start() // 开始进度条
cancel('导航: 取消未完成请求')
// 关闭所有提示
- // temp = router.app
- // temp.$message.closeAll()
- // temp.$notify.closeAll()
- // try {
- // temp.$msgbox.close()
- // } catch (error) {}
- // if ((temp = temp.$el?.querySelector('.el-main'))) {
+ temp = router.app
+ temp.$message.closeAll()
+ temp.$notify.closeAll()
+ try {
+ temp.$msgbox.close()
+ } catch (error) {}
+ // if ((temp = temp.$el) && (temp = temp.querySelector('.el-main'))) {
// // 记录离开前的滚动位置
// from.meta.x = temp.scrollLeft
// from.meta.y = temp.scrollTop
// }
- // 为每个路由对应的组件添加 props (只允许对象 不然报错给你看)
- // if ((temp = from.matched).length && (temp = temp[temp.length - 1])) {
- // temp = temp.props as any
- // temp = temp.default || (temp.default = {})
- // temp.route = from
- // }
- // if ((temp = to.matched) && (temp = temp[temp.length - 1])) {
- // temp = temp.props as any
- // temp = temp.default || (temp.default = {})
- // temp.route = to
- // }
+ // 为每个路由对应的组件添加 props:route (路由配置props只允许对象 不然报错给你看)
+ if ((temp = to.matched) && (temp = temp[temp.length - 1])) {
+ temp = temp.props as any
+ temp = temp.default || (temp.default = {})
+ ;(!temp.route || temp.route.fullPath !== to.fullPath) && (temp.route = to)
+ }
next()
})
diff --git a/src/pages/index/store/modules/prefer.ts b/src/pages/index/store/modules/prefer.ts
index ba69fc1..4b3047f 100644
--- a/src/pages/index/store/modules/prefer.ts
+++ b/src/pages/index/store/modules/prefer.ts
@@ -3,7 +3,7 @@
* @Author: 毛瑞
* @Date: 2019-06-19 15:16:19
*/
-import { Module, Mutation, Action, getModule } from 'vuex-module-decorators'
+import { Module, Mutation, getModule } from 'vuex-module-decorators'
import RootPrefer, {
IPrefer as IRootPrefer,
IPREFER as IRootPREFER,
@@ -21,7 +21,7 @@ export interface IPrefer extends IRootPrefer {
/** 本地存储单例对象 【应确保本网站(所有html)存储键值不会冲突】 */
export interface IPREFER extends IRootPREFER {
// 扩展存储键
- other: {
+ index: {
bar: string
}
}
@@ -29,26 +29,19 @@ export interface IPREFER extends IRootPREFER {
/** 本地存储的偏好信息对象 单例, 添加请在偏好管理增加定义, 防止key冲突
*/
const RP = ROOT_PREFER as IPREFER
-const PREFER = RP.other || (RP.other = { bar: 'bar' })
+const PREFER = RP.index || (RP.index = { bar: 'bar' })
@Module({ dynamic: true, namespaced: true, name: 'prefer', store })
class Prefer extends RootPrefer implements IPrefer {
/// State & Getter(public) ///
bar = PREFER.bar
- /// Mutation 无法调用/commit 必须通过Action ///
+ /// Mutation ///
@Mutation
- private BAR(bar: string) {
+ SET_BAR(bar: string) {
this.bar = bar
}
/// Action ///
- /** 设置bar
- * @param {string} bar
- */
- @Action
- setBar(bar: string) {
- this.BAR(bar) // 动态模块可以不用 context.commit
- }
}
// hook(() => {
diff --git a/src/pages/other/App.vue b/src/pages/other/App.vue
index 370c504..1abac15 100644
--- a/src/pages/other/App.vue
+++ b/src/pages/other/App.vue
@@ -189,7 +189,7 @@ export default class extends Vue {
}
set skin(skin: string) {
- statePrefer.setSkin(skin)
+ statePrefer.SET_SKIN(skin)
}
}
diff --git a/src/pages/other/components/File.tsx b/src/pages/other/components/File.tsx
new file mode 100644
index 0000000..60fa207
--- /dev/null
+++ b/src/pages/other/components/File.tsx
@@ -0,0 +1,35 @@
+/*
+ * @Description: 文件下载(链接)
+ *【请确保(所在入口/当前文件)引用了'~element-ui/packages/theme-chalk/src/link'样式】
+ * @Author: 毛瑞
+ * @Date: 2020-03-02 16:46:53
+ */
+// see: https://github.com/kaorun343/vue-property-decorator
+import { Component } from 'vue-property-decorator'
+
+/// [import] vue组件,其他,CSS Module ///
+// import { getAsync } from '@/utils/highOrder'
+// import STYLE from './index.module.scss'
+import File from '@com/File'
+import storeFile from '@index/store/modules/file'
+
+/// 常量(UPPER_CASE),单例/变量(camelCase),函数(无副作用,camelCase) ///
+// const ModuleOne: any = getAsync(() =>
+// import(/* webpackChunkName: "ihOne" */ './ModuleOne')
+// )
+
+/// 选项 name,directives,filters,extends,mixins ///
+@Component
+export default class extends File {
+ /// [model] (@Model('change') readonly attr!: string) ///
+ /// [props] (@Prop() readonly attr!: string) ///
+ /// [data] (attr: string = '响应式属性' // 除了 undefined) ///
+ /// 非响应式属性 (attr?: string // undefined) ///
+ /// [computed] (get attr() {} set attr(){}) ///
+ protected get store() {
+ return storeFile
+ }
+ /// [LifeCycle] (private beforeCreate(){}/.../destroyed(){}) ///
+ /// [watch] (@Watch('attr') onAttrChange(val, oldVal) {}) ///
+ /// [methods] (method(){}) ///
+}
diff --git a/src/pages/other/components/Image.tsx b/src/pages/other/components/Image.tsx
new file mode 100644
index 0000000..2cd7c38
--- /dev/null
+++ b/src/pages/other/components/Image.tsx
@@ -0,0 +1,37 @@
+/*
+ * @Description: 图片展示 (图片文件需要授权)
+ * @Author: 毛瑞
+ * @Date: 2020-03-02 13:25:23
+ */
+// see: https://github.com/kaorun343/vue-property-decorator
+import { Component } from 'vue-property-decorator'
+
+/// [import] vue组件,其他,CSS Module ///
+// import { getAsync } from '@/utils/highOrder'
+// import STYLE from './index.module.scss'
+import Image from '@com/Image'
+import storeImage from '@index/store/modules/image'
+
+/// 常量(UPPER_CASE),单例/变量(camelCase),函数(无副作用,camelCase) ///
+// const ModuleOne: any = getAsync(() =>
+// import(/* webpackChunkName: "ihOne" */ './ModuleOne')
+// )
+
+// TODO: lazy/大图预览/保存图片
+
+/// 选项 name,directives,filters,extends,mixins ///
+@Component
+export default class extends Image {
+ /// [model] (@Model('change') readonly attr!: string) ///
+ /// [props] (@Prop() readonly attr!: string) ///
+ /// [data] (attr: string = '响应式属性' // 除了 undefined) ///
+ /// 非响应式属性 (attr?: string // undefined) ///
+ /// [computed] (get attr() {} set attr(){}) ///
+ protected get store() {
+ return storeImage
+ }
+
+ /// [LifeCycle] (private beforeCreate(){}/.../destroyed(){}) ///
+ /// [watch] (@Watch('attr') onAttrChange(val, oldVal) {}) ///
+ /// [methods] (method(){}) ///
+}
diff --git a/src/pages/other/router.ts b/src/pages/other/router.ts
index 1d1d427..b7eb793 100644
--- a/src/pages/other/router.ts
+++ b/src/pages/other/router.ts
@@ -7,8 +7,8 @@ import Vue from 'vue'
import Router, { RouterOptions, RouteConfig, Route, Location } from 'vue-router'
import configRoute from '@oRoute' // 使用别名
-import { cancel } from '@/utils/ajax'
import getKey from '@/utils/getKey'
+import { cancel } from '@/utils/ajax'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
@@ -57,7 +57,7 @@ function restoreName(this: any) {
(temp = temp.Ctor.options) &&
(temp.name = this._$a)
}
-const refreshRoute = (route: Route) => {
+function refreshRoute(route: Route) {
if (route.matched) {
route = route.matched as any // 最后一个match一定是当前路由
route = (route as any)[(route as any).length - 1]
@@ -124,22 +124,17 @@ router.beforeEach((to, from, next) => {
try {
temp.$msgbox.close()
} catch (error) {}
- // if ((temp = temp.$el?.querySelector('.el-main'))) {
+ // if ((temp = temp.$el) && (temp = temp.querySelector('.el-main'))) {
// // 记录离开前的滚动位置
// from.meta.x = temp.scrollLeft
// from.meta.y = temp.scrollTop
// }
- // 为每个路由对应的组件添加 props (只允许对象 不然报错给你看)
- // if ((temp = from.matched).length && (temp = temp[temp.length - 1])) {
- // temp = temp.props as any
- // temp = temp.default || (temp.default = {})
- // temp.route = from
- // }
- // if ((temp = to.matched) && (temp = temp[temp.length - 1])) {
- // temp = temp.props as any
- // temp = temp.default || (temp.default = {})
- // temp.route = to
- // }
+ // 为每个路由对应的组件添加 props:route (路由配置props只允许对象 不然报错给你看)
+ if ((temp = to.matched) && (temp = temp[temp.length - 1])) {
+ temp = temp.props as any
+ temp = temp.default || (temp.default = {})
+ ;(!temp.route || temp.route.fullPath !== to.fullPath) && (temp.route = to)
+ }
next()
})
diff --git a/src/pages/other/store/index.ts b/src/pages/other/store/index.ts
index 5d38d41..2bd532d 100644
--- a/src/pages/other/store/index.ts
+++ b/src/pages/other/store/index.ts
@@ -8,7 +8,8 @@ import Vuex from 'vuex'
import { IUser } from './modules/user'
import { IPrefer } from './modules/prefer'
import { IDynamic } from './modules/dynamic'
-import { IDownloadManager } from './modules/downloadManager'
+import { IFile } from './modules/file'
+import { IImage } from './modules/image'
Vue.use(Vuex) // 只能全局注册
@@ -19,5 +20,6 @@ export default new Vuex.Store<{
user: IUser
prefer: IPrefer
dynamic: IDynamic
- downloadManager: IDownloadManager
+ file: IFile
+ image: IImage
}>({})
diff --git a/src/pages/other/store/modules/downloadManager.ts b/src/pages/other/store/modules/downloadManager.ts
deleted file mode 100644
index 2ceb443..0000000
--- a/src/pages/other/store/modules/downloadManager.ts
+++ /dev/null
@@ -1,346 +0,0 @@
-/** see: https://championswimmer.in/vuex-module-decorators
- * @Description: 下载管理
- * @Author: 毛瑞
- * @Date: 2020-02-11 14:43:12
- */
-import {
- VuexModule,
- Module,
- getModule,
- Mutation,
- Action,
-} from 'vuex-module-decorators'
-import Message from 'element-ui/lib/message'
-// ↑因scss注入问题,应在合适的地方引入组件对应的scss,比如页面入口
-import { free } from '@/utils/downloader'
-import getKey from '@/utils/getKey'
-import { PREFER, hook } from './prefer'
-import store from '..'
-
-export const enum STATE {
- /** 初始化 */
- init = '',
- /** 等待下载 */
- wait = 'a',
- /** 下载中 */
- download = 'b',
- /** 已暂停 */
- pause = 'c',
- /** 下载成功 */
- success = 'd',
- /** 下载失败 */
- failed = 'e',
- /** 已保存 */
- saved = 'f',
-}
-export interface IParams {
- /** 文件名 */
- name: string
- /** 下载地址 */
- url: string
- /** 查询参数 */
- query?: IObject
-}
-/** 下载任务
- */
-export interface ITask extends IParams {
- /** 任务id */
- id: string
- /** 当前状态 */
- state: STATE
-}
-/** 下载管理 */
-export interface IDownloadManager {
- /** 下载配置 */
- config: typeof PREFER.download.config
- /** 任务列表 */
- tasks: ITask[]
- /** 等待下载数量 */
- wait: number
- /** 下载中数量 */
- download: number
- /** 已暂停数量 */
- pause: number
- /** 下载成功数量 */
- success: number
- /** 下载失败数量 */
- failed: number
- /** 下载进度(-1表示无任务) [0, 100]向下取整 下载成功/(下载成功 + 下载中 + 等待下载) */
- progress: number
-}
-
-/** 下载管理本地信息 */
-const DOWNLOAD =
- PREFER.download ||
- (PREFER.download = {
- config: { max: 3, queue: 10, alive: 30 * 1000 },
- tasks: [],
- })
-// ObjectURL 缓存
-const CACHE: IObject = {}
-/** 状态与stroke键映射 */
-const MAP_KEY: { [key in STATE]?: string } = {
- [STATE.wait]: 'wait',
- [STATE.download]: 'download',
- [STATE.pause]: 'pause',
- [STATE.success]: 'success',
- [STATE.failed]: 'failed',
-}
-
-/** 下载管理
- */
-@Module({ dynamic: true, namespaced: true, name: 'downloadManager', store })
-class DownloadManager extends VuexModule implements IDownloadManager {
- /// State & Getter(public) ///
- config = DOWNLOAD.config
- tasks: ITask[] = []
- wait = 0
- download = 0
- pause = 0
- success = 0
- failed = 0
- progress = -1
-
- constructor(module: DownloadManager) {
- super(module)
- // 初始化恢复下载
- const tasks = DOWNLOAD.tasks as ITask[]
- this.tasks = tasks
- if (tasks.length) {
- const state = DOWNLOAD.config.auto ? STATE.download : STATE.pause
- for (const task of tasks) {
- task.state = STATE.init
- task.id = getKey('t')
- this.setState(task, state)
- }
- }
- }
-
- private updateProgress() {
- const denominator = this.success + this.download + this.wait
- this.progress = denominator ? ((100 * this.success) / denominator) | 0 : -1
- }
-
- /// Mutation 无法调用/commit 必须通过Action ///
- @Mutation
- protected CONFIG(config: IDownloadManager['config']) {
- Object.assign(DOWNLOAD.config, config)
- this.config = DOWNLOAD.config
- }
-
- @Mutation
- protected ADD_TASK(task: IParams) {
- const tasks = this.tasks
- let isSame
- let item: ITask
- for (item of tasks) {
- // diff任务是否已存在
- if (task.name === item.name && task.url === item.url) {
- if (task.query !== item.query) {
- if ((isSame = task.query && item.query)) {
- // 查询参数只考虑一级
- for (const key in task.query) {
- if (task.query[key] !== (item.query as IObject)[key]) {
- isSame = false
- }
- }
- }
-
- if (!isSame) {
- continue
- }
- }
-
- Message.warning(`下载任务【${item.name}】已存在`)
- return item.id
- }
- }
-
- item = task as ITask
- item.id = getKey('t')
- item.state = STATE.init
- tasks.push(item)
- this.STATE(item)
- return item.id
- }
-
- @Mutation
- protected RM_TASK(task: ITask | number | string) {
- const tasks = this.tasks
- let id: any
- let index: number | undefined
- switch (typeof task) {
- case 'number':
- if (!(task = tasks[(index = task)])) {
- return
- }
- id = task.id
- break
- case 'string':
- id = task
- if ((index = tasks.findIndex(item => id === (task = item).id)) === -1) {
- return
- }
- break
- default:
- id = task.id
- if ((index = tasks.findIndex(item => id === item.id)) === -1) {
- return
- }
- }
- tasks.splice(index, 1) // 移除任务
- if ((id = CACHE[id])) {
- // 释放文件
- free(id.href)
- delete CACHE[id]
- }
- // 更新数据
- ;(id = MAP_KEY[(task as ITask).state]) &&
- (this as any)[id] &&
- (this as any)[id]--
- this.updateProgress()
- }
-
- /// Mutation 无法调用/commit 必须通过Action ///
- @Mutation
- protected STATE(task: ITask | number | string, state?: STATE) {
- const tasks = this.tasks
- switch (typeof task) {
- case 'number':
- if (!(task = tasks[task])) {
- return
- }
- break
- case 'string':
- if ((task = tasks.findIndex(item => item.id === task)) === -1) {
- return
- }
- break
- }
-
- const TASK = task as ITask
- if (state) {
- // 设置状态
- switch (state) {
- case STATE.wait:
- // 暂停
- break
- case STATE.download:
- // 下载
- break
- }
- return
- }
-
- // 自动设置状态
- switch (TASK.state) {
- case STATE.wait:
- // 插队下载
- break
- case STATE.download:
- // 暂停
- break
- case STATE.pause:
- // 继续
- break
- case STATE.success:
- // 保存
- break
- case STATE.failed:
- // 重新下载
- break
- // case STATE.saved:
- // break
- }
- }
-
- /// Action ///
- /** 更新设置
- * @param {IDownloadManager['config']} config 设置
- */
- @Action
- configure(config: IDownloadManager['config']) {
- // this.context.commit('DYNAMIC', dynamic) // 非动态模块
- this.CONFIG(config) // 动态模块
- }
-
- /** 添加任务
- * @param {IParams} 任务信息
- *
- * @returns {string} 任务id
- */
- @Action
- addTask(task: IParams) {
- return this.ADD_TASK(task)
- }
-
- /** 批量添加任务
- * @param {IParams[]} 任务信息数组
- *
- * @returns {string[]} 对应任务id数组
- */
- @Action
- addTasks(tasks: IParams[]) {
- const ids: string[] = []
- for (const task of tasks) {
- ids.push(this.ADD_TASK(task))
- }
- return ids
- }
-
- /** 移除任务
- * @param {task|number|string} 任务对象/索引/id
- */
- @Action
- removeTask(task: ITask | number | string) {
- this.RM_TASK(task)
- }
-
- /** 批量移除任务 (不传参数则移除全部任务)
- * @param {(task|number|string)[]} [可选]任务对象/索引/id数组
- */
- @Action
- removeTasks(tasks?: (ITask | number | string)[]) {
- tasks || (tasks = this.tasks)
- for (const task of tasks) {
- this.RM_TASK(task)
- }
- }
-
- /** 修改任务状态, 未设置状态则自动根据当前任务状态设置
- * @param {task|number|string} 任务对象/索引/id
- * @param {STATE} state [可选]设置任务状态
- */
- @Action
- setState(task: ITask | number | string, state?: STATE) {
- this.STATE(task, state)
- }
-
- /** 批量修改任务状态, 未设置状态则自动根据当前任务状态设置
- * @param {(task|number|string)[]} 任务对象/索引/id数组
- * @param {STATE} state [可选]设置任务状态
- */
- @Action
- setStates(tasks: (ITask | number | string)[], state?: STATE) {
- for (const task of tasks) {
- this.STATE(task, state)
- }
- }
-}
-
-hook(() => {
- const tasks = DOWNLOAD.tasks as ITask[] // 不保留已保存的任务
-
- for (let i = 0, len = tasks.length, task; i < len; i++) {
- task = tasks[i]
- if (task.state === STATE.saved) {
- tasks.splice(i--, 1)
- len--
- } else {
- delete task.id
- delete task.state
- }
- }
-})
-
-export default getModule(DownloadManager)
diff --git a/src/pages/other/store/modules/dynamic.ts b/src/pages/other/store/modules/dynamic.ts
index 392511c..1649754 100644
--- a/src/pages/other/store/modules/dynamic.ts
+++ b/src/pages/other/store/modules/dynamic.ts
@@ -4,7 +4,6 @@ import {
Module,
getModule,
Mutation,
- Action,
} from 'vuex-module-decorators'
import store from '../'
@@ -25,9 +24,9 @@ class Dynamic extends VuexModule implements IDynamic {
/// State & Getter(public) ///
dynamic = true
- /// Mutation 无法调用/commit 必须通过Action ///
+ /// Mutation ///
@Mutation
- private DYNAMIC(dynamic: boolean) {
+ SET_DYNAMIC(dynamic: boolean) {
this.dynamic = dynamic
}
@@ -35,10 +34,10 @@ class Dynamic extends VuexModule implements IDynamic {
/** 设置动态
* @param {Boolean} dynamic 是否动态
*/
- @Action
- setDynamic(dynamic: boolean) {
- this.DYNAMIC(dynamic) // 动态模块可以不用 context.commit
- }
+ // @Action
+ // setDynamic(dynamic: boolean) {
+ // this.DYNAMIC(dynamic) // 动态模块可以不用 context.commit
+ // }
}
export default getModule(Dynamic)
diff --git a/src/pages/other/store/modules/file.ts b/src/pages/other/store/modules/file.ts
new file mode 100644
index 0000000..cdad698
--- /dev/null
+++ b/src/pages/other/store/modules/file.ts
@@ -0,0 +1,21 @@
+/** see: https://championswimmer.in/vuex-module-decorators
+ * @Description: 文件下载管理
+ * @Author: 毛瑞
+ * @Date: 2020-02-11 14:43:12
+ */
+import { Module, getModule } from 'vuex-module-decorators'
+import RootFile, { ILocal } from '@/store/file'
+
+import { PREFER } from './prefer'
+import store from '..'
+
+export * from '@/store/file'
+
+/** 文件下载管理 */
+@Module({ dynamic: true, namespaced: true, name: 'file', store })
+class File extends RootFile {}
+
+// 覆盖本地存储信息
+File.prototype.local = PREFER.file || (PREFER.file = {} as ILocal)
+
+export default getModule(File)
diff --git a/src/pages/other/store/modules/image.ts b/src/pages/other/store/modules/image.ts
new file mode 100644
index 0000000..c2decff
--- /dev/null
+++ b/src/pages/other/store/modules/image.ts
@@ -0,0 +1,21 @@
+/** see: https://championswimmer.in/vuex-module-decorators
+ * @Description: 图片下载内存管理
+ * @Author: 默认
+ * @Date: 2020-04-20 11:02:15
+ */
+import { Module, getModule } from 'vuex-module-decorators'
+import RootImage, { ILocal } from '@/store/image'
+
+import { PREFER } from './prefer'
+import store from '..'
+
+export * from '@/store/image'
+
+/** 文件下载管理 */
+@Module({ dynamic: true, namespaced: true, name: 'image', store })
+class Image extends RootImage {}
+
+// 覆盖本地存储信息
+Image.prototype.config = PREFER.img || (PREFER.img = {} as ILocal)
+
+export default getModule(Image)
diff --git a/src/pages/other/store/modules/prefer.ts b/src/pages/other/store/modules/prefer.ts
index 33bc8dc..0a5cb45 100644
--- a/src/pages/other/store/modules/prefer.ts
+++ b/src/pages/other/store/modules/prefer.ts
@@ -3,14 +3,15 @@
* @Author: 毛瑞
* @Date: 2019-06-19 15:16:19
*/
-import { Module, Mutation, Action, getModule } from 'vuex-module-decorators'
+import { Module, Mutation, getModule } from 'vuex-module-decorators'
import RootPrefer, {
IPrefer as IRootPrefer,
IPREFER as IRootPREFER,
PREFER as ROOT_PREFER,
hook,
} from '@/store/prefer'
-import { IParams } from './downloadManager'
+import { ILocal as IFile } from './file'
+import { ILocal as IImage } from './image'
import store from '..'
/** 偏好管理 */
@@ -19,27 +20,15 @@ export interface IPrefer extends IRootPrefer {
foo: string
}
-/** 本地存储单例对象 【应确保本网站(所有html)存储键值不会冲突】 */
+/** 【全部偏好设置】 【应确保本网站(所有html)存储键值不会冲突】 */
export interface IPREFER extends IRootPREFER {
// 扩展存储键
other: {
foo: string
- /** 下载管理相关 */
- download: {
- /** 下载配置 */
- config: {
- /** 同时下载数量(默认3) */
- max: number
- /** 下载队列大小(默认10) */
- queue: number
- /** 自动移除已保存任务时间间隔(ms) */
- alive: number
- /** 自动下载上次未完成任务(默认false) */
- auto?: boolean
- }
- /** 待恢复任务 */
- tasks: IParams[]
- }
+ /** 文件下载管理相关 */
+ file: IFile
+ /** 图片下载管理相关 */
+ img: IImage
}
}
@@ -52,20 +41,13 @@ const PREFER = RP.other || (RP.other = { foo: 'foo' } as IPREFER['other'])
class Prefer extends RootPrefer implements IPrefer {
/// State & Getter(public) ///
foo = PREFER.foo
- /// Mutation 无法调用/commit 必须通过Action ///
+ /// Mutation ///
@Mutation
- private FOO(foo: string) {
+ SET_FOO(foo: string) {
this.foo = foo
}
/// Action ///
- /** 设置foo
- * @param {string} foo
- */
- @Action
- setFoo(foo: string) {
- this.FOO(foo) // 动态模块可以不用 context.commit
- }
}
// hook(() => {
diff --git a/src/store/file.ts b/src/store/file.ts
new file mode 100644
index 0000000..f8e5ba3
--- /dev/null
+++ b/src/store/file.ts
@@ -0,0 +1,692 @@
+/** see: https://championswimmer.in/vuex-module-decorators
+ * @Description: 文件下载管理
+ * @Author: 毛瑞
+ * @Date: 2020-02-11 14:43:12
+ */
+import { VuexModule, Mutation } from 'vuex-module-decorators'
+
+import getId from '@/utils/getKey'
+import { isEqual, isNumber } from '@/utils'
+import { setDefault } from '@/utils/clone'
+import sort, { Compare, ASC, DES } from '@/utils/sort'
+import {
+ download,
+ save,
+ free,
+ IPromiseCancelable,
+ IFile as IFileInfo,
+} from '@/utils/downloader'
+
+import { hook } from './prefer'
+
+/** 任务状态 */
+export const enum STATE {
+ /** 已移除(逻辑移除, 并释放内存) */
+ del = 0,
+ /** 等待下载 */
+ wait = 1,
+ /** 下载中 */
+ loading = 2,
+ /** 已暂停 */
+ pause = 3,
+ /** 下载失败 */
+ failed = 4,
+ /** 下载成功 */
+ success = 5,
+ /** 已保存 */
+ saved = 6,
+}
+/** 任务参数 */
+export interface IParams {
+ /** 下载地址 */
+ url: string
+ /** 查询参数 */
+ query?: IObject
+ /** 文件名 */
+ name?: string
+ /** 文件类型 */
+ type?: string
+}
+/** 任务 */
+export interface ITask extends IParams {
+ /** 任务id */
+ id: string
+ /** 当前状态 */
+ state: STATE
+ /** 请求(缓存)标识 */
+ key: string
+}
+/** 文件下载管理相关 */
+export interface ILocal {
+ /** 下载配置 */
+ conf: {
+ /** 【正整数】同时下载数量(默认3) */
+ max: number
+ /** 【正整数】下载队列大小(默认10) */
+ size: number
+ /** 【正整数】最大内存占用(bytes, 默认 128 * 1024 * 1024 = = 2^27 = 128M) */
+ RAM: number
+ /** 【正整数】自动移除已保存任务时间间隔(ms 默认 2^19 = 524,288) */
+ alive?: number
+ /** 自动下载上次未完成任务(默认false) */
+ auto?: boolean
+ }
+ /** 待恢复任务 */
+ tasks: IParams[]
+}
+/** 文件下载管理 */
+export interface IFile {
+ /** 下载配置 */
+ config: ILocal['conf']
+ /** 任务列表 */
+ tasks: ITask[]
+ /** 等待下载数量 */
+ wait: number
+ /** 下载中数量 */
+ loading: number
+ /** 已暂停数量 */
+ pause: number
+ /** 下载失败数量 */
+ failed: number
+ /** 下载成功数量 */
+ success: number
+ /** 下载进度(-1表示无任务)[0, 100] 下载成功/(下载成功 + 下载中 + 等待下载) */
+ progress: number
+ /** 内存使用(已下载的文件) */
+ RAM: number
+ /** 内存使用百分比(已下载的文件) */
+ usage: number
+}
+type statAttr = 'wait' | 'loading' | 'pause' | 'failed' | 'success'
+
+/** 状态统计映射 */
+const MAP_KEY = {
+ [STATE.wait]: 'wait',
+ [STATE.loading]: 'loading',
+ [STATE.pause]: 'pause',
+ [STATE.failed]: 'failed',
+ [STATE.success]: 'success',
+} as { [key in STATE]: statAttr }
+/** 默认配置 */
+const DEFAULT_CONFIG: ILocal = {
+ conf: { max: 3, size: 10, RAM: 2 << 26, alive: 2 << 18 },
+ tasks: [],
+}
+/** 文件下载缓存 */
+const CACHE: IObject<{
+ /** 下载Promise */
+ p: IPromiseCancelable
+ /** 下载文件信息 */
+ f?: IFileInfo
+ /** setTimeout计时器 */
+ t?: number
+}> = {}
+function getTaskIndex(tasks: ITask[], task: ITask | number | string) {
+ if (isNumber(task)) {
+ if (!tasks[task]) {
+ return -1
+ }
+ } else {
+ task = (task as ITask).id || (task as string)
+ task = tasks.findIndex(item => task === item.id)
+ }
+
+ return task
+}
+/** task:
+ *
+ * sting: 只要存在key为该值的就不移除
+ *
+ * ITask: 只要存在其他key为当前key的就不删除
+ */
+function removeCache(tasks: ITask[], task: ITask | string) {
+ const key = (task as ITask).key || (task as string)
+ const cache = CACHE[key]
+ if (cache) {
+ const id = (task as ITask).id
+ for (task of tasks) {
+ if (key === task.key && id !== task.id) {
+ return 0
+ }
+ }
+
+ clearTimeout(cache.t)
+ cache.p.cancel()
+ delete CACHE[key]
+ if (cache.f) {
+ free(cache.f)
+ return cache.f.size
+ }
+ }
+
+ return 0
+}
+
+/// for 互相调用 ///
+function next(this: IFile, updateProgressOnly?: boolean) {
+ let temp
+ const RAM = this.config.RAM
+
+ if (!updateProgressOnly) {
+ const tasks = this.tasks
+
+ const shouldRemove = this.RAM > RAM
+ const tasksRemoveable: ITask[] = []
+
+ let state
+ for (temp of tasks) {
+ state = temp.state
+ if (!updateProgressOnly && state === STATE.wait) {
+ SET_STATE.call(this, { task: temp, state: STATE.loading })
+ updateProgressOnly = true
+ if (!shouldRemove) {
+ return true
+ }
+ }
+
+ shouldRemove && state === STATE.saved && tasksRemoveable.push(temp)
+ }
+
+ if ((temp = tasksRemoveable.length)) {
+ while (temp-- && this.RAM > RAM) {
+ REMOVE_TASK.call(this, { task: tasksRemoveable[temp] })
+ }
+ return true
+ }
+ }
+
+ this.usage = (100 * this.RAM) / RAM
+ temp = this.success + this.loading + this.wait
+ this.progress = temp ? (100 * this.success) / temp : -1
+}
+function ADD_TASK(
+ this: IFile,
+ payload: IParams | { task: IParams; state?: STATE.pause | STATE.loading }
+): ITask {
+ let task
+ let state
+ if ((payload as any).task) {
+ task = (payload as any).task
+ state = (payload as any).state
+ } else {
+ task = payload
+ }
+
+ const tasks = this.tasks
+ let item
+ let key
+ for (item of tasks) {
+ if (task.url === item.url && isEqual(task.query, item.query)) {
+ if (task.name === item.name && task.type === item.type) {
+ return item
+ }
+
+ key = item.key
+ break
+ }
+ }
+
+ item = { state: STATE.del } as ITask // for watch
+ tasks.push(item)
+ item.id = getId('f')
+ item.key = key || task.id
+ item.query = task.query
+ setDefault(item, task)
+ SET_STATE.call(this, { task: item, state: state || STATE.loading })
+ return item
+}
+function SET_STATE(
+ this: IFile,
+ {
+ task,
+ state,
+ }: {
+ task: ITask | number | string
+ state: STATE.wait | STATE.pause | STATE.loading
+ }
+) {
+ const tasks = this.tasks
+ if (!(task = tasks[getTaskIndex(tasks, task)]) || state === task.state) {
+ return
+ }
+
+ // 工具人
+ let temp
+ temp = MAP_KEY[task.state]
+ temp && this[temp as statAttr] && this[temp as statAttr]--
+ // 设置状态
+ switch (state) {
+ case STATE.wait:
+ case STATE.pause:
+ this.RAM -= removeCache(tasks, task)
+ temp = task.state
+ task.state = state
+
+ if (state === STATE.wait) {
+ this.wait++
+ break
+ }
+
+ this.pause++
+ return next.call(this, temp !== STATE.loading)
+
+ case STATE.loading:
+ if ((temp = CACHE[task.key]) && temp.f) {
+ clearTimeout(temp.t)
+ this.config.alive &&
+ (temp.t = setTimeout(() => {
+ REMOVE_TASK.call(this, { task })
+ }, this.config.alive))
+ if (task.state < STATE.saved) {
+ task.state = STATE.success
+ this.success++
+ }
+ } else if (this.loading < this.config.max && this.usage < 1) {
+ ;(temp = download(task.url, task.query, task.name))
+ .then(fileInfo => {
+ CACHE[(task as ITask).key].f = fileInfo
+ ;(task as ITask).state = STATE.success
+ this.RAM += fileInfo.size
+ this.success++
+ })
+ .catch(() => {
+ ;(task as ITask).state = STATE.failed
+ this.failed++
+ })
+ .finally(() => {
+ this.loading--
+ next.call(this)
+ })
+ CACHE[task.key] = { p: temp }
+ task.state = state
+ this.loading++
+ } else {
+ this.RAM -= removeCache(tasks, task)
+ task.state = STATE.wait
+ this.wait++
+ }
+ break
+ }
+ next.call(this, true)
+}
+function REMOVE_TASK(
+ this: IFile,
+ {
+ task,
+ force,
+ state,
+ }: {
+ task: ITask | number | string
+ force?: boolean
+ state?: STATE
+ }
+) {
+ const tasks = this.tasks
+ let temp: any = getTaskIndex(tasks, task) // 工具人
+ if (!(task = tasks[temp]) || (isNumber(state) && state !== task.state)) {
+ return
+ }
+
+ if ((state = task.state) === STATE.del) {
+ force && tasks.splice(temp, 1)
+ return
+ }
+
+ this.RAM -= removeCache(tasks, task)
+ task.state = STATE.del
+ force && tasks.splice(temp, 1)
+
+ state &&
+ (temp = MAP_KEY[state]) &&
+ this[temp as statAttr] &&
+ this[temp as statAttr]--
+ next.call(this, state !== STATE.loading)
+}
+
+/** 文件下载管理 */
+export default class File extends VuexModule implements IFile {
+ /// State & Getter(public) ///
+ config: ILocal['conf']
+ tasks: ITask[]
+ wait = 0
+ loading = 0
+ pause = 0
+ failed = 0
+ success = 0
+ progress = -1
+ RAM = 0
+ usage = 0
+
+ /** 本地存储信息 */
+ local = {} as ILocal
+ constructor(module: File) {
+ super(module)
+
+ const local = setDefault(this.local, DEFAULT_CONFIG)
+ this.config = local.conf
+ const tasks = (this.tasks = local.tasks as ITask[])
+
+ if (tasks.length) {
+ const state = this.config.auto ? STATE.loading : STATE.pause
+ let task
+ for (task of tasks) {
+ task.id = task.key = getId('f')
+ this.SET_STATE({ task, state })
+ }
+ }
+
+ hook(() => {
+ const tasks = this.tasks
+ for (let i = 0, len = tasks.length, task; i < len; i++) {
+ task = tasks[i]
+ if (!task.state || task.state === STATE.saved) {
+ tasks.splice(i--, 1)
+ len--
+ } else {
+ delete task.id
+ delete task.key
+ delete task.state
+ }
+ }
+ const local = this.local
+ local.tasks = tasks
+ local.conf = this.config
+ })
+ }
+
+ /// Mutation ///
+ /** 更新设置
+ * @param config 设置
+ */
+ @Mutation
+ CONFIG(config: IFile['config']) {
+ config = Object.assign(this.config, config)
+ const tasks = this.tasks
+
+ const max = config.max
+ let loading = max - this.loading
+
+ const RAM = config.RAM
+ const remove = tasks.length - config.size
+ const shouldRemove = remove > 0 || this.RAM > RAM
+
+ if (loading || shouldRemove) {
+ const shouldPause = loading < 0
+ const tasksRemoveable: ITask[] = []
+
+ let task
+ let state
+ let count = 0
+ for (task of tasks) {
+ state = task.state
+ if (shouldPause) {
+ state === STATE.loading &&
+ (count < max
+ ? count++
+ : SET_STATE.call(this, { task, state: STATE.wait }))
+ } else if (loading && state === STATE.wait) {
+ SET_STATE.call(this, { task, state: STATE.loading })
+ if (!--loading && !shouldRemove) {
+ return
+ }
+ }
+
+ shouldRemove && state === STATE.saved && tasksRemoveable.push(task)
+ }
+
+ // 不用pop
+ count = 0
+ state = tasksRemoveable.length
+ while (count < state && (count < remove || this.RAM > RAM)) {
+ REMOVE_TASK.call(this, { task: tasksRemoveable[state - ++count] })
+ }
+ }
+ }
+
+ /** 添加任务
+ * @param payload 任务信息
+ *
+ * @returns 任务(直接修改原对象)
+ */
+ @Mutation
+ ADD_TASK(payload: {
+ task: IParams | { task: IParams; state?: STATE.pause | STATE.loading }
+ callback: (task: ITask) => void
+ }) {
+ payload.callback(ADD_TASK.call(this, payload.task))
+ }
+
+ /** 批量添加任务
+ * @param payload 任务信息
+ *
+ * @returns 对应任务数组(直接修改原数组里的对象)
+ */
+ @Mutation
+ ADD_TASKS(payload: {
+ tasks:
+ | (IParams | { task: IParams; state?: STATE.pause | STATE.loading })[]
+ | {
+ tasks: (
+ | IParams
+ | { task: IParams; state?: STATE.pause | STATE.loading }
+ )[]
+ state?: STATE.pause | STATE.loading
+ }
+ callback: (tasks: ITask[]) => any
+ }) {
+ let tasks
+ let state: any
+ if (Array.isArray(payload.tasks)) {
+ tasks = payload.tasks
+ } else {
+ tasks = payload.tasks.tasks
+ state = payload.tasks.state
+ }
+
+ return payload.callback(
+ tasks.map(task =>
+ ADD_TASK.call(
+ this,
+ (task as any).task ? (task as any) : { task, state }
+ )
+ )
+ )
+ }
+
+ /** 修改任务状态, 只支持暂停/下载
+ * @param payload 任务信息
+ *
+ * @returns 任务
+ */
+ @Mutation
+ SET_STATE(payload: {
+ task: ITask | number | string
+ state: STATE.wait | STATE.pause | STATE.loading
+ }) {
+ SET_STATE.call(this, payload)
+ }
+
+ /** 批量修改任务状态, 只支持暂停/下载
+ * @param payload 任务信息
+ *
+ * @returns 对应任务数组
+ */
+ @Mutation
+ SET_STATES(
+ payload:
+ | (
+ | {
+ task: ITask | number | string
+ state: STATE.pause | STATE.loading
+ }
+ | ITask
+ | number
+ | string
+ )[]
+ | {
+ tasks: (
+ | {
+ task: ITask | number | string
+ state: STATE.pause | STATE.loading
+ }
+ | ITask
+ | number
+ | string
+ )[]
+ state?: STATE.pause | STATE.loading
+ }
+ | STATE.pause
+ | STATE.loading
+ ) {
+ let state: any
+ let tasks
+ if (Array.isArray(payload)) {
+ tasks = payload
+ } else if (isNumber(payload)) {
+ state = payload
+ tasks = this.tasks
+ } else {
+ tasks = payload.tasks
+ state = payload.state
+ }
+
+ let task
+ for (task of tasks) {
+ SET_STATE.call(this, (task as any).task ? (task as any) : { task, state })
+ }
+ }
+
+ /** 移/删除任务
+ * @param payload 任务信息
+ *
+ * @returns 任务
+ */
+ @Mutation
+ REMOVE_TASK(payload: {
+ task: ITask | number | string
+ force?: boolean
+ state?: STATE
+ }) {
+ REMOVE_TASK.call(this, payload)
+ }
+
+ /** 批量移/删除任务
+ * @param payload 任务信息
+ *
+ * @returns 对应任务数组
+ */
+ REMOVE_TASKS(
+ payload?:
+ | (
+ | ITask
+ | number
+ | string
+ | {
+ task: ITask | number | string
+ force?: boolean
+ }
+ )[]
+ | {
+ tasks: (
+ | ITask
+ | number
+ | string
+ | {
+ task: ITask | number | string
+ force?: boolean
+ }
+ )[]
+ force?: boolean
+ state?: STATE
+ }
+ | STATE
+ ) {
+ let tasks
+ let force: any
+ let state: any
+ if (Array.isArray(payload)) {
+ tasks = payload
+ } else if (!payload || isNumber(payload)) {
+ state = payload
+ tasks = this.tasks
+ } else {
+ tasks = payload.tasks
+ force = payload.force
+ state = payload.state
+ }
+
+ let task
+ for (task of tasks) {
+ REMOVE_TASK.call(
+ this,
+ (task as any).task ? (task as any) : { task, force, state }
+ )
+ }
+ }
+
+ /** 保存文件
+ * @param {ITask|number|string} task 任务/索引/id
+ */
+ @Mutation
+ SAVE(task: ITask | number | string) {
+ const tasks = this.tasks
+ if (!(task = tasks[getTaskIndex(tasks, task)])) {
+ return
+ }
+
+ const cache = CACHE[task.key]
+ if (cache) {
+ let alive
+ switch (task.state) {
+ case STATE.success:
+ task.state = STATE.saved
+ this.success--
+ // eslint-disable-next-line no-fallthrough
+ case STATE.saved:
+ save(cache.f as IFileInfo)
+ clearTimeout(cache.t)
+ ;(alive = this.config.alive) &&
+ (cache.t = setTimeout(() => {
+ REMOVE_TASK.call(this, { task })
+ }, alive))
+ next.call(this, this.usage <= 1)
+ break
+ }
+ }
+ }
+
+ /** 排序下载任务
+ * @param {String} field 排序字段 支持文件名、文件类型、下载状态、任务添加顺序【默认】
+ * @param {String|Compare} method 排序方法 默认升序
+ */
+ @Mutation
+ SORT(payload?: {
+ field?: 'name' | 'type' | 'state' | 'id'
+ method?: 'ASC' | 'DES' | Compare
+ }) {
+ let { field = 'id', method = 'ASC' } = payload || {}
+
+ switch (method) {
+ case 'ASC':
+ method = ASC
+ // eslint-disable-next-line no-fallthrough
+ case 'DES':
+ method = DES
+ // eslint-disable-next-line no-fallthrough
+ default:
+ this.tasks = sort(this.tasks.slice(), (taskPrev, taskNext) =>
+ field === 'id'
+ ? (method as Compare)(
+ +taskPrev.id.substring(1),
+ +taskNext.id.substring(1)
+ )
+ : (method as Compare)(
+ taskPrev[field as keyof ITask],
+ taskNext[field as keyof ITask]
+ )
+ )
+ }
+ }
+
+ /// Action ///
+}
diff --git a/src/store/image.ts b/src/store/image.ts
new file mode 100644
index 0000000..28c3cfd
--- /dev/null
+++ b/src/store/image.ts
@@ -0,0 +1,309 @@
+/** see: https://championswimmer.in/vuex-module-decorators
+ * @Description: 图片下载内存管理
+ * @Author: 默认
+ * @Date: 2020-04-20 11:02:15
+ */
+import { VuexModule, Mutation } from 'vuex-module-decorators'
+
+import { isEqual } from '@/utils'
+import getId from '@/utils/getKey'
+import { setDefault } from '@/utils/clone'
+import {
+ download,
+ free,
+ IPromiseCancelable,
+ IFile as IFileInfo,
+} from '@/utils/downloader'
+
+/** 任务状态 */
+export const enum STATE {
+ /** 已因栈/内存溢出丢弃 */
+ drop = 0,
+ /** 等待下载 */
+ wait = 1,
+ /** 下载中 */
+ loading = 2,
+ /** 下载失败 */
+ failed = 3,
+ /** 下载成功 */
+ success = 4,
+}
+/** 任务参数 */
+export interface IParams {
+ /** 下载地址 */
+ url: string
+ /** 查询参数 */
+ query?: IObject
+}
+/** 任务 */
+export interface ITask extends IParams {
+ /** 任务id */
+ id: string
+ /** 当前状态 */
+ state: STATE
+ /** 图片地址 */
+ src?: string
+ /** setTimeout计时器 */
+ t?: number
+}
+/** 图片下载管理相关 */
+export interface ILocal {
+ /** 【正整数】同时下载数量(默认6) */
+ max: number
+ /** 【正整数】最大内存占用(bytes, 默认 256 * 1024 * 1024 = = 2^28 = 256M) */
+ RAM: number
+ /** 【正整数】自动移除已下载任务时间间隔(ms 默认 2^18 = 262,144) */
+ alive?: number
+}
+/** 图片下载内存管理 */
+export interface IImage {
+ /** 下载配置 */
+ config: ILocal
+ /** 任务列表 */
+ tasks: ITask[]
+ /** 内存使用(已下载的文件) */
+ RAM: number
+ /** 内存使用百分比(已下载的文件) */
+ usage: number
+}
+
+/** 默认配置 */
+const DEFAULT_CONFIG: ILocal = {
+ max: 6,
+ RAM: 2 << 27,
+ alive: 2 << 17,
+}
+/** drop的任务自动移除间隔 */
+const DROP_TIME = 2 << 15
+/** 图片下载缓存 */
+const CACHE: IObject<{
+ /** 下载Promise */
+ p: IPromiseCancelable
+ /** 下载文件信息 */
+ f?: IFileInfo
+ /** setTimeout计时器 */
+ t?: number
+}> = {}
+function removeCache(task: ITask) {
+ const cache = CACHE[task.id]
+ if (cache) {
+ clearTimeout(cache.t)
+ cache.p.cancel()
+ delete CACHE[task.id]
+ if (cache.f) {
+ free(cache.f)
+ return cache.f.size
+ }
+ }
+
+ return 0
+}
+
+/// for 互相调用 ///
+function next(this: Image, updateUsageOnly?: boolean) {
+ const RAM = this.config.RAM
+
+ if (!updateUsageOnly) {
+ const tasks = this.tasks
+
+ const shouldRemove = this.RAM > RAM
+ const tasksRemoveable: ITask[] = []
+
+ let temp
+ let state
+ for (temp of tasks) {
+ state = temp.state
+ if (!updateUsageOnly && state === STATE.wait) {
+ setState.call(this, temp, STATE.loading)
+ updateUsageOnly = true
+ if (!shouldRemove) {
+ return true
+ }
+ }
+
+ shouldRemove && state === STATE.success && tasksRemoveable.push(temp)
+ }
+
+ if ((temp = tasksRemoveable.length)) {
+ while (temp-- && this.RAM > RAM) {
+ removeTask.call(this, tasksRemoveable[temp])
+ }
+ return true
+ }
+ }
+
+ this.usage = (100 * this.RAM) / RAM
+}
+function setState(this: Image, task: ITask, state: STATE.wait | STATE.loading) {
+ if (task.t) {
+ clearTimeout(task.t)
+ task.t = 0
+ }
+ if (state === task.state) {
+ return
+ }
+
+ const alive = this.config.alive
+ // 工具人
+ let temp
+ // 设置状态
+ switch (state) {
+ case STATE.wait:
+ task.state = state
+ this.RAM -= removeCache(task)
+ next.call(this, true)
+ break
+
+ case STATE.loading:
+ if ((temp = CACHE[task.id]) && temp.f) {
+ clearTimeout(temp.t)
+ alive &&
+ (temp.t = setTimeout(() => {
+ removeTask.call(this, task)
+ }, alive))
+ task.src = temp.f.src
+ task.state = STATE.success
+ } else if (this.loading < this.config.max && this.usage < 1) {
+ ;(temp = download(task.url, task.query))
+ .then(fileInfo => {
+ temp = CACHE[task.id]
+ temp.f = fileInfo
+ alive &&
+ (temp.t = setTimeout(() => {
+ removeTask.call(this, task)
+ }, alive))
+ task.src = fileInfo.src
+ task.state = STATE.success
+ this.RAM += fileInfo.size
+ })
+ .catch(() => {
+ task.state = STATE.failed
+ })
+ .finally(() => {
+ this.loading--
+ next.call(this)
+ })
+ CACHE[task.id] = { p: temp }
+ task.state = state
+ this.loading++
+ } else {
+ task.state = STATE.wait
+ this.RAM -= removeCache(task)
+ next.call(this, true)
+ }
+ break
+ }
+}
+function removeTask(this: Image, task: ITask) {
+ this.RAM -= removeCache(task)
+ const state = task.state
+ task.state = STATE.drop
+ task.src = undefined
+ task.t && clearTimeout(task.t)
+ task.t = setTimeout(() => {
+ const id = task.id
+ const tasks = this.tasks
+ for (let i = 0, len = tasks.length; i < len; i++) {
+ if (id === tasks[i].id) {
+ tasks.splice(i, 1)
+ return
+ }
+ }
+ }, DROP_TIME)
+ next.call(this, state !== STATE.loading)
+}
+
+/** 图片下载内存管理 */
+export default class Image extends VuexModule implements IImage {
+ /// State & Getter(public) ///
+ config: ILocal
+ tasks: ITask[] = []
+ RAM = 0
+ usage = 0
+ loading!: number
+
+ constructor(module: Image) {
+ super(module)
+ this.config = setDefault(
+ ((this as any).config || {}) as ILocal,
+ DEFAULT_CONFIG
+ )
+ }
+
+ /// Mutation ///
+ /** 更新设置
+ * @param config 设置
+ */
+ @Mutation
+ CONFIG(config: ILocal) {
+ config = Object.assign(this.config, config)
+
+ const max = config.max
+ const RAM = config.RAM
+
+ let loading = max - (this.loading || 0)
+ const shouldRemove = this.RAM > RAM
+ if (loading || shouldRemove) {
+ const shouldPause = loading < 0
+
+ const tasks = this.tasks
+ const tasksRemoveable: ITask[] = []
+
+ let task
+ let state
+ let count = 0
+ for (task of tasks) {
+ state = task.state
+ if (shouldPause) {
+ state === STATE.loading &&
+ (count < max ? count++ : setState.call(this, task, STATE.wait))
+ } else if (loading && state === STATE.wait) {
+ setState.call(this, task, STATE.loading)
+ if (!--loading && !shouldRemove) {
+ return
+ }
+ }
+
+ shouldRemove && state === STATE.success && tasksRemoveable.push(task)
+ }
+
+ // 不用pop
+ count = 0
+ state = tasksRemoveable.length
+ while (count++ < state && this.RAM > RAM) {
+ removeTask.call(this, tasksRemoveable[state - count])
+ }
+ }
+ }
+
+ /** 加载图片
+ * @param payload 任务信息
+ *
+ * @returns 任务(直接修改原对象)
+ */
+ @Mutation
+ LOAD(payload: { task: IParams; callback: (task: ITask) => void }) {
+ this.loading || (this.loading = 0)
+ const tasks = this.tasks
+ const task = payload.task as ITask
+ let item
+ for (item of tasks) {
+ if (task.url === item.url && isEqual(task.query, item.query)) {
+ setState.call(this, item, STATE.loading)
+ payload.callback(item)
+ return
+ }
+ }
+
+ item = { state: STATE.wait } as ITask // for watch
+ tasks.push(item)
+ item.id = getId('i')
+ item.url = task.url
+ item.query = task.query
+
+ setState.call(this, item, STATE.loading)
+ payload.callback(item)
+ }
+
+ /// Action ///
+}
diff --git a/src/store/prefer.ts b/src/store/prefer.ts
index 0da2821..4041444 100644
--- a/src/store/prefer.ts
+++ b/src/store/prefer.ts
@@ -1,6 +1,6 @@
/** 偏好管理
*/
-import { VuexModule, Mutation, Action } from 'vuex-module-decorators'
+import { VuexModule, Mutation } from 'vuex-module-decorators'
import { local } from '@/utils/storage'
import { set } from '@/utils/skin'
import CONFIG from '@/config'
@@ -33,14 +33,14 @@ class Prefer extends VuexModule implements IPrefer {
lang = PREFER.lang || 'zh'
skin = (PREFER.skin = set(PREFER.skin))
- /// Mutation 无法调用/commit 必须通过Action ///
+ /// Mutation ///
@Mutation
- protected LANG(lang: string) {
+ SET_LANG(lang: string) {
this.lang = PREFER.lang = lang
}
@Mutation
- protected SKIN(skin: string) {
+ SET_SKIN(skin: string) {
this.skin = PREFER.skin = set(skin)
}
@@ -48,18 +48,11 @@ class Prefer extends VuexModule implements IPrefer {
/** 设置皮肤
* @param {String} skin 皮肤名
*/
- @Action
- setSkin(skin: string) {
- this.context.commit('SKIN', skin)
- }
-
- /** 设置语言
- * @param {String} lang 语言
- */
- @Action
- setLang(lang = 'zh') {
- this.context.commit('LANG', lang)
- }
+ // @Action
+ // setSkin(skin: string) {
+ // this.context.commit('SKIN', skin) // 非动态模块
+ // // this.SKIN(skin) // 动态模块
+ // }
}
type hook = (PREFER: IObject) => any
diff --git a/src/store/user.ts b/src/store/user.ts
index c32a354..0987dd4 100644
--- a/src/store/user.ts
+++ b/src/store/user.ts
@@ -35,14 +35,14 @@ class User extends VuexModule implements IUser {
info = USER_INFO.info as IInfo | undefined
menu = USER_INFO.menu as string[] | undefined
- /// Mutation 无法调用/commit 必须通过Action ///
+ /// Mutation ///
@Mutation
- protected INFO(info?: IInfo) {
+ protected SET_INFO(info?: IInfo) {
this.info = USER_INFO.info = info
}
@Mutation
- protected MENU(menu?: string[]) {
+ protected SET_MENU(menu?: string[]) {
this.menu = USER_INFO.menu = menu
}
@@ -55,8 +55,8 @@ class User extends VuexModule implements IUser {
const { data } = await login(formData)
const context = this.context
- context.commit('INFO', data.info)
- context.commit('MENU', data.menu)
+ context.commit('SET_INFO', data.info)
+ context.commit('SET_MENU', data.menu)
USER_INFO.token = data.token
}
@@ -67,8 +67,8 @@ class User extends VuexModule implements IUser {
await logout()
const context = this.context
- context.commit('INFO')
- context.commit('MENU')
+ context.commit('SET_INFO')
+ context.commit('SET_MENU')
USER_INFO.token = ''
}
diff --git a/src/utils/ajax.ts b/src/utils/ajax.ts
index 2fc216f..5ab73a8 100644
--- a/src/utils/ajax.ts
+++ b/src/utils/ajax.ts
@@ -174,9 +174,9 @@ function request(
cache = AXIOS.request(config)
.then((res: any) => {
- if (config._$c) {
- res = config._$c // 自定义取消标记
- config._$c = 0 // 只取消一次
+ if (config.$_) {
+ res = config.$_ // 自定义取消标记
+ config.$_ = 0 // 只取消一次
throw res
}
@@ -191,16 +191,16 @@ function request(
requestQueue.remove(config.key) // 移除请求队列
// if (isCancel(res)) {
// throw res
- // } else if (config._$c) {
- // res = config._$c // 自定义取消标记
- // config._$c = 0 // 只取消一次
+ // } else if (config.$_) {
+ // res = config.$_ // 自定义取消标记
+ // config.$_ = 0 // 只取消一次
// throw res
// } else {
// failed(res) // [请求拦截]
// }
- if (config._$c) {
- res = config._$c // 自定义取消标记
- config._$c = 0 // 只取消一次
+ if (config.$_) {
+ res = config.$_ // 自定义取消标记
+ config.$_ = 0 // 只取消一次
}
throw res
})
@@ -210,8 +210,8 @@ function request(
// 经济版取消(不执行then)
config.cancelToken ||
(cache.cancel = (reason = '取消请求') => {
- config._$c = new Error(reason)
- config._$c.__CANCEL__ = 1 // for AXIOS.isCancel
+ config.$_ = new Error(reason)
+ config.$_.__CANCEL__ = 1 // for AXIOS.isCancel
})
return requestQueue.set(config.key, cache)
diff --git a/src/utils/clone.ts b/src/utils/clone.ts
index 32892c1..73c940b 100644
--- a/src/utils/clone.ts
+++ b/src/utils/clone.ts
@@ -3,7 +3,7 @@
* @Author: 毛瑞
* @Date: 2019-06-27 12:58:37
*/
-import { hasOwnProperty, isObj, isArray, isFn } from '@/utils'
+import { hasOwnProperty, isObj, isFn } from '@/utils'
/** 自定义过滤函数
* @param {String} key 待拷贝属性
@@ -21,8 +21,8 @@ export type Filter = (
currentValue: any,
currentObject: any,
targetObject: any,
- deep?: number
-) => any
+ deep: number
+) => { value: any } | boolean | undefined | null | void
/** 深扩展一个对象/数组
* @param {Object|Array} current 待扩展对象
@@ -30,102 +30,128 @@ export type Filter = (
*
* @returns {Object|Array} current 待扩展对象
*/
-function extend(current: any, target: any, filter?: Filter, deep?: number) {
+function extend(
+ current: T,
+ target: U,
+ filter?: Filter,
+ deep?: number
+): T & U {
deep || (deep = 0)
let currentValue
let targetValue
-
let temp: any
let key: string
for (key in target) {
- currentValue = current[key]
- targetValue = target[key]
+ targetValue = (target as any)[key]
+ currentValue = (current as any)[key]
temp =
filter && filter(key, targetValue, currentValue, current, target, deep)
if (temp) {
- hasOwnProperty(temp, 'value') && (current[key] = temp.value)
- } else if (!targetValue || !isObj(targetValue)) {
- current[key] = targetValue
- } else {
- current[key] = extend(
- ((temp = isArray(targetValue)) === isArray(currentValue) &&
+ hasOwnProperty(temp, 'value') && ((current as any)[key] = temp.value)
+ } else if (targetValue && isObj(targetValue)) {
+ ;(current as any)[key] = extend(
+ (Array.isArray(currentValue) === (temp = Array.isArray(targetValue)) &&
currentValue) ||
- (temp && []) ||
- {},
+ (temp ? [] : {}),
targetValue,
filter,
deep + 1
)
+ } else {
+ ;(current as any)[key] = targetValue
}
}
- return current
+ return current as T & U
}
/** 深克隆/扩展 对象/数组(不考虑原型和循环引用)
* @test true
*
- * @param {Function} filter 可选,自定义过滤
+ * @param {Filter} filter 可选,自定义过滤
* @param {...Rest} 待克隆/扩展的对象/数组列表 只有一个数组/对象时克隆,多个则后面的扩展到第一个对象上
*
* @returns {Array|Object} 克隆/扩展的后的对象
*/
-const clone = function(this: any) {
- const ARGUMENTS = arguments
- const args: any[] = []
+function clone(current?: T, target?: U, ...args: any[]): T & U
+function clone(
+ filter?: Filter,
+ current?: T,
+ target?: U,
+ ...args: any[]
+): T & U
+function clone() {
+ const ARGS = arguments
+ const filter = isFn(ARGS[0]) && ARGS[0]
- const filter = isFn(ARGUMENTS[0]) && ARGUMENTS[0]
let current
- let target
-
- let temp
- let index = filter ? 1 : 0
- while (index < ARGUMENTS.length) {
- isObj((temp = ARGUMENTS[index++])) &&
- (current
- ? target
- ? args.push(temp)
- : (target = temp)
- : (current = temp))
- }
-
- if (current) {
- target || (current = isArray((target = current)) ? [] : {})
- extend(current, target, filter)
- }
+ let extended
- if (!args.length) {
- return current
+ for (let i = filter ? 1 : 0, len = ARGS.length, item; i < len; i++) {
+ if (isObj((item = ARGS[i]))) {
+ if (current) {
+ extend(current, item, filter)
+ extended = true
+ } else {
+ current = item
+ }
+ }
}
- args.unshift(current)
- filter && args.unshift(filter)
- return clone.apply(this, args)
-} as (...args: any[]) => any
+ return extended
+ ? current
+ : current && extend(Array.isArray(current) ? [] : {}, current, filter)
+}
/** 设置对象默认值
- * @param {Object|Array} target 目标对象 (被修改)
- * @param {Object|Array} defaultObject 默认值 (不变)
+ * @param {Object|Array} current 目标对象 (被修改)
+ * @param {Object|Array} target 默认值 (不变)
*
* @returns {Object|Array} 原target对象
*/
-function setDefault(target: any, defaultObject: any) {
+function setDefault(current: T, target: U): T & U {
let key
let temp
- for (key in defaultObject) {
- if (hasOwnProperty(target, key)) {
- ;(temp = target[key]) &&
+ for (key in target) {
+ if (hasOwnProperty(current, key)) {
+ ;(temp = (current as any)[key]) &&
isObj(temp) &&
- (key = defaultObject[key]) &&
+ (key = (target as any)[key]) &&
isObj(key) &&
setDefault(temp, key)
} else {
- target[key] = isObj((temp = defaultObject[key])) ? clone(temp) : temp
+ ;(current as any)[key] = isObj((temp = (target as any)[key]))
+ ? clone(temp)
+ : temp
}
}
- return target
+ return current as T & U
+}
+
+/** 设置类成员默认值装饰器
+ * @param keyOrValue class的key, 或成员的默认值
+ * @param value 默认值 (不变)
+ */
+function Default(value: any): MethodDecorator
+function Default(key: string, value: any): ClassDecorator
+function Default(keyOrValue: any, value?: any) {
+ return (target: any, key?: any, descriptor?: any) => {
+ if (descriptor) {
+ descriptor.value =
+ isObj(target[key]) && isObj(keyOrValue)
+ ? setDefault(target[key], keyOrValue)
+ : keyOrValue
+ return descriptor
+ }
+
+ target = target.prototype
+ target[keyOrValue] =
+ isObj(target[keyOrValue]) && isObj(value)
+ ? setDefault(target[keyOrValue], value)
+ : value
+ }
}
-export { clone as default, setDefault }
+export { clone as default, setDefault, Default }
diff --git a/src/utils/downloader.ts b/src/utils/downloader.ts
index 8338193..94d727e 100644
--- a/src/utils/downloader.ts
+++ b/src/utils/downloader.ts
@@ -14,6 +14,8 @@ export interface IFile {
name: string
/** 文件类型 */
type: string
+ /** 文件大小 */
+ size: number
}
/** 下载文件
@@ -35,16 +37,22 @@ function download(url: string, query?: IObject, name?: string) {
name = (name as any)[(name as any).length - 1].split('=')
name = (name as any)[(name as any).length - 1]
}
- let type
- type = (name as string).split('.')
- type = type[type.length - 1]
+ const type = (name as string).split('.')
+
return {
name,
- type,
- src: window.URL.createObjectURL(new Blob([res.data], { type })),
+ size: res.data.size,
+ type: type[type.length - 1], // res.data.type, // application/x-msdownload
+ src: window.URL.createObjectURL(res.data),
}
}) as IPromiseCancelable
- promise.cancel = source.cancel
+ promise.cancel = (message?: string) => {
+ if (source.cancel) {
+ console.warn(message || '取消下载:', url, query, name)
+ source.cancel(message)
+ ;(source as any).cancel = 0 // 只取消一次
+ }
+ }
return promise
}
diff --git a/src/utils/highOrder.ts b/src/utils/highOrder.ts
index 5b4cbf9..3fea86a 100644
--- a/src/utils/highOrder.ts
+++ b/src/utils/highOrder.ts
@@ -106,6 +106,19 @@ const enum Status {
/** 获取带加载状态的【异步】组件
* @param {Function} promiseFactory 异步组件工厂函数, 比如: () => import('a')
* 另: import() 只会成功下载一次
+ * @param {Object} config 配置
+ *
+ * {
+ *
+ * loading: 加载时展示的组件 默认:'com/Loading'
+ *
+ * error: 加载失败展示的组件 默认:'com/Info'
+ *
+ * delay: 展示loading延迟(ms) 默认:250
+ *
+ * timeout: 加载组件超时时间 默认:'/config'.timeout
+ *
+ * }
*
* @returns {Component} 组件, error、loading、目标三个组件可触发事件'$'以重新加载
*/
@@ -113,11 +126,22 @@ function getAsync(
promiseFactory: (
context?: RenderContext
) => Promise,
- loading?: Component,
- error?: Component
+ config?: {
+ /** 加载时展示的组件 默认:'@com/Loading' */
+ loading?: Component
+ /** 加载失败展示的组件 默认:'@com/Info' */
+ error?: Component
+ /** 展示loading延迟(ms) 默认:250 */
+ delay?: number
+ /** 加载组件超时时间 默认:'@/config'.timeout */
+ timeout?: number
+ }
): Component {
- loading || (loading = Loading)
- error || (error = Info)
+ config || (config = {})
+ config.loading || (config.loading = Loading)
+ config.error || (config.error = Info)
+ config.delay || (config.delay = 250)
+ config.timeout || (config.timeout = CONFIG.timeout)
const state = Vue.observable({ s: Status.init })
let component: Component | AsyncComponent
@@ -168,15 +192,15 @@ function getAsync(
promiseFactory(context)
.then(onDone)
.catch(onFail)
- CONFIG.timeout && (keyTimeout = setTimeout(onTimeout, CONFIG.timeout))
- keyDelay = setTimeout(onLoad, 250) // 默认延迟250ms显示loading
+ keyTimeout = setTimeout(onTimeout, (config as any).timeout)
+ keyDelay = setTimeout(onLoad, (config as any).delay) // 默认延迟250ms显示loading
return h()
case Status.load:
data.key = key + 'L'
- return h(loading, data, context.children)
+ return h((config as any).loading, data, context.children)
case Status.fail:
data.key = key + 'R'
- return h(error, data, context.children)
+ return h((config as any).error, data, context.children)
default:
data.key = key
return h(component, data, context.children)
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 2545a66..493aed5 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -1,5 +1,5 @@
/** 工具函数 */
-import { VueConstructor } from 'vue'
+import Vue, { VueConstructor, Component, AsyncComponent } from 'vue'
/** 对象自身是否存在指定属性 (查找原型链请用 key in obj 判断)
* @test true
@@ -20,7 +20,7 @@ function hasOwnProperty(obj: any, key?: any) {
*
* @returns String
*/
-function getType(value?: any): string {
+function getType(value?: any) {
value = Object.prototype.toString.call(value) // [object type]
return value.substring(8, value.length - 1).toLowerCase()
}
@@ -32,7 +32,7 @@ function getType(value?: any): string {
*
* @returns Boolean
*/
-function isUndef(value?: any) {
+function isUndef(value?: any): value is undefined {
return value === undefined
}
@@ -43,7 +43,7 @@ function isUndef(value?: any) {
*
* @returns Boolean
*/
-function isNull(value?: any) {
+function isNull(value?: any): value is null {
return value === null
}
@@ -54,7 +54,7 @@ function isNull(value?: any) {
*
* @returns Boolean
*/
-function isNullish(value?: any) {
+function isNullish(value?: any): value is null | undefined {
return isUndef(value) || isNull(value)
}
@@ -65,7 +65,7 @@ function isNullish(value?: any) {
*
* @returns Boolean
*/
-function isBool(value?: any) {
+function isBool(value?: any): value is boolean {
return typeof value === 'boolean'
}
@@ -76,7 +76,7 @@ function isBool(value?: any) {
*
* @returns Boolean
*/
-function isNumber(value?: any) {
+function isNumber(value?: any): value is number {
return typeof value === 'number'
}
@@ -87,7 +87,7 @@ function isNumber(value?: any) {
*
* @returns Boolean
*/
-function isBigInt(value?: any) {
+function isBigInt(value?: any): value is bigint {
return getType(value) === 'bigint'
}
@@ -98,7 +98,7 @@ function isBigInt(value?: any) {
*
* @returns Boolean
*/
-function isString(value?: any) {
+function isString(value?: any): value is string {
return typeof value === 'string'
}
@@ -109,7 +109,7 @@ function isString(value?: any) {
*
* @returns Boolean
*/
-function isSymbol(value?: any) {
+function isSymbol(value?: any): value is symbol {
return getType(value) === 'symbol'
}
@@ -120,7 +120,7 @@ function isSymbol(value?: any) {
*
* @returns Boolean
*/
-function isObj(value?: any) {
+function isObj(value?: any): value is Record {
return typeof value === 'object'
}
@@ -131,7 +131,7 @@ function isObj(value?: any) {
*
* @returns Boolean
*/
-function isObject(value?: any) {
+function isObject(value?: any): value is object {
return getType(value) === 'object'
}
@@ -142,7 +142,7 @@ function isObject(value?: any) {
*
* @returns Boolean
*/
-function isArray(value?: any) {
+function isArray(value?: any): value is any[] {
return getType(value) === 'array' // Array.isArray(value)
}
@@ -153,7 +153,7 @@ function isArray(value?: any) {
*
* @returns Boolean
*/
-function isFn(value?: any) {
+function isFn(value?: any): value is Function {
return typeof value === 'function'
}
@@ -166,7 +166,7 @@ function isFn(value?: any) {
*
* @returns Boolean
*/
-function isEqual(x?: any, y?: any): boolean {
+function isEqual(x?: any, y?: any) {
if (x === y) {
return x !== 0 || 1 / x === 1 / y // isEqual(0, -0) => false
}
@@ -224,6 +224,128 @@ function isEqual(x?: any, y?: any): boolean {
return false
}
+let passive: any = 0
+/** 浏览器是否支持passive事件监听
+ * see: https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener
+ */
+function isPassive() {
+ if (passive !== 0) {
+ return passive
+ }
+
+ try {
+ passive = Object.defineProperty({}, 'passive', { get: () => true })
+ window.addEventListener('' as any, null as any, passive)
+ } catch (err) {
+ passive = false
+ }
+ return passive as false | { passive: true }
+}
+
+/** 添加vue监听
+ * @param {Object} options 监听对象
+ * @param {String} hook 监听事件
+ * @param {Function} fn 监听回调
+ * @param {Object} scope [可选]绑定回调的this
+ */
+function setHook(
+ options: any,
+ hook: string,
+ fn: Function | Function[],
+ scope?: any
+) {
+ let originHook
+ if (Array.isArray(fn)) {
+ for (originHook of fn) {
+ setHook(options, hook, originHook, scope)
+ }
+ return
+ }
+
+ originHook = options[hook]
+ if (!originHook) {
+ originHook = []
+ } else if (Array.isArray(originHook)) {
+ if (originHook.includes((fn as any)._ || fn)) {
+ return
+ }
+ } else {
+ if (originHook === (fn as any)._ || fn) {
+ return
+ }
+ originHook = [originHook]
+ }
+ if (scope) {
+ scope = fn.bind(scope)
+ scope._ = fn
+ fn = scope
+ }
+ originHook.unshift(fn)
+ options[hook] = originHook
+}
+
+function onWake(this: any, to: any, from: any, next: any) {
+ this.s_ = 0
+ next && setTimeout(next)
+}
+function onSleep(this: any, to: any, from: any, next: any) {
+ if (next) {
+ this.s_ = to.matched.length // for 刷新
+ setTimeout(next)
+ } else {
+ this.s_ = 1
+ }
+}
+/** 对路由组件、的组件注入睡眠(装饰器)
+ * @param {Component} component 组件选项
+ */
+function sleep(component: Component | AsyncComponent) {
+ component = (component as any).options || component
+ const originRender = (component as any).render
+ if (!originRender || (component as any).$_s) {
+ return
+ }
+ ;(component as any).$_s = 1
+ if ((component as any).functional) {
+ const state = Vue.observable({ s_: 0 })
+ let vnode: any
+ ;(component as any).render = function(h: any, context: any) {
+ if (state.s_) {
+ return vnode
+ }
+
+ let on = context.data
+ on = on.on || (on.on = {})
+ setHook(on, 'hook:beforeRouteUpdate', onWake, state)
+ setHook(on, 'hook:activated', onWake, state)
+ setHook(on, 'hook:beforeRouteLeave', onSleep, state)
+ setHook(on, 'hook:deactivated', onSleep, state)
+ return (vnode = originRender.apply(this, arguments))
+ }
+ return
+ }
+
+ // mixins这个阶段对class based api无效
+ const originData = (component as any).data
+ ;(component as any).data = function() {
+ const data =
+ (originData && originData.apply && originData.apply(this, arguments)) ||
+ {}
+ data.s_ = 0 // 满足/^[&_]/不能转化为响应式属性
+ return data
+ }
+ setHook(component, 'beforeRouteUpdate', onWake)
+ setHook(component, 'activated', onWake)
+ setHook(component, 'beforeRouteLeave', onSleep)
+ setHook(component, 'deactivated', onSleep)
+ ;(component as any).render = function() {
+ if (this.s_) {
+ return this._$n
+ }
+ return (this._$n = originRender.apply(this, arguments))
+ }
+}
+
/** 开发环境处理
* @param Vue
*/
@@ -267,5 +389,8 @@ export {
isArray,
isFn,
isEqual,
+ isPassive,
+ setHook,
+ sleep,
dev,
}
diff --git a/src/utils/performance.ts b/src/utils/performance.ts
index 827de59..7f903f9 100644
--- a/src/utils/performance.ts
+++ b/src/utils/performance.ts
@@ -1,5 +1,12 @@
/** 性能优化相关工具函数
*/
+import { hasOwnProperty, isNumber } from '.'
+
+type throttleDebounce = (
+ fn: T,
+ interval?: number,
+ scope?: any
+) => T
/** 节流 (指定时间间隔内最多执行一次函数 延迟执行)
* @test true
@@ -10,11 +17,7 @@
*
* @returns {Function} 目标函数包装
*/
-function throttle(
- fn: T,
- interval?: number,
- scope?: any
-): T {
+const throttle = function(fn: Function, interval?: number, scope?: any) {
let runable = true
let _arg: any
const FN = () => {
@@ -23,8 +26,7 @@ function throttle(
}
const hasScope = arguments.length > 2
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- return function(this: any, ..._args: any[]) {
+ return function(this: any) {
hasScope || (scope = this)
_arg = arguments
@@ -32,8 +34,8 @@ function throttle(
runable = false
setTimeout(FN, interval)
}
- } as any
-}
+ }
+} as throttleDebounce
/** 防抖 (限制函数最小执行间隔 延迟执行)
* @test true
*
@@ -43,11 +45,7 @@ function throttle(
*
* @returns {Function} 目标函数包装
*/
-function debounce(
- fn: T,
- interval?: number,
- scope?: any
-): T {
+const debounce = function(fn: Function, interval?: number, scope?: any) {
let _arg: any
const FN = () => {
fn.apply(scope, _arg)
@@ -55,15 +53,14 @@ function debounce(
let timer: number
const hasScope = arguments.length > 2
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- return function(this: any, ..._args: any[]) {
+ return function(this: any) {
hasScope || (scope = this)
_arg = arguments
clearTimeout(timer)
timer = setTimeout(FN, interval)
- } as any
-}
+ }
+} as throttleDebounce
/** 节流 (指定时间间隔内最多执行一次函数 立即执行)
* @test true
@@ -74,26 +71,21 @@ function debounce(
*
* @returns {Function} 目标函数包装
*/
-function throttleAtOnce(
- fn: T,
- interval?: number,
- scope?: any
-): T {
+const throttleAtOnce = function(fn: Function, interval?: number, scope?: any) {
let runable = true
const FN = () => {
runable = true
}
const hasScope = arguments.length > 2
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- return function(this: any, ..._args: any[]) {
+ return function(this: any) {
if (runable) {
runable = false
fn.apply(hasScope ? scope : this, arguments)
setTimeout(FN, interval)
}
- } as any
-}
+ }
+} as throttleDebounce
/** 防抖 (限制函数最小执行间隔 立即执行)
* @test true
*
@@ -103,11 +95,7 @@ function throttleAtOnce(
*
* @returns {Function} 目标函数包装
*/
-function debounceAtOnce(
- fn: T,
- interval?: number,
- scope?: any
-): T {
+const debounceAtOnce = function(fn: Function, interval?: number, scope?: any) {
let runable = true
const FN = () => {
runable = true
@@ -115,8 +103,7 @@ function debounceAtOnce(
let timer: number
const hasScope = arguments.length > 2
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- return function(this: any, ..._args: any[]) {
+ return function(this: any) {
if (runable) {
runable = false
fn.apply(hasScope ? scope : this, arguments)
@@ -124,7 +111,77 @@ function debounceAtOnce(
clearTimeout(timer)
timer = setTimeout(FN, interval)
- } as any
+ }
+} as throttleDebounce
+
+/// 装饰器 ///
+interface IThrottleDebounceDecorator {
+ (params?: number | { interval?: number; scope?: any }): MethodDecorator
}
+interface IThrottleDebounceDecorator {
+ (
+ target: T,
+ key: string | symbol,
+ descriptor: TypedPropertyDescriptor<(...args: any[]) => R>
+ ): void
+}
+const factory = (fn: throttleDebounce): IThrottleDebounceDecorator => (
+ targetOrParams?: any,
+ key?: any,
+ descriptor?: any
+) =>
+ descriptor
+ ? ((descriptor.value = fn(targetOrParams[key])), descriptor)
+ : (target: any, key: string, descriptor: PropertyDescriptor) => {
+ descriptor.value = isNumber(targetOrParams)
+ ? fn(target[key], targetOrParams)
+ : hasOwnProperty(targetOrParams, 'scope')
+ ? fn(target[key], targetOrParams.interval, targetOrParams.scope)
+ : fn(target[key], targetOrParams.interval)
+ return descriptor
+ }
+
+/** 节流装饰器 (指定时间间隔内最多执行一次函数 延迟执行)
+ *
+ * @param targetOrParams 参数
+ * @param key
+ * @param descriptor
+ * @constructor
+ */
+const Throttle = factory(throttle)
+/** 防抖装饰器 (限制函数最小执行间隔 延迟执行)
+ *
+ * @param targetOrParams 参数
+ * @param key
+ * @param descriptor
+ * @constructor
+ */
+const Debounce = factory(debounce)
-export { throttle, debounce, throttleAtOnce, debounceAtOnce }
+/** 节流装饰器 (指定时间间隔内最多执行一次函数 立即执行)
+ *
+ * @param targetOrParams 参数
+ * @param key
+ * @param descriptor
+ * @constructor
+ */
+const ThrottleAtOnce = factory(throttleAtOnce)
+/** 防抖装饰器 (限制函数最小执行间隔 立即执行)
+ *
+ * @param targetOrParams 参数
+ * @param key
+ * @param descriptor
+ * @constructor
+ */
+const DebounceAtOnce = factory(debounceAtOnce)
+
+export {
+ throttle,
+ debounce,
+ throttleAtOnce,
+ debounceAtOnce,
+ Throttle,
+ Debounce,
+ ThrottleAtOnce,
+ DebounceAtOnce,
+}
diff --git a/src/utils/sort/index.ts b/src/utils/sort/index.ts
index e7329cd..53b0126 100644
--- a/src/utils/sort/index.ts
+++ b/src/utils/sort/index.ts
@@ -13,13 +13,19 @@ import mergeSort from './merge' // 归并排序
*
* @returns {Number | Boolean | null | undefined} true/大于0数字: a在b后; 其它: a在b前
*/
-export type Compare = (a: any, b: any) => number | boolean | null | undefined
+export type Compare = (
+ a: T,
+ b: T
+) => number | boolean | null | undefined
-/** 升序
- */
+/** 升序 */
const ASC: Compare = (a: any, b: any) => a > b
// const ASC: Compare = (a: any, b: any): 0 | boolean => (a === b ? 0 : a > b)
+/** 降序 */
+const DES: Compare = (a: any, b: any) => a < b
+// const DES: Compare = (a: any, b: any): 0 | boolean => (a === b ? 0 : a < b)
+
/** 目标值是否基础类型
* @param {Any} value 目标值
*
@@ -67,4 +73,4 @@ const ASC: Compare = (a: any, b: any) => a > b
// return array
// }
-export { mergeSort as default, ASC }
+export { mergeSort as default, ASC, DES }
diff --git a/src/utils/sort/insert.ts b/src/utils/sort/insert.ts
index d9e3316..4e52892 100644
--- a/src/utils/sort/insert.ts
+++ b/src/utils/sort/insert.ts
@@ -147,7 +147,7 @@ function bubble(array: T[], a: number, b: number): T[] {
*/
function insertSortBinary(
array: T[],
- compare: Compare = ASC,
+ compare: Compare = ASC,
start?: number,
end?: number
): T[] {
diff --git a/src/utils/sort/merge.ts b/src/utils/sort/merge.ts
index 54951c6..d9aebdb 100644
--- a/src/utils/sort/merge.ts
+++ b/src/utils/sort/merge.ts
@@ -186,7 +186,7 @@ function merge(left: number, middle: number, right: number) {
*/
function mergeSort(
array: T[],
- compare: Compare = ASC,
+ compare: Compare = ASC,
start?: number,
end?: number
): T[] {
diff --git a/src/utils/sort/quick.ts b/src/utils/sort/quick.ts
index e8f5f4c..5e1b878 100644
--- a/src/utils/sort/quick.ts
+++ b/src/utils/sort/quick.ts
@@ -118,7 +118,7 @@ function partition(start: number, end: number) {
*/
function quickSort(
array: T[],
- compare: Compare = ASC,
+ compare: Compare = ASC,
start?: number,
end?: number
): T[] {
diff --git a/src/utils/sort/quickStable.ts b/src/utils/sort/quickStable.ts
index e90087c..3bdba07 100644
--- a/src/utils/sort/quickStable.ts
+++ b/src/utils/sort/quickStable.ts
@@ -269,7 +269,7 @@ function partition(start: number, end: number) {
*/
function quickSort(
array: T[],
- compare: Compare = ASC,
+ compare: Compare = ASC,
start?: number,
end?: number
): T[] {
diff --git a/tests/unit/utils/clone.spec.ts b/tests/unit/utils/clone.spec.ts
index 1878d85..aa9c184 100644
--- a/tests/unit/utils/clone.spec.ts
+++ b/tests/unit/utils/clone.spec.ts
@@ -21,10 +21,7 @@ describe('@/utils/clone: 深克隆/扩展 对象/数组(不考虑原型和循环
expect(clone(testObject)).toEqual(testObject)
expect(
- clone(
- (key?: string) => (key === 'd' || key === 'e') && { jump: true },
- testObject
- )
+ clone((key: string) => key === 'd' || key === 'e', testObject)
).toEqual({ a: 0, b: 'a', c: null })
expect(
diff --git a/yarn.lock b/yarn.lock
index 7086cfa..8d063b0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4,7 +4,7 @@
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+ resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz?cache=0&sync_timestamp=1580303207516&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
integrity sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=
dependencies:
"@babel/highlight" "^7.8.3"
@@ -139,7 +139,7 @@
"@babel/helper-member-expression-to-functions@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.8.3.tgz?cache=0&sync_timestamp=1578951933226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
+ resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
integrity sha1-ZZtxBJjqbB2ZB+DHPyBu7n2twkw=
dependencies:
"@babel/types" "^7.8.3"
@@ -178,7 +178,7 @@
"@babel/helper-regex@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.8.3.tgz?cache=0&sync_timestamp=1578952169002&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-regex%2Fdownload%2F%40babel%2Fhelper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
+ resolved "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
integrity sha1-E5dyYH1RuT8j7/5yEFsxnSpMaWU=
dependencies:
lodash "^4.17.13"
@@ -268,7 +268,7 @@
"@babel/plugin-proposal-class-properties@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e"
integrity sha1-XgZlSvXNBLYIkVqtqbKmeIAERk4=
dependencies:
"@babel/helper-create-class-features-plugin" "^7.8.3"
@@ -285,7 +285,7 @@
"@babel/plugin-proposal-dynamic-import@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-dynamic-import%2Fdownload%2F%40babel%2Fplugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054"
integrity sha1-OMT+VVdEgm6X4q6TCw+0zAfmYFQ=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -318,7 +318,7 @@
"@babel/plugin-proposal-json-strings@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-json-strings%2Fdownload%2F%40babel%2Fplugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b"
integrity sha1-2lIWsjipi1ih4F1oUhBLEPmnDWs=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -326,7 +326,7 @@
"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz?cache=0&sync_timestamp=1578952594995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2"
integrity sha1-5FciU/3u1lzd7s/as/kor+sv1dI=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -351,7 +351,7 @@
"@babel/plugin-proposal-optional-catch-binding@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-catch-binding%2Fdownload%2F%40babel%2Fplugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9"
integrity sha1-ne6WqxZQ7tiGRq6XNMoWesSpxck=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -375,7 +375,7 @@
"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3":
version "7.8.8"
- resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.8.tgz?cache=0&sync_timestamp=1584039006999&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-unicode-property-regex%2Fdownload%2F%40babel%2Fplugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d"
integrity sha1-7jqV6QzcBP6M2S7DJ5+gF9aKDR0=
dependencies:
"@babel/helper-create-regexp-features-plugin" "^7.8.8"
@@ -390,14 +390,14 @@
"@babel/plugin-syntax-decorators@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.8.3.tgz?cache=0&sync_timestamp=1578952708841&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-decorators%2Fdownload%2F%40babel%2Fplugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda"
integrity sha1-jSwVqfGvYksAJflhaCqdU9MAG9o=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-dynamic-import%2Fdownload%2F%40babel%2Fplugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
integrity sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
@@ -418,7 +418,7 @@
"@babel/plugin-syntax-function-sent@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-function-sent/download/@babel/plugin-syntax-function-sent-7.8.3.tgz?cache=0&sync_timestamp=1578952714560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-function-sent%2Fdownload%2F%40babel%2Fplugin-syntax-function-sent-7.8.3.tgz#5a4874bdfc271f0fa1c470bf508dc54af3041e19"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-function-sent/download/@babel/plugin-syntax-function-sent-7.8.3.tgz#5a4874bdfc271f0fa1c470bf508dc54af3041e19"
integrity sha1-Wkh0vfwnHw+hxHC/UI3FSvMEHhk=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -432,7 +432,7 @@
"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-jsx%2Fdownload%2F%40babel%2Fplugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94"
integrity sha1-UhsGyDxASA8eWLT9M7kuzrHW6pQ=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -643,7 +643,7 @@
"@babel/plugin-transform-object-super@^7.8.3":
version "7.8.3"
- resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.8.3.tgz?cache=0&sync_timestamp=1578960994674&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725"
+ resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725"
integrity sha1-67ah56hv+paFi9asAQLWWUQmFyU=
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -908,7 +908,7 @@
"@hapi/topo@3.x.x":
version "3.1.6"
- resolved "https://registry.npm.taobao.org/@hapi/topo/download/@hapi/topo-3.1.6.tgz?cache=0&sync_timestamp=1578128744584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Ftopo%2Fdownload%2F%40hapi%2Ftopo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ resolved "https://registry.npm.taobao.org/@hapi/topo/download/@hapi/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
integrity sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=
dependencies:
"@hapi/hoek" "^8.3.0"
@@ -1199,12 +1199,12 @@
"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
version "2.0.3"
- resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
+ resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
integrity sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=
"@nodelib/fs.stat@^1.1.2":
version "1.1.3"
- resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=
"@nodelib/fs.walk@^1.2.3":
@@ -1648,10 +1648,10 @@
resolved "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.0.tgz#623aa40623550e3b94767cffeb096a6fb597ed09"
integrity sha1-YjqkBiNVDjuUdnz/6wlqb7WX7Qk=
-"@stylelint/postcss-css-in-js@^0.37.0":
- version "0.37.0"
- resolved "https://registry.npm.taobao.org/@stylelint/postcss-css-in-js/download/@stylelint/postcss-css-in-js-0.37.0.tgz#199df63fe8d876d74656c8dec3b17e8474ca866e"
- integrity sha1-GZ32P+jYdtdGVsjew7F+hHTKhm4=
+"@stylelint/postcss-css-in-js@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.npm.taobao.org/@stylelint/postcss-css-in-js/download/@stylelint/postcss-css-in-js-0.37.1.tgz#41e5e7660f73d88227610e18c6ebb262d56ac125"
+ integrity sha1-QeXnZg9z2IInYQ4YxuuyYtVqwSU=
dependencies:
"@babel/core" ">=7.9.0"
@@ -1832,9 +1832,9 @@
integrity sha1-b3fot7tkrDk/ktM/6PcQOLxPPN4=
"@types/d3-scale-chromatic@*":
- version "1.3.1"
- resolved "https://registry.npm.taobao.org/@types/d3-scale-chromatic/download/@types/d3-scale-chromatic-1.3.1.tgz#a294ae688634027870f0307bf8802f863aa2ddb3"
- integrity sha1-opSuaIY0Anhw8DB7+IAvhjqi3bM=
+ version "1.5.0"
+ resolved "https://registry.npm.taobao.org/@types/d3-scale-chromatic/download/@types/d3-scale-chromatic-1.5.0.tgz#315367557d51b823bec848614fac095325613fc3"
+ integrity sha1-MVNnVX1RuCO+yEhhT6wJUyVhP8M=
"@types/d3-scale@*":
version "2.2.0"
@@ -1927,10 +1927,10 @@
"@types/d3-voronoi" "*"
"@types/d3-zoom" "*"
-"@types/echarts@^4.4.5":
- version "4.4.5"
- resolved "https://registry.npm.taobao.org/@types/echarts/download/@types/echarts-4.4.5.tgz#b633b87b707b43cf361b067206fd9073c7b0c06c"
- integrity sha1-tjO4e3B7Q882GwZyBv2Qc8ewwGw=
+"@types/echarts@^4.4.6":
+ version "4.4.6"
+ resolved "https://registry.npm.taobao.org/@types/echarts/download/@types/echarts-4.4.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fecharts%2Fdownload%2F%40types%2Fecharts-4.4.6.tgz#823cce92a0c7a0b06e090ad06e5cdce7efbf1128"
+ integrity sha1-gjzOkqDHoLBuCQrQblzc5++/ESg=
dependencies:
"@types/zrender" "*"
@@ -2025,7 +2025,7 @@
"@types/q@^1.5.1":
version "1.5.2"
- resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz?cache=0&sync_timestamp=1580864611389&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+ resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz?cache=0&sync_timestamp=1580864548163&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
integrity sha1-aQoUdbhPKohP0HzXl8APXzE1bqg=
"@types/sizzle@2.3.2":
@@ -2081,14 +2081,14 @@
"@types/yargs@^13.0.0":
version "13.0.8"
- resolved "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-13.0.8.tgz?cache=0&sync_timestamp=1582664653342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99"
+ resolved "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99"
integrity sha1-o4wi3vLxwgaPiXGss+pzTrPGSpk=
dependencies:
"@types/yargs-parser" "*"
"@types/yargs@^15.0.0":
version "15.0.4"
- resolved "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-15.0.4.tgz?cache=0&sync_timestamp=1582664653342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299"
+ resolved "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299"
integrity sha1-fl0PjKJenVhJ8upEPPfEAt7Ngpk=
dependencies:
"@types/yargs-parser" "*"
@@ -2098,40 +2098,40 @@
resolved "https://registry.npm.taobao.org/@types/zrender/download/@types/zrender-4.0.0.tgz#a6806f12ec4eccaaebd9b0d816f049aca6188fbd"
integrity sha1-poBvEuxOzKrr2bDYFvBJrKYYj70=
-"@typescript-eslint/eslint-plugin@^2.27.0":
- version "2.27.0"
- resolved "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-2.27.0.tgz?cache=0&sync_timestamp=1586451996753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-2.27.0.tgz#e479cdc4c9cf46f96b4c287755733311b0d0ba4b"
- integrity sha1-5HnNxMnPRvlrTCh3VXMzEbDQuks=
+"@typescript-eslint/eslint-plugin@^2.28.0":
+ version "2.28.0"
+ resolved "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-2.28.0.tgz#4431bc6d3af41903e5255770703d4e55a0ccbdec"
+ integrity sha1-RDG8bTr0GQPlJVdwcD1OVaDMvew=
dependencies:
- "@typescript-eslint/experimental-utils" "2.27.0"
+ "@typescript-eslint/experimental-utils" "2.28.0"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
tsutils "^3.17.1"
-"@typescript-eslint/experimental-utils@2.27.0":
- version "2.27.0"
- resolved "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.27.0.tgz#801a952c10b58e486c9a0b36cf21e2aab1e9e01a"
- integrity sha1-gBqVLBC1jkhsmgs2zyHiqrHp4Bo=
+"@typescript-eslint/experimental-utils@2.28.0":
+ version "2.28.0"
+ resolved "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.28.0.tgz#1fd0961cd8ef6522687b4c562647da6e71f8833d"
+ integrity sha1-H9CWHNjvZSJoe0xWJkfabnH4gz0=
dependencies:
"@types/json-schema" "^7.0.3"
- "@typescript-eslint/typescript-estree" "2.27.0"
+ "@typescript-eslint/typescript-estree" "2.28.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/parser@^2.27.0":
- version "2.27.0"
- resolved "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-2.27.0.tgz?cache=0&sync_timestamp=1586451581609&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-2.27.0.tgz#d91664335b2c46584294e42eb4ff35838c427287"
- integrity sha1-2RZkM1ssRlhClOQutP81g4xCcoc=
+"@typescript-eslint/parser@^2.28.0":
+ version "2.28.0"
+ resolved "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-2.28.0.tgz#bb761286efd2b0714761cab9d0ee5847cf080385"
+ integrity sha1-u3YShu/SsHFHYcq50O5YR88IA4U=
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
- "@typescript-eslint/experimental-utils" "2.27.0"
- "@typescript-eslint/typescript-estree" "2.27.0"
+ "@typescript-eslint/experimental-utils" "2.28.0"
+ "@typescript-eslint/typescript-estree" "2.28.0"
eslint-visitor-keys "^1.1.0"
-"@typescript-eslint/typescript-estree@2.27.0":
- version "2.27.0"
- resolved "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.27.0.tgz#a288e54605412da8b81f1660b56c8b2e42966ce8"
- integrity sha1-oojlRgVBLai4HxZgtWyLLkKWbOg=
+"@typescript-eslint/typescript-estree@2.28.0":
+ version "2.28.0"
+ resolved "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.28.0.tgz?cache=0&sync_timestamp=1586798220039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-2.28.0.tgz#d34949099ff81092c36dc275b6a1ea580729ba00"
+ integrity sha1-00lJCZ/4EJLDbcJ1tqHqWAcpugA=
dependencies:
debug "^4.1.1"
eslint-visitor-keys "^1.1.0"
@@ -2426,7 +2426,7 @@
"@vue/eslint-config-typescript@^5.0.2":
version "5.0.2"
- resolved "https://registry.npm.taobao.org/@vue/eslint-config-typescript/download/@vue/eslint-config-typescript-5.0.2.tgz?cache=0&sync_timestamp=1582701456410&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Feslint-config-typescript%2Fdownload%2F%40vue%2Feslint-config-typescript-5.0.2.tgz#c2f3328e70d55d10aeb826f209405397960548c7"
+ resolved "https://registry.npm.taobao.org/@vue/eslint-config-typescript/download/@vue/eslint-config-typescript-5.0.2.tgz#c2f3328e70d55d10aeb826f209405397960548c7"
integrity sha1-wvMyjnDVXRCuuCbyCUBTl5YFSMc=
dependencies:
vue-eslint-parser "^7.0.0"
@@ -2438,7 +2438,7 @@
"@vue/test-utils@^1.0.0-beta.33":
version "1.0.0-beta.33"
- resolved "https://registry.npm.taobao.org/@vue/test-utils/download/@vue/test-utils-1.0.0-beta.33.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Ftest-utils%2Fdownload%2F%40vue%2Ftest-utils-1.0.0-beta.33.tgz#627511afbd4307e7557634f860a1b985bd25d9cd"
+ resolved "https://registry.npm.taobao.org/@vue/test-utils/download/@vue/test-utils-1.0.0-beta.33.tgz?cache=0&sync_timestamp=1586674891875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Ftest-utils%2Fdownload%2F%40vue%2Ftest-utils-1.0.0-beta.33.tgz#627511afbd4307e7557634f860a1b985bd25d9cd"
integrity sha1-YnURr71DB+dVdjT4YKG5hb0l2c0=
dependencies:
dom-event-types "^1.0.0"
@@ -2452,7 +2452,7 @@
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
- resolved "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ resolved "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
integrity sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=
dependencies:
"@webassemblyjs/helper-module-context" "1.9.0"
@@ -2461,17 +2461,17 @@
"@webassemblyjs/floating-point-hex-parser@1.9.0":
version "1.9.0"
- resolved "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ resolved "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
integrity sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=
"@webassemblyjs/helper-api-error@1.9.0":
version "1.9.0"
- resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
integrity sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=
"@webassemblyjs/helper-buffer@1.9.0":
version "1.9.0"
- resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
integrity sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=
"@webassemblyjs/helper-code-frame@1.9.0":
@@ -2495,7 +2495,7 @@
"@webassemblyjs/helper-wasm-bytecode@1.9.0":
version "1.9.0"
- resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
integrity sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=
"@webassemblyjs/helper-wasm-section@1.9.0":
@@ -2517,7 +2517,7 @@
"@webassemblyjs/leb128@1.9.0":
version "1.9.0"
- resolved "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ resolved "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
integrity sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=
dependencies:
"@xtuc/long" "4.2.2"
@@ -2607,7 +2607,7 @@
abab@^2.0.0:
version "2.0.3"
- resolved "https://registry.npm.taobao.org/abab/download/abab-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fabab%2Fdownload%2Fabab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
+ resolved "https://registry.npm.taobao.org/abab/download/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
integrity sha1-Yj4gdeAustPyR15J+ZyRhGRnkHo=
abbrev@1:
@@ -2852,12 +2852,12 @@ array-find@^1.0.0:
array-flatten@1.1.1:
version "1.1.1"
- resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
array-flatten@^2.1.0:
version "2.1.2"
- resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+ resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=
array-includes@^3.0.3:
@@ -2893,7 +2893,7 @@ array-unique@^0.3.2:
array.prototype.flat@^1.2.1:
version "1.2.3"
- resolved "https://registry.npm.taobao.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz?cache=0&sync_timestamp=1576170698154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray.prototype.flat%2Fdownload%2Farray.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
+ resolved "https://registry.npm.taobao.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
integrity sha1-DegrQmsDGNv9uUAInjiwQ9N/bHs=
dependencies:
define-properties "^1.1.3"
@@ -2955,7 +2955,7 @@ async-each@^1.0.1:
async-limiter@~1.0.0:
version "1.0.1"
- resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&sync_timestamp=1574271725892&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=
async-validator@~1.8.1:
@@ -2989,7 +2989,7 @@ atob@^2.1.2:
resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=
-autoprefixer@^9.0.0, autoprefixer@^9.6.1, autoprefixer@^9.7.5:
+autoprefixer@^9.0.0, autoprefixer@^9.6.1, autoprefixer@^9.7.5, autoprefixer@^9.7.6:
version "9.7.6"
resolved "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.7.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.7.6.tgz#63ac5bbc0ce7934e6997207d5bb00d68fa8293a4"
integrity sha1-Y6xbvAznk05plyB9W7ANaPqCk6Q=
@@ -3009,7 +3009,7 @@ aws-sign2@~0.7.0:
aws4@^1.8.0:
version "1.9.1"
- resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.9.1.tgz?cache=0&sync_timestamp=1578958301021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
+ resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
integrity sha1-fjPY99RJs/ZzzXLeuavcVS2+Uo4=
axios@^0.19.2:
@@ -3021,7 +3021,7 @@ axios@^0.19.2:
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
- resolved "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-code-frame%2Fdownload%2Fbabel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ resolved "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
dependencies:
chalk "^1.1.3"
@@ -3230,7 +3230,7 @@ bcrypt-pbkdf@^1.0.0:
bfj@^6.1.1:
version "6.1.2"
- resolved "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz?cache=0&sync_timestamp=1577112343792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbfj%2Fdownload%2Fbfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f"
+ resolved "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f"
integrity sha1-MlyGGoIryzWKQceKM7jm4ght3n8=
dependencies:
bluebird "^3.5.5"
@@ -3267,17 +3267,17 @@ bindings@^1.5.0:
bluebird@3.5.0:
version "3.5.0"
- resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+ resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.5.0.tgz?cache=0&sync_timestamp=1580303055242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=
bluebird@^3.1.1, bluebird@^3.5.5:
version "3.7.2"
- resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1580303055242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28=
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.8"
- resolved "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ resolved "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz?cache=0&sync_timestamp=1580360255972&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbn.js%2Fdownload%2Fbn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=
body-parser@1.19.0:
@@ -3420,7 +3420,7 @@ browserify-zlib@^0.2.0:
dependencies:
pako "~1.0.5"
-browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.9.1:
+browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.6.4, browserslist@^4.8.5, browserslist@^4.9.1:
version "4.11.1"
resolved "https://registry.npm.taobao.org/browserslist/download/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b"
integrity sha1-kvhV7ojW4FDn5zEdmHmSAU8aHxs=
@@ -3471,7 +3471,7 @@ buffer-xor@^1.0.3:
buffer@^4.3.0:
version "4.9.2"
- resolved "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ resolved "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
integrity sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=
dependencies:
base64-js "^1.0.2"
@@ -3572,7 +3572,7 @@ cache-loader@^4.1.0:
cachedir@1.3.0:
version "1.3.0"
- resolved "https://registry.npm.taobao.org/cachedir/download/cachedir-1.3.0.tgz?cache=0&sync_timestamp=1573952475105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcachedir%2Fdownload%2Fcachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4"
+ resolved "https://registry.npm.taobao.org/cachedir/download/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4"
integrity sha1-XgGSi/LZW17dlLCUIYgkZ0Dg28Q=
dependencies:
os-homedir "^1.0.1"
@@ -3653,9 +3653,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001038, caniuse-lite@^1.0.30001039:
- version "1.0.30001040"
- resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001040.tgz#103fc8e6eb1d7397e95134cd0e996743353d58ea"
- integrity sha1-ED/I5usdc5fpUTTNDplnQzU9WOo=
+ version "1.0.30001042"
+ resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001042.tgz#c91ec21ec2d270bd76dbc2ce261260c292b8c93c"
+ integrity sha1-yR7CHsLScL1228LOJhJgwpK4yTw=
capture-exit@^2.0.0:
version "2.0.0"
@@ -3717,12 +3717,12 @@ chalk@^4.0.0:
character-entities-html4@^1.0.0:
version "1.1.4"
- resolved "https://registry.npm.taobao.org/character-entities-html4/download/character-entities-html4-1.1.4.tgz?cache=0&sync_timestamp=1579858863220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcharacter-entities-html4%2Fdownload%2Fcharacter-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
+ resolved "https://registry.npm.taobao.org/character-entities-html4/download/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
integrity sha1-DmSwo3U92/H9wETF/QHQGZoC4SU=
character-entities-legacy@^1.0.0:
version "1.1.4"
- resolved "https://registry.npm.taobao.org/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcharacter-entities-legacy%2Fdownload%2Fcharacter-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ resolved "https://registry.npm.taobao.org/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
integrity sha1-lLwYRdznClu50uzHSHJWYSk9j8E=
character-entities@^1.0.0:
@@ -3732,7 +3732,7 @@ character-entities@^1.0.0:
character-reference-invalid@^1.0.0:
version "1.1.4"
- resolved "https://registry.npm.taobao.org/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcharacter-reference-invalid%2Fdownload%2Fcharacter-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ resolved "https://registry.npm.taobao.org/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
integrity sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA=
chardet@^0.7.0:
@@ -3747,7 +3747,7 @@ check-more-types@2.24.0:
check-types@^8.0.3:
version "8.0.3"
- resolved "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz?cache=0&sync_timestamp=1579454990891&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcheck-types%2Fdownload%2Fcheck-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
+ resolved "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
integrity sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=
"chokidar@>=2.0.0 <4.0.0", chokidar@^3.3.0:
@@ -3826,7 +3826,7 @@ class-utils@^0.3.5:
clean-css@4.2.x:
version "4.2.3"
- resolved "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz?cache=0&sync_timestamp=1580233507525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-css%2Fdownload%2Fclean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
+ resolved "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
integrity sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=
dependencies:
source-map "~0.6.0"
@@ -3888,9 +3888,9 @@ cli-truncate@^0.2.1:
string-width "^1.0.1"
cli-width@^2.0.0:
- version "2.2.0"
- resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
- integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+ version "2.2.1"
+ resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha1-sEM9C06chH7xiGik7xb9X8gnHEg=
clipboardy@^2.3.0:
version "2.3.0"
@@ -3954,12 +3954,12 @@ clone-regexp@^2.1.0:
clone@2.x:
version "2.1.2"
- resolved "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+ resolved "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz?cache=0&sync_timestamp=1580303205435&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone%2Fdownload%2Fclone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
clone@^1.0.2:
version "1.0.4"
- resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz?cache=0&sync_timestamp=1580303205435&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone%2Fdownload%2Fclone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
co@^4.6.0:
@@ -4056,10 +4056,10 @@ commander@2.17.x:
resolved "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1584148407069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
integrity sha1-vXerfebelCBc6sxy8XFtKfIKd78=
-commander@^4.0.1:
- version "4.1.1"
- resolved "https://registry.npm.taobao.org/commander/download/commander-4.1.1.tgz?cache=0&sync_timestamp=1584148407069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
- integrity sha1-n9YCvZNilOnp70aj9NaWQESxgGg=
+commander@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npm.taobao.org/commander/download/commander-5.0.0.tgz?cache=0&sync_timestamp=1584148407069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-5.0.0.tgz#dbf1909b49e5044f8fdaf0adc809f0c0722bdfd0"
+ integrity sha1-2/GQm0nlBE+P2vCtyAnwwHIr39A=
commander@~2.19.0:
version "2.19.0"
@@ -4090,7 +4090,7 @@ compressible@~2.0.16:
compression-webpack-plugin@^3.1.0:
version "3.1.0"
- resolved "https://registry.npm.taobao.org/compression-webpack-plugin/download/compression-webpack-plugin-3.1.0.tgz?cache=0&sync_timestamp=1578569159079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression-webpack-plugin%2Fdownload%2Fcompression-webpack-plugin-3.1.0.tgz#9f510172a7b5fae5aad3b670652e8bd7997aeeca"
+ resolved "https://registry.npm.taobao.org/compression-webpack-plugin/download/compression-webpack-plugin-3.1.0.tgz#9f510172a7b5fae5aad3b670652e8bd7997aeeca"
integrity sha1-n1EBcqe1+uWq07ZwZS6L15l67so=
dependencies:
cacache "^13.0.1"
@@ -4120,7 +4120,7 @@ concat-map@0.0.1:
concat-stream@1.6.2, concat-stream@^1.5.0:
version "1.6.2"
- resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz?cache=0&sync_timestamp=1569398378712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconcat-stream%2Fdownload%2Fconcat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=
dependencies:
buffer-from "^1.0.0"
@@ -4147,12 +4147,12 @@ config-chain@^1.1.12:
connect-history-api-fallback@^1.6.0:
version "1.6.0"
- resolved "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconnect-history-api-fallback%2Fdownload%2Fconnect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ resolved "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
integrity sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=
console-browserify@^1.1.0:
version "1.2.0"
- resolved "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz?cache=0&sync_timestamp=1572252287978&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsole-browserify%2Fdownload%2Fconsole-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ resolved "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
integrity sha1-ZwY871fOts9Jk6KrOlWECujEkzY=
consolidate@^0.15.1:
@@ -4186,7 +4186,7 @@ content-type@~1.0.4:
convert-source-map@^1.4.0, convert-source-map@^1.7.0:
version "1.7.0"
- resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003862096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=
dependencies:
safe-buffer "~5.1.1"
@@ -4237,11 +4237,11 @@ copy-webpack-plugin@^5.1.1:
webpack-log "^2.0.0"
core-js-compat@^3.6.2, core-js-compat@^3.6.4:
- version "3.6.4"
- resolved "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17"
- integrity sha1-k4R2Vp67bNqA0zm88Zn65PFv/xc=
+ version "3.6.5"
+ resolved "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
+ integrity sha1-KlHZpOJd/W5pAlGqgfmePAVIHxw=
dependencies:
- browserslist "^4.8.3"
+ browserslist "^4.8.5"
semver "7.0.0"
core-js@^2.4.0:
@@ -4261,7 +4261,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
cosmiconfig@^5.0.0:
version "5.2.1"
- resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo=
dependencies:
import-fresh "^2.0.0"
@@ -4271,7 +4271,7 @@ cosmiconfig@^5.0.0:
cosmiconfig@^6.0.0:
version "6.0.0"
- resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI=
dependencies:
"@types/parse-json" "^4.0.0"
@@ -4391,9 +4391,9 @@ css-has-pseudo@^0.10.0:
postcss-selector-parser "^5.0.0-rc.4"
css-loader@^3.4.2:
- version "3.5.1"
- resolved "https://registry.npm.taobao.org/css-loader/download/css-loader-3.5.1.tgz#db2b2336f4169edb68e6a829ad4fd36552647b77"
- integrity sha1-2ysjNvQWntto5qgprU/TZVJke3c=
+ version "3.5.2"
+ resolved "https://registry.npm.taobao.org/css-loader/download/css-loader-3.5.2.tgz#6483ae56f48a7f901fbe07dde2fc96b01eafab3c"
+ integrity sha1-ZIOuVvSKf5Afvgfd4vyWsB6vqzw=
dependencies:
camelcase "^5.3.1"
cssesc "^3.0.0"
@@ -4644,7 +4644,7 @@ cypress@^3.8.3:
d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0:
version "1.2.4"
- resolved "https://registry.npm.taobao.org/d3-array/download/d3-array-1.2.4.tgz?cache=0&sync_timestamp=1584638347424&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-array%2Fdownload%2Fd3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
+ resolved "https://registry.npm.taobao.org/d3-array/download/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
integrity sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8=
d3-axis@1:
@@ -4654,7 +4654,7 @@ d3-axis@1:
d3-brush@1:
version "1.1.5"
- resolved "https://registry.npm.taobao.org/d3-brush/download/d3-brush-1.1.5.tgz?cache=0&sync_timestamp=1574264321125&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-brush%2Fdownload%2Fd3-brush-1.1.5.tgz#066b8e84d17b192986030446c97c0fba7e1bacdc"
+ resolved "https://registry.npm.taobao.org/d3-brush/download/d3-brush-1.1.5.tgz#066b8e84d17b192986030446c97c0fba7e1bacdc"
integrity sha1-BmuOhNF7GSmGAwRGyXwPun4brNw=
dependencies:
d3-dispatch "1"
@@ -4786,7 +4786,7 @@ d3-scale-chromatic@1:
d3-scale@2:
version "2.2.2"
- resolved "https://registry.npm.taobao.org/d3-scale/download/d3-scale-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-scale%2Fdownload%2Fd3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f"
+ resolved "https://registry.npm.taobao.org/d3-scale/download/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f"
integrity sha1-TogOCydFrKrd0+3iap6Qip4XuB8=
dependencies:
d3-array "^1.2.0"
@@ -4798,7 +4798,7 @@ d3-scale@2:
d3-selection@1, d3-selection@^1.1.0:
version "1.4.1"
- resolved "https://registry.npm.taobao.org/d3-selection/download/d3-selection-1.4.1.tgz?cache=0&sync_timestamp=1573957859667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-selection%2Fdownload%2Fd3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98"
+ resolved "https://registry.npm.taobao.org/d3-selection/download/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98"
integrity sha1-mO7bvghfvaW6+i+ePzovTX1iKpg=
d3-shape@1:
@@ -4954,7 +4954,7 @@ decamelize-keys@^1.0.0, decamelize-keys@^1.1.0:
decamelize@^1.1.0, decamelize@^1.2.0:
version "1.2.0"
- resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1580010361049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decode-uri-component@^0.2.0:
@@ -5253,7 +5253,7 @@ dotenv-expand@^5.1.0:
dotenv@^8.2.0:
version "8.2.0"
- resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-8.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
+ resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
integrity sha1-l+YZJZradQ7qPk6j4mvO6lQksWo=
duplexer@^0.1.1:
@@ -5317,19 +5317,19 @@ ejs@^2.6.1:
integrity sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=
electron-to-chromium@^1.3.390:
- version "1.3.402"
- resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.402.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.402.tgz#9ad93c0c8ea2e571431739e0d76bd6bc9788a846"
- integrity sha1-mtk8DI6i5XFDFzng12vWvJeIqEY=
+ version "1.3.411"
+ resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.411.tgz#203a24482ac39b039cca0090f9ec05d79074f76d"
+ integrity sha1-IDokSCrDmwOcygCQ+ewF15B0920=
elegant-spinner@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
-element-ui@^2.13.0:
- version "2.13.0"
- resolved "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.13.0.tgz#f6bb04e5b0a76ea5f62466044b774407ba4ebd2d"
- integrity sha1-9rsE5bCnbqX2JGYES3dEB7pOvS0=
+element-ui@^2.13.1:
+ version "2.13.1"
+ resolved "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.13.1.tgz#0cb1a45cf27aa61c601defbe192740ac5cb9df7c"
+ integrity sha1-DLGkXPJ6phxgHe++GSdArFy533w=
dependencies:
async-validator "~1.8.1"
babel-helper-vue-jsx-merge-props "^2.0.0"
@@ -5385,7 +5385,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
enhanced-resolve@^0.9.1:
version "0.9.1"
- resolved "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-0.9.1.tgz?cache=0&sync_timestamp=1572991320122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
+ resolved "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=
dependencies:
graceful-fs "^4.1.2"
@@ -5394,7 +5394,7 @@ enhanced-resolve@^0.9.1:
enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
version "4.1.1"
- resolved "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.1.tgz?cache=0&sync_timestamp=1572991320122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ resolved "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
integrity sha1-KTfiuAZs0P584JkKmPDXGjUYn2Y=
dependencies:
graceful-fs "^4.1.2"
@@ -5500,7 +5500,7 @@ eslint-import-resolver-node@^0.3.2, eslint-import-resolver-node@^0.3.3:
eslint-import-resolver-webpack@^0.12.1:
version "0.12.1"
- resolved "https://registry.npm.taobao.org/eslint-import-resolver-webpack/download/eslint-import-resolver-webpack-0.12.1.tgz?cache=0&sync_timestamp=1578726650624&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-import-resolver-webpack%2Fdownload%2Feslint-import-resolver-webpack-0.12.1.tgz#771ae561e887ca4e53ee87605fbb36c5e290b0f5"
+ resolved "https://registry.npm.taobao.org/eslint-import-resolver-webpack/download/eslint-import-resolver-webpack-0.12.1.tgz#771ae561e887ca4e53ee87605fbb36c5e290b0f5"
integrity sha1-dxrlYeiHyk5T7odgX7s2xeKQsPU=
dependencies:
array-find "^1.0.0"
@@ -5615,14 +5615,14 @@ eslint-scope@^5.0.0:
eslint-utils@^1.4.3:
version "1.4.3"
- resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&sync_timestamp=1577351142754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
integrity sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-utils@^2.0.0:
version "2.0.0"
- resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.0.0.tgz?cache=0&sync_timestamp=1577351142754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd"
+ resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd"
integrity sha1-e+HMcPJ6cqds0UqmmLyr7WiQ4c0=
dependencies:
eslint-visitor-keys "^1.1.0"
@@ -5686,15 +5686,15 @@ espree@^6.1.2:
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
- resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&sync_timestamp=1569398383140&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=
esquery@^1.0.1:
- version "1.2.0"
- resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe"
- integrity sha1-oBClGcAojyUws0BBJL+18C6Xl/4=
+ version "1.3.1"
+ resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+ integrity sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=
dependencies:
- estraverse "^5.0.0"
+ estraverse "^5.1.0"
esrecurse@^4.1.0:
version "4.2.1"
@@ -5705,13 +5705,13 @@ esrecurse@^4.1.0:
estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
- resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1584934808187&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=
-estraverse@^5.0.0:
- version "5.0.0"
- resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.0.0.tgz?cache=0&sync_timestamp=1584934808187&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22"
- integrity sha1-rIF1C0gsEcyibksH6D7Y91+83CI=
+estraverse@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
+ integrity sha1-N0MJ05/ZNa5QDnuS6Ka0xyDllkI=
esutils@^2.0.2:
version "2.0.3"
@@ -5807,7 +5807,7 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
-execa@^3.3.0, execa@^3.4.0:
+execa@^3.3.0:
version "3.4.0"
resolved "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
integrity sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=
@@ -5823,6 +5823,21 @@ execa@^3.3.0, execa@^3.4.0:
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
+execa@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npm.taobao.org/execa/download/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf"
+ integrity sha1-fzfW7BfwnmuPxTKIYRaVttErna8=
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
execall@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/execall/download/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73"
@@ -6047,7 +6062,7 @@ faye-websocket@~0.11.1:
fb-watchman@^2.0.0:
version "2.0.1"
- resolved "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffb-watchman%2Fdownload%2Ffb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ resolved "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
integrity sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU=
dependencies:
bser "2.1.1"
@@ -6248,7 +6263,7 @@ flatted@^2.0.0:
flatten@^1.0.2:
version "1.0.3"
- resolved "https://registry.npm.taobao.org/flatten/download/flatten-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatten%2Fdownload%2Fflatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
+ resolved "https://registry.npm.taobao.org/flatten/download/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
integrity sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs=
flush-write-stream@^1.0.0:
@@ -6420,7 +6435,7 @@ get-caller-file@^2.0.1:
get-own-enumerable-property-symbols@^3.0.0:
version "3.0.2"
- resolved "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ resolved "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
integrity sha1-tf3nfyLL4185C04ImSLFC85u9mQ=
get-stdin@^6.0.0:
@@ -6498,7 +6513,7 @@ glob-to-regexp@^0.3.0:
glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.6"
- resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078302562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=
dependencies:
fs.realpath "^1.0.0"
@@ -6550,7 +6565,7 @@ globals@^9.18.0:
globby@^11.0.0:
version "11.0.0"
- resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.0.tgz#56fd0e9f0d4f8fb0c456f1ab0dee96e1380bc154"
+ resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.0.tgz#56fd0e9f0d4f8fb0c456f1ab0dee96e1380bc154"
integrity sha1-Vv0Onw1Pj7DEVvGrDe6W4TgLwVQ=
dependencies:
array-union "^2.1.0"
@@ -6562,7 +6577,7 @@ globby@^11.0.0:
globby@^6.1.0:
version "6.1.0"
- resolved "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ resolved "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
dependencies:
array-union "^1.0.1"
@@ -6573,7 +6588,7 @@ globby@^6.1.0:
globby@^7.1.1:
version "7.1.1"
- resolved "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
+ resolved "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA=
dependencies:
array-union "^1.0.1"
@@ -6585,7 +6600,7 @@ globby@^7.1.1:
globby@^9.0.0, globby@^9.2.0:
version "9.2.0"
- resolved "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
+ resolved "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
integrity sha1-/QKacGxwPSm90XD0tts6P3p8tj0=
dependencies:
"@types/glob" "^7.1.1"
@@ -6688,7 +6703,7 @@ has-flag@^4.0.0:
has-symbols@^1.0.0, has-symbols@^1.0.1:
version "1.0.1"
- resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950719586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
integrity sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=
has-value@^0.3.1:
@@ -6749,7 +6764,7 @@ hash-sum@^2.0.0:
hash.js@^1.0.0, hash.js@^1.0.3:
version "1.1.7"
- resolved "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ resolved "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz?cache=0&sync_timestamp=1580360258783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhash.js%2Fdownload%2Fhash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=
dependencies:
inherits "^2.0.3"
@@ -6822,9 +6837,9 @@ html-encoding-sniffer@^1.0.2:
whatwg-encoding "^1.0.1"
html-entities@^1.2.1:
- version "1.2.1"
- resolved "https://registry.npm.taobao.org/html-entities/download/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
- integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
+ version "1.3.1"
+ resolved "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.1.tgz?cache=0&sync_timestamp=1586616304085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
+ integrity sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=
html-escaper@^2.0.0:
version "2.0.2"
@@ -6956,12 +6971,12 @@ https-browserify@^1.0.0:
human-signals@^1.1.1:
version "1.1.1"
- resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1584199206838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M=
iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
- resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1579333981154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
dependencies:
safer-buffer ">= 2.1.2 < 3"
@@ -7007,7 +7022,7 @@ import-cwd@^2.0.0:
import-fresh@^2.0.0:
version "2.0.0"
- resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1573664960772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
dependencies:
caller-path "^2.0.0"
@@ -7015,7 +7030,7 @@ import-fresh@^2.0.0:
import-fresh@^3.0.0, import-fresh@^3.1.0:
version "3.2.1"
- resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz?cache=0&sync_timestamp=1573664960772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
integrity sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=
dependencies:
parent-module "^1.0.0"
@@ -7238,17 +7253,17 @@ is-binary-path@~2.1.0:
is-buffer@^1.1.5:
version "1.1.6"
- resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1569904999656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha1-76ouqdqg16suoTqXsritUf776L4=
is-buffer@^2.0.0:
version "2.0.4"
- resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz?cache=0&sync_timestamp=1569904999656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
+ resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
integrity sha1-PlcvI8hBGlz9lVfISeNmXgspBiM=
is-callable@^1.1.4, is-callable@^1.1.5:
version "1.1.5"
- resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.5.tgz?cache=0&sync_timestamp=1576778715281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+ resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
integrity sha1-9+RrWWiQRW23Tn9ul2yzJz0G+qs=
is-ci@1.2.1, is-ci@^1.0.10:
@@ -7293,7 +7308,7 @@ is-data-descriptor@^1.0.0:
is-date-object@^1.0.1:
version "1.0.2"
- resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
integrity sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=
is-decimal@^1.0.0, is-decimal@^1.0.2:
@@ -7438,26 +7453,26 @@ is-path-in-cwd@^2.0.0:
is-path-inside@^1.0.0:
version "1.0.1"
- resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz?cache=0&sync_timestamp=1569835858319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-inside%2Fdownload%2Fis-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
dependencies:
path-is-inside "^1.0.1"
is-path-inside@^2.1.0:
version "2.1.0"
- resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz?cache=0&sync_timestamp=1569835858319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-inside%2Fdownload%2Fis-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
integrity sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=
dependencies:
path-is-inside "^1.0.2"
is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
- resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
is-plain-obj@^2.0.0:
version "2.1.0"
- resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
integrity sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
@@ -7506,7 +7521,7 @@ is-stream@^2.0.0:
is-string@^1.0.5:
version "1.0.5"
- resolved "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz?cache=0&sync_timestamp=1576731545458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-string%2Fdownload%2Fis-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ resolved "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
integrity sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=
is-supported-regexp-flag@^1.0.0:
@@ -7574,9 +7589,9 @@ isexe@^2.0.0:
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
ismobilejs@^1.0.3:
- version "1.0.3"
- resolved "https://registry.npm.taobao.org/ismobilejs/download/ismobilejs-1.0.3.tgz#69ec3faccd17dfeeadd471e70955d1e192a46eb6"
- integrity sha1-aew/rM0X3+6t1HHnCVXR4ZKkbrY=
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/ismobilejs/download/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e"
+ integrity sha1-xWygro5Sskyg8iul7zIVot27qg4=
isobject@^2.0.0:
version "2.1.0"
@@ -8084,12 +8099,12 @@ js-queue@2.0.0:
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
- resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796305651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk=
js-tokens@^3.0.2:
version "3.0.2"
- resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz?cache=0&sync_timestamp=1586796305651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.1:
@@ -8350,7 +8365,7 @@ leven@^3.1.0:
levenary@^1.1.1:
version "1.1.1"
- resolved "https://registry.npm.taobao.org/levenary/download/levenary-1.1.1.tgz?cache=0&sync_timestamp=1580182420629&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flevenary%2Fdownload%2Flevenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
+ resolved "https://registry.npm.taobao.org/levenary/download/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
integrity sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c=
dependencies:
leven "^3.1.0"
@@ -8368,17 +8383,17 @@ lines-and-columns@^1.1.6:
resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
-lint-staged@^10.1.3:
- version "10.1.3"
- resolved "https://registry.npm.taobao.org/lint-staged/download/lint-staged-10.1.3.tgz?cache=0&sync_timestamp=1586441577415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flint-staged%2Fdownload%2Flint-staged-10.1.3.tgz#da27713d3ac519da305381b4de87d5f866b1d2f1"
- integrity sha1-2idxPTrFGdowU4G03ofV+Gax0vE=
+lint-staged@^10.1.6:
+ version "10.1.6"
+ resolved "https://registry.npm.taobao.org/lint-staged/download/lint-staged-10.1.6.tgz?cache=0&sync_timestamp=1587288161031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flint-staged%2Fdownload%2Flint-staged-10.1.6.tgz#086db5e4f5906642ccf648e9b54375d794a9be81"
+ integrity sha1-CG215PWQZkLM9kjptUN115SpvoE=
dependencies:
- chalk "^3.0.0"
- commander "^4.0.1"
+ chalk "^4.0.0"
+ commander "^5.0.0"
cosmiconfig "^6.0.0"
debug "^4.1.1"
dedent "^0.7.0"
- execa "^3.4.0"
+ execa "^4.0.0"
listr "^0.14.3"
log-symbols "^3.0.0"
micromatch "^4.0.2"
@@ -8422,7 +8437,7 @@ listr-update-renderer@^0.5.0:
listr-verbose-renderer@^0.4.0:
version "0.4.1"
- resolved "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flistr-verbose-renderer%2Fdownload%2Flistr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35"
+ resolved "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35"
integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=
dependencies:
chalk "^1.1.3"
@@ -8432,7 +8447,7 @@ listr-verbose-renderer@^0.4.0:
listr-verbose-renderer@^0.5.0:
version "0.5.0"
- resolved "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flistr-verbose-renderer%2Fdownload%2Flistr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+ resolved "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
integrity sha1-8RMhZ1NepMEmEQK58o2sfLoeA9s=
dependencies:
chalk "^2.4.1"
@@ -8507,7 +8522,7 @@ loader-fs-cache@^1.0.0:
loader-runner@^2.3.1, loader-runner@^2.4.0:
version "2.4.0"
- resolved "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1574712695617&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ resolved "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
integrity sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=
loader-utils@^0.2.16:
@@ -8614,7 +8629,7 @@ lodash.uniq@^4.5.0:
lodash@4.17.15, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4:
version "4.17.15"
- resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1580303049395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=
log-symbols@2.2.0, log-symbols@^2.0.0, log-symbols@^2.2.0:
@@ -8656,9 +8671,9 @@ log-update@^2.3.0:
wrap-ansi "^3.0.1"
loglevel@^1.6.6:
- version "1.6.7"
- resolved "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56"
- integrity sha1-s+A0IzGIxouIn1uGJBUwb1ZeLFY=
+ version "1.6.8"
+ resolved "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.8.tgz?cache=0&sync_timestamp=1586860647361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
+ integrity sha1-iiX7ddCSIw7NRFcnDYC1TigBEXE=
longest-streak@^2.0.1:
version "2.0.4"
@@ -8831,12 +8846,12 @@ mdast-util-compact@^2.0.0:
mdn-data@2.0.4:
version "2.0.4"
- resolved "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&sync_timestamp=1584029207120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ resolved "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
integrity sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=
mdn-data@2.0.6:
version "2.0.6"
- resolved "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.6.tgz?cache=0&sync_timestamp=1584029207120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978"
+ resolved "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978"
integrity sha1-hS3GD8ql2qLoz2yRicRA7T4EKXg=
media-typer@0.3.0:
@@ -8846,7 +8861,7 @@ media-typer@0.3.0:
mem@^4.0.0:
version "4.3.0"
- resolved "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz?cache=0&sync_timestamp=1575061501673&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmem%2Fdownload%2Fmem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ resolved "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz?cache=0&sync_timestamp=1586702409385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmem%2Fdownload%2Fmem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
integrity sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=
dependencies:
map-age-cleaner "^0.1.1"
@@ -8940,7 +8955,7 @@ microevent.ts@~0.1.1:
micromatch@^3.1.10, micromatch@^3.1.4:
version "3.1.10"
- resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1580303044337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM=
dependencies:
arr-diff "^4.0.0"
@@ -8959,7 +8974,7 @@ micromatch@^3.1.10, micromatch@^3.1.4:
micromatch@^4.0.0, micromatch@^4.0.2:
version "4.0.2"
- resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz?cache=0&sync_timestamp=1580303044337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
integrity sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=
dependencies:
braces "^3.0.1"
@@ -9136,7 +9151,7 @@ mkdirp@~1.0.3:
moment@2.24.0:
version "2.24.0"
- resolved "https://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+ resolved "https://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz?cache=0&sync_timestamp=1580303206095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
integrity sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s=
move-concurrently@^1.0.1:
@@ -9316,7 +9331,7 @@ node-notifier@^5.4.2:
node-object-hash@^1.2.0:
version "1.4.2"
- resolved "https://registry.npm.taobao.org/node-object-hash/download/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94"
+ resolved "https://registry.npm.taobao.org/node-object-hash/download/node-object-hash-1.4.2.tgz?cache=0&sync_timestamp=1580306715622&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-object-hash%2Fdownload%2Fnode-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94"
integrity sha1-OFgz2FsimQK3WCYiT2B3vpaanpQ=
node-releases@^1.1.53:
@@ -9396,14 +9411,14 @@ normalize.css@^8.0.1:
npm-run-path@^2.0.0:
version "2.0.2"
- resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1577053378987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
dependencies:
path-key "^2.0.0"
npm-run-path@^4.0.0:
version "4.0.1"
- resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz?cache=0&sync_timestamp=1577053378987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo=
dependencies:
path-key "^3.0.0"
@@ -9432,7 +9447,7 @@ number-is-nan@^1.0.0:
nwsapi@^2.0.7, nwsapi@^2.2.0:
version "2.2.0"
- resolved "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz?cache=0&sync_timestamp=1572825100671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnwsapi%2Fdownload%2Fnwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ resolved "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
integrity sha1-IEh5qePQaP8qVROcLHcngGgaOLc=
oauth-sign@~0.9.0:
@@ -9461,13 +9476,16 @@ object-hash@^1.1.4:
object-inspect@^1.7.0:
version "1.7.0"
- resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz?cache=0&sync_timestamp=1573451929207&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
integrity sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc=
object-is@^1.0.1:
- version "1.0.2"
- resolved "https://registry.npm.taobao.org/object-is/download/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4"
- integrity sha1-a4DrhP5FFJj2UAeYLwNaW0Re3sQ=
+ version "1.1.2"
+ resolved "https://registry.npm.taobao.org/object-is/download/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+ integrity sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y=
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
@@ -9754,7 +9772,7 @@ p-try@^2.0.0:
pako@~1.0.5:
version "1.0.11"
- resolved "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ resolved "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=
parallel-transform@^1.1.0:
@@ -9794,7 +9812,7 @@ parse-asn1@^5.0.0:
parse-entities@^1.0.2, parse-entities@^1.1.0:
version "1.2.2"
- resolved "https://registry.npm.taobao.org/parse-entities/download/parse-entities-1.2.2.tgz?cache=0&sync_timestamp=1578990061117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-entities%2Fdownload%2Fparse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+ resolved "https://registry.npm.taobao.org/parse-entities/download/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
integrity sha1-wxvw9lO2ZhNU+Jc1WcuG3R1e31A=
dependencies:
character-entities "^1.0.0"
@@ -9806,7 +9824,7 @@ parse-entities@^1.0.2, parse-entities@^1.1.0:
parse-entities@^2.0.0:
version "2.0.0"
- resolved "https://registry.npm.taobao.org/parse-entities/download/parse-entities-2.0.0.tgz?cache=0&sync_timestamp=1578990061117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-entities%2Fdownload%2Fparse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ resolved "https://registry.npm.taobao.org/parse-entities/download/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
integrity sha1-U8brW5MUofTsmfoP33zgHs2gy+g=
dependencies:
character-entities "^1.0.0"
@@ -9932,7 +9950,7 @@ path-parse@^1.0.6:
path-to-regexp@0.1.7:
version "0.1.7"
- resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
path-type@^2.0.0:
@@ -10127,7 +10145,7 @@ pnp-webpack-plugin@^1.6.4:
portfinder@^1.0.25:
version "1.0.25"
- resolved "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.25.tgz?cache=0&sync_timestamp=1571176857935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
+ resolved "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
integrity sha1-JU/TN/+6hp9LnTftwpgFnLTTXso=
dependencies:
async "^2.6.2"
@@ -11054,7 +11072,7 @@ qs@~6.5.2:
query-string@^4.1.0:
version "4.3.4"
- resolved "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1586157419029&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ resolved "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
dependencies:
object-assign "^4.1.0"
@@ -11122,12 +11140,12 @@ raw-body@2.4.0:
react-is@^16.12.0, react-is@^16.8.4:
version "16.13.1"
- resolved "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz?cache=0&sync_timestamp=1586484609601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ resolved "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ=
read-pkg-up@^2.0.0:
version "2.0.0"
- resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz?cache=0&sync_timestamp=1575647702557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
dependencies:
find-up "^2.0.0"
@@ -11135,7 +11153,7 @@ read-pkg-up@^2.0.0:
read-pkg-up@^3.0.0:
version "3.0.0"
- resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-3.0.0.tgz?cache=0&sync_timestamp=1575647702557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+ resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
dependencies:
find-up "^2.0.0"
@@ -11143,7 +11161,7 @@ read-pkg-up@^3.0.0:
read-pkg-up@^4.0.0:
version "4.0.0"
- resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-4.0.0.tgz?cache=0&sync_timestamp=1575647702557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+ resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
integrity sha1-GyIcYIi6d5lgHICPkRYcZuWPiXg=
dependencies:
find-up "^3.0.0"
@@ -11151,7 +11169,7 @@ read-pkg-up@^4.0.0:
read-pkg-up@^7.0.0:
version "7.0.1"
- resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz?cache=0&sync_timestamp=1575647702557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=
dependencies:
find-up "^4.1.0"
@@ -11492,7 +11510,7 @@ request-promise-core@1.1.3:
request-promise-native@^1.0.5, request-promise-native@^1.0.7, request-promise-native@^1.0.8:
version "1.0.8"
- resolved "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.8.tgz?cache=0&sync_timestamp=1572829735085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-native%2Fdownload%2Frequest-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
+ resolved "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
integrity sha1-pFW5YLgm5E4r+Jma9k3/K/5YyzY=
dependencies:
request-promise-core "1.1.3"
@@ -11605,13 +11623,13 @@ resolve-url@^0.2.1:
resolve@1.1.7:
version "1.1.7"
- resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz?cache=0&sync_timestamp=1580944242910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1:
- version "1.15.1"
- resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz?cache=0&sync_timestamp=1580944242910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
- integrity sha1-J73N7/6vLWJEuVuw+fS0ZTRR8+g=
+ version "1.16.0"
+ resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.16.0.tgz#063dc704fa3413e13ac1d0d1756a7cbfe95dd1a7"
+ integrity sha1-Bj3HBPo0E+E6wdDRdWp8v+ld0ac=
dependencies:
path-parse "^1.0.6"
@@ -11701,7 +11719,7 @@ rsvp@^4.8.4:
run-async@^2.4.0:
version "2.4.0"
- resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.0.tgz?cache=0&sync_timestamp=1582711649944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-async%2Fdownload%2Frun-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8"
+ resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8"
integrity sha1-5ZBUpbhods+uB/Qx0Yy63cWU8eg=
dependencies:
is-promise "^2.1.0"
@@ -11833,7 +11851,7 @@ select-hose@^2.0.0:
selfsigned@^1.10.7:
version "1.10.7"
- resolved "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz?cache=0&sync_timestamp=1569952074772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
+ resolved "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
integrity sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=
dependencies:
node-forge "0.9.0"
@@ -11845,17 +11863,17 @@ semver-compare@^1.0.0:
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
version "5.7.1"
- resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586216284901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
semver@7.0.0:
version "7.0.0"
- resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1586216284901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=
semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
- resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586216284901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=
send@0.17.1:
@@ -12274,7 +12292,7 @@ stealthy-require@^1.1.1:
stream-browserify@^2.0.1:
version "2.0.2"
- resolved "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ resolved "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz?cache=0&sync_timestamp=1587041545531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-browserify%2Fdownload%2Fstream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
integrity sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=
dependencies:
inherits "~2.0.1"
@@ -12301,7 +12319,7 @@ stream-http@^2.7.2:
stream-shift@^1.0.0:
version "1.0.1"
- resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147145118&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0=
stream-to-observable@^0.1.0:
@@ -12450,28 +12468,28 @@ stringify-object@^3.3.0:
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
- resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^4.0.0:
version "4.0.0"
- resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
dependencies:
ansi-regex "^3.0.0"
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
- resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
dependencies:
ansi-regex "^4.1.0"
strip-ansi@^6.0.0:
version "6.0.0"
- resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=
dependencies:
ansi-regex "^5.0.0"
@@ -12567,7 +12585,7 @@ stylelint-config-standard@^19.0.0:
stylelint-order@^2.2.1:
version "2.2.1"
- resolved "https://registry.npm.taobao.org/stylelint-order/download/stylelint-order-2.2.1.tgz?cache=0&sync_timestamp=1577885057299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint-order%2Fdownload%2Fstylelint-order-2.2.1.tgz#cd2d4a0d81d91c705f1d275a58487e5ad5aa5828"
+ resolved "https://registry.npm.taobao.org/stylelint-order/download/stylelint-order-2.2.1.tgz#cd2d4a0d81d91c705f1d275a58487e5ad5aa5828"
integrity sha1-zS1KDYHZHHBfHSdaWEh+WtWqWCg=
dependencies:
lodash "^4.17.10"
@@ -12576,7 +12594,7 @@ stylelint-order@^2.2.1:
stylelint-order@^3.1.1:
version "3.1.1"
- resolved "https://registry.npm.taobao.org/stylelint-order/download/stylelint-order-3.1.1.tgz?cache=0&sync_timestamp=1577885057299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint-order%2Fdownload%2Fstylelint-order-3.1.1.tgz#ba9ea6844d1482f97f31204e7c9605c7b792c294"
+ resolved "https://registry.npm.taobao.org/stylelint-order/download/stylelint-order-3.1.1.tgz#ba9ea6844d1482f97f31204e7c9605c7b792c294"
integrity sha1-up6mhE0Ugvl/MSBOfJYFx7eSwpQ=
dependencies:
lodash "^4.17.15"
@@ -12584,9 +12602,9 @@ stylelint-order@^3.1.1:
postcss-sorting "^5.0.1"
stylelint-scss@^3.11.1:
- version "3.16.1"
- resolved "https://registry.npm.taobao.org/stylelint-scss/download/stylelint-scss-3.16.1.tgz#4164558f2113663e54101175588603e014cd0b9c"
- integrity sha1-QWRVjyETZj5UEBF1WIYD4BTNC5w=
+ version "3.17.0"
+ resolved "https://registry.npm.taobao.org/stylelint-scss/download/stylelint-scss-3.17.0.tgz?cache=0&sync_timestamp=1586847957126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint-scss%2Fdownload%2Fstylelint-scss-3.17.0.tgz#20480ec52d0acf6fadde54e655f44a858af380da"
+ integrity sha1-IEgOxS0Kz2+t3lTmVfRKhYrzgNo=
dependencies:
lodash "^4.17.15"
postcss-media-query-parser "^0.2.3"
@@ -12603,14 +12621,14 @@ stylelint-webpack-plugin@^1.2.3:
micromatch "^4.0.2"
schema-utils "^2.6.1"
-stylelint@^13.3.1:
- version "13.3.1"
- resolved "https://registry.npm.taobao.org/stylelint/download/stylelint-13.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint%2Fdownload%2Fstylelint-13.3.1.tgz#815917e88d7528b24e6d0e6a9b3afb76b50efc26"
- integrity sha1-gVkX6I11KLJObQ5qmzr7drUO/CY=
+stylelint@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.npm.taobao.org/stylelint/download/stylelint-13.3.2.tgz?cache=0&sync_timestamp=1586618701390&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint%2Fdownload%2Fstylelint-13.3.2.tgz#fbcb69a2452bc35de3eedd95b443449f92ab4107"
+ integrity sha1-+8tpokUrw13j7t2VtENEn5KrQQc=
dependencies:
- "@stylelint/postcss-css-in-js" "^0.37.0"
+ "@stylelint/postcss-css-in-js" "^0.37.1"
"@stylelint/postcss-markdown" "^0.36.1"
- autoprefixer "^9.7.5"
+ autoprefixer "^9.7.6"
balanced-match "^1.0.0"
chalk "^4.0.0"
cosmiconfig "^6.0.0"
@@ -12659,7 +12677,7 @@ stylelint@^13.3.1:
stylelint@^9.10.1:
version "9.10.1"
- resolved "https://registry.npm.taobao.org/stylelint/download/stylelint-9.10.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint%2Fdownload%2Fstylelint-9.10.1.tgz#5f0ee3701461dff1d68284e1386efe8f0677a75d"
+ resolved "https://registry.npm.taobao.org/stylelint/download/stylelint-9.10.1.tgz?cache=0&sync_timestamp=1586618701390&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint%2Fdownload%2Fstylelint-9.10.1.tgz#5f0ee3701461dff1d68284e1386efe8f0677a75d"
integrity sha1-Xw7jcBRh3/HWgoThOG7+jwZ3p10=
dependencies:
autoprefixer "^9.0.0"
@@ -12719,26 +12737,26 @@ sugarss@^2.0.0:
supports-color@5.5.0, supports-color@^5.3.0:
version "5.5.0"
- resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=
dependencies:
has-flag "^3.0.0"
supports-color@^2.0.0:
version "2.0.0"
- resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
supports-color@^6.1.0:
version "6.1.0"
- resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=
dependencies:
has-flag "^3.0.0"
supports-color@^7.0.0, supports-color@^7.1.0:
version "7.1.0"
- resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
+ resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
integrity sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=
dependencies:
has-flag "^4.0.0"
@@ -12750,7 +12768,7 @@ svg-tags@^1.0.0:
svgo@^1.0.0:
version "1.3.2"
- resolved "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1572433377078&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+ resolved "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
integrity sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=
dependencies:
chalk "^2.4.1"
@@ -12784,7 +12802,7 @@ symbol-tree@^3.2.2:
table@^5.0.0, table@^5.2.3, table@^5.4.6:
version "5.4.6"
- resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz?cache=0&sync_timestamp=1582102331079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftable%2Fdownload%2Ftable-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
integrity sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=
dependencies:
ajv "^6.10.2"
@@ -12955,12 +12973,12 @@ to-arraybuffer@^1.0.0:
to-fast-properties@^1.0.3:
version "1.0.3"
- resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz?cache=0&sync_timestamp=1580550347606&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
to-fast-properties@^2.0.0:
version "2.0.0"
- resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550347606&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
to-object-path@^0.3.0:
@@ -13069,7 +13087,7 @@ tryer@^1.0.1:
ts-jest@^24.2.0:
version "24.3.0"
- resolved "https://registry.npm.taobao.org/ts-jest/download/ts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869"
+ resolved "https://registry.npm.taobao.org/ts-jest/download/ts-jest-24.3.0.tgz?cache=0&sync_timestamp=1587103455065&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-jest%2Fdownload%2Fts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869"
integrity sha1-uXgU4+qzWeqEChrBEt6uaKpECGk=
dependencies:
bs-logger "0.x"
@@ -13085,7 +13103,7 @@ ts-jest@^24.2.0:
ts-loader@^6.2.2:
version "6.2.2"
- resolved "https://registry.npm.taobao.org/ts-loader/download/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58"
+ resolved "https://registry.npm.taobao.org/ts-loader/download/ts-loader-6.2.2.tgz?cache=0&sync_timestamp=1586927367616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-loader%2Fdownload%2Fts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58"
integrity sha1-3/o4ebAaGh4KS4XiuEIdwN//HFg=
dependencies:
chalk "^2.3.0"
@@ -13213,7 +13231,7 @@ typescript@~3.8.3:
uglify-js@3.4.x:
version "3.4.10"
- resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
+ resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
integrity sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=
dependencies:
commander "~2.19.0"
@@ -13426,7 +13444,7 @@ upath@^1.1.1:
upper-case@^1.1.1:
version "1.1.3"
- resolved "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&sync_timestamp=1575601618969&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+ resolved "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
uri-js@^4.2.2:
@@ -13460,7 +13478,7 @@ url-parse@^1.4.3:
url@0.11.0, url@^0.11.0:
version "0.11.0"
- resolved "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ resolved "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl%2Fdownload%2Furl-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
dependencies:
punycode "1.3.2"
@@ -13628,10 +13646,10 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=
-vue-i18n@^8.16.0:
- version "8.16.0"
- resolved "https://registry.npm.taobao.org/vue-i18n/download/vue-i18n-8.16.0.tgz#f84188a36a4cc3c876427b869c7c5a82d6696080"
- integrity sha1-+EGIo2pMw8h2QnuGnHxagtZpYIA=
+vue-i18n@^8.17.3:
+ version "8.17.3"
+ resolved "https://registry.npm.taobao.org/vue-i18n/download/vue-i18n-8.17.3.tgz#f366082d5784c3c35e8ffda733cb3f3990a3900d"
+ integrity sha1-82YILVeEw8Nej/2nM8s/OZCjkA0=
vue-jest@^3.0.5:
version "3.0.5"
@@ -13700,7 +13718,7 @@ vue-tsx-support@^2.3.3:
vue@^2.6.11:
version "2.6.11"
- resolved "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
+ resolved "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz?cache=0&sync_timestamp=1587067075549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
integrity sha1-dllNh31LEiNEBuhONSdcbVFBJcU=
vuex-class@^0.3.2:
@@ -13713,10 +13731,10 @@ vuex-module-decorators@^0.16.1:
resolved "https://registry.npm.taobao.org/vuex-module-decorators/download/vuex-module-decorators-0.16.1.tgz#9e651d507057b07a1b52f0f65dfae97b9095f00f"
integrity sha1-nmUdUHBXsHobUvD2Xfrpe5CV8A8=
-vuex@^3.1.3:
- version "3.1.3"
- resolved "https://registry.npm.taobao.org/vuex/download/vuex-3.1.3.tgz#f2ad73e3fb73691698b38c93f66e58e267947180"
- integrity sha1-8q1z4/tzaRaYs4yT9m5Y4meUcYA=
+vuex@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npm.taobao.org/vuex/download/vuex-3.2.0.tgz#86da7f26c3e131ff374870580109145a640ee5a8"
+ integrity sha1-htp/JsPhMf83SHBYAQkUWmQO5ag=
w3c-hr-time@^1.0.1:
version "1.0.2"
@@ -13770,9 +13788,9 @@ webidl-conversions@^4.0.2:
integrity sha1-qFWYCx8LazWbodXZ+zmulB+qY60=
webpack-bundle-analyzer@^3.6.1:
- version "3.6.1"
- resolved "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.6.1.tgz#bdb637c2304424f2fbff9a950c7be42a839ae73b"
- integrity sha1-vbY3wjBEJPL7/5qVDHvkKoOa5zs=
+ version "3.7.0"
+ resolved "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.7.0.tgz#84da434e89442899b884d9ad38e466d0db02a56f"
+ integrity sha1-hNpDTolEKJm4hNmtOORm0NsCpW8=
dependencies:
acorn "^7.1.1"
acorn-walk "^7.1.1"
@@ -13868,7 +13886,7 @@ webpack-remove-strict-mode-plugin@^1.0.0:
webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3:
version "1.4.3"
- resolved "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1574264229907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ resolved "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
integrity sha1-7t2OwLko+/HL/plOItLYkPMwqTM=
dependencies:
source-list-map "^2.0.0"
@@ -13954,14 +13972,14 @@ which-module@^2.0.0:
which@^1.2.9, which@^1.3.0, which@^1.3.1:
version "1.3.1"
- resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116898193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=
dependencies:
isexe "^2.0.0"
which@^2.0.1:
version "2.0.2"
- resolved "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116898193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ resolved "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=
dependencies:
isexe "^2.0.0"
@@ -14189,7 +14207,7 @@ write-file-atomic@^3.0.3:
write-json-file@^2.3.0:
version "2.3.0"
- resolved "https://registry.npm.taobao.org/write-json-file/download/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f"
+ resolved "https://registry.npm.taobao.org/write-json-file/download/write-json-file-2.3.0.tgz?cache=0&sync_timestamp=1581068147710&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-json-file%2Fdownload%2Fwrite-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f"
integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=
dependencies:
detect-indent "^5.0.0"
@@ -14274,14 +14292,14 @@ yaml@^1.7.2:
yargs-parser@10.x, yargs-parser@^10.0.0:
version "10.1.0"
- resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+ resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&sync_timestamp=1587068056050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
integrity sha1-cgImW4n36eny5XZeD+c1qQXtuqg=
dependencies:
camelcase "^4.1.0"
yargs-parser@^11.1.1:
version "11.1.1"
- resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
+ resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz?cache=0&sync_timestamp=1587068056050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
integrity sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ=
dependencies:
camelcase "^5.0.0"
@@ -14289,16 +14307,16 @@ yargs-parser@^11.1.1:
yargs-parser@^13.1.2:
version "13.1.2"
- resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1587068056050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg=
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-parser@^18.1.1:
- version "18.1.2"
- resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1"
- integrity sha1-L0gr6iE2294IYWg6vqd1bTC1BPE=
+ version "18.1.3"
+ resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1587068056050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"