Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 830bc9336e | |||
| 3b049219e4 | |||
| bbc68b6a8a | |||
| 0afc01080d | |||
| af1cc4db8e | |||
| 8defa9ee71 | |||
| cb6d9f2b20 | |||
| 9f6c31ffa3 | |||
| 0b3161ca6f | |||
| c79bdff4b8 | |||
| b92957668b | |||
| b1b52e2640 | |||
| a39fa2979c | |||
| e0a74f7979 | |||
| a7b8333710 | |||
| 77850da0fe | |||
| 71f4eeeb25 | |||
| e5eace479d | |||
| 7e927fea10 | |||
| 38cd952b44 | |||
| b07fedeba0 | |||
| 2bbaae5d7d | |||
| 003e9ffccb | |||
| 7a51dbaf5e |
@@ -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: 环境
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@ v1.5.10 提示
|
||||
运行以下命令进行安装:
|
||||
|
||||
```bash
|
||||
yay motrix
|
||||
yay -S motrix
|
||||
```
|
||||
|
||||
#### Flatpak
|
||||
|
||||
@@ -93,7 +93,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
@@ -1,2 +1,2 @@
|
||||
provider: generic
|
||||
url: 'https://dl.motrix.app/release/'
|
||||
url: 'https://dl.motrix.app/releases/'
|
||||
|
||||
@@ -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.
+10
-10
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Motrix",
|
||||
"version": "1.8.11",
|
||||
"version": "1.8.16",
|
||||
"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.5",
|
||||
"@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,7 +54,7 @@
|
||||
"@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",
|
||||
@@ -67,13 +67,13 @@
|
||||
"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.7",
|
||||
"electron-builder": "^24.3.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",
|
||||
@@ -104,7 +104,7 @@
|
||||
"vue-template-compiler": "^2.7.14",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-router-sync": "^5.0.0",
|
||||
"webpack": "^5.80.0",
|
||||
"webpack": "^5.81.0",
|
||||
"webpack-cli": "^5.0.2",
|
||||
"webpack-dev-server": "^4.13.3",
|
||||
"webpack-hot-middleware": "^2.25.3",
|
||||
|
||||
+38
-10
@@ -46,6 +46,8 @@ export default class Application extends EventEmitter {
|
||||
|
||||
this.initConfigManager()
|
||||
|
||||
this.setupLogger()
|
||||
|
||||
this.initLocaleManager()
|
||||
|
||||
this.setupApplicationMenu()
|
||||
@@ -105,6 +107,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 +165,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 +525,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()
|
||||
}
|
||||
|
||||
@@ -642,9 +663,16 @@ export default class Application extends EventEmitter {
|
||||
win.setProgressBar(0)
|
||||
})
|
||||
|
||||
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 +682,7 @@ export default class Application extends EventEmitter {
|
||||
}
|
||||
|
||||
async relaunch () {
|
||||
await this.stop()
|
||||
await this.stopAllSettled()
|
||||
app.relaunch()
|
||||
app.exit()
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
})
|
||||
|
||||
@@ -111,6 +111,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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -67,6 +67,7 @@ export default class Engine {
|
||||
}
|
||||
|
||||
stop () {
|
||||
logger.info('[Motrix] engine.stop.instance')
|
||||
if (this.instance) {
|
||||
this.instance.kill()
|
||||
this.instance = null
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import is from 'electron-is'
|
||||
import logger from 'electron-log'
|
||||
|
||||
logger.transports.file.level = is.production() ? 'warn' : 'silly'
|
||||
logger.transports.file.level = is.production() ? 'info' : 'silly'
|
||||
logger.info('[Motrix] Logger init')
|
||||
logger.warn('[Motrix] Logger init')
|
||||
|
||||
|
||||
@@ -72,6 +72,8 @@ export default class UpdateManager extends EventEmitter {
|
||||
}).then(({ response }) => {
|
||||
if (response === 0) {
|
||||
this.updater.downloadUpdate()
|
||||
} else {
|
||||
this.emit('update-cancelled', info)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ 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()
|
||||
}
|
||||
|
||||
@@ -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,7 @@
|
||||
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 { trackerSourceOptions, ENGINE_RPC_PORT, EMPTY_STRING, LOG_LEVELS } from '@shared/constants'
|
||||
import {
|
||||
backupConfig,
|
||||
buildRpcUrl,
|
||||
@@ -446,6 +460,7 @@
|
||||
lastCheckUpdateTime,
|
||||
lastSyncTrackerTime,
|
||||
listenPort,
|
||||
logLevel,
|
||||
noProxy,
|
||||
protocols,
|
||||
rpcListenPort,
|
||||
@@ -466,6 +481,7 @@
|
||||
lastCheckUpdateTime,
|
||||
lastSyncTrackerTime,
|
||||
listenPort,
|
||||
logLevel,
|
||||
noProxy: convertCommaToLine(noProxy),
|
||||
protocols: {
|
||||
...protocols
|
||||
@@ -528,6 +544,9 @@
|
||||
rpcDefaultPort () {
|
||||
return ENGINE_RPC_PORT
|
||||
},
|
||||
logLevels () {
|
||||
return LOG_LEVELS
|
||||
},
|
||||
...mapState('preference', {
|
||||
config: state => state.config,
|
||||
aria2ConfPath: state => state.config.aria2ConfPath,
|
||||
@@ -722,11 +741,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')
|
||||
}
|
||||
|
||||
@@ -614,11 +614,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')
|
||||
}
|
||||
|
||||
@@ -84,6 +84,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.selected .task-item {
|
||||
border-color: $--dk-task-item-hover-border-color;
|
||||
}
|
||||
|
||||
.task-name {
|
||||
color: $--dk-task-item-text-color;
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -27,6 +27,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'
|
||||
|
||||
@@ -2024,10 +2024,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"
|
||||
@@ -3279,10 +3279,10 @@ electron-updater@^5.3.0:
|
||||
semver "^7.3.5"
|
||||
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.7:
|
||||
version "22.3.7"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-22.3.7.tgz#1df3d15f8cee6468818485596b0d88840fa34018"
|
||||
integrity sha512-QUuRCl0QJk0w2yPAQXl6sk4YV1b9353w4e1eO/fF2OUmrGQV9Fy2pEpEDV1PIq/JJ/oeVVlI3H07LHpEcNb0TA==
|
||||
dependencies:
|
||||
"@electron/get" "^2.0.0"
|
||||
"@types/node" "^16.11.26"
|
||||
@@ -7604,10 +7604,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.81.0:
|
||||
version "5.81.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.81.0.tgz#27a2e8466c8b4820d800a8d90f06ef98294f9956"
|
||||
integrity sha512-AAjaJ9S4hYCVODKLQTgG5p5e11hiMawBwV2v8MYLE0C/6UAGLuAF4n1qa9GOwdxnicaP+5k6M5HrLmD4+gIB8Q==
|
||||
dependencies:
|
||||
"@types/eslint-scope" "^3.7.3"
|
||||
"@types/estree" "^1.0.0"
|
||||
|
||||
Reference in New Issue
Block a user