From 1d90231ebd4ea5650e1c0c430f2ff0ff9fea6026 Mon Sep 17 00:00:00 2001 From: Dr_rOot Date: Wed, 12 Apr 2023 11:21:07 +0800 Subject: [PATCH 1/8] feat: add task dir history --- src/main/core/ConfigManager.js | 1 + .../Preference/DirectoryHistory.vue | 106 ++++++++++++++++++ src/renderer/components/Task/AddTask.vue | 9 +- src/shared/configKeys.js | 1 + 4 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 src/renderer/components/Preference/DirectoryHistory.vue diff --git a/src/main/core/ConfigManager.js b/src/main/core/ConfigManager.js index c235eec3b..25349b34a 100644 --- a/src/main/core/ConfigManager.js +++ b/src/main/core/ConfigManager.js @@ -103,6 +103,7 @@ export default class ConfigManager { 'auto-check-update': is.macOS(), 'auto-hide-window': false, 'auto-sync-tracker': true, + 'dir-history': [], 'enable-upnp': true, 'engine-max-connection-per-server': getMaxConnectionPerServer(), 'hide-app-menu': is.windows() || is.linux(), diff --git a/src/renderer/components/Preference/DirectoryHistory.vue b/src/renderer/components/Preference/DirectoryHistory.vue new file mode 100644 index 000000000..889c6e7aa --- /dev/null +++ b/src/renderer/components/Preference/DirectoryHistory.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/src/renderer/components/Task/AddTask.vue b/src/renderer/components/Task/AddTask.vue index e7c30bdcb..07d73bf62 100644 --- a/src/renderer/components/Task/AddTask.vue +++ b/src/renderer/components/Task/AddTask.vue @@ -69,6 +69,10 @@ v-model="form.dir" :readonly="isMas" > + Date: Wed, 12 Apr 2023 14:40:01 +0800 Subject: [PATCH 2/8] fix: directory history props --- src/renderer/components/Preference/DirectoryHistory.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/components/Preference/DirectoryHistory.vue b/src/renderer/components/Preference/DirectoryHistory.vue index 889c6e7aa..acfc91581 100644 --- a/src/renderer/components/Preference/DirectoryHistory.vue +++ b/src/renderer/components/Preference/DirectoryHistory.vue @@ -2,9 +2,9 @@
    @@ -34,7 +34,7 @@ props: { width: { type: Number, - default: 200 + default: 310 }, placement: { type: String, From b240029a47199908e6da3f49dc93aa1cef23b257 Mon Sep 17 00:00:00 2001 From: Dr_rOot Date: Wed, 12 Apr 2023 19:52:50 +0800 Subject: [PATCH 3/8] refactor: parseHeader replace substr to substring --- src/shared/utils/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shared/utils/index.js b/src/shared/utils/index.js index 444bf7e6f..6e289313f 100644 --- a/src/shared/utils/index.js +++ b/src/shared/utils/index.js @@ -584,8 +584,8 @@ export function parseHeader (header = '') { const headers = splitTextRows(header) headers.forEach((line) => { const index = line.indexOf(':') - const name = line.substr(0, index) - const value = line.substr(index + 1).trim() + const name = line.substring(0, index) + const value = line.substring(index + 1).trim() result[name] = value }) result = changeKeysToCamelCase(result) From d81c0bbb9a5f44dfa421f3e5424a77232bfc2cab Mon Sep 17 00:00:00 2001 From: Dr_rOot Date: Thu, 13 Apr 2023 12:23:04 +0800 Subject: [PATCH 4/8] chore: update git ignore --- .gitignore | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index b08ca7f9c..342b49dca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,25 @@ +!.gitkeep .DS_Store -dist/electron/* -dist/web/* -*.provisionprofile -build/*.plist +.env +.idea/ +.vs/ +.vscode/ +*.log node_modules/ -npm-debug.log -npm-debug.log.* thumbs.db -!.gitkeep + +# npm package +.npmrc +npm-debug.log.* + +# Eslint Cache +.eslintcache* + +# electron builder +*.provisionprofile +build/*.plist +dist/electron/* +dist/web/* + +# release release/* -.idea/ From ff918c916cadaad3ef7311bd5777e5189e18dc02 Mon Sep 17 00:00:00 2001 From: Dr_rOot Date: Thu, 13 Apr 2023 12:24:49 +0800 Subject: [PATCH 5/8] refactor: text direction --- src/renderer/pages/index/App.vue | 12 ++++++------ src/renderer/store/modules/preference.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/renderer/pages/index/App.vue b/src/renderer/pages/index/App.vue index 8e970c6ed..da8a5261e 100644 --- a/src/renderer/pages/index/App.vue +++ b/src/renderer/pages/index/App.vue @@ -47,7 +47,7 @@ ...mapGetters('preference', [ 'theme', 'locale', - 'dir' + 'direction' ]), themeClass () { if (this.theme === APP_THEME.AUTO) { @@ -59,8 +59,8 @@ i18nClass () { return `i18n-${this.locale}` }, - dirClass () { - return `dir-${this.dir}` + directionClass () { + return `dir-${this.direction}` }, enableTraySpeedometer () { const { isMac, isRenderer, traySpeedometer, runMode } = this @@ -69,8 +69,8 @@ }, methods: { updateRootClassName () { - const { themeClass = '', i18nClass = '', dirClass = '' } = this - const className = `${themeClass} ${i18nClass} ${dirClass}` + const { themeClass = '', i18nClass = '', directionClass = '' } = this + const className = `${themeClass} ${i18nClass} ${directionClass}` document.documentElement.className = className } }, @@ -84,7 +84,7 @@ i18nClass (val, oldVal) { this.updateRootClassName() }, - dirClass (val, oldVal) { + directionClass (val, oldVal) { this.updateRootClassName() } } diff --git a/src/renderer/store/modules/preference.js b/src/renderer/store/modules/preference.js index 968bde083..e02eadfee 100644 --- a/src/renderer/store/modules/preference.js +++ b/src/renderer/store/modules/preference.js @@ -12,7 +12,7 @@ const state = { const getters = { theme: state => state.config.theme, locale: state => state.config.locale, - dir: state => getLangDirection(state.config.locale) + direction: state => getLangDirection(state.config.locale) } const mutations = { From bc0114a164fa88bfa896482e4632ef92fb445785 Mon Sep 17 00:00:00 2001 From: Dr_rOot Date: Thu, 13 Apr 2023 12:42:24 +0800 Subject: [PATCH 6/8] refactor: tracker utils --- src/shared/utils/tracker.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/shared/utils/tracker.js b/src/shared/utils/tracker.js index ff3309033..eb48d9229 100644 --- a/src/shared/utils/tracker.js +++ b/src/shared/utils/tracker.js @@ -18,23 +18,27 @@ export const fetchBtTrackerFromSource = async (source) => { return result } -export function convertTrackerDataToLine (arr = []) { +export const convertTrackerDataToLine = (arr = []) => { const result = arr.join('\r\n').replace(/^\s*[\r\n]/gm, '').trim() return result } -export function convertTrackerDataToComma (arr = []) { +export const convertTrackerDataToComma = (arr = []) => { const result = convertTrackerDataToLine(arr).replace(/(?:\r\n|\r|\n)/g, ',').trim() return result } -export function reduceTrackerString (str = '') { +export const reduceTrackerString = (str = '') => { if (str.length <= MAX_BT_TRACKER_LENGTH) { return str } const subStr = str.substring(0, MAX_BT_TRACKER_LENGTH) const index = subStr.lastIndexOf(',') + if (index === -1) { + return subStr + } + const result = subStr.substring(0, index) return result } From 92177a2c4b69ed7725a286b9a31cd02555b432e2 Mon Sep 17 00:00:00 2001 From: Dr_rOot Date: Thu, 13 Apr 2023 12:49:25 +0800 Subject: [PATCH 7/8] feat: choose dir from history directory --- src/main/core/ConfigManager.js | 7 +- .../components/Native/EngineClient.vue | 4 +- src/renderer/components/Preference/Basic.vue | 15 +- .../Preference/DirectoryHistory.vue | 106 -------- .../Preference/HistoryDirectory.vue | 229 ++++++++++++++++++ src/renderer/components/Task/AddTask.vue | 17 +- src/renderer/components/Theme/Dark.scss | 6 + .../components/Theme/Dark/Variables.scss | 16 +- src/renderer/store/modules/preference.js | 76 +++++- src/shared/configKeys.js | 7 +- src/shared/constants.js | 2 + src/shared/utils/index.js | 29 +++ 12 files changed, 388 insertions(+), 126 deletions(-) delete mode 100644 src/renderer/components/Preference/DirectoryHistory.vue create mode 100644 src/renderer/components/Preference/HistoryDirectory.vue diff --git a/src/main/core/ConfigManager.js b/src/main/core/ConfigManager.js index 25349b34a..429d42c1e 100644 --- a/src/main/core/ConfigManager.js +++ b/src/main/core/ConfigManager.js @@ -52,8 +52,8 @@ export default class ConfigManager { 'all-proxy': EMPTY_STRING, 'allow-overwrite': false, 'auto-file-renaming': true, - 'bt-force-encryption': false, 'bt-exclude-tracker': EMPTY_STRING, + 'bt-force-encryption': false, 'bt-load-saved-metadata': true, 'bt-save-metadata': true, 'bt-tracker': EMPTY_STRING, @@ -72,8 +72,8 @@ export default class ConfigManager { 'max-overall-download-limit': 0, 'max-overall-upload-limit': '1M', 'no-proxy': EMPTY_STRING, - 'pause': true, 'pause-metadata': false, + 'pause': true, 'rpc-listen-port': 16800, 'rpc-secret': EMPTY_STRING, 'seed-ratio': 1, @@ -103,10 +103,11 @@ export default class ConfigManager { 'auto-check-update': is.macOS(), 'auto-hide-window': false, 'auto-sync-tracker': true, - 'dir-history': [], 'enable-upnp': true, 'engine-max-connection-per-server': getMaxConnectionPerServer(), + 'favorite-directories': [], 'hide-app-menu': is.windows() || is.linux(), + 'history-directories': [], 'keep-seeding': false, 'keep-window-state': false, 'last-check-update-time': 0, diff --git a/src/renderer/components/Native/EngineClient.vue b/src/renderer/components/Native/EngineClient.vue index 50e667b1e..c7079be9a 100644 --- a/src/renderer/components/Native/EngineClient.vue +++ b/src/renderer/components/Native/EngineClient.vue @@ -57,7 +57,7 @@ } }, methods: { - fetchTaskItem ({ gid }) { + async fetchTaskItem ({ gid }) { return api.fetchTaskItem({ gid }) .catch((e) => { console.warn(`fetchTaskItem fail: ${e.message}`) @@ -75,6 +75,8 @@ this.fetchTaskItem({ gid }) .then((task) => { + const { dir } = task + this.$store.dispatch('preference/recordHistoryDirectory', dir) const taskName = getTaskName(task) const message = this.$t('task.download-start-message', { taskName }) this.$msg.info(message) diff --git a/src/renderer/components/Preference/Basic.vue b/src/renderer/components/Preference/Basic.vue index b9d3a047b..9a6c81882 100644 --- a/src/renderer/components/Preference/Basic.vue +++ b/src/renderer/components/Preference/Basic.vue @@ -107,10 +107,14 @@ :label-width="formLabelWidth" > +
    @@ -293,6 +297,7 @@ import { mapState } from 'vuex' import { cloneDeep, extend, isEmpty } from 'lodash' import SubnavSwitcher from '@/components/Subnav/SubnavSwitcher' + import HistoryDirectory from '@/components/Preference/HistoryDirectory' import SelectDirectory from '@/components/Native/SelectDirectory' import ThemeSwitcher from '@/components/Preference/ThemeSwitcher' import { availableLanguages, getLanguage } from '@shared/locales' @@ -374,6 +379,7 @@ name: 'mo-preference-basic', components: { [SubnavSwitcher.name]: SubnavSwitcher, + [HistoryDirectory.name]: HistoryDirectory, [SelectDirectory.name]: SelectDirectory, [ThemeSwitcher.name]: ThemeSwitcher }, @@ -535,6 +541,13 @@ this.form.seedRatio = enable ? 0 : 1 this.form.seedTime = enable ? 525600 : 60 }, + handleHistoryDirectorySelected (dir) { + this.form.dir = dir + }, + handleNativeDirectorySelected (dir) { + this.form.dir = dir + this.$store.dispatch('preference/recordHistoryDirectory', dir) + }, onDirectorySelected (dir) { this.form.dir = dir }, diff --git a/src/renderer/components/Preference/DirectoryHistory.vue b/src/renderer/components/Preference/DirectoryHistory.vue deleted file mode 100644 index acfc91581..000000000 --- a/src/renderer/components/Preference/DirectoryHistory.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - - diff --git a/src/renderer/components/Preference/HistoryDirectory.vue b/src/renderer/components/Preference/HistoryDirectory.vue new file mode 100644 index 000000000..ed65427bd --- /dev/null +++ b/src/renderer/components/Preference/HistoryDirectory.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/src/renderer/components/Task/AddTask.vue b/src/renderer/components/Task/AddTask.vue index 07d73bf62..f0d82e52c 100644 --- a/src/renderer/components/Task/AddTask.vue +++ b/src/renderer/components/Task/AddTask.vue @@ -69,14 +69,14 @@ v-model="form.dir" :readonly="isMas" > - @@ -196,7 +196,7 @@ import is from 'electron-is' import { mapState } from 'vuex' import { isEmpty } from 'lodash' - import DirectoryHistory from '@/components/Preference/DirectoryHistory' + import HistoryDirectory from '@/components/Preference/HistoryDirectory' import SelectDirectory from '@/components/Native/SelectDirectory' import SelectTorrent from '@/components/Task/SelectTorrent' import { @@ -211,7 +211,7 @@ export default { name: 'mo-add-task', components: { - [DirectoryHistory.name]: DirectoryHistory, + [HistoryDirectory.name]: HistoryDirectory, [SelectDirectory.name]: SelectDirectory, [SelectTorrent.name]: SelectTorrent }, @@ -334,10 +334,13 @@ this.form.torrent = torrent this.form.selectFile = selectedFileIndex }, - onDirectorySelected (dir) { - console.log('[Motrix] Add task onDirectorySelected', dir) + handleHistoryDirectorySelected (dir) { this.form.dir = dir }, + handleNativeDirectorySelected (dir) { + this.form.dir = dir + this.$store.dispatch('preference/recordHistoryDirectory', dir) + }, reset () { this.showAdvanced = false this.form = initTaskForm(this.$store.state) diff --git a/src/renderer/components/Theme/Dark.scss b/src/renderer/components/Theme/Dark.scss index 930271849..6df33da8b 100644 --- a/src/renderer/components/Theme/Dark.scss +++ b/src/renderer/components/Theme/Dark.scss @@ -439,4 +439,10 @@ color: #a7a7a7; } + /* Popover */ + .el-popover { + background-color: $--dk-popover-background; + border-color: $--dk-popover-border-color; + } + } diff --git a/src/renderer/components/Theme/Dark/Variables.scss b/src/renderer/components/Theme/Dark/Variables.scss index ff00a4281..51a466fa2 100644 --- a/src/renderer/components/Theme/Dark/Variables.scss +++ b/src/renderer/components/Theme/Dark/Variables.scss @@ -1,7 +1,13 @@ +/* Color +-------------------------- */ +$--dk-border-color-base: #555; +$--dk-font-color-base: #eee; +$--dk-action-color-base: #eee; + /* App -------------------------- */ $--dk-app-background: transparent !default; -$--dk-titlebar-actions-color: #eee !default; +$--dk-titlebar-actions-color: $--dk-action-color-base !default; $--dk-titlebar-close-active-color: #fff !default; $--dk-titlebar-actions-active-background: rgba(0, 0, 0, 0.9) !default; $--dk-titlebar-close-active-background: #fd0007 !default; @@ -42,10 +48,10 @@ $--dk-form-actions-background: #343434 !default; /* Task -------------------------- */ -$--dk-task-action-color: #eee !default; +$--dk-task-action-color: $--dk-action-color-base !default; $--dk-task-action-hover-color: $--color-primary !default; $--dk-task-item-backgroud: #2d2d2d !default; -$--dk-task-item-border-color: #555 !default; +$--dk-task-item-border-color: $--dk-border-color-base !default; $--dk-task-item-hover-border-color: $--color-primary !default; $--dk-task-item-hover-background: $--color-primary !default; $--dk-task-item-text-color: #eee !default; @@ -53,7 +59,7 @@ $--dk-task-item-action-background: #4a4a4a !default; $--dk-task-item-action-hover-background: $--color-primary !default; $--dk-task-item-action-border-color: #5f5f5f !default; $--dk-task-item-action-hover-border-color: $--color-primary !default; -$--dk-task-item-action-color: #eee !default; +$--dk-task-item-action-color: $--dk-action-color-base !default; $--dk-task-item-action-hover-color: #fff !default; $--dk-no-task-color: #aaa !default; $--dk-add-task-dialog-footer-background: #4a4a4a !default; @@ -91,3 +97,5 @@ $--dk-table-hover-background: #565656 !default; $--dk-table-th-background: #1f2122 !default; $--dk-table-text-color: #9b9b9b !default; $--dk-table-border-color: #565656 !default; +$--dk-popover-background: #3d3d3d !default; +$--dk-popover-border-color: $--dk-border-color-base !default; diff --git a/src/renderer/store/modules/preference.js b/src/renderer/store/modules/preference.js index e02eadfee..f7e39e325 100644 --- a/src/renderer/store/modules/preference.js +++ b/src/renderer/store/modules/preference.js @@ -1,8 +1,13 @@ import { isEmpty } from 'lodash' import api from '@/api' -import { getLangDirection } from '@shared/utils' +import { + getLangDirection, + pushItemToFixedLengthArray, + removeArrayItem +} from '@shared/utils' import { fetchBtTrackerFromSource } from '@shared/utils/tracker' +import { MAX_NUM_OF_DIRECTORIES } from '@shared/constants' const state = { engineMode: 'MAX', @@ -40,6 +45,75 @@ const actions = { dispatch('updatePreference', config) return api.savePreference(config) }, + recordHistoryDirectory ({ state, dispatch }, directory) { + const { historyDirectories = [], favoriteDirectories = [] } = state.config + const all = new Set([...historyDirectories, ...favoriteDirectories]) + if (all.has(directory)) { + return + } + + dispatch('addHistoryDirectory', directory) + }, + addHistoryDirectory ({ state, dispatch }, directory) { + const { historyDirectories = [] } = state.config + const history = pushItemToFixedLengthArray( + historyDirectories, + MAX_NUM_OF_DIRECTORIES, + directory + ) + + dispatch('save', { historyDirectories: history }) + }, + favoriteDirectory ({ state, dispatch }, directory) { + const { historyDirectories = [], favoriteDirectories = [] } = state.config + if (favoriteDirectories.includes(directory) || + favoriteDirectories.length >= MAX_NUM_OF_DIRECTORIES + ) { + return + } + + const favorite = pushItemToFixedLengthArray( + favoriteDirectories, + MAX_NUM_OF_DIRECTORIES, + directory + ) + const history = removeArrayItem(historyDirectories, directory) + + dispatch('save', { + historyDirectories: history, + favoriteDirectories: favorite + }) + }, + cancelFavoriteDirectory ({ state, dispatch }, directory) { + const { historyDirectories = [], favoriteDirectories = [] } = state.config + if (historyDirectories.includes(directory)) { + return + } + + const favorite = removeArrayItem(favoriteDirectories, directory) + + const history = pushItemToFixedLengthArray( + historyDirectories, + MAX_NUM_OF_DIRECTORIES, + directory + ) + + dispatch('save', { + historyDirectories: history, + favoriteDirectories: favorite + }) + }, + removeDirectory ({ state, dispatch }, directory) { + const { historyDirectories = [], favoriteDirectories = [] } = state.config + + const favorite = removeArrayItem(favoriteDirectories, directory) + const history = removeArrayItem(historyDirectories, directory) + + dispatch('save', { + historyDirectories: history, + favoriteDirectories: favorite + }) + }, updateThemeConfig ({ dispatch }, theme) { dispatch('updatePreference', { theme }) }, diff --git a/src/shared/configKeys.js b/src/shared/configKeys.js index 9550aaeb9..702e3694f 100644 --- a/src/shared/configKeys.js +++ b/src/shared/configKeys.js @@ -4,11 +4,12 @@ const userKeys = [ 'auto-hide-window', 'auto-sync-tracker', 'cookie', - 'dir-history', 'enable-upnp', 'engine-bin-path', 'engine-max-connection-per-server', + 'favorite-directories', 'hide-app-menu', + 'history-directories', 'keep-seeding', 'keep-window-state', 'last-check-update-time', @@ -109,11 +110,11 @@ const systemKeys = [ 'max-download-limit', 'max-file-not-found', 'max-mmap-limit', + 'max-overall-download-limit', + 'max-overall-upload-limit', 'max-resume-failure-tries', 'max-tries', 'max-upload-limit', - 'max-overall-download-limit', - 'max-overall-upload-limit', 'metalink-base-uri', 'metalink-enable-unique-protocol', 'metalink-language', diff --git a/src/shared/constants.js b/src/shared/constants.js index 8c9f81dca..f12c4f181 100644 --- a/src/shared/constants.js +++ b/src/shared/constants.js @@ -27,6 +27,8 @@ export const TASK_STATUS = { SEEDING: 'seeding' } +export const MAX_NUM_OF_DIRECTORIES = 5 + export const ENGINE_RPC_HOST = '127.0.0.1' export const ENGINE_RPC_PORT = 16800 export const ENGINE_MAX_CONCURRENT_DOWNLOADS = 10 diff --git a/src/shared/utils/index.js b/src/shared/utils/index.js index 6e289313f..f7412889a 100644 --- a/src/shared/utils/index.js +++ b/src/shared/utils/index.js @@ -657,6 +657,35 @@ export const intersection = (array1 = [], array2 = []) => { return array1.filter(value => array2.includes(value)) } +export const cloneArray = (arr = [], reversed = false) => { + if (!Array.isArray(arr)) { + return arr + } + + const result = [...arr] + return reversed ? result.reverse() : result +} + +export const pushItemToFixedLengthArray = (arr = [], maxLength, item) => { + const result = arr.length >= maxLength + ? [...arr.slice(1, maxLength - 1), item] + : [...arr, item] + return result +} + +export const removeArrayItem = (arr = [], item) => { + const idx = arr.indexOf(item) + if (idx === -1) { + return [...arr] + } + + const result = [ + ...arr.slice(0, idx), + ...arr.slice(idx + 1) + ] + return result +} + export const getInverseTheme = (theme) => { return (theme === APP_THEME.LIGHT) ? APP_THEME.DARK : APP_THEME.LIGHT } From 74b9f465a1f6176ea1eade06fe3329d3d0fb5a6c Mon Sep 17 00:00:00 2001 From: Dr_rOot Date: Thu, 13 Apr 2023 14:44:17 +0800 Subject: [PATCH 8/8] fix: update nat-api to fix xml2js vulnerability --- package.json | 8 +++--- yarn.lock | 73 ++++++++++++++++++++++++---------------------------- 2 files changed, 38 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index bbe13a646..8e18161be 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@electron/osx-sign": "^1.0.4", "@electron/remote": "^2.0.9", "@motrix/multispinner": "^0.2.4", - "@motrix/nat-api": "^0.3.3", + "@motrix/nat-api": "^0.3.4", "@panter/vue-i18next": "^0.15.2", "@vue/eslint-config-standard": "^6.1.0", "ajv": "^8.12.0", @@ -79,7 +79,7 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-vue": "^9.10.0", - "eslint-webpack-plugin": "^4.0.0", + "eslint-webpack-plugin": "^4.0.1", "file-loader": "^6.2.0", "html-webpack-plugin": "^5.5.0", "i18next": "^22.4.14", @@ -89,7 +89,7 @@ "normalize.css": "^8.0.1", "parse-torrent": "^9.1.5", "randomatic": "^3.1.1", - "sass": "1.61.0", + "sass": "1.62.0", "sass-loader": "^12.6.0", "style-loader": "^3.3.2", "terser-webpack-plugin": "^5.3.7", @@ -102,7 +102,7 @@ "vue-template-compiler": "^2.7.14", "vuex": "^3.6.2", "vuex-router-sync": "^5.0.0", - "webpack": "^5.78.0", + "webpack": "^5.79.0", "webpack-cli": "^5.0.1", "webpack-dev-server": "^4.13.2", "webpack-hot-middleware": "^2.25.3", diff --git a/yarn.lock b/yarn.lock index 6dc2bd331..c85a8168c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1204,17 +1204,17 @@ lodash.merge "^4.6.2" log-update "^4.0.0" -"@motrix/nat-api@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@motrix/nat-api/-/nat-api-0.3.3.tgz#31ac9ca24dd3d8c6e75734e18ae3595431f86c31" - integrity sha512-84U4DbSr7sZ9k7/ywm0uBHfVLxNZdg+lQaLuFW/6sL8E163gJDx3HAYxEBtl0nCzRHay2qPhj/gtH03DezWNKg== +"@motrix/nat-api@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@motrix/nat-api/-/nat-api-0.3.4.tgz#8c96bf64edf09f237caac6aaab39fbc823fdc4fa" + integrity sha512-RIH5sSP329Xn8TjDcAHYHn82VTajhdu2Ee4PTLA+9jCAi5x0D219D1XYW7nCK22ptcLrC+qzBXlWG/j16iuoLQ== dependencies: async "^3.2.4" debug "^4.3.4" default-gateway "^6.0.3" node-fetch "^2.6.9" unordered-array-remove "^1.0.2" - xml2js "^0.4.23" + xml2js "^0.5.0" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1335,7 +1335,7 @@ "@types/eslint" "*" "@types/estree" "*" -"@types/eslint@*", "@types/eslint@^8.4.10": +"@types/eslint@*", "@types/eslint@^8.37.0": version "8.37.0" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== @@ -1343,16 +1343,11 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": +"@types/estree@*", "@types/estree@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" @@ -3417,10 +3412,10 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== es-set-tostringtag@^2.0.1: version "2.0.1" @@ -3619,13 +3614,13 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint-webpack-plugin@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.0.0.tgz#f77f37b2bbb8ad5c4197b5e55f5f2a49365a1a81" - integrity sha512-eM9ccGRWkU+btBSVfABRn8CjT7jZ2Q+UV/RfErMDVCFXpihEbvajNrLltZpwTAcEoXSqESGlEPIUxl7PoDlLWw== +eslint-webpack-plugin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.0.1.tgz#f0f0e9afff2801d8bd41eac88e5409821ecbaccb" + integrity sha512-fUFcXpui/FftGx3NzvWgLZXlLbu+m74sUxGEgxgoxYcUtkIQbS6SdNNZkS99m5ycb23TfoNYrDpp1k/CK5j6Hw== dependencies: - "@types/eslint" "^8.4.10" - jest-worker "^29.4.1" + "@types/eslint" "^8.37.0" + jest-worker "^29.5.0" micromatch "^4.0.5" normalize-path "^3.0.0" schema-utils "^4.0.0" @@ -4907,7 +4902,7 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^29.4.1, jest-worker@^29.4.3: +jest-worker@^29.4.3, jest-worker@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== @@ -6600,10 +6595,10 @@ sass-loader@^12.6.0: klona "^2.0.4" neo-async "^2.6.2" -sass@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.61.0.tgz#d1f6761bb833887b8fdab32a24e052c40531d02b" - integrity sha512-PDsN7BrVkNZK2+dj/dpKQAWZavbAQ87IXqVvw2+oEYI+GwlTWkvbQtL7F2cCNbMqJEYKPh1EcjSxsnqIb/kyaQ== +sass@1.62.0: + version "1.62.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.62.0.tgz#3686b2195b93295d20765135e562366b33ece37d" + integrity sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -7125,7 +7120,7 @@ temp-file@^3.4.0: async-exit-hook "^2.0.1" fs-extra "^10.0.0" -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.7: +terser-webpack-plugin@^5.3.7: version "5.3.7" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== @@ -7613,13 +7608,13 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.78.0: - version "5.78.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.78.0.tgz#836452a12416af2a7beae906b31644cb2562f9e6" - integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== +webpack@^5.79.0: + version "5.79.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.79.0.tgz#8552b5da5a26e4e25842c08a883e08fc7740547a" + integrity sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" + "@types/estree" "^1.0.0" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" @@ -7628,7 +7623,7 @@ webpack@^5.78.0: browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -7639,7 +7634,7 @@ webpack@^5.78.0: neo-async "^2.6.2" schema-utils "^3.1.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" + terser-webpack-plugin "^5.3.7" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -7761,10 +7756,10 @@ xml-name-validator@^4.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xml2js@^0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== +xml2js@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== dependencies: sax ">=0.6.0" xmlbuilder "~11.0.0"