diff --git a/.github/workflows/electron-builder.yml b/.github/workflows/electron-builder.yml index 0c51705..200b074 100644 --- a/.github/workflows/electron-builder.yml +++ b/.github/workflows/electron-builder.yml @@ -1,8 +1,8 @@ name: Build on: push: - tags: - - 'v*' + # tags: + # - 'v*' jobs: create_release: diff --git a/package-lock.json b/package-lock.json index 32e38e4..ea92c37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,9 @@ "decompress-zip": "^0.3.3", "dmg": "^0.1.0", "docker-compose": "^0.23.17", + "electron-github-autoupdater": "^2.0.0", "electron-log": "^4.4.6", + "electron-squirrel-startup": "^1.0.0", "extract-zip": "^2.0.1", "find-process": "^1.4.7", "fs-extra": "8.1.0", @@ -41,8 +43,10 @@ "react-dom": "17.0.2", "react-hot-loader": "4.13.0", "rimraf": "^3.0.2", + "semver": "^7.3.7", "tar-fs": "^2.1.1", "unbzip2-stream": "^1.4.3", + "update-electron-app": "^2.0.1", "web-ext": "^6.7.0", "which": "^2.0.2" }, @@ -71,6 +75,7 @@ "@types/progress-stream": "^2.0.2", "@types/react": "17.0.11", "@types/react-dom": "17.0.8", + "@types/semver": "^7.3.9", "@types/styled-components": "5.1.10", "@types/which": "^2.0.1", "@typescript-eslint/eslint-plugin": "4.27.0", @@ -161,6 +166,14 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", @@ -215,6 +228,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.17.6", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", @@ -271,6 +292,15 @@ "@babel/core": "^7.4.0-0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", @@ -1531,6 +1561,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", @@ -1742,6 +1781,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -2151,21 +2199,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@electron-forge/cli/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@electron-forge/cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2326,21 +2359,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@electron-forge/core/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@electron-forge/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3146,7 +3164,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz", "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==", - "dev": true, "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -3164,6 +3181,14 @@ "global-tunnel-ng": "^2.7.1" } }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.7.2", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz", @@ -4489,21 +4514,6 @@ "semver": "^7.3.5" } }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/move-file": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", @@ -5045,6 +5055,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@svgr/webpack/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -5711,6 +5730,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/semver": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", + "dev": true + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -5852,21 +5877,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "4.27.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.27.0.tgz", @@ -5975,21 +5985,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "4.27.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz", @@ -7417,6 +7412,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", @@ -7771,7 +7775,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "node_modules/boxen": { @@ -8777,7 +8780,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, "optional": true, "dependencies": { "ini": "^1.3.4", @@ -9152,21 +9154,6 @@ "webpack": "^5.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -9752,7 +9739,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "devOptional": true }, "node_modules/diff-sequences": { "version": "26.6.2", @@ -10283,7 +10270,6 @@ "version": "17.1.0", "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz", "integrity": "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==", - "dev": true, "hasInstallScript": true, "dependencies": { "@electron/get": "^1.13.0", @@ -10297,6 +10283,23 @@ "node": ">= 8.6" } }, + "node_modules/electron-github-autoupdater": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-github-autoupdater/-/electron-github-autoupdater-2.0.0.tgz", + "integrity": "sha512-ZnSQuWwv1lxyMqITiuI8vW4MlO24IoK9zZa4vo5NH/F0wskMGgDm0Kn4s1KAFq8XpzrxAjyjuE/TqE94cL9TAw==", + "dependencies": { + "axios": "^0.24.0", + "semver": "^7.3.5" + } + }, + "node_modules/electron-github-autoupdater/node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, "node_modules/electron-installer-common": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.3.tgz", @@ -10376,22 +10379,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/electron-installer-common/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/electron-installer-common/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -10640,6 +10627,11 @@ "node": ">=10" } }, + "node_modules/electron-is-dev": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", + "integrity": "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==" + }, "node_modules/electron-log": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.6.tgz", @@ -10792,21 +10784,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/electron-packager/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/electron-packager/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -11111,21 +11088,6 @@ "lowercase-keys": "^2.0.0" } }, - "node_modules/electron-rebuild/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/electron-rebuild/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11183,6 +11145,27 @@ "node": ">=12" } }, + "node_modules/electron-squirrel-startup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz", + "integrity": "sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==", + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/electron-squirrel-startup/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/electron-squirrel-startup/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/electron-to-chromium": { "version": "1.4.72", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", @@ -11334,17 +11317,24 @@ "node": ">= 8.0.0" } }, + "node_modules/electron-wix-msi/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/electron/node_modules/@types/node": { "version": "14.18.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", - "dev": true + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "node_modules/electron/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -11353,7 +11343,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, "dependencies": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -11368,7 +11357,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -11379,8 +11367,7 @@ "node_modules/electron/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/elliptic": { "version": "6.5.4", @@ -11517,7 +11504,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "engines": { "node": ">=6" } @@ -12160,6 +12146,15 @@ "node": ">= 4" } }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-prettier": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", @@ -12402,20 +12397,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14008,6 +13989,14 @@ "assert-plus": "^1.0.0" } }, + "node_modules/github-url-to-object": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz", + "integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==", + "dependencies": { + "is-url": "^1.1.0" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -14056,7 +14045,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -14070,22 +14058,6 @@ "node": ">=10.0" } }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/global-dirs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", @@ -14154,7 +14126,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", - "dev": true, "optional": true, "dependencies": { "encodeurl": "^1.0.2", @@ -14178,7 +14149,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "dev": true, "optional": true, "dependencies": { "define-properties": "^1.1.3" @@ -15597,6 +15567,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -15803,6 +15778,15 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -17709,21 +17693,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18935,6 +18904,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -18996,7 +18973,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -19515,21 +19491,6 @@ "node": ">=10" } }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -19545,21 +19506,6 @@ "semver": "^7.3.5" } }, - "node_modules/node-api-version/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -19659,21 +19605,6 @@ "node": ">=6" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -19693,20 +19624,6 @@ "which": "^2.0.2" } }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-notifier/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -19938,7 +19855,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, "optional": true, "dependencies": { "config-chain": "^1.1.11", @@ -19952,7 +19868,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, "optional": true, "engines": { "node": ">=4" @@ -20734,8 +20649,6 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "inBundle": true, "license": "MIT" }, @@ -20887,9 +20800,7 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -20897,7 +20808,8 @@ "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0" + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { "node": ">=12" @@ -21417,9 +21329,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -21627,8 +21537,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "inBundle": true, "license": "ISC", "dependencies": { @@ -21751,8 +21659,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.3.tgz", - "integrity": "sha512-KuSbzgejxdsAWbNNyEs8EsyDHsO+nJF6k+9WuWzFbSNh5tFHs4lDApXw7kntKpuehfp8lKRzJkMtz0+WmGvTIw==", "inBundle": true, "license": "ISC", "dependencies": { @@ -22125,8 +22031,6 @@ }, "node_modules/npm/node_modules/rimraf/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "inBundle": true, "license": "ISC", "dependencies": { @@ -22204,8 +22108,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "inBundle": true, "license": "ISC", "dependencies": { @@ -22257,8 +22159,6 @@ }, "node_modules/npm/node_modules/socks-proxy-agent": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", "inBundle": true, "license": "MIT", "dependencies": { @@ -23203,6 +23103,14 @@ "node": ">=8" } }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -24068,7 +23976,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true, "optional": true }, "node_modules/protobufjs": { @@ -24975,7 +24882,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -24993,7 +24899,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, "optional": true }, "node_modules/run-async": { @@ -25192,18 +25097,23 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true, "optional": true }, "node_modules/semver-diff": { @@ -25217,6 +25127,14 @@ "node": ">=8" } }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/send": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", @@ -25262,7 +25180,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -25278,7 +25195,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true, "engines": { "node": ">=10" @@ -26303,7 +26219,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, "dependencies": { "debug": "^4.1.0" }, @@ -27128,21 +27043,6 @@ "typescript": ">=3.8 <5.0" } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -27206,7 +27106,6 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, "optional": true, "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" @@ -27431,6 +27330,20 @@ "yarn": "*" } }, + "node_modules/update-electron-app": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/update-electron-app/-/update-electron-app-2.0.1.tgz", + "integrity": "sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg==", + "dependencies": { + "electron-is-dev": "^0.3.0", + "github-url-to-object": "^4.0.4", + "is-url": "^1.2.4", + "ms": "^2.1.1" + }, + "peerDependencies": { + "electron": ">= 6.0.0" + } + }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -27511,20 +27424,6 @@ "node": ">=8" } }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/update-notifier/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -28968,6 +28867,13 @@ "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@babel/generator": { @@ -29007,6 +28913,13 @@ "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@babel/helper-create-class-features-plugin": { @@ -29048,6 +28961,14 @@ "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-environment-visitor": { @@ -29885,6 +29806,14 @@ "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/plugin-transform-shorthand-properties": { @@ -30042,6 +29971,14 @@ "babel-plugin-polyfill-regenerator": "^0.2.2", "core-js-compat": "^3.14.0", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/preset-modules": { @@ -30349,15 +30286,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -30478,15 +30406,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -31129,7 +31048,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.1.tgz", "integrity": "sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA==", - "dev": true, "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -31140,6 +31058,13 @@ "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@emotion/babel-plugin": { @@ -32074,17 +31999,6 @@ "requires": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@npmcli/move-file": { @@ -32470,6 +32384,12 @@ "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -33080,6 +33000,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "@types/semver": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", + "dev": true + }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -33203,17 +33129,6 @@ "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/experimental-utils": { @@ -33271,17 +33186,6 @@ "is-glob": "^4.0.1", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/visitor-keys": { @@ -34380,6 +34284,14 @@ "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.2.4", "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "babel-plugin-polyfill-corejs3": { @@ -34691,7 +34603,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "boxen": { @@ -35470,7 +35381,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, "optional": true, "requires": { "ini": "^1.3.4", @@ -35747,17 +35657,6 @@ "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "css-select": { @@ -36195,7 +36094,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "devOptional": true }, "diff-sequences": { "version": "26.6.2", @@ -36638,7 +36537,6 @@ "version": "17.1.0", "resolved": "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz", "integrity": "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==", - "dev": true, "requires": { "@electron/get": "^1.13.0", "@types/node": "^14.6.2", @@ -36648,14 +36546,12 @@ "@types/node": { "version": "14.18.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", - "dev": true + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -36664,7 +36560,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, "requires": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -36676,7 +36571,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "requires": { "minimist": "^1.2.5" } @@ -36684,8 +36578,26 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "electron-github-autoupdater": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-github-autoupdater/-/electron-github-autoupdater-2.0.0.tgz", + "integrity": "sha512-ZnSQuWwv1lxyMqITiuI8vW4MlO24IoK9zZa4vo5NH/F0wskMGgDm0Kn4s1KAFq8XpzrxAjyjuE/TqE94cL9TAw==", + "requires": { + "axios": "^0.24.0", + "semver": "^7.3.5" + }, + "dependencies": { + "axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "requires": { + "follow-redirects": "^1.14.4" + } } } }, @@ -36742,16 +36654,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -36927,6 +36829,11 @@ } } }, + "electron-is-dev": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", + "integrity": "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==" + }, "electron-log": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.6.tgz", @@ -37051,15 +36958,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -37283,15 +37181,6 @@ "lowercase-keys": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -37336,6 +37225,29 @@ } } }, + "electron-squirrel-startup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz", + "integrity": "sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==", + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "electron-to-chromium": { "version": "1.4.72", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz", @@ -37456,6 +37368,12 @@ "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.3.0.tgz", "integrity": "sha512-h1gNEl9Oai1oijwyJ1WYqYSXTStHnOcv1KYljg/8WM4NAg3H1KBK3azIaKkQ1WQl+d7PoJpcBMscPfLXVKgCLQ==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -37570,8 +37488,7 @@ "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "err-code": { "version": "3.0.1", @@ -37843,14 +37760,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -38136,6 +38045,12 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -39449,6 +39364,14 @@ "assert-plus": "^1.0.0" } }, + "github-url-to-object": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz", + "integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==", + "requires": { + "is-url": "^1.1.0" + } + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -39488,7 +39411,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -39497,18 +39419,6 @@ "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "global-dirs": { @@ -39565,7 +39475,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", - "dev": true, "optional": true, "requires": { "encodeurl": "^1.0.2", @@ -39583,7 +39492,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "dev": true, "optional": true, "requires": { "define-properties": "^1.1.3" @@ -40639,6 +40547,11 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -40805,6 +40718,14 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "istanbul-lib-report": { @@ -42238,15 +42159,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -43229,6 +43141,13 @@ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "make-error": { @@ -43286,7 +43205,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "requires": { "escape-string-regexp": "^4.0.0" @@ -43689,17 +43607,6 @@ "dev": true, "requires": { "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "node-addon-api": { @@ -43715,17 +43622,6 @@ "dev": true, "requires": { "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "node-fetch": { @@ -43792,15 +43688,6 @@ "requires": { "abbrev": "1" } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -43828,14 +43715,6 @@ "which": "^2.0.2" }, "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -44452,8 +44331,6 @@ "dependencies": { "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "bundled": true } } @@ -44573,16 +44450,15 @@ } }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.0.1", "bundled": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0" + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -44963,9 +44839,7 @@ } }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.0.1", "bundled": true, "requires": { "brace-expansion": "^2.0.1" @@ -45113,8 +44987,6 @@ }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "bundled": true, "requires": { "fs.realpath": "^1.0.0", @@ -45203,8 +45075,6 @@ }, "npm-packlist": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.3.tgz", - "integrity": "sha512-KuSbzgejxdsAWbNNyEs8EsyDHsO+nJF6k+9WuWzFbSNh5tFHs4lDApXw7kntKpuehfp8lKRzJkMtz0+WmGvTIw==", "bundled": true, "requires": { "glob": "^8.0.1", @@ -45472,8 +45342,6 @@ }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "bundled": true, "requires": { "fs.realpath": "^1.0.0", @@ -45519,8 +45387,6 @@ "dependencies": { "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "bundled": true, "requires": { "yallist": "^4.0.0" @@ -45558,8 +45424,6 @@ }, "socks-proxy-agent": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", "bundled": true, "requires": { "agent-base": "^6.0.2", @@ -45782,7 +45646,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, "optional": true, "requires": { "config-chain": "^1.1.11", @@ -45793,7 +45656,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, "optional": true } } @@ -46369,6 +46231,13 @@ "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "pako": { @@ -47023,7 +46892,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true, "optional": true }, "protobufjs": { @@ -47719,7 +47587,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -47734,7 +47601,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, "optional": true } } @@ -47883,15 +47749,17 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true, "optional": true }, "semver-diff": { @@ -47900,6 +47768,13 @@ "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "requires": { "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "send": { @@ -47948,7 +47823,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "requires": { "type-fest": "^0.13.1" @@ -47958,7 +47832,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true } } @@ -48761,7 +48634,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, "requires": { "debug": "^4.1.0" } @@ -49428,17 +49300,6 @@ "mkdirp": "1.x", "semver": "7.x", "yargs-parser": "20.x" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "tsconfig-paths": { @@ -49496,7 +49357,6 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, "optional": true }, "tunnel-agent": { @@ -49662,6 +49522,17 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" }, + "update-electron-app": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/update-electron-app/-/update-electron-app-2.0.1.tgz", + "integrity": "sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg==", + "requires": { + "electron-is-dev": "^0.3.0", + "github-url-to-object": "^4.0.4", + "is-url": "^1.2.4", + "ms": "^2.1.1" + } + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -49718,14 +49589,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", diff --git a/package.json b/package.json index d92e761..9b8c9fd 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,10 @@ "author": "Point Labs", "version": "0.2.32", "description": "PointNetwork", + "repository": { + "type": "git", + "url": "https://github.com/pointnetwork/pointnetwork-dashboard" + }, "main": "./.webpack/main", "scripts": { "start": "electron-forge start", @@ -34,7 +38,9 @@ "decompress-zip": "^0.3.3", "dmg": "^0.1.0", "docker-compose": "^0.23.17", + "electron-github-autoupdater": "^2.0.0", "electron-log": "^4.4.6", + "electron-squirrel-startup": "^1.0.0", "extract-zip": "^2.0.1", "find-process": "^1.4.7", "fs-extra": "8.1.0", @@ -50,8 +56,10 @@ "react-dom": "17.0.2", "react-hot-loader": "4.13.0", "rimraf": "^3.0.2", + "semver": "^7.3.7", "tar-fs": "^2.1.1", "unbzip2-stream": "^1.4.3", + "update-electron-app": "^2.0.1", "web-ext": "^6.7.0", "which": "^2.0.2" }, @@ -80,6 +88,7 @@ "@types/progress-stream": "^2.0.2", "@types/react": "17.0.11", "@types/react-dom": "17.0.8", + "@types/semver": "^7.3.9", "@types/styled-components": "5.1.10", "@types/which": "^2.0.1", "@typescript-eslint/eslint-plugin": "4.27.0", diff --git a/src/autoupdater/index.ts b/src/autoupdater/index.ts new file mode 100644 index 0000000..e66e046 --- /dev/null +++ b/src/autoupdater/index.ts @@ -0,0 +1,242 @@ +import { autoUpdater, BrowserWindow, app } from 'electron' +import axios from 'axios' +import path from 'node:path' +import Logger from '../../shared/logger' +import { gte as semverGte, rcompare as semverCompare } from 'semver' +import { GithubRelease, GithubReleaseAsset } from './types' +import fs from 'node:fs' + +export default class AutoUpdater { + private window: BrowserWindow + private baseUrl: string = 'https://api.github.com' + private owner: string = 'pointnetwork' + private repo: string = 'pointnetwork-dashboard' + private logger: Logger + private currentVersion: string + private feedUrl: string + private downloadsDirectory = path.join( + app.getPath('temp'), + app.getName(), + 'updates', + 'downloads' + ) + + constructor({ window }: { window: BrowserWindow }) { + this.window = window + this.logger = new Logger() + this.currentVersion = app.getVersion() + this.feedUrl = '' + if (global.platform.win32) { + this.feedUrl = this.downloadsDirectory + } + if (global.platform.darwin) { + this.feedUrl = path.join(this.downloadsDirectory, 'feed.json') + } + } + + getLatestRelease: () => Promise = () => + // eslint-disable-next-line no-async-promise-executor + new Promise(async (resolve, reject) => { + try { + this.logger.info('[autoUpdater]:', 'Getting latest release from GitHub') + const response = await axios.get( + `${this.baseUrl}/repos/${this.owner}/${this.repo}/releases?per_page=100` + ) + const releases: GithubRelease[] = response.data.filter( + (release: GithubRelease) => !release.draft + ) + + if (releases.length === 0) { + throw new Error('No releases found') + } + + releases + .map(f => f.name.replace('Release v', '')) + .filter(f => f.match(/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)/g)) + .sort((a, b) => semverCompare(a, b)) + + const matchedRelease: GithubRelease | undefined = releases.find( + release => !release.prerelease + ) + if (!matchedRelease) + throw new Error('No non-preproduction releases found') + + this.logger.info( + '[autoUpdater]:', + 'Latest release from GitHub', + matchedRelease.tag_name + ) + resolve(matchedRelease) + } catch (error: any) { + this.logger.error('[autoUpdater]:', 'Error: ', error) + reject(new Error(error)) + } + }) + + downloadUpdateFromRelease: (release: GithubRelease) => Promise = + release => + // eslint-disable-next-line no-async-promise-executor + new Promise(async (resolve, reject) => { + this.logger.info( + '[autoUpdater]:', + 'Downloading the release', + release.tag_name + ) + + try { + let requiredFiles: string[] | RegExp[] = [] + if (global.platform.win32) + requiredFiles = [/[^ ]*-full\.nupkg/gim, /RELEASES/] + + if (global.platform.darwin) + requiredFiles = [/[^ ]*\.zip/gim, /feed.json/] + // Find the required files in the release + this.logger.info('[autoUpdater]:', 'Checking for required files') + const assets = requiredFiles.map(filePattern => { + const match = release.assets.find(asset => + asset.name.match(filePattern) + ) + if (!match) + throw new Error( + `Release is missing a required update file for current platform (${global.platform})` + ) + else { + this.logger.info( + '[autoUpdater]:', + 'Required file found', + match.name + ) + return match + } + }) + + // Set variables to track download progress, including calculating the total download size + const totalSize = assets.reduce( + (prev, asset) => (prev += asset.size), + 0 + ) + let downloaded = 0 + let lastEmitPercent = -1 + + const downloadFile = (asset: GithubReleaseAsset) => { + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve, reject) => { + this.logger.info( + '[autoUpdater]:', + 'Starting to download asset', + asset.name + ) + + const outputPath = path.join(this.downloadsDirectory, asset.name) + const assetUrl = `${this.baseUrl}/repos/${this.owner}/${this.repo}/releases/assets/${asset.id}` + + const { data } = await axios.get(assetUrl, { + headers: { + Accept: 'application/octet-stream', + }, + responseType: 'stream', + }) + + const writer = fs.createWriteStream(outputPath) + + // Emit a progress event when a chunk is downloaded + data.on('data', (chunk: Buffer) => { + downloaded += chunk.length + const percent = Math.round((downloaded * 100) / totalSize) + + if (percent > lastEmitPercent) { + this.logger.info( + '[autoUpdater]:', + 'Downloading asset', + asset.name, + percent.toString(), + '%' + ) + this.window.webContents.send( + 'autoupdater:downloading', + percent + ) + lastEmitPercent = percent + } + }) + + // Pipe data into a writer to save it to the disk rather than keeping it in memory + data.pipe(writer) + + data.on('end', () => { + this.logger.info( + '[autoUpdater]:', + 'Downloaded asset', + release.name + ) + writer.end() + }) + writer.on('finish', () => { + resolve(true) + }) + }) + } + + for await (const asset of assets) { + await downloadFile(asset) + } + + this.window.webContents.send('autoupdater:downloaded') + resolve() + } catch (error: any) { + this.logger.error('[autoUpdater]:', 'Error: ', error) + reject(new Error(error)) + } + }) + + checkForUpdates = () => + new Promise( + // eslint-disable-next-line no-async-promise-executor + async (resolve, reject) => { + try { + this.logger.info('[autoUpdater]:', 'Checking for updates') + const latestRelease = await this.getLatestRelease() + const latestVersion = latestRelease.tag_name + + if (semverGte(this.currentVersion, latestVersion)) { + this.logger.info('[autoUpdater]:', 'Already upto date') + return this.window.webContents.send('autoupdater:up-to-date') + } else { + if (global.platform.linux) + resolve(this.window.webContents.send('autoupdater:linux-update')) + + await this.downloadUpdateFromRelease(latestRelease) + autoUpdater.setFeedURL({ url: this.feedUrl }) + this.logger.info( + `[autoUpdater]: Calling electron autoUpdater's checkForUpdates()` + ) + autoUpdater.checkForUpdates() + + autoUpdater.on('update-downloaded', () => { + this.logger.info( + `[autoUpdater]: Electron autoUpdater's "update-downloaded" event. Calling electron autoUpdater's quitAndInstall()` + ) + this.window.webContents.send('autoupdater:updating') + autoUpdater.quitAndInstall() + }) + autoUpdater.on('before-quit-for-update', () => { + this.logger.info( + `[autoUpdater]: Electron autoUpdater's "before-quit-for-update" event. Called electron autoUpdater's quitAndInstall()` + ) + }) + autoUpdater.on('error', error => { + this.logger.info( + `[autoUpdater]: Electron autoUpdater's "error" event.` + ) + throw error + }) + } + resolve(0) + } catch (error: any) { + this.window.webContents.send('autoupdater:error') + this.logger.error('[autoUpdater]: Error', error) + reject(new Error(error)) + } + } + ) +} diff --git a/src/autoupdater/types.ts b/src/autoupdater/types.ts new file mode 100644 index 0000000..44195a0 --- /dev/null +++ b/src/autoupdater/types.ts @@ -0,0 +1,58 @@ +/* eslint-disable camelcase */ +export interface GithubReleaseAssetAuthor { + login: string + id: number + node_id: string + avatar_url: string + gravatar_id: string + url: string + html_url: string + followers_url: string + following_url: string + gists_url: string + starred_url: string + subscriptions_url: string + organizations_url: string + repos_url: string + events_url: string + received_events_url: string + type: string + site_admin: boolean +} + +export interface GithubReleaseAsset { + url: string + id: number + node_id: string + name: string + label?: any + uploader: GithubReleaseAssetAuthor + content_type: string + state: string + size: number + download_count: number + created_at: string + updated_at: string + browser_download_url: string +} + +export interface GithubRelease { + url: string + assets_url: string + upload_url: string + html_url: string + id: number + node_id: string + tag_name: string + target_commitish: string + name: string + draft: boolean + author: GithubReleaseAssetAuthor + prerelease: boolean + created_at: string + published_at: string + assets: GithubReleaseAsset[] + tarball_url: string + zipball_url: string + body: string +} diff --git a/src/dashboard/bridge.ts b/src/dashboard/bridge.ts index 8fd9f95..58420a4 100644 --- a/src/dashboard/bridge.ts +++ b/src/dashboard/bridge.ts @@ -40,9 +40,6 @@ export const api = { getIdentifier: () => { ipcRenderer.send('dashboard:getIdentifier') }, - isNewDashboardReleaseAvailable: () => { - ipcRenderer.send('dashboard:isNewDashboardReleaseAvailable') - }, changeFirefoxStatus: (isRunning: boolean) => { ipcRenderer.send('firefox:status', isRunning) }, @@ -63,9 +60,6 @@ export const api = { getNodeVersion: (): string => { return ipcRenderer.sendSync('node:getVersion') }, - openDashboardDownloadLink: (url: string) => { - ipcRenderer.send('dashboard:openDownloadLink', url) - }, sendBountyRequest: () => { ipcRenderer.send('dashboard:bounty_request') }, @@ -75,6 +69,10 @@ export const api = { closeWindow: () => { ipcRenderer.send(`dashboard:closeWindow`) }, + checkForDashboardUpdates: () => + ipcRenderer.send('autoupdater:check_for_updates'), + openDashboardDownloadLink: (link: string) => + ipcRenderer.send('dashboard:open_url', link), on: (channel: string, callback: Function) => { ipcRenderer.on(channel, (_, data) => callback(data)) diff --git a/src/dashboard/index.ts b/src/dashboard/index.ts index 3e1eeb2..c411c73 100644 --- a/src/dashboard/index.ts +++ b/src/dashboard/index.ts @@ -5,6 +5,7 @@ import { dialog, IpcMainEvent, shell, + Event, } from 'electron' import Firefox from '../firefox' import Node from '../node' @@ -16,6 +17,7 @@ import Logger from '../../shared/logger' import Uninstaller from '../uninstaller' import { readFileSync, writeFileSync } from 'fs-extra' import process from 'node:process' +import AutoUpdater from '../autoupdater' const path = require('path') @@ -159,6 +161,7 @@ export default function (isExplicitRun = false) { }) mainWindow.on('closed', () => { + logger.info('[mainWindow]: Closed event') node = null firefox = null mainWindow = null @@ -279,25 +282,6 @@ export default function (isExplicitRun = false) { node!.getIdentity() }, }, - { - channel: 'dashboard:openDownloadLink', - listener(event: IpcMainEvent, url: string) { - try { - shell.openExternal(url) - } catch (error) { - logger.error(error) - } - }, - }, - { - channel: 'dashboard:isNewDashboardReleaseAvailable', - async listener() { - mainWindow!.webContents.send( - 'dashboard:isNewDashboardReleaseAvailable', - await helpers.isNewDashboardReleaseAvailable() - ) - }, - }, { channel: 'node:getDashboardVersion', listener() { @@ -463,9 +447,16 @@ export default function (isExplicitRun = false) { }, }, { - channel: `dashboard:minimizeWindow`, + channel: 'autoupdater:check_for_updates', listener() { - mainWindow!.minimize() + new AutoUpdater({ window: mainWindow! }).checkForUpdates() + }, + }, + { + channel: 'dashboard:open_url', + listener(ev: Event, link: string) { + logger.info('[dashboard:open_url] Opening download URL', link) + shell.openExternal(link) }, }, { diff --git a/src/dashboard/ui/App.tsx b/src/dashboard/ui/App.tsx index 7cff6eb..c76ff7b 100644 --- a/src/dashboard/ui/App.tsx +++ b/src/dashboard/ui/App.tsx @@ -1,6 +1,7 @@ import { MouseEventHandler, useEffect, useState, useRef } from 'react' // Material UI import Box from '@mui/material/Box' +import Typography from '@mui/material/Typography' import UIThemeProvider from '../../../shared/UIThemeProvider' // Icons import { ReactComponent as FirefoxLogo } from '../../../assets/firefox-logo.svg' @@ -8,13 +9,13 @@ import { ReactComponent as PointLogo } from '../../../assets/point-logo.svg' // Components import TopBar from './components/TopBar' import ResourceItemCard from './components/ResourceItemCard' -import DashboardUpdateAlert from './components/DashboardUpdateAlert' import DashboardTitle from './components/DashboardTitle' import WalletInfo from './components/WalletInfo' import UpdateProgress from './components/UpdateProgress' import DefaultLoader from './components/DefaultLoader' +import DashboardUpdateDialog from './components/DashboardUpdateDialog' import NodeRestartAlert from './components/NodeRestartAlert' -import Typography from '@mui/material/Typography' +import DashboardUpdateAlertForLinux from './components/DashboardUpdateAlertForLinux' export default function App() { const [isLoading, setIsLoading] = useState(true) @@ -22,6 +23,7 @@ export default function App() { 'Checking for updates' ) // Update state variables + const [isDashboardUpdating, setIsDashboardUpdating] = useState(true) const [isNodeUpdating, setIsNodeUpdating] = useState(true) const [isFirefoxUpdating, setIsFirefoxUpdating] = useState(true) const [isSdkUpdating, setIsSdkUpdating] = useState(true) @@ -52,102 +54,104 @@ export default function App() { const [identifier, setIdentifier] = useState('') useEffect(() => { - setIsLoading(true) - - // Check for updates - window.Dashboard.checkUpdate() - window.Dashboard.checkUnistaller() - - window.Dashboard.on('uninstaller:check', (status: boolean) => { - setUninstallerUpt(status) - }) - - window.Dashboard.on('node:update', (status: boolean) => { - setIsNodeUpdating(status) - if (status) { - window.Dashboard.DownloadNode() - window.Dashboard.on('installer:log', ([msg]: string[]) => { - if (msg.includes('POINT_NODE:')) { - setNodeUpdateProgress(Number(msg.replace('POINT_NODE:', ''))) - } - }) - } - }) - - window.Dashboard.on('firefox:update', (status: boolean) => { - setIsFirefoxUpdating(status) - if (status) { - window.Dashboard.DownloadFirefox() - window.Dashboard.on('installer:log', ([msg]: string[]) => { - if (msg.includes('BROWSER:')) { - setFirefoxUpdateProgress(Number(msg.replace('BROWSER:', ''))) - } - }) - } - }) - - window.Dashboard.on('sdk:update', (status: boolean) => { - setIsSdkUpdating(status) - }) - - // Check if updates have finished downloading - window.Dashboard.on('pointNode:finishDownload', () => { - setIsNodeUpdating(false) - }) - - window.Dashboard.on('pointSDK:finishDownload', () => { - setIsSdkUpdating(false) - }) - - window.Dashboard.on('firefox:finishDownload', () => { - setIsFirefoxUpdating(false) - }) - - // Get the versions - window.Dashboard.getDashboardVersion() - - window.Dashboard.on('firefox:setVersion', (firefoxVersion: string) => { - setFirefoxVersion(firefoxVersion) - }) - - window.Dashboard.on('node:identity', (identity: string) => { - setIdentity(identity) - if (!identity) { - window.Dashboard.sendBountyRequest() - } - }) - - window.Dashboard.on('firefox:active', (status: boolean) => { - setIsFirefoxRunning(status) - window.Dashboard.changeFirefoxStatus(status) - window.Dashboard.getIdentity() - }) - - window.Dashboard.on('node:wallet_info', (message: string) => { - setWalletInfo(JSON.parse(message)) - setIsLoadingWalletInfo(false) - }) - - window.Dashboard.on('dashboard:close', () => { - setLoadingMessage('Closing Dashboard') + if (!isDashboardUpdating) { setIsLoading(true) - }) - window.Dashboard.on('dashboard:launch_uninstaller', (status: boolean) => { - if (status) { - setLoadingMessage('Launching Uninstaller') + // Check for updates + window.Dashboard.checkUpdate() + window.Dashboard.checkUnistaller() + + window.Dashboard.on('uninstaller:check', (status: boolean) => { + setUninstallerUpt(status) + }) + + window.Dashboard.on('node:update', (status: boolean) => { + setIsNodeUpdating(status) + if (status) { + window.Dashboard.DownloadNode() + window.Dashboard.on('installer:log', ([msg]: string[]) => { + if (msg.includes('POINT_NODE:')) { + setNodeUpdateProgress(Number(msg.replace('POINT_NODE:', ''))) + } + }) + } + }) + + window.Dashboard.on('firefox:update', (status: boolean) => { + setIsFirefoxUpdating(status) + if (status) { + window.Dashboard.DownloadFirefox() + window.Dashboard.on('installer:log', ([msg]: string[]) => { + if (msg.includes('BROWSER:')) { + setFirefoxUpdateProgress(Number(msg.replace('BROWSER:', ''))) + } + }) + } + }) + + window.Dashboard.on('sdk:update', (status: boolean) => { + setIsSdkUpdating(status) + }) + + // Check if updates have finished downloading + window.Dashboard.on('pointNode:finishDownload', () => { + setIsNodeUpdating(false) + }) + + window.Dashboard.on('pointSDK:finishDownload', () => { + setIsSdkUpdating(false) + }) + + window.Dashboard.on('firefox:finishDownload', () => { + setIsFirefoxUpdating(false) + }) + + // Get the versions + window.Dashboard.getDashboardVersion() + + window.Dashboard.on('firefox:setVersion', (firefoxVersion: string) => { + setFirefoxVersion(firefoxVersion) + }) + + window.Dashboard.on('node:identity', (identity: string) => { + setIdentity(identity) + if (!identity) { + window.Dashboard.sendBountyRequest() + } + }) + + window.Dashboard.on('firefox:active', (status: boolean) => { + setIsFirefoxRunning(status) + window.Dashboard.changeFirefoxStatus(status) + window.Dashboard.getIdentity() + }) + + window.Dashboard.on('node:wallet_info', (message: string) => { + setWalletInfo(JSON.parse(message)) + setIsLoadingWalletInfo(false) + }) + + window.Dashboard.on('dashboard:close', () => { + setLoadingMessage('Closing Dashboard') setIsLoading(true) - } else { - setLoadingMessage('') - setIsLoading(false) - } - }) - - window.Dashboard.getIdentifier() - window.Dashboard.on('dashboard:getIdentifier', (identifier: string) => - setIdentifier(identifier) - ) - }, []) + }) + + window.Dashboard.on('dashboard:launch_uninstaller', (status: boolean) => { + if (status) { + setLoadingMessage('Launching Uninstaller') + setIsLoading(true) + } else { + setLoadingMessage('') + setIsLoading(false) + } + }) + + window.Dashboard.getIdentifier() + window.Dashboard.on('dashboard:getIdentifier', (identifier: string) => + setIdentifier(identifier) + ) + } + }, [isDashboardUpdating]) useEffect(() => { if (!isFirefoxUpdating && !isNodeUpdating && !isSdkUpdating) { @@ -171,7 +175,8 @@ export default function App() { !isRunning && new Date().getTime() - checkStartTime.current < 120000 ) { - setTimeout(checkNode, 1000) + setTimeout(window.Dashboard.launchNode, 5000) + setTimeout(checkNode, 10000) } else { console.error('Failed to start node in 2 minutes') setIsLoading(false) @@ -243,8 +248,13 @@ export default function App() { {identifier} + - + + { - const [showAlert, setShowAlert] = useState(false) - const [status, setStatus] = useState<{ - isUpdateAvailable: boolean - latestVersion: string - }>({ - isUpdateAvailable: false, - latestVersion: '', - }) - - useEffect(() => { - window.Dashboard.on( - 'dashboard:isNewDashboardReleaseAvailable', - (message: { isUpdateAvailable: boolean; latestVersion: string }) => { - setStatus(message) - if (message.isUpdateAvailable) setShowAlert(true) - } - ) - window.Dashboard.isNewDashboardReleaseAvailable() - }, []) - - const openDonwloadLink: ReactEventHandler = () => { - window.Dashboard.openDashboardDownloadLink( - `https://pointnetwork.io/download` - ) - } - - const handleCloseAlert: ReactEventHandler = () => { - setShowAlert(false) - // Alerts the user once again after 2 mins if they close the alert without updating - setTimeout(window.Dashboard.isNewDashboardReleaseAvailable, 120000) - } - - if (!status.isUpdateAvailable) return null - - return showAlert ? ( - - New Update Available - Click{' '} - - here - {' '} - to download the latest version - - ) : null -} - -export default DashboardUpdateAlert diff --git a/src/dashboard/ui/components/DashboardUpdateAlertForLinux.tsx b/src/dashboard/ui/components/DashboardUpdateAlertForLinux.tsx new file mode 100644 index 0000000..267878f --- /dev/null +++ b/src/dashboard/ui/components/DashboardUpdateAlertForLinux.tsx @@ -0,0 +1,54 @@ +import { useState, ReactEventHandler, useEffect } from 'react' +import Alert from '@mui/material/Alert' +import AlertTitle from '@mui/material/AlertTitle' +import Box from '@mui/material/Box' +import Typography from '@mui/material/Typography' + +const DashboardUpdateAlertForLinux = () => { + const [showAlert, setShowAlert] = useState(false) + + useEffect(() => { + window.Dashboard.on('autoupdater:linux-update', () => { + setTimeout(() => setShowAlert(true), 1000) + }) + }, []) + + const handleCloseAlert: ReactEventHandler = () => { + setShowAlert(false) + setTimeout(() => setShowAlert(true), 120000) + } + + return showAlert ? ( + + New Update is available. + + + Click{' '} + + window.Dashboard.openDashboardDownloadLink( + 'https://github.com/pointnetwork/pointnetwork-dashboard/releases/latest' + ) + } + > + here + {' '} + to download the latest version of Point + + + + ) : null +} + +export default DashboardUpdateAlertForLinux diff --git a/src/dashboard/ui/components/DashboardUpdateDialog.tsx b/src/dashboard/ui/components/DashboardUpdateDialog.tsx new file mode 100644 index 0000000..ebedceb --- /dev/null +++ b/src/dashboard/ui/components/DashboardUpdateDialog.tsx @@ -0,0 +1,88 @@ +import { Dispatch, SetStateAction, useEffect, useState } from 'react' +// MUI +import Box from '@mui/material/Box' +import CircularProgress from '@mui/material/CircularProgress' +import Dialog from '@mui/material/Dialog' +import Typography from '@mui/material/Typography' +// Icons +import CheckCircleIcon from '@mui/icons-material/CheckCircle' +import ErrorIcon from '@mui/icons-material/Error' + +// eslint-disable-next-line no-unused-vars +enum Messages { + _1 = 'Checking for updates', + _2 = 'Downloading update', + _3 = 'Update downloaded. Unpacking the updates', + _4 = 'Applying update and restarting', + _5 = 'Error updating the app. Will retry updating on next startup', + _6 = 'Already up to date', +} + +const DashboardUpdateDialog = ({ + open, + setOpen, +}: { + open: boolean + setOpen: Dispatch> +}) => { + const [title, setTitle] = useState(Messages._1) + const [percent, setPercent] = useState('0') + + useEffect(() => { + window.Dashboard.on('autoupdater:up-to-date', () => { + setTitle(Messages._6) + setOpen(false) + }) + window.Dashboard.on('autoupdater:error', () => { + setTitle(Messages._5) + setTimeout(() => { + setOpen(false) + }, 3000) + }) + window.Dashboard.on('autoupdater:downloading', (percent: string) => { + setPercent(percent) + setTitle(`${Messages._2}...${percent}%`) + }) + window.Dashboard.on('autoupdater:downloaded', () => setTitle(Messages._3)) + window.Dashboard.on('autoupdater:updating', () => setTitle(Messages._4)) + window.Dashboard.on('autoupdater:linux-update', () => setOpen(false)) + window.Dashboard.checkForDashboardUpdates() + }, []) + + return ( + + + + {(title.includes(Messages._1) || title.includes(Messages._4)) && ( + + )} + {title.includes(Messages._2) && ( + + )} + {(title.includes(Messages._3) || title.includes(Messages._6)) && ( + + )} + {title.includes(Messages._5) && ( + + )} + + {title}... + + + + + ) +} + +export default DashboardUpdateDialog diff --git a/src/node/index.ts b/src/node/index.ts index b5a0e9d..cc46fed 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -23,7 +23,6 @@ export default class Node { constructor(window: BrowserWindow) { this.window = window this.installationLogger = new Logger({ window, channel: 'installer' }) - this.launch() } getURL(filename: string, version: string) { @@ -169,15 +168,15 @@ export default class Node { const nodeProcess = spawn(cmd) - nodeProcess.stdout.on('data', (data) => { + nodeProcess.stdout.on('data', data => { logger.info(`Launched Node: ${data}`) }) - nodeProcess.stderr.on('data', (data) => { + nodeProcess.stderr.on('data', data => { logger.info(`pointnode launch exec error: ${data}`) }) - nodeProcess.on('close', (code) => { + nodeProcess.on('close', code => { logger.info(`pointnode closed. code ${code}`) }) @@ -249,7 +248,10 @@ export default class Node { const pointPath = helpers.getPointPath() const installedVersion = helpers.getInstalledNodeVersion() const lastCheck = moment.unix(installedVersion.lastCheck) - if (moment().diff(lastCheck, 'hours') >= 1 || installedVersion.lastCheck === undefined) { + if ( + moment().diff(lastCheck, 'hours') >= 1 || + installedVersion.lastCheck === undefined + ) { const latestReleaseVersion = await helpers.getlatestNodeReleaseVersion() logger.info('installed', installedVersion.installedReleaseVersion) diff --git a/yarn.lock b/yarn.lock index bdb9f17..458bf5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2833,6 +2833,11 @@ "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" "version" "0.16.2" +"@types/semver@^7.3.9": + "integrity" "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==" + "resolved" "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz" + "version" "7.3.9" + "@types/serve-index@^1.9.1": "integrity" "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==" "resolved" "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" @@ -3396,7 +3401,7 @@ dependencies: "color-convert" "^1.9.0" -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0", "ansi-styles@^4.3.0": "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" "version" "4.3.0" @@ -3656,6 +3661,13 @@ dependencies: "follow-redirects" "^1.14.0" +"axios@^0.24.0": + "integrity" "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz" + "version" "0.24.0" + dependencies: + "follow-redirects" "^1.14.4" + "axios@^0.25.0": "integrity" "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==" "resolved" "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz" @@ -4278,11 +4290,6 @@ "pascal-case" "^3.1.2" "tslib" "^2.0.3" -"camelcase@^5.0.0": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - "camelcase@^5.3.1": "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" @@ -4513,15 +4520,6 @@ "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" "version" "3.0.0" -"cliui@^6.0.0": - "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^6.2.0" - "cliui@^7.0.2": "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -5147,11 +5145,6 @@ "resolved" "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" "version" "1.0.1" -"decamelize@^1.2.0": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - "decamelize@5.0.0": "integrity" "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==" "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz" @@ -5582,36 +5575,13 @@ "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" "version" "1.1.1" -"electron-installer-common@^0.10.2": - "integrity" "sha512-mYbP+6i+nHMIm0WZHXgGdmmXMe+KXncl6jZYQNcCF9C1WsNA9C5SZ2VP4TLQMSIoFO+X4ugkMEA5uld1bmyEvA==" - "resolved" "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.3.tgz" - "version" "0.10.3" - dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - "asar" "^3.0.0" - "debug" "^4.1.1" - "fs-extra" "^9.0.0" - "glob" "^7.1.4" - "lodash" "^4.17.15" - "parse-author" "^2.0.0" - "semver" "^7.1.1" - "tmp-promise" "^3.0.2" - optionalDependencies: - "@types/fs-extra" "^9.0.1" - -"electron-installer-debian@^3.0.0": - "integrity" "sha512-k6KChvx0Fw8XTlCqwwbBfh19yGQaKjGdbugokmr1IpzINOm4QFyACKMTHAYFHW5LCBUZQShZD96hwxUZ+8Kx+w==" - "resolved" "https://registry.npmjs.org/electron-installer-debian/-/electron-installer-debian-3.1.0.tgz" - "version" "3.1.0" +"electron-github-autoupdater@^2.0.0": + "integrity" "sha512-ZnSQuWwv1lxyMqITiuI8vW4MlO24IoK9zZa4vo5NH/F0wskMGgDm0Kn4s1KAFq8XpzrxAjyjuE/TqE94cL9TAw==" + "resolved" "https://registry.npmjs.org/electron-github-autoupdater/-/electron-github-autoupdater-2.0.0.tgz" + "version" "2.0.0" dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - "debug" "^4.1.1" - "electron-installer-common" "^0.10.2" - "fs-extra" "^9.0.0" - "get-folder-size" "^2.0.1" - "lodash" "^4.17.4" - "word-wrap" "^1.2.3" - "yargs" "^15.0.1" + "axios" "^0.24.0" + "semver" "^7.3.5" "electron-installer-dmg@^3.0.0": "integrity" "sha512-a3z9ABUfLJtrLK1ize4j+wJKslodb0kRHgBuUN4GTckiUxtGdo49XCvvAHvQaOqQk3S5VTvuc6PoofnI9mKSCQ==" @@ -5624,18 +5594,10 @@ optionalDependencies: "appdmg" "^0.6.0" -"electron-installer-redhat@^3.2.0": - "integrity" "sha512-hXIXB3uQXmXZy/v3MpbwWN4Of28ALpPt9ZyUDNEoSe0w7QZceL9IqI2K6Q6imiBJCLRC0hmT94WhlKj1RyGOWg==" - "resolved" "https://registry.npmjs.org/electron-installer-redhat/-/electron-installer-redhat-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "@malept/cross-spawn-promise" "^1.0.0" - "debug" "^4.1.1" - "electron-installer-common" "^0.10.2" - "fs-extra" "^9.0.0" - "lodash" "^4.17.15" - "word-wrap" "^1.2.3" - "yargs" "^16.0.2" +"electron-is-dev@^0.3.0": + "integrity" "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==" + "resolved" "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz" + "version" "0.3.0" "electron-log@^4.4.6": "integrity" "sha512-nirYgRdY+F+vclr8ijdwy2vW03IzFpDHTaKNWu76dEN21Y76+smcES5knS7cgHUUB0qNLOi8vZO36taakjbSXA==" @@ -5706,6 +5668,13 @@ "tar" "^6.0.5" "yargs" "^17.0.1" +"electron-squirrel-startup@^1.0.0": + "integrity" "sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q==" + "resolved" "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "debug" "^2.2.0" + "electron-to-chromium@^1.4.71": "integrity" "sha512-9LkRQwjW6/wnSfevR21a3k8sOJ+XWSH7kkzs9/EUenKmuDkndP3W9y1yCZpOxufwGbX3JV8glZZSDb4o95zwXQ==" "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.72.tgz" @@ -5738,7 +5707,7 @@ optionalDependencies: "exe-icon-extractor" "^1.0.8" -"electron@^17.1.0": +"electron@^17.1.0", "electron@>= 6.0.0": "integrity" "sha512-X/qdldmQ8lA15NmeraubWCTtMeTO8K9Ser0wtSCgOXVh53Sr1Ea0VQQ7Q9LuGgWRVz4qtr40cntuEdM8icdmTw==" "resolved" "https://registry.npmjs.org/electron/-/electron-17.1.0.tgz" "version" "17.1.0" @@ -6279,6 +6248,11 @@ "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" "version" "3.3.0" +"exe-icon-extractor@^1.0.8": + "integrity" "sha512-Ww9kDYN3goiWEMovTWV1s0p3we0Xp1jJyJSnW4KH+Z+0KxuhWTSL8f1u5bpPsSunSUeqC+RACbmBk6l5EuBR1g==" + "resolved" "https://registry.npmjs.org/exe-icon-extractor/-/exe-icon-extractor-1.0.8.tgz" + "version" "1.0.8" + "execa@^1.0.0": "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" @@ -6726,7 +6700,7 @@ "resolved" "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz" "version" "0.13.0" -"follow-redirects@^1.0.0", "follow-redirects@^1.14.0", "follow-redirects@^1.14.7": +"follow-redirects@^1.0.0", "follow-redirects@^1.14.0", "follow-redirects@^1.14.4", "follow-redirects@^1.14.7": "integrity" "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz" "version" "1.14.9" @@ -6930,11 +6904,6 @@ "flora-colossus" "^1.0.0" "fs-extra" "^4.0.0" -"gar@^1.0.4": - "integrity" "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==" - "resolved" "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz" - "version" "1.0.4" - "gauge@^4.0.3": "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" @@ -6954,19 +6923,11 @@ "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" "version" "1.0.0-beta.2" -"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": +"get-caller-file@^2.0.5": "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" "version" "2.0.5" -"get-folder-size@^2.0.1": - "integrity" "sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==" - "resolved" "https://registry.npmjs.org/get-folder-size/-/get-folder-size-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "gar" "^1.0.4" - "tiny-each-async" "2.0.3" - "get-installed-path@^2.0.3": "integrity" "sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==" "resolved" "https://registry.npmjs.org/get-installed-path/-/get-installed-path-2.1.1.tgz" @@ -7064,6 +7025,13 @@ dependencies: "assert-plus" "^1.0.0" +"github-url-to-object@^4.0.4": + "integrity" "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==" + "resolved" "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz" + "version" "4.0.6" + dependencies: + "is-url" "^1.1.0" + "glob-parent@^5.1.2", "glob-parent@~5.1.2": "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -7107,15 +7075,14 @@ "path-is-absolute" "^1.0.0" "glob@^8.0.1": - "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - "version" "8.0.3" + "version" "8.0.1" dependencies: "fs.realpath" "^1.0.0" "inflight" "^1.0.4" "inherits" "2" "minimatch" "^5.0.1" "once" "^1.3.0" + "path-is-absolute" "^1.0.0" "global-agent@^3.0.0": "integrity" "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==" @@ -8101,6 +8068,11 @@ "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" "version" "0.1.0" +"is-url@^1.1.0", "is-url@^1.2.4": + "integrity" "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + "resolved" "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz" + "version" "1.2.4" + "is-utf8@^0.2.1": "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" @@ -9290,7 +9262,7 @@ "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" "version" "4.4.2" -"lodash@^4.17.10", "lodash@^4.17.11", "lodash@^4.17.15", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.4", "lodash@^4.7.0", "lodash@4.x": +"lodash@^4.17.10", "lodash@^4.17.11", "lodash@^4.17.15", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.7.0", "lodash@4.x": "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" "version" "4.17.21" @@ -9602,9 +9574,7 @@ "brace-expansion" "^1.1.7" "minimatch@^5.0.1": - "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - "version" "5.1.0" + "version" "5.0.1" dependencies: "brace-expansion" "^2.0.1" @@ -10082,8 +10052,6 @@ "validate-npm-package-name" "^4.0.0" "npm-packlist@^5.0.0": - "integrity" "sha512-KuSbzgejxdsAWbNNyEs8EsyDHsO+nJF6k+9WuWzFbSNh5tFHs4lDApXw7kntKpuehfp8lKRzJkMtz0+WmGvTIw==" - "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.3.tgz" "version" "5.0.3" dependencies: "glob" "^8.0.1" @@ -11701,11 +11669,6 @@ "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" "version" "2.0.2" -"require-main-filename@^2.0.0": - "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - "version" "2.0.0" - "requires-port@^1.0.0": "integrity" "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" @@ -12034,40 +11997,27 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" "version" "5.7.1" -"semver@^6.0.0", "semver@^6.1.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.2.0", "semver@^6.3.0": +"semver@^6.0.0": "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" "version" "6.3.0" -"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.5", "semver@^7.3.7": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - -"semver@^7.1.3": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.1.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.2.1": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.3.2": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.2.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.3.4": +"semver@^7.0.0", "semver@^7.1.1", "semver@^7.1.3", "semver@^7.2.1", "semver@^7.3.2", "semver@^7.3.4", "semver@^7.3.5", "semver@^7.3.7", "semver@7.x": "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" "version" "7.3.7" @@ -12091,13 +12041,6 @@ dependencies: "lru-cache" "^6.0.0" -"semver@7.x": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - "send@0.17.2": "integrity" "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==" "resolved" "https://registry.npmjs.org/send/-/send-0.17.2.tgz" @@ -12322,8 +12265,6 @@ "socks" "^2.6.2" "socks-proxy-agent@^6.1.1": - "integrity" "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz" "version" "6.2.0" dependencies: "agent-base" "^6.0.2" @@ -13041,11 +12982,6 @@ "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" "version" "4.0.1" -"tiny-each-async@2.0.3": - "integrity" "sha1-jru/1tYpXxNwAD+7NxYq/loKUdE=" - "resolved" "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz" - "version" "2.0.3" - "tiny-relative-date@^1.3.0": "integrity" "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==" "resolved" "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" @@ -13414,6 +13350,16 @@ "resolved" "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" "version" "2.0.1" +"update-electron-app@^2.0.1": + "integrity" "sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg==" + "resolved" "https://registry.npmjs.org/update-electron-app/-/update-electron-app-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "electron-is-dev" "^0.3.0" + "github-url-to-object" "^4.0.4" + "is-url" "^1.2.4" + "ms" "^2.1.1" + "update-notifier@5.1.0": "integrity" "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==" "resolved" "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" @@ -13838,11 +13784,6 @@ "is-string" "^1.0.5" "is-symbol" "^1.0.3" -"which-module@^2.0.0": - "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - "version" "2.0.0" - "which@^1.2.14": "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" @@ -13901,15 +13842,6 @@ "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" "version" "1.2.3" -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "wrap-ansi@^7.0.0": "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -14017,11 +13949,6 @@ "resolved" "https://registry.npmjs.org/xterm/-/xterm-4.18.0.tgz" "version" "4.18.0" -"y18n@^4.0.0": - "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - "version" "4.0.3" - "y18n@^5.0.5": "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" @@ -14037,14 +13964,6 @@ "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" "version" "1.10.2" -"yargs-parser@^18.1.2": - "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - "version" "18.1.3" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - "yargs-parser@^20.0.0", "yargs-parser@^20.2.2", "yargs-parser@20.x": "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" @@ -14055,36 +13974,6 @@ "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" "version" "21.0.1" -"yargs@^15.0.1": - "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - "version" "15.4.1" - dependencies: - "cliui" "^6.0.0" - "decamelize" "^1.2.0" - "find-up" "^4.1.0" - "get-caller-file" "^2.0.1" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^4.2.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^18.1.2" - -"yargs@^16.0.2": - "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - "version" "16.2.0" - dependencies: - "cliui" "^7.0.2" - "escalade" "^3.1.1" - "get-caller-file" "^2.0.5" - "require-directory" "^2.1.1" - "string-width" "^4.2.0" - "y18n" "^5.0.5" - "yargs-parser" "^20.2.2" - "yargs@^16.2.0": "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"