diff --git a/lib/gui/app/app.ts b/lib/gui/app/app.ts index 79765c24..b20306d9 100644 --- a/lib/gui/app/app.ts +++ b/lib/gui/app/app.ts @@ -28,7 +28,6 @@ import * as EXIT_CODES from '../../shared/exit-codes'; import * as messages from '../../shared/messages'; import * as availableDrives from './models/available-drives'; import * as flashState from './models/flash-state'; -import { init as ledsInit } from './models/leds'; import { deselectImage, getImage } from './models/selection-state'; import * as settings from './models/settings'; import { Actions, observe, store } from './models/store'; @@ -340,7 +339,13 @@ window.addEventListener('beforeunload', async (event) => { }); export async function main() { - await ledsInit(); + try { + const { init: ledsInit } = require('./models/leds'); + await ledsInit(); + } catch (error: any) { + exceptionReporter.report(error); + } + ReactDOM.render( React.createElement(MainPage), document.getElementById('main'), diff --git a/package-lock.json b/package-lock.json index 43b6d513..8898aba5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6997,6 +6997,173 @@ "es6-symbol": "^3.1.1" } }, + "esbuild": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.13.tgz", + "integrity": "sha512-Z17A/R6D0b4s3MousytQ/5i7mTCbaF+Ua/yPfoe71vdTv4KBvVAvQ/6ytMngM2DwGJosl8WxaD75NOQl2QF26Q==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.13.13", + "esbuild-darwin-64": "0.13.13", + "esbuild-darwin-arm64": "0.13.13", + "esbuild-freebsd-64": "0.13.13", + "esbuild-freebsd-arm64": "0.13.13", + "esbuild-linux-32": "0.13.13", + "esbuild-linux-64": "0.13.13", + "esbuild-linux-arm": "0.13.13", + "esbuild-linux-arm64": "0.13.13", + "esbuild-linux-mips64le": "0.13.13", + "esbuild-linux-ppc64le": "0.13.13", + "esbuild-netbsd-64": "0.13.13", + "esbuild-openbsd-64": "0.13.13", + "esbuild-sunos-64": "0.13.13", + "esbuild-windows-32": "0.13.13", + "esbuild-windows-64": "0.13.13", + "esbuild-windows-arm64": "0.13.13" + } + }, + "esbuild-android-arm64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.13.tgz", + "integrity": "sha512-T02aneWWguJrF082jZworjU6vm8f4UQ+IH2K3HREtlqoY9voiJUwHLRL6khRlsNLzVglqgqb7a3HfGx7hAADCQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.13.tgz", + "integrity": "sha512-wkaiGAsN/09X9kDlkxFfbbIgR78SNjMOfUhoel3CqKBDsi9uZhw7HBNHNxTzYUK8X8LAKFpbODgcRB3b/I8gHA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.13.tgz", + "integrity": "sha512-b02/nNKGSV85Gw9pUCI5B48AYjk0vFggDeom0S6QMP/cEDtjSh1WVfoIFNAaLA0MHWfue8KBwoGVsN7rBshs4g==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.13.tgz", + "integrity": "sha512-ALgXYNYDzk9YPVk80A+G4vz2D22Gv4j4y25exDBGgqTcwrVQP8rf/rjwUjHoh9apP76oLbUZTmUmvCMuTI1V9A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.13.tgz", + "integrity": "sha512-uFvkCpsZ1yqWQuonw5T1WZ4j59xP/PCvtu6I4pbLejhNo4nwjW6YalqnBvBSORq5/Ifo9S/wsIlVHzkzEwdtlw==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.13.tgz", + "integrity": "sha512-yxR9BBwEPs9acVEwTrEE2JJNHYVuPQC9YGjRfbNqtyfK/vVBQYuw8JaeRFAvFs3pVJdQD0C2BNP4q9d62SCP4w==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.13.tgz", + "integrity": "sha512-kzhjlrlJ+6ESRB/n12WTGll94+y+HFeyoWsOrLo/Si0s0f+Vip4b8vlnG0GSiS6JTsWYAtGHReGczFOaETlKIw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.13.tgz", + "integrity": "sha512-hXub4pcEds+U1TfvLp1maJ+GHRw7oizvzbGRdUvVDwtITtjq8qpHV5Q5hWNNn6Q+b3b2UxF03JcgnpzCw96nUQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.13.tgz", + "integrity": "sha512-KMrEfnVbmmJxT3vfTnPv/AiXpBFbbyExH13BsUGy1HZRPFMi5Gev5gk8kJIZCQSRfNR17aqq8sO5Crm2KpZkng==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.13.tgz", + "integrity": "sha512-cJT9O1LYljqnnqlHaS0hdG73t7hHzF3zcN0BPsjvBq+5Ad47VJun+/IG4inPhk8ta0aEDK6LdP+F9299xa483w==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.13.tgz", + "integrity": "sha512-+rghW8st6/7O6QJqAjVK3eXzKkZqYAw6LgHv7yTMiJ6ASnNvghSeOcIvXFep3W2oaJc35SgSPf21Ugh0o777qQ==", + "dev": true, + "optional": true + }, + "esbuild-loader": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.16.0.tgz", + "integrity": "sha512-LCJEwkf+nMJbNmVYNgg/0PaIZDdr5OcHw1qbWAZLkrmBRX+KwHY/yAS6ia98UBtwzk/WhsftUBNB6tfPHgFIxw==", + "dev": true, + "requires": { + "esbuild": "^0.13.4", + "joycon": "^3.0.1", + "json5": "^2.2.0", + "loader-utils": "^2.0.0", + "tapable": "^2.2.0", + "type-fest": "^1.4.0", + "webpack-sources": "^2.2.0" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } + }, + "esbuild-netbsd-64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.13.tgz", + "integrity": "sha512-A/B7rwmzPdzF8c3mht5TukbnNwY5qMJqes09ou0RSzA5/jm7Jwl/8z853ofujTFOLhkNHUf002EAgokzSgEMpQ==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.13.tgz", + "integrity": "sha512-szwtuRA4rXKT3BbwoGpsff6G7nGxdKgUbW9LQo6nm0TVCCjDNDC/LXxT994duIW8Tyq04xZzzZSW7x7ttDiw1w==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.13.tgz", + "integrity": "sha512-ihyds9O48tVOYF48iaHYUK/boU5zRaLOXFS+OOL3ceD39AyHo46HVmsJLc7A2ez0AxNZCxuhu+P9OxfPfycTYQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.13.tgz", + "integrity": "sha512-h2RTYwpG4ldGVJlbmORObmilzL8EECy8BFiF8trWE1ZPHLpECE9//J3Bi+W3eDUuv/TqUbiNpGrq4t/odbayUw==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.13.tgz", + "integrity": "sha512-oMrgjP4CjONvDHe7IZXHrMk3wX5Lof/IwFEIbwbhgbXGBaN2dke9PkViTiXC3zGJSGpMvATXVplEhlInJ0drHA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.13.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.13.tgz", + "integrity": "sha512-6fsDfTuTvltYB5k+QPah/x7LrI2+OLAJLE3bWLDiZI6E8wXMQU+wLqtEO/U/RvJgVY1loPs5eMpUBpVajczh1A==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9370,6 +9537,12 @@ } } }, + "joycon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz", + "integrity": "sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==", + "dev": true + }, "js-message": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", @@ -15011,13 +15184,12 @@ } }, "terser-webpack-plugin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", - "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", + "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", "dev": true, "requires": { "jest-worker": "^27.0.6", - "p-limit": "^3.1.0", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -15404,9 +15576,9 @@ } }, "typescript": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.2.tgz", - "integrity": "sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, "typical": { diff --git a/package.json b/package.json index f5a0f217..f304fc8a 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/mocha": "8.0.3", "@types/node": "14.14.41", "@types/node-ipc": "9.1.2", - "@types/react": "^16.8.5", + "@types/react": "16.8.5", "@types/react-dom": "16.8.4", "@types/semver": "7.1.0", "@types/sinon": "9.0.0", @@ -94,6 +94,7 @@ "electron-mocha": "9.3.2", "electron-notarize": "1.0.0", "electron-updater": "4.3.5", + "esbuild-loader": "2.16.0", "file-loader": "6.2.0", "husky": "4.2.5", "lint-staged": "10.2.2", @@ -106,10 +107,11 @@ "spectron": "14.0.0", "string-replace-loader": "3.0.1", "style-loader": "2.0.0", + "terser-webpack-plugin": "5.2.5", "ts-loader": "8.0.12", "ts-node": "9.1.1", "tslib": "2.0.0", - "typescript": "4.2.2", + "typescript": "4.4.4", "webpack": "5.11.0", "webpack-cli": "4.2.0", "webpack-dev-server": "3.11.2" diff --git a/tsconfig.json b/tsconfig.json index aefede61..b910567b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,27 @@ { "compilerOptions": { "strict": true, + "target": "es2019", + "typeRoots": ["./node_modules/@types", "./typings"], + "module": "commonjs", + "lib": ["dom", "esnext"], + "declaration": true, + "declarationMap": true, + "jsx": "react", + "pretty": true, + "sourceMap": true, + "baseUrl": "./src", + /* Additional Checks */ "noUnusedLocals": true, "noUnusedParameters": true, - "resolveJsonModule": true, - "target": "es2019", + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + /* Module Resolution Options */ "moduleResolution": "node", - "jsx": "react", - "typeRoots": ["./node_modules/@types", "./typings"] - } + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "allowJs": true, + }, + "exclude": ["test", "release/build", "release/app/dist", ".erb/dll"] } diff --git a/webpack.config.ts b/webpack.config.ts index 4ba7cca0..5b3f188f 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -14,17 +14,19 @@ * limitations under the License. */ -import * as CopyPlugin from 'copy-webpack-plugin'; +import CopyPlugin from 'copy-webpack-plugin'; import { readdirSync } from 'fs'; import * as _ from 'lodash'; import * as os from 'os'; import outdent from 'outdent'; import * as path from 'path'; import { env } from 'process'; -import * as SimpleProgressWebpackPlugin from 'simple-progress-webpack-plugin'; -import * as TerserPlugin from 'terser-webpack-plugin'; +import SimpleProgressWebpackPlugin from 'simple-progress-webpack-plugin'; +import TerserPlugin from 'terser-webpack-plugin'; import { BannerPlugin, NormalModuleReplacementPlugin } from 'webpack'; -import * as PnpWebpackPlugin from 'pnp-webpack-plugin'; +import PnpWebpackPlugin from 'pnp-webpack-plugin'; + +import * as tsconfigRaw from './tsconfig.webpack.json'; /** * Don't webpack package.json as mixpanel & sentry tokens @@ -141,13 +143,13 @@ const commonConfig = { minimize: true, minimizer: [ new TerserPlugin({ + parallel: true, terserOptions: { compress: false, mangle: false, - output: { - beautify: true, + format: { comments: false, - ecma: 2018, + ecma: 2020, }, }, extractComments: false, @@ -173,9 +175,11 @@ const commonConfig = { test: /\.tsx?$/, use: [ { - loader: 'ts-loader', + loader: 'esbuild-loader', options: { - configFile: 'tsconfig.webpack.json', + loader: 'tsx', + target: 'es2021', + tsconfigRaw, }, }, ],