From 497add09b320cbb901d28574f8a91f48c965c0a3 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 27 Jul 2020 11:38:59 +0800 Subject: [PATCH 01/30] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=BF=AB=E6=8D=B7=E9=94=AE=E8=BF=98=E5=8E=9F?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E6=97=B6=EF=BC=8C=E7=AA=97=E5=8F=A3=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E8=8E=B7=E5=8F=96=E7=84=A6=E7=82=B9=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FAQ.md | 2 +- publish/changeLog.md | 6 +----- src/main/event.js | 1 + 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/FAQ.md b/FAQ.md index f5002b70..5ac8f100 100644 --- a/FAQ.md +++ b/FAQ.md @@ -35,7 +35,7 @@ ## 播放整个歌单或排行榜 -播放在线列表内的歌曲需要将它们都添加到我的列表才能播放,你可以全选列表内的歌曲然后添加到现有列表或者新创建的列表,然后去播放改列表内的歌曲。 +播放在线列表内的歌曲需要将它们都添加到我的列表才能播放,你可以全选列表内的歌曲然后添加到现有列表或者新创建的列表,然后去播放该列表内的歌曲。 ## 桌面歌词显示异常 diff --git a/publish/changeLog.md b/publish/changeLog.md index f43b7edb..2de064b8 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,7 +1,3 @@ -### 优化 - -- 对我的列表歌曲搜索结果进行相似度排序 - ### 修复 -- 修复在 Windows 系统下缩放比非100%时,拖动桌面歌词会自动加大桌面歌词窗口的问题 +- 修复使用全局快捷键还原窗口时,窗口没有获取焦点的问题 diff --git a/src/main/event.js b/src/main/event.js index 089673a4..b51b5163 100644 --- a/src/main/event.js +++ b/src/main/event.js @@ -22,6 +22,7 @@ global.lx_event.mainWindow.on(MAIN_WINDOW_EVENT_NAME.toggle_minimize, () => { global.modules.mainWindow.show() } global.modules.mainWindow.restore() + global.modules.mainWindow.focus() } else { global.modules.mainWindow.minimize() } From 597f0da42fc1ba3a455390a502ba78f7e3887aa0 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 27 Jul 2020 12:06:54 +0800 Subject: [PATCH 02/30] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index c3c71ba4..43406bca 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,6 @@ "main": "./dist/electron/main.js", "productName": "lx-music-desktop", "scripts": { - "php": "babel file.php -o file.js", "pack": "node build-config/pack.js && npm run pack:win", "pack:win": "npm run pack:win:setup:x86_64 && npm run pack:win:7z", "pack:win:setup:x86_64": "cross-env TARGET=win_安装版 ARCH=x86_64 electron-builder -w=nsis --x64 --ia32", From f7f1cdab345379d3822dcb7f975f1049b1a2a02b Mon Sep 17 00:00:00 2001 From: lyswhut Date: Fri, 31 Jul 2020 11:00:55 +0800 Subject: [PATCH 03/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FAQ.md | 1 + src/common/utils.js | 46 ++++--- src/renderer/components/material/FlowBtn.vue | 123 ------------------ .../components/material/InputRange.vue | 80 ------------ 4 files changed, 26 insertions(+), 224 deletions(-) delete mode 100644 src/renderer/components/material/FlowBtn.vue delete mode 100644 src/renderer/components/material/InputRange.vue diff --git a/FAQ.md b/FAQ.md index 5ac8f100..3a73aede 100644 --- a/FAQ.md +++ b/FAQ.md @@ -108,6 +108,7 @@ Windows 7 未开启 Aero 效果时桌面歌词会有问题,详情看下面的* - 若你之前可以安装成功,但现在安装失败,就去**控制面板-程序和功能**或用第三方卸载工具看下有没有之前的版本残留,若同时在不同路径下安装了多个版本就可能会出现该问题,这种情况卸载掉所有版本重新安装即可 - 清理安装路径下的残留文件 +- 清理注册表(建议用清理工具清理) ## 缺少`xxx.dll` diff --git a/src/common/utils.js b/src/common/utils.js index c7dafcf6..5852c147 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -151,29 +151,33 @@ exports.initSetting = () => { name: 'config', }) let setting = electronStore_config.get('setting') - if (!electronStore_config.get('version') && setting) { // 迁移配置 - electronStore_config.set('version', electronStore_config.get('setting.version')) - electronStore_config.delete('setting.version') - const list = electronStore_config.get('list') - if (list) { - if (list.defaultList) electronStore_list.set('defaultList', list.defaultList) - if (list.loveList) electronStore_list.set('loveList', list.loveList) - electronStore_config.delete('list') + if (setting) { + let version = electronStore_config.get('version') + if (!version) { // 迁移配置 + version = electronStore_config.get('setting.version') + electronStore_config.set('version', version) + electronStore_config.delete('setting.version') + const list = electronStore_config.get('list') + if (list) { + if (list.defaultList) electronStore_list.set('defaultList', list.defaultList) + if (list.loveList) electronStore_list.set('loveList', list.loveList) + electronStore_config.delete('list') + } + const downloadList = electronStore_config.get('download') + if (downloadList) { + if (downloadList.list) electronStore_list.set('downloadList', downloadList.list) + electronStore_config.delete('download') + } } - const downloadList = electronStore_config.get('download') - if (downloadList) { - if (downloadList.list) electronStore_list.set('downloadList', downloadList.list) - electronStore_config.delete('download') - } - } - // 迁移列表滚动位置设置 ~0.18.3 - if (setting && setting.list.scroll) { - let scroll = setting.list.scroll - electronStore_list.set('defaultList.location', scroll.locations.defaultList || 0) - electronStore_list.set('loveList.location', scroll.locations.loveList || 0) - electronStore_config.delete('setting.list.scroll') - electronStore_config.set('setting.list.isSaveScrollLocation', scroll.enable) + // 迁移列表滚动位置设置 ~0.18.3 + if (setting.list.scroll) { + let scroll = setting.list.scroll + electronStore_list.set('defaultList.location', scroll.locations.defaultList || 0) + electronStore_list.set('loveList.location', scroll.locations.loveList || 0) + electronStore_config.delete('setting.list.scroll') + electronStore_config.set('setting.list.isSaveScrollLocation', scroll.enable) + } } const { version: settingVersion, setting: newSetting } = exports.mergeSetting(setting, electronStore_config.get('version')) diff --git a/src/renderer/components/material/FlowBtn.vue b/src/renderer/components/material/FlowBtn.vue deleted file mode 100644 index 15647151..00000000 --- a/src/renderer/components/material/FlowBtn.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - diff --git a/src/renderer/components/material/InputRange.vue b/src/renderer/components/material/InputRange.vue deleted file mode 100644 index d63577a7..00000000 --- a/src/renderer/components/material/InputRange.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - From 315d041fc793696f3725ceb3232477dfdcb75f4f Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 1 Aug 2020 23:26:35 +0800 Subject: [PATCH 04/30] =?UTF-8?q?=E6=A1=8C=E9=9D=A2=E6=AD=8C=E8=AF=8D?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=92=AD=E6=94=BE=E8=A1=8C=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E5=B1=85=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 4 ++++ src/renderer-lyric/components/core/Lyric.vue | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 2de064b8..f07358ef 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,7 @@ ### 修复 - 修复使用全局快捷键还原窗口时,窗口没有获取焦点的问题 + +### 优化 + +- 桌面歌词当前播放行改为上下居中 diff --git a/src/renderer-lyric/components/core/Lyric.vue b/src/renderer-lyric/components/core/Lyric.vue index ce6a0f94..4949341a 100644 --- a/src/renderer-lyric/components/core/Lyric.vue +++ b/src/renderer-lyric/components/core/Lyric.vue @@ -191,7 +191,7 @@ export default { } if (this.lyricEvent.isStopScroll) return let dom_p = this.dom_lines[this.lyric.line] - cancelScrollFn = scrollTo(this.$refs.dom_lyric, dom_p ? (dom_p.offsetTop - this.$refs.dom_lyric.clientHeight * 0.38) : 0) + cancelScrollFn = scrollTo(this.$refs.dom_lyric, dom_p ? (dom_p.offsetTop - this.$refs.dom_lyric.clientHeight * 0.5 + dom_p.clientHeight / 2) : 0) }, handleLyricMouseDown(e) { if (e.target.classList.contains(this.$style.lrcLine)) { From 1af9b3a018ddc9e280c47006fdbede1d6e98583f Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 2 Aug 2020 14:40:38 +0800 Subject: [PATCH 05/30] =?UTF-8?q?=E9=9D=99=E9=9F=B3=E6=97=B6=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E9=9F=B3=E9=87=8F=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/renderer/components/core/Player.vue | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index f07358ef..12e77a4d 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -5,3 +5,4 @@ ### 优化 - 桌面歌词当前播放行改为上下居中 +- 为区分静音状态,静音时将不再显示音量条 diff --git a/src/renderer/components/core/Player.vue b/src/renderer/components/core/Player.vue index 203e5f93..d8ee91e8 100644 --- a/src/renderer/components/core/Player.vue +++ b/src/renderer/components/core/Player.vue @@ -9,7 +9,7 @@ div(:class="$style.player") div(:class="$style.column1") div(:class="$style.container") div(:class="$style.title" @click="handleCopy(title)" :title="title + $t('core.player.copy_title')") {{title}} - div(:class="$style.volumeContent") + div(:class="$style.volumeContent" v-if="!setting.player.isMute") div(:class="$style.volume") div(:class="$style.volumeBar" :style="{ transform: `scaleX(${volume || 0})` }") div(:class="$style.volumeMask" @mousedown="handleVolumeMsDown" ref="dom_volumeMask" :title="`${$t('core.player.volume')}${parseInt(volume * 100)}%`") From e54597b944942abe20f811dbd702e0f383418285 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Tue, 4 Aug 2020 08:54:26 +0800 Subject: [PATCH 06/30] =?UTF-8?q?=E4=B8=BA=E5=8C=BA=E5=88=86=E9=9D=99?= =?UTF-8?q?=E9=9F=B3=E7=8A=B6=E6=80=81=EF=BC=8C=E9=9D=99=E9=9F=B3=E6=97=B6?= =?UTF-8?q?=E9=9F=B3=E9=87=8F=E6=9D=A1=E4=BC=9A=E5=8F=98=E6=B7=A1=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=9F=B3=E9=87=8F=E6=9D=A1=E6=97=B6=E5=B0=86?= =?UTF-8?q?=E4=BC=9A=E5=8F=96=E6=B6=88=E9=9D=99=E9=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 2 +- src/renderer/components/core/Player.vue | 14 ++++++++++---- src/renderer/views/Setting.vue | 3 +++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 12e77a4d..17c66566 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -5,4 +5,4 @@ ### 优化 - 桌面歌词当前播放行改为上下居中 -- 为区分静音状态,静音时将不再显示音量条 +- 为区分静音状态,静音时音量条会变淡,调整音量条时将会取消静音 diff --git a/src/renderer/components/core/Player.vue b/src/renderer/components/core/Player.vue index d8ee91e8..d864765f 100644 --- a/src/renderer/components/core/Player.vue +++ b/src/renderer/components/core/Player.vue @@ -9,8 +9,8 @@ div(:class="$style.player") div(:class="$style.column1") div(:class="$style.container") div(:class="$style.title" @click="handleCopy(title)" :title="title + $t('core.player.copy_title')") {{title}} - div(:class="$style.volumeContent" v-if="!setting.player.isMute") - div(:class="$style.volume") + div(:class="$style.volumeContent") + div(:class="[$style.volume, setting.player.isMute ? $style.muted : null]") div(:class="$style.volumeBar" :style="{ transform: `scaleX(${volume || 0})` }") div(:class="$style.volumeMask" @mousedown="handleVolumeMsDown" ref="dom_volumeMask" :title="`${$t('core.player.volume')}${parseInt(volume * 100)}%`") @@ -623,8 +623,9 @@ export default { this.volume = val this.volumeEvent.msDownVolume = val - // console.log(val) if (audio) audio.volume = this.volume + + if (this.setting.player.isMute) this.setVolume(false) }, handleSetVolumeMute() { audio.muted = !audio.muted @@ -882,13 +883,17 @@ export default { border-radius: 10px; // overflow: hidden; transition: @transition-theme; - transition-property: background-color; + transition-property: background-color, opacity; background-color: @color-player-progress-bar1; // background-color: #f5f5f5; position: relative; border-radius: @radius-progress-border; } +.muted { + opacity: .5; +} + .volume-bar { position: absolute; left: 0; @@ -905,6 +910,7 @@ export default { box-shadow: 0 0 2px rgba(0, 0, 0, 0.2); } + .volume-mask { position: absolute; top: 0; diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index 8940cb05..5caf0d6a 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -587,6 +587,9 @@ export default { 'setting.player.mediaDeviceId'(n) { this.current_setting.player.mediaDeviceId = n }, + 'setting.player.isMute'(n) { + this.current_setting.player.isMute = n + }, 'current_setting.player.isShowTaskProgess'(n) { if (n) return this.$nextTick(() => { From 078245cb962486c490b8989fac13c8156220bea0 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Tue, 4 Aug 2020 09:05:23 +0800 Subject: [PATCH 07/30] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=88=91=E7=9A=84?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=90=9C=E7=B4=A2=E5=AF=B9=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=AD=97=E7=AC=A6=E7=9A=84=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 2 ++ src/renderer/components/material/SearchList.vue | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 17c66566..5a3b93e5 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,6 +1,8 @@ + ### 修复 - 修复使用全局快捷键还原窗口时,窗口没有获取焦点的问题 +- 修复我的列表搜索对最后一个字符的匹配问题 ### 优化 diff --git a/src/renderer/components/material/SearchList.vue b/src/renderer/components/material/SearchList.vue index 4e55a03a..a070478f 100644 --- a/src/renderer/components/material/SearchList.vue +++ b/src/renderer/components/material/SearchList.vue @@ -239,7 +239,7 @@ export default { handleSearch() { if (!this.text.length) return this.resultList = [] let list = [] - let rxp = new RegExp(this.text.split('').join('.*'), 'i') + let rxp = new RegExp(this.text.split('').join('.*') + '.*', 'i') for (const item of this.list) { if (rxp.test(`${item.name}${item.singer}${item.albumName ? item.albumName : ''}`)) list.push(item) } From 27c500e950ec36823eea794f4945881224a9c521 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 9 Aug 2020 12:39:24 +0800 Subject: [PATCH 08/30] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/views/Download.vue | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/renderer/views/Download.vue b/src/renderer/views/Download.vue index 5d7c74ab..77a327df 100644 --- a/src/renderer/views/Download.vue +++ b/src/renderer/views/Download.vue @@ -29,7 +29,6 @@ div(:class="$style.download") :start-btn="!item.isComplate && item.status != downloadStatus.WAITING && (item.status != downloadStatus.RUN)" :pause-btn="!item.isComplate && (item.status == downloadStatus.RUN || item.status == downloadStatus.WAITING)" :list-add-btn="false" :play-btn="item.status == downloadStatus.COMPLETED" :search-btn="item.status == downloadStatus.ERROR" @btn-click="handleListBtnClick") - //- material-flow-btn(:show="isShowEditBtn" :play-btn="false" :download-btn="false" :add-btn="false" :start-btn="true" :pause-btn="true" @btn-click="handleFlowBtnClick") material-menu(:menus="listItemMenu" :location="listMenu.menuLocation" item-name="name" :isShow="listMenu.isShowItemMenu" @menu-click="handleListItemMenuClick") div(:class="$style.noItem" v-else) @@ -47,7 +46,6 @@ export default { clickTime: window.performance.now(), clickIndex: -1, selectdData: [], - // isShowEditBtn: false, isShowDownloadMultiple: false, tabId: 'all', keyEvent: { @@ -166,14 +164,6 @@ export default { }, }, watch: { - selectdData(n) { - const len = n.length - if (len) { - this.isShowEditBtn = true - } else { - this.isShowEditBtn = false - } - }, list() { this.removeAllSelect() }, From 91ff7b658aad245d21e0fcd8ead9be66c6bc9747 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 9 Aug 2020 12:39:49 +0800 Subject: [PATCH 09/30] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1794 ++++++++++++++++++++++++++++----------------- package.json | 32 +- 2 files changed, 1150 insertions(+), 676 deletions(-) diff --git a/package-lock.json b/package-lock.json index ecde64cd..3c833955 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -20,9 +20,9 @@ } }, "@babel/compat-data": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz", - "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", + "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", "dev": true, "requires": { "browserslist": "^4.12.0", @@ -39,19 +39,19 @@ } }, "@babel/core": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", - "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-module-transforms": "^7.10.5", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.10.5", + "@babel/parser": "^7.11.1", "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.5", - "@babel/types": "^7.10.5", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -72,12 +72,12 @@ } }, "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", "dev": true, "requires": { - "@babel/types": "^7.10.5", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -103,27 +103,27 @@ } }, "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", + "@babel/types": "^7.11.0", "lodash": "^4.17.19" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -144,9 +144,9 @@ } }, "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", + "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", "dev": true }, "@babel/template": { @@ -161,26 +161,26 @@ } }, "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", + "@babel/generator": "^7.11.0", "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -235,13 +235,13 @@ "dev": true }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -264,13 +264,13 @@ "dev": true }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -298,13 +298,13 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz", - "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4", @@ -340,6 +340,15 @@ "@babel/types": "^7.10.4" } }, + "@babel/helper-member-expression-to-functions": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, "@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", @@ -347,12 +356,12 @@ "dev": true }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -373,9 +382,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", "dev": true }, "@babel/template": { @@ -390,13 +399,13 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -425,14 +434,14 @@ } }, "@babel/helper-define-map": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz", - "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.4", - "lodash": "^4.17.13" + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" }, "dependencies": { "@babel/code-frame": { @@ -482,9 +491,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", "dev": true }, "@babel/template": { @@ -499,13 +508,13 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -542,14 +551,13 @@ } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -574,12 +582,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -600,9 +608,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", "dev": true }, "@babel/template": { @@ -617,30 +625,30 @@ } }, "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.11.0", "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -693,13 +701,13 @@ "dev": true }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -893,12 +901,12 @@ "dev": true }, "@babel/helper-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz", - "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "dev": true, "requires": { - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/helper-remap-async-to-generator": { @@ -924,14 +932,13 @@ } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -956,12 +963,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -982,9 +989,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", "dev": true }, "@babel/template": { @@ -999,30 +1006,30 @@ } }, "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.11.0", "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -1253,6 +1260,34 @@ } } }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } + } + }, "@babel/helper-split-export-declaration": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", @@ -1290,14 +1325,13 @@ } }, "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, @@ -1322,12 +1356,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -1348,9 +1382,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", "dev": true }, "@babel/template": { @@ -1365,30 +1399,30 @@ } }, "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", + "@babel/generator": "^7.11.0", "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -1426,12 +1460,12 @@ } }, "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", "dev": true, "requires": { - "@babel/types": "^7.10.5", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1457,12 +1491,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -1483,9 +1517,9 @@ } }, "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", + "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", "dev": true }, "@babel/template": { @@ -1500,26 +1534,26 @@ } }, "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", + "@babel/generator": "^7.11.0", "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -1571,9 +1605,9 @@ "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz", - "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1625,6 +1659,24 @@ } } }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, "@babel/plugin-proposal-json-strings": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", @@ -1643,6 +1695,24 @@ } } }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", @@ -1680,9 +1750,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1717,12 +1787,13 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0" }, "dependencies": { @@ -1805,6 +1876,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -1814,6 +1894,23 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -1938,13 +2035,12 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz", - "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", + "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "lodash": "^4.17.13" + "@babel/helper-plugin-utils": "^7.10.4" }, "dependencies": { "@babel/helper-plugin-utils": { @@ -2007,12 +2103,12 @@ "dev": true }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -2033,9 +2129,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", "dev": true }, "@babel/template": { @@ -2050,13 +2146,13 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -2240,9 +2336,9 @@ } }, "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", "dev": true }, "@babel/template": { @@ -2257,13 +2353,13 @@ } }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -2315,21 +2411,110 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz", - "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + } + }, "@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", + "dev": true + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } } } }, @@ -2354,22 +2539,111 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz", - "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + } + }, "@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", + "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", + "dev": true + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } } } }, @@ -2436,9 +2710,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz", - "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.10.4", @@ -2467,13 +2741,13 @@ "dev": true }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -2523,9 +2797,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.5.tgz", - "integrity": "sha512-tV4V/FjElJ9lQtyjr5xD2IFFbgY46r7EeVu5a8CpEKT5laheHKSlFeHjpkPppW3PqzGLAuv5k2qZX5LgVZIX5w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", + "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.10.4", @@ -2566,12 +2840,13 @@ } }, "@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" }, "dependencies": { "@babel/helper-plugin-utils": { @@ -2601,9 +2876,9 @@ } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz", - "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", @@ -2689,30 +2964,34 @@ } }, "@babel/preset-env": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", - "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", + "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", "dev": true, "requires": { - "@babel/compat-data": "^7.10.4", + "@babel/compat-data": "^7.11.0", "@babel/helper-compilation-targets": "^7.10.4", "@babel/helper-module-imports": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-proposal-async-generator-functions": "^7.10.4", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", "@babel/plugin-proposal-private-methods": "^7.10.4", "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-class-properties": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", @@ -2745,14 +3024,14 @@ "@babel/plugin-transform-regenerator": "^7.10.4", "@babel/plugin-transform-reserved-words": "^7.10.4", "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", "@babel/plugin-transform-sticky-regex": "^7.10.4", "@babel/plugin-transform-template-literals": "^7.10.4", "@babel/plugin-transform-typeof-symbol": "^7.10.4", "@babel/plugin-transform-unicode-escapes": "^7.10.4", "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.4", + "@babel/types": "^7.11.0", "browserslist": "^4.12.0", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", @@ -2773,13 +3052,13 @@ "dev": true }, "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -2805,9 +3084,9 @@ } }, "@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.0.tgz", + "integrity": "sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -3033,9 +3312,9 @@ "dev": true }, "@types/semver": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.1.0.tgz", - "integrity": "sha512-pOKLaubrAEMUItGNpgwl0HMFPrSAFic8oSVIvfu1UwcgGNmNyK9gyhBHKmBnUTwwVvpZfkzUC0GaMgnL6P86uA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.1.tgz", + "integrity": "sha512-ooD/FJ8EuwlDKOI6D9HWxgIgJjMg2cuziXm/42npDC8y4NjxplBUn9loewZiBNCt44450lHAU0OSb51/UqXeag==", "requires": { "@types/node": "*" } @@ -3599,23 +3878,23 @@ "dev": true }, "app-builder-lib": { - "version": "22.7.0", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.7.0.tgz", - "integrity": "sha512-blRKwV8h0ztualXS50ciCTo39tbuDGNS+ldcy8+KLvKXuT6OpYnSJ7M6MSfPT+xWatshMHJV1rJx3Tl+k/Sn/g==", + "version": "22.8.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.8.0.tgz", + "integrity": "sha512-RGaIRjCUrqkmh6QOGsyekQPEOaVynHfmeh8JZuyUymFYUOFdzBbPamkA2nhBVBTkkgfjRHsxK7LhedFKPzvWEQ==", "dev": true, "requires": { "7zip-bin": "~5.0.3", "@develar/schema-utils": "~2.6.5", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.7.0", - "builder-util-runtime": "8.7.1", + "builder-util": "22.8.0", + "builder-util-runtime": "8.7.2", "chromium-pickle-js": "^0.2.0", - "debug": "^4.2.0", + "debug": "^4.1.1", "ejs": "^3.1.3", - "electron-publish": "22.7.0", - "fs-extra": "^9.0.0", - "hosted-git-info": "^3.0.4", + "electron-publish": "22.8.0", + "fs-extra": "^9.0.1", + "hosted-git-info": "^3.0.5", "is-ci": "^2.0.0", "isbinaryfile": "^4.0.6", "js-yaml": "^3.14.0", @@ -3628,25 +3907,6 @@ "temp-file": "^3.3.7" }, "dependencies": { - "builder-util-runtime": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.1.tgz", - "integrity": "sha512-uEBH1nAnTvzjcsrh2XI3qOzJ39h0+9kuIuwj+kCc3a07TZNGShfJcai8fFzL3mNgGjEFxoq+XMssR11r+FOFSg==", - "dev": true, - "requires": { - "debug": "^4.2.0", - "sax": "^1.2.4" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "fs-extra": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", @@ -3795,6 +4055,14 @@ "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "assert": { @@ -4739,9 +5007,9 @@ } }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", "dev": true }, "body-parser": { @@ -4971,21 +5239,44 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", + "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "browserify-zlib": { @@ -4998,21 +5289,21 @@ } }, "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", + "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" }, "dependencies": { "caniuse-lite": { - "version": "1.0.30001094", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001094.tgz", - "integrity": "sha512-ufHZNtMaDEuRBpTbqD93tIQnngmJ+oBknjvr0IbFympSdtFpAUFmNv4mVKbb53qltxFx0nK3iy32S9AqkLzUNA==", + "version": "1.0.30001112", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz", + "integrity": "sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q==", "dev": true } } @@ -5053,9 +5344,9 @@ "dev": true }, "builder-util": { - "version": "22.7.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.7.0.tgz", - "integrity": "sha512-UV3MKL0mwjMq2y9JlBf28Cegpj0CrIXcjGkO0TXn+QZ6Yy9rY6lHOuUvpQ19ct2Qh1o+QSwH3Q1nKUf5viJBBg==", + "version": "22.8.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.8.0.tgz", + "integrity": "sha512-H80P1JzVy3TGpi63x81epQDK24XalL034+jAZlrPb5IhLtYmnNNdxCCAVJvg3VjSISd73Y71O+uhqCxWpqbPHw==", "dev": true, "requires": { "7zip-bin": "~5.0.3", @@ -5063,10 +5354,10 @@ "@types/fs-extra": "^9.0.1", "app-builder-bin": "3.5.9", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "8.7.1", - "chalk": "^4.0.0", - "debug": "^4.2.0", - "fs-extra": "^9.0.0", + "builder-util-runtime": "8.7.2", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "fs-extra": "^9.0.1", "is-ci": "^2.0.0", "js-yaml": "^3.14.0", "source-map-support": "^0.5.19", @@ -5074,25 +5365,6 @@ "temp-file": "^3.3.7" }, "dependencies": { - "builder-util-runtime": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.1.tgz", - "integrity": "sha512-uEBH1nAnTvzjcsrh2XI3qOzJ39h0+9kuIuwj+kCc3a07TZNGShfJcai8fFzL3mNgGjEFxoq+XMssR11r+FOFSg==", - "dev": true, - "requires": { - "debug": "^4.2.0", - "sax": "^1.2.4" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "fs-extra": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", @@ -5150,9 +5422,9 @@ } }, "builder-util-runtime": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.0.tgz", - "integrity": "sha512-G1AqqVM2vYTrSFR982c1NNzwXKrGLQjVjaZaWQdn4O6Z3YKjdMDofw88aD9jpyK9ZXkrCxR0tI3Qe9wNbyTlXg==", + "version": "8.7.2", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz", + "integrity": "sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA==", "requires": { "debug": "^4.1.1", "sax": "^1.2.4" @@ -5171,36 +5443,59 @@ "dev": true }, "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "glob": "^7.1.3" + "yallist": "^4.0.0" } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -5477,9 +5772,9 @@ } }, "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, "chrome-trace-event": { @@ -5906,6 +6201,20 @@ "proto-list": "~1.2.1" } }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -6325,6 +6634,14 @@ "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "create-hash": { @@ -6398,6 +6715,12 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, "css": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", @@ -6456,9 +6779,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -6961,6 +7284,14 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "dir-glob": { @@ -6973,15 +7304,15 @@ } }, "dmg-builder": { - "version": "22.7.0", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.7.0.tgz", - "integrity": "sha512-5Ea2YEz6zSNbyGzZD+O9/MzmaXb6oa15cSKWo4JQ1xP4rorOpte7IOj2jcwYjtc+Los2gu1lvT314OC1OZIWgg==", + "version": "22.8.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.8.0.tgz", + "integrity": "sha512-orePWjcrl97SYLA8F/6UUtbXJSoZCYu5KOP1lVqD4LOomr8bjGDyEVYZmZYcg5WqKmXucdmO6OpqgzH/aRMMuA==", "dev": true, "requires": { - "app-builder-lib": "22.7.0", - "builder-util": "22.7.0", - "fs-extra": "^9.0.0", - "iconv-lite": "^0.5.1", + "app-builder-lib": "22.8.0", + "builder-util": "22.8.0", + "fs-extra": "^9.0.1", + "iconv-lite": "^0.6.2", "js-yaml": "^3.14.0", "sanitize-filename": "^1.6.3" }, @@ -6998,15 +7329,6 @@ "universalify": "^1.0.0" } }, - "iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", @@ -7221,9 +7543,9 @@ } }, "electron": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-9.1.1.tgz", - "integrity": "sha512-BYvroBLV9x7G4iN33P/IxeZqwjl62/9VuBAF1CoM0m6OeheaiLog1ZMKLlCqVXycJvvrAvLHc454DDEmwnqqhA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-9.2.0.tgz", + "integrity": "sha512-4ecZ3rcGg//Gk4fAK3Jo61T+uh36JhU6HHR/PTujQqQiBw1g4tNPd4R2hGGth2d+7FkRIs5GdRNef7h64fQEMw==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -7232,27 +7554,27 @@ }, "dependencies": { "@types/node": { - "version": "12.12.53", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz", - "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ==", + "version": "12.12.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.54.tgz", + "integrity": "sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w==", "dev": true } } }, "electron-builder": { - "version": "22.7.0", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.7.0.tgz", - "integrity": "sha512-t6E3oMutpST64YWbZCg7HodEwJOsnjUF1vnDIHm2MW6CFZPX8tlCK6efqaV66LU0E0Nkp/JH6TE5bCqQ1+VdPQ==", + "version": "22.8.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.8.0.tgz", + "integrity": "sha512-dUv4F3srJouqxhWivtKqSoQP4Df6vYgjooGdzms+iYMTFi9f0b4LlEbr7kgsPvte8zAglee7VOGOODkCRJDkUQ==", "dev": true, "requires": { "@types/yargs": "^15.0.5", - "app-builder-lib": "22.7.0", + "app-builder-lib": "22.8.0", "bluebird-lst": "^1.0.9", - "builder-util": "22.7.0", - "builder-util-runtime": "8.7.1", - "chalk": "^4.0.0", - "dmg-builder": "22.7.0", - "fs-extra": "^9.0.0", + "builder-util": "22.8.0", + "builder-util-runtime": "8.7.2", + "chalk": "^4.1.0", + "dmg-builder": "22.8.0", + "fs-extra": "^9.0.1", "is-ci": "^2.0.0", "lazy-val": "^1.0.4", "read-config-file": "6.0.0", @@ -7261,25 +7583,6 @@ "yargs": "^15.3.1" }, "dependencies": { - "builder-util-runtime": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.1.tgz", - "integrity": "sha512-uEBH1nAnTvzjcsrh2XI3qOzJ39h0+9kuIuwj+kCc3a07TZNGShfJcai8fFzL3mNgGjEFxoq+XMssR11r+FOFSg==", - "dev": true, - "requires": { - "debug": "^4.2.0", - "sax": "^1.2.4" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "fs-extra": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", @@ -7369,40 +7672,21 @@ "integrity": "sha512-lBpLh1Q8qayrTxFIrTPcNjSHsosvUfOYyZ8glhiLcx7zCNPDGuj8+nXlEaaSS6LRiQQbLgLG+wKpuvztNzBIrA==" }, "electron-publish": { - "version": "22.7.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.7.0.tgz", - "integrity": "sha512-hmU69xlb6vvAV3QfpHYDlkdZMFdBAgDbptoxbLFrnTq5bOkcL8AaDbvxeoZ4+lvqgs29NwqGpkHo2oN+p/hCfg==", + "version": "22.8.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.8.0.tgz", + "integrity": "sha512-uM0Zdi9hUqqGOrPj478v7toTvV1Kgto1w11rIiI168batiXAJvNLD8VZRfehOrZT0ibUyZlw8FtxoGCrjyHUOw==", "dev": true, "requires": { "@types/fs-extra": "^9.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.7.0", - "builder-util-runtime": "8.7.1", - "chalk": "^4.0.0", - "fs-extra": "^9.0.0", + "builder-util": "22.8.0", + "builder-util-runtime": "8.7.2", + "chalk": "^4.1.0", + "fs-extra": "^9.0.1", "lazy-val": "^1.0.4", - "mime": "^2.4.5" + "mime": "^2.4.6" }, "dependencies": { - "builder-util-runtime": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.1.tgz", - "integrity": "sha512-uEBH1nAnTvzjcsrh2XI3qOzJ39h0+9kuIuwj+kCc3a07TZNGShfJcai8fFzL3mNgGjEFxoq+XMssR11r+FOFSg==", - "dev": true, - "requires": { - "debug": "^4.2.0", - "sax": "^1.2.4" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "fs-extra": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", @@ -7449,29 +7733,29 @@ } }, "electron-to-chromium": { - "version": "1.3.490", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.490.tgz", - "integrity": "sha512-jKJF1mKXrQkT0ZiuJ/oV63Q02hAeWz0GGt/z6ryc518uCHtMyS9+wYAysZtBQ8rsjqFPAYXV4TIz5GQ8xyubPA==", + "version": "1.3.526", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz", + "integrity": "sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg==", "dev": true }, "electron-updater": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.3.1.tgz", - "integrity": "sha512-UDC5AHCgeiHJYDYWZG/rsl1vdAFKqI/Lm7whN57LKAk8EfhTewhcEHzheRcncLgikMcQL8gFo1KeX51tf5a5Wg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.3.4.tgz", + "integrity": "sha512-ekpgxDrYl+Wi24ktO4qfj2CtCABxrmK1C/oekp0tai6q4VR4ZdPkit4CX8+GenvKMme7uMmfPFnLp/vwhP/ThQ==", "requires": { - "@types/semver": "^7.1.0", - "builder-util-runtime": "8.7.0", - "fs-extra": "^9.0.0", - "js-yaml": "^3.13.1", + "@types/semver": "^7.3.1", + "builder-util-runtime": "8.7.2", + "fs-extra": "^9.0.1", + "js-yaml": "^3.14.0", "lazy-val": "^1.0.4", "lodash.isequal": "^4.5.0", - "semver": "^7.1.3" + "semver": "^7.3.2" }, "dependencies": { "fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -7479,6 +7763,15 @@ "universalify": "^1.0.0" } }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "jsonfile": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", @@ -7501,9 +7794,9 @@ } }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -7513,6 +7806,14 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "emoji-regex": { @@ -7658,9 +7959,9 @@ "optional": true }, "escalade": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", - "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", + "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", "dev": true }, "escape-goat": { @@ -7682,9 +7983,9 @@ "dev": true }, "eslint": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.5.0.tgz", - "integrity": "sha512-vlUP10xse9sWt9SGRtcr1LAC67BENcQMFeV+w5EvLEoFe3xJ8cF1Skd0msziRx/VMC+72B4DxreCE+OR12OA6Q==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz", + "integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -8060,9 +8361,9 @@ } }, "eslint-plugin-html": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.0.2.tgz", - "integrity": "sha512-Ik/z32UteKLo8GEfwNqVKcJ/WOz/be4h8N5mbMmxxnZ+9aL9XczOXQFz/bGu+nAGVoRg8CflldxJhONFpqlrxw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.0.3.tgz", + "integrity": "sha512-1KV2ebQHywlXkfpXOGjxuEyoq+g6AWvD6g9TB28KsGhbM5rJeHXAEpHOev6LqZv6ylcfa9BWokDsNVKyYefzGw==", "dev": true, "requires": { "htmlparser2": "^4.1.0" @@ -8084,9 +8385,9 @@ } }, "domutils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.0.0.tgz", - "integrity": "sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz", + "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==", "dev": true, "requires": { "dom-serializer": "^0.2.1", @@ -8095,9 +8396,9 @@ } }, "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true }, "htmlparser2": { @@ -8320,9 +8621,9 @@ "dev": true }, "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true }, "eventsource": { @@ -10104,13 +10405,27 @@ "dev": true }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "hash-sum": { @@ -10172,12 +10487,29 @@ } }, "hosted-git-info": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", - "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.5.tgz", + "integrity": "sha512-i4dpK6xj9BIpVOTboXIlKG9+8HMKggcrMX7WA24xZtKwX0TPelq/rbaS5rCKeNX8sJXZJGdSxpnEGtta+wismQ==", "dev": true, "requires": { - "lru-cache": "^5.1.1" + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "hpack.js": { @@ -10969,9 +11301,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "jake": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.1.tgz", - "integrity": "sha512-eSp5h9S7UFzKdQERTyF+KuPLjDZa1Tbw8gCVUn98n4PbIkLEDGe4zl7vF4Qge9kQj06HcymnksPk8jznPZeKsA==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", "dev": true, "requires": { "async": "0.9.x", @@ -11000,11 +11332,12 @@ } }, "jest-worker": { - "version": "26.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.1.0.tgz", - "integrity": "sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==", + "version": "26.2.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.2.1.tgz", + "integrity": "sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A==", "dev": true, "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" }, @@ -11047,6 +11380,7 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -11679,6 +12013,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "mime": { @@ -12023,9 +12365,9 @@ "dev": true }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "nice-try": { @@ -12051,9 +12393,9 @@ "dev": true }, "node-id3": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-id3/-/node-id3-0.1.17.tgz", - "integrity": "sha512-BJ+QpM2zUxc0+f9eLCzklUvj8JQTMsZGpCF+pUlsQa/JjztIGe5buS1IcAcQYX5XsHfsPBVd8BqxbuMkouTZrQ==", + "version": "0.1.18", + "resolved": "https://registry.npmjs.org/node-id3/-/node-id3-0.1.18.tgz", + "integrity": "sha512-XWjPWER49KeWCvCBLsAlUFylLL1Dq8/l4c2AMENk/91HD/4Y5SMRHXhFo6RjfQvHoR+6olPJqg7JO6+Uw9ipag==", "requires": { "iconv-lite": "0.5.1" }, @@ -12108,9 +12450,9 @@ } }, "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", "dev": true }, "normalize-package-data": { @@ -12649,9 +12991,9 @@ "dev": true }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -13058,15 +13400,71 @@ } }, "postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dev": true, "requires": { "icss-utils": "^4.1.1", - "postcss": "^7.0.16", + "postcss": "^7.0.32", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-modules-scope": { @@ -13480,6 +13878,14 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "pug": { @@ -14129,9 +14535,9 @@ } }, "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", "dev": true, "requires": { "rc": "^1.2.8" @@ -14586,10 +14992,13 @@ } }, "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "serve-index": { "version": "1.9.1", @@ -15155,12 +15564,12 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", + "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "minipass": "^3.1.1" } }, "stable": { @@ -15726,19 +16135,19 @@ } }, "terser-webpack-plugin": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.7.tgz", - "integrity": "sha512-5JqibUOctE6Ou4T00IVGYTQJBOhu24jz0PpqYeitQJJ3hlZY2ZKSwzzuqjmBH8MzbdWMgIefpmHwTkvwm6Q4CQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-Gb/bmPMavJsDTYiIocakp9OJhrIBnYrWa5VM0Bb2RngWmszeQUN1xFNh2E8Re+9Cj3/sPrA50Jj/q0nzgLAUuw==", "dev": true, "requires": { "cacache": "^15.0.5", "find-cache-dir": "^3.3.1", - "jest-worker": "^26.1.0", + "jest-worker": "^26.2.1", "p-limit": "^3.0.2", "schema-utils": "^2.6.6", "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", - "terser": "^4.8.0", + "terser": "^5.0.0", "webpack-sources": "^1.4.3" }, "dependencies": { @@ -15754,37 +16163,6 @@ "uri-js": "^4.2.2" } }, - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -15821,21 +16199,6 @@ "p-locate": "^4.1.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "p-limit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", @@ -15865,15 +16228,6 @@ } } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -15900,15 +16254,6 @@ "ajv-keywords": "^3.4.1" } }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -15925,31 +16270,16 @@ "source-map": "^0.6.0" } }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.0.0.tgz", + "integrity": "sha512-olH2DwGINoSuEpSGd+BsPuAQaA3OrHnHnFL/rDB2TVNc3srUbz/rq/j2BlF4zDXI+JqAvGr86bIm1R2cJgZ3FA==", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", "source-map-support": "~0.5.12" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -16275,6 +16605,15 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -16406,26 +16745,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -16440,21 +16759,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true } } }, @@ -16657,9 +16961,9 @@ "dev": true }, "vue-i18n": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.18.2.tgz", - "integrity": "sha512-0X5nBTCZAVjlwcrPaYJwNs3iipBBTv0AUHwQUOa8yP3XbQGWKbRHqBb3OhCYtum/IHDD21d/df5Xd2VgyxbxfA==" + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.20.0.tgz", + "integrity": "sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg==" }, "vue-loader": { "version": "15.9.3", @@ -16675,9 +16979,9 @@ } }, "vue-router": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.3.4.tgz", - "integrity": "sha512-SdKRBeoXUjaZ9R/8AyxsdTqkOfMcI5tWxPZOUX5Ie1BTL5rPSZ0O++pbiZCeYeythiZIdLEfkDiQPKIaWk5hDg==" + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.2.tgz", + "integrity": "sha512-n3Ok70hW0EpcJF4lcWIwSHAQbFTnIOLl/fhO8+oTs4jHNtBNsovcVvPZeTOyKEd8C3xF1Crft2ASuOiVT5K1mw==" }, "vue-style-loader": { "version": "4.1.2", @@ -16716,14 +17020,99 @@ "integrity": "sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w==" }, "watchpack": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", - "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "dev": true, "requires": { - "chokidar": "^2.1.8", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" } }, "wbuf": { @@ -16736,9 +17125,9 @@ } }, "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -16749,7 +17138,7 @@ "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", @@ -16762,7 +17151,7 @@ "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { @@ -16801,6 +17190,35 @@ } } }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -16811,6 +17229,29 @@ "isobject": "^3.0.1" } }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -16865,6 +17306,15 @@ "to-regex": "^3.0.2" } }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -16876,23 +17326,41 @@ "ajv-keywords": "^3.1.0" } }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", + "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", + "serialize-javascript": "^3.1.0", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", @@ -17356,9 +17824,9 @@ } }, "webpack-merge": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.0.9.tgz", - "integrity": "sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.1.1.tgz", + "integrity": "sha512-UhIkHAVqeG9EqFfYo7dRELrVfH6HYaOTYM7ssKCwfIIHYnWepGVOFp1E166GwgPGFqV6M68UgRiKOERjVOKIXA==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -17560,6 +18028,12 @@ "async-limiter": "~1.0.0" } }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -17585,9 +18059,9 @@ "dev": true }, "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -17600,7 +18074,7 @@ "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" + "yargs-parser": "^18.1.2" }, "dependencies": { "find-up": { diff --git a/package.json b/package.json index 43406bca..9da6f4c4 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src" }, "browserslist": [ - "Electron 9.1.1" + "Electron 9.2.0" ], "engines": { "node": ">= 12" @@ -159,17 +159,17 @@ }, "homepage": "https://github.com/lyswhut/lx-music-desktop#readme", "devDependencies": { - "@babel/core": "^7.10.5", + "@babel/core": "^7.11.1", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-runtime": "^7.10.5", + "@babel/plugin-transform-runtime": "^7.11.0", "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "^7.10.4", + "@babel/preset-env": "^7.11.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.1.0", "babel-minify-webpack-plugin": "^0.3.1", "babel-preset-minify": "^0.5.1", - "browserslist": "^4.13.0", + "browserslist": "^4.14.0", "cfonts": "^2.8.6", "chalk": "^4.1.0", "changelog-parser": "^2.8.0", @@ -178,15 +178,15 @@ "cross-env": "^7.0.2", "css-loader": "^3.6.0", "del": "^5.1.0", - "electron": "^9.1.1", - "electron-builder": "^22.7.0", + "electron": "^9.2.0", + "electron-builder": "^22.8.0", "electron-debug": "^3.1.0", "electron-devtools-installer": "^3.1.1", - "eslint": "^7.5.0", + "eslint": "^7.6.0", "eslint-config-standard": "^14.1.1", "eslint-formatter-friendly": "^7.0.0", "eslint-loader": "^4.0.2", - "eslint-plugin-html": "^6.0.2", + "eslint-plugin-html": "^6.0.3", "eslint-plugin-import": "^2.22.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", @@ -209,33 +209,33 @@ "spinnies": "^0.5.1", "stylus": "^0.54.8", "stylus-loader": "^3.0.2", - "terser-webpack-plugin": "^3.0.7", + "terser-webpack-plugin": "^4.0.0", "url-loader": "^4.1.0", "vue-loader": "^15.9.3", "vue-style-loader": "^4.1.2", "vue-template-compiler": "^2.6.11", - "webpack": "^4.43.0", + "webpack": "^4.44.1", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0", "webpack-hot-middleware": "^2.25.0", - "webpack-merge": "^5.0.9" + "webpack-merge": "^5.1.1" }, "dependencies": { "crypto-js": "^4.0.0", "dnscache": "^1.0.2", "electron-log": "^4.2.2", "electron-store": "^6.0.0", - "electron-updater": "^4.3.1", + "electron-updater": "^4.3.4", "iconv-lite": "^0.6.2", "image-size": "^0.8.3", "js-htmlencode": "^0.3.0", "lrc-file-parser": "^1.0.5", "needle": "^2.5.0", - "node-id3": "^0.1.17", + "node-id3": "^0.1.18", "request": "^2.88.2", "vue": "^2.6.11", - "vue-i18n": "^8.18.2", - "vue-router": "^3.3.4", + "vue-i18n": "^8.20.0", + "vue-router": "^3.4.2", "vuex": "^3.5.1", "vuex-router-sync": "^5.0.0" } From 6606edafb973f4fab449f03cd0dab3ad6c97277d Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 10 Aug 2020 09:51:31 +0800 Subject: [PATCH 10/30] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E5=9C=A8`=E8=BE=83=E5=B0=8F`=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=8C=96/=E5=85=B3=E9=97=AD=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E4=B8=8D=E5=B1=85=E4=B8=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/renderer/components/core/Aside.vue | 2 +- src/renderer/components/core/Toolbar.vue | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 5a3b93e5..e67a092f 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -3,6 +3,7 @@ - 修复使用全局快捷键还原窗口时,窗口没有获取焦点的问题 - 修复我的列表搜索对最后一个字符的匹配问题 +- 修复窗口在`较小`模式下最小化/关闭按钮不居中的问题 ### 优化 diff --git a/src/renderer/components/core/Aside.vue b/src/renderer/components/core/Aside.vue index 3df22749..73099a60 100644 --- a/src/renderer/components/core/Aside.vue +++ b/src/renderer/components/core/Aside.vue @@ -147,7 +147,7 @@ export default { height: @control-btn-width; background: none; border: none; - // display: flex; + display: flex; // justify-content: center; // align-items: center; outline: none; diff --git a/src/renderer/components/core/Toolbar.vue b/src/renderer/components/core/Toolbar.vue index f0f860b1..bd1be043 100644 --- a/src/renderer/components/core/Toolbar.vue +++ b/src/renderer/components/core/Toolbar.vue @@ -183,6 +183,7 @@ export default { } button { + display: flex; position: relative; width: @control-btn-width; height: @control-btn-width; From 85c683b714e1cf8bafed9d8e558cf109fc279133 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 10 Aug 2020 22:24:38 +0800 Subject: [PATCH 11/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E6=92=AD=E6=94=BE=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/renderer/components/core/Player.vue | 55 ++++++++++++++++++++++++- src/renderer/store/modules/player.js | 13 ++++++ 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index e67a092f..3017f024 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -9,3 +9,4 @@ - 桌面歌词当前播放行改为上下居中 - 为区分静音状态,静音时音量条会变淡,调整音量条时将会取消静音 +- 优化随机播放机制,现在通过`下一曲`切换歌曲时,直到播放完整个列表之前将不会再随机到之前播放过的歌曲,并且通过`上一曲`可以正确播放上一首歌曲 diff --git a/src/renderer/components/core/Player.vue b/src/renderer/components/core/Player.vue index d864765f..c8c7da81 100644 --- a/src/renderer/components/core/Player.vue +++ b/src/renderer/components/core/Player.vue @@ -116,7 +116,7 @@ export default { }, computed: { ...mapGetters(['setting']), - ...mapGetters('player', ['list', 'playIndex', 'changePlay', 'listId', 'isShowPlayerDetail']), + ...mapGetters('player', ['list', 'playIndex', 'changePlay', 'listId', 'isShowPlayerDetail', 'playedList']), // pic() { // return this.musicInfo.img ? this.musicInfo.img : '' // }, @@ -194,6 +194,8 @@ export default { }, 'setting.player.togglePlayMethod'(n) { audio.loop = n === 'singleLoop' + if (this.playedList.length) this.clearPlayedList() + if (n == 'random' && this.playIndex > -1) this.setPlayedList(this.list[this.playIndex]) }, 'setting.player.isMute'(n) { audio.muted = n @@ -238,6 +240,9 @@ export default { 'fixPlayIndex', 'resetChangePlay', 'visiblePlayerDetail', + 'clearPlayedList', + 'setPlayedList', + 'removePlayedList', ]), ...mapMutations(['setVolume']), ...mapMutations('list', ['updateMusicInfo']), @@ -369,6 +374,7 @@ export default { console.log('play', this.playIndex) this.checkDelayNextTimeout() let targetSong = this.targetSong = this.list[this.playIndex] + if (this.setting.player.togglePlayMethod == 'random') this.setPlayedList(targetSong) this.retryNum = 0 this.audioErrorTime = 0 @@ -420,20 +426,51 @@ export default { async filterList() { // if (this.list.listName === null) return let list + let playedList = [...this.playedList] if (this.listId == 'download') { list = [] for (const item of this.list) { const filePath = path.join(this.setting.download.savePath, item.fileName) if (!await checkPath(filePath) || !item.isComplate || /\.ape$/.test(filePath)) continue + + let index = playedList.indexOf(item) + if (index > -1) { + playedList.splice(index, 1) + continue + } list.push(item) } } else { - list = this.list.filter(s => this.assertApiSupport(s.source)) + list = this.list.filter(s => { + let index = playedList.indexOf(s) + if (index > -1) { + playedList.splice(index, 1) + return false + } + return this.assertApiSupport(s.source) + }) + } + if (!list.length && this.playedList.length) { + this.clearPlayedList() + return this.filterList() } return list }, async handlePrev() { // console.log(playIndex) + if (this.setting.player.togglePlayMethod == 'random' && this.playedList.length) { + let index = this.playedList.indexOf(this.targetSong) + index -= 1 + if (index > -1) { + let listIndex = this.list.indexOf(this.playedList[index]) + if (listIndex < 0) { + this.removePlayedList(index) + return this.handlePrev() + } + this.setPlayIndex(listIndex) + return + } + } let list = await this.filterList() if (!list.length) return this.setPlayIndex(-1) let playIndex = list.indexOf(this.list[this.playIndex]) @@ -455,6 +492,20 @@ export default { }, async handleNext() { // if (this.list.listName === null) return + // eslint-disable-next-line no-debugger + if (this.setting.player.togglePlayMethod == 'random' && this.playedList.length) { + let index = this.playedList.indexOf(this.targetSong) + index += 1 + if (index < this.playedList.length) { + let listIndex = this.list.indexOf(this.playedList[index]) + if (listIndex < 0) { + this.removePlayedList(index) + return this.handleNext() + } + this.setPlayIndex(listIndex) + return + } + } let list = await this.filterList() if (!list.length) return this.setPlayIndex(-1) let playIndex = list.indexOf(this.list[this.playIndex]) diff --git a/src/renderer/store/modules/player.js b/src/renderer/store/modules/player.js index e61ee64f..84da8ded 100644 --- a/src/renderer/store/modules/player.js +++ b/src/renderer/store/modules/player.js @@ -9,6 +9,7 @@ const state = { playIndex: -1, changePlay: false, isShowPlayerDetail: false, + playedList: [], } let urlRequest @@ -22,6 +23,7 @@ const getters = { changePlay: satte => satte.changePlay, playIndex: state => state.playIndex, isShowPlayerDetail: state => state.isShowPlayerDetail, + playedList: state => state.playedList, } // actions @@ -84,6 +86,7 @@ const mutations = { state.listInfo = list state.playIndex = index state.changePlay = true + if (state.playedList.length) this.commit('player/clearPlayedList') }, setPlayIndex(state, index) { state.playIndex = index @@ -96,6 +99,16 @@ const mutations = { resetChangePlay(state) { state.changePlay = false }, + setPlayedList(state, item) { + if (state.playedList.includes(item)) return + state.playedList.push(item) + }, + removePlayedList(state, index) { + state.playedList.splice(index, 1) + }, + clearPlayedList(state) { + state.playedList = [] + }, visiblePlayerDetail(state, visible) { state.isShowPlayerDetail = visible }, From 8df3ff3536cbf1655e5ce5b1c3c6e903f8ac59df Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 22 Aug 2020 12:49:43 +0800 Subject: [PATCH 12/30] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 126 +++++++++++++++++++++---------------------- package.json | 24 ++++----- publish/changeLog.md | 4 ++ 3 files changed, 79 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c833955..ae9dd40a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,16 +39,16 @@ } }, "@babel/core": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", - "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", + "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.11.4", "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.1", + "@babel/parser": "^7.11.4", "@babel/template": "^7.10.4", "@babel/traverse": "^7.11.0", "@babel/types": "^7.11.0", @@ -72,9 +72,9 @@ } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", + "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", "dev": true, "requires": { "@babel/types": "^7.11.0", @@ -144,9 +144,9 @@ } }, "@babel/parser": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", - "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", "dev": true }, "@babel/template": { @@ -1460,9 +1460,9 @@ } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", + "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", "dev": true, "requires": { "@babel/types": "^7.11.0", @@ -1517,9 +1517,9 @@ } }, "@babel/parser": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", - "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", "dev": true }, "@babel/template": { @@ -6779,9 +6779,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -7543,9 +7543,9 @@ } }, "electron": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-9.2.0.tgz", - "integrity": "sha512-4ecZ3rcGg//Gk4fAK3Jo61T+uh36JhU6HHR/PTujQqQiBw1g4tNPd4R2hGGth2d+7FkRIs5GdRNef7h64fQEMw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-9.2.1.tgz", + "integrity": "sha512-ZsetaQjXB8+9/EFW1FnfK4ukpkwXCxMEaiKiUZhZ0ZLFlLnFCpe0Bg4vdDf7e4boWGcnlgN1jAJpBw7w0eXuqA==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -7667,9 +7667,9 @@ } }, "electron-log": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.2.2.tgz", - "integrity": "sha512-lBpLh1Q8qayrTxFIrTPcNjSHsosvUfOYyZ8glhiLcx7zCNPDGuj8+nXlEaaSS6LRiQQbLgLG+wKpuvztNzBIrA==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.2.4.tgz", + "integrity": "sha512-CXbDU+Iwi+TjKzugKZmTRIORIPe3uQRqgChUl19fkW/reFUn5WP7dt+cNGT3bkLV8xfPilpkPFv33HgtmLLewQ==" }, "electron-publish": { "version": "22.8.0", @@ -7983,9 +7983,9 @@ "dev": true }, "eslint": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz", - "integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz", + "integrity": "sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -8552,9 +8552,9 @@ }, "dependencies": { "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true }, "eslint-visitor-keys": { @@ -8580,9 +8580,9 @@ }, "dependencies": { "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } @@ -11332,9 +11332,9 @@ } }, "jest-worker": { - "version": "26.2.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.2.1.tgz", - "integrity": "sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A==", + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", + "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", "dev": true, "requires": { "@types/node": "*", @@ -12054,9 +12054,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", + "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -16135,14 +16135,14 @@ } }, "terser-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-Gb/bmPMavJsDTYiIocakp9OJhrIBnYrWa5VM0Bb2RngWmszeQUN1xFNh2E8Re+9Cj3/sPrA50Jj/q0nzgLAUuw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA==", "dev": true, "requires": { "cacache": "^15.0.5", "find-cache-dir": "^3.3.1", - "jest-worker": "^26.2.1", + "jest-worker": "^26.3.0", "p-limit": "^3.0.2", "schema-utils": "^2.6.6", "serialize-javascript": "^4.0.0", @@ -16271,9 +16271,9 @@ } }, "terser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.0.0.tgz", - "integrity": "sha512-olH2DwGINoSuEpSGd+BsPuAQaA3OrHnHnFL/rDB2TVNc3srUbz/rq/j2BlF4zDXI+JqAvGr86bIm1R2cJgZ3FA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.1.0.tgz", + "integrity": "sha512-pwC1Jbzahz1ZPU87NQ8B3g5pKbhyJSiHih4gLH6WZiPU8mmS1IlGbB0A2Nuvkj/LCNsgIKctg6GkYwWCeTvXZQ==", "dev": true, "requires": { "commander": "^2.20.0", @@ -16950,9 +16950,9 @@ "dev": true }, "vue": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", - "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" }, "vue-hot-reload-api": { "version": "2.3.4", @@ -16961,9 +16961,9 @@ "dev": true }, "vue-i18n": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.20.0.tgz", - "integrity": "sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg==" + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.21.0.tgz", + "integrity": "sha512-pKBq6Kg5hNacFHMFgPbpYsFlDIMRu4Ew/tpvTWns14CZoCxt7B3tmSNdrLruGMMivnJu1rhhRqsQqT6YwHkuQQ==" }, "vue-loader": { "version": "15.9.3", @@ -16979,9 +16979,9 @@ } }, "vue-router": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.2.tgz", - "integrity": "sha512-n3Ok70hW0EpcJF4lcWIwSHAQbFTnIOLl/fhO8+oTs4jHNtBNsovcVvPZeTOyKEd8C3xF1Crft2ASuOiVT5K1mw==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", + "integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A==" }, "vue-style-loader": { "version": "4.1.2", @@ -16994,9 +16994,9 @@ } }, "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -17824,9 +17824,9 @@ } }, "webpack-merge": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.1.1.tgz", - "integrity": "sha512-UhIkHAVqeG9EqFfYo7dRELrVfH6HYaOTYM7ssKCwfIIHYnWepGVOFp1E166GwgPGFqV6M68UgRiKOERjVOKIXA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.1.2.tgz", + "integrity": "sha512-/slG0Kh0OKTf0zxdFJlhQHzv8bU9gUYVK5DkBjB3i/yoc1Xx4ADG0KITGO5S/6cqn2Ug43+8VR6Sz8daA/c+5g==", "dev": true, "requires": { "clone-deep": "^4.0.1", diff --git a/package.json b/package.json index 9da6f4c4..f5b43d05 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src" }, "browserslist": [ - "Electron 9.2.0" + "Electron 9.2.1" ], "engines": { "node": ">= 12" @@ -159,7 +159,7 @@ }, "homepage": "https://github.com/lyswhut/lx-music-desktop#readme", "devDependencies": { - "@babel/core": "^7.11.1", + "@babel/core": "^7.11.4", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-modules-umd": "^7.10.4", "@babel/plugin-transform-runtime": "^7.11.0", @@ -178,11 +178,11 @@ "cross-env": "^7.0.2", "css-loader": "^3.6.0", "del": "^5.1.0", - "electron": "^9.2.0", + "electron": "^9.2.1", "electron-builder": "^22.8.0", "electron-debug": "^3.1.0", "electron-devtools-installer": "^3.1.1", - "eslint": "^7.6.0", + "eslint": "^7.7.0", "eslint-config-standard": "^14.1.1", "eslint-formatter-friendly": "^7.0.0", "eslint-loader": "^4.0.2", @@ -197,7 +197,7 @@ "less": "^3.12.2", "less-loader": "^6.2.0", "markdown-it": "^11.0.0", - "mini-css-extract-plugin": "^0.9.0", + "mini-css-extract-plugin": "^0.10.0", "optimize-css-assets-webpack-plugin": "^5.0.3", "postcss-loader": "^3.0.0", "postcss-pxtorem": "^5.1.1", @@ -209,21 +209,21 @@ "spinnies": "^0.5.1", "stylus": "^0.54.8", "stylus-loader": "^3.0.2", - "terser-webpack-plugin": "^4.0.0", + "terser-webpack-plugin": "^4.1.0", "url-loader": "^4.1.0", "vue-loader": "^15.9.3", "vue-style-loader": "^4.1.2", - "vue-template-compiler": "^2.6.11", + "vue-template-compiler": "^2.6.12", "webpack": "^4.44.1", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0", "webpack-hot-middleware": "^2.25.0", - "webpack-merge": "^5.1.1" + "webpack-merge": "^5.1.2" }, "dependencies": { "crypto-js": "^4.0.0", "dnscache": "^1.0.2", - "electron-log": "^4.2.2", + "electron-log": "^4.2.4", "electron-store": "^6.0.0", "electron-updater": "^4.3.4", "iconv-lite": "^0.6.2", @@ -233,9 +233,9 @@ "needle": "^2.5.0", "node-id3": "^0.1.18", "request": "^2.88.2", - "vue": "^2.6.11", - "vue-i18n": "^8.20.0", - "vue-router": "^3.4.2", + "vue": "^2.6.12", + "vue-i18n": "^8.21.0", + "vue-router": "^3.4.3", "vuex": "^3.5.1", "vuex-router-sync": "^5.0.0" } diff --git a/publish/changeLog.md b/publish/changeLog.md index 3017f024..abb3f501 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -10,3 +10,7 @@ - 桌面歌词当前播放行改为上下居中 - 为区分静音状态,静音时音量条会变淡,调整音量条时将会取消静音 - 优化随机播放机制,现在通过`下一曲`切换歌曲时,直到播放完整个列表之前将不会再随机到之前播放过的歌曲,并且通过`上一曲`可以正确播放上一首歌曲 + +### 其他 + +- 个性electron到 9.2.1 From 341df0dab7b42e30309bc6ebd11366062903a8e4 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 22 Aug 2020 14:06:16 +0800 Subject: [PATCH 13/30] =?UTF-8?q?=E5=9C=A8=E6=AD=8C=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E7=95=8C=E9=9D=A2=E6=96=B0=E5=A2=9E=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=AD=8C=E5=8D=95=E6=8C=89=E9=92=AE=E3=80=81?= =?UTF-8?q?=E6=94=B6=E8=97=8F=E6=AD=8C=E5=8D=95=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 3 + src/renderer/components/core/Player.vue | 2 +- .../components/material/listAddModal.vue | 2 +- .../material/listAddMultipleModal.vue | 2 +- src/renderer/lang/en-us/view/song_list.json | 4 +- src/renderer/lang/zh-cn/view/song_list.json | 4 +- src/renderer/lang/zh-tw/view/song_list.json | 4 +- src/renderer/store/modules/list.js | 26 +++++--- src/renderer/store/modules/songList.js | 44 +++++++------- src/renderer/views/List.vue | 2 +- src/renderer/views/SongList.vue | 60 +++++++++++++------ 11 files changed, 96 insertions(+), 57 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index abb3f501..b320a539 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,3 +1,6 @@ +### 新增 + +- 在歌单详情界面新增播放当前歌单按钮、收藏歌单按钮 ### 修复 diff --git a/src/renderer/components/core/Player.vue b/src/renderer/components/core/Player.vue index c8c7da81..1f4dea88 100644 --- a/src/renderer/components/core/Player.vue +++ b/src/renderer/components/core/Player.vue @@ -706,7 +706,7 @@ export default { this.setProgressWidth() }, handleToMusicLocation() { - if (this.listId == 'download') return + if (!this.listId || this.listId == 'download') return if (this.playIndex == -1) return this.$router.push({ path: 'list', diff --git a/src/renderer/components/material/listAddModal.vue b/src/renderer/components/material/listAddModal.vue index 99c27f65..8d62d910 100644 --- a/src/renderer/components/material/listAddModal.vue +++ b/src/renderer/components/material/listAddModal.vue @@ -91,7 +91,7 @@ export default { this.newListName = event.target.value = '' this.isEditing = false if (!name) return - this.createUserList(name) + this.createUserList({ name }) }, }, } diff --git a/src/renderer/components/material/listAddMultipleModal.vue b/src/renderer/components/material/listAddMultipleModal.vue index 32a4be14..7e710234 100644 --- a/src/renderer/components/material/listAddMultipleModal.vue +++ b/src/renderer/components/material/listAddMultipleModal.vue @@ -92,7 +92,7 @@ export default { this.newListName = event.target.value = '' this.isEditing = false if (!name) return - this.createUserList(name) + this.createUserList({ name }) }, }, } diff --git a/src/renderer/lang/en-us/view/song_list.json b/src/renderer/lang/en-us/view/song_list.json index e7993d13..8c600d5b 100644 --- a/src/renderer/lang/en-us/view/song_list.json +++ b/src/renderer/lang/en-us/view/song_list.json @@ -6,5 +6,7 @@ "input_text": "Enter songlist link or songlist ID", "tip_1": "Cross-source playlists are not supported, please confirm whether the playlist to be opened corresponds to the current playlist source", "tip_2": "If you encounter a link to a playlist that cannot be opened, welcome feedback", - "tip_3": "Kugou source does not support opening with playlist ID, but supports Kugou code opening" + "tip_3": "Kugou source does not support opening with playlist ID, but supports Kugou code opening", + "play_all": "Play", + "add_all": "Collect" } diff --git a/src/renderer/lang/zh-cn/view/song_list.json b/src/renderer/lang/zh-cn/view/song_list.json index aca6a947..bbbadf6b 100644 --- a/src/renderer/lang/zh-cn/view/song_list.json +++ b/src/renderer/lang/zh-cn/view/song_list.json @@ -6,5 +6,7 @@ "input_text": "输入歌单链接或歌单ID", "tip_1": "不支持跨源打开歌单,请确认要打开的歌单与当前歌单源是否对应", "tip_2": "若遇到无法打开的歌单链接,欢迎反馈", - "tip_3": "酷狗源不支持用歌单ID打开,但支持酷狗码打开" + "tip_3": "酷狗源不支持用歌单ID打开,但支持酷狗码打开", + "play_all": "播放", + "add_all": "收藏" } diff --git a/src/renderer/lang/zh-tw/view/song_list.json b/src/renderer/lang/zh-tw/view/song_list.json index d47eb2d0..a52e8aa9 100644 --- a/src/renderer/lang/zh-tw/view/song_list.json +++ b/src/renderer/lang/zh-tw/view/song_list.json @@ -6,5 +6,7 @@ "input_text": "輸入歌單鏈接或歌單ID", "tip_1": "不支持跨源打開歌單,請確認要打開的歌單與當前歌單源是否對應", "tip_2": "若遇到無法打開的歌單鏈接,歡迎反饋", - "tip_3": "酷狗源不支持用歌單ID打開,但支持酷狗碼打開" + "tip_3": "酷狗源不支持用歌單ID打開,但支持酷狗碼打開", + "play_all": "播放", + "add_all": "收藏" } diff --git a/src/renderer/store/modules/list.js b/src/renderer/store/modules/list.js index 98560d4a..04978ce3 100644 --- a/src/renderer/store/modules/list.js +++ b/src/renderer/store/modules/list.js @@ -28,6 +28,12 @@ const state = { list: [], location: 0, }, + tempList: { + id: 'temp', + name: '临时列表', + list: [], + location: 0, + }, userList: [], } @@ -140,15 +146,19 @@ const mutations = { if (!targetList) return Object.assign(targetList.list[index], data) }, - createUserList(state, name) { - let newList = { - name, - id: `userlist_${Date.now()}`, - list: [], - location: 0, + createUserList(state, { name, id = `userlist_${Date.now()}`, list = [] }) { + let newList = state.userList.find(item => item.id === id) + if (!newList) { + newList = { + name, + id, + list: [], + location: 0, + } + state.userList.push(newList) + allListUpdate(newList) } - state.userList.push(newList) - allListUpdate(newList) + this.commit('list/listAddMultiple', { id, list }) }, removeUserList(state, index) { let list = state.userList.splice(index, 1)[0] diff --git a/src/renderer/store/modules/songList.js b/src/renderer/store/modules/songList.js index 1bf8dd93..731b04e1 100644 --- a/src/renderer/store/modules/songList.js +++ b/src/renderer/store/modules/songList.js @@ -79,37 +79,29 @@ const actions = { cache.has(key) ? Promise.resolve(cache.get(key)) : music[source].songList.getListDetail(id, page) - ).then(result => commit('setListDetail', { result, key, page })) + ).then(result => commit('setListDetail', { result, key, source, id, page })) }, -/* getListDetailAll({ state, rootState }, id) { + getListDetailAll({ state, rootState }, id) { let source = rootState.setting.songList.source - let key = `sdetail__${source}__${id}__all` - if (cache.has(key)) return Promise.resolve(cache.get(key)) - music[source].songList.getListDetail(id, 1).then(result => { - let data = { list: result.list, id } - if (result.total <= result.limit) { - data = { list: result.list, id } - cache.set(key, data) - return data - } + const loadData = (id, page) => { + let key = `sdetail__${source}__${id}__${page}` + return cache.has(key) ? Promise.resolve(cache.get(key)) : music[source].songList.getListDetail(id, page).then(result => { + cache.set(key, result) + return result + }) + } + return loadData(id, 1).then(result => { + if (result.total <= result.limit) return result.list let maxPage = Math.ceil(result.total / result.limit) const loadDetail = (loadPage = 1) => { - let task = [] - let loadNum = 0 - while (loadPage <= maxPage && loadNum < 3) { - task.push(music[source].songList.getListDetail(id, ++loadPage)) - loadNum++ - } return loadPage == maxPage - ? Promise.all(task) - : Promise.all(task).then(result => loadDetail(loadPage).then(result2 => [...result, ...result2])) + ? loadData(id, ++loadPage).then(result => result.list) + : loadData(id, ++loadPage).then(result1 => loadDetail(loadPage).then(result2 => [...result1.list, ...result2])) } - return loadDetail().then(result2 => { - console.log(result2) - }) + return loadDetail().then(result2 => [...result.list, ...result2]) }) - }, */ + }, } // mitations @@ -129,8 +121,10 @@ const mutations = { state.list.key = key cache.set(key, result) }, - setListDetail(state, { result, key, page }) { + setListDetail(state, { result, key, source, id, page }) { state.listDetail.list = result.list + state.listDetail.id = id + state.listDetail.source = source state.listDetail.total = result.total state.listDetail.limit = result.limit state.listDetail.page = page @@ -153,6 +147,8 @@ const mutations = { }, clearListDetail(state) { state.listDetail = { + id: null, + source: null, list: [], desc: null, total: 0, diff --git a/src/renderer/views/List.vue b/src/renderer/views/List.vue index 4a42968e..79b75cba 100644 --- a/src/renderer/views/List.vue +++ b/src/renderer/views/List.vue @@ -643,7 +643,7 @@ export default { this.listsData.isShowNewList = false }) - this.createUserList(name) + this.createUserList({ name }) }, handleShowNewList() { this.listsData.isShowNewList = true diff --git a/src/renderer/views/SongList.vue b/src/renderer/views/SongList.vue index 6d5ff906..a6ff4f9d 100644 --- a/src/renderer/views/SongList.vue +++ b/src/renderer/views/SongList.vue @@ -10,11 +10,9 @@ h3(:title="listDetail.info.name || selectListInfo.name") {{listDetail.info.name || selectListInfo.name}} p(:title="listDetail.info.desc || selectListInfo.desc") {{listDetail.info.desc || selectListInfo.desc}} div(:class="$style.songListHeaderRight") - //- material-btn(:class="$style.closeDetailButton" :disabled="detailLoading" @click="addSongListDetail") 添加 - //- |   - //- material-btn(:class="$style.closeDetailButton" :disabled="detailLoading" @click="playSongListDetail") 播放 - //- |   - material-btn(:class="$style.closeDetailButton" @click="hideListDetail") {{$t('view.song_list.back')}} + material-btn(:class="$style.headerRightBtn" :disabled="detailLoading" @click="playSongListDetail") {{$t('view.song_list.play_all')}} + material-btn(:class="$style.headerRightBtn" :disabled="detailLoading" @click="addSongListDetail") {{$t('view.song_list.add_all')}} + material-btn(:class="$style.headerRightBtn" @click="hideListDetail") {{$t('view.song_list.back')}} material-song-list(v-model="selectedData" @action="handleSongListAction" :source="source" :page="listDetail.page" :limit="listDetail.limit" :total="listDetail.total" :noItem="isGetDetailFailed ? $t('view.song_list.loding_list_fail') : $t('view.song_list.loding_list')" :list="listDetail.list") transition(enter-active-class="animated-fast fadeIn" leave-active-class="animated-fast fadeOut") @@ -84,7 +82,7 @@ export default { listWidth: 645, isGetDetailFailed: false, isInitedTagListWidth: false, - // detailLoading: true, + detailLoading: false, } }, computed: { @@ -179,11 +177,13 @@ export default { }, methods: { ...mapMutations(['setSongList']), - ...mapActions('songList', ['getTags', 'getList', 'getListDetail']), + ...mapActions('songList', ['getTags', 'getList', 'getListDetail', 'getListDetailAll']), ...mapMutations('songList', ['setVisibleListDetail', 'setSelectListInfo']), ...mapActions('download', ['createDownload', 'createDownloadMultiple']), - ...mapMutations('list', ['listAdd', 'listAddMultiple']), - ...mapMutations('player', ['setList']), + ...mapMutations('list', ['listAdd', 'listAddMultiple', 'createUserList']), + ...mapMutations('player', { + setPlayList: 'setList', + }), listenEvent() { window.eventHub.$on('key_backspace_down', this.handle_key_backspace_down) }, @@ -273,7 +273,7 @@ export default { s => s.songmid === targetSong.songmid, ) if (targetIndex > -1) { - this.setList({ + this.setPlayList({ list: this.defaultList, index: targetIndex, }) @@ -402,15 +402,28 @@ export default { assertApiSupport(source) { return assertApiSupport(source) }, - /* addSongListDetail() { - // this.detailLoading = true - // this.getListDetailAll(this.selectListInfo.id).then(() => { - // this.detailLoading = false - // }) + async fetchList() { + this.detailLoading = true + const list = await this.getListDetailAll(this.selectListInfo.id) + this.detailLoading = false + return list + }, + async addSongListDetail() { + if (!this.listDetail.info.name) return + const list = await this.fetchList() + this.createUserList({ name: this.listDetail.info.name, id: `${this.listDetail.source}__${this.listDetail.id}`, list }) + }, + async playSongListDetail() { + if (!this.listDetail.info.name) return + const list = await this.fetchList() + this.setPlayList({ + list: { + list, + id: null, + }, + index: 0, + }) }, - playSongListDetail() { - - }, */ }, } @@ -517,6 +530,17 @@ export default { align-items: center; padding-right: 15px; } +.header-right-btn { + border-radius: 0; + &:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + } + &:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } +} .song-list-detail-content { position: absolute; From 44acc7d5acb263b6141189995dfa14203609a3f9 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 22 Aug 2020 14:17:34 +0800 Subject: [PATCH 14/30] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E7=9A=84=E5=85=A8=E5=B1=80=E5=A3=B0=E9=9F=B3=E5=AA=92=E4=BD=93?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE=E6=8E=A5=E7=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 4 ++++ src/common/defaultHotKey.js | 15 --------------- src/common/utils.js | 9 +++++++++ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index b320a539..d55247ca 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -14,6 +14,10 @@ - 为区分静音状态,静音时音量条会变淡,调整音量条时将会取消静音 - 优化随机播放机制,现在通过`下一曲`切换歌曲时,直到播放完整个列表之前将不会再随机到之前播放过的歌曲,并且通过`上一曲`可以正确播放上一首歌曲 +### 移除 + +- 移除默认的全局声音媒体快捷键接管 + ### 其他 - 个性electron到 9.2.1 diff --git a/src/common/defaultHotKey.js b/src/common/defaultHotKey.js index 3d018533..33419562 100644 --- a/src/common/defaultHotKey.js +++ b/src/common/defaultHotKey.js @@ -44,21 +44,6 @@ module.exports = { name: null, action: hotKeyPlayer.next.action, }, - VolumeUp: { - type: hotKeyPlayer.volume_up.type, - name: null, - action: hotKeyPlayer.volume_up.action, - }, - VolumeDown: { - type: hotKeyPlayer.volume_down.type, - name: null, - action: hotKeyPlayer.volume_down.action, - }, - VolumeMute: { - type: hotKeyPlayer.volume_mute.type, - name: null, - action: hotKeyPlayer.volume_mute.action, - }, 'mod+alt+f5': { type: hotKeyPlayer.toggle_play.type, name: hotKeyPlayer.toggle_play.name, diff --git a/src/common/utils.js b/src/common/utils.js index 5852c147..94cf70b5 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -206,6 +206,15 @@ exports.initHotKey = () => { } let globalConfig = electronStore_hotKey.get('global') + + // 移除v1.0.1及之前设置的全局声音媒体快捷键接管 + if (globalConfig && globalConfig.keys.VolumeUp) { + delete globalConfig.keys.VolumeUp + delete globalConfig.keys.VolumeDown + delete globalConfig.keys.VolumeMute + electronStore_hotKey.set('global', globalConfig) + } + if (!globalConfig) { globalConfig = defaultHotKey.global electronStore_hotKey.set('global', globalConfig) From c15895ab455e2c90684ca138d0c87a127f5a0be7 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 23 Aug 2020 12:13:17 +0800 Subject: [PATCH 15/30] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E4=B8=8D=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E5=B0=86=E6=AD=8C=E8=AF=8D=E7=AA=97=E5=8F=A3=E6=8B=96?= =?UTF-8?q?=E5=87=BA=E4=B8=BB=E5=B1=8F=E5=B9=95=E4=B9=8B=E5=A4=96=20?= =?UTF-8?q?=E7=9A=84=E8=AE=BE=E7=BD=AE=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/common/defaultSetting.js | 3 +- src/main/modules/winLyric/event.js | 15 +++++- src/main/modules/winLyric/index.js | 8 +++- src/main/modules/winLyric/rendererEvent.js | 50 ++----------------- src/main/modules/winLyric/utils.js | 56 ++++++++++++++++++++++ src/renderer/lang/en-us/view/setting.json | 1 + src/renderer/lang/zh-cn/view/setting.json | 1 + src/renderer/lang/zh-tw/view/setting.json | 1 + src/renderer/views/Setting.vue | 2 + 10 files changed, 87 insertions(+), 51 deletions(-) create mode 100644 src/main/modules/winLyric/utils.js diff --git a/publish/changeLog.md b/publish/changeLog.md index d55247ca..61047eb8 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,6 +1,7 @@ ### 新增 - 在歌单详情界面新增播放当前歌单按钮、收藏歌单按钮 +- 新增`不允许将歌词窗口拖出主屏幕之外`的设置项,默认开启,在连接多个屏幕时想要拖动到其他屏幕时可关闭此设置 ### 修复 diff --git a/src/common/defaultSetting.js b/src/common/defaultSetting.js index 2203e8ba..07909bad 100644 --- a/src/common/defaultSetting.js +++ b/src/common/defaultSetting.js @@ -3,7 +3,7 @@ const os = require('os') const { isMac } = require('./utils') const defaultSetting = { - version: '1.0.34', + version: '1.0.35', player: { togglePlayMethod: 'listLoop', highQuality: false, @@ -22,6 +22,7 @@ const defaultSetting = { x: null, y: null, theme: 0, + isLockScreen: true, style: { fontSize: 120, opacity: 95, diff --git a/src/main/modules/winLyric/event.js b/src/main/modules/winLyric/event.js index d9f19b7b..0c5a7935 100644 --- a/src/main/modules/winLyric/event.js +++ b/src/main/modules/winLyric/event.js @@ -1,10 +1,12 @@ const { common: COMMON_EVENT_NAME, winLyric: WIN_LYRIC_EVENT_NAME, hotKey: HOT_KEY_EVENT_NAME, mainWindow: MAIN_WINDOW_EVENT_NAME } = require('../../events/_name') const { mainSend, NAMES: { winLyric: ipcWinLyricNames } } = require('../../../common/ipc') const { desktop_lyric } = require('../../../common/hotKey') +const { setLyricWindow } = require('./utils') let isLock = null let isEnable = null let isAlwaysOnTop = null +let isLockScreen = null const setLrcConfig = () => { let desktopLyric = global.appSetting.desktopLyric if (global.modules.lyricWindow) { @@ -33,10 +35,21 @@ const setLrcConfig = () => { global.lx_event.winLyric.close() } } + if (isLockScreen != desktopLyric.isLockScreen) { + isLockScreen = desktopLyric.isLockScreen + if (desktopLyric.isLockScreen) { + setLyricWindow({ + x: desktopLyric.x, + y: desktopLyric.y, + w: desktopLyric.width, + h: desktopLyric.height, + }) + } + } } global.lx_event.common.on(COMMON_EVENT_NAME.config, name => { if (WIN_LYRIC_EVENT_NAME.name === name) return - setLrcConfig(false) + setLrcConfig() }) global.lx_event.mainWindow.on(MAIN_WINDOW_EVENT_NAME.setLyricInfo, info => { diff --git a/src/main/modules/winLyric/index.js b/src/main/modules/winLyric/index.js index 77097586..3b2e150d 100644 --- a/src/main/modules/winLyric/index.js +++ b/src/main/modules/winLyric/index.js @@ -80,14 +80,18 @@ const createWindow = () => { x = screenWidth - width - offset y = screenHeight - height - offset } + if (global.appSetting.desktopLyric.isLockScreen) { + x = Math.max(-offset, screenWidth < (width + x) ? screenWidth - width : x) + y = Math.max(-offset, screenHeight < (height + y) ? screenHeight - height : y) + } /** * Initial window options */ global.modules.lyricWindow = new BrowserWindow({ height: Math.max(height > screenHeight ? screenHeight : height, 80), width: Math.max(width > screenWidth ? screenWidth : width, 380), - x: Math.max(-offset, screenWidth < (width + x) ? screenWidth - width : x), - y: Math.max(-offset, screenHeight < (height + y) ? screenHeight - height : y), + x, + y, minWidth: 380, minHeight: 80, useContentSize: true, diff --git a/src/main/modules/winLyric/rendererEvent.js b/src/main/modules/winLyric/rendererEvent.js index c0ebc126..86dc448d 100644 --- a/src/main/modules/winLyric/rendererEvent.js +++ b/src/main/modules/winLyric/rendererEvent.js @@ -8,6 +8,7 @@ const { }, } = require('../../../common/ipc') const { winLyric: WIN_LYRIC_EVENT_NAME } = require('../../events/_name') +const { setLyricWindow } = require('./utils') mainOn(ipcWinLyricNames.get_lyric_info, (event, action) => { if (!global.modules.mainWindow) return @@ -26,51 +27,6 @@ mainHandle(ipcWinLyricNames.get_lyric_config, async() => { return { config: global.appSetting.desktopLyric, languageId: global.appSetting.langId } }) -let bounds -let winX -let winY -let wasW -let wasY -let offset = 8 -mainOn(ipcWinLyricNames.set_win_bounds, (event, { x = 0, y = 0, w = 0, h = 0 }) => { - if (!global.modules.lyricWindow) return - bounds = global.modules.lyricWindow.getBounds() - wasW = global.envParams.workAreaSize.width - wasY = global.envParams.workAreaSize.height + offset - - bounds.width = w - bounds.height = h - if (bounds.width > wasW - offset) { - bounds.width = wasW - offset - } else if (bounds.width < 380) { - bounds.width = 380 - } - if (bounds.height > wasY) { - bounds.height = wasY + offset - } else if (bounds.height < 80) { - bounds.height = 80 - } - - - if (x != 0) { - winX = bounds.x + x - if (winX > wasW - bounds.width + offset) { - winX = wasW - bounds.width + offset - } else if (winX < -offset) { - winX = -offset - } - bounds.x = winX - } - if (y != 0) { - winY = bounds.y + y - if (winY > wasY - bounds.height) { - winY = wasY - bounds.height - } else if (winY < -offset) { - winY = -offset - } - bounds.y = winY - } - - // console.log(bounds, x, y, w, h) - global.modules.lyricWindow.setBounds(bounds) +mainOn(ipcWinLyricNames.set_win_bounds, (event, options) => { + setLyricWindow(options) }) diff --git a/src/main/modules/winLyric/utils.js b/src/main/modules/winLyric/utils.js new file mode 100644 index 00000000..48c891eb --- /dev/null +++ b/src/main/modules/winLyric/utils.js @@ -0,0 +1,56 @@ +// 设置窗口位置、大小 +let bounds +let winX +let winY +let wasW +let wasY +let offset = 8 +exports.setLyricWindow = ({ x = 0, y = 0, w = 0, h = 0 }) => { + if (!global.modules.lyricWindow) return + bounds = global.modules.lyricWindow.getBounds() + wasW = global.envParams.workAreaSize.width + wasY = global.envParams.workAreaSize.height + offset + + bounds.width = w + bounds.height = h + if (bounds.width > wasW - offset) { + bounds.width = wasW - offset + } else if (bounds.width < 380) { + bounds.width = 380 + } + if (bounds.height > wasY) { + bounds.height = wasY + offset + } else if (bounds.height < 80) { + bounds.height = 80 + } + + if (global.appSetting.desktopLyric.isLockScreen) { + if (x != 0) { + winX = bounds.x + x + if (winX > wasW - bounds.width + offset) { + winX = wasW - bounds.width + offset + } else if (winX < -offset) { + winX = -offset + } + bounds.x = winX + } + if (y != 0) { + winY = bounds.y + y + if (winY > wasY - bounds.height) { + winY = wasY - bounds.height + } else if (winY < -offset) { + winY = -offset + } + bounds.y = winY + } + } else { + if (x != 0) { + bounds.x = bounds.x + x + } + if (y != 0) { + bounds.y = bounds.y + y + } + } + // console.log(bounds, x, y, w, h) + global.modules.lyricWindow.setBounds(bounds) +} diff --git a/src/renderer/lang/en-us/view/setting.json b/src/renderer/lang/en-us/view/setting.json index 116b46c4..ac1f2b7c 100644 --- a/src/renderer/lang/en-us/view/setting.json +++ b/src/renderer/lang/en-us/view/setting.json @@ -48,6 +48,7 @@ "desktop_lyric_enable": "Display lyrics", "desktop_lyric_lock": "Lock lyrics", "desktop_lyric_always_on_top": "Make the lyrics always above other windows", + "desktop_lyric_lock_screen": "It is not allowed to drag the lyrics window out of the main screen", "search": "Search", "search_hot_title": "Select whether to show popular searches", diff --git a/src/renderer/lang/zh-cn/view/setting.json b/src/renderer/lang/zh-cn/view/setting.json index 3983fcb3..844c3f6b 100644 --- a/src/renderer/lang/zh-cn/view/setting.json +++ b/src/renderer/lang/zh-cn/view/setting.json @@ -48,6 +48,7 @@ "desktop_lyric_enable": "显示歌词", "desktop_lyric_lock": "锁定歌词", "desktop_lyric_always_on_top": "使歌词总是在其他窗口之上", + "desktop_lyric_lock_screen": "不允许歌词窗口拖出主屏幕之外", "search": "搜索设置", "search_hot_title": "是否显示热门搜索", diff --git a/src/renderer/lang/zh-tw/view/setting.json b/src/renderer/lang/zh-tw/view/setting.json index 0f7ff439..f46798d9 100644 --- a/src/renderer/lang/zh-tw/view/setting.json +++ b/src/renderer/lang/zh-tw/view/setting.json @@ -46,6 +46,7 @@ "desktop_lyric_enable": "顯示歌詞", "desktop_lyric_lock": "鎖定歌詞", "desktop_lyric_always_on_top": "使歌詞總是在其他窗口之上", + "desktop_lyric_lock_screen": "不允許歌詞窗口拖出主屏幕之外", "search": "搜索設置", "search_hot_title": "是否顯示熱門搜索", "search_hot": "熱門搜索", diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index 5caf0d6a..b135728a 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -82,6 +82,8 @@ div.scroll(:class="$style.setting") material-checkbox(id="setting_desktop_lyric_lock" v-model="current_setting.desktopLyric.isLock" :label="$t('view.setting.desktop_lyric_lock')") div(:class="$style.gapTop") material-checkbox(id="setting_desktop_lyric_alwaysOnTop" v-model="current_setting.desktopLyric.isAlwaysOnTop" :label="$t('view.setting.desktop_lyric_always_on_top')") + div(:class="$style.gapTop") + material-checkbox(id="setting_desktop_lyric_lockScreen" v-model="current_setting.desktopLyric.isLockScreen" :label="$t('view.setting.desktop_lyric_lock_screen')") dt {{$t('view.setting.search')}} dd(:title="$t('view.setting.search_hot_title')") h3 {{$t('view.setting.search_hot')}} From 669c1fe490dbbf7f0d2cf8c99f6fb8d525dc6a6a Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 23 Aug 2020 15:45:08 +0800 Subject: [PATCH 16/30] =?UTF-8?q?=E6=96=B0=E5=A2=9E`=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=AD=8C=E8=AF=8D=E7=BF=BB=E8=AF=91`=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=BC=80=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/common/defaultSetting.js | 3 +- src/main/modules/winLyric/event.js | 1 + src/main/modules/winLyric/rendererEvent.js | 2 +- src/renderer-lyric/App.vue | 7 ++-- src/renderer-lyric/components/core/Lyric.vue | 24 +++++++++++-- src/renderer/components/core/Player.vue | 25 ++++++++----- src/renderer/lang/en-us/view/setting.json | 1 + src/renderer/lang/zh-cn/view/setting.json | 1 + src/renderer/lang/zh-tw/view/setting.json | 1 + src/renderer/store/modules/download.js | 10 +++--- src/renderer/store/modules/player.js | 7 ++-- src/renderer/utils/music/bd/index.js | 2 +- src/renderer/utils/music/kg/lyric.js | 5 ++- src/renderer/utils/music/kw/lyric.js | 5 ++- src/renderer/utils/music/mg/lyric.js | 10 ++++-- src/renderer/utils/music/tx/lyric.js | 8 +++-- src/renderer/utils/music/wy/lyric.js | 27 ++++++++------ src/renderer/utils/music/xm/lyric.js | 37 +++++++++++++++++--- src/renderer/views/Setting.vue | 4 +++ 20 files changed, 137 insertions(+), 44 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 61047eb8..cb2a418f 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -2,6 +2,7 @@ - 在歌单详情界面新增播放当前歌单按钮、收藏歌单按钮 - 新增`不允许将歌词窗口拖出主屏幕之外`的设置项,默认开启,在连接多个屏幕时想要拖动到其他屏幕时可关闭此设置 +- 新增`显示歌词翻译`设置,默认开启,仅支持某些平台,注:无论该设置是否开启,嵌入或下载歌词时都不会带上翻译 ### 修复 diff --git a/src/common/defaultSetting.js b/src/common/defaultSetting.js index 07909bad..37163597 100644 --- a/src/common/defaultSetting.js +++ b/src/common/defaultSetting.js @@ -3,7 +3,7 @@ const os = require('os') const { isMac } = require('./utils') const defaultSetting = { - version: '1.0.35', + version: '1.0.36', player: { togglePlayMethod: 'listLoop', highQuality: false, @@ -12,6 +12,7 @@ const defaultSetting = { isMute: false, mediaDeviceId: 'default', isMediaDeviceRemovedStopPlay: false, + isShowLyricTransition: true, }, desktopLyric: { enable: false, diff --git a/src/main/modules/winLyric/event.js b/src/main/modules/winLyric/event.js index 0c5a7935..513adc16 100644 --- a/src/main/modules/winLyric/event.js +++ b/src/main/modules/winLyric/event.js @@ -13,6 +13,7 @@ const setLrcConfig = () => { mainSend(global.modules.lyricWindow, ipcWinLyricNames.set_lyric_config, { config: desktopLyric, languageId: global.appSetting.langId, + isShowLyricTransition: global.appSetting.player.isShowLyricTransition, }) if (isLock != desktopLyric.isLock) { isLock = desktopLyric.isLock diff --git a/src/main/modules/winLyric/rendererEvent.js b/src/main/modules/winLyric/rendererEvent.js index 86dc448d..75d38dbc 100644 --- a/src/main/modules/winLyric/rendererEvent.js +++ b/src/main/modules/winLyric/rendererEvent.js @@ -24,7 +24,7 @@ mainOn(ipcWinLyricNames.set_lyric_config, (event, config) => { }) mainHandle(ipcWinLyricNames.get_lyric_config, async() => { - return { config: global.appSetting.desktopLyric, languageId: global.appSetting.langId } + return { config: global.appSetting.desktopLyric, languageId: global.appSetting.langId, isShowLyricTransition: global.appSetting.player.isShowLyricTransition } }) mainOn(ipcWinLyricNames.set_win_bounds, (event, options) => { diff --git a/src/renderer-lyric/App.vue b/src/renderer-lyric/App.vue index c66cfd67..a734428f 100644 --- a/src/renderer-lyric/App.vue +++ b/src/renderer-lyric/App.vue @@ -4,7 +4,7 @@ transition(enter-active-class="animated-fast fadeIn" leave-active-class="animated-fast fadeOut") .control-bar(v-show="!lrcConfig.isLock") core-control-bar(:lrcConfig="lrcConfig" :themes="themeList") - core-lyric(:lrcConfig="lrcConfig") + core-lyric(:lrcConfig="lrcConfig" :isShowLyricTransition="isShowLyricTransition") div.resize-left(@mousedown.self="handleMouseDown('left', $event)") div.resize-top(@mousedown.self="handleMouseDown('top', $event)") div.resize-right(@mousedown.self="handleMouseDown('right', $event)") @@ -44,6 +44,7 @@ export default { isZoomActiveLrc: true, }, }, + isShowLyricTransition: true, themeList: [ { id: 0, @@ -117,8 +118,10 @@ export default { document.removeEventListener('mouseup', this.handleMouseUp) }, methods: { - handleUpdateConfig({ config, languageId }) { + handleUpdateConfig({ config, languageId, isShowLyricTransition }) { + console.log(isShowLyricTransition) this.lrcConfig = config + this.isShowLyricTransition = isShowLyricTransition if (this.$i18n.locale !== languageId && languageId != null) this.$i18n.locale = languageId }, handleMouseDown(origin, event) { diff --git a/src/renderer-lyric/components/core/Lyric.vue b/src/renderer-lyric/components/core/Lyric.vue index 4949341a..c73bd333 100644 --- a/src/renderer-lyric/components/core/Lyric.vue +++ b/src/renderer-lyric/components/core/Lyric.vue @@ -27,6 +27,10 @@ export default { } }, }, + isShowLyricTransition: { + type: Boolean, + default: true, + }, }, data() { return { @@ -58,6 +62,10 @@ export default { lyricLines: [], isSetedLines: false, isPlay: false, + lyrics: { + lyric: '', + tlyric: '', + }, } }, computed: { @@ -112,6 +120,11 @@ export default { }, immediate: true, }, + isShowLyricTransition(n) { + console.log(n) + this.setLyric() + rendererSend(NAMES.winLyric.get_lyric_info, 'status') + }, }, created() { rendererOn(NAMES.winLyric.set_lyric_info, (event, data) => this.handleSetInfo(data)) @@ -144,7 +157,9 @@ export default { // console.log(type, data) switch (type) { case 'lyric': - window.lrc.setLyric(data) + this.lyrics.lyric = data.lrc + this.lyrics.tlyric = data.tlrc + this.setLyric() break case 'play': this.isPlay = true @@ -156,7 +171,9 @@ export default { break case 'info': // console.log('info', data) - window.lrc.setLyric(data.lyric) + this.lyrics.lyric = data.lyric + this.lyrics.tlyric = data.tlyric + this.setLyric() this.$nextTick(() => { this.lyric.line = data.line rendererSend(NAMES.winLyric.get_lyric_info, 'status') @@ -261,6 +278,9 @@ export default { close() { rendererSend(NAMES.winLyric.close) }, + setLyric() { + window.lrc.setLyric((this.isShowLyricTransition && this.lyrics.tlyric ? this.lyrics.tlyric + '\n' : '') + this.lyrics.lyric) + }, }, } diff --git a/src/renderer/components/core/Player.vue b/src/renderer/components/core/Player.vue index 1f4dea88..f2d8cd3a 100644 --- a/src/renderer/components/core/Player.vue +++ b/src/renderer/components/core/Player.vue @@ -153,6 +153,7 @@ export default { name: this.musicInfo.name, album: this.musicInfo.album, lyric: this.musicInfo.lrc, + tlyric: this.musicInfo.tlrc, isPlay: this.isPlay, line: this.lyric.line, played_time: audio.currentTime * 1000, @@ -203,6 +204,9 @@ export default { 'setting.player.mediaDeviceId'(n) { this.setMediaDevice() }, + 'setting.player.isShowLyricTransition'() { + this.setLyric() + }, async list(n, o) { if (n === o && this.musicInfo.songmid) { let index = this.listId == 'download' @@ -612,24 +616,22 @@ export default { }, setLrc(targetSong) { this.musicInfo.lrc = targetSong.lrc + this.musicInfo.tlrc = targetSong.tlrc - let lrcP = this.musicInfo.lrc + let lrcP = this.musicInfo.lrc && this.musicInfo.tlrc != null ? Promise.resolve() : this.getLrc(targetSong).then(() => { this.musicInfo.lrc = targetSong.lrc + this.musicInfo.tlrc = targetSong.tlrc }) lrcP .then(() => { - window.lrc.setLyric(this.musicInfo.lrc) - this.handleUpdateWinLyricInfo('lyric', this.musicInfo.lrc) - if (this.isPlay && (this.musicInfo.url || this.listId == 'download')) { - window.lrc.play(audio.currentTime * 1000) - this.handleUpdateWinLyricInfo('play', audio.currentTime * 1000) - } + this.setLyric() + this.handleUpdateWinLyricInfo('lyric', { lrc: this.musicInfo.lrc, tlrc: this.musicInfo.tlrc }) }) .catch(() => { - this.handleUpdateWinLyricInfo('lyric', this.musicInfo.lrc) + this.handleUpdateWinLyricInfo('lyric', { lrc: this.musicInfo.lrc, tlrc: this.musicInfo.tlrc }) this.status = this.statusText = this.$t('core.player.lyric_error') }) }, @@ -818,6 +820,13 @@ export default { info, }) }, + setLyric() { + window.lrc.setLyric((this.setting.player.isShowLyricTransition && this.musicInfo.tlrc ? this.musicInfo.tlrc + '\n' : '') + this.musicInfo.lrc) + if (this.isPlay && (this.musicInfo.url || this.listId == 'download')) { + window.lrc.play(audio.currentTime * 1000) + this.handleUpdateWinLyricInfo('play', audio.currentTime * 1000) + } + }, }, } diff --git a/src/renderer/lang/en-us/view/setting.json b/src/renderer/lang/en-us/view/setting.json index ac1f2b7c..ec8ab69a 100644 --- a/src/renderer/lang/en-us/view/setting.json +++ b/src/renderer/lang/en-us/view/setting.json @@ -35,6 +35,7 @@ "play_toggle_random": "Playlist shuffle", "play_toggle_list": "Play in order", "play_toggle_single_loop": "Single repeat", + "play_lyric_transition": "Show lyrics translation", "play_quality_title": "The 320k quality is preferred for playing", "play_quality": "Prefer High Quality 320k", "play_task_bar_title": "Show playing progress on the taskbar", diff --git a/src/renderer/lang/zh-cn/view/setting.json b/src/renderer/lang/zh-cn/view/setting.json index 844c3f6b..d84c9073 100644 --- a/src/renderer/lang/zh-cn/view/setting.json +++ b/src/renderer/lang/zh-cn/view/setting.json @@ -35,6 +35,7 @@ "play_toggle_random": "列表随机", "play_toggle_list": "顺序播放", "play_toggle_single_loop": "单曲循环", + "play_lyric_transition": "显示歌词翻译", "play_quality_title": "启用时将优先播放320K品质的歌曲", "play_quality": "优先播放高品质音乐", "play_task_bar_title": "在任务栏上显示当前歌曲播放进度", diff --git a/src/renderer/lang/zh-tw/view/setting.json b/src/renderer/lang/zh-tw/view/setting.json index f46798d9..9701fa8e 100644 --- a/src/renderer/lang/zh-tw/view/setting.json +++ b/src/renderer/lang/zh-tw/view/setting.json @@ -34,6 +34,7 @@ "play_toggle_random": "列表隨機", "play_toggle_list": "順序播放", "play_toggle_single_loop": "單曲循環", + "play_lyric_transition": "顯示歌詞翻譯", "play_quality_title": "啟用時將優先播放320K品質的歌曲", "play_quality": "優先播放高品質音樂", "play_task_bar_title": "在任務欄上顯示當前歌曲播放進度", diff --git a/src/renderer/store/modules/download.js b/src/renderer/store/modules/download.js index 8166686d..036a9f87 100644 --- a/src/renderer/store/modules/download.js +++ b/src/renderer/store/modules/download.js @@ -177,7 +177,7 @@ const saveMeta = (downloadInfo, filePath, isEmbedPic, isEmbedLyric) => { : Promise.resolve(), isEmbedLyric ? downloadInfo.musicInfo.lrc - ? Promise.resolve(downloadInfo.musicInfo.lrc) + ? Promise.resolve({ lyric: downloadInfo.musicInfo.lrc, tlyric: downloadInfo.musicInfo.tlrc || '' }) : music[downloadInfo.musicInfo.source].getLyric(downloadInfo.musicInfo).promise.catch(err => { console.log(err) return null @@ -190,7 +190,7 @@ const saveMeta = (downloadInfo, filePath, isEmbedPic, isEmbedLyric) => { artist: downloadInfo.musicInfo.singer, album: downloadInfo.musicInfo.albumName, APIC: imgUrl, - lyrics, + lyrics: lyrics.lyric, }) }) } @@ -202,10 +202,10 @@ const saveMeta = (downloadInfo, filePath, isEmbedPic, isEmbedLyric) => { */ const downloadLyric = (downloadInfo, filePath) => { const promise = downloadInfo.musicInfo.lrc - ? Promise.resolve(downloadInfo.musicInfo.lrc) + ? Promise.resolve({ lyric: downloadInfo.musicInfo.lrc, tlyric: downloadInfo.musicInfo.tlrc || '' }) : music[downloadInfo.musicInfo.source].getLyric(downloadInfo.musicInfo).promise - promise.then(lrc => { - if (lrc) saveLrc(filePath.replace(/(mp3|flac|ape|wav)$/, 'lrc'), lrc) + promise.then(lrcs => { + if (lrcs.lyric) saveLrc(filePath.replace(/(mp3|flac|ape|wav)$/, 'lrc'), lrcs.lyric) }) } diff --git a/src/renderer/store/modules/player.js b/src/renderer/store/modules/player.js index 84da8ded..16fbc8a0 100644 --- a/src/renderer/store/modules/player.js +++ b/src/renderer/store/modules/player.js @@ -60,9 +60,9 @@ const actions = { getLrc({ commit, state }, musicInfo) { if (lrcRequest && lrcRequest.cancelHttp) lrcRequest.cancelHttp() lrcRequest = music[musicInfo.source].getLyric(musicInfo) - return lrcRequest.promise.then(lrc => { + return lrcRequest.promise.then(({ lyric, tlyric }) => { lrcRequest = null - commit('setLrc', { musicInfo, lrc }) + commit('setLrc', { musicInfo, lyric, tlyric }) }).catch(err => { lrcRequest = null return Promise.reject(err) @@ -80,7 +80,8 @@ const mutations = { datas.musicInfo.img = datas.url }, setLrc(state, datas) { - datas.musicInfo.lrc = datas.lrc + datas.musicInfo.lrc = datas.lyric + datas.musicInfo.tlrc = datas.tlyric }, setList(state, { list, index }) { state.listInfo = list diff --git a/src/renderer/utils/music/bd/index.js b/src/renderer/utils/music/bd/index.js index c83fe67e..de780c90 100644 --- a/src/renderer/utils/music/bd/index.js +++ b/src/renderer/utils/music/bd/index.js @@ -21,7 +21,7 @@ const bd = { }, getLyric(songInfo) { const requestObj = this.getMusicInfo(songInfo) - requestObj.promise = requestObj.promise.then(info => httpFetch(info.lrclink).promise.then(resp => resp.body)) + requestObj.promise = requestObj.promise.then(info => httpFetch(info.lrclink).promise.then(resp => ({ lyric: resp.body, tlyric: '' }))) return requestObj }, // getLyric(songInfo) { diff --git a/src/renderer/utils/music/kg/lyric.js b/src/renderer/utils/music/kg/lyric.js index dab3fc00..a6574791 100644 --- a/src/renderer/utils/music/kg/lyric.js +++ b/src/renderer/utils/music/kg/lyric.js @@ -26,7 +26,10 @@ export default { requestObj.cancelHttp = tryRequestObj.cancelHttp.bind(tryRequestObj) return tryRequestObj.promise } - return body + return { + lyric: body, + tlyric: '', + } }) return requestObj }, diff --git a/src/renderer/utils/music/kw/lyric.js b/src/renderer/utils/music/kw/lyric.js index 29f6a1d7..91fd52f3 100644 --- a/src/renderer/utils/music/kw/lyric.js +++ b/src/renderer/utils/music/kw/lyric.js @@ -17,7 +17,10 @@ export default { return requestObj.promise.then(({ statusCode, body, raw }) => { if (statusCode != 200) return Promise.reject(new Error(JSON.stringify(body))) return decodeLyric({ lrcBase64: raw.toString('base64'), isGetLyricx }).then(base64Data => { - return Buffer.from(base64Data, 'base64').toString() + return { + lyric: Buffer.from(base64Data, 'base64').toString(), + tlyric: '', + } }) }) }) diff --git a/src/renderer/utils/music/mg/lyric.js b/src/renderer/utils/music/mg/lyric.js index 330aa10d..cd6a49ef 100644 --- a/src/renderer/utils/music/mg/lyric.js +++ b/src/renderer/utils/music/mg/lyric.js @@ -12,7 +12,10 @@ export default { requestObj.cancelHttp = tryRequestObj.cancelHttp.bind(tryRequestObj) return tryRequestObj.promise } - return body + return { + lyric: body, + tlyric: '', + } }) return requestObj } else { @@ -28,7 +31,10 @@ export default { requestObj.cancelHttp = tryRequestObj.cancelHttp.bind(tryRequestObj) return tryRequestObj.promise } - return body.lyric + return { + lyric: body.lyric, + tlyric: '', + } }) return requestObj } diff --git a/src/renderer/utils/music/tx/lyric.js b/src/renderer/utils/music/tx/lyric.js index d86233ba..a371a6e7 100644 --- a/src/renderer/utils/music/tx/lyric.js +++ b/src/renderer/utils/music/tx/lyric.js @@ -6,13 +6,17 @@ export default { matchLrc: /.+"lyric":"([\w=+/]*)".+/, }, getLyric(songmid) { - const requestObj = httpFetch(`https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${songmid}&g_tk=2001461048&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&platform=yqq`, { + const requestObj = httpFetch(`https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${songmid}&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&platform=yqq`, { headers: { Referer: 'https://y.qq.com/portal/player.html', }, }) requestObj.promise = requestObj.promise.then(({ body }) => { - return decodeName(b64DecodeUnicode(body.replace(this.regexps.matchLrc, '$1'))) + if (body.code != 0) return Promise.reject(new Error('获取歌词失败')) + return { + lyric: decodeName(b64DecodeUnicode(body.lyric)), + tlyric: decodeName(b64DecodeUnicode(body.trans)), + } }) return requestObj }, diff --git a/src/renderer/utils/music/wy/lyric.js b/src/renderer/utils/music/wy/lyric.js index 819b3931..6ae95d34 100644 --- a/src/renderer/utils/music/wy/lyric.js +++ b/src/renderer/utils/music/wy/lyric.js @@ -1,20 +1,27 @@ import { httpFetch } from '../../request' -import { weapi } from './utils/crypto' +import { linuxapi } from './utils/crypto' export default songmid => { - const requestObj = httpFetch('http://music.163.com/weapi/song/lyric?csrf_token=', { + const requestObj = httpFetch('https://music.163.com/api/linux/forward', { method: 'post', - headers: { - 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', - Referer: 'https://music.163.com/song?id=' + songmid, - origin: 'https://music.163.com', - }, - form: weapi({ id: songmid, lv: -1, tv: -1, csrf_token: '' }), + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', + form: linuxapi({ + method: 'POST', + url: 'https://music.163.com/api/song/lyric', + params: { + id: songmid, + lv: -1, + kv: -1, + tv: -1, + }, + }), }) requestObj.promise = requestObj.promise.then(({ body }) => { - // console.log(body) if (body.code !== 200) return Promise.reject('获取歌词失败') - return body.lrc.lyric + return { + lyric: body.lrc.lyric, + tlyric: body.tlyric.lyric, + } }) return requestObj } diff --git a/src/renderer/utils/music/xm/lyric.js b/src/renderer/utils/music/xm/lyric.js index 4f83c57f..d1e85d79 100644 --- a/src/renderer/utils/music/xm/lyric.js +++ b/src/renderer/utils/music/xm/lyric.js @@ -1,6 +1,23 @@ import { httpGet, httpFetch } from '../../request' import { xmRequest } from './util' +const parseLyric = str => { + str = str.replace(/(?:<\d+>|\r)/g, '') + let tlyric = [] + let lyric = str.replace(/\[[\d:.]+\].*?\n\[x-trans\].*/g, s => { + // console.log(s) + let [lrc, tlrc] = s.split('\n') + tlrc = tlrc.replace('[x-trans]', lrc.replace(/^(\[[\d:.]+\]).*$/, '$1')) + tlyric.push(tlrc) + return lrc + }) + tlyric = tlyric.join('\n') + return { + lyric, + tlyric, + } +} + export default { failTime: 0, expireTime: 60 * 1000 * 1000, @@ -13,7 +30,10 @@ export default { requestObj.cancelHttp = tryRequestObj.cancelHttp.bind(tryRequestObj) return tryRequestObj.promise } - return body + return url.endsWith('.xtrc') ? parseLyric(body) : { + lyric: body, + tlyric: '', + } }) return requestObj }, @@ -27,7 +47,10 @@ export default { }, }, function(err, resp, body) { if (err || resp.statusCode !== 200) return this.getLyricFile(url, ++retryNum).then(resolve).catch(reject) - return resolve(body) + return resolve(url.endsWith('.xtrc') ? parseLyric(body) : { + lyric: body, + tlyric: '', + }) }) }) }, @@ -47,8 +70,12 @@ export default { return tryRequestObj.promise } if (!body.result.data.lyrics.length) return Promise.reject(new Error('未找到歌词')) - let lrc = body.result.data.lyrics.find(lyric => /\.lrc$/.test(lyric.lyricUrl)) - return lrc ? lrc.content : Promise.reject(new Error('未找到歌词')) + let lrc = body.result.data.lyrics.find(lyric => /\.(trc|lrc)$/.test(lyric.lyricUrl)) + return lrc + ? lrc.lyricUrl.endsWith('.trc') + ? parseLyric(lrc.content) + : { lyric: lrc.content, tlyric: '' } + : Promise.reject(new Error('未找到歌词')) }) return requestObj }, @@ -74,7 +101,7 @@ export default { return requestObj }, getLyric(songInfo) { - if (songInfo.lrcUrl && /\.lrc$/.test(songInfo.lrcUrl)) return this.getLyricFile_1(songInfo.lrcUrl) + if (songInfo.lrcUrl && /\.(xtrc|lrc)$/.test(songInfo.lrcUrl)) return this.getLyricFile_1(songInfo.lrcUrl) return Date.now() - this.failTime > this.expireTime ? this.getLyricUrl_1(songInfo) : this.getLyricUrl_2(songInfo) }, } diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index b135728a..8a12effa 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -58,6 +58,10 @@ div.scroll(:class="$style.setting") div material-checkbox(:id="`setting_player_togglePlay_${item.value}`" :class="$style.gapLeft" :value="item.value" :key="item.value" v-model="current_setting.player.togglePlayMethod" v-for="item in togglePlayMethods" :label="item.name") + dd + h3 {{$t('view.setting.play_lyric_transition')}} + div + material-checkbox(id="setting_player_lyric_transition" v-model="current_setting.player.isShowLyricTransition" :label="$t('view.setting.is_show')") dd(:title="$t('view.setting.play_quality_title')") h3 {{$t('view.setting.play_quality')}} div From b453a8934fb139ef66f1d11b8a4693ad8e3717f0 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 24 Aug 2020 00:44:55 +0800 Subject: [PATCH 17/30] =?UTF-8?q?=E6=96=B0=E5=A2=9E`=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=8A=A8=E7=94=BB`=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- publish/changeLog.md | 5 +++-- src/common/defaultSetting.js | 3 ++- src/renderer-lyric/App.vue | 1 - src/renderer/App.vue | 19 +++++++++++++++++++ src/renderer/components/core/PlayerDetail.vue | 2 +- src/renderer/lang/en-us/view/setting.json | 1 + src/renderer/lang/zh-cn/view/setting.json | 1 + src/renderer/lang/zh-tw/view/setting.json | 1 + src/renderer/utils/music/xm/leaderboard.js | 2 +- src/renderer/views/Setting.vue | 6 ++++++ 11 files changed, 36 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index f5b43d05..6ef14ab3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "1.0.1", + "version": "1.1.0", "description": "一个免费的音乐下载助手", "main": "./dist/electron/main.js", "productName": "lx-music-desktop", diff --git a/publish/changeLog.md b/publish/changeLog.md index cb2a418f..ea930f10 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,8 +1,9 @@ ### 新增 -- 在歌单详情界面新增播放当前歌单按钮、收藏歌单按钮 +- 在歌单详情界面新增播放当前歌单按钮、收藏歌单按钮,注:播放歌单不会将歌曲添加到试听列表 - 新增`不允许将歌词窗口拖出主屏幕之外`的设置项,默认开启,在连接多个屏幕时想要拖动到其他屏幕时可关闭此设置 - 新增`显示歌词翻译`设置,默认开启,仅支持某些平台,注:无论该设置是否开启,嵌入或下载歌词时都不会带上翻译 +- 新增`显示切换动画`设置,默认开启,关闭时将基本禁用软件内的所有切换动画 ### 修复 @@ -22,4 +23,4 @@ ### 其他 -- 个性electron到 9.2.1 +- 更新electron到 9.2.1 diff --git a/src/common/defaultSetting.js b/src/common/defaultSetting.js index 37163597..72c9b3c0 100644 --- a/src/common/defaultSetting.js +++ b/src/common/defaultSetting.js @@ -3,7 +3,7 @@ const os = require('os') const { isMac } = require('./utils') const defaultSetting = { - version: '1.0.36', + version: '1.0.38', player: { togglePlayMethod: 'listLoop', highQuality: false, @@ -88,6 +88,7 @@ const defaultSetting = { sourceId: 'kw', apiSource: 'temp', sourceNameType: 'alias', + isShowAnimation: true, randomAnimate: true, ignoreVersion: null, isAgreePact: false, diff --git a/src/renderer-lyric/App.vue b/src/renderer-lyric/App.vue index a734428f..d77e9c38 100644 --- a/src/renderer-lyric/App.vue +++ b/src/renderer-lyric/App.vue @@ -119,7 +119,6 @@ export default { }, methods: { handleUpdateConfig({ config, languageId, isShowLyricTransition }) { - console.log(isShowLyricTransition) this.lrcConfig = config this.isShowLyricTransition = isShowLyricTransition if (this.$i18n.locale !== languageId && languageId != null) this.$i18n.locale = languageId diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 35b2fdcd..5defe753 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -135,6 +135,20 @@ export default { 'windowSizeActive.fontSize'(n) { document.documentElement.style.fontSize = n }, + 'setting.isShowAnimation': { + handler(n) { + if (n) { + if (document.body.classList.contains('disableAnimation')) { + document.body.classList.remove('disableAnimation') + } + } else { + if (!document.body.classList.contains('disableAnimation')) { + document.body.classList.add('disableAnimation') + } + } + }, + immediate: true, + }, }, methods: { ...mapActions(['getVersionInfo']), @@ -354,6 +368,11 @@ body { box-sizing: border-box; } +.disableAnimation * { + transition: none !important; + animation: none !important; +} + .transparent { padding: @shadow-app; #container { diff --git a/src/renderer/components/core/PlayerDetail.vue b/src/renderer/components/core/PlayerDetail.vue index 91773087..211fc528 100644 --- a/src/renderer/components/core/PlayerDetail.vue +++ b/src/renderer/components/core/PlayerDetail.vue @@ -526,7 +526,7 @@ export default { padding: 8px 0; line-height: 1.2; overflow-wrap: break-word; - transition: @transition-theme; + transition: @transition-theme !important; transition-property: color, font-size; } } diff --git a/src/renderer/lang/en-us/view/setting.json b/src/renderer/lang/en-us/view/setting.json index ec8ab69a..0b6a455f 100644 --- a/src/renderer/lang/en-us/view/setting.json +++ b/src/renderer/lang/en-us/view/setting.json @@ -1,6 +1,7 @@ { "basic": "General", "basic_theme": "Theme", + "basic_show_animation": "Show switching animation", "basic_animation_title": "Animation effect of the pop-up layer", "basic_animation": "Random pop-up animation", "basic_source_title": "Choose a music source", diff --git a/src/renderer/lang/zh-cn/view/setting.json b/src/renderer/lang/zh-cn/view/setting.json index d84c9073..8d4e2f80 100644 --- a/src/renderer/lang/zh-cn/view/setting.json +++ b/src/renderer/lang/zh-cn/view/setting.json @@ -3,6 +3,7 @@ "basic_theme": "主题颜色", "basic_animation_title": "弹出层的动画效果", "basic_animation": "弹出层随机动画", + "basic_show_animation": "显示切换动画", "basic_source_title": "选择音乐来源", "basic_source_test": "测试接口(几乎软件的所有功能都可用)", "basic_source_temp": "临时接口(软件的某些功能不可用,建议测试接口不可用再使用本接口)", diff --git a/src/renderer/lang/zh-tw/view/setting.json b/src/renderer/lang/zh-tw/view/setting.json index 9701fa8e..f5eecd1e 100644 --- a/src/renderer/lang/zh-tw/view/setting.json +++ b/src/renderer/lang/zh-tw/view/setting.json @@ -3,6 +3,7 @@ "basic_theme": "主題顏色", "basic_animation_title": "彈出層的動畫效果", "basic_animation": "彈出層隨機動畫", + "basic_show_animation": "顯示切換動畫", "basic_source_title": "選擇音樂來源", "basic_source_test": "測試接口(幾乎軟件的所有功能都可用)", "basic_source_temp": "臨時接口(軟件的某些功能不可用,建議測試接口不可用再使用本接口)", diff --git a/src/renderer/utils/music/xm/leaderboard.js b/src/renderer/utils/music/xm/leaderboard.js index fa28b59f..34dca4b1 100644 --- a/src/renderer/utils/music/xm/leaderboard.js +++ b/src/renderer/utils/music/xm/leaderboard.js @@ -78,7 +78,7 @@ export default { return arr.join('、') }, filterData(rawList) { - console.log(rawList) + // console.log(rawList) let ids = new Set() const list = [] rawList.forEach(songData => { diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index 8a12effa..3e64b2c5 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -10,6 +10,11 @@ div.scroll(:class="$style.setting") span label {{$t('store.state.theme_' + theme.class)}} + dd + h3 {{$t('view.setting.basic_show_animation')}} + div + material-checkbox(id="setting_show_animate" v-model="current_setting.isShowAnimation" :label="$t('view.setting.is_show')") + dd(:title="$t('view.setting.basic_animation_title')") h3 {{$t('view.setting.basic_animation')}} div @@ -454,6 +459,7 @@ export default { langId: 'cns', themeId: 0, sourceId: 0, + isShowAnimation: true, randomAnimate: true, isAgreePact: false, controlBtnPosition: 'left', From 86478c0268bc450243d5fb880af660f8a881a04b Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 29 Aug 2020 14:44:37 +0800 Subject: [PATCH 18/30] =?UTF-8?q?=E6=9B=B4=E6=96=B0electron=E5=88=B0=2010.?= =?UTF-8?q?1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- package-lock.json | 53 ++++++++------- package.json | 9 ++- publish/changeLog.md | 2 +- src/common/ipcNames.js | 8 +++ src/common/utils.js | 2 +- src/main/index.js | 6 +- .../{setAppSetting.js => appSetting.js} | 4 +- .../{getCacheSize.js => cache.js} | 6 +- src/main/rendererEvents/clearCache.js | 8 --- src/main/rendererEvents/data.js | 12 ++++ src/main/rendererEvents/hotKey.js | 12 +++- src/main/rendererEvents/index.js | 7 +- src/main/rendererEvents/playList.js | 23 +++++++ src/renderer/App.vue | 66 ++++++++++++++----- src/renderer/event/index.js | 19 +++--- src/renderer/main.js | 43 ++++++++++-- src/renderer/store/modules/search.js | 15 ++--- src/renderer/store/mutations.js | 6 +- src/renderer/store/state.js | 62 +---------------- src/renderer/utils/index.js | 20 ++++++ 21 files changed, 228 insertions(+), 157 deletions(-) rename src/main/rendererEvents/{setAppSetting.js => appSetting.js} (51%) rename src/main/rendererEvents/{getCacheSize.js => cache.js} (59%) delete mode 100644 src/main/rendererEvents/clearCache.js create mode 100644 src/main/rendererEvents/data.js create mode 100644 src/main/rendererEvents/playList.js diff --git a/README.md b/README.md index f57bf9a6..91e1f1c2 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ 所用技术栈: -- Electron 9 +- Electron 10 - Vue 2 已支持的平台: diff --git a/package-lock.json b/package-lock.json index ae9dd40a..798c87f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "1.0.1", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5301,9 +5301,9 @@ }, "dependencies": { "caniuse-lite": { - "version": "1.0.30001112", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz", - "integrity": "sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q==", + "version": "1.0.30001119", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001119.tgz", + "integrity": "sha512-Hpwa4obv7EGP+TjkCh/wVvbtNJewxmtg4yVJBLFnxo35vbPapBr138bUWENkb5j5L9JZJ9RXLn4OrXRG/cecPQ==", "dev": true } } @@ -5954,12 +5954,6 @@ } } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -7543,9 +7537,9 @@ } }, "electron": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-9.2.1.tgz", - "integrity": "sha512-ZsetaQjXB8+9/EFW1FnfK4ukpkwXCxMEaiKiUZhZ0ZLFlLnFCpe0Bg4vdDf7e4boWGcnlgN1jAJpBw7w0eXuqA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-10.1.0.tgz", + "integrity": "sha512-DyS6WhQ59+ZXQsI1EkpsYkOXFt0Xbp+mbxPTJS9A7O21r3JDzaTC+1Jxz7g6J+Sbi9Y7UFdRs0tn/vqhHJx2gA==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -7733,9 +7727,9 @@ } }, "electron-to-chromium": { - "version": "1.3.526", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz", - "integrity": "sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg==", + "version": "1.3.554", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.554.tgz", + "integrity": "sha512-Vtz2dVH5nMtKK4brahmgScwFS8PBnpA4VObYXtlsqN8ZpT9IFelv0Rpflc1+NIILjGVaj6vEiXQbhrs3Pl8O7g==", "dev": true }, "electron-updater": { @@ -11525,6 +11519,12 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "klona": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.3.tgz", + "integrity": "sha512-CgPOT3ZadDpXxKcfV56lEQ9OQSZ42Mk26gnozI+uN/k39vzD8toUhRQoqsX0m9Q3eMPEfsLWmtyUpK/yqST4yg==", + "dev": true + }, "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -11614,21 +11614,20 @@ } }, "less-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", - "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.0.0.tgz", + "integrity": "sha512-fAgAaZHQJdX/woSMyNhvJt6bQUhpOtKODfuhk5AqgVPo6FVD3PezwHIZEtNPr4aumYoNQ1KBLnhynGX2XE/Lrg==", "dev": true, "requires": { - "clone": "^2.1.2", - "less": "^3.11.3", + "klona": "^2.0.3", "loader-utils": "^2.0.0", "schema-utils": "^2.7.0" }, "dependencies": { "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -12054,9 +12053,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", - "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.0.tgz", + "integrity": "sha512-dVWGuWJlQw2lZxsxBI3hOsoxg1k3DruLR0foHQLSkQMfk+qLJbv9dUk8fjmjWQKN9ef2n54ehA2FjClAsQhrWQ==", "dev": true, "requires": { "loader-utils": "^1.1.0", diff --git a/package.json b/package.json index 6ef14ab3..91ccf772 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src" }, "browserslist": [ - "Electron 9.2.1" + "Electron 10.0.1" ], "engines": { "node": ">= 12" @@ -169,7 +169,6 @@ "babel-loader": "^8.1.0", "babel-minify-webpack-plugin": "^0.3.1", "babel-preset-minify": "^0.5.1", - "browserslist": "^4.14.0", "cfonts": "^2.8.6", "chalk": "^4.1.0", "changelog-parser": "^2.8.0", @@ -178,7 +177,7 @@ "cross-env": "^7.0.2", "css-loader": "^3.6.0", "del": "^5.1.0", - "electron": "^9.2.1", + "electron": "^10.1.0", "electron-builder": "^22.8.0", "electron-debug": "^3.1.0", "electron-devtools-installer": "^3.1.1", @@ -195,9 +194,9 @@ "friendly-errors-webpack-plugin": "^1.7.0", "html-webpack-plugin": "^4.3.0", "less": "^3.12.2", - "less-loader": "^6.2.0", + "less-loader": "^7.0.0", "markdown-it": "^11.0.0", - "mini-css-extract-plugin": "^0.10.0", + "mini-css-extract-plugin": "^0.11.0", "optimize-css-assets-webpack-plugin": "^5.0.3", "postcss-loader": "^3.0.0", "postcss-pxtorem": "^5.1.1", diff --git a/publish/changeLog.md b/publish/changeLog.md index ea930f10..476e8a04 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -23,4 +23,4 @@ ### 其他 -- 更新electron到 9.2.1 +- 更新electron到 10.1.0 diff --git a/src/common/ipcNames.js b/src/common/ipcNames.js index f461a435..9aac43ce 100644 --- a/src/common/ipcNames.js +++ b/src/common/ipcNames.js @@ -43,6 +43,14 @@ const names = { hide_toggle: 'hide_toggle', get_data_path: 'get_data_path', show_dialog: 'show_dialog', + + get_setting: 'get_setting', + get_playlist: 'get_playlist', + save_playlist: 'save_playlist', + get_data: 'get_data', + set_data: 'set_data', + save_data: 'save_data', + get_hot_key: 'get_hot_key', }, winLyric: { close: 'close', diff --git a/src/common/utils.js b/src/common/utils.js index 94cf70b5..47fee60c 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -188,7 +188,7 @@ exports.initSetting = () => { // newSetting.controlBtnPosition = 'right' electronStore_config.set('version', settingVersion) electronStore_config.set('setting', newSetting) - return newSetting + return { version: settingVersion, setting: newSetting } } /** diff --git a/src/main/index.js b/src/main/index.js index 40c30ae2..ec5d955a 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -35,7 +35,7 @@ app.commandLine.appendSwitch('wm-window-animations-disabled') // https://github.com/electron/electron/issues/18397 // 开发模式下为true时 多次引入native模块会导致渲染进程卡死 // https://github.com/electron/electron/issues/22791 -app.allowRendererProcessReuse = !isDev +// app.allowRendererProcessReuse = !isDev app.on('web-contents-created', (event, contents) => { @@ -124,7 +124,9 @@ global.appHotKey = { } function init() { - global.appSetting = initSetting() + const info = initSetting() + global.appSetting = info.setting + global.appSettingVersion = info.version global.appHotKey.config = initHotKey() global.lx_event.common.initSetting() global.lx_event.hotKey.init() diff --git a/src/main/rendererEvents/setAppSetting.js b/src/main/rendererEvents/appSetting.js similarity index 51% rename from src/main/rendererEvents/setAppSetting.js rename to src/main/rendererEvents/appSetting.js index c66bc58b..415da098 100644 --- a/src/main/rendererEvents/setAppSetting.js +++ b/src/main/rendererEvents/appSetting.js @@ -1,7 +1,9 @@ const { mainWindow: MAIN_WINDOW_EVENT_NAME } = require('../events/_name') -const { mainOn, NAMES: { mainWindow: ipcMainWindowNames } } = require('../../common/ipc') +const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc') mainOn(ipcMainWindowNames.set_app_setting, (event, config) => { if (!config) return global.lx_event.common.setAppConfig(config, MAIN_WINDOW_EVENT_NAME.name) }) + +mainHandle(ipcMainWindowNames.get_setting, async() => ({ setting: global.appSetting, version: global.appSettingVersion })) diff --git a/src/main/rendererEvents/getCacheSize.js b/src/main/rendererEvents/cache.js similarity index 59% rename from src/main/rendererEvents/getCacheSize.js rename to src/main/rendererEvents/cache.js index 5c990563..ef6441eb 100644 --- a/src/main/rendererEvents/getCacheSize.js +++ b/src/main/rendererEvents/cache.js @@ -1,7 +1,11 @@ const { mainHandle, NAMES: { mainWindow: ipcMainWindowNames } } = require('../../common/ipc') +mainHandle(ipcMainWindowNames.clear_cache, async(event, options) => { + if (!global.modules.mainWindow) throw new Error('mainWindow is undefined') + return global.modules.mainWindow.webContents.session.clearCache() +}) + mainHandle(ipcMainWindowNames.get_cache_size, async(event, options) => { if (!global.modules.mainWindow) throw new Error('mainWindow is undefined') return global.modules.mainWindow.webContents.session.getCacheSize() }) - diff --git a/src/main/rendererEvents/clearCache.js b/src/main/rendererEvents/clearCache.js deleted file mode 100644 index 8e5dc91d..00000000 --- a/src/main/rendererEvents/clearCache.js +++ /dev/null @@ -1,8 +0,0 @@ -const { mainHandle, NAMES: { mainWindow: ipcMainWindowNames } } = require('../../common/ipc') - -mainHandle(ipcMainWindowNames.clear_cache, async(event, options) => { - if (!global.modules.mainWindow) throw new Error('mainWindow is undefined') - return global.modules.mainWindow.webContents.session.clearCache() -}) - - diff --git a/src/main/rendererEvents/data.js b/src/main/rendererEvents/data.js new file mode 100644 index 00000000..18cdf81a --- /dev/null +++ b/src/main/rendererEvents/data.js @@ -0,0 +1,12 @@ +const Store = require('electron-store') +const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc') + + +const electronStore_data = new Store({ + name: 'data', +}) + +mainHandle(ipcMainWindowNames.get_data, async(event, path) => electronStore_data.get(path)) + + +mainOn(ipcMainWindowNames.save_data, (event, { path, data }) => electronStore_data.get(path, data)) diff --git a/src/main/rendererEvents/hotKey.js b/src/main/rendererEvents/hotKey.js index 30c0022b..487234c9 100644 --- a/src/main/rendererEvents/hotKey.js +++ b/src/main/rendererEvents/hotKey.js @@ -1,5 +1,10 @@ -const { mainSend, NAMES: { mainWindow: ipcMainWindowNames }, mainOn } = require('../../common/ipc') +const Store = require('electron-store') +const { mainSend, NAMES: { mainWindow: ipcMainWindowNames }, mainOn, mainHandle } = require('../../common/ipc') const { mainWindow: MAIN_WINDOW_EVENT_NAME, hotKey: HOT_KEY_EVENT_NAME } = require('../events/_name') + +const electronStore_hotKey = new Store({ + name: 'hotKey', +}) // const { registerHotkey, unRegisterHotkey } = require('../modules/hotKey/utils') // mainHandle(ipcMainWindowNames.set_hot_key_config, async(event, { action, data }) => { @@ -14,6 +19,11 @@ const { mainWindow: MAIN_WINDOW_EVENT_NAME, hotKey: HOT_KEY_EVENT_NAME } = requi // } // }) +mainHandle(ipcMainWindowNames.get_hot_key, async() => ({ + local: electronStore_hotKey.get('local'), + global: electronStore_hotKey.get('global'), +})) + mainOn(ipcMainWindowNames.quit, () => global.lx_event.mainWindow.quit()) mainOn(ipcMainWindowNames.min_toggle, () => global.lx_event.mainWindow.toggleMinimize()) mainOn(ipcMainWindowNames.hide_toggle, () => global.lx_event.mainWindow.toggleHide()) diff --git a/src/main/rendererEvents/index.js b/src/main/rendererEvents/index.js index 93f71df8..395d0fca 100644 --- a/src/main/rendererEvents/index.js +++ b/src/main/rendererEvents/index.js @@ -7,15 +7,16 @@ require('./musicMeta') require('./selectDir') require('./setWindowSize') require('./showSaveDialog') -require('./clearCache') -require('./getCacheSize') +require('./cache') require('./setIgnoreMouseEvent') require('./getEnvParams') -require('./setAppSetting') +require('./appSetting') require('./setLyricInfo') require('./hotKey') require('./getDataPath') require('./showDialog') +require('./playList') +require('./data') require('./xm_verify') diff --git a/src/main/rendererEvents/playList.js b/src/main/rendererEvents/playList.js new file mode 100644 index 00000000..32d15aa1 --- /dev/null +++ b/src/main/rendererEvents/playList.js @@ -0,0 +1,23 @@ +const Store = require('electron-store') +const { mainOn, NAMES: { mainWindow: ipcMainWindowNames }, mainHandle } = require('../../common/ipc') + + +const electronStore_list = new Store({ + name: 'playList', +}) + +mainHandle(ipcMainWindowNames.get_playlist, async(event, isIgnoredError = false) => { + let electronStore_list = new Store({ + name: 'playList', + clearInvalidConfig: !isIgnoredError, + }) + + return { + defaultList: electronStore_list.get('defaultList'), + loveList: electronStore_list.get('loveList'), + userList: electronStore_list.get('userList'), + downloadList: electronStore_list.get('downloadList'), + } +}) + +mainOn(ipcMainWindowNames.save_playlist, (event, { type, data }) => electronStore_list.set(type, data)) diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 5defe753..7b94dfbd 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -27,7 +27,7 @@ import { mapMutations, mapGetters, mapActions } from 'vuex' import { rendererOn, rendererSend, rendererInvoke, NAMES } from '../common/ipc' import { isLinux } from '../common/utils' import music from './utils/music' -import { throttle, openUrl, compareVer } from './utils' +import { throttle, openUrl, compareVer, getPlayList } from './utils' import { base as eventBaseName } from './event/names' window.ELECTRON_DISABLE_SECURITY_WARNINGS = process.env.ELECTRON_DISABLE_SECURITY_WARNINGS @@ -70,19 +70,34 @@ export default { }, created() { this.saveDefaultList = throttle(n => { - window.electronStore_list.set('defaultList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'defaultList', + data: n, + }) }, 500) this.saveLoveList = throttle(n => { - window.electronStore_list.set('loveList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'loveList', + data: n, + }) }, 500) this.saveUserList = throttle(n => { - window.electronStore_list.set('userList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'userList', + data: n, + }) }, 500) this.saveDownloadList = throttle(n => { - window.electronStore_list.set('downloadList', n) + rendererSend(NAMES.mainWindow.save_playlist, { + type: 'downloadList', + data: n, + }) }, 1000) this.saveSearchHistoryList = throttle(n => { - window.electronStore_data.set('searchHistoryList', n) + rendererSend(NAMES.mainWindow.set_data, { + path: 'searchHistoryList', + data: n, + }) }, 500) }, mounted() { @@ -155,6 +170,9 @@ export default { ...mapMutations(['setNewVersion', 'setVersionModalVisible', 'setDownloadProgress', 'setSetting', 'setDesktopLyricConfig']), ...mapMutations('list', ['initList']), ...mapMutations('download', ['updateDownloadList']), + ...mapMutations('search', { + setSearchHistoryList: 'setHistory', + }), init() { document.documentElement.style.fontSize = this.windowSizeActive.fontSize @@ -243,19 +261,23 @@ export default { }, initData() { // 初始化数据 - this.initPlayList() // 初始化播放列表 - this.initDownloadList() // 初始化下载列表 + this.initLocalList() // 初始化播放列表 + // this.initDownloadList() // 初始化下载列表 + this.initSearchHistoryList() // 初始化搜索历史列表 }, - initPlayList() { - let defaultList = window.electronStore_list.get('defaultList') || this.defaultList - let loveList = window.electronStore_list.get('loveList') || this.loveList - let userList = window.electronStore_list.get('userList') || this.userList - if (!defaultList.list) defaultList.list = [] - if (!loveList.list) loveList.list = [] - this.initList({ defaultList, loveList, userList }) + initLocalList() { + getPlayList().then(({ defaultList, loveList, userList, downloadList }) => { + if (!defaultList) defaultList = this.defaultList + if (!loveList) loveList = this.loveList + if (!userList) userList = this.userList + + if (!defaultList.list) defaultList.list = [] + if (!loveList.list) loveList.list = [] + this.initList({ defaultList, loveList, userList }) + this.initDownloadList(downloadList) // 初始化下载列表 + }) }, - initDownloadList() { - let downloadList = window.electronStore_list.get('downloadList') + initDownloadList(downloadList) { if (downloadList) { downloadList.forEach(item => { if (item.status == this.downloadStatus.RUN || item.status == this.downloadStatus.WAITING) { @@ -266,6 +288,16 @@ export default { this.updateDownloadList(downloadList) } }, + initSearchHistoryList() { + rendererInvoke(NAMES.mainWindow.get_data, 'searchHistoryList').then(historyList => { + if (historyList == null) { + historyList = [] + rendererInvoke(NAMES.mainWindow.set_data, { path: 'searchHistoryList', data: historyList }) + } else { + this.setSearchHistoryList(historyList) + } + }) + }, showUpdateModal() { (this.version.newVersion && this.version.newVersion.history ? Promise.resolve(this.version.newVersion) diff --git a/src/renderer/event/index.js b/src/renderer/event/index.js index 495d4085..d818b955 100644 --- a/src/renderer/event/index.js +++ b/src/renderer/event/index.js @@ -1,21 +1,22 @@ import Vue from 'vue' import keyBind from '../utils/keyBind' -import { rendererOn, rendererSend, NAMES } from '../../common/ipc' +import { rendererOn, rendererSend, NAMES, rendererInvoke } from '../../common/ipc' import { base as baseName } from './names' -import Store from 'electron-store' import { common as hotKeyNamesCommon } from '../../common/hotKey' const eventHub = window.eventHub = new Vue() -const electronStore_hotKey = window.electronStore_hotKey = new Store({ - name: 'hotKey', -}) - window.isEditingHotKey = false -const appHotKeyConfig = window.appHotKeyConfig = { - local: electronStore_hotKey.get('local'), - global: electronStore_hotKey.get('global'), +let appHotKeyConfig = { + local: {}, + global: {}, } +rendererInvoke(NAMES.mainWindow.get_hot_key).then(({ local, global }) => { + appHotKeyConfig = window.appHotKeyConfig = { + local, + global, + } +}) eventHub.$on(baseName.bindKey, () => { keyBind.bindKey((key, type, event, keys) => { diff --git a/src/renderer/main.js b/src/renderer/main.js index 18898ec9..bac4f660 100644 --- a/src/renderer/main.js +++ b/src/renderer/main.js @@ -16,14 +16,45 @@ import store from './store' import '../common/error' +import { getSetting } from './utils' +import languageList from '@/lang/languages.json' +import { rendererSend, NAMES } from '../common/ipc' + sync(store, router) Vue.config.productionTip = false -new Vue({ - router, - store, - i18n, - el: '#root', - render: h => h(App), + +getSetting().then(({ setting, version }) => { + // Set language automatically + if (!window.i18n.availableLocales.includes(setting.langId)) { + let langId = null + let locale = window.navigator.language.toLocaleLowerCase() + if (window.i18n.availableLocales.includes(locale)) { + langId = locale + } else { + for (const lang of languageList) { + if (lang.alternate == locale) { + langId = lang.locale + break + } + } + if (langId == null) langId = 'en-us' + } + setting.langId = langId + rendererSend(NAMES.mainWindow.set_app_setting, setting) + console.log('Set lang', setting.langId) + } + window.i18n.locale = setting.langId + store.commit('setSetting', setting) + store.commit('setSettingVersion', version) + + new Vue({ + router, + store, + i18n, + el: '#root', + render: h => h(App), + }) }) + diff --git a/src/renderer/store/modules/search.js b/src/renderer/store/modules/search.js index f8b06b80..ff3a3e2b 100644 --- a/src/renderer/store/modules/search.js +++ b/src/renderer/store/modules/search.js @@ -1,15 +1,5 @@ -import Store from 'electron-store' import music from '../../utils/music' -const electronStore_data = window.electronStore_data = new Store({ - name: 'data', -}) -let historyList = electronStore_data.get('searchHistoryList') -if (historyList == null) { - historyList = [] - electronStore_data.set('searchHistoryList', historyList) -} - const sources = [] const sourceList = {} const sourceMaxPage = {} @@ -103,7 +93,7 @@ const state = { allPage: 1, total: 0, sourceMaxPage, - historyList, + historyList: [], } // getters @@ -211,6 +201,9 @@ const mutations = { clearHistory(state) { state.historyList = [] }, + setHistory(state, list) { + state.historyList = list + }, } export default { diff --git a/src/renderer/store/mutations.js b/src/renderer/store/mutations.js index 1d9648b4..418c7a4e 100644 --- a/src/renderer/store/mutations.js +++ b/src/renderer/store/mutations.js @@ -9,12 +9,12 @@ export default { setSetting(state, val) { state.setting = val }, - setAgreePact(state) { - state.setting.isAgreePact = true - }, setSettingVersion(state, val) { state.settingVersion = val }, + setAgreePact(state) { + state.setting.isAgreePact = true + }, setLeaderboard(state, { tabId, source }) { if (tabId != null) state.setting.leaderboard.tabId = tabId if (source != null) state.setting.leaderboard.source = source diff --git a/src/renderer/store/state.js b/src/renderer/store/state.js index 23a968c5..96b7ad03 100644 --- a/src/renderer/store/state.js +++ b/src/renderer/store/state.js @@ -1,67 +1,9 @@ - // const isDev = process.env.NODE_ENV === 'development' -import Store from 'electron-store' import { windowSizeList } from '../../common/config' import { version } from '../../../package.json' -import { rendererSend, rendererInvoke, NAMES } from '../../common/ipc' -import languageList from '@/lang/languages.json' -import path from 'path' -import { openDirInExplorer } from '../utils' - - -const electronStore_config = window.electronStore_config = new Store({ - name: 'config', -}) -let setting = electronStore_config.get('setting') -let settingVersion = electronStore_config.get('version') process.versions.app = version -// Set language automatically -if (!window.i18n.availableLocales.includes(setting.langId)) { - let langId = null - let locale = window.navigator.language.toLocaleLowerCase() - if (window.i18n.availableLocales.includes(locale)) { - langId = locale - } else { - for (const lang of languageList) { - if (lang.alternate == locale) { - langId = lang.locale - break - } - } - if (langId == null) langId = 'en-us' - } - setting.langId = langId - electronStore_config.set('setting', setting) - rendererSend(NAMES.mainWindow.set_app_setting, setting) - console.log('Set lang', setting.langId) -} - -window.i18n.locale = setting.langId - -try { - window.electronStore_list = new Store({ - name: 'playList', - clearInvalidConfig: false, - }) -} catch (error) { - rendererInvoke(NAMES.mainWindow.get_data_path).then(dataPath => { - let filePath = path.join(dataPath, 'playList.json.bak') - rendererInvoke(NAMES.mainWindow.show_dialog, { - type: 'error', - message: window.i18n.t('store.state.load_list_file_error_title'), - detail: window.i18n.t('store.state.load_list_file_error_detail', { - path: filePath, - detail: error.message, - }), - }).then(() => openDirInExplorer(filePath)) - }) - window.electronStore_list = new Store({ - name: 'playList', - }) -} - export default { themes: [ @@ -144,8 +86,8 @@ export default { downloadProgress: null, }, userInfo: null, - setting, - settingVersion, + setting: null, + settingVersion: null, windowSizeList, } diff --git a/src/renderer/utils/index.js b/src/renderer/utils/index.js index d9faabdd..3b30ed43 100644 --- a/src/renderer/utils/index.js +++ b/src/renderer/utils/index.js @@ -1,4 +1,5 @@ import fs from 'fs' +import path from 'path' import { shell, clipboard } from 'electron' import crypto from 'crypto' import { rendererSend, rendererInvoke, NAMES } from '../../common/ipc' @@ -341,3 +342,22 @@ export const getProxyInfo = () => window.globalObj.proxy.enable export const assertApiSupport = source => window.globalObj.qualityList[source] != undefined + +export const getSetting = () => rendererInvoke(NAMES.mainWindow.get_setting) +export const saveSetting = () => rendererInvoke(NAMES.mainWindow.set_app_setting) + +export const getPlayList = () => rendererInvoke(NAMES.mainWindow.get_playlist).catch(error => { + rendererInvoke(NAMES.mainWindow.get_data_path).then(dataPath => { + let filePath = path.join(dataPath, 'playList.json.bak') + rendererInvoke(NAMES.mainWindow.show_dialog, { + type: 'error', + message: window.i18n.t('store.state.load_list_file_error_title'), + detail: window.i18n.t('store.state.load_list_file_error_detail', { + path: filePath, + detail: error.message, + }), + }).then(() => openDirInExplorer(filePath)) + }) + return rendererInvoke(NAMES.mainWindow.get_playlist, true) +}) + From 04c810e2921c3314012746bb12e8139efcbb11a7 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 30 Aug 2020 12:25:02 +0800 Subject: [PATCH 19/30] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=86=99=E5=85=A5=E6=9D=83=E9=99=90=E7=9A=84=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/renderer/store/modules/download.js | 23 ++++++++++++++--------- src/renderer/utils/download/Downloader.js | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 476e8a04..26c780e9 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -16,6 +16,7 @@ - 桌面歌词当前播放行改为上下居中 - 为区分静音状态,静音时音量条会变淡,调整音量条时将会取消静音 - 优化随机播放机制,现在通过`下一曲`切换歌曲时,直到播放完整个列表之前将不会再随机到之前播放过的歌曲,并且通过`上一曲`可以正确播放上一首歌曲 +- 当下载目录没有写入权限时将显示没有写入权限的提示 ### 移除 diff --git a/src/renderer/store/modules/download.js b/src/renderer/store/modules/download.js index 036a9f87..e62bbeac 100644 --- a/src/renderer/store/modules/download.js +++ b/src/renderer/store/modules/download.js @@ -218,13 +218,13 @@ const refreshUrl = function(commit, downloadInfo) { if (!dl) return dl.refreshUrl(result.url) dl.start().catch(err => { - commit('onError', downloadInfo) + commit('onError', { downloadInfo, errorMsg: err.message }) commit('setStatusText', { downloadInfo, text: err.message }) this.dispatch('download/startTask') }) }).catch(err => { // console.log(err) - commit('onError', downloadInfo) + commit('onError', { downloadInfo, errorMsg: err.message }) commit('setStatusText', { downloadInfo, text: err.message }) this.dispatch('download/startTask') }) @@ -299,7 +299,7 @@ const actions = { try { await checkPath(rootState.setting.download.savePath) } catch (error) { - commit('onError', downloadInfo) + commit('onError', { downloadInfo, errorMsg: error.message }) commit('setStatusText', '检查下载目录出错: ' + error.message) await dispatch('startTask') return @@ -324,9 +324,14 @@ const actions = { console.log('on complate') }, onError(err) { + // console.log(err) + if (err.code == 'EPERM') { + commit('onError', { downloadInfo, errorMsg: '歌曲下载目录没有写入权限,请尝试更改歌曲保存路径' }) + return + } // console.log(tryNum[downloadInfo.key]) if (++tryNum[downloadInfo.key] > 2) { - commit('onError', downloadInfo) + commit('onError', { downloadInfo, errorMsg: err.message }) dispatch('startTask') return } @@ -375,7 +380,7 @@ const actions = { dls[downloadInfo.key] = download(options) }).catch(err => { // console.log(err.message) - commit('onError', downloadInfo) + commit('onError', { downloadInfo, errorMsg: err.message }) commit('setStatusText', { downloadInfo, text: err.message }) dispatch('startTask') }) @@ -437,7 +442,7 @@ const actions = { try { await dl.start() } catch (error) { - commit('onError', downloadInfo) + commit('onError', { downloadInfo, errorMsg: error.message }) commit('setStatusText', error.message) await dispatch('startTask') } @@ -448,7 +453,7 @@ const actions = { startTasks(store, list) { if (isRuningActionTask) return isRuningActionTask = true - return startTasks(store, [...list]).finally(() => { + return startTasks(store, list.filter(item => !(item.isComplate || item.status == state.downloadStatus.RUN || item.status == state.downloadStatus.WAITING))).finally(() => { isRuningActionTask = false }) }, @@ -522,9 +527,9 @@ const mutations = { downloadInfo.status = state.downloadStatus.COMPLETED downloadInfo.statusText = '下载完成' }, - onError(state, downloadInfo) { + onError(state, { downloadInfo, errorMsg }) { downloadInfo.status = state.downloadStatus.ERROR - downloadInfo.statusText = '任务出错' + downloadInfo.statusText = errorMsg || '任务出错' }, onStart(state, downloadInfo) { downloadInfo.status = state.downloadStatus.RUN diff --git a/src/renderer/utils/download/Downloader.js b/src/renderer/utils/download/Downloader.js index bfe89ca2..1dc2e7fb 100644 --- a/src/renderer/utils/download/Downloader.js +++ b/src/renderer/utils/download/Downloader.js @@ -172,7 +172,7 @@ class Task extends EventEmitter { this.chunkInfo.startByte = 0 this.resumeLastChunk = null this.progress.downloaded = 0 - if (unlinkErr) this.__handleError(unlinkErr) + if (unlinkErr && unlinkErr.code !== 'ENOENT') this.__handleError(unlinkErr) }) }) } From 868da542aba35761d7767ac45fb0af7e697d819e Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sun, 30 Aug 2020 13:24:23 +0800 Subject: [PATCH 20/30] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BD=91=E7=9B=98?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- build-config/pack.js | 2 +- src/renderer/components/material/VersionModal.vue | 8 ++++---- src/renderer/views/Setting.vue | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 91e1f1c2..6e878627 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ 软件变化请查看:[更新日志](https://github.com/lyswhut/lx-music-desktop/blob/master/CHANGELOG.md)
软件下载请转到:[发布页面](https://github.com/lyswhut/lx-music-desktop/releases)
-或者到网盘下载(网盘内有MAC、windows版):`https://t-s.lanzous.com/b0bf2cfa/` 密码:`glqw`
+或者到网盘下载(网盘内有MAC、windows版):`https://www.lanzoux.com/b0bf2cfa/` 密码:`glqw`
使用常见问题请转至:[常见问题](https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md) ### 源码使用方法 diff --git a/build-config/pack.js b/build-config/pack.js index 1ff5470e..c956c3d1 100644 --- a/build-config/pack.js +++ b/build-config/pack.js @@ -14,7 +14,7 @@ const okayLog = chalk.bgGreen.white(' OKAY ') + ' ' function build() { - del.sync(['dist/electron', 'build']) + del.sync(['dist/electron/**', 'build/**']) const spinners = new Spinnies({ color: 'blue' }) spinners.add('main', { text: 'main building' }) diff --git a/src/renderer/components/material/VersionModal.vue b/src/renderer/components/material/VersionModal.vue index feaa7ab7..58a6fa79 100644 --- a/src/renderer/components/material/VersionModal.vue +++ b/src/renderer/components/material/VersionModal.vue @@ -46,7 +46,7 @@ material-modal(:show="version.showModal" @close="handleClose" v-if="version.newV | 你可以去  strong.hover.underline(@click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/releases')" title="点击打开") 软件发布页 |  或  - strong.hover.underline(@click="handleOpenUrl('https://www.lanzous.com/b906260/')" title="点击打开") 网盘 + strong.hover.underline(@click="handleOpenUrl('https://www.lanzoux.com/b0bf2cfa/')" title="点击打开") 网盘 | (密码: strong.hover(@click="handleCopy('glqw')" title="点击复制") glqw | ) 下载新版本, @@ -63,7 +63,7 @@ material-modal(:show="version.showModal" @close="handleClose" v-if="version.newV | 你可以去 material-btn(min @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/releases')" title="点击打开") 软件发布页 | 或 - material-btn(min @click="handleOpenUrl('https://www.lanzous.com/b906260/')" title="点击打开") 网盘 + material-btn(min @click="handleOpenUrl('https://www.lanzoux.com/b0bf2cfa/')" title="点击打开") 网盘 | (密码: strong.hover(@click="handleCopy('glqw')" title="点击复制") glqw | )下载新版本, @@ -84,7 +84,7 @@ material-modal(:show="version.showModal" @close="handleClose" v-if="version.newV | 检查方法:打开 material-btn(min @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/releases')" title="点击打开") 软件发布页 | 或 - material-btn(min @click="handleOpenUrl('https://www.lanzous.com/b906260/')" title="点击打开") 网盘 + material-btn(min @click="handleOpenUrl('https://www.lanzoux.com/b0bf2cfa/')" title="点击打开") 网盘 | (密码: strong.hover(@click="handleCopy('glqw')" title="点击复制") glqw | )查看它们的 @@ -117,7 +117,7 @@ material-modal(:show="version.showModal" @close="handleClose" v-if="version.newV | 手动更新可以去  strong.hover.underline(@click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop/releases')" title="点击打开") 软件发布页 |  或  - strong.hover.underline(@click="handleOpenUrl('https://www.lanzous.com/b906260/')" title="点击打开") 网盘 + strong.hover.underline(@click="handleOpenUrl('https://www.lanzoux.com/b0bf2cfa/')" title="点击打开") 网盘 | (密码: strong.hover(@click="handleCopy('glqw')" title="点击复制") glqw | ) 下载, diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index 3e64b2c5..dc39a734 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -239,7 +239,7 @@ div.scroll(:class="$style.setting") span.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop#readme')") https://github.com/lyswhut/lx-music-desktop p.small | 最新版网盘下载地址(网盘内有Windows、MAC版): - span.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://t-s.lanzous.com/b0bf2cfa')") 网盘地址 + span.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://www.lanzoux.com/b0bf2cfa/')") 网盘地址 |   密码: span.hover(:title="$t('view.setting.click_copy')" @click="clipboardWriteText('glqw')") glqw p.small From 9fa0700f7272082eee3090ad4a69f039f2fc08c7 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Wed, 2 Sep 2020 14:00:01 +0800 Subject: [PATCH 21/30] =?UTF-8?q?=E6=9B=B4=E6=96=B0css-loader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-config/css-loader.config.js | 2 +- .../renderer-lyric/webpack.config.base.js | 31 +++++++++ .../renderer-lyric/webpack.config.dev.js | 28 -------- .../renderer-lyric/webpack.config.prod.js | 31 --------- build-config/renderer/webpack.config.base.js | 31 +++++++++ build-config/renderer/webpack.config.dev.js | 28 -------- build-config/renderer/webpack.config.prod.js | 31 --------- build-config/utils.js | 66 +++++-------------- package-lock.json | 62 +++++++++++++---- package.json | 4 +- 10 files changed, 127 insertions(+), 187 deletions(-) diff --git a/build-config/css-loader.config.js b/build-config/css-loader.config.js index b6cb4288..9f2aa3d4 100644 --- a/build-config/css-loader.config.js +++ b/build-config/css-loader.config.js @@ -3,6 +3,6 @@ const isDev = process.env.NODE_ENV === 'development' module.exports = { modules: { localIdentName: isDev ? '[folder]-[name]--[local]--[hash:base64:5]' : '[hash:base64:5]', + exportLocalsConvention: 'camelCase', }, - localsConvention: 'camelCase', } diff --git a/build-config/renderer-lyric/webpack.config.base.js b/build-config/renderer-lyric/webpack.config.base.js index a74a2606..ed08fd5e 100644 --- a/build-config/renderer-lyric/webpack.config.base.js +++ b/build-config/renderer-lyric/webpack.config.base.js @@ -1,9 +1,12 @@ const path = require('path') const VueLoaderPlugin = require('vue-loader/lib/plugin') const HTMLPlugin = require('html-webpack-plugin') +const MiniCssExtractPlugin = require('mini-css-extract-plugin') const vueLoaderConfig = require('../vue-loader.config') +const { mergeCSSLoader } = require('../utils') +const isDev = process.env.NODE_ENV === 'development' module.exports = { target: 'electron-renderer', @@ -46,6 +49,28 @@ module.exports = { loader: 'babel-loader', exclude: /node_modules/, }, + { + test: /\.css$/, + oneOf: mergeCSSLoader(), + }, + { + test: /\.less$/, + oneOf: mergeCSSLoader({ + loader: 'less-loader', + options: { + sourceMap: true, + }, + }), + }, + { + test: /\.styl(:?us)?$/, + oneOf: mergeCSSLoader({ + loader: 'stylus-loader', + options: { + sourceMap: true, + }, + }), + }, { test: /\.pug$/, oneOf: [ @@ -98,5 +123,11 @@ module.exports = { __dirname, }), new VueLoaderPlugin(), + new MiniCssExtractPlugin({ + // Options similar to the same options in webpackOptions.output + // both options are optional + filename: isDev ? '[name].css' : '[name].[contenthash:8].css', + chunkFilename: isDev ? '[id].css' : '[id].[contenthash:8].css', + }), ], } diff --git a/build-config/renderer-lyric/webpack.config.dev.js b/build-config/renderer-lyric/webpack.config.dev.js index 5baf32fa..871afd3e 100644 --- a/build-config/renderer-lyric/webpack.config.dev.js +++ b/build-config/renderer-lyric/webpack.config.dev.js @@ -6,37 +6,9 @@ const { merge } = require('webpack-merge') const baseConfig = require('./webpack.config.base') -const { mergeCSSLoaderDev } = require('../utils') - module.exports = merge(baseConfig, { mode: 'development', devtool: 'eval-source-map', - module: { - rules: [ - { - test: /\.css$/, - oneOf: mergeCSSLoaderDev(), - }, - { - test: /\.less$/, - oneOf: mergeCSSLoaderDev({ - loader: 'less-loader', - options: { - sourceMap: true, - }, - }), - }, - { - test: /\.styl(:?us)?$/, - oneOf: mergeCSSLoaderDev({ - loader: 'stylus-loader', - options: { - sourceMap: true, - }, - }), - }, - ], - }, plugins: [ new webpack.HotModuleReplacementPlugin(), new webpack.NoEmitOnErrorsPlugin(), diff --git a/build-config/renderer-lyric/webpack.config.prod.js b/build-config/renderer-lyric/webpack.config.prod.js index 89986194..e151deac 100644 --- a/build-config/renderer-lyric/webpack.config.prod.js +++ b/build-config/renderer-lyric/webpack.config.prod.js @@ -1,6 +1,5 @@ const path = require('path') const webpack = require('webpack') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') const TerserPlugin = require('terser-webpack-plugin') const CopyWebpackPlugin = require('copy-webpack-plugin') @@ -8,7 +7,6 @@ const { merge } = require('webpack-merge') const baseConfig = require('./webpack.config.base') -const { mergeCSSLoaderProd } = require('../utils') const { dependencies } = require('../../package.json') let whiteListedModules = ['vue'] @@ -20,32 +18,6 @@ module.exports = merge(baseConfig, { externals: [ ...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)), ], - module: { - rules: [ - { - test: /\.css$/, - oneOf: mergeCSSLoaderProd(), - }, - { - test: /\.less$/, - oneOf: mergeCSSLoaderProd({ - loader: 'less-loader', - options: { - sourceMap: true, - }, - }), - }, - { - test: /\.styl(:?us)?$/, - oneOf: mergeCSSLoaderProd({ - loader: 'stylus-loader', - options: { - sourceMap: true, - }, - }), - }, - ], - }, plugins: [ new CopyWebpackPlugin({ patterns: [ @@ -60,9 +32,6 @@ module.exports = merge(baseConfig, { NODE_ENV: '"production"', }, }), - new MiniCssExtractPlugin({ - filename: '[name].css', - }), new webpack.NamedChunksPlugin(), ], optimization: { diff --git a/build-config/renderer/webpack.config.base.js b/build-config/renderer/webpack.config.base.js index ea4f652f..fdf69a36 100644 --- a/build-config/renderer/webpack.config.base.js +++ b/build-config/renderer/webpack.config.base.js @@ -1,9 +1,12 @@ const path = require('path') const VueLoaderPlugin = require('vue-loader/lib/plugin') const HTMLPlugin = require('html-webpack-plugin') +const MiniCssExtractPlugin = require('mini-css-extract-plugin') const vueLoaderConfig = require('../vue-loader.config') +const { mergeCSSLoader } = require('../utils') +const isDev = process.env.NODE_ENV === 'development' module.exports = { target: 'electron-renderer', @@ -46,6 +49,28 @@ module.exports = { loader: 'babel-loader', exclude: /node_modules/, }, + { + test: /\.css$/, + oneOf: mergeCSSLoader(), + }, + { + test: /\.less$/, + oneOf: mergeCSSLoader({ + loader: 'less-loader', + options: { + sourceMap: true, + }, + }), + }, + { + test: /\.styl(:?us)?$/, + oneOf: mergeCSSLoader({ + loader: 'stylus-loader', + options: { + sourceMap: true, + }, + }), + }, { test: /\.pug$/, oneOf: [ @@ -98,5 +123,11 @@ module.exports = { __dirname, }), new VueLoaderPlugin(), + new MiniCssExtractPlugin({ + // Options similar to the same options in webpackOptions.output + // both options are optional + filename: isDev ? '[name].css' : '[name].[contenthash:8].css', + chunkFilename: isDev ? '[id].css' : '[id].[contenthash:8].css', + }), ], } diff --git a/build-config/renderer/webpack.config.dev.js b/build-config/renderer/webpack.config.dev.js index 5baf32fa..871afd3e 100644 --- a/build-config/renderer/webpack.config.dev.js +++ b/build-config/renderer/webpack.config.dev.js @@ -6,37 +6,9 @@ const { merge } = require('webpack-merge') const baseConfig = require('./webpack.config.base') -const { mergeCSSLoaderDev } = require('../utils') - module.exports = merge(baseConfig, { mode: 'development', devtool: 'eval-source-map', - module: { - rules: [ - { - test: /\.css$/, - oneOf: mergeCSSLoaderDev(), - }, - { - test: /\.less$/, - oneOf: mergeCSSLoaderDev({ - loader: 'less-loader', - options: { - sourceMap: true, - }, - }), - }, - { - test: /\.styl(:?us)?$/, - oneOf: mergeCSSLoaderDev({ - loader: 'stylus-loader', - options: { - sourceMap: true, - }, - }), - }, - ], - }, plugins: [ new webpack.HotModuleReplacementPlugin(), new webpack.NoEmitOnErrorsPlugin(), diff --git a/build-config/renderer/webpack.config.prod.js b/build-config/renderer/webpack.config.prod.js index 89986194..e151deac 100644 --- a/build-config/renderer/webpack.config.prod.js +++ b/build-config/renderer/webpack.config.prod.js @@ -1,6 +1,5 @@ const path = require('path') const webpack = require('webpack') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') const TerserPlugin = require('terser-webpack-plugin') const CopyWebpackPlugin = require('copy-webpack-plugin') @@ -8,7 +7,6 @@ const { merge } = require('webpack-merge') const baseConfig = require('./webpack.config.base') -const { mergeCSSLoaderProd } = require('../utils') const { dependencies } = require('../../package.json') let whiteListedModules = ['vue'] @@ -20,32 +18,6 @@ module.exports = merge(baseConfig, { externals: [ ...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d)), ], - module: { - rules: [ - { - test: /\.css$/, - oneOf: mergeCSSLoaderProd(), - }, - { - test: /\.less$/, - oneOf: mergeCSSLoaderProd({ - loader: 'less-loader', - options: { - sourceMap: true, - }, - }), - }, - { - test: /\.styl(:?us)?$/, - oneOf: mergeCSSLoaderProd({ - loader: 'stylus-loader', - options: { - sourceMap: true, - }, - }), - }, - ], - }, plugins: [ new CopyWebpackPlugin({ patterns: [ @@ -60,9 +32,6 @@ module.exports = merge(baseConfig, { NODE_ENV: '"production"', }, }), - new MiniCssExtractPlugin({ - filename: '[name].css', - }), new webpack.NamedChunksPlugin(), ], optimization: { diff --git a/build-config/utils.js b/build-config/utils.js index 0a6a9e72..e3a9b5e0 100644 --- a/build-config/utils.js +++ b/build-config/utils.js @@ -2,62 +2,21 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin') const cssLoaderConfig = require('./css-loader.config') const chalk = require('chalk') -// merge css-loader in development -exports.mergeCSSLoaderDev = beforeLoader => { - const loader = [ - // 这里匹配 `