Compare commits

..

48 Commits

Author SHA1 Message Date
Dr_rOot e579146260 fix: select dropdown dark style 2023-05-19 23:31:35 +08:00
Dr_rOot 9d18333a93 feat: adjust task dialog top when show advanced 2023-05-19 23:30:04 +08:00
Dr_rOot 5daece6dab feat: task file filter add document extensions 2023-05-19 23:26:31 +08:00
Dr_rOot 8bfb7d906e chore: adjust icon template and size (#1486) 2023-05-13 14:13:50 +08:00
Dr_rOot f4ece13ceb Merge pull request #1485 from agalwood/hotfix/portable_20230511
fix: move some config files to make the target really portable
2023-05-11 22:39:48 +08:00
Dr_rOot 763ea6ee7a chore: update deps 2023-05-11 21:53:58 +08:00
Dr_rOot cc27cb3459 refactor: convert to arrow function 2023-05-11 21:40:07 +08:00
Dr_rOot b8c57df4f5 refactor: portable config file base dir 2023-05-11 21:39:35 +08:00
Dr_rOot e6765380bc fix: increase the rpc secret length limit to 64 (#1482) 2023-05-09 22:24:39 +08:00
Dr_rOot 0172a003d3 Merge pull request #1480 from agalwood/feature/task_detail_20230506
feat: protocol add motrix://reveal-in-folder
2023-05-07 22:20:49 +08:00
Dr_rOot ef2b3a04b2 refactor: show item in folder util 2023-05-07 21:25:45 +08:00
Dr_rOot 75f5760b33 chore: update deps 2023-05-06 18:16:14 +08:00
Dr_rOot 1f033d1e47 refactor: code format 2023-05-06 18:16:05 +08:00
Dr_rOot 458e21479b feat: motrix://reveal-in-folder 2023-05-06 18:09:29 +08:00
Dr_rOot 46e5324ae6 refactor: system config rpc listen port 2023-05-06 18:06:49 +08:00
Dr_rOot de8996b3b3 feat: show task gid on task detail general 2023-05-06 18:01:31 +08:00
Dr_rOot 1f83848358 fix: object has been destroyed 2023-05-05 18:14:32 +08:00
Dr_rOot 69d3ade305 docs: readme macOS add Motrix Install Assistant 2023-05-03 16:20:33 +08:00
Dr_rOot a0a1fe90f7 chore: update yarn lock & bump version to 1.8.18 2023-05-03 14:44:33 +08:00
Dr_rOot 553bf80960 chore: bump version to 1.8.18 2023-05-03 13:50:33 +08:00
Dr_rOot 04446b582e Merge pull request #1472 from agalwood/hotfix/bt_auto_download_20230503
fix: btAutoDownloadContent boolean is inverted
2023-05-03 13:49:14 +08:00
Dr_rOot f10f4a2588 fix: btAutoDownloadContent boolean is inverted 2023-05-03 13:46:07 +08:00
Dr_rOot 513f566a59 chore: bump version to 1.8.17 2023-05-02 18:08:49 +08:00
Dr_rOot f49f083044 fix: update-downloaded set progress bar value to 1 2023-05-02 18:06:44 +08:00
Dr_rOot 830bc9336e chore: bump version to 1.8.16 2023-05-02 17:35:14 +08:00
Dr_rOot 3b049219e4 chore: update deps 2023-05-02 17:33:51 +08:00
Dr_rOot bbc68b6a8a chore: github action remove notarization api key 2023-05-02 17:33:22 +08:00
Dr_rOot 0afc01080d fix: preference save relaunch application twice 2023-04-29 11:26:26 +08:00
Dr_rOot af1cc4db8e chore: bump version to 1.8.15 2023-04-28 22:54:29 +08:00
Dr_rOot 8defa9ee71 Merge pull request #1466 from agalwood/hotfix/aria2_x64_20230428
fix: rebuild darwin x64 aria2c bin
2023-04-28 22:51:56 +08:00
Dr_rOot cb6d9f2b20 chore: change node mini version to 16 2023-04-28 22:50:01 +08:00
Dr_rOot 9f6c31ffa3 fix: rebuild darwin x64 aria2c bin 2023-04-28 22:49:10 +08:00
greenhandzdl 0b3161ca6f docs: fix yay install script (#1465)
* Fix Doc
2023-04-28 22:39:06 +08:00
Dr_rOot c79bdff4b8 Merge pull request #1464 from agalwood/hotfix/aria2_arm64_20230428
fix: rebuild arm64 aria2c bin
2023-04-28 18:45:00 +08:00
Dr_rOot b92957668b chore: update deps 2023-04-28 18:19:57 +08:00
Dr_rOot b1b52e2640 fix: rebuild arm64 aria2c bin 2023-04-28 18:16:01 +08:00
Dr_rOot a39fa2979c chore: bump version to 1.8.14 2023-04-27 17:49:04 +08:00
Dr_rOot e0a74f7979 fix: selected task item border color in dark mode 2023-04-27 17:47:59 +08:00
Dr_rOot a7b8333710 chore: bump version to 1.8.13 2023-04-27 17:08:14 +08:00
Dr_rOot 77850da0fe Merge pull request #1455 from agalwood/hotfix/auto_update_20230427
fix: app auto update failed
2023-04-27 17:06:53 +08:00
Dr_rOot 71f4eeeb25 chore: change app update generic url 2023-04-27 16:51:28 +08:00
Dr_rOot e5eace479d fix: handle auto updater update canceled event 2023-04-27 16:51:06 +08:00
Dr_rOot 7e927fea10 chore: bump version to 1.8.12 2023-04-27 11:11:34 +08:00
Dr_rOot 38cd952b44 Merge pull request #1453 from agalwood/hotfix/stop_engine_20230427
fix: stop engine failed when app quit
2023-04-27 11:10:23 +08:00
Dr_rOot b07fedeba0 chore: electron build mac target add universal 2023-04-27 10:54:38 +08:00
Dr_rOot 2bbaae5d7d feat: preference advanced add log level setting 2023-04-27 10:53:27 +08:00
Dr_rOot 003e9ffccb fix: stop engine failed when app quit 2023-04-27 10:23:08 +08:00
Dr_rOot 7a51dbaf5e chore: update bug report issue template 2023-04-27 08:00:07 +08:00
90 changed files with 891 additions and 445 deletions
+4 -4
View File
@@ -1,10 +1,10 @@
'use strict'
const chalk = require('chalk')
const electron = require('electron')
const path = require('path')
const path = require('node:path')
const { spawn } = require('node:child_process')
const { say } = require('cfonts')
const { spawn } = require('child_process')
const electron = require('electron')
const chalk = require('chalk')
const Webpack = require('webpack')
const WebpackDevServer = require('webpack-dev-server')
+5 -5
View File
@@ -2,13 +2,13 @@
process.env.BABEL_ENV = 'main'
const devMode = process.env.NODE_ENV !== 'production'
const path = require('path')
const path = require('node:path')
const Webpack = require('webpack')
const ESLintPlugin = require('eslint-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const { dependencies } = require('../package.json')
const { appId } = require('../electron-builder.json')
const Webpack = require('webpack')
const TerserPlugin = require('terser-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
const devMode = process.env.NODE_ENV !== 'production'
let mainConfig = {
entry: {
+9 -9
View File
@@ -2,17 +2,17 @@
process.env.BABEL_ENV = 'renderer'
const devMode = process.env.NODE_ENV !== 'production'
const path = require('path')
const { dependencies } = require('../package.json')
const path = require('node:path')
const Webpack = require('webpack')
const TerserPlugin = require('terser-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
const ESLintPlugin = require('eslint-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const ESLintPlugin = require('eslint-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const { dependencies } = require('../package.json')
const devMode = process.env.NODE_ENV !== 'production'
/**
* List of node_modules to include in webpack bundle
+10 -10
View File
@@ -2,17 +2,17 @@
process.env.BABEL_ENV = 'web'
const devMode = process.env.NODE_ENV !== 'production'
const path = require('path')
const path = require('node:path')
const { dependencies } = require('../package.json')
const Webpack = require('webpack')
const TerserPlugin = require('terser-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
const ESLintPlugin = require('eslint-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const ESLintPlugin = require('eslint-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const devMode = process.env.NODE_ENV !== 'production'
/**
* List of node_modules to include in webpack bundle
@@ -48,7 +48,7 @@ let webConfig = {
loader: 'sass-loader',
options: {
implementation: require('sass'),
additionalData: '@import "@/components/Theme/Variables.scss";',
additionalData: '@import "@/components/Theme/Variables.scss"',
sassOptions: {
includePaths:[__dirname, 'src']
}
@@ -66,7 +66,7 @@ let webConfig = {
options: {
implementation: require('sass'),
indentedSyntax: true,
additionalData: '@import "@/components/Theme/Variables.scss";',
additionalData: '@import "@/components/Theme/Variables.scss"',
sassOptions: {
includePaths:[__dirname, 'src']
}
+7 -7
View File
@@ -18,17 +18,17 @@ module.exports = {
rules: {
'no-console': 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'indent': ['error', 2],
indent: ['error', 2],
'vue/script-indent': ['error', 2, {
'baseIndent': 1
}],
baseIndent: 1
}]
},
overrides: [
{
'files': ['*.vue'],
'rules': {
'indent': 'off'
files: ['*.vue'],
rules: {
indent: 'off'
}
}
]
};
}
+8
View File
@@ -17,6 +17,14 @@ body:
validations:
required: true
- type: textarea
id: app-version
attributes:
label: Motrix Version
description: Please provide detailed version information and installation method, such as macOS Apple silicon dmg, Windows Universal installation file, etc.
validations:
required: true
- type: textarea
attributes:
label: Environment
@@ -17,6 +17,14 @@ body:
validations:
required: true
- type: textarea
id: app-version
attributes:
label: Motrix 版本
description: 请提供详细的版本信息以及安装的方式,如 macOS Apple silicon dmg、Windows Universal 安装文件等
validations:
required: true
- type: textarea
attributes:
label: 环境
+1 -3
View File
@@ -54,9 +54,7 @@ jobs:
env:
# Snapcraft
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.snapcraft_token }}
# macOS notarization API key
API_KEY_ID: ${{ secrets.api_key_id }}
API_KEY_ISSUER_ID: ${{ secrets.api_key_issuer_id }}
# macOS notarization
TEAM_ID: ${{ secrets.team_id }}
APPLE_ID: ${{ secrets.apple_id }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.apple_app_specific_password }}
+17 -6
View File
@@ -1,8 +1,10 @@
# Motrix
<a href="https://motrix.app">
<img src="./static/512x512.png" width="256" alt="App Icon" />
</a>
<p>
<a href="https://motrix.app">
<img src="./static/512x512.png" width="256" alt="Motrix App Icon" />
</a>
</p>
## 一款全能的下载工具
@@ -47,12 +49,21 @@ scoop install motrix
### macOS
macOS 用户可以使用 `brew cask` 安装 Motrix,感谢 [@Mitscherlich](https://github.com/Mitscherlich) 的 [PR](https://github.com/Homebrew/homebrew-cask/pull/59494)。
macOS 用户可以使用 `brew` 安装 Motrix,感谢 [@Mitscherlich](https://github.com/Mitscherlich) 的 [PR](https://github.com/Homebrew/homebrew-cask/pull/59494)。
```bash
brew update && brew install --cask motrix
brew update && brew install motrix
```
#### 自动更新
Motrix v1.8.0+ 版本更改了应用 BundleID ( `net.agalwood.Motrix` => `app.motrix.native` ), Motrix v1.6.11 的自动更新会因为签名不一致而失败。[Motrix 安装助手](https://github.com/motrixapp/motrix-install-assistant)将帮助您安装最新的 Motrix 应用程序。
<p>
<a href="https://github.com/motrixapp/motrix-install-assistant">
<img src="https://raw.githubusercontent.com/motrixapp/motrix-install-assistant/main/build/256x256.png" width="192" alt="Motrix Install Assistant Icon" />
</a>
</p>
### Linux
你可以下载 `AppImage` (适用于所有 Linux 发行版)或 `snap` 来安装 Motrix,更多 Linux 安装包格式请查看 [GitHub/release](https://github.com/agalwood/Motrix/releases) 。
@@ -91,7 +102,7 @@ v1.5.10 提示
运行以下命令进行安装:
```bash
yay motrix
yay -S motrix
```
#### Flatpak
+18 -6
View File
@@ -1,8 +1,10 @@
# Motrix
<a href="https://motrix.app">
<img src="./static/512x512.png" width="256" alt="App Icon" />
</a>
<p>
<a href="https://motrix.app">
<img src="./static/512x512.png" width="256" alt="Motrix App Icon" />
</a>
</p>
## A full-featured download manager
@@ -47,12 +49,22 @@ scoop install motrix
### macOS
The macOS users can install Motrix using `brew cask`, thanks to [PR](https://github.com/Homebrew/homebrew-cask/pull/59494) of [@Mitscherlich](https://github.com/Mitscherlich).
The macOS users can install Motrix using `brew`, thanks to [PR](https://github.com/Homebrew/homebrew-cask/pull/59494) of [@Mitscherlich](https://github.com/Mitscherlich).
```bash
brew update && brew install --cask motrix
brew update && brew install motrix
```
#### Auto Update
Since Motrix v1.8.0 and later versions changed the App BundleID ( `net.agalwood.Motrix` => `app.motrix.native` ), the automatic update of Motrix v1.6.11 will fail. [Motrix Install Assistant](https://github.com/motrixapp/motrix-install-assistant) will help you install the latest Motrix application.
<p>
<a href="https://github.com/motrixapp/motrix-install-assistant">
<img src="https://raw.githubusercontent.com/motrixapp/motrix-install-assistant/main/build/256x256.png" width="192" alt="Motrix Install Assistant Icon" />
</a>
</p>
### Linux
You can download the `AppImage` (for all Linux distributions) or `snap` to install Motrix, see [GitHub/release](https://github.com/agalwood/Motrix/releases) for more Linux installation package formats.
@@ -93,7 +105,7 @@ For Arch Linux users, Motrix is available in [aur](https://aur.archlinux.org/pac
Run the following command to install:
```bash
yay motrix
yay -S motrix
```
#### Flatpak
+1 -1
View File
@@ -1,2 +1,2 @@
provider: generic
url: 'https://dl.motrix.app/release/'
url: 'https://dl.motrix.app/releases/'
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 103 KiB

+3 -3
View File
@@ -29,9 +29,9 @@
// TODO: Remove script once https://github.com/electron/electron/issues/17972 is solved by
// `electron-builder`
const fs = require('fs')
const { spawn } = require('child_process')
const { chdir } = require('process')
const fs = require('node:fs')
const { spawn } = require('node:child_process')
const { chdir } = require('node:process')
const pkg = require('../package.json')
const binName = `${pkg.name}`.toLowerCase()
+1 -1
View File
@@ -1,5 +1,5 @@
require('dotenv').config()
const { join } = require('path')
const { join } = require('node:path')
const { notarize } = require('@electron/notarize')
const { appId } = require('../electron-builder.json')
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 530 KiB

+5 -3
View File
@@ -64,14 +64,16 @@
"target": "dmg",
"arch": [
"x64",
"arm64"
"arm64",
"universal"
]
},
{
"target": "zip",
"arch": [
"x64",
"arm64"
"arm64",
"universal"
]
}
],
@@ -189,7 +191,7 @@
"publish": [
{
"provider": "generic",
"url": "https://dl.motrix.app/release/"
"url": "https://dl.motrix.app/releases/"
},
{
"provider": "github"
Binary file not shown.
Binary file not shown.
+15 -15
View File
@@ -1,6 +1,6 @@
{
"name": "Motrix",
"version": "1.8.11",
"version": "1.8.19",
"description": "A full-featured download manager",
"homepage": "https://motrix.app",
"author": {
@@ -32,19 +32,19 @@
"postinstall": "electron-builder install-app-deps && npm run lint:fix"
},
"engines": {
"node" : ">=18.0.0"
"node": ">=16.0.0"
},
"dependencies": {
"node-fetch": "^2.6.1",
"ws": "^8.13.0"
},
"devDependencies": {
"@babel/core": "^7.21.4",
"@babel/core": "^7.21.8",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-transform-runtime": "^7.21.4",
"@babel/preset-env": "^7.21.4",
"@babel/preset-env": "^7.21.5",
"@babel/register": "^7.21.0",
"@babel/runtime": "^7.21.0",
"@babel/runtime": "^7.21.5",
"@bany/curl-to-json": "^1.2.7",
"@electron/notarize": "^1.2.3",
"@electron/osx-sign": "^1.0.4",
@@ -54,33 +54,33 @@
"@panter/vue-i18next": "^0.15.2",
"@vue/eslint-config-standard": "^6.1.0",
"ajv": "^8.12.0",
"axios": "^1.3.6",
"axios": "^1.4.0",
"babel-eslint": "^10.1.0",
"babel-loader": "^9.1.2",
"babel-plugin-component": "^1.1.1",
"bittorrent-peerid": "^1.3.6",
"blob-util": "^2.0.2",
"cfonts": "^3.1.1",
"cfonts": "^3.2.0",
"chalk": "^4.1.2",
"copy-webpack-plugin": "^11.0.0",
"cross-env": "^7.0.3",
"css-loader": "^6.7.3",
"css-minimizer-webpack-plugin": "^5.0.0",
"del": "^6.1.1",
"electron": "^22.3.5",
"electron-builder": "^24.2.0",
"electron": "^22.3.9",
"electron-builder": "^24.4.0",
"electron-devtools-installer": "^3.2.0",
"electron-is": "^3.0.0",
"electron-log": "^4.4.8",
"electron-store": "^8.1.0",
"electron-updater": "^5.3.0",
"electron-updater": "^6.1.0",
"element-ui": "^2.15.13",
"eslint": "^7.32.0",
"eslint-friendly-formatter": "^4.0.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.11.0",
"eslint-plugin-vue": "^9.12.0",
"eslint-webpack-plugin": "^4.0.1",
"file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.1",
@@ -94,7 +94,7 @@
"sass": "1.62.1",
"sass-loader": "^12.6.0",
"style-loader": "^3.3.2",
"terser-webpack-plugin": "^5.3.7",
"terser-webpack-plugin": "^5.3.8",
"vue": "^2.7.14",
"vue-electron": "^1.0.6",
"vue-loader": "^15.10.1",
@@ -104,9 +104,9 @@
"vue-template-compiler": "^2.7.14",
"vuex": "^3.6.2",
"vuex-router-sync": "^5.0.0",
"webpack": "^5.80.0",
"webpack-cli": "^5.0.2",
"webpack-dev-server": "^4.13.3",
"webpack": "^5.82.1",
"webpack-cli": "^5.1.1",
"webpack-dev-server": "^4.15.0",
"webpack-hot-middleware": "^2.25.3",
"webpack-merge": "^5.8.0",
"worker-loader": "^3.0.8"
+55 -15
View File
@@ -1,8 +1,8 @@
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
import { readFile, unlink } from 'node:fs'
import { extname, basename } from 'node:path'
import { app, shell, dialog, ipcMain } from 'electron'
import is from 'electron-is'
import { readFile, unlink } from 'fs'
import { extname, basename } from 'path'
import { isEmpty, isEqual } from 'lodash'
import {
@@ -16,6 +16,7 @@ import {
fetchBtTrackerFromSource,
reduceTrackerString
} from '@shared/utils/tracker'
import { showItemInFolder } from './utils'
import logger from './core/Logger'
import Context from './core/Context'
import ConfigManager from './core/ConfigManager'
@@ -46,6 +47,8 @@ export default class Application extends EventEmitter {
this.initConfigManager()
this.setupLogger()
this.initLocaleManager()
this.setupApplicationMenu()
@@ -105,6 +108,18 @@ export default class Application extends EventEmitter {
this.configListeners = {}
}
setupLogger () {
const { userConfig } = this.configManager
const key = 'log-level'
const logLevel = userConfig.get(key)
logger.transports.file.level = logLevel
this.configListeners[key] = userConfig.onDidChange(key, async (newValue, oldValue) => {
logger.info(`[Motrix] detected ${key} value change event:`, newValue, oldValue)
logger.transports.file.level = newValue
})
}
initLocaleManager () {
this.locale = this.configManager.getLocale()
this.localeManager = setupLocaleManager(this.locale)
@@ -151,8 +166,10 @@ export default class Application extends EventEmitter {
}
async stopEngine () {
logger.info('[Motrix] stopEngine===>')
try {
await this.engineClient.shutdown({ force: true })
logger.info('[Motrix] stopEngine.setImmediate===>')
setImmediate(() => {
this.engine.stop()
})
@@ -509,22 +526,27 @@ export default class Application extends EventEmitter {
this.windowManager.destroyWindow(page)
}
async stop () {
stop () {
try {
await this.shutdownUPnPManager()
const promises = [
this.stopEngine(),
this.shutdownUPnPManager(),
this.energyManager.stopPowerSaveBlocker(),
this.trayManager.destroy()
]
this.energyManager.stopPowerSaveBlocker()
await this.stopEngine()
this.trayManager.destroy()
return promises
} catch (err) {
logger.warn('[Motrix] stop error: ', err.message)
}
}
async stopAllSettled () {
await Promise.allSettled(this.stop())
}
async quit () {
await this.stop()
await this.stopAllSettled()
app.exit()
}
@@ -639,12 +661,19 @@ export default class Application extends EventEmitter {
this.menuManager.updateMenuItemEnabledState('app.check-for-updates', true)
this.trayManager.updateMenuItemEnabledState('app.check-for-updates', true)
const win = this.windowManager.getWindow('index')
win.setProgressBar(0)
win.setProgressBar(1)
})
this.updateManager.on('update-cancelled', (event) => {
this.menuManager.updateMenuItemEnabledState('app.check-for-updates', true)
this.trayManager.updateMenuItemEnabledState('app.check-for-updates', true)
const win = this.windowManager.getWindow('index')
win.setProgressBar(-1)
})
this.updateManager.on('will-updated', async (event) => {
this.windowManager.setWillQuit(true)
await this.stop()
await this.stopAllSettled()
})
this.updateManager.on('update-error', (event) => {
@@ -654,7 +683,7 @@ export default class Application extends EventEmitter {
}
async relaunch () {
await this.stop()
await this.stopAllSettled()
app.relaunch()
app.exit()
}
@@ -666,7 +695,7 @@ export default class Application extends EventEmitter {
const sessionPath = this.context.get('session-path')
setTimeout(() => {
unlink(sessionPath, function (err) {
unlink(sessionPath, (err) => {
logger.info('[Motrix] Removed the download seesion file:', err)
})
@@ -795,6 +824,17 @@ export default class Application extends EventEmitter {
this.openExternal(url)
})
this.on('application:reveal-in-folder', (data) => {
const { gid, path } = data
logger.info('[Motrix] application:reveal-in-folder===>', path)
if (path) {
showItemInFolder(path)
}
if (gid) {
this.sendCommandToAll('application:show-task-detail', { gid })
}
})
this.on('help:official-website', () => {
const url = 'https://motrix.app/'
this.openExternal(url)
+2 -1
View File
@@ -1,4 +1,4 @@
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
import { app } from 'electron'
import is from 'electron-is'
@@ -183,6 +183,7 @@ export default class Launcher extends EventEmitter {
app.on('will-quit', () => {
logger.info('[Motrix] will-quit')
if (global.application) {
logger.info('[Motrix] will-quit.application.stop')
global.application.stop()
}
})
+1
View File
@@ -5,6 +5,7 @@ export default {
'new-bt-task': 'application:new-bt-task',
'pause-all-task': 'application:pause-all-task',
'resume-all-task': 'application:resume-all-task',
'reveal-in-folder': 'application:reveal-in-folder',
'preferences': 'application:preferences',
'about': 'application:about'
}
+10 -8
View File
@@ -3,14 +3,16 @@ import is from 'electron-is'
import Store from 'electron-store'
import {
getConfigBasePath,
getDhtPath,
getUserDownloadsPath,
getMaxConnectionPerServer
getMaxConnectionPerServer,
getUserDownloadsPath
} from '../utils/index'
import {
APP_RUN_MODE,
APP_THEME,
EMPTY_STRING,
ENGINE_RPC_PORT,
IP_VERSION,
LOGIN_SETTING_OPTIONS,
NGOSANG_TRACKERS_BEST_IP_URL_CDN,
@@ -34,17 +36,15 @@ export default class ConfigManager {
}
/**
* Some aria2 conf
* Aria2 Configuration Priority
* system.json > built-in aria2.conf
* https://aria2.github.io/manual/en/html/aria2c.html
*
* Best bt trackers
* @see https://github.com/ngosang/trackerslist
*
* @see https://github.com/XIU2/TrackersListCollection
*/
initSystemConfig () {
this.systemConfig = new Store({
name: 'system',
cwd: getConfigBasePath(),
/* eslint-disable quote-props */
defaults: {
'all-proxy': EMPTY_STRING,
@@ -72,7 +72,7 @@ export default class ConfigManager {
'no-proxy': EMPTY_STRING,
'pause-metadata': false,
'pause': true,
'rpc-listen-port': 16800,
'rpc-listen-port': ENGINE_RPC_PORT,
'rpc-secret': EMPTY_STRING,
'seed-ratio': 1,
'seed-time': 60,
@@ -87,6 +87,7 @@ export default class ConfigManager {
initUserConfig () {
this.userConfig = new Store({
name: 'user',
cwd: getConfigBasePath(),
// Schema need electron-store upgrade to 3.x.x,
// but it will cause the application build to fail.
// schema: {
@@ -111,6 +112,7 @@ export default class ConfigManager {
'last-check-update-time': 0,
'last-sync-tracker-time': 0,
'locale': app.getLocale(),
'log-level': 'warn',
'new-task-show-downloading': true,
'no-confirm-before-delete-task': false,
'open-at-login': false,
+6 -2
View File
@@ -3,7 +3,6 @@ import {
getEnginePath,
getAria2BinPath,
getAria2ConfPath,
getLogPath,
getSessionPath
} from '../utils'
@@ -14,12 +13,17 @@ export default class Context {
this.init()
}
getLogPath () {
const { path } = logger.transports.file.getFile()
return path
}
init () {
// The key of Context cannot be the same as that of userConfig and systemConfig.
this.context = {
platform: platform,
arch: arch,
'log-path': getLogPath(),
'log-path': this.getLogPath(),
'session-path': getSessionPath(),
'engine-path': getEnginePath(platform, arch),
'aria2-bin-path': getAria2BinPath(platform, arch),
+2
View File
@@ -5,6 +5,7 @@ import logger from './Logger'
let psbId
export default class EnergyManager {
startPowerSaveBlocker () {
logger.info('[Motrix] EnergyManager.startPowerSaveBlocker', psbId)
if (psbId && powerSaveBlocker.isStarted(psbId)) {
return
}
@@ -14,6 +15,7 @@ export default class EnergyManager {
}
stopPowerSaveBlocker () {
logger.info('[Motrix] EnergyManager.stopPowerSaveBlocker', psbId)
if (typeof psbId === 'undefined' || !powerSaveBlocker.isStarted(psbId)) {
return
}
+7 -6
View File
@@ -1,6 +1,6 @@
import { spawn } from 'node:child_process'
import { existsSync, writeFile, unlink } from 'node:fs'
import is from 'electron-is'
import { existsSync, writeFile, unlink } from 'fs'
import { spawn } from 'child_process'
import logger from './Logger'
import { getI18n } from '../ui/Locale'
@@ -43,9 +43,9 @@ export default class Engine {
const pid = this.instance.pid.toString()
this.writePidFile(pidPath, pid)
this.instance.once('close', function () {
this.instance.once('close', () => {
try {
unlink(pidPath, function (err) {
unlink(pidPath, (err) => {
if (err) {
logger.warn(`[Motrix] Unlink engine process pid file failed: ${err}`)
}
@@ -56,17 +56,18 @@ export default class Engine {
})
if (is.dev()) {
this.instance.stdout.on('data', function (data) {
this.instance.stdout.on('data', (data) => {
logger.log('[Motrix] engine stdout===>', data.toString())
})
this.instance.stderr.on('data', function (data) {
this.instance.stderr.on('data', (data) => {
logger.log('[Motrix] engine stderr===>', data.toString())
})
}
}
stop () {
logger.info('[Motrix] engine.stop.instance')
if (this.instance) {
this.instance.kill()
this.instance = null
+10 -1
View File
@@ -1,7 +1,16 @@
import { join } from 'node:path'
import is from 'electron-is'
import logger from 'electron-log'
logger.transports.file.level = is.production() ? 'warn' : 'silly'
import { IS_PORTABLE, PORTABLE_EXECUTABLE_DIR } from '@shared/constants'
const level = is.production() ? 'info' : 'silly'
logger.transports.file.level = level
if (IS_PORTABLE) {
logger.transports.file.resolvePath = () => join(PORTABLE_EXECUTABLE_DIR, 'main.log')
}
logger.info('[Motrix] Logger init')
logger.warn('[Motrix] Logger init')
+1 -1
View File
@@ -1,4 +1,4 @@
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
import { app } from 'electron'
import is from 'electron-is'
import { parse } from 'querystring'
+4 -2
View File
@@ -1,5 +1,5 @@
import { EventEmitter } from 'events'
import { resolve } from 'path'
import { EventEmitter } from 'node:events'
import { resolve } from 'node:path'
import { dialog } from 'electron'
import is from 'electron-is'
import { autoUpdater } from 'electron-updater'
@@ -72,6 +72,8 @@ export default class UpdateManager extends EventEmitter {
}).then(({ response }) => {
if (response === 0) {
this.updater.downloadUpdate()
} else {
this.emit('update-cancelled', info)
}
})
}
+1 -1
View File
@@ -1,5 +1,5 @@
import is from 'electron-is'
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
import { app } from 'electron'
import { bytesToSize } from '@shared/utils'
+4 -4
View File
@@ -5,20 +5,20 @@ const localeManager = new LocaleManager({
resources
})
export function getLocaleManager () {
export const getLocaleManager = () => {
return localeManager
}
export function setupLocaleManager (locale) {
export const setupLocaleManager = (locale) => {
localeManager.changeLanguageByLocale(locale)
return localeManager
}
export function getI18n () {
export const getI18n = () => {
return localeManager.getI18n()
}
export function getI18nTranslator () {
export const getI18nTranslator = () => {
return localeManager.getI18n().t
}
+1 -1
View File
@@ -1,4 +1,4 @@
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
import { Menu } from 'electron'
import keymap from '@shared/keymap'
+1 -1
View File
@@ -1,4 +1,4 @@
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
import { nativeTheme } from 'electron'
import { APP_THEME } from '@shared/constants'
+2 -2
View File
@@ -1,5 +1,5 @@
import { EventEmitter } from 'events'
import { join } from 'path'
import { EventEmitter } from 'node:events'
import { join } from 'node:path'
import { TouchBar, nativeImage } from 'electron'
import { handleCommand } from '../utils/menu'
+4 -3
View File
@@ -1,10 +1,11 @@
import { EventEmitter } from 'events'
import { join } from 'path'
import { EventEmitter } from 'node:events'
import { join } from 'node:path'
import { Tray, Menu, nativeImage } from 'electron'
import is from 'electron-is'
import { APP_RUN_MODE, APP_THEME } from '@shared/constants'
import { getInverseTheme } from '@shared/utils'
import logger from '../core/Logger'
import { getI18n } from './Locale'
import {
translateTemplate,
@@ -12,7 +13,6 @@ import {
updateStates
} from '../utils/menu'
import { convertArrayBufferToBuffer } from '../utils/index'
// import logger from '../core/Logger'
let tray = null
const { platform } = process
@@ -357,6 +357,7 @@ export default class TrayManager extends EventEmitter {
}
destroy () {
logger.info('[Motrix] TrayManager.destroy')
if (tray) {
this.unbindEvents()
}
+6 -2
View File
@@ -1,5 +1,5 @@
import { join } from 'path'
import { EventEmitter } from 'events'
import { join } from 'node:path'
import { EventEmitter } from 'node:events'
import { debounce } from 'lodash'
import { app, shell, screen, BrowserWindow } from 'electron'
import is from 'electron-is'
@@ -168,6 +168,10 @@ export default class WindowManager extends EventEmitter {
destroyWindow (page) {
const win = this.getWindow(page)
if (!win) {
return
}
this.removeWindow(page)
win.removeListener('closed')
win.removeListener('move')
+57 -33
View File
@@ -1,46 +1,54 @@
import { app, nativeTheme } from 'electron'
import { resolve } from 'node:path'
import { access, constants, existsSync, lstatSync } from 'node:fs'
import { app, nativeTheme, shell } from 'electron'
import is from 'electron-is'
import { resolve } from 'path'
import { existsSync, lstatSync } from 'fs'
import {
APP_THEME,
ENGINE_MAX_CONNECTION_PER_SERVER,
IP_VERSION
IP_VERSION,
IS_PORTABLE,
PORTABLE_EXECUTABLE_DIR
} from '@shared/constants'
import { engineBinMap, engineArchMap } from '../configs/engine'
import logger from '../core/Logger'
export function getLogPath () {
export const getUserDataPath = () => {
return IS_PORTABLE ? PORTABLE_EXECUTABLE_DIR : app.getPath('userData')
}
export const getSystemLogPath = () => {
return app.getPath('logs')
}
export function getDhtPath (protocol) {
const name = protocol === IP_VERSION.V6 ? 'dht6.dat' : 'dht.dat'
return resolve(app.getPath('userData'), `./${name}`)
}
export function getSessionPath () {
return resolve(app.getPath('userData'), './download.session')
}
export function getEnginePidPath () {
return resolve(app.getPath('userData'), './engine.pid')
}
export function getUserDataPath () {
return app.getPath('userData')
}
export function getUserDownloadsPath () {
export const getUserDownloadsPath = () => {
return app.getPath('downloads')
}
export function getEngineBin (platform) {
export const getConfigBasePath = () => {
const path = getUserDataPath()
return path
}
export const getSessionPath = () => {
return resolve(getUserDataPath(), './download.session')
}
export const getEnginePidPath = () => {
return resolve(getUserDataPath(), './engine.pid')
}
export const getDhtPath = (protocol) => {
const name = protocol === IP_VERSION.V6 ? 'dht6.dat' : 'dht.dat'
return resolve(getUserDataPath(), `./${name}`)
}
export const getEngineBin = (platform) => {
const result = engineBinMap[platform] || ''
return result
}
export function getEngineArch (platform, arch) {
export const getEngineArch = (platform, arch) => {
if (!['darwin', 'win32', 'linux'].includes(platform)) {
return ''
}
@@ -76,7 +84,7 @@ export const getAria2ConfPath = (platform, arch) => {
return resolve(base, './aria2.conf')
}
export function transformConfig (config) {
export const transformConfig = (config) => {
const result = []
for (const [k, v] of Object.entries(config)) {
if (v !== '') {
@@ -86,7 +94,7 @@ export function transformConfig (config) {
return result
}
export function isRunningInDmg () {
export const isRunningInDmg = () => {
if (!is.macOS() || is.dev()) {
return false
}
@@ -95,7 +103,7 @@ export function isRunningInDmg () {
return result
}
export function moveAppToApplicationsFolder (errorMsg = '') {
export const moveAppToApplicationsFolder = (errorMsg = '') => {
return new Promise((resolve, reject) => {
try {
const result = app.moveToApplicationsFolder()
@@ -110,7 +118,7 @@ export function moveAppToApplicationsFolder (errorMsg = '') {
})
}
export function splitArgv (argv) {
export const splitArgv = (argv) => {
const args = []
const extra = {}
for (const arg of argv) {
@@ -126,7 +134,7 @@ export function splitArgv (argv) {
return { args, extra }
}
export function parseArgvAsUrl (argv) {
export const parseArgvAsUrl = (argv) => {
const arg = argv[1]
if (!arg) {
return
@@ -137,7 +145,7 @@ export function parseArgvAsUrl (argv) {
}
}
export function checkIsSupportedSchema (url = '') {
export const checkIsSupportedSchema = (url = '') => {
const str = url.toLowerCase()
if (
str.startsWith('ftp:') ||
@@ -154,11 +162,11 @@ export function checkIsSupportedSchema (url = '') {
}
}
export function isDirectory (path) {
export const isDirectory = (path) => {
return existsSync(path) && lstatSync(path).isDirectory()
}
export function parseArgvAsFile (argv) {
export const parseArgvAsFile = (argv) => {
let arg = argv[1]
if (!arg || isDirectory(arg)) {
return
@@ -188,3 +196,19 @@ export const convertArrayBufferToBuffer = (arrayBuffer) => {
}
return buffer
}
export const showItemInFolder = (fullPath) => {
if (!fullPath) {
return
}
fullPath = resolve(fullPath)
access(fullPath, constants.F_OK, (err) => {
if (err) {
logger.warn(`[Motrix] ${fullPath} ${err ? 'does not exist' : 'exists'}`)
return
}
shell.showItemInFolder(fullPath)
})
}
+6 -6
View File
@@ -1,6 +1,6 @@
import { parse } from 'querystring'
export function concat (template, submenu, submenuToAdd) {
export const concat = (template, submenu, submenuToAdd) => {
submenuToAdd.forEach(sub => {
let relativeItem = null
if (sub.position) {
@@ -37,7 +37,7 @@ export function concat (template, submenu, submenuToAdd) {
})
}
export function merge (template, item) {
export const merge = (template, item) => {
if (item.id) {
const matched = findById(template, item.id)
if (matched) {
@@ -73,7 +73,7 @@ function findById (template, id) {
return null
}
export function translateTemplate (template, keystrokesByCommand, i18n) {
export const translateTemplate = (template, keystrokesByCommand, i18n) => {
for (const i in template) {
const item = template[i]
if (item.command) {
@@ -101,7 +101,7 @@ export function translateTemplate (template, keystrokesByCommand, i18n) {
return template
}
export function handleCommand (item) {
export const handleCommand = (item) => {
handleCommandBefore(item)
const args = item['command-arg']
@@ -158,7 +158,7 @@ function acceleratorForCommand (command, keystrokesByCommand) {
return null
}
export function flattenMenuItems (menu) {
export const flattenMenuItems = (menu) => {
const flattenItems = {}
menu.items.forEach(item => {
if (item.id) {
@@ -171,7 +171,7 @@ export function flattenMenuItems (menu) {
return flattenItems
}
export function updateStates (itemsById, visibleStates, enabledStates, checkedStates) {
export const updateStates = (itemsById, visibleStates, enabledStates, checkedStates) => {
if (visibleStates) {
for (const command in visibleStates) {
const item = itemsById[command]
@@ -1,4 +1,4 @@
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
export default class CommandManager extends EventEmitter {
constructor () {
+21
View File
@@ -0,0 +1,21 @@
import Icon from '@/components/Icons/Icon'
Icon.register({
'document': {
'width': 24,
'height': 24,
'raw': `<rect x="3" y="1" width="18" height="22"></rect>
<line x1="15" y1="6" x2="17" y2="6"></line>
<line x1="15" y1="10" x2="17" y2="10"></line>
<line x1="7" y1="14" x2="17" y2="14"></line>
<line x1="7" y1="18" x2="17" y2="18"></line>
<rect x="7" y="6" width="4" height="4"></rect>`,
'g': {
'stroke': 'currentColor',
'stroke-linecap': 'round',
'stroke-linejoin': 'round',
'stroke-width': '2',
'fill': 'none'
}
}
})
+49 -28
View File
@@ -226,7 +226,7 @@
<el-input
:show-password="hideRpcSecret"
placeholder="RPC Secret"
:maxlength="24"
:maxlength="64"
v-model="form.rpcSecret"
>
<i slot="append" @click.prevent="onRpcSecretDiceClick">
@@ -358,16 +358,6 @@
/>
</el-input>
</el-col>
<el-col class="form-item-sub" :span="24">
{{ $t('preferences.app-log-path') }}
<el-input placeholder="" disabled v-model="logPath">
<mo-show-in-folder
slot="append"
v-if="isRenderer"
:path="logPath"
/>
</el-input>
</el-col>
<el-col class="form-item-sub" :span="24">
{{ $t('preferences.download-session-path') }}
<el-input placeholder="" disabled v-model="sessionPath">
@@ -378,6 +368,30 @@
/>
</el-input>
</el-col>
<el-col class="form-item-sub" :span="24">
{{ $t('preferences.app-log-path') }}
<el-row :gutter="16">
<el-col :span="18">
<el-input placeholder="" disabled v-model="logPath">
<mo-show-in-folder
slot="append"
v-if="isRenderer"
:path="logPath"
/>
</el-input>
</el-col>
<el-col :span="6">
<el-select v-model="form.logLevel">
<el-option
v-for="item in logLevels"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
<el-col class="form-item-sub" :span="24">
<el-button plain type="warning" @click="() => onSessionResetClick()">
{{ $t('preferences.session-reset') }}
@@ -414,7 +428,12 @@
import ShowInFolder from '@/components/Native/ShowInFolder'
import SubnavSwitcher from '@/components/Subnav/SubnavSwitcher'
import userAgentMap from '@shared/ua'
import { trackerSourceOptions, ENGINE_RPC_PORT, EMPTY_STRING } from '@shared/constants'
import {
EMPTY_STRING,
ENGINE_RPC_PORT,
LOG_LEVELS,
trackerSourceOptions
} from '@shared/constants'
import {
backupConfig,
buildRpcUrl,
@@ -446,6 +465,7 @@
lastCheckUpdateTime,
lastSyncTrackerTime,
listenPort,
logLevel,
noProxy,
protocols,
rpcListenPort,
@@ -466,10 +486,9 @@
lastCheckUpdateTime,
lastSyncTrackerTime,
listenPort,
logLevel,
noProxy: convertCommaToLine(noProxy),
protocols: {
...protocols
},
protocols: { ...protocols },
rpcListenPort,
rpcSecret,
trackerSource,
@@ -528,6 +547,9 @@
rpcDefaultPort () {
return ENGINE_RPC_PORT
},
logLevels () {
return LOG_LEVELS
},
...mapState('preference', {
config: state => state.config,
aria2ConfPath: state => state.config.aria2ConfPath,
@@ -552,6 +574,12 @@
}
},
methods: {
handleLocaleChange (locale) {
const lng = getLanguage(locale)
getLocaleManager().changeLanguage(lng)
this.$electron.ipcRenderer.send('command',
'application:change-locale', lng)
},
onCheckUpdateClick () {
this.$electron.ipcRenderer.send('command', 'application:check-for-updates')
this.$msg.info(this.$t('app.checking-for-updates'))
@@ -615,7 +643,7 @@
},
onRpcSecretDiceClick () {
this.hideRpcSecret = false
const rpcSecret = randomize('Aa0', 12)
const rpcSecret = randomize('Aa0', 16)
this.form.rpcSecret = rpcSecret
setTimeout(() => {
@@ -684,9 +712,9 @@
} = data
if ('btAutoDownloadContent' in data) {
data.pauseMetadata = !btAutoDownloadContent
data.followMetalink = btAutoDownloadContent
data.followTorrent = btAutoDownloadContent
data.followMetalink = btAutoDownloadContent
data.pauseMetadata = !btAutoDownloadContent
}
if (btTracker) {
@@ -722,11 +750,6 @@
'application:auto-hide-window', autoHideWindow)
}
if (checkIsNeedRestart(data)) {
this.$electron.ipcRenderer.send('command',
'application:relaunch')
}
if (checkIsNeedRestart(data)) {
this.$electron.ipcRenderer.send('command', 'application:relaunch')
}
@@ -755,13 +778,11 @@
if (response === 0) {
if (changedConfig.basic.theme !== undefined) {
this.$electron.ipcRenderer.send('command',
'application:change-theme', backupConfig.theme)
'application:change-theme',
backupConfig.theme)
}
if (changedConfig.basic.locale !== undefined) {
const lng = getLanguage(backupConfig.locale)
getLocaleManager().changeLanguage(lng)
this.$electron.ipcRenderer.send('command',
'application:change-locale', lng)
this.handleLocaleChange(backupConfig.locale)
}
changedConfig.basic = {}
changedConfig.advanced = {}
+29 -13
View File
@@ -316,14 +316,18 @@
diffConfig,
extractSpeedUnit
} from '@shared/utils'
import { APP_RUN_MODE, ENGINE_MAX_CONCURRENT_DOWNLOADS } from '@shared/constants'
import {
APP_RUN_MODE,
EMPTY_STRING,
ENGINE_MAX_CONCURRENT_DOWNLOADS
} from '@shared/constants'
import { reduceTrackerString } from '@shared/utils/tracker'
const initForm = (config) => {
const {
autoHideWindow,
btSaveMetadata,
btForceEncryption,
btSaveMetadata,
dir,
engineMaxConnectionPerServer,
followMetalink,
@@ -349,11 +353,16 @@
theme,
traySpeedometer
} = config
const btAutoDownloadContent = followTorrent &&
followMetalink &&
!pauseMetadata
const result = {
autoHideWindow,
btAutoDownloadContent: !pauseMetadata,
btSaveMetadata,
btAutoDownloadContent,
btForceEncryption,
btSaveMetadata,
continue: config.continue,
dir,
engineMaxConnectionPerServer,
@@ -370,6 +379,7 @@
newTaskShowDownloading,
noConfirmBeforeDeleteTask,
openAtLogin,
pauseMetadata,
resumeAllWhenAppLaunched,
runMode,
seedRatio,
@@ -577,12 +587,18 @@
...changedConfig.advanced
}
const { btAutoDownloadContent, autoHideWindow, btTracker, noProxy } = data
const {
btAutoDownloadContent,
autoHideWindow,
btTracker,
noProxy,
rpcListenPort
} = data
if ('btAutoDownloadContent' in data) {
data.pauseMetadata = !btAutoDownloadContent
data.followMetalink = btAutoDownloadContent
data.followTorrent = btAutoDownloadContent
data.followMetalink = btAutoDownloadContent
data.pauseMetadata = !btAutoDownloadContent
}
if (btTracker) {
@@ -593,6 +609,10 @@
data.noProxy = convertLineToComma(noProxy)
}
if (rpcListenPort === EMPTY_STRING) {
data.rpcListenPort = this.rpcDefaultPort
}
console.log('[Motrix] preference changed data:', data)
this.$store.dispatch('preference/save', data)
@@ -614,11 +634,6 @@
'application:auto-hide-window', autoHideWindow)
}
if (checkIsNeedRestart(data)) {
this.$electron.ipcRenderer.send('command',
'application:relaunch')
}
if (checkIsNeedRestart(data)) {
this.$electron.ipcRenderer.send('command', 'application:relaunch')
}
@@ -649,7 +664,8 @@
if (response === 0) {
if (changedConfig.basic.theme !== undefined) {
this.$electron.ipcRenderer.send('command',
'application:change-theme', backupConfig.theme)
'application:change-theme',
backupConfig.theme)
}
if (changedConfig.basic.locale !== undefined) {
this.handleLocaleChange(this.formOriginal.locale)
+4
View File
@@ -3,6 +3,7 @@
custom-class="tab-title-dialog add-task-dialog"
width="67vw"
:visible="visible"
:top="dialogTop"
:show-close="false"
:before-close="beforeClose"
@open="handleOpen"
@@ -244,6 +245,9 @@
}),
taskType () {
return this.type
},
dialogTop () {
return this.showAdvanced ? '8vh' : '15vh'
}
},
watch: {
@@ -65,6 +65,9 @@
<el-button @click="toggleImageSelection()">
<mo-icon name="image" width="12" height="12" />
</el-button>
<el-button @click="toggleDocumentSelection()">
<mo-icon name="document" width="12" height="12" />
</el-button>
</el-button-group>
</el-col>
<el-col
@@ -85,6 +88,7 @@
import '@/components/Icons/video'
import '@/components/Icons/audio'
import '@/components/Icons/image'
import '@/components/Icons/document'
import {
NONE_SELECTED_FILES,
SELECTED_ALL_FILES
@@ -92,9 +96,10 @@
import {
bytesToSize,
calcProgress,
filterVideoFiles,
filterAudioFiles,
filterDocumentFiles,
filterImageFiles,
filterVideoFiles,
removeExtensionDot
} from '@shared/utils'
@@ -192,6 +197,10 @@
const filtered = filterImageFiles(this.files)
this.toggleSelection(filtered)
},
toggleDocumentSelection () {
const filtered = filterDocumentFiles(this.files)
this.toggleSelection(filtered)
},
handleRowDbClick (row, column, event) {
this.$refs.torrentTable.toggleRowSelection(row)
},
@@ -6,6 +6,11 @@
:label-width="formLabelWidth"
v-if="task"
>
<el-form-item :label="`${$t('task.task-gid')}: `">
<div class="form-static-value">
{{ task.gid }}
</div>
</el-form-item>
<el-form-item :label="`${$t('task.task-name')}: `">
<div class="form-static-value">
{{ taskFullName }}
+18
View File
@@ -84,6 +84,10 @@
}
}
.selected .task-item {
border-color: $--dk-task-item-hover-border-color;
}
.task-name {
color: $--dk-task-item-text-color;
}
@@ -233,6 +237,11 @@
}
}
.el-select-dropdown.is-multiple .el-select-dropdown__item.selected {
background-color: #3d3d3d;
color: $--color-primary;
}
.el-upload-dragger {
background-color: #2d2d2d;
border-color: #606060;
@@ -445,4 +454,13 @@
border-color: $--dk-popover-border-color;
}
.el-tag.el-tag--info.el-tag--light {
background-color: #5b5b5b;
border-color: #606060;
color: #e6e6e6;
}
.el-tag__close.el-icon-close {
color: #2d2d2d;
}
}
+9
View File
@@ -160,6 +160,14 @@ const selectAllTask = () => {
store.dispatch('task/selectAllTask')
}
const showTaskDetail = (payload = {}) => {
const { gid } = payload
navigateTaskList()
if (gid) {
store.dispatch('task/showTaskDetailByGid', gid)
}
}
const fetchPreference = () => {
store.dispatch('preference/fetchPreference')
}
@@ -179,6 +187,7 @@ commands.register('application:move-task-down', moveTaskDown)
commands.register('application:pause-all-task', pauseAllTask)
commands.register('application:resume-all-task', resumeAllTask)
commands.register('application:select-all-task', selectAllTask)
commands.register('application:show-task-detail', showTaskDetail)
commands.register('application:update-preference-config', fetchPreference)
commands.register('application:update-system-theme', updateSystemTheme)
+8
View File
@@ -88,6 +88,14 @@ const actions = {
dispatch('updateCurrentTaskItem', data)
})
},
showTaskDetailByGid ({ commit, dispatch }, gid) {
api.fetchTaskItem({ gid })
.then((task) => {
dispatch('updateCurrentTaskItem', task)
commit('UPDATE_CURRENT_TASK_GID', task.gid)
commit('CHANGE_TASK_DETAIL_VISIBLE', true)
})
},
showTaskDetail ({ commit, dispatch }, task) {
dispatch('updateCurrentTaskItem', task)
commit('UPDATE_CURRENT_TASK_GID', task.gid)
+8 -7
View File
@@ -1,6 +1,6 @@
import { access, constants } from 'node:fs'
import { resolve } from 'node:path'
import { shell, nativeTheme } from '@electron/remote'
import { access, constants } from 'fs'
import { resolve } from 'path'
import { Message } from 'element-ui'
import {
@@ -9,14 +9,15 @@ import {
} from '@shared/utils'
import { APP_THEME, TASK_STATUS } from '@shared/constants'
export function showItemInFolder (fullPath, { errorMsg }) {
export const showItemInFolder = (fullPath, { errorMsg }) => {
if (!fullPath) {
return
}
fullPath = resolve(fullPath)
access(fullPath, constants.F_OK, (err) => {
console.log(`[Motrix] ${fullPath} ${err ? 'does not exist' : 'exists'}`)
if (err) {
console.warn(`[Motrix] ${fullPath} ${err ? 'does not exist' : 'exists'}`)
if (err && errorMsg) {
Message.error(errorMsg)
return
}
@@ -34,7 +35,7 @@ export const openItem = async (fullPath) => {
return result
}
export function getTaskFullPath (task) {
export const getTaskFullPath = (task) => {
const { dir, files, bittorrent } = task
let result = resolve(dir)
@@ -108,7 +109,7 @@ export const moveTaskFilesToTrash = (task) => {
return deleteResult1 && deleteResult2
}
export function getSystemTheme () {
export const getSystemTheme = () => {
return nativeTheme.shouldUseDarkColors ? APP_THEME.DARK : APP_THEME.LIGHT
}
+1 -1
View File
@@ -65,7 +65,7 @@ export class Aria2 extends JSONRPCClient {
defaultOptions = Object.assign({}, JSONRPCClient.defaultOptions, {
secure: false,
host: 'localhost',
port: 6800,
port: 16800,
secret: '',
path: '/jsonrpc'
})
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict'
import { EventEmitter } from 'events'
import { EventEmitter } from 'node:events'
import _fetch from 'node-fetch'
import _WebSocket from 'ws'
import { JSONRPCError } from './JSONRPCError'
+1 -2
View File
@@ -15,14 +15,13 @@ const userKeys = [
'last-check-update-time',
'last-sync-tracker-time',
'locale',
'log-path',
'log-level',
'new-task-show-downloading',
'no-confirm-before-delete-task',
'open-at-login',
'protocols',
'resume-all-when-app-launched',
'run-mode',
'session-path',
'show-progress-bar',
'task-notification',
'theme',
+33
View File
@@ -1,4 +1,6 @@
export const EMPTY_STRING = ''
export const PORTABLE_EXECUTABLE_DIR = process.env.PORTABLE_EXECUTABLE_DIR
export const IS_PORTABLE = PORTABLE_EXECUTABLE_DIR && PORTABLE_EXECUTABLE_DIR !== EMPTY_STRING
export const APP_THEME = {
AUTO: 'auto',
@@ -27,6 +29,15 @@ export const TASK_STATUS = {
SEEDING: 'seeding'
}
export const LOG_LEVELS = [
'error',
'warn',
'info',
'verbose',
'debug',
'silly'
]
export const MAX_NUM_OF_DIRECTORIES = 5
export const ENGINE_RPC_HOST = '127.0.0.1'
@@ -218,7 +229,9 @@ export const IMAGE_SUFFIXES = [
'.ai',
'.bmp',
'.eps',
'.fig',
'.gif',
'.heic',
'.icn',
'.ico',
'.jpeg',
@@ -232,6 +245,7 @@ export const IMAGE_SUFFIXES = [
'.webp',
'.xd'
]
export const AUDIO_SUFFIXES = [
'.aac',
'.ape',
@@ -243,6 +257,7 @@ export const AUDIO_SUFFIXES = [
'.wav',
'.wma'
]
export const VIDEO_SUFFIXES = [
'.avi',
'.m4v',
@@ -264,3 +279,21 @@ export const SUB_SUFFIXES = [
'.sst',
'.sub'
]
export const DOCUMENT_SUFFIXES = [
'.azw3',
'.csv',
'.doc',
'.docx',
'.epub',
'.key',
'.mobi',
'.numbers',
'.pages',
'.pdf',
'.ppt',
'.pptx',
'.txt',
'.xsl',
'.xslx'
]
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'تم التنزيل',
'selected-files-sum': 'الملف المختار: {{selectedFilesCount}} ملف, الحجم الكلي {{selectedFilesTotalSize}}',
'select-at-least-one': 'الرجاء تحديد ملف واحد على الأقل',
'task-gid': 'GID',
'task-name': 'اسم التحميل',
'task-out': 'إعادة تسمية',
'task-out-tips': 'اختياري',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Изтеглено',
'selected-files-sum': 'избрано: {{selectedFilesCount}} файлове, общ размер {{selectedFilesTotalSize}}',
'select-at-least-one': 'Моля, изберете поне един файл',
'task-gid': 'GID',
'task-name':'Име на изтегляне',
'task-out': 'Преименуване',
'task-out-tips':'незадължителен',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Descarregat',
'selected-files-sum': 'Seleccionat: {{selectedFilesCount}} arxius, mida total: {{selectedFilesTotalSize}}',
'select-at-least-one': 'Seleccioneu com a mínim un fitxer',
'task-gid': 'GID',
'task-name': 'Nom de la tasca',
'task-out': 'Canviar nom',
'task-out-tips': 'Opcional',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Heruntergeladen',
'selected-files-sum': 'Ausgewählt: {{selectedFilesCount}} Dateien, insgesamt {{selectedFilesTotalSize}}',
'select-at-least-one': 'Bitte wählen Sie mindestens eine Datei aus',
'task-gid': 'GID',
'task-name': 'Aufgaben Name',
'task-out': 'Dateiname',
'task-out-tips': 'Optional',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Έγινε λήψη',
'selected-files-sum': 'Επιλεγμένα: {{selectedFilesCount}} αρχεία, συνολικό μέγεθος {{selectedFilesTotalSize}}',
'select-at-least-one': 'Επιλέξτε τουλάχιστον ένα αρχείο',
'task-gid': 'GID',
'task-name': 'Όνομα εργασίας',
'task-out': 'Άλλο Όνομα',
'task-out-tips': 'Προαιρετικό',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Completed',
'selected-files-sum': 'Selected: {{selectedFilesCount}} files, total size {{selectedFilesTotalSize}}',
'select-at-least-one': 'Please select at least one file',
'task-gid': 'GID',
'task-name': 'Task Name',
'task-out': 'Rename',
'task-out-tips': 'Optional',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Terminado',
'selected-files-sum': 'Seleccionado: {{selectedFilesCount}} archivos, tamaño total {{selectedFilesTotalSize}}',
'select-at-least-one': 'Seleccione al menos un archivo',
'task-gid': 'GID',
'task-name': 'Nombre de la tarea',
'task-out': 'Renombrar',
'task-out-tips': 'Opcional',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'تکمیل شده',
'selected-files-sum': 'گزیده: {{selectedFilesCount}} پرونده، اندازه کل {{selectedFilesTotalSize}}',
'select-at-least-one': 'لطفاً حداقل یک پرونده را انتخاب کنید',
'task-gid': 'GID',
'task-name': 'نام وظیفه',
'task-out': 'تغییرنام',
'task-out-tips': 'اختیاری',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Téléchargé',
'selected-files-sum': 'Sélectionné: {{selectedFilesCount}} fichiers, total {{selectedFilesTotalSize}}',
'select-at-least-one': 'Veuillez sélectionner au moins un fichier',
'task-gid': 'GID',
'task-name': 'Nom de la tâche',
'task-out': 'Renommer',
'task-out-tips': 'Optionel',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Letöltött',
'selected-files-sum': 'Kijelölve: {{selectedFilesCount}} fájl, teljes méret {{selectedFilesTotalSize}}',
'select-at-least-one': 'Válasszon legalább egy fájlt',
'task-gid': 'GID',
'task-name': 'Feladat név',
'task-out': 'Átnevezés',
'task-out-tips': 'Opcionális',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Ukuran domplet',
'selected-files-sum': 'Terpilih: {{selectedFilesCount}} berkas, total ukuran {{selectedFilesTotalSize}}',
'select-at-least-one': 'Pilih setidaknya satu file',
'task-gid': 'GID',
'task-name': 'Nama Tugas',
'task-out': 'Ubah Nama',
'task-out-tips': 'Opsional',
+2 -2
View File
@@ -112,7 +112,7 @@ export const availableLanguages = [
}
]
function checkLngIsAvailable (locale) {
const checkLngIsAvailable = (locale) => {
return availableLanguages.some(lng => lng.value === locale)
}
@@ -133,7 +133,7 @@ function checkLngIsAvailable (locale) {
* pt, pt-BR, pt-PT
* zh, zh-CN, zh-HK, zh-TW
*/
export function getLanguage (locale = 'en-US') {
export const getLanguage = (locale = 'en-US') => {
if (checkLngIsAvailable(locale)) {
return locale
}
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Completato',
'selected-files-sum': 'Selezionati: {{selectedFilesCount}} files, dimensione totale {{selectedFilesTotalSize}}',
'select-at-least-one': 'Seleziona almeno un file',
'task-gid': 'GID',
'task-name': 'Nome attività',
'task-out': 'Rinomina',
'task-out-tips': '(opzionale)',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': '完成サイズ',
'selected-files-sum': '選択済み:{{selectedFilesCount}}ファイル、合計{{selectedFilesTotalSize}}',
'select-at-least-one': '少なくとも1つのファイルを選択してください',
'task-gid': 'GID',
'task-name': 'タスク名',
'task-out': '名前を変更',
'task-out-tips': 'オプション',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': '전체 크기',
'selected-files-sum': '파일 {{selectedFilesCount}}개 선택됨, 총 {{selectedFilesTotalSize}}',
'select-at-least-one': '하나 이상의 파일을 선택하십시오',
'task-gid': 'GID',
'task-name': '작업 이름',
'task-out': '이름 변경',
'task-out-tips': '선택',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Fullført',
'selected-files-sum': 'Valgt: {{selectedFilesCount}} filer, total størrelse {{selectedFilesTotalSize}}',
'select-at-least-one': 'Velg minst én fil',
'task-gid': 'GID',
'task-name': 'Oppgavenavn',
'task-out': 'Gi nytt navn',
'task-out-tips': 'Valgfri',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Gedownload',
'selected-files-sum': 'Geselecteerd: {{selectedFilesCount}} bestanden, totale grootte {{selectedFilesTotalSize}}',
'select-at-least-one': 'Kies a.u.b. ten minste 1 bestand',
'task-gid': 'GID',
'task-name': 'Taak naam',
'task-out': 'Hernoemen',
'task-out-tips': 'Optioneel',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Pobrano',
'selected-files-sum': 'Wybrano: {{selectedFilesCount}} plików, Wspólny rozmiar {{selectedFilesTotalSize}}',
'select-at-least-one': 'Wybierz co najmniej jeden plik',
'task-gid': 'GID',
'task-name': 'Nazwa zadania',
'task-out': 'Zmień nazwę',
'task-out-tips': 'Opcjonalne',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Baixado',
'selected-files-sum': 'Selecionado: {{selectedFilesCount}} arquivos, total {{selectedFilesTotalSize}}',
'select-at-least-one': 'Selecione pelo menos um arquivo',
'task-gid': 'GID',
'task-name': 'Nome da Tarefa',
'task-out': 'Renomear',
'task-out-tips': 'Opcional',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Descărcat',
'selected-files-sum': 'Selectate: {{selectedFilesCount}} fișiere, dimensiune totală {{selectedFilesTotalSize}}',
'select-at-least-one': 'Vă rugăm să selectați cel puțin un fișier',
'task-gid': 'GID',
'task-name': 'Nume sarcină',
'task-out': 'Redenumeşte',
'task-out-tips': 'Opțional',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Завершенный',
'selected-files-sum': 'Выбрано: {{selectedFilesCount}} файлов, общий размер {{selectedFilesTotalSize}}',
'select-at-least-one': 'Пожалуйста, выберите хотя бы один файл',
'task-gid': 'GID',
'task-name': 'Имя загрузки',
'task-out': 'Переименовать',
'task-out-tips': 'Необязательный',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'สำเร็จ',
'selected-files-sum': 'เลือกแล้ว: {{selectedFilesCount}} ไฟล์, ขนามรวม {{selectedFilesTotalSize}}',
'select-at-least-one': 'โปรดเลือกอย่างน้อยหนึ่งไฟล์',
'task-gid': 'GID',
'task-name': 'ชื่องาน',
'task-out': 'เปลี่ยนชื่อ',
'task-out-tips': 'ไม่จำเป็น',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'İndirildi',
'selected-files-sum': 'Seçildi: {{selectedFilesCount}} dosya sayısı, total {{selectedFilesTotalSize}}',
'select-at-least-one': 'Lütfen en az bir dosya seçin',
'task-gid': 'GID',
'task-name': 'Görev Adı',
'task-out': 'Dosya Adı',
'task-out-tips': 'Opsiyonel',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Завершений',
'selected-files-sum': 'Обрано: {{selectedFilesCount}} файлів, загальний розмір {{selectedFilesTotalSize}}',
'select-at-least-one': 'Виберіть принаймні один файл',
'task-gid': 'GID',
'task-name': 'Ім\'я завдання',
'task-out': 'Перейменувати',
'task-out-tips': 'Необов\'язковий',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': 'Đã hoàn thành',
'selected-files-sum': 'Đã chọn: {{selectedFilesCount}} tập tin, tổng kích thước {{selectedFilesTotalSize}}',
'select-at-least-one': 'Vui lòng chọn ít nhất một tệp',
'task-gid': 'GID',
'task-name': 'Tên tác vụ',
'task-out': 'Đổi tên',
'task-out-tips': 'Không bắt buộc',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': '已完成',
'selected-files-sum': '已选:{{selectedFilesCount}}个文件,共 {{selectedFilesTotalSize}}',
'select-at-least-one': '请选择至少一个文件',
'task-gid': 'GID',
'task-name': '任务名称',
'task-out': '重命名',
'task-out-tips': '选填',
+1
View File
@@ -17,6 +17,7 @@ export default {
'file-completed-size': '已下載',
'selected-files-sum': '已選取:{{selectedFilesCount}}個檔案,總計 {{selectedFilesTotalSize}}',
'select-at-least-one': '請選擇至少一個檔案',
'task-gid': 'GID',
'task-name': '任務名稱',
'task-out': '重新命名',
'task-out-tips': '選填',
+64 -54
View File
@@ -28,10 +28,11 @@ import {
SUB_SUFFIXES,
UNKNOWN_PEERID,
SUPPORT_RTL_LOCALES,
UNKNOWN_PEERID_NAME
UNKNOWN_PEERID_NAME,
DOCUMENT_SUFFIXES
} from '@shared/constants'
export function bytesToSize (bytes, precision = 1) {
export const bytesToSize = (bytes, precision = 1) => {
const b = parseInt(bytes, 10)
const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
if (b === 0) { return '0 KB' }
@@ -55,7 +56,7 @@ export const extractSpeedUnit = (speed = '') => {
return match[2]
}
export function bitfieldToPercent (text) {
export const bitfieldToPercent = (text) => {
const len = text.length - 1
let p
let one = 0
@@ -69,7 +70,7 @@ export function bitfieldToPercent (text) {
return Math.floor(one / (4 * len) * 100).toString()
}
export function bitfieldToGraphic (text) {
export const bitfieldToGraphic = (text) => {
const len = text.length
let result = ''
for (let i = 0; i < len; i++) {
@@ -78,7 +79,7 @@ export function bitfieldToGraphic (text) {
return result
}
export function peerIdParser (str) {
export const peerIdParser = (str) => {
if (!str || str === UNKNOWN_PEERID) {
return UNKNOWN_PEERID_NAME
}
@@ -101,7 +102,7 @@ export function peerIdParser (str) {
return result
}
export function calcProgress (totalLength, completedLength, decimal = 2) {
export const calcProgress = (totalLength, completedLength, decimal = 2) => {
const total = parseInt(totalLength, 10)
const completed = parseInt(completedLength, 10)
if (total === 0 || completed === 0) {
@@ -112,7 +113,7 @@ export function calcProgress (totalLength, completedLength, decimal = 2) {
return result
}
export function calcRatio (totalLength, uploadLength) {
export const calcRatio = (totalLength, uploadLength) => {
const total = parseInt(totalLength, 10)
const upload = parseInt(uploadLength, 10)
if (total === 0 || upload === 0) {
@@ -124,7 +125,7 @@ export function calcRatio (totalLength, uploadLength) {
return result
}
export function timeRemaining (totalLength, completedLength, downloadSpeed) {
export const timeRemaining = (totalLength, completedLength, downloadSpeed) => {
const remainingLength = totalLength - completedLength
return Math.ceil(remainingLength / downloadSpeed)
}
@@ -142,7 +143,7 @@ export function timeRemaining (totalLength, completedLength, downloadSpeed) {
* second: 's'
* }
*/
export function timeFormat (seconds, { prefix = '', suffix = '', i18n }) {
export const timeFormat = (seconds, { prefix = '', suffix = '', i18n }) => {
let result = ''
let hours = ''
let minutes = ''
@@ -174,7 +175,7 @@ export function timeFormat (seconds, { prefix = '', suffix = '', i18n }) {
return result ? `${prefix} ${result} ${suffix}` : result
}
export function localeDateTimeFormat (timestamp, locale) {
export const localeDateTimeFormat = (timestamp, locale) => {
if (!timestamp) {
return ''
}
@@ -193,7 +194,7 @@ export function localeDateTimeFormat (timestamp, locale) {
})
}
export function ellipsis (str = '', maxLen = 64) {
export const ellipsis = (str = '', maxLen = 64) => {
const len = str.length
let result = str
if (len < maxLen) {
@@ -207,7 +208,7 @@ export function ellipsis (str = '', maxLen = 64) {
return result
}
export function getFileSelection (files = []) {
export const getFileSelection = (files = []) => {
console.log('getFileSelection===>', files)
const selectedFiles = files.filter((file) => file.selected)
if (files.length === 0 || selectedFiles.length === 0) {
@@ -226,7 +227,7 @@ export function getFileSelection (files = []) {
return result
}
export function getTaskName (task, options = {}) {
export const getTaskName = (task, options = {}) => {
const o = {
defaultName: '',
maxLen: 64, // -1: No limit length
@@ -251,7 +252,7 @@ export function getTaskName (task, options = {}) {
return result
}
export function getFileNameFromFile (file) {
export const getFileNameFromFile = (file) => {
if (!file) {
return ''
}
@@ -270,17 +271,17 @@ export function getFileNameFromFile (file) {
return path.substring(index + 1)
}
export function isMagnetTask (task) {
export const isMagnetTask = (task) => {
const { bittorrent } = task
return bittorrent && !bittorrent.info
}
export function checkTaskIsSeeder (task) {
export const checkTaskIsSeeder = (task) => {
const { bittorrent, seeder } = task
return !!bittorrent && seeder === 'true'
}
export function getTaskUri (task, withTracker = false) {
export const getTaskUri = (task, withTracker = false) => {
const { files } = task
let result = ''
if (checkTaskIsBT(task)) {
@@ -296,7 +297,7 @@ export function getTaskUri (task, withTracker = false) {
return result
}
export function buildMagnetLink (task, withTracker = false, btTracker = []) {
export const buildMagnetLink = (task, withTracker = false, btTracker = []) => {
const { bittorrent, infoHash } = task
const { info } = bittorrent
@@ -319,7 +320,7 @@ export function buildMagnetLink (task, withTracker = false, btTracker = []) {
return result
}
export function checkTaskTitleIsEmpty (task) {
export const checkTaskTitleIsEmpty = (task) => {
const { files, bittorrent } = task
const [file] = files
const { path } = file
@@ -330,17 +331,17 @@ export function checkTaskTitleIsEmpty (task) {
return result === ''
}
export function checkTaskIsBT (task = {}) {
export const checkTaskIsBT = (task = {}) => {
const { bittorrent } = task
return !!bittorrent
}
export function isTorrent (file) {
export const isTorrent = (file) => {
const { name, type } = file
return name.endsWith('.torrent') || type === 'application/x-bittorrent'
}
export function getAsBase64 (file, callback) {
export const getAsBase64 = (file, callback) => {
const reader = new FileReader()
reader.addEventListener('load', () => {
// https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
@@ -350,7 +351,7 @@ export function getAsBase64 (file, callback) {
reader.readAsDataURL(file)
}
export function mergeTaskResult (response = []) {
export const mergeTaskResult = (response = []) => {
let result = []
for (const res of response) {
result = result.concat(...res)
@@ -358,7 +359,7 @@ export function mergeTaskResult (response = []) {
return result
}
export function changeKeysCase (obj, caseConverter) {
export const changeKeysCase = (obj, caseConverter) => {
const result = {}
if (isEmpty(obj) || !isFunction(caseConverter)) {
return result
@@ -372,19 +373,19 @@ export function changeKeysCase (obj, caseConverter) {
return result
}
export function changeKeysToCamelCase (obj = {}) {
export const changeKeysToCamelCase = (obj = {}) => {
return changeKeysCase(obj, camelCase)
}
export function changeKeysToKebabCase (obj = {}) {
export const changeKeysToKebabCase = (obj = {}) => {
return changeKeysCase(obj, kebabCase)
}
export function validateNumber (n) {
export const validateNumber = (n) => {
return !isNaN(parseFloat(n)) && isFinite(n) && Number(n) === n
}
export function fixValue (obj = {}) {
export const fixValue = (obj = {}) => {
const result = {}
for (const [k, v] of Object.entries(obj)) {
if (v === 'true') {
@@ -400,7 +401,7 @@ export function fixValue (obj = {}) {
return result
}
export function separateConfig (options) {
export const separateConfig = (options) => {
// user
const user = {}
// system
@@ -422,13 +423,14 @@ export function separateConfig (options) {
}
}
export function compactUndefined (arr = []) {
export const compactUndefined = (arr = []) => {
return arr.filter((item) => {
return item !== undefined
})
}
export function splitTextRows (text = '') {
export const splitTextRows = (text = '') => {
text = `${text}`
let result = text
.replace(/(?:\\\r\\\n|\\\r|\\\n)/g, ' ')
.replace(/(?:\r\n|\r|\n)/g, '\n')
@@ -437,38 +439,45 @@ export function splitTextRows (text = '') {
return result
}
export function convertCommaToLine (text = '') {
export const convertCommaToLine = (text = '') => {
text = `${text}`
let arr = text.split(',')
arr = arr.map((row) => row.trim())
const result = arr.join('\n').trim()
return result
}
export function convertLineToComma (text = '') {
export const convertLineToComma = (text = '') => {
const result = text.trim().replace(/(?:\r\n|\r|\n)/g, ',')
return result
}
export function filterVideoFiles (files = []) {
export const filterVideoFiles = (files = []) => {
const suffix = [...VIDEO_SUFFIXES, ...SUB_SUFFIXES]
return files.filter((item) => {
return suffix.includes(item.extension)
})
}
export function filterAudioFiles (files = []) {
export const filterAudioFiles = (files = []) => {
return files.filter((item) => {
return AUDIO_SUFFIXES.includes(item.extension)
})
}
export function filterImageFiles (files = []) {
export const filterImageFiles = (files = []) => {
return files.filter((item) => {
return IMAGE_SUFFIXES.includes(item.extension)
})
}
export function isAudioOrVideo (uri = '') {
export const filterDocumentFiles = (files = []) => {
return files.filter((item) => {
return DOCUMENT_SUFFIXES.includes(item.extension)
})
}
export const isAudioOrVideo = (uri = '') => {
const suffixs = [...AUDIO_SUFFIXES, ...VIDEO_SUFFIXES]
const result = suffixs.some((suffix) => {
return uri.includes(suffix)
@@ -476,7 +485,7 @@ export function isAudioOrVideo (uri = '') {
return result
}
export function needCheckCopyright (links = '') {
export const needCheckCopyright = (links = '') => {
const uris = splitTaskLinks(links)
const avs = uris.filter(uri => {
return isAudioOrVideo(uri)
@@ -486,7 +495,7 @@ export function needCheckCopyright (links = '') {
return result
}
export function decodeThunderLink (url = '') {
export const decodeThunderLink = (url = '') => {
if (!url.startsWith('thunder://')) {
return url
}
@@ -498,7 +507,7 @@ export function decodeThunderLink (url = '') {
return result
}
export function splitTaskLinks (links = '') {
export const splitTaskLinks = (links = '') => {
const temp = compact(splitTextRows(links))
const result = temp.map((item) => {
return decodeThunderLink(item)
@@ -506,13 +515,13 @@ export function splitTaskLinks (links = '') {
return result
}
export function detectResource (content) {
export const detectResource = (content) => {
return RESOURCE_TAGS.some((type) => {
return content.includes(type)
})
}
export function buildFileList (rawFile) {
export const buildFileList = (rawFile) => {
rawFile.uid = Date.now()
const file = {
status: 'ready',
@@ -526,15 +535,15 @@ export function buildFileList (rawFile) {
return fileList
}
export function isRTL (locale = 'en-US') {
export const isRTL = (locale = 'en-US') => {
return SUPPORT_RTL_LOCALES.includes(locale)
}
export function getLangDirection (locale = 'en-US') {
export const getLangDirection = (locale = 'en-US') => {
return isRTL(locale) ? 'rtl' : 'ltr'
}
export function listTorrentFiles (files) {
export const listTorrentFiles = (files) => {
const result = files.map((file, index) => {
const extension = getFileExtension(file.path)
const item = {
@@ -549,20 +558,20 @@ export function listTorrentFiles (files) {
return result
}
export function getFileName (fullPath) {
export const getFileName = (fullPath) => {
// eslint-disable-next-line
return fullPath.replace(/^.*[\\\/]/, '')
}
export function getFileExtension (filename) {
export const getFileExtension = (filename) => {
return filename.slice((filename.lastIndexOf('.') - 1 >>> 0) + 2)
}
export function removeExtensionDot (extension = '') {
export const removeExtensionDot = (extension = '') => {
return extension.replace('.', '')
}
export function diffConfig (current = {}, next = {}) {
export const diffConfig = (current = {}, next = {}) => {
const curr = pick(current, Object.keys(next))
const result = omitBy(next, (val, key) => {
if (isArray(val) || isPlainObject(val)) {
@@ -570,14 +579,15 @@ export function diffConfig (current = {}, next = {}) {
}
return curr[key] === val
})
return result
}
export function calcFormLabelWidth (locale) {
export const calcFormLabelWidth = (locale) => {
return locale.startsWith('de') ? '28%' : '25%'
}
export function parseHeader (header = '') {
export const parseHeader = (header = '') => {
header = header.trim()
let result = {}
if (!header) {
@@ -596,7 +606,7 @@ export function parseHeader (header = '') {
return result
}
export function formatOptionsForEngine (options = {}) {
export const formatOptionsForEngine = (options = {}) => {
const result = {}
Object.keys(options).forEach((key) => {
@@ -611,7 +621,7 @@ export function formatOptionsForEngine (options = {}) {
return result
}
export function buildRpcUrl (options = {}) {
export const buildRpcUrl = (options = {}) => {
const { port, secret } = options
let result = `${ENGINE_RPC_HOST}:${port}/jsonrpc`
if (secret) {
@@ -622,7 +632,7 @@ export function buildRpcUrl (options = {}) {
return result
}
export function checkIsNeedRestart (changed = {}) {
export const checkIsNeedRestart = (changed = {}) => {
let result = false
if (isEmpty(changed)) {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 103 KiB

+309 -173
View File
@@ -34,21 +34,26 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f"
integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==
"@babel/core@^7.21.4":
version "7.21.4"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659"
integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==
"@babel/compat-data@^7.21.5":
version "7.21.7"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc"
integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==
"@babel/core@^7.21.8":
version "7.21.8"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4"
integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.21.4"
"@babel/generator" "^7.21.4"
"@babel/helper-compilation-targets" "^7.21.4"
"@babel/helper-module-transforms" "^7.21.2"
"@babel/helpers" "^7.21.0"
"@babel/parser" "^7.21.4"
"@babel/generator" "^7.21.5"
"@babel/helper-compilation-targets" "^7.21.5"
"@babel/helper-module-transforms" "^7.21.5"
"@babel/helpers" "^7.21.5"
"@babel/parser" "^7.21.8"
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.4"
"@babel/types" "^7.21.4"
"@babel/traverse" "^7.21.5"
"@babel/types" "^7.21.5"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@@ -65,6 +70,16 @@
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
"@babel/generator@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f"
integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==
dependencies:
"@babel/types" "^7.21.5"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
"@babel/helper-annotate-as-pure@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
@@ -80,7 +95,7 @@
"@babel/helper-explode-assignable-expression" "^7.18.6"
"@babel/types" "^7.18.9"
"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4":
"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7":
version "7.21.4"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656"
integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==
@@ -91,6 +106,17 @@
lru-cache "^5.1.1"
semver "^6.3.0"
"@babel/helper-compilation-targets@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366"
integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==
dependencies:
"@babel/compat-data" "^7.21.5"
"@babel/helper-validator-option" "^7.21.0"
browserslist "^4.21.3"
lru-cache "^5.1.1"
semver "^6.3.0"
"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0":
version "7.21.4"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18"
@@ -130,6 +156,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
"@babel/helper-environment-visitor@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba"
integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==
"@babel/helper-explode-assignable-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096"
@@ -174,7 +205,7 @@
dependencies:
"@babel/types" "^7.21.4"
"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2":
"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11":
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2"
integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==
@@ -188,6 +219,20 @@
"@babel/traverse" "^7.21.2"
"@babel/types" "^7.21.2"
"@babel/helper-module-transforms@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420"
integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==
dependencies:
"@babel/helper-environment-visitor" "^7.21.5"
"@babel/helper-module-imports" "^7.21.4"
"@babel/helper-simple-access" "^7.21.5"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/helper-validator-identifier" "^7.19.1"
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.5"
"@babel/types" "^7.21.5"
"@babel/helper-optimise-call-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
@@ -200,6 +245,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629"
integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==
"@babel/helper-plugin-utils@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56"
integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==
"@babel/helper-remap-async-to-generator@^7.18.9":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
@@ -229,6 +279,13 @@
dependencies:
"@babel/types" "^7.20.2"
"@babel/helper-simple-access@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee"
integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==
dependencies:
"@babel/types" "^7.21.5"
"@babel/helper-skip-transparent-expression-wrappers@^7.20.0":
version "7.20.0"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
@@ -248,6 +305,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
"@babel/helper-string-parser@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd"
integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==
"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
version "7.19.1"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
@@ -268,14 +330,14 @@
"@babel/traverse" "^7.20.5"
"@babel/types" "^7.20.5"
"@babel/helpers@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e"
integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==
"@babel/helpers@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08"
integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==
dependencies:
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.0"
"@babel/types" "^7.21.0"
"@babel/traverse" "^7.21.5"
"@babel/types" "^7.21.5"
"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6":
version "7.18.6"
@@ -291,6 +353,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17"
integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==
"@babel/parser@^7.21.5", "@babel/parser@^7.21.8":
version "7.21.8"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8"
integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
@@ -478,6 +545,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.19.0"
"@babel/plugin-syntax-import-meta@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-json-strings@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
@@ -541,12 +615,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-transform-arrow-functions@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551"
integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==
"@babel/plugin-transform-arrow-functions@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929"
integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==
dependencies:
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/helper-plugin-utils" "^7.21.5"
"@babel/plugin-transform-async-to-generator@^7.20.7":
version "7.20.7"
@@ -586,12 +660,12 @@
"@babel/helper-split-export-declaration" "^7.18.6"
globals "^11.1.0"
"@babel/plugin-transform-computed-properties@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa"
integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==
"@babel/plugin-transform-computed-properties@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44"
integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==
dependencies:
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/helper-plugin-utils" "^7.21.5"
"@babel/template" "^7.20.7"
"@babel/plugin-transform-destructuring@^7.21.3":
@@ -624,12 +698,12 @@
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-transform-for-of@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e"
integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==
"@babel/plugin-transform-for-of@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc"
integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==
dependencies:
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/helper-plugin-utils" "^7.21.5"
"@babel/plugin-transform-function-name@^7.18.9":
version "7.18.9"
@@ -662,14 +736,14 @@
"@babel/helper-module-transforms" "^7.20.11"
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/plugin-transform-modules-commonjs@^7.21.2":
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7"
integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==
"@babel/plugin-transform-modules-commonjs@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc"
integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==
dependencies:
"@babel/helper-module-transforms" "^7.21.2"
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/helper-simple-access" "^7.20.2"
"@babel/helper-module-transforms" "^7.21.5"
"@babel/helper-plugin-utils" "^7.21.5"
"@babel/helper-simple-access" "^7.21.5"
"@babel/plugin-transform-modules-systemjs@^7.20.11":
version "7.20.11"
@@ -726,12 +800,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-transform-regenerator@^7.20.5":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d"
integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==
"@babel/plugin-transform-regenerator@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e"
integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==
dependencies:
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/helper-plugin-utils" "^7.21.5"
regenerator-transform "^0.15.1"
"@babel/plugin-transform-reserved-words@^7.18.6":
@@ -789,12 +863,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.18.9"
"@babel/plugin-transform-unicode-escapes@^7.18.10":
version "7.18.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246"
integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==
"@babel/plugin-transform-unicode-escapes@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2"
integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==
dependencies:
"@babel/helper-plugin-utils" "^7.18.9"
"@babel/helper-plugin-utils" "^7.21.5"
"@babel/plugin-transform-unicode-regex@^7.18.6":
version "7.18.6"
@@ -804,14 +878,14 @@
"@babel/helper-create-regexp-features-plugin" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/preset-env@^7.21.4":
version "7.21.4"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58"
integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==
"@babel/preset-env@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb"
integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==
dependencies:
"@babel/compat-data" "^7.21.4"
"@babel/helper-compilation-targets" "^7.21.4"
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/compat-data" "^7.21.5"
"@babel/helper-compilation-targets" "^7.21.5"
"@babel/helper-plugin-utils" "^7.21.5"
"@babel/helper-validator-option" "^7.21.0"
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7"
@@ -836,6 +910,7 @@
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-syntax-import-assertions" "^7.20.0"
"@babel/plugin-syntax-import-meta" "^7.10.4"
"@babel/plugin-syntax-json-strings" "^7.8.3"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
@@ -845,22 +920,22 @@
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
"@babel/plugin-syntax-top-level-await" "^7.14.5"
"@babel/plugin-transform-arrow-functions" "^7.20.7"
"@babel/plugin-transform-arrow-functions" "^7.21.5"
"@babel/plugin-transform-async-to-generator" "^7.20.7"
"@babel/plugin-transform-block-scoped-functions" "^7.18.6"
"@babel/plugin-transform-block-scoping" "^7.21.0"
"@babel/plugin-transform-classes" "^7.21.0"
"@babel/plugin-transform-computed-properties" "^7.20.7"
"@babel/plugin-transform-computed-properties" "^7.21.5"
"@babel/plugin-transform-destructuring" "^7.21.3"
"@babel/plugin-transform-dotall-regex" "^7.18.6"
"@babel/plugin-transform-duplicate-keys" "^7.18.9"
"@babel/plugin-transform-exponentiation-operator" "^7.18.6"
"@babel/plugin-transform-for-of" "^7.21.0"
"@babel/plugin-transform-for-of" "^7.21.5"
"@babel/plugin-transform-function-name" "^7.18.9"
"@babel/plugin-transform-literals" "^7.18.9"
"@babel/plugin-transform-member-expression-literals" "^7.18.6"
"@babel/plugin-transform-modules-amd" "^7.20.11"
"@babel/plugin-transform-modules-commonjs" "^7.21.2"
"@babel/plugin-transform-modules-commonjs" "^7.21.5"
"@babel/plugin-transform-modules-systemjs" "^7.20.11"
"@babel/plugin-transform-modules-umd" "^7.18.6"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5"
@@ -868,17 +943,17 @@
"@babel/plugin-transform-object-super" "^7.18.6"
"@babel/plugin-transform-parameters" "^7.21.3"
"@babel/plugin-transform-property-literals" "^7.18.6"
"@babel/plugin-transform-regenerator" "^7.20.5"
"@babel/plugin-transform-regenerator" "^7.21.5"
"@babel/plugin-transform-reserved-words" "^7.18.6"
"@babel/plugin-transform-shorthand-properties" "^7.18.6"
"@babel/plugin-transform-spread" "^7.20.7"
"@babel/plugin-transform-sticky-regex" "^7.18.6"
"@babel/plugin-transform-template-literals" "^7.18.9"
"@babel/plugin-transform-typeof-symbol" "^7.18.9"
"@babel/plugin-transform-unicode-escapes" "^7.18.10"
"@babel/plugin-transform-unicode-escapes" "^7.21.5"
"@babel/plugin-transform-unicode-regex" "^7.18.6"
"@babel/preset-modules" "^0.1.5"
"@babel/types" "^7.21.4"
"@babel/types" "^7.21.5"
babel-plugin-polyfill-corejs2 "^0.3.3"
babel-plugin-polyfill-corejs3 "^0.6.0"
babel-plugin-polyfill-regenerator "^0.4.1"
@@ -912,13 +987,20 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
"@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4":
"@babel/runtime@^7.20.6", "@babel/runtime@^7.8.4":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
dependencies:
regenerator-runtime "^0.13.11"
"@babel/runtime@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200"
integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==
dependencies:
regenerator-runtime "^0.13.11"
"@babel/template@^7.18.10", "@babel/template@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
@@ -928,7 +1010,7 @@
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
"@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.7.0":
"@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.2", "@babel/traverse@^7.7.0":
version "7.21.4"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36"
integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==
@@ -944,6 +1026,22 @@
debug "^4.1.0"
globals "^11.1.0"
"@babel/traverse@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133"
integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==
dependencies:
"@babel/code-frame" "^7.21.4"
"@babel/generator" "^7.21.5"
"@babel/helper-environment-visitor" "^7.21.5"
"@babel/helper-function-name" "^7.21.0"
"@babel/helper-hoist-variables" "^7.18.6"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/parser" "^7.21.5"
"@babel/types" "^7.21.5"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@7.0.0-beta.35":
version "7.0.0-beta.35"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960"
@@ -962,6 +1060,15 @@
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
"@babel/types@^7.21.5":
version "7.21.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6"
integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==
dependencies:
"@babel/helper-string-parser" "^7.21.5"
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
"@bany/curl-to-json@^1.2.7":
version "1.2.7"
resolved "https://registry.yarnpkg.com/@bany/curl-to-json/-/curl-to-json-1.2.7.tgz#bb1973af03948ec1c2adc31eb237b5a27a0b5daa"
@@ -1027,10 +1134,10 @@
minimist "^1.2.6"
plist "^3.0.5"
"@electron/rebuild@^3.2.11":
version "3.2.12"
resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.12.tgz#2c26c260686a6232963e8b538af3955735ee5275"
integrity sha512-2P9TpygstHQ13LtCAK2N2XB9D1lQq5sZ73dv3YXwKoJ78/XG8Gjbm+44vWtjNiEtj98a3dVZc8Pw3YVS8Iu0KA==
"@electron/rebuild@^3.2.13":
version "3.2.13"
resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c"
integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g==
dependencies:
"@malept/cross-spawn-promise" "^2.0.0"
chalk "^4.0.0"
@@ -1333,6 +1440,13 @@
dependencies:
"@types/node" "*"
"@types/debug@^4.1.6":
version "4.1.7"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
dependencies:
"@types/ms" "*"
"@types/eslint-scope@^3.7.3":
version "3.7.4"
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
@@ -1373,6 +1487,13 @@
"@types/qs" "*"
"@types/serve-static" "*"
"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11":
version "9.0.13"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
dependencies:
"@types/node" "*"
"@types/html-minifier-terser@^6.0.0":
version "6.1.0"
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
@@ -1431,6 +1552,11 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
"@types/ms@*":
version "0.7.31"
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
"@types/node@*":
version "18.15.11"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f"
@@ -1471,11 +1597,6 @@
resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
"@types/semver@^7.3.6":
version "7.3.13"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
"@types/serve-index@^1.9.1":
version "1.9.1"
resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278"
@@ -1684,20 +1805,20 @@
"@webassemblyjs/ast" "1.11.5"
"@xtuc/long" "4.2.2"
"@webpack-cli/configtest@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f"
integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==
"@webpack-cli/configtest@^2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.0.tgz#b59b33377b1b896a9a7357cfc643b39c1524b1e6"
integrity sha512-K/vuv72vpfSEZoo5KIU0a2FsEoYdW0DUMtMpB5X3LlUwshetMZRZRxB7sCsVji/lFaSxtQQ3aM9O4eMolXkU9w==
"@webpack-cli/info@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0"
integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==
"@webpack-cli/serve@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.2.tgz#10aa290e44a182c02e173a89452781b1acbc86d9"
integrity sha512-S9h3GmOmzUseyeFW3tYNnWS7gNUuwxZ3mmMq0JyW78Vx1SGKPSkt5bT4pB0rUnVfHjP0EL9gW2bOzmtiTfQt0A==
"@webpack-cli/serve@^2.0.4":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.4.tgz#3982ee6f8b42845437fc4d391e93ac5d9da52f0f"
integrity sha512-0xRgjgDLdz6G7+vvDLlaRpFatJaJ69uTalZLRSMX5B3VUrDmXcrVA3+6fXXQgmYz7bY9AAgs348XQdmtLsK41A==
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
@@ -1859,26 +1980,27 @@ app-builder-bin@4.0.0:
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
app-builder-lib@24.2.1:
version "24.2.1"
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.2.1.tgz#0b54e022167408efbcdd7e911c9def6f908a4d5e"
integrity sha512-3LNOcaiXMo/iUdnETPLh1HnPksh+0pl9smIKpUC3ZJa0y2UnChddz8BKTWNc+iN/P4zSiV23hoXAp78Occ1xkA==
app-builder-lib@24.4.0:
version "24.4.0"
resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.4.0.tgz#1606f94e99366eea9e7507228961b8396e40d546"
integrity sha512-EcdqtWvg1LAApKCfyRBukcVkmsa94s2e1VKHjZLpvA9/D14QEt8rHhffYeaA+cH/pVeoNVn2ob735KnfJKEEow==
dependencies:
"7zip-bin" "~5.1.1"
"@develar/schema-utils" "~2.6.5"
"@electron/notarize" "^1.2.3"
"@electron/osx-sign" "^1.0.4"
"@electron/rebuild" "^3.2.11"
"@electron/rebuild" "^3.2.13"
"@electron/universal" "1.3.4"
"@malept/flatpak-bundler" "^0.4.0"
"@types/fs-extra" "9.0.13"
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.9"
builder-util "24.1.2"
builder-util-runtime "9.2.0"
builder-util "24.4.0"
builder-util-runtime "9.2.1"
chromium-pickle-js "^0.2.0"
debug "^4.3.4"
ejs "^3.1.8"
electron-publish "24.1.2"
electron-publish "24.4.0"
form-data "^4.0.0"
fs-extra "^10.1.0"
hosted-git-info "^4.1.0"
@@ -2024,10 +2146,10 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
axios@^1.3.6:
version "1.3.6"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.6.tgz#1ace9a9fb994314b5f6327960918406fa92c6646"
integrity sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==
axios@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
@@ -2261,31 +2383,24 @@ buffer@^5.1.0, buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
builder-util-runtime@9.1.1:
version "9.1.1"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz#2da7b34e78a64ad14ccd070d6eed4662d893bd60"
integrity sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==
builder-util-runtime@9.2.1:
version "9.2.1"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd"
integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==
dependencies:
debug "^4.3.4"
sax "^1.2.4"
builder-util-runtime@9.2.0:
version "9.2.0"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.0.tgz#64e7764f0a3b8bcba520efbd5f64e7926815b148"
integrity sha512-6S0FLP5n57MgSVEypgjq5veUMd8C8NKt/IgRRXyYXYnhRG9AxxAB4/uULQhDG4JbAoeb5ahOTPC1jAxT0l2ylQ==
dependencies:
debug "^4.3.4"
sax "^1.2.4"
builder-util@24.1.2:
version "24.1.2"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.1.2.tgz#5cbd9df77674580c0b5337c0e28df7b575b32048"
integrity sha512-DLq66sChtOi6+FE8EEMvZ+GA42ssVB65TKtioEhq8mmVRcbDKt/OMfMFDLyCQVw+2HuBr40UtPmojKLYsG0kNQ==
builder-util@24.4.0:
version "24.4.0"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.4.0.tgz#dbb201a118fd573180e6a1070cf4c0be6de80cd7"
integrity sha512-tONb/GIK1MKa1BcOPHE1naId3o5nj6gdka5kP7yUJh2DOfF+jMq3laiu+UOZH6A7ZtkMtnGNMYFKFTIv408n/A==
dependencies:
"7zip-bin" "~5.1.1"
"@types/debug" "^4.1.6"
app-builder-bin "4.0.0"
bluebird-lst "^1.0.9"
builder-util-runtime "9.2.0"
builder-util-runtime "9.2.1"
chalk "^4.1.2"
cross-spawn "^7.0.3"
debug "^4.3.4"
@@ -2386,10 +2501,10 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a"
integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==
cfonts@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/cfonts/-/cfonts-3.1.1.tgz#81bf9cfce2fcee581046d8912a55bab4366f9cfc"
integrity sha512-PFknL/y+QVzoVmnm4X/PLd+t5Bt4aSvFBebpvyjcVUb81jHIVHFKvAopADbTk9tnfLLC2RHFZgdVa9YAwQp1mw==
cfonts@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cfonts/-/cfonts-3.2.0.tgz#3c72b79679e48d19c620614d1134326a1f22cdec"
integrity sha512-CFGxRY6aBuOgK85bceCpmMMhuyO6IwcAyyeapB//DtRzm7NbAEsDuuZzBoQxVonz+C2BmZ3swqB/YgcmW+rh3A==
dependencies:
supports-color "^8"
window-size "^1.1.1"
@@ -3041,14 +3156,14 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
dmg-builder@24.2.1:
version "24.2.1"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.2.1.tgz#29c8796c50ba689a2f8876586e9e96198db99cc5"
integrity sha512-k38ou8K8W+GDrhvVpgla3wZy2eNzZMmRDuSqSW6Ufmk/M1oXPhOYu6n7KH5A0TFo04TUMunO7PjZq7VFDZATbw==
dmg-builder@24.4.0:
version "24.4.0"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.4.0.tgz#46c80f119465f6a7275766c72b4f3d514cc8013d"
integrity sha512-p5z9Cx539GSBYb+b09Z+hMhuBTh/BrI71VRg4rgF6f2xtIRK/YlTGVS/O08k5OojoyhZcpS7JXxDVSmQoWgiiQ==
dependencies:
app-builder-lib "24.2.1"
builder-util "24.1.2"
builder-util-runtime "9.2.0"
app-builder-lib "24.4.0"
builder-util "24.4.0"
builder-util-runtime "9.2.1"
fs-extra "^10.1.0"
iconv-lite "^0.6.2"
js-yaml "^4.1.0"
@@ -3194,16 +3309,16 @@ ejs@^3.1.8:
dependencies:
jake "^10.8.5"
electron-builder@^24.2.0:
version "24.2.1"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.2.1.tgz#ac00e607bbc24366b2060b986bd95cfb357379f9"
integrity sha512-f7TcKz5FKzB7PE18fVmjw/i9QQ2bjfSO7Izuvd20R52LJRW5TGCOUuIHyG0Yp74HBvTfXd6cZIzBThiGGXZE+w==
electron-builder@^24.4.0:
version "24.4.0"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.4.0.tgz#8846efa45bac8f6b9afc181abf71a4e12530f045"
integrity sha512-D5INxodxaUIJgEX6p/fqBd8wQNS8XRAToNIJ9SQC+taNS5D73ZsjLuXiRraFGCB0cVk9KeKhEkdEOH5AaVya4g==
dependencies:
app-builder-lib "24.2.1"
builder-util "24.1.2"
builder-util-runtime "9.2.0"
app-builder-lib "24.4.0"
builder-util "24.4.0"
builder-util-runtime "9.2.1"
chalk "^4.1.2"
dmg-builder "24.2.1"
dmg-builder "24.4.0"
fs-extra "^10.1.0"
is-ci "^3.0.0"
lazy-val "^1.0.5"
@@ -3239,13 +3354,14 @@ electron-log@^4.4.8:
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.4.8.tgz#fcb9f714dbcaefb6ac7984c4683912c74730248a"
integrity sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==
electron-publish@24.1.2:
version "24.1.2"
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.1.2.tgz#263bc4e320b14775ec338526d3736c769363a5be"
integrity sha512-Hxkd+iFSbTvTVgagXzx+RsJOjSRLH1oxu/UNQY9hSqm6WiWvsBjrhNdY2SJqHGB0Jg6bejZdLO6/t3O9OXIAHQ==
electron-publish@24.4.0:
version "24.4.0"
resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.4.0.tgz#a58f49ecd727620f65372881788ebb1a9b853284"
integrity sha512-U3mnVSxIfNrLW7ZnwiedFhcLf6ExPFXgAsx89WpfQFsV4gFAt/LG+H74p0m9NSvsLXiZuF82yXoxi7Ou8GHq4Q==
dependencies:
builder-util "24.1.2"
builder-util-runtime "9.2.0"
"@types/fs-extra" "^9.0.11"
builder-util "24.4.0"
builder-util-runtime "9.2.1"
chalk "^4.1.2"
fs-extra "^10.1.0"
lazy-val "^1.0.5"
@@ -3264,25 +3380,24 @@ electron-to-chromium@^1.4.284:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.365.tgz#ccd9e352d4493aa288d87e6ea36f3edf350c045e"
integrity sha512-FRHZO+1tUNO4TOPXmlxetkoaIY8uwHzd1kKopK/Gx2SKn1L47wJXWD44wxP5CGRyyP98z/c8e1eBzJrgPeiBOg==
electron-updater@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-5.3.0.tgz#3ba0d20407911a2edc5a68bee45c5aa2023e9ff8"
integrity sha512-iKEr7yQBcvnQUPnSDYGSWC9t0eF2YbZWeYYYZzYxdl+HiRejXFENjYMnYjoOm2zxyD6Cr2JTHZhp9pqxiXuCOw==
electron-updater@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.1.0.tgz#e645d68cb697392bfca07743a09b54bb522aa1f2"
integrity sha512-v5i2alA54JNQ7nmXBOaM4c2v9FzvykSed2XGbwmGsp123c7jsd7eJJiDEtEGCntcA2gwsH6OgXScab2NdAGMbw==
dependencies:
"@types/semver" "^7.3.6"
builder-util-runtime "9.1.1"
fs-extra "^10.0.0"
builder-util-runtime "9.2.1"
fs-extra "^10.1.0"
js-yaml "^4.1.0"
lazy-val "^1.0.5"
lodash.escaperegexp "^4.1.2"
lodash.isequal "^4.5.0"
semver "^7.3.5"
semver "^7.3.8"
typed-emitter "^2.1.0"
electron@^22.3.5:
version "22.3.6"
resolved "https://registry.yarnpkg.com/electron/-/electron-22.3.6.tgz#ab79a2da20e83b02ec9cbb22a4069468e6949b4f"
integrity sha512-/1/DivFHH5AWa/uOuqpkeg12/jjicjkBU8kYv70oeqRFwXzoyuJhgwlzER4jZXnbGjF5Nxz9900oXq/QzAViAw==
electron@^22.3.9:
version "22.3.9"
resolved "https://registry.yarnpkg.com/electron/-/electron-22.3.9.tgz#8b4551f9bcea436a0110e5680ba23df56819a4e2"
integrity sha512-C+ws4LnGxd+BQGVbKRgR9L1hfslk1L6FHYBm3a7dWL6xcobVm4dLyqShT/5N8lNRXlN1BhIYsWmrAisdd537Tw==
dependencies:
"@electron/get" "^2.0.0"
"@types/node" "^16.11.26"
@@ -3338,10 +3453,10 @@ enhanced-resolve@^0.9.1:
memory-fs "^0.2.0"
tapable "^0.1.8"
enhanced-resolve@^5.13.0:
version "5.13.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275"
integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==
enhanced-resolve@^5.14.0:
version "5.14.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz#0b6c676c8a3266c99fa281e4433a706f5c0c61c4"
integrity sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
@@ -3569,10 +3684,10 @@ eslint-plugin-promise@^6.1.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816"
integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==
eslint-plugin-vue@^9.11.0:
version "9.11.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.11.0.tgz#99a247455c02181f24d9240d422380fd16dd630c"
integrity sha512-bBCJAZnkBV7ATH4Z1E7CvN3nmtS4H7QUU3UBxPdo8WohRU+yHjnQRALpTbxMVcz0e4Mx3IyxIdP5HYODMxK9cQ==
eslint-plugin-vue@^9.12.0:
version "9.12.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.12.0.tgz#3174eaaedc143bf7b392b3defa3f18889606bb73"
integrity sha512-xH8PgpDW2WwmFSmRfs/3iWogef1CJzQqX264I65zz77jDuxF2yLy7+GA2diUM8ZNATuSl1+UehMQkb5YEyau5w==
dependencies:
"@eslint-community/eslint-utils" "^4.3.0"
natural-compare "^1.4.0"
@@ -7127,6 +7242,17 @@ terser-webpack-plugin@^5.3.7:
serialize-javascript "^6.0.1"
terser "^5.16.5"
terser-webpack-plugin@^5.3.8:
version "5.3.8"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz#415e03d2508f7de63d59eca85c5d102838f06610"
integrity sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==
dependencies:
"@jridgewell/trace-mapping" "^0.3.17"
jest-worker "^27.4.5"
schema-utils "^3.1.1"
serialize-javascript "^6.0.1"
terser "^5.16.8"
terser@^5.10.0, terser@^5.16.5:
version "5.16.9"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.9.tgz#7a28cb178e330c484369886f2afd623d9847495f"
@@ -7137,6 +7263,16 @@ terser@^5.10.0, terser@^5.16.5:
commander "^2.20.0"
source-map-support "~0.5.20"
terser@^5.16.8:
version "5.17.3"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.3.tgz#7f908f16b3cdf3f6c0f8338e6c1c674837f90d25"
integrity sha512-AudpAZKmZHkG9jueayypz4duuCFJMMNGRMwaPvQKWfxKedh8Z2x3OCoDqIIi1xx5+iwx1u6Au8XQcc9Lke65Yg==
dependencies:
"@jridgewell/source-map" "^0.3.2"
acorn "^8.5.0"
commander "^2.20.0"
source-map-support "~0.5.20"
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -7516,15 +7652,15 @@ webidl-conversions@^3.0.0:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
webpack-cli@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.2.tgz#2954c10ecb61c5d4dad6f68ee2d77f051741946c"
integrity sha512-4y3W5Dawri5+8dXm3+diW6Mn1Ya+Dei6eEVAdIduAmYNLzv1koKVAqsfgrrc9P2mhrYHQphx5htnGkcNwtubyQ==
webpack-cli@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.1.tgz#c211ac6d911e77c512978f7132f0d735d4a97ace"
integrity sha512-OLJwVMoXnXYH2ncNGU8gxVpUtm3ybvdioiTvHgUyBuyMLKiVvWy+QObzBsMtp5pH7qQoEuWgeEUQ/sU3ZJFzAw==
dependencies:
"@discoveryjs/json-ext" "^0.5.0"
"@webpack-cli/configtest" "^2.0.1"
"@webpack-cli/configtest" "^2.1.0"
"@webpack-cli/info" "^2.0.1"
"@webpack-cli/serve" "^2.0.2"
"@webpack-cli/serve" "^2.0.4"
colorette "^2.0.14"
commander "^10.0.1"
cross-spawn "^7.0.3"
@@ -7546,10 +7682,10 @@ webpack-dev-middleware@^5.3.1:
range-parser "^1.2.1"
schema-utils "^4.0.0"
webpack-dev-server@^4.13.3:
version "4.13.3"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz#9feb740b8b56b886260bae1360286818a221bae8"
integrity sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug==
webpack-dev-server@^4.15.0:
version "4.15.0"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21"
integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==
dependencies:
"@types/bonjour" "^3.5.9"
"@types/connect-history-api-fallback" "^1.3.5"
@@ -7604,10 +7740,10 @@ 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.80.0:
version "5.80.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.80.0.tgz#3e660b4ab572be38c5e954bdaae7e2bf76010fdc"
integrity sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==
webpack@^5.82.1:
version "5.82.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.1.tgz#8f38c78e53467556e8a89054ebd3ef6e9f67dbab"
integrity sha512-C6uiGQJ+Gt4RyHXXYt+v9f+SN1v83x68URwgxNQ98cvH8kxiuywWGP4XeNZ1paOzZ63aY3cTciCEQJNFUljlLw==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^1.0.0"
@@ -7618,7 +7754,7 @@ webpack@^5.80.0:
acorn-import-assertions "^1.7.6"
browserslist "^4.14.5"
chrome-trace-event "^1.0.2"
enhanced-resolve "^5.13.0"
enhanced-resolve "^5.14.0"
es-module-lexer "^1.2.1"
eslint-scope "5.1.1"
events "^3.2.0"