[MM-43039] Upgrade and clean up dependencies (#2038)
* Upgrade Electron to v18 * Fix a test * Upgrade ESLint and TypeScript * Update Joi * Clean up and upgrade dependencies * Upgrade dev dependencies * Upgrade to Webpack 5 * Update NOTICE.txt * Update test runtime
This commit is contained in:
parent
61de4dfb7b
commit
0fea052a9b
|
@ -2,7 +2,8 @@
|
||||||
"root": true,
|
"root": true,
|
||||||
"extends": [
|
"extends": [
|
||||||
"plugin:mattermost/react",
|
"plugin:mattermost/react",
|
||||||
"plugin:cypress/recommended"
|
"plugin:cypress/recommended",
|
||||||
|
"plugin:react-hooks/recommended"
|
||||||
],
|
],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"babel",
|
"babel",
|
||||||
|
@ -131,7 +132,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"files": ["tests/**", "**/*.test.*", "tests/*.js"],
|
"files": ["tests/**", "**/*.test.*", "tests/*.js", "packages/mattermost-redux/test/*"],
|
||||||
"env": {
|
"env": {
|
||||||
"jest": true
|
"jest": true
|
||||||
},
|
},
|
||||||
|
@ -140,6 +141,7 @@
|
||||||
"global-require": 0,
|
"global-require": 0,
|
||||||
"max-lines": 0,
|
"max-lines": 0,
|
||||||
"new-cap": 0,
|
"new-cap": 0,
|
||||||
|
"no-empty-function": 0,
|
||||||
"no-import-assign": 0,
|
"no-import-assign": 0,
|
||||||
"no-process-env": 0,
|
"no-process-env": 0,
|
||||||
"prefer-arrow-callback": 0
|
"prefer-arrow-callback": 0
|
||||||
|
|
197
NOTICE.txt
197
NOTICE.txt
|
@ -79,41 +79,6 @@ THE SOFTWARE.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## brace-expansion
|
|
||||||
|
|
||||||
This product contains 'brace-expansion' by Julian Gruber.
|
|
||||||
|
|
||||||
Brace expansion, as known from sh/bash, in JavaScript.
|
|
||||||
|
|
||||||
* HOMEPAGE:
|
|
||||||
* https://github.com/juliangruber/brace-expansion
|
|
||||||
|
|
||||||
* LICENSE: MIT
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## classnames
|
## classnames
|
||||||
|
|
||||||
This product contains 'classnames' by Jed Watson.
|
This product contains 'classnames' by Jed Watson.
|
||||||
|
@ -287,52 +252,6 @@ SOFTWARE.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## font-awesome
|
|
||||||
|
|
||||||
This product contains 'font-awesome' by Fort Awesome.
|
|
||||||
|
|
||||||
The iconic SVG, font, and CSS framework
|
|
||||||
|
|
||||||
* HOMEPAGE:
|
|
||||||
* https://github.com/FortAwesome/Font-Awesome
|
|
||||||
|
|
||||||
* LICENSE: Font Awesome Free License
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
|
||||||
commercial projects, open source projects, or really almost whatever you want.
|
|
||||||
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
|
||||||
|
|
||||||
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
|
||||||
In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
|
|
||||||
packaged as SVG and JS file types.
|
|
||||||
|
|
||||||
# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
|
|
||||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
|
||||||
packaged as web and desktop font files.
|
|
||||||
|
|
||||||
# Code: MIT License (https://opensource.org/licenses/MIT)
|
|
||||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
|
||||||
non-icon files.
|
|
||||||
|
|
||||||
# Attribution
|
|
||||||
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
|
||||||
Awesome Free files already contain embedded comments with sufficient
|
|
||||||
attribution, so you shouldn't need to do anything additional when using these
|
|
||||||
files normally.
|
|
||||||
|
|
||||||
We've kept attribution comments terse, so we ask that you do not actively work
|
|
||||||
to remove them from files, especially code. They're a great way for folks to
|
|
||||||
learn about Font Awesome.
|
|
||||||
|
|
||||||
# Brand Icons
|
|
||||||
All brand icons are trademarks of their respective owners. The use of these
|
|
||||||
trademarks does not indicate endorsement of the trademark holder by Font
|
|
||||||
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
|
||||||
to represent the company, product, or service to which they refer.**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## hapi/joi
|
## hapi/joi
|
||||||
|
|
||||||
This product contains 'hapi/joi' by Sideway Inc.
|
This product contains 'hapi/joi' by Sideway Inc.
|
||||||
|
@ -357,41 +276,6 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## prop-types
|
|
||||||
|
|
||||||
This product contains 'prop-types' by Facebook.
|
|
||||||
|
|
||||||
Runtime type checking for React props and similar objects.
|
|
||||||
|
|
||||||
* HOMEPAGE:
|
|
||||||
* https://facebook.github.io/react/
|
|
||||||
|
|
||||||
* LICENSE: MIT
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2013-present, Facebook, Inc.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## react
|
## react
|
||||||
|
|
||||||
This product contains 'react' by facebook.
|
This product contains 'react' by facebook.
|
||||||
|
@ -547,50 +431,6 @@ SOFTWARE.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## react-transition-group
|
|
||||||
|
|
||||||
This product contains 'react-transition-group' by React Community.
|
|
||||||
|
|
||||||
A react component toolset for managing animations
|
|
||||||
|
|
||||||
* HOMEPAGE:
|
|
||||||
* https://github.com/reactjs/react-transition-group#readme
|
|
||||||
|
|
||||||
* LICENSE: BSD-3-Clause
|
|
||||||
|
|
||||||
BSD 3-Clause License
|
|
||||||
|
|
||||||
Copyright (c) 2018, React Community
|
|
||||||
Forked from React (https://github.com/facebook/react) Copyright 2013-present, Facebook, Inc.
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## sass
|
## sass
|
||||||
|
|
||||||
This product contains 'sass' by sass.
|
This product contains 'sass' by sass.
|
||||||
|
@ -654,43 +494,6 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## underscore
|
|
||||||
|
|
||||||
This product contains 'underscore' by Jeremy Ashkenas.
|
|
||||||
|
|
||||||
JavaScript's functional programming helper library.
|
|
||||||
|
|
||||||
* HOMEPAGE:
|
|
||||||
* http://underscorejs.org
|
|
||||||
|
|
||||||
* LICENSE: MIT
|
|
||||||
|
|
||||||
Copyright (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative
|
|
||||||
Reporters & Editors
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
|
||||||
obtaining a copy of this software and associated documentation
|
|
||||||
files (the "Software"), to deal in the Software without
|
|
||||||
restriction, including without limitation the rights to use,
|
|
||||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following
|
|
||||||
conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## valid-url
|
## valid-url
|
||||||
|
|
||||||
This product contains 'valid-url' by Odysseas Tsatalos.
|
This product contains 'valid-url' by Odysseas Tsatalos.
|
||||||
|
|
38198
package-lock.json
generated
38198
package-lock.json
generated
File diff suppressed because it is too large
Load diff
165
package.json
165
package.json
|
@ -16,7 +16,7 @@
|
||||||
"url": "git://github.com/mattermost/desktop.git"
|
"url": "git://github.com/mattermost/desktop.git"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"target": "14.1.0",
|
"target": "18.0.1",
|
||||||
"arch": "x64",
|
"arch": "x64",
|
||||||
"target_arch": "x64",
|
"target_arch": "x64",
|
||||||
"disturl": "https://electronjs.org/headers",
|
"disturl": "https://electronjs.org/headers",
|
||||||
|
@ -25,9 +25,9 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npm-run-all build:*",
|
"build": "npm-run-all build:*",
|
||||||
"build:main": "webpack-cli --bail --config webpack.config.main.js",
|
"build:main": "webpack-cli --config webpack.config.main.js",
|
||||||
"build:renderer": "webpack-cli --bail --config webpack.config.renderer.js",
|
"build:renderer": "webpack-cli --config webpack.config.renderer.js",
|
||||||
"build-robotjs": "npm rebuild --runtime=electron --target=14.1.0 --disturl=https://atom.io/download/atom-shell --abi=83",
|
"build-robotjs": "npm rebuild --runtime=electron --target=18.0.1 --disturl=https://atom.io/download/atom-shell --abi=83",
|
||||||
"start": "electron dist/ --disable-dev-mode",
|
"start": "electron dist/ --disable-dev-mode",
|
||||||
"restart": "npm run build && npm run start",
|
"restart": "npm run build && npm run start",
|
||||||
"storybook": "start-storybook -p 9001 -c src/.storybook",
|
"storybook": "start-storybook -p 9001 -c src/.storybook",
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
"test:docker": "node scripts/setup_e2e_docker.js",
|
"test:docker": "node scripts/setup_e2e_docker.js",
|
||||||
"test:e2e": "cross-env NODE_ENV=test npm-run-all build build-robotjs test:e2e:build test:e2e:run",
|
"test:e2e": "cross-env NODE_ENV=test npm-run-all build build-robotjs test:e2e:build test:e2e:run",
|
||||||
"test:e2e:nobuild": "cross-env NODE_ENV=test npm-run-all test:e2e:build test:e2e:run",
|
"test:e2e:nobuild": "cross-env NODE_ENV=test npm-run-all test:e2e:build test:e2e:run",
|
||||||
"test:e2e:build": "webpack-cli --bail --config webpack.config.test.js",
|
"test:e2e:build": "webpack-cli --config webpack.config.test.js",
|
||||||
"test:e2e:run": "electron-mocha -r @babel/register --reporter mocha-circleci-reporter dist/tests/e2e_bundle.js",
|
"test:e2e:run": "electron-mocha -r @babel/register --reporter mocha-circleci-reporter dist/tests/e2e_bundle.js",
|
||||||
"test:unit": "jest",
|
"test:unit": "jest",
|
||||||
"test:unit-ci": "jest --runInBand",
|
"test:unit-ci": "jest --runInBand",
|
||||||
|
@ -108,103 +108,88 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.14.5",
|
"@babel/cli": "7.17.6",
|
||||||
"@babel/core": "^7.2.0",
|
"@babel/core": "7.17.8",
|
||||||
"@babel/plugin-proposal-class-properties": "^7.8.3",
|
"@babel/plugin-proposal-class-properties": "7.16.7",
|
||||||
"@babel/plugin-proposal-object-rest-spread": "^7.2.0",
|
"@babel/plugin-proposal-object-rest-spread": "7.17.3",
|
||||||
"@babel/preset-env": "^7.2.0",
|
"@babel/preset-env": "7.16.11",
|
||||||
"@babel/preset-react": "^7.10.4",
|
"@babel/preset-react": "7.16.7",
|
||||||
"@babel/register": "^7.0.0",
|
"@babel/register": "7.17.7",
|
||||||
"@electron/fuses": "^1.4.0",
|
"@electron/fuses": "1.5.0",
|
||||||
"@storybook/addon-actions": "^6.2.9",
|
"@storybook/addon-actions": "6.4.20",
|
||||||
"@storybook/react": "^6.2.9",
|
"@storybook/react": "6.4.20",
|
||||||
"@types/auto-launch": "^5.0.1",
|
"@types/auto-launch": "5.0.2",
|
||||||
"@types/electron-devtools-installer": "^2.2.0",
|
"@types/electron-devtools-installer": "2.2.1",
|
||||||
"@types/hapi__joi": "^17.1.6",
|
"@types/react": "17.0.43",
|
||||||
"@types/react": "^17.0.11",
|
"@types/react-beautiful-dnd": "13.0.0",
|
||||||
"@types/react-beautiful-dnd": "^13.0.0",
|
"@types/react-dom": "17.0.14",
|
||||||
"@types/react-dom": "^17.0.8",
|
"@types/valid-url": "1.0.3",
|
||||||
"@types/react-select": "^4.0.17",
|
"@types/winreg": "1.2.31",
|
||||||
"@types/underscore": "^1.11.2",
|
"@typescript-eslint/eslint-plugin": "5.18.0",
|
||||||
"@types/valid-url": "^1.0.3",
|
"@typescript-eslint/parser": "5.18.0",
|
||||||
"@types/winreg": "^1.2.30",
|
"7zip-bin": "5.1.1",
|
||||||
"@typescript-eslint/eslint-plugin": "4.28.0",
|
"awesome-node-loader": "1.1.1",
|
||||||
"@typescript-eslint/parser": "4.28.0",
|
"axios": "0.26.1",
|
||||||
"7zip-bin": "^4.1.0",
|
"babel-eslint": "10.1.0",
|
||||||
"awesome-node-loader": "^1.1.1",
|
"babel-loader": "8.2.4",
|
||||||
"axios": "^0.24.0",
|
"chai": "4.3.6",
|
||||||
"babel-eslint": "^10.0.3",
|
"copy-webpack-plugin": "10.2.4",
|
||||||
"babel-loader": "^8.0.4",
|
"cross-env": "7.0.3",
|
||||||
"chai": "^4.2.0",
|
"css-loader": "6.7.1",
|
||||||
"copy-webpack-plugin": "^6.2.1",
|
"electron": "18.0.1",
|
||||||
"cross-env": "^5.2.0",
|
|
||||||
"css-loader": "^1.0.1",
|
|
||||||
"devtron": "^1.4.0",
|
|
||||||
"electron": "17.1.0",
|
|
||||||
"electron-builder": "22.14.13",
|
"electron-builder": "22.14.13",
|
||||||
"electron-connect": "0.6.3",
|
"electron-connect": "0.6.3",
|
||||||
"electron-mocha": "11.0.2",
|
"electron-mocha": "11.0.2",
|
||||||
"electron-notarize": "1.1.1",
|
"electron-notarize": "1.2.1",
|
||||||
"eslint": "7.19.0",
|
"eslint": "7.29.0",
|
||||||
"eslint-import-resolver-webpack": "0.13.0",
|
"eslint-import-resolver-webpack": "0.13.2",
|
||||||
"eslint-plugin-babel": "5.3.1",
|
"eslint-plugin-babel": "5.3.1",
|
||||||
"eslint-plugin-cypress": "2.11.2",
|
"eslint-plugin-cypress": "2.11.3",
|
||||||
"eslint-plugin-header": "3.1.0",
|
"eslint-plugin-header": "3.1.1",
|
||||||
"eslint-plugin-import": "2.22.1",
|
"eslint-plugin-import": "2.25.4",
|
||||||
"eslint-plugin-jquery": "1.5.1",
|
|
||||||
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#46ad99355644a719bf32082f472048f526605181",
|
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#46ad99355644a719bf32082f472048f526605181",
|
||||||
"eslint-plugin-no-only-tests": "2.4.0",
|
"eslint-plugin-no-only-tests": "2.6.0",
|
||||||
"eslint-plugin-react": "7.22.0",
|
"eslint-plugin-react": "7.29.4",
|
||||||
"file-loader": "^2.0.0",
|
"eslint-plugin-react-hooks": "4.4.0",
|
||||||
"image-webpack-loader": "5.0.0",
|
"jest": "27.5.1",
|
||||||
"jest": "^27.3.1",
|
"jest-junit": "13.1.0",
|
||||||
"jest-junit": "^13.0.0",
|
"mini-css-extract-plugin": "2.6.0",
|
||||||
"mdi-react": "^6.2.0",
|
"node-gyp": "9.0.0",
|
||||||
"mini-css-extract-plugin": "1.6.0",
|
"npm-run-all": "4.1.5",
|
||||||
"mocha": "^5.2.0",
|
"playwright": "1.20.2",
|
||||||
"mocha-circleci-reporter": "0.0.3",
|
"robotjs": "0.6.0",
|
||||||
"node-gyp": "^8.4.0",
|
"sass-loader": "12.6.0",
|
||||||
"npm-run-all": "^4.1.5",
|
"shebang-loader": "0.0.1",
|
||||||
"playwright": "^1.15.2",
|
"style-loader": "3.3.1",
|
||||||
"robotjs": "^0.6.0",
|
"ts-prune": "0.10.3",
|
||||||
"sass-loader": "^10.2.0",
|
"typescript": "4.6.3",
|
||||||
"shebang-loader": "^0.0.1",
|
"webpack": "5.71.0",
|
||||||
"style-loader": "^2.0.0",
|
"webpack-cli": "4.9.2",
|
||||||
"ts-prune": "^0.10.2",
|
"webpack-dev-server": "4.8.0",
|
||||||
"typescript": "^4.3.4",
|
"webpack-merge": "5.8.0"
|
||||||
"url-loader": "^1.1.2",
|
|
||||||
"webpack": "^4.44.2",
|
|
||||||
"webpack-cli": "^3.1.2",
|
|
||||||
"webpack-dev-server": "^3.11.0",
|
|
||||||
"webpack-merge": "^4.1.4"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hapi/joi": "^16.1.8",
|
|
||||||
"@mattermost/compass-icons": "0.1.21",
|
"@mattermost/compass-icons": "0.1.21",
|
||||||
"auto-launch": "^5.0.5",
|
"auto-launch": "5.0.5",
|
||||||
"bootstrap": "^4.6.0",
|
"bootstrap": "4.6.1",
|
||||||
"bootstrap-dark": "^1.0.3",
|
"bootstrap-dark": "1.0.3",
|
||||||
"brace-expansion": "^2.0.0",
|
"classnames": "2.3.1",
|
||||||
"classnames": "^2.3.1",
|
|
||||||
"electron-context-menu": "3.1.2",
|
"electron-context-menu": "3.1.2",
|
||||||
"electron-devtools-installer": "3.2.0",
|
"electron-devtools-installer": "3.2.0",
|
||||||
"electron-is-dev": "2.0.0",
|
"electron-is-dev": "2.0.0",
|
||||||
"electron-log": "4.4.6",
|
"electron-log": "4.4.6",
|
||||||
"electron-updater": "5.0.0",
|
"electron-updater": "5.0.0",
|
||||||
"font-awesome": "^4.7.0",
|
"joi": "17.6.0",
|
||||||
"pretty-bytes": "^6.0.0",
|
"pretty-bytes": "6.0.0",
|
||||||
"prop-types": "^15.6.2",
|
"react": "16.14.0",
|
||||||
"react": "^16.14.0",
|
"react-beautiful-dnd": "13.1.0",
|
||||||
"react-beautiful-dnd": "^13.1.0",
|
"react-bootstrap": "1.6.4",
|
||||||
"react-bootstrap": "^1.6.1",
|
"react-dom": "16.14.0",
|
||||||
"react-dom": "^16.14.0",
|
"react-select": "5.2.2",
|
||||||
"react-select": "4.3.1",
|
"sass": "1.49.11",
|
||||||
"react-transition-group": "^2.5.0",
|
"semver": "7.3.5",
|
||||||
"sass": "^1.35.1",
|
"valid-url": "1.0.9",
|
||||||
"semver": "^5.5.0",
|
"winreg-utf8": "0.1.1",
|
||||||
"underscore": "^1.9.1",
|
"yargs": "17.4.0"
|
||||||
"valid-url": "^1.0.9",
|
|
||||||
"winreg-utf8": "^0.1.1",
|
|
||||||
"yargs": "^15.3.1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// See LICENSE.txt for license information.
|
// See LICENSE.txt for license information.
|
||||||
import log from 'electron-log';
|
import log from 'electron-log';
|
||||||
|
|
||||||
import Joi from '@hapi/joi';
|
import Joi from 'joi';
|
||||||
|
|
||||||
import {Args} from 'types/args';
|
import {Args} from 'types/args';
|
||||||
import {ConfigV0, ConfigV1, ConfigV2, ConfigV3, TeamWithTabs} from 'types/config';
|
import {ConfigV0, ConfigV1, ConfigV2, ConfigV3, TeamWithTabs} from 'types/config';
|
||||||
|
|
|
@ -261,6 +261,8 @@ describe('main/app/utils', () => {
|
||||||
expect(updatePaths).not.toHaveBeenCalled();
|
expect(updatePaths).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// this doesn't run on windows because of path resolution
|
||||||
|
if (process.platform !== 'win32') {
|
||||||
it('should copy all of the configs when they exist to the new directory', () => {
|
it('should copy all of the configs when they exist to the new directory', () => {
|
||||||
const migrationPrefs = {
|
const migrationPrefs = {
|
||||||
getValue: () => false,
|
getValue: () => false,
|
||||||
|
@ -284,5 +286,6 @@ describe('main/app/utils', () => {
|
||||||
expect(updatePaths).toHaveBeenCalled();
|
expect(updatePaths).toHaveBeenCalled();
|
||||||
expect(migrationPrefs.setValue).toHaveBeenCalledWith('masConfigs', true);
|
expect(migrationPrefs.setValue).toHaveBeenCalledWith('masConfigs', true);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {app, Notification} from 'electron';
|
import {app, Notification} from 'electron';
|
||||||
|
|
||||||
import Utils from 'common/utils/util';
|
import Utils from 'common/utils/util';
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// See LICENSE.txt for license information.
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {app, Notification} from 'electron';
|
import {app, Notification} from 'electron';
|
||||||
|
|
||||||
const assetsDir = path.resolve(app.getAppPath(), 'assets');
|
const assetsDir = path.resolve(app.getAppPath(), 'assets');
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// See LICENSE.txt for license information.
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {app, nativeImage, Tray, systemPreferences, nativeTheme} from 'electron';
|
import {app, nativeImage, Tray, systemPreferences, nativeTheme} from 'electron';
|
||||||
|
|
||||||
import {UPDATE_TRAY} from 'common/communication';
|
import {UPDATE_TRAY} from 'common/communication';
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
||||||
// See LICENSE.txt for license information.
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
import {app, BrowserWindow} from 'electron';
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
import {app, BrowserWindow} from 'electron';
|
||||||
|
|
||||||
import {Args} from 'types/args';
|
import {Args} from 'types/args';
|
||||||
|
|
||||||
import {BACK_BAR_HEIGHT, PRODUCTION, TAB_BAR_HEIGHT} from 'common/utils/constants';
|
import {BACK_BAR_HEIGHT, PRODUCTION, TAB_BAR_HEIGHT} from 'common/utils/constants';
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
/* eslint-disable max-lines */
|
/* eslint-disable max-lines */
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {app, BrowserWindow, nativeImage, systemPreferences, ipcMain, IpcMainEvent, IpcMainInvokeEvent, desktopCapturer} from 'electron';
|
import {app, BrowserWindow, nativeImage, systemPreferences, ipcMain, IpcMainEvent, IpcMainInvokeEvent, desktopCapturer} from 'electron';
|
||||||
import log from 'electron-log';
|
import log from 'electron-log';
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ export default class ExtraBar extends React.PureComponent<Props> {
|
||||||
variant={'link'}
|
variant={'link'}
|
||||||
size={'sm'}
|
size={'sm'}
|
||||||
>
|
>
|
||||||
<span className={'backIcon fa fa-1x fa-angle-left'}/>
|
<span className={'backIcon icon-arrow-left'}/>
|
||||||
<span className={'backLabel'}>
|
<span className={'backLabel'}>
|
||||||
{'Back'}
|
{'Back'}
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -6,7 +6,6 @@ import classNames from 'classnames';
|
||||||
import React, {Fragment} from 'react';
|
import React, {Fragment} from 'react';
|
||||||
import {Container, Row} from 'react-bootstrap';
|
import {Container, Row} from 'react-bootstrap';
|
||||||
import {DropResult} from 'react-beautiful-dnd';
|
import {DropResult} from 'react-beautiful-dnd';
|
||||||
import DotsVerticalIcon from 'mdi-react/DotsVerticalIcon';
|
|
||||||
import {IpcRendererEvent} from 'electron/renderer';
|
import {IpcRendererEvent} from 'electron/renderer';
|
||||||
import prettyBytes from 'pretty-bytes';
|
import prettyBytes from 'pretty-bytes';
|
||||||
|
|
||||||
|
@ -504,7 +503,7 @@ export default class MainPage extends React.PureComponent<Props, State> {
|
||||||
ref={this.threeDotMenu}
|
ref={this.threeDotMenu}
|
||||||
aria-label='Context menu'
|
aria-label='Context menu'
|
||||||
>
|
>
|
||||||
<DotsVerticalIcon/>
|
<i className='icon-dots-vertical'/>
|
||||||
</button>
|
</button>
|
||||||
<TeamDropdownButton
|
<TeamDropdownButton
|
||||||
isDisabled={this.state.modalOpen}
|
isDisabled={this.state.modalOpen}
|
||||||
|
|
|
@ -8,9 +8,7 @@ import 'renderer/css/settings.css';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {FormCheck, Col, FormGroup, FormText, Container, Row, Button, FormControl} from 'react-bootstrap';
|
import {FormCheck, Col, FormGroup, FormText, Container, Row, Button, FormControl} from 'react-bootstrap';
|
||||||
import ReactSelect, {ActionMeta, OptionsType} from 'react-select';
|
import ReactSelect, {ActionMeta, MultiValue} from 'react-select';
|
||||||
|
|
||||||
import {debounce} from 'underscore';
|
|
||||||
|
|
||||||
import {CombinedConfig, LocalConfiguration} from 'types/config';
|
import {CombinedConfig, LocalConfiguration} from 'types/config';
|
||||||
import {DeepPartial} from 'types/utils';
|
import {DeepPartial} from 'types/utils';
|
||||||
|
@ -76,6 +74,9 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
|
||||||
|
|
||||||
selectedSpellCheckerLocales: Array<{label: string; value: string}>;
|
selectedSpellCheckerLocales: Array<{label: string; value: string}>;
|
||||||
|
|
||||||
|
savingIsDebounced: boolean;
|
||||||
|
resetSaveStateIsDebounced: boolean;
|
||||||
|
|
||||||
constructor(props: Record<string, never>) {
|
constructor(props: Record<string, never>) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
|
@ -108,6 +109,9 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
|
||||||
|
|
||||||
this.saveQueue = [];
|
this.saveQueue = [];
|
||||||
this.selectedSpellCheckerLocales = [];
|
this.selectedSpellCheckerLocales = [];
|
||||||
|
|
||||||
|
this.savingIsDebounced = false;
|
||||||
|
this.resetSaveStateIsDebounced = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
|
@ -149,9 +153,17 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
|
||||||
this.processSaveQueue();
|
this.processSaveQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
processSaveQueue = debounce(() => {
|
processSaveQueue = () => {
|
||||||
window.ipcRenderer.send(UPDATE_CONFIGURATION, this.saveQueue.splice(0, this.saveQueue.length));
|
if (this.savingIsDebounced) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.savingIsDebounced = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
this.savingIsDebounced = false;
|
||||||
}, 500);
|
}, 500);
|
||||||
|
window.ipcRenderer.send(UPDATE_CONFIGURATION, this.saveQueue.splice(0, this.saveQueue.length));
|
||||||
|
}
|
||||||
|
|
||||||
updateSaveState = () => {
|
updateSaveState = () => {
|
||||||
let queuedUpdateCounts = {
|
let queuedUpdateCounts = {
|
||||||
|
@ -178,13 +190,21 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
|
||||||
this.setState({savingState});
|
this.setState({savingState});
|
||||||
}
|
}
|
||||||
|
|
||||||
resetSaveState = debounce((configType: keyof SavingStateItems) => {
|
resetSaveState = (configType: keyof SavingStateItems) => {
|
||||||
|
if (this.resetSaveStateIsDebounced) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.resetSaveStateIsDebounced = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
this.resetSaveStateIsDebounced = false;
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
if (this.state.savingState[configType] !== SavingState.SAVING_STATE_SAVING) {
|
if (this.state.savingState[configType] !== SavingState.SAVING_STATE_SAVING) {
|
||||||
const savingState = Object.assign({}, this.state.savingState);
|
const savingState = Object.assign({}, this.state.savingState);
|
||||||
savingState[configType] = SavingState.SAVING_STATE_DONE;
|
savingState[configType] = SavingState.SAVING_STATE_DONE;
|
||||||
this.setState({savingState});
|
this.setState({savingState});
|
||||||
}
|
}
|
||||||
}, 2000);
|
}
|
||||||
|
|
||||||
handleChangeShowTrayIcon = () => {
|
handleChangeShowTrayIcon = () => {
|
||||||
const shouldShowTrayIcon = this.showTrayIconRef.current?.checked;
|
const shouldShowTrayIcon = this.showTrayIconRef.current?.checked;
|
||||||
|
@ -314,7 +334,7 @@ export default class SettingsPage extends React.PureComponent<Record<string, nev
|
||||||
window.ipcRenderer.send(CHECK_FOR_UPDATES);
|
window.ipcRenderer.send(CHECK_FOR_UPDATES);
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChangeSpellCheckerLocales = (value: OptionsType<{label: string; value: string}>, actionMeta: ActionMeta<{label: string; value: string}>) => {
|
handleChangeSpellCheckerLocales = (value: MultiValue<{label: string; value: string}>, actionMeta: ActionMeta<{label: string; value: string}>) => {
|
||||||
switch (actionMeta.action) {
|
switch (actionMeta.action) {
|
||||||
case 'select-option':
|
case 'select-option':
|
||||||
this.selectedSpellCheckerLocales = [...value];
|
this.selectedSpellCheckerLocales = [...value];
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
@import url("components/index.css");
|
@import url("components/index.css");
|
||||||
@import url("fonts.css");
|
@import url("fonts.css");
|
||||||
@import '~font-awesome/css/font-awesome.css';
|
|
||||||
@import '~@mattermost/compass-icons/css/compass-icons.css';
|
@import '~@mattermost/compass-icons/css/compass-icons.css';
|
||||||
|
|
||||||
html {
|
html {
|
||||||
|
@ -63,6 +62,7 @@ body {
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
height: 36px;
|
height: 36px;
|
||||||
float: left;
|
float: left;
|
||||||
|
margin-left: 4px;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
border: none;
|
border: none;
|
||||||
flex: 0 0 40px;
|
flex: 0 0 40px;
|
||||||
|
@ -72,9 +72,9 @@ body {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.topBar .three-dot-menu svg {
|
.topBar .three-dot-menu i.icon-dots-vertical {
|
||||||
border-radius: 100px;
|
border-radius: 100px;
|
||||||
padding: 4px;
|
padding: 2px;
|
||||||
height: 28px;
|
height: 28px;
|
||||||
width: 28px;
|
width: 28px;
|
||||||
}
|
}
|
||||||
|
@ -83,16 +83,16 @@ body {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.topBar .three-dot-menu:hover svg, .topBar .three-dot-menu:focus svg, .topBar .three-dot-menu:active svg {
|
.topBar .three-dot-menu:hover i.icon-dots-vertical, .topBar .three-dot-menu:focus i.icon-dots-vertical, .topBar .three-dot-menu:active i.icon-dots-vertical {
|
||||||
outline: none;
|
outline: none;
|
||||||
background-color: #c8c8c8;
|
background-color: #c8c8c8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.topBar.darkMode .three-dot-menu:hover svg, .topBar.darkMode .three-dot-menu:focus svg, .topBar.darkMode .three-dot-menu:active svg {
|
.topBar.darkMode .three-dot-menu:hover i.icon-dots-vertical, .topBar.darkMode .three-dot-menu:focus i.icon-dots-vertical, .topBar.darkMode .three-dot-menu:active i.icon-dots-vertical {
|
||||||
background-color: #383A3F;
|
background-color: #383A3F;
|
||||||
}
|
}
|
||||||
|
|
||||||
.topBar.macOS .three-dot-menu:hover svg, .topBar.macOS .three-dot-menu:focus svg, .topBar.macOS .three-dot-menu:active svg {
|
.topBar.macOS .three-dot-menu:hover i.icon-dots-vertical, .topBar.macOS .three-dot-menu:focus i.icon-dots-vertical, .topBar.macOS .three-dot-menu:active i.icon-dots-vertical {
|
||||||
background: none !important;
|
background: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ body {
|
||||||
flex-basis: 0px;
|
flex-basis: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.topBar.macOS .three-dot-menu>svg {
|
.topBar.macOS .three-dot-menu>i.icon-dots-vertical {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
||||||
// See LICENSE.txt for license information.
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
import {throttle} from 'underscore';
|
|
||||||
|
|
||||||
import ding from 'static/sounds/ding.mp3';
|
import ding from 'static/sounds/ding.mp3';
|
||||||
import bing from 'static/sounds/bing.mp3';
|
import bing from 'static/sounds/bing.mp3';
|
||||||
import crackle from 'static/sounds/crackle.mp3';
|
import crackle from 'static/sounds/crackle.mp3';
|
||||||
|
@ -22,9 +20,15 @@ const notificationSounds = new Map([
|
||||||
['Upstairs', upstairs],
|
['Upstairs', upstairs],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
export const playSound = throttle((soundName: string) => {
|
let canPlaySound = true;
|
||||||
if (soundName) {
|
|
||||||
|
export const playSound = (soundName: string) => {
|
||||||
|
if (soundName && canPlaySound) {
|
||||||
|
canPlaySound = false;
|
||||||
|
setTimeout(() => {
|
||||||
|
canPlaySound = true;
|
||||||
|
}, 3000);
|
||||||
const audio = new Audio(notificationSounds.get(soundName));
|
const audio = new Audio(notificationSounds.get(soundName));
|
||||||
audio.play();
|
audio.play();
|
||||||
}
|
}
|
||||||
}, 3000, {trailing: false});
|
};
|
||||||
|
|
|
@ -7,11 +7,10 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const childProcess = require('child_process');
|
const childProcess = require('child_process');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
const webpack = require('webpack');
|
const webpack = require('webpack');
|
||||||
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const VERSION = childProcess.execSync('git rev-parse --short HEAD').toString();
|
const VERSION = childProcess.execSync('git rev-parse --short HEAD').toString();
|
||||||
const isProduction = process.env.NODE_ENV === 'production';
|
const isProduction = process.env.NODE_ENV === 'production';
|
||||||
const isRelease = process.env.CIRCLE_BRANCH && process.env.CIRCLE_BRANCH.startsWith('release-');
|
const isRelease = process.env.CIRCLE_BRANCH && process.env.CIRCLE_BRANCH.startsWith('release-');
|
||||||
|
@ -29,10 +28,11 @@ module.exports = {
|
||||||
// Some plugins cause errors on the app, so use few plugins.
|
// Some plugins cause errors on the app, so use few plugins.
|
||||||
// https://webpack.js.org/concepts/mode/#mode-production
|
// https://webpack.js.org/concepts/mode/#mode-production
|
||||||
mode: isProduction ? 'none' : 'development',
|
mode: isProduction ? 'none' : 'development',
|
||||||
|
bail: true,
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.DefinePlugin(codeDefinitions),
|
new webpack.DefinePlugin(codeDefinitions),
|
||||||
],
|
],
|
||||||
devtool: isProduction ? false : '#inline-source-map',
|
devtool: isProduction ? undefined : 'inline-source-map',
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
renderer: path.resolve(__dirname, 'src/renderer'),
|
renderer: path.resolve(__dirname, 'src/renderer'),
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
const merge = require('webpack-merge');
|
const {merge} = require('webpack-merge');
|
||||||
|
|
||||||
const CopyPlugin = require('copy-webpack-plugin');
|
const CopyPlugin = require('copy-webpack-plugin');
|
||||||
|
|
||||||
|
@ -24,10 +24,6 @@ module.exports = merge(base, {
|
||||||
loadingScreenPreload: './src/main/preload/loadingScreenPreload.js',
|
loadingScreenPreload: './src/main/preload/loadingScreenPreload.js',
|
||||||
urlView: './src/main/preload/urlView.js',
|
urlView: './src/main/preload/urlView.js',
|
||||||
},
|
},
|
||||||
output: {
|
|
||||||
path: path.join(__dirname, 'dist/'),
|
|
||||||
filename: '[name].js',
|
|
||||||
},
|
|
||||||
module: {
|
module: {
|
||||||
rules: [{
|
rules: [{
|
||||||
test: /\.(js|ts)?$/,
|
test: /\.(js|ts)?$/,
|
||||||
|
@ -39,9 +35,7 @@ module.exports = merge(base, {
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
test: /\.mp3$/,
|
test: /\.mp3$/,
|
||||||
use: {
|
type: 'asset/inline',
|
||||||
loader: 'url-loader',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.node$/,
|
test: /\.node$/,
|
||||||
|
|
|
@ -7,9 +7,10 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||||
const merge = require('webpack-merge');
|
const {merge} = require('webpack-merge');
|
||||||
|
|
||||||
const base = require('./webpack.config.base');
|
const base = require('./webpack.config.base');
|
||||||
|
|
||||||
|
@ -32,6 +33,7 @@ module.exports = merge(base, {
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, 'dist/renderer'),
|
path: path.resolve(__dirname, 'dist/renderer'),
|
||||||
filename: '[name]_bundle.js',
|
filename: '[name]_bundle.js',
|
||||||
|
assetModuleFilename: '[name].[ext]',
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
|
@ -139,30 +141,13 @@ module.exports = merge(base, {
|
||||||
],
|
],
|
||||||
}, {
|
}, {
|
||||||
test: /\.mp3$/,
|
test: /\.mp3$/,
|
||||||
use: {
|
type: 'asset/inline',
|
||||||
loader: 'url-loader',
|
|
||||||
},
|
|
||||||
}, {
|
}, {
|
||||||
test: /\.(svg|gif)$/,
|
test: /\.(svg|gif)$/,
|
||||||
use: [
|
type: 'asset/resource',
|
||||||
{
|
|
||||||
loader: 'file-loader',
|
|
||||||
options: {
|
|
||||||
name: '[name].[ext]',
|
|
||||||
publicPath: './assets',
|
|
||||||
outputPath: '/../assets',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{loader: 'image-webpack-loader'},
|
|
||||||
],
|
|
||||||
}, {
|
}, {
|
||||||
test: /\.(eot|ttf|woff|woff2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
test: /\.(eot|ttf|woff|woff2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
||||||
loader: 'file-loader',
|
type: 'asset/resource',
|
||||||
options: {
|
|
||||||
name: '[name].[ext]',
|
|
||||||
outputPath: '/../assets/fonts',
|
|
||||||
publicPath: './assets/fonts',
|
|
||||||
},
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
node: {
|
node: {
|
||||||
|
@ -171,10 +156,6 @@ module.exports = merge(base, {
|
||||||
},
|
},
|
||||||
target: 'electron-renderer',
|
target: 'electron-renderer',
|
||||||
devServer: {
|
devServer: {
|
||||||
contentBase: 'src/assets',
|
|
||||||
contentBasePublicPath: '/assets',
|
|
||||||
inline: true,
|
|
||||||
publicPath: '/renderer/',
|
|
||||||
port: WEBSERVER_PORT,
|
port: WEBSERVER_PORT,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const merge = require('webpack-merge');
|
const {merge} = require('webpack-merge');
|
||||||
|
|
||||||
const base = require('./webpack.config.base');
|
const base = require('./webpack.config.base');
|
||||||
|
|
||||||
|
@ -45,10 +45,6 @@ module.exports = merge(base, {
|
||||||
__dirname: false,
|
__dirname: false,
|
||||||
},
|
},
|
||||||
devServer: {
|
devServer: {
|
||||||
contentBase: 'src/assets',
|
|
||||||
contentBasePublicPath: '/assets',
|
|
||||||
inline: true,
|
|
||||||
publicPath: '/renderer/',
|
|
||||||
port: WEBSERVER_PORT,
|
port: WEBSERVER_PORT,
|
||||||
},
|
},
|
||||||
target: 'electron-main',
|
target: 'electron-main',
|
||||||
|
|
Loading…
Reference in a new issue