diff --git a/.gitignore b/.gitignore index b7cb53e9..42f8377a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ node_modules out .webpack .env -.idea \ No newline at end of file +.idea +.vite diff --git a/commitlint.config.js b/commitlint.config.cjs similarity index 100% rename from commitlint.config.js rename to commitlint.config.cjs diff --git a/forge.config.js b/forge.config.js new file mode 100644 index 00000000..177cf458 --- /dev/null +++ b/forge.config.js @@ -0,0 +1,66 @@ +// @ts-check + +import { MakerZIP } from '@electron-forge/maker-zip' +import { VitePlugin } from '@electron-forge/plugin-vite' + +/** @type {import('@electron-forge/shared-types').ForgeConfig} */ +const config = { + makers: [new MakerZIP({}, ['darwin'])], + packagerConfig: { + appBundleId: 'com.browserosaurus', + appCategoryType: 'public.app-category.developer-tools', + asar: false, + extendInfo: 'plist/Info.plist', + icon: 'src/shared/static/icon/icon.icns', + osxNotarize: process.env.CI + ? undefined + : { + keychain: '~/Library/Keychains/login.keychain-db', + keychainProfile: 'AC_PASSWORD', + }, + osxSign: process.env.CI + ? undefined + : { + optionsForFile: () => ({ + 'entitlements': 'plist/entitlements.mac.plist', + 'hardened-runtime': true, + }), + }, + protocols: [ + { + name: 'HTTP link', + schemes: ['http', 'https'], + }, + { + name: 'File', + schemes: ['file'], + }, + ], + }, + plugins: [ + new VitePlugin({ + build: [ + { + config: 'vite.main.config.ts', + entry: 'src/main/main.ts', + }, + { + config: 'vite.preload.config.ts', + entry: 'src/renderers/shared/preload.ts', + }, + ], + renderer: [ + { + config: 'vite.renderer.prefs.config.ts', + name: 'prefs_window', + }, + { + config: 'vite.renderer.picker.config.ts', + name: 'picker_window', + }, + ], + }), + ], +} + +export default config diff --git a/forge.config.ts b/forge.config.ts deleted file mode 100644 index efd39eeb..00000000 --- a/forge.config.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { MakerZIP } from '@electron-forge/maker-zip' -import { WebpackPlugin } from '@electron-forge/plugin-webpack' -import type { ForgeConfig } from '@electron-forge/shared-types' - -import { mainConfig } from './webpack.main.config' -import { rendererConfig } from './webpack.renderer.config' - -const config: ForgeConfig = { - makers: [new MakerZIP({}, ['darwin'])], - packagerConfig: { - appBundleId: 'com.browserosaurus', - appCategoryType: 'public.app-category.developer-tools', - asar: false, - extendInfo: 'plist/Info.plist', - icon: 'src/shared/static/icon/icon.icns', - osxNotarize: process.env.CI - ? undefined - : { - keychain: '~/Library/Keychains/login.keychain-db', - keychainProfile: 'AC_PASSWORD', - }, - osxSign: process.env.CI - ? undefined - : { - optionsForFile: () => ({ - 'entitlements': 'plist/entitlements.mac.plist', - 'hardened-runtime': true, - }), - }, - protocols: [ - { - name: 'HTTP link', - schemes: ['http', 'https'], - }, - { - name: 'File', - schemes: ['file'], - }, - ], - }, - plugins: [ - new WebpackPlugin({ - mainConfig, - renderer: { - config: rendererConfig, - entryPoints: [ - { - html: './src/renderers/picker/index.html', - js: './src/renderers/picker/index.tsx', - name: 'picker_window', - preload: { - js: './src/renderers/shared/preload.ts', - }, - }, - { - html: './src/renderers/prefs/index.html', - js: './src/renderers/prefs/index.tsx', - name: 'prefs_window', - preload: { - js: './src/renderers/shared/preload.ts', - }, - }, - ], - }, - }), - { - config: { - externals: ['file-icon'], - includeDeps: false, - }, - name: '@timfish/forge-externals-plugin', - }, - ], -} - -export default config diff --git a/package-lock.json b/package-lock.json index 11acf26c..b14d5a7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,37 +17,35 @@ "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^8.0.0", "@dnd-kit/utilities": "^3.2.2", - "@electron-forge/cli": "~7.1.0", - "@electron-forge/maker-zip": "~7.1.0", - "@electron-forge/plugin-base": "~7.1.0", - "@electron-forge/plugin-webpack": "~7.1.0", - "@electron-forge/shared-types": "~7.1.0", + "@electron-forge/cli": "~7.2.0", + "@electron-forge/maker-zip": "~7.2.0", + "@electron-forge/plugin-base": "~7.2.0", + "@electron-forge/plugin-vite": "~7.2.0", + "@electron-forge/plugin-webpack": "~7.2.0", + "@electron-forge/shared-types": "~7.2.0", "@reduxjs/toolkit": "^2.0.1", "@testing-library/jest-dom": "^6.1.5", "@testing-library/react": "^14.1.2", "@timfish/forge-externals-plugin": "^0.2.1", "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", - "@types/node": "^20.10.4", + "@types/node": "^20.10.5", "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/react-redux": "^7.1.33", "@vercel/webpack-asset-relocator-loader": "^1.7.3", - "@will-stone/eslint-config": "^0.12.2", + "@will-stone/eslint-config": "^0.13.0", "@will-stone/prettier-config": "^7.0.2", "app-exists": "^2.1.1", "axios": "^1.6.2", "clsx": "^2.0.0", "concurrently": "^8.2.2", - "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.3", - "css-loader": "^6.8.1", "cssnano": "^6.0.2", - "electron": "^28.0.0", - "electron-log": "^5.0.1", + "electron": "^28.1.0", + "electron-log": "^5.0.2", "eslint": "^8.56.0", "fast-deep-equal": "^3.1.3", - "fork-ts-checker-webpack-plugin": "^9.0.2", "husky": "^8.0.3", "immer": "^10.0.3", "jest": "^29.7.0", @@ -55,30 +53,24 @@ "lint-staged": "^15.2.0", "lodash": "^4.17.21", "lowdb": "^6.0.1", - "mini-css-extract-plugin": "^2.7.6", - "node-loader": "^2.0.0", "picocolors": "^1.0.0", "postcss": "^8.4.32", "postcss-cli": "^11.0.0", "postcss-import": "^15.1.0", - "postcss-loader": "^7.3.3", "prettier": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^9.0.4", - "redux": "^5.0.0", + "redux": "^5.0.1", "rimraf": "^5.0.5", - "style-loader": "^3.3.3", - "tailwindcss": "^3.3.6", - "tidy-url": "^1.10.1", + "tailwindcss": "^3.4.0", + "tidy-url": "^1.10.2", "tings": "^9.1.0", "ts-jest": "^29.1.1", - "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "typescript": "^5.3.3", - "url-loader": "^4.1.1", "version-bump-prompt": "^6.1.0", - "webpack": "^5.89.0" + "vite": "^5.0.10" }, "engines": { "node": ">=16.0.0" @@ -1132,9 +1124,9 @@ } }, "node_modules/@electron-forge/cli": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.1.0.tgz", - "integrity": "sha512-+4PEscQxNP9syHA1NFHp2v3KVBrNBbtBEPL+g7/E2yc5yHJr1tb5aHIJvhyfQqxL5sQlUdNjZI6N4r3vRer2KA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.2.0.tgz", + "integrity": "sha512-FJ8XzT4w6bTC3trvHHWL67W1zp7g2xmCC5riNa1rjk8Gd2C1j8wf0ul4ch9kbcaEAFaXuXwv98QKXxhCn4aLtQ==", "dev": true, "funding": [ { @@ -1147,8 +1139,8 @@ } ], "dependencies": { - "@electron-forge/core": "7.1.0", - "@electron-forge/shared-types": "7.1.0", + "@electron-forge/core": "7.2.0", + "@electron-forge/shared-types": "7.2.0", "@electron/get": "^3.0.0", "chalk": "^4.0.0", "commander": "^4.1.1", @@ -1181,9 +1173,9 @@ } }, "node_modules/@electron-forge/core": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/core/-/core-7.1.0.tgz", - "integrity": "sha512-26VOiDNYylrln/pBO4gLbBlgks3iOBMONZmW0u9lkRkAie2hDmDDJr/LJcQIpLvHNJwexYUf3jBY1xR86HjNUA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/core/-/core-7.2.0.tgz", + "integrity": "sha512-7Sh0KW79Z/y9MStU3sWTBbTkM4SvV6rL557/ndlfAbZrxcGMnmWHrzn/odAZW1eyfhKguBb7C1Ijw0YTpsdVsw==", "dev": true, "funding": [ { @@ -1196,17 +1188,17 @@ } ], "dependencies": { - "@electron-forge/core-utils": "7.1.0", - "@electron-forge/maker-base": "7.1.0", - "@electron-forge/plugin-base": "7.1.0", - "@electron-forge/publisher-base": "7.1.0", - "@electron-forge/shared-types": "7.1.0", - "@electron-forge/template-base": "7.1.0", - "@electron-forge/template-vite": "7.1.0", - "@electron-forge/template-vite-typescript": "7.1.0", - "@electron-forge/template-webpack": "7.1.0", - "@electron-forge/template-webpack-typescript": "7.1.0", - "@electron-forge/tracer": "7.1.0", + "@electron-forge/core-utils": "7.2.0", + "@electron-forge/maker-base": "7.2.0", + "@electron-forge/plugin-base": "7.2.0", + "@electron-forge/publisher-base": "7.2.0", + "@electron-forge/shared-types": "7.2.0", + "@electron-forge/template-base": "7.2.0", + "@electron-forge/template-vite": "7.2.0", + "@electron-forge/template-vite-typescript": "7.2.0", + "@electron-forge/template-webpack": "7.2.0", + "@electron-forge/template-webpack-typescript": "7.2.0", + "@electron-forge/tracer": "7.2.0", "@electron/get": "^3.0.0", "@electron/packager": "^18.0.0", "@electron/rebuild": "^3.2.10", @@ -1237,12 +1229,12 @@ } }, "node_modules/@electron-forge/core-utils": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/core-utils/-/core-utils-7.1.0.tgz", - "integrity": "sha512-cxUn2nK3Ejdm4+76GmD3+nCnc7zDgKiVihIH96sqhntkWc0qFfCO5kheQmt+v7lCWxvRDR8yYzwxt5nU4Bg6ag==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/core-utils/-/core-utils-7.2.0.tgz", + "integrity": "sha512-PI1wETlF/+Cxm1m/IgURQ9S3LzHU70/S4CHmkw4xJg4wYVRTfiKpH2XRE9VqEJU854hEnsCGynAIn7/Z2h6SIA==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0", + "@electron-forge/shared-types": "7.2.0", "@electron/rebuild": "^3.2.10", "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", @@ -1286,12 +1278,12 @@ } }, "node_modules/@electron-forge/maker-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-7.1.0.tgz", - "integrity": "sha512-W+u8y2D30vhY1xnX3g5cuwsbUV+W5zLR/I8XSfHNofu6+/LOjI2Mu9y0C/pLOMrnVbt1+F9MkxxmLNt0TRlAjg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-7.2.0.tgz", + "integrity": "sha512-5dCFiVo4WhSlLf/T9MP+jnMqP3qfmwvjCSiTRE08USeotNWhycztcFox94NbxMJkRt329tNeG2RRs7RzdCz21w==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0", + "@electron-forge/shared-types": "7.2.0", "fs-extra": "^10.0.0", "which": "^2.0.2" }, @@ -1314,13 +1306,13 @@ } }, "node_modules/@electron-forge/maker-zip": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-zip/-/maker-zip-7.1.0.tgz", - "integrity": "sha512-6tUsILYC/TOIpqT6E7GuZgeFwkCtIvMUZNPEr7GcMKxlHl1EbDnzL5IsIb91dStIVWrPiQ4KgSuG/3klBiE/nw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-zip/-/maker-zip-7.2.0.tgz", + "integrity": "sha512-U6FSSMcHogHDv+7SmF037lJ9m0stwwqyerw7Q6mD3jKQHX9GBxFApEzA5HSURGPAEBhPgPppYOSMGRB6LV5F2g==", "dev": true, "dependencies": { - "@electron-forge/maker-base": "7.1.0", - "@electron-forge/shared-types": "7.1.0", + "@electron-forge/maker-base": "7.2.0", + "@electron-forge/shared-types": "7.2.0", "cross-zip": "^4.0.0", "fs-extra": "^10.0.0", "got": "^11.8.5" @@ -1344,27 +1336,45 @@ } }, "node_modules/@electron-forge/plugin-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/plugin-base/-/plugin-base-7.1.0.tgz", - "integrity": "sha512-DhCAWclTwfPZThrMTYOXPTnPn7q0TSNSTcIOfHcRCC0VJGFnp5zPYHIV4IV2RLKt0uLSMxrE+JvVjphTKm6HZQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-base/-/plugin-base-7.2.0.tgz", + "integrity": "sha512-c/pQK36BMBMKiemO68g1ZQOCXBA93x/aeX3lIXwK5bKVuaGt16Unfmby5Q7iIvY+/KsBuLYGkAder8HDN+4Nbw==", + "dev": true, + "dependencies": { + "@electron-forge/shared-types": "7.2.0" + }, + "engines": { + "node": ">= 16.4.0" + } + }, + "node_modules/@electron-forge/plugin-vite": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-vite/-/plugin-vite-7.2.0.tgz", + "integrity": "sha512-gVQ98tNRVL1ildZgehdJWNogZq6WJnefayxPhT9zrWrRxNUKChRTugDAPrv8Og/fHwAT5em+wHOilqBr3X2K2A==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0" + "@electron-forge/core-utils": "7.2.0", + "@electron-forge/plugin-base": "7.2.0", + "@electron-forge/shared-types": "7.2.0", + "@electron-forge/web-multi-logger": "7.2.0", + "chalk": "^4.0.0", + "debug": "^4.3.1", + "vite": "^4.1.1" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/plugin-webpack": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/plugin-webpack/-/plugin-webpack-7.1.0.tgz", - "integrity": "sha512-tKhwG2H+Xjgy+gnwUkUWEDLy1PSLihpt7ckID2w5BlCECuweaLTcpsYYAxwNWb8NG6U9N3Wh0AtXYNE2HBjiPg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-webpack/-/plugin-webpack-7.2.0.tgz", + "integrity": "sha512-L/0UDCYwSuxCysJh2QE0P0tIqXQvcTP7vhQwKW7sC9zFqpsfP3dn+xMPsQESZqe97i1k9xNHZnefpFFwrmabYQ==", "dev": true, "dependencies": { - "@electron-forge/core-utils": "7.1.0", - "@electron-forge/plugin-base": "7.1.0", - "@electron-forge/shared-types": "7.1.0", - "@electron-forge/web-multi-logger": "7.1.0", + "@electron-forge/core-utils": "7.2.0", + "@electron-forge/plugin-base": "7.2.0", + "@electron-forge/shared-types": "7.2.0", + "@electron-forge/web-multi-logger": "7.2.0", "chalk": "^4.0.0", "debug": "^4.3.1", "fs-extra": "^10.0.0", @@ -1392,24 +1402,24 @@ } }, "node_modules/@electron-forge/publisher-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.1.0.tgz", - "integrity": "sha512-CsYeWGK7Pu+9E44e95AvQa79VI4/ECdK9Ptw+Y9zVTGA+wuuhf65aOLvhpu3mQuMjpFovdrIjls3pSWzxTquOA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.2.0.tgz", + "integrity": "sha512-c0pwcQeMZi0S4iLlgA3pqm6ZdW2u7Ea4Ynat04Gw7su5GLtbrKRgYSL36ZRhzz7sgm4372niI0k91KaH5KToHg==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0" + "@electron-forge/shared-types": "7.2.0" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/shared-types": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.1.0.tgz", - "integrity": "sha512-uKCrWrgNCwwZB1DUBwo4/YyqLQNL55/X9xWhOT1dyw8W1wQ/bxD33F73FYNdmoL6qgIywWGNRLdQ4e1YaSxnvg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.2.0.tgz", + "integrity": "sha512-d8i+pwPwBnlmFTRkq7QfaoRS9LywfyjDdHqQZuArFbL6NLAEbZ52irFiAE3NSLf4STew/BA6IK9sTPz3KRmvQw==", "dev": true, "dependencies": { - "@electron-forge/tracer": "7.1.0", + "@electron-forge/tracer": "7.2.0", "@electron/packager": "^18.0.0", "@electron/rebuild": "^3.2.10", "listr2": "^5.0.3" @@ -1419,12 +1429,12 @@ } }, "node_modules/@electron-forge/template-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-base/-/template-base-7.1.0.tgz", - "integrity": "sha512-+i17exI14jTkx7G5pCYIkPdBaXogRdDChH7ly5HoM3rVoun3udyhvkYvHohG1eIM/NaxCCIW4CZb6moey+HnlQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-base/-/template-base-7.2.0.tgz", + "integrity": "sha512-X7JrgQctgN0saFih/kKWVJ3KxiI1BpzdrkW58vs5H0kXXmA6UObE16/dWuKYfB06j0yIsfMbZ32Md1yAkgdCfg==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0", + "@electron-forge/shared-types": "7.2.0", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "fs-extra": "^10.0.0", @@ -1449,13 +1459,13 @@ } }, "node_modules/@electron-forge/template-vite": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-vite/-/template-vite-7.1.0.tgz", - "integrity": "sha512-j9Eyjot+QiTwXHUqXs/XJM0iRzbPNWMGPGMojOgbgkfzwFKSj3meR+vrdsvUFpTh7GCAil8bMMHIbo3DTjGj6Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite/-/template-vite-7.2.0.tgz", + "integrity": "sha512-Q5FSD+NVNMJKuAo/htQXpk3Q/eo116Xhx0zTzhSldAqpsgfxdAIJhl8TFmdVvCJIig1vEcLG2n/PgudxnuDuEQ==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0", - "@electron-forge/template-base": "7.1.0", + "@electron-forge/shared-types": "7.2.0", + "@electron-forge/template-base": "7.2.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1463,13 +1473,13 @@ } }, "node_modules/@electron-forge/template-vite-typescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.1.0.tgz", - "integrity": "sha512-HVNyaSBOxMLk/mozHnRSA8X6BSlYzSmG0sPtULl2gIqvXLwURb8RRUNf4NB21fsgm3jYZbmLQ3vRSQ94ZbUu1Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.2.0.tgz", + "integrity": "sha512-knN3lxJY6UyXa2u5957K4ZyItCoCw22wrUhQARvdHOcgXvMFAcwvfEDT8zOQy6ki6A9W3cMHhSTys7dC8/ChVw==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0", - "@electron-forge/template-base": "7.1.0", + "@electron-forge/shared-types": "7.2.0", + "@electron-forge/template-base": "7.2.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1505,13 +1515,13 @@ } }, "node_modules/@electron-forge/template-webpack": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack/-/template-webpack-7.1.0.tgz", - "integrity": "sha512-vDEV7svgyKvx7szLfDHz0dWkOGFMiGI6xUmp1s5CDdPb55B0Fg+apKxmY4/jp/D+8i+ZncK66SeMV7fYqQv4ew==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack/-/template-webpack-7.2.0.tgz", + "integrity": "sha512-h2LQ3vAzIraRqLUM5fKOLXknp7n5hrQXudRjO/vEEbm1a0jbl4yjp6liKk3yx8MFFO4eAHVDrXwRSsLR3a2Wew==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0", - "@electron-forge/template-base": "7.1.0", + "@electron-forge/shared-types": "7.2.0", + "@electron-forge/template-base": "7.2.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1519,13 +1529,13 @@ } }, "node_modules/@electron-forge/template-webpack-typescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.1.0.tgz", - "integrity": "sha512-ut/0YbTsQcpi0UHHm9hMSZDNxsMvnMyWZbkZbwWHL2fsCuqOAi0lopz0v0K9FGLALMsn2atBi8iDHdGGNX1diw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.2.0.tgz", + "integrity": "sha512-eshvPcYXUgmpB+ts9/xRPvQexY46unfe0mGmLDaj8s/5fqCANgyUO5jusvMXlJdf3qwJ/rfi3jS0NuqnjsqskQ==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.1.0", - "@electron-forge/template-base": "7.1.0", + "@electron-forge/shared-types": "7.2.0", + "@electron-forge/template-base": "7.2.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1561,9 +1571,9 @@ } }, "node_modules/@electron-forge/tracer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.1.0.tgz", - "integrity": "sha512-e3nWweJpWeFS7usi5d9GEEXiw38qreNz46I+yb4klNC/IPt8Xmmh2VsgUvuld8N9HcJ4eCU9CPLGjkeRQr9RiA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.2.0.tgz", + "integrity": "sha512-EoJ07nptEuuY2fcs/bUWzIf11RQRx6Ch/dZ6A9WIRcFYe9cFrslQwvyUf0siY3jcqVvxETCz69JGuBxKGwak7A==", "dev": true, "dependencies": { "chrome-trace-event": "^1.0.3" @@ -1573,9 +1583,9 @@ } }, "node_modules/@electron-forge/web-multi-logger": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@electron-forge/web-multi-logger/-/web-multi-logger-7.1.0.tgz", - "integrity": "sha512-iPUy+GUiC4j4sl7qAayxdI7838JC0pr8XnlQnvlQbHT5kWGpu+3k0dENFcqTq896rdUMs9t26V1WCDEpwr2jGw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@electron-forge/web-multi-logger/-/web-multi-logger-7.2.0.tgz", + "integrity": "sha512-RILwNWrcPvMIefpwho/xVu38cyjeAcJCfuJ9YpQDgsVyJzGtPVXbLeKCL8lepMu+I2j9lnYPMKkp2QzycLwMcg==", "dev": true, "dependencies": { "express": "^4.17.1", @@ -1741,9 +1751,9 @@ } }, "node_modules/@electron/packager": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.1.1.tgz", - "integrity": "sha512-NAqcAs/tnGS6O3RuWfTbPsRCBXt96qijFqvAhTtBQfxkL0nlHqnwTnr2HUPpNc5L2Xo/8nBeP8BKfMd+ySLNsQ==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.1.3.tgz", + "integrity": "sha512-21T5MxUf7DwV07IIes3jO/571mXCjOGVPdmYJFPCVDTimFiHQSW0Oy+OIGQaKBiNIXfnP29KylsCQbmds6O6Iw==", "dev": true, "dependencies": { "@electron/asar": "^3.2.1", @@ -1771,7 +1781,7 @@ "electron-packager": "bin/electron-packager.js" }, "engines": { - "node": ">= 16.4.0" + "node": ">= 16.13.0" }, "funding": { "url": "https://github.com/electron/packager?sponsor=1" @@ -1878,6 +1888,374 @@ "node": ">=16.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz", + "integrity": "sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.10.tgz", + "integrity": "sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz", + "integrity": "sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.10.tgz", + "integrity": "sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz", + "integrity": "sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz", + "integrity": "sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz", + "integrity": "sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz", + "integrity": "sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz", + "integrity": "sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz", + "integrity": "sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz", + "integrity": "sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz", + "integrity": "sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz", + "integrity": "sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz", + "integrity": "sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz", + "integrity": "sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz", + "integrity": "sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz", + "integrity": "sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz", + "integrity": "sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz", + "integrity": "sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz", + "integrity": "sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz", + "integrity": "sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz", + "integrity": "sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz", + "integrity": "sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2793,9 +3171,21 @@ "node": ">=14" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "node_modules/@pkgr/core": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", + "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", "dev": true, "dependencies": { @@ -2813,6 +3203,36 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@reduxjs/toolkit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.0.1.tgz", @@ -2837,6 +3257,175 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz", + "integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz", + "integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz", + "integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz", + "integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz", + "integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz", + "integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz", + "integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz", + "integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz", + "integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz", + "integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz", + "integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz", + "integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz", + "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -3146,9 +3735,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.44.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", - "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -3352,9 +3941,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", - "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -3382,9 +3971,9 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", "dev": true }, "node_modules/@types/range-parser": { @@ -3553,16 +4142,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz", - "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.16.0.tgz", + "integrity": "sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/type-utils": "6.14.0", - "@typescript-eslint/utils": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.16.0", + "@typescript-eslint/type-utils": "6.16.0", + "@typescript-eslint/utils": "6.16.0", + "@typescript-eslint/visitor-keys": "6.16.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -3588,15 +4177,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz", - "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.16.0.tgz", + "integrity": "sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "6.16.0", + "@typescript-eslint/types": "6.16.0", + "@typescript-eslint/typescript-estree": "6.16.0", + "@typescript-eslint/visitor-keys": "6.16.0", "debug": "^4.3.4" }, "engines": { @@ -3616,13 +4205,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz", - "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.16.0.tgz", + "integrity": "sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0" + "@typescript-eslint/types": "6.16.0", + "@typescript-eslint/visitor-keys": "6.16.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3633,13 +4222,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz", - "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.16.0.tgz", + "integrity": "sha512-ThmrEOcARmOnoyQfYkHw/DX2SEYBalVECmoldVuH6qagKROp/jMnfXpAU/pAIWub9c4YTxga+XwgAkoA0pxfmg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/utils": "6.14.0", + "@typescript-eslint/typescript-estree": "6.16.0", + "@typescript-eslint/utils": "6.16.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -3660,9 +4249,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz", - "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.16.0.tgz", + "integrity": "sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3673,16 +4262,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz", - "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.16.0.tgz", + "integrity": "sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/types": "6.16.0", + "@typescript-eslint/visitor-keys": "6.16.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -3699,6 +4289,15 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -3719,6 +4318,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3729,17 +4343,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz", - "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.16.0.tgz", + "integrity": "sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", + "@typescript-eslint/scope-manager": "6.16.0", + "@typescript-eslint/types": "6.16.0", + "@typescript-eslint/typescript-estree": "6.16.0", "semver": "^7.5.4" }, "engines": { @@ -3754,12 +4368,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz", - "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.16.0.tgz", + "integrity": "sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/types": "6.16.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3932,9 +4546,9 @@ } }, "node_modules/@will-stone/eslint-config": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@will-stone/eslint-config/-/eslint-config-0.12.2.tgz", - "integrity": "sha512-z64uzO7/hgWpsufC3qyrxStsm91iH4BQ93wM4gLB+nGLJ0FIE7yPL+vorlfNAuCHPEU3YH8LPh1B4HsPd3edQg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@will-stone/eslint-config/-/eslint-config-0.13.0.tgz", + "integrity": "sha512-jPkaqmwO4l/PryjHre8uTOGGknEhE526uygIL47bFy1FAbPn5R6Y482FweBmV8gbWCvn+fdFITIMgh1tDk0ltg==", "dev": true, "dependencies": { "@typescript-eslint/eslint-plugin": "^6.14.0", @@ -4838,15 +5452,6 @@ "node": ">=0.6" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -5424,9 +6029,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001571", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", + "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==", "dev": true, "funding": [ { @@ -6040,61 +6645,6 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -6284,32 +6834,6 @@ "postcss": "^8.0.9" } }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", @@ -6788,9 +7312,9 @@ } }, "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -6889,15 +7413,12 @@ } }, "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/define-properties": { @@ -7211,9 +7732,9 @@ "dev": true }, "node_modules/electron": { - "version": "28.0.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-28.0.0.tgz", - "integrity": "sha512-eDhnCFBvG0PGFVEpNIEdBvyuGUBsFdlokd+CtuCe2ER3P+17qxaRfWRxMmksCOKgDHb5Wif5UxqOkZSlA4snlw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-28.1.0.tgz", + "integrity": "sha512-82Y7o4PSWPn1o/aVwYPsgmBw6Gyf2lVHpaBu3Ef8LrLWXxytg7ZRZr/RtDqEMOzQp3+mcuy3huH84MyjdmP50Q==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -7229,18 +7750,18 @@ } }, "node_modules/electron-log": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.1.tgz", - "integrity": "sha512-x4wnwHg00h/onWQgjmvcdLV7Mrd9TZjxNs8LmXVpqvANDf4FsSs5wLlzOykWLcaFzR3+5hdVEQ8ctmrUxgHlPA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.2.tgz", + "integrity": "sha512-uzUXpUGZ5lJeCEIn4Hrxt6zQWiURu+EbFyTul0Y81huc6UrvWXIOMx4WxNdaGJYWPk9YLWrz2dQf3894MoZKXw==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/electron-to-chromium": { - "version": "1.4.614", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz", - "integrity": "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==", + "version": "1.4.616", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", + "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==", "dev": true }, "node_modules/electron/node_modules/@electron/get": { @@ -7332,15 +7853,6 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -7579,6 +8091,44 @@ "dev": true, "optional": true }, + "node_modules/esbuild": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz", + "integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.10", + "@esbuild/android-arm": "0.19.10", + "@esbuild/android-arm64": "0.19.10", + "@esbuild/android-x64": "0.19.10", + "@esbuild/darwin-arm64": "0.19.10", + "@esbuild/darwin-x64": "0.19.10", + "@esbuild/freebsd-arm64": "0.19.10", + "@esbuild/freebsd-x64": "0.19.10", + "@esbuild/linux-arm": "0.19.10", + "@esbuild/linux-arm64": "0.19.10", + "@esbuild/linux-ia32": "0.19.10", + "@esbuild/linux-loong64": "0.19.10", + "@esbuild/linux-mips64el": "0.19.10", + "@esbuild/linux-ppc64": "0.19.10", + "@esbuild/linux-riscv64": "0.19.10", + "@esbuild/linux-s390x": "0.19.10", + "@esbuild/linux-x64": "0.19.10", + "@esbuild/netbsd-x64": "0.19.10", + "@esbuild/openbsd-x64": "0.19.10", + "@esbuild/sunos-x64": "0.19.10", + "@esbuild/win32-arm64": "0.19.10", + "@esbuild/win32-ia32": "0.19.10", + "@esbuild/win32-x64": "0.19.10" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -7810,20 +8360,19 @@ } }, "node_modules/eslint-plugin-i": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-i/-/eslint-plugin-i-2.29.0.tgz", - "integrity": "sha512-slGeTS3GQzx9267wLJnNYNO8X9EHGsc75AKIAFvnvMYEcTJKotPKL1Ru5PIGVHIVet+2DsugePWp8Oxpx8G22w==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-i/-/eslint-plugin-i-2.29.1.tgz", + "integrity": "sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "doctrine": "^2.1.0", + "debug": "^4.3.4", + "doctrine": "^3.0.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "get-tsconfig": "^4.6.2", + "get-tsconfig": "^4.7.2", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "resolve": "^1.22.3", - "semver": "^7.5.3" + "semver": "^7.5.4" }, "engines": { "node": ">=12" @@ -7835,31 +8384,10 @@ "eslint": "^7.2.0 || ^8" } }, - "node_modules/eslint-plugin-i/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-i/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "node_modules/eslint-plugin-jest": { + "version": "27.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", + "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" @@ -8063,9 +8591,9 @@ } }, "node_modules/eslint-plugin-n": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.4.0.tgz", - "integrity": "sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.5.0.tgz", + "integrity": "sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", @@ -8090,23 +8618,24 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", - "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.2.tgz", + "integrity": "sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "synckit": "^0.8.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/prettier" + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", + "eslint-config-prettier": "*", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -8653,9 +9182,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -8986,97 +9515,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", - "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^8.2.0", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -10144,9 +10582,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz", - "integrity": "sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", "dev": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -10163,7 +10601,16 @@ "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/htmlparser2": { @@ -10363,18 +10810,6 @@ "node": ">=0.10.0" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -12252,9 +12687,9 @@ } }, "node_modules/jsdom/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -12758,9 +13193,9 @@ } }, "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -13031,20 +13466,6 @@ "node": ">=6.11.5" } }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -13537,25 +13958,6 @@ "node": ">=4" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -13823,12 +14225,6 @@ "node": ">=10" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true - }, "node_modules/node-api-version": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz", @@ -13935,25 +14331,6 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/node-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-2.0.0.tgz", - "integrity": "sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -14245,18 +14622,17 @@ } }, "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", "is-wsl": "^2.2.0" }, "engines": { - "node": ">=14.16" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14972,28 +15348,6 @@ } } }, - "node_modules/postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, "node_modules/postcss-merge-longhand": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.1.tgz", @@ -15092,65 +15446,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/postcss-nested": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", @@ -15371,9 +15666,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.14.tgz", + "integrity": "sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -15474,6 +15769,22 @@ } } }, + "node_modules/prettier-plugin-packagejson/node_modules/synckit": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", + "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -15974,9 +16285,9 @@ } }, "node_modules/redux": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.0.tgz", - "integrity": "sha512-blLIYmYetpZMET6Q6uCY7Jtl/Im5OBldy+vNPauA8vvsdqyt66oep4EUpAMWNHauTC6xa9JuRPhRB72rY82QGA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", "dev": true }, "node_modules/redux-thunk": { @@ -16354,6 +16665,35 @@ "node": ">=8.0" } }, + "node_modules/rollup": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz", + "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.1", + "@rollup/rollup-android-arm64": "4.9.1", + "@rollup/rollup-darwin-arm64": "4.9.1", + "@rollup/rollup-darwin-x64": "4.9.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.1", + "@rollup/rollup-linux-arm64-gnu": "4.9.1", + "@rollup/rollup-linux-arm64-musl": "4.9.1", + "@rollup/rollup-linux-riscv64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-musl": "4.9.1", + "@rollup/rollup-win32-arm64-msvc": "4.9.1", + "@rollup/rollup-win32-ia32-msvc": "4.9.1", + "@rollup/rollup-win32-x64-msvc": "4.9.1", + "fsevents": "~2.3.2" + } + }, "node_modules/run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", @@ -16490,27 +16830,57 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, @@ -17149,9 +17519,9 @@ } }, "node_modules/steno": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/steno/-/steno-3.1.1.tgz", - "integrity": "sha512-B7c6EVH7oEiaMRW36SjUnktkDwp/qd4pQiduylyiqvcZEZDeX0IIFZRBZdwO/RaVo60M0wkDwC0e8yeKaR4VGg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/steno/-/steno-3.2.0.tgz", + "integrity": "sha512-zPKkv+LqoYffxrtD0GIVA08DvF6v1dW02qpP5XnERoobq9g3MKcTSBTi08gbGNFMNRo3TQV/6kBw811T1LUhKg==", "dev": true, "engines": { "node": ">=16" @@ -17406,22 +17776,6 @@ "node": ">=0.8.0" } }, - "node_modules/style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/stylehacks": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.1.tgz", @@ -17439,14 +17793,14 @@ } }, "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "7.1.6", + "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", @@ -17457,29 +17811,64 @@ "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/sudo-prompt": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", @@ -17622,12 +18011,12 @@ "dev": true }, "node_modules/synckit": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", - "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "dependencies": { - "@pkgr/utils": "^2.4.2", + "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" }, "engines": { @@ -17638,9 +18027,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", - "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", + "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -17820,31 +18209,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -17859,30 +18223,6 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -17985,9 +18325,9 @@ "dev": true }, "node_modules/tidy-url": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/tidy-url/-/tidy-url-1.10.1.tgz", - "integrity": "sha512-MJHrVcwgEs2JFCuTTH7xHksHnm2EOGx8GnJEcHtez4nf5gsH+f3zwMjhJRZv42qsNb99pEkcExEMQwEWzej2dw==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/tidy-url/-/tidy-url-1.10.2.tgz", + "integrity": "sha512-p6PuFn2nCj+R9Fn2e/hGiewtayl0TTkjb+hrYQfUS8Y4DtIG/J41Syu53UTiSheUp7bEDNnBVm+ypFfzzgooGg==", "dev": true }, "node_modules/tings": { @@ -18192,35 +18532,6 @@ } } }, - "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -18553,82 +18864,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -18863,6 +19098,61 @@ "node": ">=10" } }, + "node_modules/vite": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", + "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -18994,6 +19284,25 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/webpack-dev-server": { "version": "4.15.1", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", @@ -19053,15 +19362,6 @@ } } }, - "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", @@ -19071,23 +19371,6 @@ "node": ">= 10" } }, - "node_modules/webpack-dev-server/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/webpack-dev-server/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -19103,10 +19386,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -19147,31 +19449,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -19194,30 +19471,6 @@ "node": ">=4.0" } }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", diff --git a/package.json b/package.json index f116baed..48d40ae4 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "repository": "https://github.com/will-stone/browserosaurus", "license": "GPL-3.0-only", "author": "Will Stone", - "main": "./.webpack/main", + "type": "module", + "main": ".vite/build/main.js", "scripts": { "doctor": "npm run lint && npm run typecheck && npm run test", "icns": "cd ./src/shared/static/icon && ../../../../scripts/png2icns.sh icon.png", @@ -44,37 +45,35 @@ "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^8.0.0", "@dnd-kit/utilities": "^3.2.2", - "@electron-forge/cli": "~7.1.0", - "@electron-forge/maker-zip": "~7.1.0", - "@electron-forge/plugin-base": "~7.1.0", - "@electron-forge/plugin-webpack": "~7.1.0", - "@electron-forge/shared-types": "~7.1.0", + "@electron-forge/cli": "~7.2.0", + "@electron-forge/maker-zip": "~7.2.0", + "@electron-forge/plugin-base": "~7.2.0", + "@electron-forge/plugin-vite": "~7.2.0", + "@electron-forge/plugin-webpack": "~7.2.0", + "@electron-forge/shared-types": "~7.2.0", "@reduxjs/toolkit": "^2.0.1", "@testing-library/jest-dom": "^6.1.5", "@testing-library/react": "^14.1.2", "@timfish/forge-externals-plugin": "^0.2.1", "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", - "@types/node": "^20.10.4", + "@types/node": "^20.10.5", "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/react-redux": "^7.1.33", "@vercel/webpack-asset-relocator-loader": "^1.7.3", - "@will-stone/eslint-config": "^0.12.2", + "@will-stone/eslint-config": "^0.13.0", "@will-stone/prettier-config": "^7.0.2", "app-exists": "^2.1.1", "axios": "^1.6.2", "clsx": "^2.0.0", "concurrently": "^8.2.2", - "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.3", - "css-loader": "^6.8.1", "cssnano": "^6.0.2", - "electron": "^28.0.0", - "electron-log": "^5.0.1", + "electron": "^28.1.0", + "electron-log": "^5.0.2", "eslint": "^8.56.0", "fast-deep-equal": "^3.1.3", - "fork-ts-checker-webpack-plugin": "^9.0.2", "husky": "^8.0.3", "immer": "^10.0.3", "jest": "^29.7.0", @@ -82,33 +81,30 @@ "lint-staged": "^15.2.0", "lodash": "^4.17.21", "lowdb": "^6.0.1", - "mini-css-extract-plugin": "^2.7.6", - "node-loader": "^2.0.0", "picocolors": "^1.0.0", "postcss": "^8.4.32", "postcss-cli": "^11.0.0", "postcss-import": "^15.1.0", - "postcss-loader": "^7.3.3", "prettier": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^9.0.4", - "redux": "^5.0.0", + "redux": "^5.0.1", "rimraf": "^5.0.5", - "style-loader": "^3.3.3", - "tailwindcss": "^3.3.6", - "tidy-url": "^1.10.1", + "tailwindcss": "^3.4.0", + "tidy-url": "^1.10.2", "tings": "^9.1.0", "ts-jest": "^29.1.1", - "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "typescript": "^5.3.3", - "url-loader": "^4.1.1", "version-bump-prompt": "^6.1.0", - "webpack": "^5.89.0" + "vite": "^5.0.10" }, "engines": { "node": ">=16.0.0" }, + "overrides": { + "vite": "^5.0.10" + }, "productName": "Browserosaurus" } diff --git a/src/config/apps.test.ts b/src/config/apps.test.ts index 11003253..92b45995 100644 --- a/src/config/apps.test.ts +++ b/src/config/apps.test.ts @@ -1,5 +1,5 @@ -import { getKeys } from '../shared/utils/get-keys' -import { apps } from './apps' +import { getKeys } from '../shared/utils/get-keys.js' +import { apps } from './apps.js' test.each(getKeys(apps))( '%s should not include anything but allowed keys', diff --git a/src/main/database.ts b/src/main/database.ts index b323300b..f6e93a3e 100644 --- a/src/main/database.ts +++ b/src/main/database.ts @@ -3,8 +3,8 @@ import { LowSync } from 'lowdb' import { JSONFileSync } from 'lowdb/node' import path from 'path' -import type { Storage } from '../shared/state/reducer.storage' -import { defaultStorage } from '../shared/state/reducer.storage' +import type { Storage } from '../shared/state/reducer.storage.js' +import { defaultStorage } from '../shared/state/reducer.storage.js' const keys = Object.keys as (o: T) => Extract[] diff --git a/src/main/main.ts b/src/main/main.ts index dad23ba2..3a392c76 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -1,14 +1,11 @@ -import type { AnyAction } from '@reduxjs/toolkit' +import type { UnknownAction } from '@reduxjs/toolkit' import electron, { app } from 'electron' import { TidyURL } from 'tidy-url' import { sleep } from 'tings' -import { Channel } from '../shared/state/channels' -import { openedUrl, readiedApp } from './state/actions' -import { dispatch, getState } from './state/store' - -// Attempt to fix this bug: https://github.com/electron/electron/issues/20944 -app.commandLine.appendArgument('--enable-features=Metal') +import { Channel } from '../shared/state/channels.js' +import { openedUrl, readiedApp } from './state/actions.js' +import { dispatch, getState } from './state/store.js' app.on('ready', () => dispatch(readiedApp())) @@ -38,5 +35,9 @@ app.on('open-url', (event, url) => { /** * Enter actions from renderer into main's store's queue */ -electron.ipcMain.on(Channel.PREFS, (_, action: AnyAction) => dispatch(action)) -electron.ipcMain.on(Channel.PICKER, (_, action: AnyAction) => dispatch(action)) +electron.ipcMain.on(Channel.PREFS, (_, action: UnknownAction) => + dispatch(action), +) +electron.ipcMain.on(Channel.PICKER, (_, action: UnknownAction) => + dispatch(action), +) diff --git a/src/main/state/actions.ts b/src/main/state/actions.ts index d808b71e..16e546c6 100644 --- a/src/main/state/actions.ts +++ b/src/main/state/actions.ts @@ -1,9 +1,9 @@ import type { Rectangle } from 'electron/main' -import type { AppName } from '../../config/apps' -import type { Data } from '../../shared/state/reducer.data' -import type { Storage } from '../../shared/state/reducer.storage' -import { actionNamespacer } from '../../shared/utils/action-namespacer' +import type { AppName } from '../../config/apps.js' +import type { Data } from '../../shared/state/reducer.data.js' +import type { Storage } from '../../shared/state/reducer.storage.js' +import { actionNamespacer } from '../../shared/utils/action-namespacer.js' const main = actionNamespacer('main') diff --git a/src/main/state/middleware.action-hub.ts b/src/main/state/middleware.action-hub.ts index ce2a1c83..80e926e3 100644 --- a/src/main/state/middleware.action-hub.ts +++ b/src/main/state/middleware.action-hub.ts @@ -3,14 +3,14 @@ import { app, autoUpdater, shell } from 'electron' import deepEqual from 'fast-deep-equal' -import { B_URL, ISSUES_URL } from '../../config/constants' +import { B_URL, ISSUES_URL } from '../../config/constants.js' import { clickedApp, clickedUpdateBar, clickedUrlBar, pressedKey, startedPicker, -} from '../../renderers/picker/state/actions' +} from '../../renderers/picker/state/actions.js' import { clickedHomepageButton, clickedOpenIssueButton, @@ -20,24 +20,24 @@ import { clickedUpdateRestartButton, confirmedReset, startedPrefs, -} from '../../renderers/prefs/state/actions' -import type { Middleware } from '../../shared/state/model' -import type { RootState } from '../../shared/state/reducer.root' -import { database } from '../database' -import { createTray } from '../tray' -import copyUrlToClipboard from '../utils/copy-url-to-clipboard' -import { getAppIcons } from '../utils/get-app-icons' -import { getInstalledAppNames } from '../utils/get-installed-app-names' -import { initUpdateChecker } from '../utils/init-update-checker' -import { openApp } from '../utils/open-app' -import { removeWindowsFromMemory } from '../utils/remove-windows-from-memory' +} from '../../renderers/prefs/state/actions.js' +import type { Middleware } from '../../shared/state/model.js' +import type { RootState } from '../../shared/state/reducer.root.js' +import { database } from '../database.js' +import { createTray } from '../tray.js' +import copyUrlToClipboard from '../utils/copy-url-to-clipboard.js' +import { getAppIcons } from '../utils/get-app-icons.js' +import { getInstalledAppNames } from '../utils/get-installed-app-names.js' +import { initUpdateChecker } from '../utils/init-update-checker.js' +import { openApp } from '../utils/open-app.js' +// import { removeWindowsFromMemory } from '../utils/remove-windows-from-memory' import { createWindows, pickerWindow, prefsWindow, showPickerWindow, showPrefsWindow, -} from '../windows' +} from '../windows.js' import { clickedOpenPrefs, clickedRestorePicker, @@ -45,7 +45,7 @@ import { readiedApp, receivedRendererStartupSignal, retrievedInstalledApps, -} from './actions' +} from './actions.js' /** * Asynchronously update perma store on state.storage changes @@ -124,7 +124,7 @@ export const actionHubMiddleware = // Update and restart else if (clickedUpdateRestartButton.match(action)) { autoUpdater.quitAndInstall() - removeWindowsFromMemory() + // removeWindowsFromMemory() } // Rescan for browsers @@ -209,7 +209,7 @@ export const actionHubMiddleware = if (process.env.NODE_ENV === 'development') { prefsWindow?.hide() } else { - removeWindowsFromMemory() + // removeWindowsFromMemory() app.relaunch() app.exit() } diff --git a/src/main/state/middleware.bus.ts b/src/main/state/middleware.bus.ts index 7f40a37d..064f14d8 100644 --- a/src/main/state/middleware.bus.ts +++ b/src/main/state/middleware.bus.ts @@ -1,7 +1,7 @@ -import { Channel } from '../../shared/state/channels' -import type { Middleware } from '../../shared/state/model' -import { isFSA } from '../../shared/state/model' -import { pickerWindow, prefsWindow } from '../windows' +import { Channel } from '../../shared/state/channels.js' +import type { Middleware } from '../../shared/state/model.js' +import { isFSA } from '../../shared/state/model.js' +import { pickerWindow, prefsWindow } from '../windows.js' /** * Pass actions between main and renderers diff --git a/src/main/state/store.ts b/src/main/state/store.ts index 526e998f..31815874 100644 --- a/src/main/state/store.ts +++ b/src/main/state/store.ts @@ -3,15 +3,15 @@ import { configureStore } from '@reduxjs/toolkit' import { app } from 'electron' -import { Channel } from '../../shared/state/channels' -import { channelInjectorMiddleware } from '../../shared/state/middleware.channel-injector' -import { logMiddleware } from '../../shared/state/middleware.log' -import { defaultData } from '../../shared/state/reducer.data' -import type { RootState } from '../../shared/state/reducer.root' -import { rootReducer } from '../../shared/state/reducer.root' -import { database } from '../database' -import { actionHubMiddleware } from './middleware.action-hub' -import { busMiddleware } from './middleware.bus' +import { Channel } from '../../shared/state/channels.js' +import { channelInjectorMiddleware } from '../../shared/state/middleware.channel-injector.js' +import { logMiddleware } from '../../shared/state/middleware.log.js' +import { defaultData } from '../../shared/state/reducer.data.js' +import type { RootState } from '../../shared/state/reducer.root.js' +import { rootReducer } from '../../shared/state/reducer.root.js' +import { database } from '../database.js' +import { actionHubMiddleware } from './middleware.action-hub.js' +import { busMiddleware } from './middleware.bus.js' const channel = Channel.MAIN diff --git a/src/main/tray.ts b/src/main/tray.ts index 6a41d235..b8e6806e 100644 --- a/src/main/tray.ts +++ b/src/main/tray.ts @@ -1,8 +1,12 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' + import { app, Menu, Tray } from 'electron' -import path from 'path' -import { clickedOpenPrefs, clickedRestorePicker } from './state/actions' -import { dispatch } from './state/store' +import { clickedOpenPrefs, clickedRestorePicker } from './state/actions.js' +import { dispatch } from './state/store.js' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) let tray: Tray | undefined @@ -10,11 +14,9 @@ let tray: Tray | undefined * Menubar icon */ export function createTray(): void { - tray = new Tray(path.join(__dirname, '/static/icon/tray_iconTemplate.png')) + tray = new Tray(path.join(__dirname, '/icon/tray_iconTemplate.png')) - tray.setPressedImage( - path.join(__dirname, '/static/icon/tray_iconHighlight.png'), - ) + tray.setPressedImage(path.join(__dirname, '/icon/tray_iconHighlight.png')) tray.setToolTip('Browserosaurus') diff --git a/src/main/utils/copy-url-to-clipboard.test.ts b/src/main/utils/copy-url-to-clipboard.test.ts index fc95005c..1f44e0b9 100644 --- a/src/main/utils/copy-url-to-clipboard.test.ts +++ b/src/main/utils/copy-url-to-clipboard.test.ts @@ -1,6 +1,6 @@ import electron, { clipboard } from 'electron' -import copyUrlToClipboard from './copy-url-to-clipboard' +import copyUrlToClipboard from './copy-url-to-clipboard.js' test('should copy string', () => { const notificationSpy = jest.spyOn(electron, 'Notification') diff --git a/src/main/utils/get-app-icons.ts b/src/main/utils/get-app-icons.ts index b74b75a4..b46dffd0 100644 --- a/src/main/utils/get-app-icons.ts +++ b/src/main/utils/get-app-icons.ts @@ -1,13 +1,16 @@ import { execFile } from 'node:child_process' import path from 'node:path' +import { fileURLToPath } from 'node:url' import { promisify } from 'node:util' import log from 'electron-log' -import type { AppName } from '../../config/apps' -import type { Storage } from '../../shared/state/reducer.storage' -import { gotAppIcons } from '../state/actions' -import { dispatch } from '../state/store' +import type { AppName } from '../../config/apps.js' +import type { Storage } from '../../shared/state/reducer.storage.js' +import { gotAppIcons } from '../state/actions.js' +import { dispatch } from '../state/store.js' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) const execFileP = promisify(execFile) diff --git a/src/main/utils/get-installed-app-names.ts b/src/main/utils/get-installed-app-names.ts index 69f25fc6..42e21609 100644 --- a/src/main/utils/get-installed-app-names.ts +++ b/src/main/utils/get-installed-app-names.ts @@ -3,10 +3,10 @@ import path from 'node:path' import { sleep } from 'tings' -import type { AppName } from '../../config/apps' -import { apps } from '../../config/apps' -import { retrievedInstalledApps, startedScanning } from '../state/actions' -import { dispatch } from '../state/store' +import type { AppName } from '../../config/apps.js' +import { apps } from '../../config/apps.js' +import { retrievedInstalledApps, startedScanning } from '../state/actions.js' +import { dispatch } from '../state/store.js' function getAllInstalledAppNames(): string[] { const appNames = execSync( diff --git a/src/main/utils/init-update-checker.ts b/src/main/utils/init-update-checker.ts index 75b201aa..d482232a 100644 --- a/src/main/utils/init-update-checker.ts +++ b/src/main/utils/init-update-checker.ts @@ -1,16 +1,16 @@ import { app, autoUpdater } from 'electron' import package_ from '../../../package.json' -import { logger } from '../../shared/utils/logger' +import { logger } from '../../shared/utils/logger.js' import { availableUpdate, downloadedUpdate, downloadingUpdate, -} from '../state/actions' -import { dispatch } from '../state/store' -import { pickerWindow, prefsWindow } from '../windows' -import { getUpdateUrl } from './get-update-url' -import { isUpdateAvailable } from './is-update-available' +} from '../state/actions.js' +import { dispatch } from '../state/store.js' +import { pickerWindow, prefsWindow } from '../windows.js' +import { getUpdateUrl } from './get-update-url.js' +import { isUpdateAvailable } from './is-update-available.js' /** * Auto update check on production diff --git a/src/main/utils/is-update-available.ts b/src/main/utils/is-update-available.ts index fafd1f98..ad1b1909 100644 --- a/src/main/utils/is-update-available.ts +++ b/src/main/utils/is-update-available.ts @@ -1,6 +1,6 @@ import axios from 'axios' -import { getUpdateUrl } from './get-update-url' +import { getUpdateUrl } from './get-update-url.js' export async function isUpdateAvailable(): Promise { let isNewVersionAvailable = false diff --git a/src/main/utils/open-app.ts b/src/main/utils/open-app.ts index cdff079f..b0bb6be1 100644 --- a/src/main/utils/open-app.ts +++ b/src/main/utils/open-app.ts @@ -1,7 +1,7 @@ import { execFile } from 'child_process' -import type { AppName } from '../../config/apps' -import { apps } from '../../config/apps' +import type { AppName } from '../../config/apps.js' +import { apps } from '../../config/apps.js' export function openApp( appName: AppName, diff --git a/src/main/utils/remove-windows-from-memory.ts b/src/main/utils/remove-windows-from-memory.ts index d5009d44..c04d5687 100644 --- a/src/main/utils/remove-windows-from-memory.ts +++ b/src/main/utils/remove-windows-from-memory.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { pickerWindow, prefsWindow } from '../windows' +import { pickerWindow, prefsWindow } from '../windows.js' /** * When exiting the app, the windows must first be removed from memory so that diff --git a/src/main/windows.ts b/src/main/windows.ts index 3bfe407b..f14fddf9 100644 --- a/src/main/windows.ts +++ b/src/main/windows.ts @@ -1,17 +1,21 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' + import { app, BrowserWindow, screen } from 'electron' -import path from 'path' -import { database } from './database' +import { database } from './database.js' import { changedPickerWindowBounds, gotDefaultBrowserStatus, -} from './state/actions' -import { dispatch } from './state/store' +} from './state/actions.js' +import { dispatch } from './state/store.js' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) -declare const PICKER_WINDOW_WEBPACK_ENTRY: string -declare const PICKER_WINDOW_PRELOAD_WEBPACK_ENTRY: string -declare const PREFS_WINDOW_WEBPACK_ENTRY: string -declare const PREFS_WINDOW_PRELOAD_WEBPACK_ENTRY: string +declare const PREFS_WINDOW_VITE_DEV_SERVER_URL: string +declare const PICKER_WINDOW_VITE_DEV_SERVER_URL: string +declare const PREFS_WINDOW_VITE_NAME: string +declare const PICKER_WINDOW_VITE_NAME: string // Prevents garbage collection let pickerWindow: BrowserWindow | null | undefined @@ -36,7 +40,7 @@ async function createWindows(): Promise { width: 600, // Meta - icon: path.join(__dirname, '/static/icon/icon.png'), + icon: path.join(__dirname, '/icon/icon.png'), title: 'Preferences', webPreferences: { @@ -44,7 +48,7 @@ async function createWindows(): Promise { nodeIntegration: false, nodeIntegrationInSubFrames: false, nodeIntegrationInWorker: false, - preload: PREFS_WINDOW_PRELOAD_WEBPACK_ENTRY, + preload: path.join(__dirname, 'preload.js'), }, }) @@ -73,7 +77,7 @@ async function createWindows(): Promise { fullscreenable: false, hasShadow: true, height, - icon: path.join(__dirname, '/static/icon/icon.png'), + icon: path.join(__dirname, '/icon/icon.png'), maximizable: false, maxWidth: 250, minHeight: 112, @@ -92,7 +96,7 @@ async function createWindows(): Promise { nodeIntegration: false, nodeIntegrationInSubFrames: false, nodeIntegrationInWorker: false, - preload: PICKER_WINDOW_PRELOAD_WEBPACK_ENTRY, + preload: path.join(__dirname, 'preload.js'), }, width: 250, }) @@ -120,10 +124,27 @@ async function createWindows(): Promise { pickerWindow?.hide() }) - await Promise.all([ - prefsWindow.loadURL(PREFS_WINDOW_WEBPACK_ENTRY), - pickerWindow.loadURL(PICKER_WINDOW_WEBPACK_ENTRY), - ]) + if (PREFS_WINDOW_VITE_DEV_SERVER_URL && PICKER_WINDOW_VITE_DEV_SERVER_URL) { + await Promise.all([ + prefsWindow.loadURL(PREFS_WINDOW_VITE_DEV_SERVER_URL), + pickerWindow.loadURL(PICKER_WINDOW_VITE_DEV_SERVER_URL), + ]) + } else { + await Promise.all([ + prefsWindow.loadFile( + path.join( + __dirname, + `../renderer/${PREFS_WINDOW_VITE_NAME}/index.html`, + ), + ), + pickerWindow.loadFile( + path.join( + __dirname, + `../renderer/${PICKER_WINDOW_VITE_NAME}/index.html`, + ), + ), + ]) + } } function showPickerWindow(): void { diff --git a/src/renderers/picker/components/_bootstrap.tsx b/src/renderers/picker/components/_bootstrap.tsx index 07e81268..8585f309 100644 --- a/src/renderers/picker/components/_bootstrap.tsx +++ b/src/renderers/picker/components/_bootstrap.tsx @@ -1,7 +1,7 @@ import { Provider } from 'react-redux' -import store from '../state/store' -import App from './layout' +import store from '../state/store.js' +import App from './layout.js' const Bootstrap: React.FC = () => { return ( diff --git a/src/renderers/picker/components/atoms/app-logo.tsx b/src/renderers/picker/components/atoms/app-logo.tsx index 858c041c..a962a4b6 100644 --- a/src/renderers/picker/components/atoms/app-logo.tsx +++ b/src/renderers/picker/components/atoms/app-logo.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx' -import type { InstalledApp } from '../../../shared/state/hooks' +import type { InstalledApp } from '../../../shared/state/hooks.js' type Props = React.ComponentPropsWithoutRef<'img'> & { readonly app: InstalledApp diff --git a/src/renderers/picker/components/hooks/use-keyboard-events.ts b/src/renderers/picker/components/hooks/use-keyboard-events.ts index 9cbe9a2f..3db2871b 100644 --- a/src/renderers/picker/components/hooks/use-keyboard-events.ts +++ b/src/renderers/picker/components/hooks/use-keyboard-events.ts @@ -1,7 +1,7 @@ import { useEffect } from 'react' import { useDispatch } from 'react-redux' -import { pressedKey } from '../../state/actions' +import { pressedKey } from '../../state/actions.js' export const useKeyboardEvents = (): void => { const dispatch = useDispatch() diff --git a/src/renderers/picker/components/layout.tsx b/src/renderers/picker/components/layout.tsx index 99079349..d2ec8779 100644 --- a/src/renderers/picker/components/layout.tsx +++ b/src/renderers/picker/components/layout.tsx @@ -2,21 +2,21 @@ import clsx from 'clsx' import { useEffect } from 'react' import { useDispatch } from 'react-redux' -import { Spinner } from '../../shared/components/atoms/spinner' +import { Spinner } from '../../shared/components/atoms/spinner.js' import { useDeepEqualSelector, useInstalledApps, useKeyCodeMap, useSelector, -} from '../../shared/state/hooks' -import { appsRef, appsScrollerRef } from '../refs' -import { clickedApp, startedPicker } from '../state/actions' -import AppLogo from './atoms/app-logo' -import Kbd from './atoms/kbd' -import { useKeyboardEvents } from './hooks/use-keyboard-events' -import SupportMessage from './organisms/support-message' -import UpdateBar from './organisms/update-bar' -import UrlBar from './organisms/url-bar' +} from '../../shared/state/hooks.js' +import { appsRef, appsScrollerRef } from '../refs.js' +import { clickedApp, startedPicker } from '../state/actions.js' +import AppLogo from './atoms/app-logo.js' +import Kbd from './atoms/kbd.js' +import { useKeyboardEvents } from './hooks/use-keyboard-events.js' +import SupportMessage from './organisms/support-message.js' +import UpdateBar from './organisms/update-bar.js' +import UrlBar from './organisms/url-bar.js' const useAppStarted = () => { const dispatch = useDispatch() diff --git a/src/renderers/picker/components/organisms/apps.test.tsx b/src/renderers/picker/components/organisms/apps.test.tsx index aa97e1e8..548c3571 100644 --- a/src/renderers/picker/components/organisms/apps.test.tsx +++ b/src/renderers/picker/components/organisms/apps.test.tsx @@ -3,18 +3,18 @@ import '../../../shared/preload' import { fireEvent, render, screen } from '@testing-library/react' import electron from 'electron' -import { keyLayout } from '../../../../../__fixtures__/key-layout' +import { keyLayout } from '../../../../../__fixtures__/key-layout.js' import { openedUrl, receivedRendererStartupSignal, retrievedInstalledApps, -} from '../../../../main/state/actions' -import { Channel } from '../../../../shared/state/channels' -import { defaultData } from '../../../../shared/state/reducer.data' -import { addChannelToAction } from '../../../../shared/utils/add-channel-to-action' -import { reorderedApp } from '../../../prefs/state/actions' -import { clickedApp, pressedKey } from '../../state/actions' -import Wrapper from '../_bootstrap' +} from '../../../../main/state/actions.js' +import { Channel } from '../../../../shared/state/channels.js' +import { defaultData } from '../../../../shared/state/reducer.data.js' +import { addChannelToAction } from '../../../../shared/utils/add-channel-to-action.js' +import { reorderedApp } from '../../../prefs/state/actions.js' +import { clickedApp, pressedKey } from '../../state/actions.js' +import Wrapper from '../_bootstrap.js' beforeAll(() => { global.window ??= Object.create(window) diff --git a/src/renderers/picker/components/organisms/support-message.tsx b/src/renderers/picker/components/organisms/support-message.tsx index a11a5022..7d8a4848 100644 --- a/src/renderers/picker/components/organisms/support-message.tsx +++ b/src/renderers/picker/components/organisms/support-message.tsx @@ -1,8 +1,8 @@ import clsx from 'clsx' import { useDispatch } from 'react-redux' -import { useIsSupportMessageHidden } from '../../../shared/state/hooks' -import { clickedDonate, clickedMaybeLater } from '../../state/actions' +import { useIsSupportMessageHidden } from '../../../shared/state/hooks.js' +import { clickedDonate, clickedMaybeLater } from '../../state/actions.js' const SupportMessage = (): JSX.Element => { const dispatch = useDispatch() diff --git a/src/renderers/picker/components/organisms/update-bar.tsx b/src/renderers/picker/components/organisms/update-bar.tsx index 9cf0e58f..715c8ae2 100644 --- a/src/renderers/picker/components/organisms/update-bar.tsx +++ b/src/renderers/picker/components/organisms/update-bar.tsx @@ -1,8 +1,8 @@ import clsx from 'clsx' import { useDispatch } from 'react-redux' -import { useSelector } from '../../../shared/state/hooks' -import { clickedUpdateBar } from '../../state/actions' +import { useSelector } from '../../../shared/state/hooks.js' +import { clickedUpdateBar } from '../../state/actions.js' const UpdateBar: React.FC = () => { const dispatch = useDispatch() diff --git a/src/renderers/picker/components/organisms/url-bar.test.tsx b/src/renderers/picker/components/organisms/url-bar.test.tsx index aa183f71..774da4d3 100644 --- a/src/renderers/picker/components/organisms/url-bar.test.tsx +++ b/src/renderers/picker/components/organisms/url-bar.test.tsx @@ -3,10 +3,10 @@ import '../../../shared/preload' import { render, screen } from '@testing-library/react' import electron from 'electron' -import { keyLayout } from '../../../../../__fixtures__/key-layout' -import { openedUrl } from '../../../../main/state/actions' -import { Channel } from '../../../../shared/state/channels' -import Wrapper from '../_bootstrap' +import { keyLayout } from '../../../../../__fixtures__/key-layout.js' +import { openedUrl } from '../../../../main/state/actions.js' +import { Channel } from '../../../../shared/state/channels.js' +import Wrapper from '../_bootstrap.js' beforeAll(() => { global.window ??= Object.create(window) diff --git a/src/renderers/picker/components/organisms/url-bar.tsx b/src/renderers/picker/components/organisms/url-bar.tsx index 7d5f8715..4990f04b 100644 --- a/src/renderers/picker/components/organisms/url-bar.tsx +++ b/src/renderers/picker/components/organisms/url-bar.tsx @@ -1,8 +1,8 @@ import clsx from 'clsx' import { useDispatch } from 'react-redux' -import { useSelector } from '../../../shared/state/hooks' -import { clickedUrlBar } from '../../state/actions' +import { useSelector } from '../../../shared/state/hooks.js' +import { clickedUrlBar } from '../../state/actions.js' type Props = { className?: string diff --git a/src/renderers/picker/index.html b/src/renderers/picker/index.html index c94266e9..337d8acf 100644 --- a/src/renderers/picker/index.html +++ b/src/renderers/picker/index.html @@ -1,4 +1,4 @@ - + @@ -7,5 +7,6 @@
+ diff --git a/src/renderers/picker/index.tsx b/src/renderers/picker/index.tsx index 5d0d3eb3..1ef38468 100644 --- a/src/renderers/picker/index.tsx +++ b/src/renderers/picker/index.tsx @@ -2,7 +2,7 @@ import '../shared/index.css' import { createRoot } from 'react-dom/client' -import Bootstrap from './components/_bootstrap' +import Bootstrap from './components/_bootstrap.js' const container = document.querySelector('#root') diff --git a/src/renderers/picker/state/actions.ts b/src/renderers/picker/state/actions.ts index 8b44dcad..34841dca 100644 --- a/src/renderers/picker/state/actions.ts +++ b/src/renderers/picker/state/actions.ts @@ -1,5 +1,5 @@ -import type { AppName } from '../../../config/apps' -import { actionNamespacer } from '../../../shared/utils/action-namespacer' +import type { AppName } from '../../../config/apps.js' +import { actionNamespacer } from '../../../shared/utils/action-namespacer.js' const picker = actionNamespacer('picker') diff --git a/src/renderers/picker/state/middleware.ts b/src/renderers/picker/state/middleware.ts index e33b00e8..781f65b4 100644 --- a/src/renderers/picker/state/middleware.ts +++ b/src/renderers/picker/state/middleware.ts @@ -5,10 +5,10 @@ import { clickedRestorePicker, openedUrl, retrievedInstalledApps, -} from '../../../main/state/actions' -import { getKeyLayout } from '../../shared/utils/get-key-layout-map' -import { appsRef, appsScrollerRef } from '../refs' -import { clickedDonate, clickedMaybeLater } from './actions' +} from '../../../main/state/actions.js' +import { getKeyLayout } from '../../shared/utils/get-key-layout-map.js' +import { appsRef, appsScrollerRef } from '../refs.js' +import { clickedDonate, clickedMaybeLater } from './actions.js' /** * Pass actions between main and renderers diff --git a/src/renderers/picker/state/store.ts b/src/renderers/picker/state/store.ts index 96bd2749..e2e4289c 100644 --- a/src/renderers/picker/state/store.ts +++ b/src/renderers/picker/state/store.ts @@ -3,12 +3,12 @@ import type { Action } from '@reduxjs/toolkit' import { configureStore } from '@reduxjs/toolkit' -import { Channel } from '../../../shared/state/channels' -import { channelInjectorMiddleware } from '../../../shared/state/middleware.channel-injector' -import { logMiddleware } from '../../../shared/state/middleware.log' -import { rootReducer } from '../../../shared/state/reducer.root' -import { busMiddleware } from '../../shared/state/middleware.bus' -import { pickerMiddleware } from './middleware' +import { Channel } from '../../../shared/state/channels.js' +import { channelInjectorMiddleware } from '../../../shared/state/middleware.channel-injector.js' +import { logMiddleware } from '../../../shared/state/middleware.log.js' +import { rootReducer } from '../../../shared/state/reducer.root.js' +import { busMiddleware } from '../../shared/state/middleware.bus.js' +import { pickerMiddleware } from './middleware.js' const store = configureStore({ middleware: (getDefaultMiddleware) => diff --git a/src/renderers/prefs/components/_bootstrap.tsx b/src/renderers/prefs/components/_bootstrap.tsx index cd8833e9..f91b61e4 100644 --- a/src/renderers/prefs/components/_bootstrap.tsx +++ b/src/renderers/prefs/components/_bootstrap.tsx @@ -1,7 +1,7 @@ import { Provider } from 'react-redux' -import store from '../state/store' -import Layout from './layout' +import store from '../state/store.js' +import Layout from './layout.js' const Bootstrap = (): JSX.Element => { return ( diff --git a/src/renderers/prefs/components/layout.tsx b/src/renderers/prefs/components/layout.tsx index 988a6ffb..f8815584 100644 --- a/src/renderers/prefs/components/layout.tsx +++ b/src/renderers/prefs/components/layout.tsx @@ -1,11 +1,11 @@ import { useEffect } from 'react' import { useDispatch } from 'react-redux' -import { startedPrefs } from '../state/actions' -import { HeaderBar } from './organisms/header-bar' -import { AboutPane } from './organisms/pane-about' -import { AppsPane } from './organisms/pane-apps' -import { GeneralPane } from './organisms/pane-general' +import { startedPrefs } from '../state/actions.js' +import { HeaderBar } from './organisms/header-bar.js' +import { AboutPane } from './organisms/pane-about.js' +import { AppsPane } from './organisms/pane-apps.js' +import { GeneralPane } from './organisms/pane-general.js' const useAppStarted = () => { const dispatch = useDispatch() diff --git a/src/renderers/prefs/components/molecules/pane.tsx b/src/renderers/prefs/components/molecules/pane.tsx index cf9ef75f..8f33e7fa 100644 --- a/src/renderers/prefs/components/molecules/pane.tsx +++ b/src/renderers/prefs/components/molecules/pane.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx' -import type { PrefsTab } from '../../../../shared/state/reducer.data' -import { useSelector } from '../../../shared/state/hooks' +import type { PrefsTab } from '../../../../shared/state/reducer.data.js' +import { useSelector } from '../../../shared/state/hooks.js' type Props = { readonly children: React.ReactNode diff --git a/src/renderers/prefs/components/organisms/header-bar.tsx b/src/renderers/prefs/components/organisms/header-bar.tsx index 3798cac0..5adfc427 100644 --- a/src/renderers/prefs/components/organisms/header-bar.tsx +++ b/src/renderers/prefs/components/organisms/header-bar.tsx @@ -1,9 +1,9 @@ import clsx from 'clsx' import { useDispatch } from 'react-redux' -import type { PrefsTab } from '../../../../shared/state/reducer.data' -import { useSelector } from '../../../shared/state/hooks' -import { clickedTabButton } from '../../state/actions' +import type { PrefsTab } from '../../../../shared/state/reducer.data.js' +import { useSelector } from '../../../shared/state/hooks.js' +import { clickedTabButton } from '../../state/actions.js' type TabButtonProps = { readonly tab: PrefsTab diff --git a/src/renderers/prefs/components/organisms/pane-about.tsx b/src/renderers/prefs/components/organisms/pane-about.tsx index c3cd78f8..29082f8e 100644 --- a/src/renderers/prefs/components/organisms/pane-about.tsx +++ b/src/renderers/prefs/components/organisms/pane-about.tsx @@ -1,13 +1,13 @@ import { useDispatch } from 'react-redux' import icon from '../../../../shared/static/icon/icon.png' -import Button from '../../../shared/components/atoms/button' -import { useSelector } from '../../../shared/state/hooks' +import Button from '../../../shared/components/atoms/button.js' +import { useSelector } from '../../../shared/state/hooks.js' import { clickedHomepageButton, clickedOpenIssueButton, -} from '../../state/actions' -import { Pane } from '../molecules/pane' +} from '../../state/actions.js' +import { Pane } from '../molecules/pane.js' export const AboutPane = (): JSX.Element => { const dispatch = useDispatch() diff --git a/src/renderers/prefs/components/organisms/pane-apps.tsx b/src/renderers/prefs/components/organisms/pane-apps.tsx index 1c0ebe43..e77214b3 100644 --- a/src/renderers/prefs/components/organisms/pane-apps.tsx +++ b/src/renderers/prefs/components/organisms/pane-apps.tsx @@ -17,17 +17,17 @@ import { CSS } from '@dnd-kit/utilities' import clsx from 'clsx' import { useDispatch } from 'react-redux' -import type { AppName } from '../../../../config/apps' -import Input from '../../../shared/components/atoms/input' -import { Spinner } from '../../../shared/components/atoms/spinner' -import type { InstalledApp } from '../../../shared/state/hooks' +import type { AppName } from '../../../../config/apps.js' +import Input from '../../../shared/components/atoms/input.js' +import { Spinner } from '../../../shared/components/atoms/spinner.js' +import type { InstalledApp } from '../../../shared/state/hooks.js' import { useDeepEqualSelector, useInstalledApps, useKeyCodeMap, -} from '../../../shared/state/hooks' -import { reorderedApp, updatedHotCode } from '../../state/actions' -import { Pane } from '../molecules/pane' +} from '../../../shared/state/hooks.js' +import { reorderedApp, updatedHotCode } from '../../state/actions.js' +import { Pane } from '../molecules/pane.js' type SortableItemProps = { readonly id: InstalledApp['name'] diff --git a/src/renderers/prefs/components/organisms/pane-general.tsx b/src/renderers/prefs/components/organisms/pane-general.tsx index f9281053..1125ce0e 100644 --- a/src/renderers/prefs/components/organisms/pane-general.tsx +++ b/src/renderers/prefs/components/organisms/pane-general.tsx @@ -1,15 +1,15 @@ import { useDispatch } from 'react-redux' -import Button from '../../../shared/components/atoms/button' -import { useSelector } from '../../../shared/state/hooks' +import Button from '../../../shared/components/atoms/button.js' +import { useSelector } from '../../../shared/state/hooks.js' import { clickedRescanApps, clickedSetAsDefaultBrowserButton, clickedUpdateButton, clickedUpdateRestartButton, confirmedReset, -} from '../../state/actions' -import { Pane } from '../molecules/pane' +} from '../../state/actions.js' +import { Pane } from '../molecules/pane.js' type RowProps = { readonly children: React.ReactNode diff --git a/src/renderers/prefs/index.html b/src/renderers/prefs/index.html index c94266e9..337d8acf 100644 --- a/src/renderers/prefs/index.html +++ b/src/renderers/prefs/index.html @@ -1,4 +1,4 @@ - + @@ -7,5 +7,6 @@
+ diff --git a/src/renderers/prefs/index.tsx b/src/renderers/prefs/index.tsx index 5d0d3eb3..1ef38468 100644 --- a/src/renderers/prefs/index.tsx +++ b/src/renderers/prefs/index.tsx @@ -2,7 +2,7 @@ import '../shared/index.css' import { createRoot } from 'react-dom/client' -import Bootstrap from './components/_bootstrap' +import Bootstrap from './components/_bootstrap.js' const container = document.querySelector('#root') diff --git a/src/renderers/prefs/state/actions.ts b/src/renderers/prefs/state/actions.ts index 46a1dd16..e4b85fcf 100644 --- a/src/renderers/prefs/state/actions.ts +++ b/src/renderers/prefs/state/actions.ts @@ -1,6 +1,6 @@ -import type { AppName } from '../../../config/apps' -import type { PrefsTab } from '../../../shared/state/reducer.data' -import { actionNamespacer } from '../../../shared/utils/action-namespacer' +import type { AppName } from '../../../config/apps.js' +import type { PrefsTab } from '../../../shared/state/reducer.data.js' +import { actionNamespacer } from '../../../shared/utils/action-namespacer.js' const prefs = actionNamespacer('prefs') diff --git a/src/renderers/prefs/state/middleware.ts b/src/renderers/prefs/state/middleware.ts index 4277f191..570d9654 100644 --- a/src/renderers/prefs/state/middleware.ts +++ b/src/renderers/prefs/state/middleware.ts @@ -1,8 +1,8 @@ /* eslint-disable unicorn/prefer-regexp-test */ import type { Middleware } from 'redux' -import { clickedOpenPrefs } from '../../../main/state/actions' -import { getKeyLayout } from '../../shared/utils/get-key-layout-map' +import { clickedOpenPrefs } from '../../../main/state/actions.js' +import { getKeyLayout } from '../../shared/utils/get-key-layout-map.js' /** * Pass actions between main and renderers diff --git a/src/renderers/prefs/state/store.ts b/src/renderers/prefs/state/store.ts index ca890b1b..cadf90f7 100644 --- a/src/renderers/prefs/state/store.ts +++ b/src/renderers/prefs/state/store.ts @@ -3,12 +3,12 @@ import type { UnknownAction } from '@reduxjs/toolkit' import { configureStore } from '@reduxjs/toolkit' -import { Channel } from '../../../shared/state/channels' -import { channelInjectorMiddleware } from '../../../shared/state/middleware.channel-injector' -import { logMiddleware } from '../../../shared/state/middleware.log' -import { rootReducer } from '../../../shared/state/reducer.root' -import { busMiddleware } from '../../shared/state/middleware.bus' -import { prefsMiddleware } from './middleware' +import { Channel } from '../../../shared/state/channels.js' +import { channelInjectorMiddleware } from '../../../shared/state/middleware.channel-injector.js' +import { logMiddleware } from '../../../shared/state/middleware.log.js' +import { rootReducer } from '../../../shared/state/reducer.root.js' +import { busMiddleware } from '../../shared/state/middleware.bus.js' +import { prefsMiddleware } from './middleware.js' const store = configureStore({ middleware: (getDefaultMiddleware) => diff --git a/src/renderers/shared/custom.window.ts b/src/renderers/shared/custom.window.ts index de076401..1af9e1d8 100644 --- a/src/renderers/shared/custom.window.ts +++ b/src/renderers/shared/custom.window.ts @@ -1,15 +1,15 @@ /* eslint-disable @typescript-eslint/consistent-type-definitions -- declaration merging required to patch globals */ -import type { AnyAction } from 'redux' +import type { UnknownAction } from 'redux' -import type { Channel } from '../../shared/state/channels' +import type { Channel } from '../../shared/state/channels.js' declare global { interface Window { electron: { - send: (channel: Channel, action: AnyAction) => void + send: (channel: Channel, action: UnknownAction) => void receive: ( mainChannel: Channel.MAIN, - callback: (action: AnyAction) => void, + callback: (action: UnknownAction) => void, ) => void } } diff --git a/src/renderers/shared/preload.ts b/src/renderers/shared/preload.ts index c67e6e5f..28d902d0 100644 --- a/src/renderers/shared/preload.ts +++ b/src/renderers/shared/preload.ts @@ -1,7 +1,7 @@ import { contextBridge, ipcRenderer } from 'electron' -import type { AnyAction } from 'redux' +import type { UnknownAction } from 'redux' -import { Channel } from '../../shared/state/channels' +import { Channel } from '../../shared/state/channels.js' // Expose protected methods that allow the renderer process to use // the ipcRenderer without exposing the entire object @@ -19,7 +19,7 @@ contextBridge.exposeInMainWorld('electron', { ) } }, - send: (channel: Channel, action: AnyAction) => { + send: (channel: Channel, action: UnknownAction) => { const validChannels = [Channel.PREFS, Channel.PICKER] if (validChannels.includes(channel)) { diff --git a/src/renderers/shared/state/actions.ts b/src/renderers/shared/state/actions.ts index e4e58bb4..d363df67 100644 --- a/src/renderers/shared/state/actions.ts +++ b/src/renderers/shared/state/actions.ts @@ -1,4 +1,4 @@ -import { actionNamespacer } from '../../../shared/utils/action-namespacer' +import { actionNamespacer } from '../../../shared/utils/action-namespacer.js' const renderer = actionNamespacer('renderer') diff --git a/src/renderers/shared/state/hooks.ts b/src/renderers/shared/state/hooks.ts index aca9472d..6ff2b115 100644 --- a/src/renderers/shared/state/hooks.ts +++ b/src/renderers/shared/state/hooks.ts @@ -2,8 +2,8 @@ import deepEqual from 'fast-deep-equal' import type { TypedUseSelectorHook } from 'react-redux' import { shallowEqual, useSelector as useReduxSelector } from 'react-redux' -import type { AppName } from '../../../config/apps' -import type { RootState } from '../../../shared/state/reducer.root' +import type { AppName } from '../../../config/apps.js' +import type { RootState } from '../../../shared/state/reducer.root.js' const useSelector: TypedUseSelectorHook = useReduxSelector diff --git a/src/renderers/shared/state/middleware.bus.ts b/src/renderers/shared/state/middleware.bus.ts index 4d662b48..af075b35 100644 --- a/src/renderers/shared/state/middleware.bus.ts +++ b/src/renderers/shared/state/middleware.bus.ts @@ -1,7 +1,7 @@ import type { Middleware } from 'redux' -import type { Channel } from '../../../shared/state/channels' -import { isFSA } from '../../../shared/state/model' +import type { Channel } from '../../../shared/state/channels.js' +import { isFSA } from '../../../shared/state/model.js' /** * Pass actions between main and renderers diff --git a/src/renderers/shared/utils/get-key-layout-map.ts b/src/renderers/shared/utils/get-key-layout-map.ts index b86d66b7..b8399e60 100644 --- a/src/renderers/shared/utils/get-key-layout-map.ts +++ b/src/renderers/shared/utils/get-key-layout-map.ts @@ -1,7 +1,7 @@ import type { Dispatch } from '@reduxjs/toolkit' -import type { FSA } from '../../../shared/state/model' -import { gotKeyLayoutMap } from '../state/actions' +import type { FSA } from '../../../shared/state/model.js' +import { gotKeyLayoutMap } from '../state/actions.js' const getLayoutObject = async (): Promise> => { try { diff --git a/src/shared/state/middleware.channel-injector.ts b/src/shared/state/middleware.channel-injector.ts index 73524c6e..4cf37f0a 100644 --- a/src/shared/state/middleware.channel-injector.ts +++ b/src/shared/state/middleware.channel-injector.ts @@ -1,7 +1,7 @@ -import { addChannelToAction } from '../utils/add-channel-to-action' -import type { Channel } from './channels' -import type { Middleware } from './model' -import { isFSA } from './model' +import { addChannelToAction } from '../utils/add-channel-to-action.js' +import type { Channel } from './channels.js' +import type { Middleware } from './model.js' +import { isFSA } from './model.js' /** * Adds the current channel to actions if it is not present. diff --git a/src/shared/state/middleware.log.ts b/src/shared/state/middleware.log.ts index 6b4b6517..4895f575 100644 --- a/src/shared/state/middleware.log.ts +++ b/src/shared/state/middleware.log.ts @@ -1,6 +1,6 @@ -import { actionLogger } from '../utils/action-logger' -import type { Middleware } from './model' -import { isFSA } from './model' +import { actionLogger } from '../utils/action-logger.js' +import type { Middleware } from './model.js' +import { isFSA } from './model.js' /** * Log all actions to console diff --git a/src/shared/state/model.ts b/src/shared/state/model.ts index ee1af06e..965ec500 100644 --- a/src/shared/state/model.ts +++ b/src/shared/state/model.ts @@ -1,7 +1,7 @@ import type { Dispatch, Middleware as ReduxMiddleware } from '@reduxjs/toolkit' import { isFluxStandardAction } from '@reduxjs/toolkit' -import type { RootState } from './reducer.root' +import type { RootState } from './reducer.root.js' type FSA = { type: string diff --git a/src/shared/state/reducer.data.ts b/src/shared/state/reducer.data.ts index c390025d..0c7fdd2b 100644 --- a/src/shared/state/reducer.data.ts +++ b/src/shared/state/reducer.data.ts @@ -1,7 +1,7 @@ import { createReducer } from '@reduxjs/toolkit' -import type { AppName } from '../../config/apps' -import { CARROT_URL } from '../../config/constants' +import type { AppName } from '../../config/apps.js' +import { CARROT_URL } from '../../config/constants.js' import { availableUpdate, downloadedUpdate, @@ -12,18 +12,18 @@ import { receivedRendererStartupSignal, retrievedInstalledApps, startedScanning, -} from '../../main/state/actions' +} from '../../main/state/actions.js' import { clickedDonate, clickedUpdateBar, startedPicker, -} from '../../renderers/picker/state/actions' +} from '../../renderers/picker/state/actions.js' import { clickedTabButton, confirmedReset, startedPrefs, -} from '../../renderers/prefs/state/actions' -import { gotKeyLayoutMap } from '../../renderers/shared/state/actions' +} from '../../renderers/prefs/state/actions.js' +import { gotKeyLayoutMap } from '../../renderers/shared/state/actions.js' type PrefsTab = 'about' | 'apps' | 'general' diff --git a/src/shared/state/reducer.root.ts b/src/shared/state/reducer.root.ts index 5c6b5bdd..97a407f4 100644 --- a/src/shared/state/reducer.root.ts +++ b/src/shared/state/reducer.root.ts @@ -1,9 +1,9 @@ import type { ThunkAction } from '@reduxjs/toolkit' import { combineReducers } from '@reduxjs/toolkit' -import type { FSA } from './model' -import { data } from './reducer.data' -import { storage } from './reducer.storage' +import type { FSA } from './model.js' +import { data } from './reducer.data.js' +import { storage } from './reducer.storage.js' const rootReducer = combineReducers({ data, storage }) diff --git a/src/shared/state/reducer.storage.ts b/src/shared/state/reducer.storage.ts index 34c95360..d3c289b6 100644 --- a/src/shared/state/reducer.storage.ts +++ b/src/shared/state/reducer.storage.ts @@ -1,21 +1,21 @@ import { createReducer } from '@reduxjs/toolkit' -import type { AppName } from '../../config/apps' +import type { AppName } from '../../config/apps.js' import { changedPickerWindowBounds, readiedApp, receivedRendererStartupSignal, retrievedInstalledApps, -} from '../../main/state/actions' +} from '../../main/state/actions.js' import { clickedDonate, clickedMaybeLater, -} from '../../renderers/picker/state/actions' +} from '../../renderers/picker/state/actions.js' import { confirmedReset, reorderedApp, updatedHotCode, -} from '../../renderers/prefs/state/actions' +} from '../../renderers/prefs/state/actions.js' type Storage = { apps: { diff --git a/src/shared/utils/action-logger.ts b/src/shared/utils/action-logger.ts index 7c384b2f..82bba784 100644 --- a/src/shared/utils/action-logger.ts +++ b/src/shared/utils/action-logger.ts @@ -11,8 +11,8 @@ import { white, } from 'picocolors' -import { Channel } from '../state/channels' -import type { FSA } from '../state/model' +import { Channel } from '../state/channels.js' +import type { FSA } from '../state/model.js' const channelColorMap = { [Channel.MAIN]: bgYellow, diff --git a/src/shared/utils/add-channel-to-action.ts b/src/shared/utils/add-channel-to-action.ts index b5a185d3..8534f6e1 100644 --- a/src/shared/utils/add-channel-to-action.ts +++ b/src/shared/utils/add-channel-to-action.ts @@ -1,7 +1,7 @@ import { produce } from 'immer' -import type { Channel } from '../state/channels' -import type { FSA } from '../state/model' +import type { Channel } from '../state/channels.js' +import type { FSA } from '../state/model.js' export const addChannelToAction = produce((draft: FSA, channel: Channel) => { draft.meta ||= {} diff --git a/tsconfig.json b/tsconfig.json index 1988bb1c..32b9b04e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,12 @@ { "compilerOptions": { - "baseUrl": ".", - "downlevelIteration": true, "esModuleInterop": true, "jsx": "react-jsx", "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "commonjs", + "module": "NodeNext", + "moduleResolution": "NodeNext", "noImplicitAny": true, "outDir": "dist", - "paths": { - "*": ["node_modules/*"] - }, "resolveJsonModule": true, "skipLibCheck": true, "strict": true, diff --git a/vite.main.config.ts b/vite.main.config.ts new file mode 100644 index 00000000..3bfbd484 --- /dev/null +++ b/vite.main.config.ts @@ -0,0 +1,23 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +import { defineConfig } from 'vite' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +// https://vitejs.dev/config +export default defineConfig({ + build: { + lib: { + entry: ['src/main/main.ts'], + formats: ['es'], + }, + rollupOptions: { + external: ['file-icon'], + }, + }, + publicDir: path.join(__dirname, 'src', 'shared', 'static'), + resolve: { + mainFields: ['module', 'jsnext:main', 'jsnext'], + }, +}) diff --git a/vite.preload.config.ts b/vite.preload.config.ts new file mode 100644 index 00000000..d00057b8 --- /dev/null +++ b/vite.preload.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'vite' + +// https://vitejs.dev/config +export default defineConfig({}) diff --git a/vite.renderer.picker.config.ts b/vite.renderer.picker.config.ts new file mode 100644 index 00000000..2d46be11 --- /dev/null +++ b/vite.renderer.picker.config.ts @@ -0,0 +1,14 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +import { defineConfig } from 'vite' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +// https://vitejs.dev/config +export default defineConfig({ + optimizeDeps: { + force: true, + }, + root: path.join(__dirname, 'src', 'renderers', 'picker'), +}) diff --git a/vite.renderer.prefs.config.ts b/vite.renderer.prefs.config.ts new file mode 100644 index 00000000..152e6e2a --- /dev/null +++ b/vite.renderer.prefs.config.ts @@ -0,0 +1,14 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +import { defineConfig } from 'vite' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +// https://vitejs.dev/config +export default defineConfig({ + optimizeDeps: { + force: true, + }, + root: path.join(__dirname, 'src', 'renderers', 'prefs'), +}) diff --git a/webpack.main.config.ts b/webpack.main.config.ts deleted file mode 100644 index 113b63ae..00000000 --- a/webpack.main.config.ts +++ /dev/null @@ -1,47 +0,0 @@ -import CopyPlugin from 'copy-webpack-plugin' -import type { Configuration } from 'webpack' - -import rules from './webpack.rules' - -export const mainConfig: Configuration = { - // Do not create source maps - devtool: false, - /** - * This is the main entry point for your application, it's the first file - * that runs in the main process. - */ - entry: './src/main/main.ts', - externals: { - 'file-icon': 'file-icon', - }, - module: { - rules: [ - { - // We're specifying native_modules in the test because the asset - // relocator loader generates a "fake" .node file which is really - // a cjs file. - test: /native_modules\/.+\.node$/u, - use: 'node-loader', - }, - { - parser: { amd: false }, - test: /\.(m?js|node)$/u, - use: { - loader: '@vercel/webpack-asset-relocator-loader', - options: { - outputAssetBase: 'native_modules', - }, - }, - }, - ...rules, - ], - }, - plugins: [ - new CopyPlugin({ - patterns: [{ from: 'src/shared/static', to: 'static' }], - }), - ], - resolve: { - extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'], - }, -} diff --git a/webpack.renderer.config.ts b/webpack.renderer.config.ts deleted file mode 100644 index 37fdeb07..00000000 --- a/webpack.renderer.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin' -import MiniCssExtractPlugin from 'mini-css-extract-plugin' -import type { Configuration } from 'webpack' - -import rules from './webpack.rules' - -export const rendererConfig: Configuration = { - // Do not create source maps - devtool: false, - module: { - rules: [ - ...rules, - { - test: /\.(png|jpg|gif|svg)$/iu, - use: 'url-loader', - }, - { - test: /\.css$/u, - use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'], - }, - ], - }, - plugins: [ - new ForkTsCheckerWebpackPlugin({ logger: 'webpack-infrastructure' }), - new MiniCssExtractPlugin({ - filename: 'shared/index.css', - }), - ], - resolve: { - extensions: ['.js', '.ts', '.jsx', '.tsx', '.css'], - }, -} diff --git a/webpack.rules.ts b/webpack.rules.ts deleted file mode 100644 index eeabb278..00000000 --- a/webpack.rules.ts +++ /dev/null @@ -1,14 +0,0 @@ -const rules = [ - { - exclude: /(node_modules|\.webpack)/u, - test: /\.tsx?$/u, - use: { - loader: 'ts-loader', - options: { - transpileOnly: true, - }, - }, - }, -] - -export default rules