From 1a461e9a32a623718c6ee42be159302b082230ac Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Mon, 18 Apr 2022 12:05:06 +0200 Subject: [PATCH 01/50] Backport things from stable branch back to dev --- package-lock.json | 2854 +++++++------------- package.json | 5 +- src/{settings => content/css}/settings.css | 0 src/content/css/setup.css | 2 +- src/content/css/tabs.css | 2 +- src/content/splash.html | 2 +- src/main.ts | 18 +- src/settings/main.ts | 29 +- src/settings/settings.html | 33 +- src/types/glasstron.d.ts | 70 - src/utils.ts | 14 +- src/window.ts | 28 +- 12 files changed, 986 insertions(+), 2071 deletions(-) rename src/{settings => content/css}/settings.css (100%) delete mode 100644 src/types/glasstron.d.ts diff --git a/package-lock.json b/package-lock.json index f80f030..f7376f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "electron-context-menu": "^3.1.2", "electron-json-storage": "^4.5.0", "electron-tabs": "^0.17.0", - "glasstron": "^0.1.1", "v8-compile-cache": "^2.3.0" }, "devDependencies": { @@ -21,7 +20,7 @@ "@types/node": "^17.0.24", "copyfiles": "^2.4.1", "electron": "^18.0.4", - "electron-builder": "^23.0.3", + "electron-builder": "^22.5.1", "husky": "^7.0.4", "prettier": "^2.5.1", "typescript": "^4.5.4" @@ -66,133 +65,6 @@ "global-tunnel-ng": "^2.7.1" } }, - "node_modules/@electron/universal": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.0.tgz", - "integrity": "sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q==", - "dev": true, - "dependencies": { - "@malept/cross-spawn-promise": "^1.1.0", - "asar": "^3.1.0", - "debug": "^4.3.1", - "dir-compare": "^2.4.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@electron/universal/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/universal/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@malept/flatpak-bundler/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -214,15 +86,6 @@ "node": ">=6" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -239,32 +102,14 @@ "dev": true }, "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "optional": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true, - "optional": true - }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -277,28 +122,10 @@ "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, - "node_modules/@types/plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*", - "xmlbuilder": ">=11.0.1" - } - }, - "node_modules/@types/verror": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", - "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==", - "dev": true, - "optional": true - }, "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -311,23 +138,11 @@ "dev": true }, "node_modules/7zip-bin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", - "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", + "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", "dev": true }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -385,59 +200,57 @@ } }, "node_modules/app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.6.tgz", + "integrity": "sha512-gY9ABoV5jh67IrPEwF81R8l9LwE3RqHUyU3rIKitwqMpKhplN5OZC6WEHOXO3XhwiLCIlr9LLI6OPhr3bmtQIg==", "dev": true }, "node_modules/app-builder-lib": { - "version": "23.0.3", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.0.3.tgz", - "integrity": "sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.5.1.tgz", + "integrity": "sha512-VtB/PD8actR1317D/0uGzuJIYbpw4pRrfMB6IyTLwGynUd3ihqiCFjejVWHjCwopgCct2kE0MvLwo8P49xHIeQ==", "dev": true, "dependencies": { "@develar/schema-utils": "~2.6.5", - "@electron/universal": "1.2.0", - "@malept/flatpak-bundler": "^0.4.0", - "7zip-bin": "~5.1.1", + "7zip-bin": "~5.0.3", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", + "builder-util": "22.5.1", + "builder-util-runtime": "8.7.0", "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.2", - "ejs": "^3.1.6", - "electron-osx-sign": "^0.6.0", - "electron-publish": "23.0.2", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "hosted-git-info": "^4.0.2", - "is-ci": "^3.0.0", - "isbinaryfile": "^4.0.8", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", + "debug": "^4.1.1", + "ejs": "^3.0.2", + "electron-publish": "22.5.1", + "fs-extra": "^9.0.0", + "hosted-git-info": "^3.0.4", + "is-ci": "^2.0.0", + "isbinaryfile": "^4.0.5", + "js-yaml": "^3.13.1", + "lazy-val": "^1.0.4", "minimatch": "^3.0.4", - "read-config-file": "6.2.0", + "normalize-package-data": "^2.5.0", + "read-config-file": "6.0.0", "sanitize-filename": "^1.6.3", - "semver": "^7.3.5", - "temp-file": "^3.4.0" + "semver": "^7.1.3", + "temp-file": "^3.3.7" }, "engines": { - "node": ">=14.0.0" + "node": ">=8.12.0" } }, "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/app-builder-lib/node_modules/jsonfile": { @@ -477,41 +290,19 @@ } }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/asar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz", - "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "chromium-pickle-js": "^0.2.0", - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" - }, - "engines": { - "node": ">=10.12.0" - }, - "optionalDependencies": { - "@types/glob": "^7.1.1" + "sprintf-js": "~1.0.2" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } + "node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "node_modules/astral-regex": { "version": "2.0.0", @@ -522,9 +313,9 @@ } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { "lodash": "^4.17.14" } @@ -538,12 +329,6 @@ "node": ">=0.12.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -558,26 +343,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -601,37 +366,34 @@ "optional": true }, "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", "dev": true, "dependencies": { "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/brace-expansion": { @@ -643,47 +405,6 @@ "concat-map": "0.0.1" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -693,21 +414,6 @@ "node": "*" } }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -715,55 +421,53 @@ "dev": true }, "node_modules/builder-util": { - "version": "23.0.2", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.0.2.tgz", - "integrity": "sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.5.1.tgz", + "integrity": "sha512-CelDTP3+fvDfZfbwy3PXif7mudPaWankJ8vrRg/NtCGvL+hXnwycnJZr46d5EQL7AgQcpJ27o9LTdfu61cxTFw==", "dev": true, "dependencies": { - "@types/debug": "^4.1.6", - "@types/fs-extra": "^9.0.11", - "7zip-bin": "~5.1.1", - "app-builder-bin": "4.0.0", + "@types/debug": "^4.1.5", + "@types/fs-extra": "^8.1.0", + "7zip-bin": "~5.0.3", + "app-builder-bin": "3.5.6", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "cross-spawn": "^7.0.3", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "source-map-support": "^0.5.19", + "builder-util-runtime": "8.7.0", + "chalk": "^3.0.0", + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "js-yaml": "^3.13.1", + "source-map-support": "^0.5.16", "stat-mode": "^1.0.0", - "temp-file": "^3.4.0" + "temp-file": "^3.3.7" } }, "node_modules/builder-util-runtime": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz", - "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.0.tgz", + "integrity": "sha512-G1AqqVM2vYTrSFR982c1NNzwXKrGLQjVjaZaWQdn4O6Z3YKjdMDofw88aD9jpyK9ZXkrCxR0tI3Qe9wNbyTlXg==", "dev": true, "dependencies": { - "debug": "^4.3.2", + "debug": "^4.1.1", "sax": "^1.2.4" }, "engines": { - "node": ">=12.0.0" + "node": ">=8.2.0" } }, "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/builder-util/node_modules/jsonfile": { @@ -830,31 +534,25 @@ } }, "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, "node_modules/chromium-pickle-js": { @@ -864,9 +562,9 @@ "dev": true }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "node_modules/cli-boxes": { @@ -932,45 +630,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1056,30 +715,6 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "optional": true, - "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -1106,6 +741,15 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -1146,15 +790,6 @@ "node": ">= 0.4" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -1162,74 +797,33 @@ "dev": true, "optional": true }, - "node_modules/dir-compare": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", - "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", - "dev": true, - "dependencies": { - "buffer-equal": "1.0.0", - "colors": "1.0.3", - "commander": "2.9.0", - "minimatch": "3.0.4" - }, - "bin": { - "dircompare": "src/cli/dircompare.js" - } - }, - "node_modules/dir-compare/node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/dir-compare/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/dmg-builder": { - "version": "23.0.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.0.3.tgz", - "integrity": "sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.5.1.tgz", + "integrity": "sha512-AwIiyGwgqhA8Ty/YnEU20aSzfrWZns6suOBTqddD+rLDI4jEASKGQadfvcXRSWgaK/VQW0GrhheXrhJpzZzt3g==", "dev": true, "dependencies": { - "app-builder-lib": "23.0.3", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "fs-extra": "^10.0.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" - }, - "optionalDependencies": { - "dmg-license": "^1.0.9" + "app-builder-lib": "22.5.1", + "builder-util": "22.5.1", + "fs-extra": "^9.0.0", + "iconv-lite": "^0.5.1", + "js-yaml": "^3.13.1", + "sanitize-filename": "^1.6.3" } }, "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/dmg-builder/node_modules/jsonfile": { @@ -1253,33 +847,6 @@ "node": ">= 10.0.0" } }, - "node_modules/dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", - "deprecated": "Disk image license agreements are deprecated by Apple and will probably be removed in a future macOS release. Discussion at: https://github.com/argv-minus-one/dmg-license/issues/11", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - }, - "bin": { - "dmg-license": "bin/dmg-license.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -1293,9 +860,9 @@ } }, "node_modules/dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, "engines": { "node": ">=10" @@ -1314,16 +881,11 @@ "dev": true }, "node_modules/ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.0.2.tgz", + "integrity": "sha512-IncmUpn1yN84hy2shb0POJ80FWrfGNY0cxO9f4v+/sG7qcBvAtVWUA1IdzY/8EYUmOVhoKJVdJjNd3AZcnxOjA==", "dev": true, - "dependencies": { - "jake": "^10.6.1" - }, - "bin": { - "ejs": "bin/cli.js" - }, + "hasInstallScript": true, "engines": { "node": ">=0.10.0" } @@ -1347,44 +909,58 @@ } }, "node_modules/electron-builder": { - "version": "23.0.3", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.0.3.tgz", - "integrity": "sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.5.1.tgz", + "integrity": "sha512-7gnHN8Ml5zecDerN8/ljAwUKtE+hhGLuT/X2/zO0FJM2q2hlLx/6ZgzESFILKqnPQFEBRxQ8SL1OxjdIY0HIrw==", "dev": true, "dependencies": { - "@types/yargs": "^17.0.1", - "app-builder-lib": "23.0.3", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "dmg-builder": "23.0.3", - "fs-extra": "^10.0.0", - "is-ci": "^3.0.0", - "lazy-val": "^1.0.5", - "read-config-file": "6.2.0", - "update-notifier": "^5.1.0", - "yargs": "^17.0.1" + "@types/yargs": "^15.0.4", + "app-builder-lib": "22.5.1", + "bluebird-lst": "^1.0.9", + "builder-util": "22.5.1", + "builder-util-runtime": "8.7.0", + "chalk": "^3.0.0", + "dmg-builder": "22.5.1", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "lazy-val": "^1.0.4", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "update-notifier": "^4.1.0", + "yargs": "^15.3.1" }, "bin": { - "electron-builder": "cli.js", - "install-app-deps": "install-app-deps.js" + "electron-builder": "out/cli/cli.js", + "install-app-deps": "out/cli/install-app-deps.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=8.12.0" + } + }, + "node_modules/electron-builder/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, "node_modules/electron-builder/node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/electron-builder/node_modules/jsonfile": { @@ -1408,31 +984,59 @@ "node": ">= 10.0.0" } }, - "node_modules/electron-builder/node_modules/yargs": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", - "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", + "node_modules/electron-builder/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/electron-builder/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/electron-builder/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" } }, "node_modules/electron-builder/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { - "node": ">=12" + "node": ">=6" } }, "node_modules/electron-context-menu": { @@ -1493,81 +1097,35 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/electron-osx-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", - "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.0", - "compare-version": "^0.1.2", - "debug": "^2.6.8", - "isbinaryfile": "^3.0.2", - "minimist": "^1.2.0", - "plist": "^3.0.1" - }, - "bin": { - "electron-osx-flat": "bin/electron-osx-flat.js", - "electron-osx-sign": "bin/electron-osx-sign.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/electron-osx-sign/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" - } - }, - "node_modules/electron-osx-sign/node_modules/isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "dependencies": { - "buffer-alloc": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/electron-osx-sign/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/electron-publish": { - "version": "23.0.2", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.0.2.tgz", - "integrity": "sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.5.1.tgz", + "integrity": "sha512-g5bwLAHZT6A++yU1+Et+fncnFAdXXgkRao9rzTFAvhQ0QJBsmLiyOd0Ta2RI/EQcVoy6jyHtxFs7CWIXE5aZOA==", "dev": true, "dependencies": { - "@types/fs-extra": "^9.0.11", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "fs-extra": "^10.0.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" + "@types/fs-extra": "^8.1.0", + "bluebird-lst": "^1.0.9", + "builder-util": "22.5.1", + "builder-util-runtime": "8.7.0", + "chalk": "^3.0.0", + "fs-extra": "^9.0.0", + "lazy-val": "^1.0.4", + "mime": "^2.4.4" } }, "node_modules/electron-publish/node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/electron-publish/node_modules/jsonfile": { @@ -1672,6 +1230,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -1737,16 +1308,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1768,27 +1329,17 @@ "pend": "~1.2.0" } }, - "node_modules/filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, "node_modules/fs-extra": { @@ -1810,6 +1361,12 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1831,19 +1388,6 @@ "node": ">=6" } }, - "node_modules/glasstron": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/glasstron/-/glasstron-0.1.1.tgz", - "integrity": "sha512-oLEMQM5wwdAQ44NrXD3wjk+b3dsfQG1XtkLn5pCxQNa3ri1AtWvvzpnhFUd88ZTmguHvkY4c3JKzcPSYaJAKKA==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^4.0.0", - "x11": "^2.3.0" - }, - "funding": { - "url": "https://patreon.com/arytonex" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1898,28 +1442,25 @@ } }, "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", "dev": true, "dependencies": { - "ini": "2.0.0" + "ini": "1.3.7" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true }, "node_modules/global-tunnel-ng": { "version": "2.7.1", @@ -1980,11 +1521,17 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } }, "node_modules/has-flag": { "version": "4.0.0", @@ -2005,9 +1552,9 @@ } }, "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2022,33 +1569,6 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/husky": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", @@ -2064,63 +1584,18 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" - }, - "engines": { - "node": "^8.11.2 || >=10" - } - }, - "node_modules/iconv-corefoundation/node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true, - "optional": true - }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -2159,17 +1634,29 @@ "dev": true }, "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { - "ci-info": "^3.2.0" + "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -2179,31 +1666,28 @@ } }, "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", "dev": true, "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/is-obj": { @@ -2262,43 +1746,14 @@ "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/jake": { - "version": "10.8.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", - "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", - "dev": true, - "dependencies": { - "async": "0.9.x", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -2371,6 +1826,18 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lockfile": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", @@ -2453,18 +1920,6 @@ "node": ">= 0.6" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -2516,11 +1971,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, "node_modules/noms": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", @@ -2555,6 +2005,33 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", @@ -2596,14 +2073,6 @@ "wrappy": "1" } }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -2613,6 +2082,42 @@ "node": ">=6" } }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -2644,14 +2149,11 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/pend": { "version": "1.2.0", @@ -2669,28 +2171,6 @@ "node": ">=4" } }, - "node_modules/plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", - "dev": true, - "dependencies": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/plist/node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -2783,19 +2263,19 @@ } }, "node_modules/read-config-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", - "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", + "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", "dev": true, "dependencies": { - "dotenv": "^9.0.2", + "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", + "js-yaml": "^3.13.1", + "json5": "^2.1.2", "lazy-val": "^1.0.4" }, "engines": { - "node": ">=12.0.0" + "node": ">=10.0.0" } }, "node_modules/readable-stream": { @@ -2846,6 +2326,29 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -2955,26 +2458,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shebang-command": { + "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "node_modules/signal-exit": { "version": "3.0.7", @@ -2994,17 +2482,6 @@ "node": ">=8" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, "node_modules/sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -3046,6 +2523,38 @@ "source-map": "^0.6.0" } }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -3128,6 +2637,18 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -3139,9 +2660,9 @@ } }, "node_modules/temp-file/node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -3173,6 +2694,18 @@ "node": ">= 10.0.0" } }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -3183,42 +2716,6 @@ "xtend": "~4.0.1" } }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dev": true, - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -3331,66 +2828,32 @@ } }, "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", "dev": true, "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", + "boxen": "^4.2.0", + "chalk": "^3.0.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/update-notifier/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/update-notifier/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3429,43 +2892,22 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, - "node_modules/verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -3510,17 +2952,6 @@ "signal-exit": "^3.0.2" } }, - "node_modules/x11": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/x11/-/x11-2.3.0.tgz", - "integrity": "sha1-vazO3M2sJIL9Vg8FEee/K9nh2/I=", - "dependencies": { - "os-homedir": "^1.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -3530,16 +2961,6 @@ "node": ">=8" } }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -3630,102 +3051,6 @@ "sumchecker": "^3.0.1" } }, - "@electron/universal": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.0.tgz", - "integrity": "sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q==", - "dev": true, - "requires": { - "@malept/cross-spawn-promise": "^1.1.0", - "asar": "^3.1.0", - "debug": "^4.3.1", - "dir-compare": "^2.4.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -3741,12 +3066,6 @@ "defer-to-connect": "^1.0.1" } }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -3763,32 +3082,14 @@ "dev": true }, "@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", "dev": true, "requires": { "@types/node": "*" } }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "optional": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true, - "optional": true - }, "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -3801,28 +3102,10 @@ "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, - "@types/plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*", - "xmlbuilder": ">=11.0.1" - } - }, - "@types/verror": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", - "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==", - "dev": true, - "optional": true - }, "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -3835,20 +3118,11 @@ "dev": true }, "7zip-bin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", - "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", + "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", "dev": true }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3891,50 +3165,48 @@ } }, "app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.6.tgz", + "integrity": "sha512-gY9ABoV5jh67IrPEwF81R8l9LwE3RqHUyU3rIKitwqMpKhplN5OZC6WEHOXO3XhwiLCIlr9LLI6OPhr3bmtQIg==", "dev": true }, "app-builder-lib": { - "version": "23.0.3", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.0.3.tgz", - "integrity": "sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.5.1.tgz", + "integrity": "sha512-VtB/PD8actR1317D/0uGzuJIYbpw4pRrfMB6IyTLwGynUd3ihqiCFjejVWHjCwopgCct2kE0MvLwo8P49xHIeQ==", "dev": true, "requires": { "@develar/schema-utils": "~2.6.5", - "@electron/universal": "1.2.0", - "@malept/flatpak-bundler": "^0.4.0", - "7zip-bin": "~5.1.1", + "7zip-bin": "~5.0.3", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", + "builder-util": "22.5.1", + "builder-util-runtime": "8.7.0", "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.2", - "ejs": "^3.1.6", - "electron-osx-sign": "^0.6.0", - "electron-publish": "23.0.2", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "hosted-git-info": "^4.0.2", - "is-ci": "^3.0.0", - "isbinaryfile": "^4.0.8", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", + "debug": "^4.1.1", + "ejs": "^3.0.2", + "electron-publish": "22.5.1", + "fs-extra": "^9.0.0", + "hosted-git-info": "^3.0.4", + "is-ci": "^2.0.0", + "isbinaryfile": "^4.0.5", + "js-yaml": "^3.13.1", + "lazy-val": "^1.0.4", "minimatch": "^3.0.4", - "read-config-file": "6.2.0", + "normalize-package-data": "^2.5.0", + "read-config-file": "6.0.0", "sanitize-filename": "^1.6.3", - "semver": "^7.3.5", - "temp-file": "^3.4.0" + "semver": "^7.1.3", + "temp-file": "^3.3.7" }, "dependencies": { "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -3968,40 +3240,31 @@ } }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "asar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz", - "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "chromium-pickle-js": "^0.2.0", - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } @@ -4012,12 +3275,6 @@ "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -4029,12 +3286,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -4058,25 +3309,25 @@ "optional": true }, "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", "dev": true, "requires": { "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" }, "dependencies": { "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } @@ -4090,51 +3341,12 @@ "concat-map": "0.0.1" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4142,36 +3354,34 @@ "dev": true }, "builder-util": { - "version": "23.0.2", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.0.2.tgz", - "integrity": "sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.5.1.tgz", + "integrity": "sha512-CelDTP3+fvDfZfbwy3PXif7mudPaWankJ8vrRg/NtCGvL+hXnwycnJZr46d5EQL7AgQcpJ27o9LTdfu61cxTFw==", "dev": true, "requires": { - "@types/debug": "^4.1.6", - "@types/fs-extra": "^9.0.11", - "7zip-bin": "~5.1.1", - "app-builder-bin": "4.0.0", + "@types/debug": "^4.1.5", + "@types/fs-extra": "^8.1.0", + "7zip-bin": "~5.0.3", + "app-builder-bin": "3.5.6", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "cross-spawn": "^7.0.3", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "source-map-support": "^0.5.19", + "builder-util-runtime": "8.7.0", + "chalk": "^3.0.0", + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "js-yaml": "^3.13.1", + "source-map-support": "^0.5.16", "stat-mode": "^1.0.0", - "temp-file": "^3.4.0" + "temp-file": "^3.3.7" }, "dependencies": { "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -4196,12 +3406,12 @@ } }, "builder-util-runtime": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz", - "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.0.tgz", + "integrity": "sha512-G1AqqVM2vYTrSFR982c1NNzwXKrGLQjVjaZaWQdn4O6Z3YKjdMDofw88aD9jpyK9ZXkrCxR0tI3Qe9wNbyTlXg==", "dev": true, "requires": { - "debug": "^4.3.2", + "debug": "^4.1.1", "sax": "^1.2.4" } }, @@ -4238,15 +3448,15 @@ } }, "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -4260,9 +3470,9 @@ "dev": true }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "cli-boxes": { @@ -4313,33 +3523,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4417,27 +3600,6 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -4453,6 +3615,12 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -4484,12 +3652,6 @@ "object-keys": "^1.0.12" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -4497,59 +3659,27 @@ "dev": true, "optional": true }, - "dir-compare": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", - "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", - "dev": true, - "requires": { - "buffer-equal": "1.0.0", - "colors": "1.0.3", - "commander": "2.9.0", - "minimatch": "3.0.4" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, "dmg-builder": { - "version": "23.0.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.0.3.tgz", - "integrity": "sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.5.1.tgz", + "integrity": "sha512-AwIiyGwgqhA8Ty/YnEU20aSzfrWZns6suOBTqddD+rLDI4jEASKGQadfvcXRSWgaK/VQW0GrhheXrhJpzZzt3g==", "dev": true, "requires": { - "app-builder-lib": "23.0.3", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "dmg-license": "^1.0.9", - "fs-extra": "^10.0.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" + "app-builder-lib": "22.5.1", + "builder-util": "22.5.1", + "fs-extra": "^9.0.0", + "iconv-lite": "^0.5.1", + "js-yaml": "^3.13.1", + "sanitize-filename": "^1.6.3" }, "dependencies": { "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -4573,23 +3703,6 @@ } } }, - "dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", - "dev": true, - "optional": true, - "requires": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - } - }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -4600,9 +3713,9 @@ } }, "dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true }, "dotenv-expand": { @@ -4618,13 +3731,10 @@ "dev": true }, "ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", - "dev": true, - "requires": { - "jake": "^10.6.1" - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.0.2.tgz", + "integrity": "sha512-IncmUpn1yN84hy2shb0POJ80FWrfGNY0cxO9f4v+/sG7qcBvAtVWUA1IdzY/8EYUmOVhoKJVdJjNd3AZcnxOjA==", + "dev": true }, "electron": { "version": "18.0.4", @@ -4646,31 +3756,45 @@ } }, "electron-builder": { - "version": "23.0.3", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.0.3.tgz", - "integrity": "sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.5.1.tgz", + "integrity": "sha512-7gnHN8Ml5zecDerN8/ljAwUKtE+hhGLuT/X2/zO0FJM2q2hlLx/6ZgzESFILKqnPQFEBRxQ8SL1OxjdIY0HIrw==", "dev": true, "requires": { - "@types/yargs": "^17.0.1", - "app-builder-lib": "23.0.3", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "dmg-builder": "23.0.3", - "fs-extra": "^10.0.0", - "is-ci": "^3.0.0", - "lazy-val": "^1.0.5", - "read-config-file": "6.2.0", - "update-notifier": "^5.1.0", - "yargs": "^17.0.1" + "@types/yargs": "^15.0.4", + "app-builder-lib": "22.5.1", + "bluebird-lst": "^1.0.9", + "builder-util": "22.5.1", + "builder-util-runtime": "8.7.0", + "chalk": "^3.0.0", + "dmg-builder": "22.5.1", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "lazy-val": "^1.0.4", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "update-notifier": "^4.1.0", + "yargs": "^15.3.1" }, "dependencies": { - "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -4692,26 +3816,51 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "yargs": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", - "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "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-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -4763,67 +3912,29 @@ } } }, - "electron-osx-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", - "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "compare-version": "^0.1.2", - "debug": "^2.6.8", - "isbinaryfile": "^3.0.2", - "minimist": "^1.2.0", - "plist": "^3.0.1" - }, - "dependencies": { - "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" - } - }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "electron-publish": { - "version": "23.0.2", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.0.2.tgz", - "integrity": "sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.5.1.tgz", + "integrity": "sha512-g5bwLAHZT6A++yU1+Et+fncnFAdXXgkRao9rzTFAvhQ0QJBsmLiyOd0Ta2RI/EQcVoy6jyHtxFs7CWIXE5aZOA==", "dev": true, "requires": { - "@types/fs-extra": "^9.0.11", - "builder-util": "23.0.2", - "builder-util-runtime": "9.0.0", - "chalk": "^4.1.1", - "fs-extra": "^10.0.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" + "@types/fs-extra": "^8.1.0", + "bluebird-lst": "^1.0.9", + "builder-util": "22.5.1", + "builder-util-runtime": "8.7.0", + "chalk": "^3.0.0", + "fs-extra": "^9.0.0", + "lazy-val": "^1.0.4", + "mime": "^2.4.4" }, "dependencies": { "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -4904,6 +4015,12 @@ "dev": true, "optional": true }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -4959,13 +4076,6 @@ } } }, - "extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "dev": true, - "optional": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4987,24 +4097,14 @@ "pend": "~1.2.0" } }, - "filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "minimatch": "^3.0.4" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "fs-extra": { @@ -5023,6 +4123,12 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -5038,15 +4144,6 @@ "pump": "^3.0.0" } }, - "glasstron": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/glasstron/-/glasstron-0.1.1.tgz", - "integrity": "sha512-oLEMQM5wwdAQ44NrXD3wjk+b3dsfQG1XtkLn5pCxQNa3ri1AtWvvzpnhFUd88ZTmguHvkY4c3JKzcPSYaJAKKA==", - "requires": { - "node-addon-api": "^4.0.0", - "x11": "^2.3.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5088,18 +4185,18 @@ } }, "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", "dev": true, "requires": { - "ini": "2.0.0" + "ini": "1.3.7" }, "dependencies": { "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "dev": true } } @@ -5151,11 +4248,14 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } }, "has-flag": { "version": "4.0.0", @@ -5170,9 +4270,9 @@ "dev": true }, "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5184,69 +4284,21 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, "husky": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true }, - "iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", - "dev": true, - "optional": true, - "requires": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" - }, - "dependencies": { - "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true, - "optional": true - } - } - }, "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "optional": true - }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -5279,12 +4331,21 @@ "dev": true }, "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "ci-info": "^3.2.0" + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" } }, "is-fullwidth-code-point": { @@ -5293,19 +4354,19 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", "dev": true, "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" } }, "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", "dev": true }, "is-obj": { @@ -5349,39 +4410,14 @@ "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "jake": { - "version": "10.8.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", - "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", - "dev": true, - "requires": { - "async": "0.9.x", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - } - } - }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "json-buffer": { @@ -5442,6 +4478,15 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, "lockfile": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", @@ -5500,15 +4545,6 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -5545,11 +4581,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, "noms": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", @@ -5586,6 +4617,32 @@ } } }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", @@ -5618,17 +4675,36 @@ "wrappy": "1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -5651,10 +4727,10 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "pend": { @@ -5670,24 +4746,6 @@ "dev": true, "optional": true }, - "plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", - "dev": true, - "requires": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" - }, - "dependencies": { - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - } - } - }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -5756,15 +4814,15 @@ } }, "read-config-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", - "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", + "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", "dev": true, "requires": { - "dotenv": "^9.0.2", + "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", + "js-yaml": "^3.13.1", + "json5": "^2.1.2", "lazy-val": "^1.0.4" } }, @@ -5807,6 +4865,23 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -5898,19 +4973,10 @@ "type-fest": "^0.13.1" } }, - "shebang-command": { + "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "signal-exit": { @@ -5928,13 +4994,6 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "optional": true - }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -5967,6 +5026,38 @@ "source-map": "^0.6.0" } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -6031,6 +5122,12 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -6042,9 +5139,9 @@ }, "dependencies": { "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -6070,6 +5167,12 @@ } } }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -6080,35 +5183,6 @@ "xtend": "~4.0.1" } }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dev": true, - "requires": { - "tmp": "^0.2.0" - } - }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -6190,51 +5264,24 @@ } }, "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", "dev": true, "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", + "boxen": "^4.2.0", + "chalk": "^3.0.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "uri-js": { @@ -6272,35 +5319,21 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, - "verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "optional": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true - } + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "widest-line": { "version": "3.1.0", @@ -6337,27 +5370,12 @@ "signal-exit": "^3.0.2" } }, - "x11": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/x11/-/x11-2.3.0.tgz", - "integrity": "sha1-vazO3M2sJIL9Vg8FEee/K9nh2/I=", - "requires": { - "os-homedir": "^1.0.1" - } - }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, - "xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "optional": true - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index bd2bbf8..16914f7 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@types/node": "^17.0.24", "copyfiles": "^2.4.1", "electron": "^18.0.4", - "electron-builder": "^23.0.3", + "electron-builder": "^22.5.1", "husky": "^7.0.4", "prettier": "^2.5.1", "typescript": "^4.5.4" @@ -35,7 +35,6 @@ "electron-context-menu": "^3.1.2", "electron-json-storage": "^4.5.0", "electron-tabs": "^0.17.0", - "glasstron": "^0.1.1", "v8-compile-cache": "^2.3.0" }, "build": { @@ -55,4 +54,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/settings/settings.css b/src/content/css/settings.css similarity index 100% rename from src/settings/settings.css rename to src/content/css/settings.css diff --git a/src/content/css/setup.css b/src/content/css/setup.css index d848205..abc270f 100644 --- a/src/content/css/setup.css +++ b/src/content/css/setup.css @@ -1,5 +1,5 @@ /*CSS ONLY FOR INTERNAL USE (setup and loading)*/ -@import url("https://kckarnige.github.io/femboi_owo/discord-font.css"); +@import url("https://armcord.smartfridge.space/logofont.css"); :root { background-color: #2c2f33 !important; diff --git a/src/content/css/tabs.css b/src/content/css/tabs.css index fe88f80..353c38b 100644 --- a/src/content/css/tabs.css +++ b/src/content/css/tabs.css @@ -1,4 +1,4 @@ -@import url("https://kckarnige.github.io/femboi_owo/discord-font.css"); +@import url("https://armcord.smartfridge.space/logofont.css"); :root { --window-buttons: var(--header-secondary); --cord-color: var(--header-primary); diff --git a/src/content/splash.html b/src/content/splash.html index 5d6f18c..118d8d9 100644 --- a/src/content/splash.html +++ b/src/content/splash.html @@ -22,7 +22,7 @@ text.innerHTML = "You appear to be offline. Please connect to the internet and try again."; } else { text.innerHTML = "Starting ArmCord..."; - fetch("https://armcord.smartfridge.space/latest.json") + fetch("https://armcord.xyz/latest.json") .then((response) => response.json()) .then((data) => { if (data.version !== window.armcord.version) { diff --git a/src/main.ts b/src/main.ts index 3970428..95a175a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,5 @@ // Modules to control application life and create native browser window -import {app, BrowserWindow, session} from "electron"; +import {app, BrowserWindow, session, dialog} from "electron"; import * as path from "path"; import "v8-compile-cache"; import * as storage from "electron-json-storage"; @@ -7,7 +7,7 @@ import {getConfigUnsafe, setup} from "./utils"; import "./extensions/mods"; import "./extensions/plugin"; import "./tray"; -import {mainWindow, createCustomWindow, createNativeWindow, createGlasstronWindow, createTabsHost} from "./window"; +import {mainWindow, createCustomWindow, createNativeWindow, createTabsHost} from "./window"; import "./shortcuts"; export var contentPath: string; var channel: string; @@ -55,15 +55,8 @@ app.whenReady().then(async () => { createNativeWindow(); break; case "glasstron": - setTimeout( - createGlasstronWindow, - process.platform == "linux" ? 1000 : 0 - // Electron has a bug on linux where it - // won't initialize properly when using - // transparency. To work around that, it - // is necessary to delay the window - // spawn function. - ); + dialog.showErrorBox("Glasstron is unsupported.", "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)") + app.quit() break; case "tabs": createTabsHost(); @@ -94,7 +87,8 @@ app.whenReady().then(async () => { createNativeWindow(); break; case "glasstron": - createGlasstronWindow(); + dialog.showErrorBox("Glasstron is unsupported.", "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)") + app.quit() break; default: createCustomWindow(); diff --git a/src/settings/main.ts b/src/settings/main.ts index c8e8f74..4a431cc 100644 --- a/src/settings/main.ts +++ b/src/settings/main.ts @@ -1,18 +1,17 @@ -import {BrowserWindow, shell, ipcMain} from "electron"; -import * as storage from "electron-json-storage"; +import {BrowserWindow, shell, ipcMain, app} from "electron"; import {getConfigUnsafe, saveSettings, Settings} from "../utils"; import path from "path"; -var settings: any; -var isAlreadyCreated: boolean = false; -storage.get("settings", function (error, data: any) { - if (error) throw error; - console.log(data); - settings = data; -}); var settingsWindow: BrowserWindow; +var instance: number = 0; + export function createSettingsWindow() { - if (isAlreadyCreated) { - settingsWindow.show(); + console.log("Creating a settings window."); + instance = instance + 1; + if (instance > 1) { + if (settingsWindow) { + settingsWindow.show(); + settingsWindow.restore(); + } } else { settingsWindow = new BrowserWindow({ width: 500, @@ -37,10 +36,10 @@ export function createSettingsWindow() { return {action: "deny"}; }); settingsWindow.loadURL(`file://${__dirname}/settings.html`); - settingsWindow.on("close", async (e) => { - e.preventDefault(); - settingsWindow.hide(); + settingsWindow.on("close", (event: Event) => { + ipcMain.removeHandler("getSetting"); + ipcMain.removeAllListeners("saveSettings"); + instance = 0; }); - isAlreadyCreated = true; } } diff --git a/src/settings/settings.html b/src/settings/settings.html index f0864a4..2b8151f 100644 --- a/src/settings/settings.html +++ b/src/settings/settings.html @@ -4,7 +4,7 @@ ArmCord Settings @@ -13,8 +13,6 @@

ArmCord theme:

@@ -53,15 +51,7 @@

Client mod:

-
- -

Glasstron blur type:

-
+ @@ -73,20 +63,19 @@ document.getElementById("mod").value = await settings.get("mods"); document.getElementById("channel").value = await settings.get("channel"); document.getElementById("theme").value = await settings.get("windowStyle"); - document.getElementById("blurType").value = await settings.get("blurType"); } loadSettings(); document.getElementById("save").addEventListener("click", function () { //function saveSettings(windowStyle: string, channelSetting: string, armcordCSPSetting: boolean, minimizeToTray: boolean, automaticPatches: boolean,modsSetting: string, blurType: string) - settings.save( - document.getElementById("theme").value, - document.getElementById("channel").value, - document.getElementById("csp").checked, - document.getElementById("tray").checked, - document.getElementById("patches").checked, - document.getElementById("mod").value, - document.getElementById("blurType").value - ); + settings.save({ + windowStyle: document.getElementById("theme").value, + channel: document.getElementById("channel").value, + armcordCSP: document.getElementById("csp").checked, + minimizeToTray: document.getElementById("tray").checked, + automaticPatches: document.getElementById("patches").checked, + mods: document.getElementById("mod").value, + blurType: "acrylic" + }); }); diff --git a/src/types/glasstron.d.ts b/src/types/glasstron.d.ts deleted file mode 100644 index 84bda43..0000000 --- a/src/types/glasstron.d.ts +++ /dev/null @@ -1,70 +0,0 @@ -declare module "glasstron" { - export class BrowserWindow extends Electron.BrowserWindow { - getBlur(): Promise; - setBlur(value: boolean): Promise; - blurType: WindowsBlurType; - setVibrancy(vibrancy: MacOSVibrancy): void; - } - /** - * @deprecated - */ - export function init(): void; - /** - * @deprecated - */ - export function update( - window: Electron.BrowserWindow, - values: { - windows?: { - blurType: WindowsBlurType; - }; - macos?: { - vibrancy: MacOSVibrancy; - }; - linux?: { - requestBlur: boolean; - }; - } - ): void; - export class Hacks { - static injectOnElectron(): void; - static delayReadyEvent(): void; - } - export type WindowsBlurType = "acrylic" | "blurbehind" | "transparent" | "none"; - export type MacOSVibrancy = - | ( - | "appearance-based" - | "light" - | "dark" - | "titlebar" - | "selection" - | "menu" - | "popover" - | "sidebar" - | "medium-light" - | "ultra-dark" - | "header" - | "sheet" - | "window" - | "hud" - | "fullscreen-ui" - | "tooltip" - | "content" - | "under-window" - | "under-page" - ) - | null; -} - -declare module "glasstron/src/utils" { - class Utils { - static getSavePath(): string; - static copyToPath(innerFile: string, outerFilename?: string, flags?: number): void; - static removeFromPath(filename: string): void; - static isInPath(filename: string): boolean; - static getPlatform(): any; - static parseKeyValString(string: string, keyvalSeparator?: string, pairSeparator?: string): any; - static makeKeyValString(object: any, keyvalSeparator?: string, pairSeparator?: string): string; - } - export = Utils; -} diff --git a/src/utils.ts b/src/utils.ts index 993fab8..5c9fc19 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,6 +1,6 @@ import * as storage from "electron-json-storage"; import * as fs from "fs"; -import {app} from "electron"; +import {app, dialog} from "electron"; import path from "path"; export var firstRun: boolean; @@ -21,12 +21,16 @@ export async function sleep(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } -export async function checkIfConfigIsNew() { - if ((await getConfigUnsafe("automaticPatches")) == undefined) { - firstRun = true; +export async function checkIfConfigIsBroken() { + if ((await getConfigUnsafe("0")) == "d") { + console.log("Detected a corrupted config"); + setup(); + dialog.showErrorBox( + "Oops, something went wrong.", + "ArmCord has detected that your configuration file is corrupted, please restart the app and set your settings again. If this issue persists, report it on the support server/Github issues." + ); } } - export interface Settings { windowStyle: string; channel: string; diff --git a/src/window.ts b/src/window.ts index 1a04a59..2026ce9 100644 --- a/src/window.ts +++ b/src/window.ts @@ -2,14 +2,13 @@ // I had to add most of the window creation code here to split both into seperete functions // WHY? Because I can't use the same code for both due to annoying bug with value `frame` not responding to variables // I'm sorry for this mess but I'm not sure how to fix it. -import {BrowserWindow, shell, app, ipcMain} from "electron"; +import {BrowserWindow, shell, app, ipcMain, dialog} from "electron"; import path from "path"; import {contentPath} from "./main"; import {checkIfConfigIsNew, firstRun, getConfigUnsafe} from "./utils"; import {registerIpc} from "./ipc"; import contextMenu from "electron-context-menu"; export let mainWindow: BrowserWindow; -import * as glasstron from "glasstron"; let guestWindows: BrowserWindow[] = []; contextMenu({ @@ -37,7 +36,6 @@ function doAfterDefiningTheWindow() { mainWindow.hide(); } else if (!(await getConfigUnsafe("minimizeToTray"))) { e.preventDefault(); - app.exit(); app.quit(); } }); @@ -96,28 +94,12 @@ export function createNativeWindow() { }); doAfterDefiningTheWindow(); } -export function createGlasstronWindow() { - mainWindow = new glasstron.BrowserWindow({ - width: 300, - height: 350, - title: "ArmCord", - darkTheme: true, - icon: path.join(__dirname, "/assets/icon_transparent.png"), - frame: true, - autoHideMenuBar: true, - webPreferences: { - preload: path.join(__dirname, "preload/preload.js"), - spellcheck: true - } - }); - //@ts-expect-error - mainWindow.blurType = getConfigUnsafe("blurType"); - //@ts-expect-error - mainWindow.setBlur(true); - doAfterDefiningTheWindow(); -} export function createTabsHost() { + dialog.showErrorBox( + "READ THIS BEFORE USING THE APP", + "ArmCord Tabs are highly experimental and should be only used for strict testing purposes. Please don't ask for support, however you can still report bugs!" + ); guestWindows[1] = mainWindow; mainWindow = new BrowserWindow({ width: 300, From 40239159ed299b953964f0c2979f7fb427fa117f Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Mon, 18 Apr 2022 12:06:17 +0200 Subject: [PATCH 02/50] Fix corrupted config checker --- src/window.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window.ts b/src/window.ts index 2026ce9..53e9682 100644 --- a/src/window.ts +++ b/src/window.ts @@ -5,7 +5,7 @@ import {BrowserWindow, shell, app, ipcMain, dialog} from "electron"; import path from "path"; import {contentPath} from "./main"; -import {checkIfConfigIsNew, firstRun, getConfigUnsafe} from "./utils"; +import {checkIfConfigIsBroken, firstRun, getConfigUnsafe} from "./utils"; import {registerIpc} from "./ipc"; import contextMenu from "electron-context-menu"; export let mainWindow: BrowserWindow; @@ -18,7 +18,7 @@ contextMenu({ }); function doAfterDefiningTheWindow() { - checkIfConfigIsNew(); + checkIfConfigIsBroken(); registerIpc(); mainWindow.webContents.userAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"; //fake useragent for screenshare to work From a39fe281f6bf32e6b5d369eadb37e91e093b4b62 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Mon, 18 Apr 2022 12:20:38 +0200 Subject: [PATCH 03/50] Add ArmCord storage manager --- src/utils.ts | 85 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 24 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index 5c9fc19..9054775 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,3 @@ -import * as storage from "electron-json-storage"; import * as fs from "fs"; import {app, dialog} from "electron"; import path from "path"; @@ -31,15 +30,7 @@ export async function checkIfConfigIsBroken() { ); } } -export interface Settings { - windowStyle: string; - channel: string; - armcordCSP: boolean; - minimizeToTray: boolean; - automaticPatches: boolean; - mods: string; - blurType: string; -} + export function setup() { console.log("Setting up temporary ArmCord settings."); const defaults: Settings = { @@ -49,33 +40,26 @@ export function setup() { minimizeToTray: true, automaticPatches: false, mods: "cumcord", - blurType: "acrylic" + blurType: "acrylic", + doneSetup: false }; - storage.set( - "settings", + setConfigBulk( { ...defaults, - doneSetup: false }, - function (error) { - if (error) throw error; - } + ); } - +//LEGACY WRAPPER export function saveSettings(settings: Settings) { console.log("Setting up ArmCord settings."); - storage.set( - "settings", + setConfigBulk( { ...settings, - doneSetup: true }, - function (error) { - if (error) throw error; - } ); } +//LEGACY export async function getConfigUnsafe(object: string) { try { const userDataPath = app.getPath("userData"); @@ -103,3 +87,56 @@ export async function injectJS(inject: string) { document.body.appendChild(el); } + +//ArmCord Settings/Storage manager +export interface Settings { + windowStyle: string; + channel: string; + armcordCSP: boolean; + minimizeToTray: boolean; + automaticPatches: boolean; + mods: string; + blurType: string; + doneSetup: boolean; +} +export async function getConfig(object: string) { + try { + const userDataPath = app.getPath("userData"); + const storagePath = path.join(userDataPath, "/storage/"); + let rawdata = fs.readFileSync(storagePath + "settings.json", "utf-8"); + let returndata = JSON.parse(rawdata); + console.log(returndata[object]); + return returndata[object]; + } catch (e) { + console.log("Config probably doesn't exist yet. Returning setup value."); + firstRun = true; + return "setup"; + } +} +export async function setConfig(object: string, toSet: any) { + try { + const userDataPath = app.getPath("userData"); + const storagePath = path.join(userDataPath, "/storage/"); + let rawdata = fs.readFileSync(storagePath + "settings.json", "utf-8"); + let parsed = JSON.parse(rawdata); + parsed[object] = toSet; + let toSave = JSON.stringify(parsed) + fs.writeFileSync(storagePath + "settings.json", toSave, "utf-8") + } catch (e) { + console.log("Config probably doesn't exist yet. Returning setup value."); + firstRun = true; + return "setup"; + } +} +export async function setConfigBulk(object: Settings) { + try { + const userDataPath = app.getPath("userData"); + const storagePath = path.join(userDataPath, "/storage/"); + let toSave = JSON.stringify(object) + fs.writeFileSync(storagePath + "settings.json", toSave, "utf-8") + } catch (e) { + console.log("Config probably doesn't exist yet. Returning setup value."); + firstRun = true; + return "setup"; + } +} \ No newline at end of file From 9d2a1190cf8514b59302cce8b72406546b2d8866 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Mon, 18 Apr 2022 12:25:10 +0200 Subject: [PATCH 04/50] Remove legacy config helper functions --- src/ipc.ts | 4 ++-- src/main.ts | 8 ++++---- src/settings/main.ts | 6 +++--- src/utils.ts | 28 +++------------------------- src/window.ts | 6 +++--- 5 files changed, 15 insertions(+), 37 deletions(-) diff --git a/src/ipc.ts b/src/ipc.ts index f5cbcc2..16f4816 100644 --- a/src/ipc.ts +++ b/src/ipc.ts @@ -1,7 +1,7 @@ //ipc stuff import {app, ipcMain, shell, desktopCapturer} from "electron"; import {createTabsGuest, mainWindow} from "./window"; -import {saveSettings, getVersion} from "./utils"; +import {setConfigBulk, getVersion} from "./utils"; import {settings, customTitlebar, tabs} from "./main"; import {createSettingsWindow} from "./settings/main"; export function registerIpc() { @@ -46,7 +46,7 @@ export function registerIpc() { app.exit(); }); ipcMain.on("saveSettings", (event, args) => { - saveSettings(args); + setConfigBulk(args); }); ipcMain.on("minimizeToTray", (event) => { console.log(settings.minimizeToTray); diff --git a/src/main.ts b/src/main.ts index 95a175a..2d491ed 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,7 @@ import {app, BrowserWindow, session, dialog} from "electron"; import * as path from "path"; import "v8-compile-cache"; import * as storage from "electron-json-storage"; -import {getConfigUnsafe, setup} from "./utils"; +import {getConfig, setup} from "./utils"; import "./extensions/mods"; import "./extensions/plugin"; import "./tray"; @@ -15,7 +15,7 @@ export var settings: any; export var customTitlebar: boolean; export var tabs: boolean; async function appendSwitch() { - if ((await getConfigUnsafe("windowStyle")) == "glasstron") { + if ((await getConfig("windowStyle")) == "glasstron") { console.log("Enabling transparency visuals."); app.commandLine.appendSwitch("enable-transparent-visuals"); } @@ -46,7 +46,7 @@ storage.get("settings", function (error, data: any) { settings = data; }); app.whenReady().then(async () => { - switch (await getConfigUnsafe("windowStyle")) { + switch (await getConfig("windowStyle")) { case "default": createCustomWindow(); customTitlebar = true; @@ -79,7 +79,7 @@ app.whenReady().then(async () => { }); app.on("activate", async function () { if (BrowserWindow.getAllWindows().length === 0) - switch (await getConfigUnsafe("windowStyle")) { + switch (await getConfig("windowStyle")) { case "default": createCustomWindow(); break; diff --git a/src/settings/main.ts b/src/settings/main.ts index 4a431cc..2e3e130 100644 --- a/src/settings/main.ts +++ b/src/settings/main.ts @@ -1,5 +1,5 @@ import {BrowserWindow, shell, ipcMain, app} from "electron"; -import {getConfigUnsafe, saveSettings, Settings} from "../utils"; +import {getConfig, setConfigBulk, Settings} from "../utils"; import path from "path"; var settingsWindow: BrowserWindow; var instance: number = 0; @@ -26,10 +26,10 @@ export function createSettingsWindow() { }); ipcMain.on("saveSettings", (event, args: Settings) => { console.log(args); - saveSettings(args); + setConfigBulk(args); }); ipcMain.handle("getSetting", (event, toGet: string) => { - return getConfigUnsafe(toGet); + return getConfig(toGet); }); settingsWindow.webContents.setWindowOpenHandler(({url}) => { shell.openExternal(url); diff --git a/src/utils.ts b/src/utils.ts index 9054775..82f7716 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -21,7 +21,7 @@ export async function sleep(ms: number) { } export async function checkIfConfigIsBroken() { - if ((await getConfigUnsafe("0")) == "d") { + if ((await getConfig("0")) == "d") { console.log("Detected a corrupted config"); setup(); dialog.showErrorBox( @@ -50,30 +50,8 @@ export function setup() { ); } -//LEGACY WRAPPER -export function saveSettings(settings: Settings) { - console.log("Setting up ArmCord settings."); - setConfigBulk( - { - ...settings, - }, - ); -} -//LEGACY -export async function getConfigUnsafe(object: string) { - try { - const userDataPath = app.getPath("userData"); - const storagePath = path.join(userDataPath, "/storage/"); - let rawdata = fs.readFileSync(storagePath + "settings.json", "utf-8"); - let returndata = JSON.parse(rawdata); - console.log(returndata[object]); - return returndata[object]; - } catch (e) { - console.log("Config probably doesn't exist yet. Returning setup value."); - firstRun = true; - return "setup"; - } -} + + export function getVersion() { //to-do better way of doing this return "3.1.0"; diff --git a/src/window.ts b/src/window.ts index 53e9682..012f824 100644 --- a/src/window.ts +++ b/src/window.ts @@ -5,7 +5,7 @@ import {BrowserWindow, shell, app, ipcMain, dialog} from "electron"; import path from "path"; import {contentPath} from "./main"; -import {checkIfConfigIsBroken, firstRun, getConfigUnsafe} from "./utils"; +import {checkIfConfigIsBroken, firstRun, getConfig} from "./utils"; import {registerIpc} from "./ipc"; import contextMenu from "electron-context-menu"; export let mainWindow: BrowserWindow; @@ -31,10 +31,10 @@ function doAfterDefiningTheWindow() { return callback({}); }); mainWindow.on("close", async (e) => { - if (await getConfigUnsafe("minimizeToTray")) { + if (await getConfig("minimizeToTray")) { e.preventDefault(); mainWindow.hide(); - } else if (!(await getConfigUnsafe("minimizeToTray"))) { + } else if (!(await getConfig("minimizeToTray"))) { e.preventDefault(); app.quit(); } From bac604a7cc4a8a52cc7338644e245d68afc7c110 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Mon, 18 Apr 2022 13:03:26 +0200 Subject: [PATCH 05/50] Get rid of electron-json-storage and switch to our own solution --- package-lock.json | 193 ++++++++++++----------------------------- package.json | 1 - src/extensions/mods.ts | 8 +- src/ipc.ts | 25 +++--- src/main.ts | 59 ++++--------- src/settings/main.ts | 2 +- src/utils.ts | 49 +++++++---- src/window.ts | 3 +- 8 files changed, 125 insertions(+), 215 deletions(-) diff --git a/package-lock.json b/package-lock.json index f7376f9..3e32787 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "license": "OSL-3.0", "dependencies": { "electron-context-menu": "^3.1.2", - "electron-json-storage": "^4.5.0", "electron-tabs": "^0.17.0", "v8-compile-cache": "^2.3.0" }, @@ -312,14 +311,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", @@ -341,7 +332,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bluebird": { "version": "3.7.2", @@ -400,6 +392,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -633,7 +626,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -1073,30 +1067,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-json-storage": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.5.0.tgz", - "integrity": "sha512-ML6Um4tZbJv938EbxvMJwzLA+v/wfWwEP+AXNum1zQF9RUFJ/SrRtIjGm9eFTFxURxn81r3ggdovuQikyF/m0Q==", - "dependencies": { - "async": "^2.0.0", - "lockfile": "^1.0.4", - "lodash": "^4.0.1", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.1", - "write-file-atomic": "^2.4.2" - } - }, - "node_modules/electron-json-storage/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/electron-publish": { "version": "22.5.1", "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.5.1.tgz", @@ -1359,7 +1329,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/function-bind": { "version": "1.1.1", @@ -1392,6 +1363,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1519,7 +1491,8 @@ "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "node_modules/has": { "version": "1.0.3", @@ -1609,6 +1582,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -1617,6 +1591,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1625,7 +1600,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -1838,18 +1814,12 @@ "node": ">=8" } }, - "node_modules/lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "dependencies": { - "signal-exit": "^3.0.2" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "optional": true }, "node_modules/lowercase-keys": { "version": "1.0.1", @@ -1933,6 +1903,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1943,7 +1914,8 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/mkdirp": { "version": "1.0.4", @@ -2069,6 +2041,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -2145,6 +2118,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -2358,17 +2332,6 @@ "lowercase-keys": "^1.0.0" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -2467,7 +2430,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/slice-ansi": { "version": "3.0.0", @@ -2940,17 +2904,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/xdg-basedir": { "version": "4.0.0", @@ -3261,14 +3216,6 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, "async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", @@ -3284,7 +3231,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "bluebird": { "version": "3.7.2", @@ -3336,6 +3284,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3526,7 +3475,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -3889,29 +3839,6 @@ "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==" }, - "electron-json-storage": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.5.0.tgz", - "integrity": "sha512-ML6Um4tZbJv938EbxvMJwzLA+v/wfWwEP+AXNum1zQF9RUFJ/SrRtIjGm9eFTFxURxn81r3ggdovuQikyF/m0Q==", - "requires": { - "async": "^2.0.0", - "lockfile": "^1.0.4", - "lodash": "^4.0.1", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.1", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - } - } - }, "electron-publish": { "version": "22.5.1", "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.5.1.tgz", @@ -4121,7 +4048,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "function-bind": { "version": "1.1.1", @@ -4148,6 +4076,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4246,7 +4175,8 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "has": { "version": "1.0.3", @@ -4308,12 +4238,14 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4322,7 +4254,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -4487,18 +4420,12 @@ "p-locate": "^4.1.0" } }, - "lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "requires": { - "signal-exit": "^3.0.2" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "optional": true }, "lowercase-keys": { "version": "1.0.1", @@ -4555,6 +4482,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4562,7 +4490,8 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "mkdirp": { "version": "1.0.4", @@ -4671,6 +4600,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -4725,7 +4655,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-parse": { "version": "1.0.7", @@ -4891,14 +4822,6 @@ "lowercase-keys": "^1.0.0" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, "roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -4982,7 +4905,8 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "slice-ansi": { "version": "3.0.0", @@ -5358,17 +5282,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "xdg-basedir": { "version": "4.0.0", diff --git a/package.json b/package.json index 16914f7..1ca810a 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ }, "dependencies": { "electron-context-menu": "^3.1.2", - "electron-json-storage": "^4.5.0", "electron-tabs": "^0.17.0", "v8-compile-cache": "^2.3.0" }, diff --git a/src/extensions/mods.ts b/src/extensions/mods.ts index 4872cfb..9626e4c 100644 --- a/src/extensions/mods.ts +++ b/src/extensions/mods.ts @@ -9,7 +9,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import electron from "electron"; -import * as storage from "electron-json-storage"; +import {getConfig} from "../utils"; const otherMods = { generic: { electronProxy: require("util").types.isProxy(electron) // Many modern mods overwrite electron with a proxy with a custom BrowserWindow (copied from PowerCord) @@ -55,9 +55,9 @@ const unstrictCSP = () => { done({responseHeaders}); }); }; -storage.get("settings", function (error, data: any) { - if (error) throw error; - if (data.armcordCSP) { + +electron.app.whenReady().then(async () => { + if (await getConfig("armcordCSP")) { unstrictCSP(); } else { console.log("ArmCord CSP is disabled. The CSP should be managed by third-party plugin."); diff --git a/src/ipc.ts b/src/ipc.ts index 16f4816..c3e799d 100644 --- a/src/ipc.ts +++ b/src/ipc.ts @@ -1,8 +1,8 @@ //ipc stuff import {app, ipcMain, shell, desktopCapturer} from "electron"; import {createTabsGuest, mainWindow} from "./window"; -import {setConfigBulk, getVersion} from "./utils"; -import {settings, customTitlebar, tabs} from "./main"; +import {setConfigBulk, getVersion, getConfig} from "./utils"; +import {customTitlebar, tabs} from "./main"; import {createSettingsWindow} from "./settings/main"; export function registerIpc() { ipcMain.on("get-app-path", (event, arg) => { @@ -48,15 +48,14 @@ export function registerIpc() { ipcMain.on("saveSettings", (event, args) => { setConfigBulk(args); }); - ipcMain.on("minimizeToTray", (event) => { - console.log(settings.minimizeToTray); - event.returnValue = settings.minimizeToTray; + ipcMain.on("minimizeToTray", async (event) => { + event.returnValue = await getConfig("minimizeToTray"); }); - ipcMain.on("channel", (event) => { - event.returnValue = settings.channel; + ipcMain.on("channel", async (event) => { + event.returnValue = await getConfig("channel"); }); - ipcMain.on("clientmod", (event, arg) => { - event.returnValue = settings.mods; + ipcMain.on("clientmod", async (event, arg) => { + event.returnValue = await getConfig("mods"); }); ipcMain.on("titlebar", (event, arg) => { event.returnValue = customTitlebar; @@ -64,14 +63,14 @@ export function registerIpc() { ipcMain.on("tabs", (event, arg) => { event.returnValue = tabs; }); - ipcMain.on("shouldPatch", (event, arg) => { - event.returnValue = settings.automaticPatches; + ipcMain.on("shouldPatch", async (event, arg) => { + event.returnValue = await getConfig("automaticPatches"); }); ipcMain.on("openSettingsWindow", (event, arg) => { createSettingsWindow(); }); - ipcMain.on("setting-armcordCSP", (event) => { - if (settings.armcordCSP) { + ipcMain.on("setting-armcordCSP", async (event) => { + if (await getConfig("armcordCSP")) { event.returnValue = true; } else { event.returnValue = false; diff --git a/src/main.ts b/src/main.ts index 2d491ed..6da73c1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,50 +1,19 @@ // Modules to control application life and create native browser window import {app, BrowserWindow, session, dialog} from "electron"; -import * as path from "path"; import "v8-compile-cache"; -import * as storage from "electron-json-storage"; -import {getConfig, setup} from "./utils"; +import {getConfig, setup, checkIfConfigExists} from "./utils"; import "./extensions/mods"; import "./extensions/plugin"; import "./tray"; -import {mainWindow, createCustomWindow, createNativeWindow, createTabsHost} from "./window"; +import {createCustomWindow, createNativeWindow, createTabsHost} from "./window"; import "./shortcuts"; -export var contentPath: string; -var channel: string; + export var settings: any; export var customTitlebar: boolean; export var tabs: boolean; -async function appendSwitch() { - if ((await getConfig("windowStyle")) == "glasstron") { - console.log("Enabling transparency visuals."); - app.commandLine.appendSwitch("enable-transparent-visuals"); - } -} -appendSwitch(); -storage.has("settings", function (error, hasKey) { - if (error) throw error; - if (!hasKey) { - console.log("First run of the ArmCord. Starting setup."); - setup(); - contentPath = path.join(__dirname, "/content/setup.html"); - if (!contentPath.includes("ts-out")) { - contentPath = path.join(__dirname, "/ts-out/content/setup.html"); - } - } else { - console.log("ArmCord has been run before. Skipping setup."); - contentPath = path.join(__dirname, "/content/splash.html"); - if (!contentPath.includes("ts-out")) { - contentPath = path.join(__dirname, "/ts-out/content/splash.html"); - } - } -}); -storage.get("settings", function (error, data: any) { - if (error) throw error; - console.log(data); - channel = data.channel; - settings = data; -}); +checkIfConfigExists(); + app.whenReady().then(async () => { switch (await getConfig("windowStyle")) { case "default": @@ -55,8 +24,11 @@ app.whenReady().then(async () => { createNativeWindow(); break; case "glasstron": - dialog.showErrorBox("Glasstron is unsupported.", "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)") - app.quit() + dialog.showErrorBox( + "Glasstron is unsupported.", + "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)" + ); + app.quit(); break; case "tabs": createTabsHost(); @@ -87,8 +59,15 @@ app.whenReady().then(async () => { createNativeWindow(); break; case "glasstron": - dialog.showErrorBox("Glasstron is unsupported.", "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)") - app.quit() + dialog.showErrorBox( + "Glasstron is unsupported.", + "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)" + ); + app.quit(); + break; + case "tabs": + createTabsHost(); + tabs = true; break; default: createCustomWindow(); diff --git a/src/settings/main.ts b/src/settings/main.ts index 2e3e130..77c7e02 100644 --- a/src/settings/main.ts +++ b/src/settings/main.ts @@ -1,4 +1,4 @@ -import {BrowserWindow, shell, ipcMain, app} from "electron"; +import {BrowserWindow, shell, ipcMain} from "electron"; import {getConfig, setConfigBulk, Settings} from "../utils"; import path from "path"; var settingsWindow: BrowserWindow; diff --git a/src/utils.ts b/src/utils.ts index 82f7716..7e48a87 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -2,7 +2,7 @@ import * as fs from "fs"; import {app, dialog} from "electron"; import path from "path"; export var firstRun: boolean; - +export var contentPath: string; //utillity functions that are used all over the codebase or just too obscure to be put in the file used in export function addStyle(styleString: string) { const style = document.createElement("style"); @@ -43,15 +43,11 @@ export function setup() { blurType: "acrylic", doneSetup: false }; - setConfigBulk( - { - ...defaults, - }, - - ); + setConfigBulk({ + ...defaults + }); } - export function getVersion() { //to-do better way of doing this return "3.1.0"; @@ -67,6 +63,7 @@ export async function injectJS(inject: string) { } //ArmCord Settings/Storage manager + export interface Settings { windowStyle: string; channel: string; @@ -81,7 +78,8 @@ export async function getConfig(object: string) { try { const userDataPath = app.getPath("userData"); const storagePath = path.join(userDataPath, "/storage/"); - let rawdata = fs.readFileSync(storagePath + "settings.json", "utf-8"); + const settingsFile = storagePath + "settings.json"; + let rawdata = fs.readFileSync(settingsFile, "utf-8"); let returndata = JSON.parse(rawdata); console.log(returndata[object]); return returndata[object]; @@ -95,11 +93,12 @@ export async function setConfig(object: string, toSet: any) { try { const userDataPath = app.getPath("userData"); const storagePath = path.join(userDataPath, "/storage/"); - let rawdata = fs.readFileSync(storagePath + "settings.json", "utf-8"); + const settingsFile = storagePath + "settings.json"; + let rawdata = fs.readFileSync(settingsFile, "utf-8"); let parsed = JSON.parse(rawdata); parsed[object] = toSet; - let toSave = JSON.stringify(parsed) - fs.writeFileSync(storagePath + "settings.json", toSave, "utf-8") + let toSave = JSON.stringify(parsed); + fs.writeFileSync(settingsFile, toSave, "utf-8"); } catch (e) { console.log("Config probably doesn't exist yet. Returning setup value."); firstRun = true; @@ -110,11 +109,31 @@ export async function setConfigBulk(object: Settings) { try { const userDataPath = app.getPath("userData"); const storagePath = path.join(userDataPath, "/storage/"); - let toSave = JSON.stringify(object) - fs.writeFileSync(storagePath + "settings.json", toSave, "utf-8") + const settingsFile = storagePath + "settings.json"; + let toSave = JSON.stringify(object); + fs.writeFileSync(settingsFile, toSave, "utf-8"); } catch (e) { console.log("Config probably doesn't exist yet. Returning setup value."); firstRun = true; return "setup"; } -} \ No newline at end of file +} +export async function checkIfConfigExists() { + const userDataPath = app.getPath("userData"); + const storagePath = path.join(userDataPath, "/storage/"); + const settingsFile = storagePath + "settings.json"; + if (!fs.existsSync(settingsFile)) { + console.log("First run of the ArmCord. Starting setup."); + setup(); + contentPath = path.join(__dirname, "/content/setup.html"); + if (!contentPath.includes("ts-out")) { + contentPath = path.join(__dirname, "/ts-out/content/setup.html"); + } + } else { + console.log("ArmCord has been run before. Skipping setup."); + contentPath = path.join(__dirname, "/content/splash.html"); + if (!contentPath.includes("ts-out")) { + contentPath = path.join(__dirname, "/ts-out/content/splash.html"); + } + } +} diff --git a/src/window.ts b/src/window.ts index 012f824..bc00139 100644 --- a/src/window.ts +++ b/src/window.ts @@ -4,8 +4,7 @@ // I'm sorry for this mess but I'm not sure how to fix it. import {BrowserWindow, shell, app, ipcMain, dialog} from "electron"; import path from "path"; -import {contentPath} from "./main"; -import {checkIfConfigIsBroken, firstRun, getConfig} from "./utils"; +import {checkIfConfigIsBroken, firstRun, getConfig, contentPath} from "./utils"; import {registerIpc} from "./ipc"; import contextMenu from "electron-context-menu"; export let mainWindow: BrowserWindow; From 3d0fd7071b27aa5257470eeef68e34f1955a7864 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Tue, 19 Apr 2022 15:56:04 +0200 Subject: [PATCH 06/50] Add websocket for invitation link requests --- package-lock.json | 59 +++++++++++---- package.json | 5 +- src/socket.ts | 179 ++++++++++++++++++++++++++++++++++++++++++++++ src/window.ts | 19 ++++- 4 files changed, 247 insertions(+), 15 deletions(-) create mode 100644 src/socket.ts diff --git a/package-lock.json b/package-lock.json index 3e32787..1ffb1de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,12 +11,13 @@ "license": "OSL-3.0", "dependencies": { "electron-context-menu": "^3.1.2", - "electron-tabs": "^0.17.0", - "v8-compile-cache": "^2.3.0" + "v8-compile-cache": "^2.3.0", + "ws": "^8.5.0" }, "devDependencies": { "@types/electron-json-storage": "^4.5.0", "@types/node": "^17.0.24", + "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.0.4", "electron-builder": "^22.5.1", @@ -121,6 +122,15 @@ "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", @@ -1119,11 +1129,6 @@ "node": ">= 10.0.0" } }, - "node_modules/electron-tabs": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/electron-tabs/-/electron-tabs-0.17.0.tgz", - "integrity": "sha512-jFv6WOeumSR5q2Cf6WOghE7CTdxPB0mSuPw8dGwz1OAG8MJMQn/kd/ghmvRPwoOYK77v4d9YligqjXIQc2oPcg==" - }, "node_modules/electron/node_modules/@types/node": { "version": "16.11.26", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", @@ -2907,6 +2912,26 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -3057,6 +3082,15 @@ "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/yargs": { "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", @@ -3885,11 +3919,6 @@ } } }, - "electron-tabs": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/electron-tabs/-/electron-tabs-0.17.0.tgz", - "integrity": "sha512-jFv6WOeumSR5q2Cf6WOghE7CTdxPB0mSuPw8dGwz1OAG8MJMQn/kd/ghmvRPwoOYK77v4d9YligqjXIQc2oPcg==" - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5285,6 +5314,12 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "requires": {} + }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", diff --git a/package.json b/package.json index 1ca810a..c121ac4 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "devDependencies": { "@types/electron-json-storage": "^4.5.0", "@types/node": "^17.0.24", + "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.0.4", "electron-builder": "^22.5.1", @@ -33,8 +34,8 @@ }, "dependencies": { "electron-context-menu": "^3.1.2", - "electron-tabs": "^0.17.0", - "v8-compile-cache": "^2.3.0" + "v8-compile-cache": "^2.3.0", + "ws": "^8.5.0" }, "build": { "appId": "com.smartfridge.armcord", diff --git a/src/socket.ts b/src/socket.ts new file mode 100644 index 0000000..2e73c7c --- /dev/null +++ b/src/socket.ts @@ -0,0 +1,179 @@ +// MIT License + +// Copyright (c) 2020-2022 Dawid Papiewski "SpacingBat3" + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +import type {Server, WebSocket} from "ws"; +import {inviteWindow, createInviteWindow} from "./window"; + +async function wsLog(message: string, ...args: unknown[]) { + console.log("WebSocket" + +message, ...args); +} + +/** Generates an inclusive range (as `Array`) from `start` to `end`. */ +function range(start: number, end: number) { + return Array.from({length: end - start + 1}, (_v, k) => start + k); +} + +interface InviteResponse { + /** Response type/command. */ + cmd: "INVITE_BROWSER"; + /** Response arguments. */ + args: { + /** An invitation code. */ + code: string; + }; + /** Nonce indentifying the communication. */ + nonce: string; +} + +function isInviteResponse(data: unknown): data is InviteResponse { + if (!(data instanceof Object)) return false; + if ((data as Partial)?.cmd !== "INVITE_BROWSER") return false; + if (typeof (data as Partial)?.args?.code !== "string") return false; + if (typeof (data as Partial)?.nonce !== "string") return false; + return true; +} + +const messages = { + /** + * A fake, hard-coded Discord command to spoof the presence of + * official Discord client (which makes browser to actually start a + * communication with the ArmCord). + */ + handShake: { + /** Message command. */ + cmd: "DISPATCH", + /** Message data. */ + data: { + /** Message scheme version. */ + v: 1, + /** Client properties. */ + config: { + /** Discord CDN host (hard-coded for `dicscord.com` instance). */ + cdn_host: "cdn.discordapp.com", + /** API endpoint (hard-coded for `dicscord.com` instance). */ + api_endpoint: "//discord.com/api", + /** Client type. Can be (probably) `production` or `canary`. */ + environment: "production" + } + }, + evt: "READY", + nonce: null + } +}; + +/** + * Tries to reserve the server at given port. + * + * @returns `Promise`, which always resolves (either to `Server` on + * success or `null` on failure). + */ +async function getServer(port: number) { + const {WebSocketServer} = await import("ws"); + return new Promise | null>((resolve) => { + const wss = new WebSocketServer({host: "127.0.0.1", port}); + wss.once("listening", () => resolve(wss)); + wss.once("error", () => resolve(null)); + }); +} + +/** + * Tries to start a WebSocket server at given port range. If it suceed, it will + * listen to the browser requests which are meant to be sent to official + * Discord client. + * + * Currently it supports only the invitation link requests. + * + */ +export default async function startServer() { + function isJsonSyntaxCorrect(string: string) { + try { + JSON.parse(string); + } catch { + return false; + } + return true; + } + /** Known Discord instances, including the official ones. */ + const knownInstancesList = [ + ["Discord", new URL("https://discord.com/app")], + ["Discord Canary", new URL("https://canary.discord.com/app")], + ["Discord PTB", new URL("https://ptb.discord.com/app")], + ["Fosscord", new URL("https://dev.fosscord.com/app")] + ] as const; + + let wss = null, wsPort = 6463; + for(const port of range(6463, 6472)) { + wss = await getServer(port); + if(wss !== null) { + void wsLog("ArmCord is listening at " + (port.toString())); + wsPort = port; + break; + } + } + if(wss === null) return; + let lock = false; + wss.on('connection', (wss, request) => { + const origin = request.headers.origin??'https://discord.com'; + let known = false; + for(const instance of knownInstancesList) { + if(instance[1].origin === origin) + known = true; + } + if(!known) return; + wss.send(JSON.stringify(messages.handShake)); + wss.once('message', (data, isBinary) => { + if(lock) return; + lock = true; + let parsedData:unknown = data; + if(!isBinary) + parsedData = data.toString(); + if(isJsonSyntaxCorrect(parsedData as string)) + parsedData = JSON.parse(parsedData as string); + if(isInviteResponse(parsedData)) { + // Replies to browser, so it finds the communication successful. + wss.send(JSON.stringify({ + cmd: parsedData.cmd, + data: { + invite: null, + code: parsedData.args.code + }, + evt: null, + nonce: parsedData.nonce + })); + createInviteWindow() + const child = inviteWindow; + if(child === undefined) return; + void child.loadURL(origin+'/invite/'+parsedData.args.code); + child.webContents.once("did-finish-load", () => { + child.show(); + }); + child.webContents.once("will-navigate", () => { + lock = false; + child.close(); + }) + // Blocks requests to ArmCord's WS, to prevent loops. + child.webContents.session.webRequest.onBeforeRequest({ + urls: ['ws://127.0.0.1:'+wsPort.toString()+'/*'] + }, (_details,callback) => callback({cancel: true})); + } + }) + }) +} diff --git a/src/window.ts b/src/window.ts index bc00139..cd1c59d 100644 --- a/src/window.ts +++ b/src/window.ts @@ -6,9 +6,10 @@ import {BrowserWindow, shell, app, ipcMain, dialog} from "electron"; import path from "path"; import {checkIfConfigIsBroken, firstRun, getConfig, contentPath} from "./utils"; import {registerIpc} from "./ipc"; +import startServer from "./socket" import contextMenu from "electron-context-menu"; export let mainWindow: BrowserWindow; - +export let inviteWindow: BrowserWindow; let guestWindows: BrowserWindow[] = []; contextMenu({ showSaveImageAs: true, @@ -39,6 +40,7 @@ function doAfterDefiningTheWindow() { } }); console.log(contentPath); + startServer() try { mainWindow.loadFile(contentPath); } catch (e) { @@ -165,3 +167,18 @@ export function createTabsGuest(number: number) { guestWindows[number].loadURL("https://discord.com/app"); } } +export function createInviteWindow() { + inviteWindow = new BrowserWindow({ + width: 800, + height: 600, + title: "ArmCord Invite Manager", + darkTheme: true, + icon: path.join(__dirname, "/assets/icon_transparent.png"), + frame: true, + autoHideMenuBar: true, + webPreferences: { + spellcheck: true + } + }); + inviteWindow.hide() +} \ No newline at end of file From eda6621989ebda28d0053cdafc46adf687d24313 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Tue, 19 Apr 2022 16:02:30 +0200 Subject: [PATCH 07/50] Fix websocket logger --- src/socket.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/socket.ts b/src/socket.ts index 2e73c7c..0155947 100644 --- a/src/socket.ts +++ b/src/socket.ts @@ -23,7 +23,7 @@ import type {Server, WebSocket} from "ws"; import {inviteWindow, createInviteWindow} from "./window"; async function wsLog(message: string, ...args: unknown[]) { - console.log("WebSocket" + +message, ...args); + console.log("[WebSocket]" + message, ...args); } /** Generates an inclusive range (as `Array`) from `start` to `end`. */ From 37966b985a6f3f3033d71321e15247c8d19398bd Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Tue, 19 Apr 2022 16:10:12 +0200 Subject: [PATCH 08/50] Fix websocket not unlocking when window is closed manually --- src/socket.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/socket.ts b/src/socket.ts index 0155947..0c2e0a9 100644 --- a/src/socket.ts +++ b/src/socket.ts @@ -169,6 +169,9 @@ export default async function startServer() { lock = false; child.close(); }) + child.on("close", (e) => { + lock = false; + }) // Blocks requests to ArmCord's WS, to prevent loops. child.webContents.session.webRequest.onBeforeRequest({ urls: ['ws://127.0.0.1:'+wsPort.toString()+'/*'] From 7a7dd051634aaf8be52b21e5b83d8291c0ed7d7f Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Tue, 19 Apr 2022 19:59:52 +0200 Subject: [PATCH 09/50] Make invite websocket togglable --- src/content/setup.html | 12 +++++++++--- src/settings/settings.html | 4 +++- src/utils.ts | 2 ++ src/window.ts | 6 ++++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/content/setup.html b/src/content/setup.html index cdca768..22f3f98 100644 --- a/src/content/setup.html +++ b/src/content/setup.html @@ -46,7 +46,9 @@ minimizeToTray: true, automaticPatches: false, mods: "cumcord", - blurType: "acrylic" + blurType: "acrylic", + inviteWebsocket: true, + doneSetup: true }); fade(document.getElementById("setup")); setTimeout(function () { @@ -98,7 +100,9 @@ minimizeToTray: true, automaticPatches: false, mods: mod, - blurType: "acrylic" + blurType: "acrylic", + inviteWebsocket: true, + doneSetup: true }); fade(document.getElementById("setup")); setTimeout(function () { @@ -113,7 +117,9 @@ minimizeToTray: true, automaticPatches: false, mods: "none", - blurType: "acrylic" + blurType: "acrylic", + inviteWebsocket: true, + doneSetup: true }); fade(document.getElementById("setup")); setTimeout(function () { diff --git a/src/settings/settings.html b/src/settings/settings.html index 2b8151f..b74d94f 100644 --- a/src/settings/settings.html +++ b/src/settings/settings.html @@ -74,7 +74,9 @@ minimizeToTray: document.getElementById("tray").checked, automaticPatches: document.getElementById("patches").checked, mods: document.getElementById("mod").value, - blurType: "acrylic" + blurType: "acrylic", + inviteWebsocket: true, + doneSetup: true }); }); diff --git a/src/utils.ts b/src/utils.ts index 7e48a87..6b12f38 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -41,6 +41,7 @@ export function setup() { automaticPatches: false, mods: "cumcord", blurType: "acrylic", + inviteWebsocket: true, doneSetup: false }; setConfigBulk({ @@ -72,6 +73,7 @@ export interface Settings { automaticPatches: boolean; mods: string; blurType: string; + inviteWebsocket: boolean; doneSetup: boolean; } export async function getConfig(object: string) { diff --git a/src/window.ts b/src/window.ts index cd1c59d..c5e4b9c 100644 --- a/src/window.ts +++ b/src/window.ts @@ -17,7 +17,7 @@ contextMenu({ showSearchWithGoogle: true }); -function doAfterDefiningTheWindow() { +async function doAfterDefiningTheWindow() { checkIfConfigIsBroken(); registerIpc(); mainWindow.webContents.userAgent = @@ -40,7 +40,9 @@ function doAfterDefiningTheWindow() { } }); console.log(contentPath); - startServer() + if (await getConfig("inviteWebsocket") == true) { + startServer() + } try { mainWindow.loadFile(contentPath); } catch (e) { From be6364cdfa8b250d2f7bf5d542f5d68ada58dd2e Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Tue, 19 Apr 2022 20:13:46 +0200 Subject: [PATCH 10/50] Add dev build CI --- .github/release.md | 2 + .github/workflows/dev.yml | 135 ++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 138 insertions(+) create mode 100644 .github/release.md create mode 100644 .github/workflows/dev.yml diff --git a/.github/release.md b/.github/release.md new file mode 100644 index 0000000..639ec3e --- /dev/null +++ b/.github/release.md @@ -0,0 +1,2 @@ +# Thanks for checking out ArmCord dev build! +Make sure to join our [Discord server](https://discord.gg/uaW5vMY3V6) to share opinions, or to chat with ArmCord developers! \ No newline at end of file diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml new file mode 100644 index 0000000..4b9502f --- /dev/null +++ b/.github/workflows/dev.yml @@ -0,0 +1,135 @@ +name: Dev build +on: [push] + +env: + FORCE_COLOR: true + +jobs: + build-linux: + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install Node dependencies + run: npm install + + - name: Install Electron-Builder + run: npm install -g electron-builder + + - name: Build + run: npm run build && electron-builder --linux zip + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ArmCordLinux.zip + path: dist/ArmCord-3.1.0.zip + + build-mac: + runs-on: macos-latest + + steps: + - uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install Node dependencies + run: npm install + + - name: Install Electron-Builder + run: npm install -g electron-builder + + - name: Build + run: npm run build && electron-builder --macos zip + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ArmCordMac.zip + path: dist/ArmCord-3.1.0-mac.zip + + build-windows: + runs-on: windows-latest + + steps: + - uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install Node dependencies + run: npm install + + - name: Install Electron-Builder + run: npm install -g electron-builder + + - name: Build + run: npm run build && electron-builder --windows zip + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ArmCordWindows.zip + path: dist/ArmCord-3.1.0-win.zip + + + release: + runs-on: ubuntu-latest + needs: [build-linux, build-mac, build-windows] + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - uses: actions/download-artifact@v2 + with: + name: ArmCordMac.zip + path: macos + + - uses: actions/download-artifact@v2 + with: + name: ArmCordWindows.zip + path: windows + + - uses: actions/download-artifact@v2 + with: + name: ArmCordLinux.zip + path: linux + - run: | + ls + ls windows + ls macos + ls linux + - name: Get some values needed for the release + id: vars + shell: bash + run: | + echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: Create the release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.vars.outputs.sha_short }} + name: Dev Build ${{ steps.vars.outputs.sha_short }} + draft: false + prerelease: true + body_path: .github/release.md + files: | + linux/ArmCord-3.1.0.zip + macos/ArmCord-3.1.0-mac.zip + windows/ArmCord-3.1.0-win.zip \ No newline at end of file diff --git a/package.json b/package.json index c121ac4..4d66138 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "start": "npm run build && electron ./ts-out/main.js", "package": "npm run build && electron-builder", "format": "prettier --write src/**/*", + "CIbuild": "npm run build && electron-builder --linux zip && electron-builder --windows zip && electron-builder --macos zip", "postinstall": "husky install" }, "repository": { From 959901397797f19f8a437a3e4424bdad660efdfe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Apr 2022 22:32:43 +0200 Subject: [PATCH 11/50] Bump electron-builder from 22.5.1 to 23.0.3 (#95) Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 22.5.1 to 23.0.3. - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/commits/v23.0.3/packages/electron-builder) --- updated-dependencies: - dependency-name: electron-builder dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 2817 ++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 1863 insertions(+), 956 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ffb1de..a9967c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.0.4", - "electron-builder": "^22.5.1", + "electron-builder": "^23.0.3", "husky": "^7.0.4", "prettier": "^2.5.1", "typescript": "^4.5.4" @@ -65,6 +65,133 @@ "global-tunnel-ng": "^2.7.1" } }, + "node_modules/@electron/universal": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.0.tgz", + "integrity": "sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q==", + "dev": true, + "dependencies": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -86,6 +213,15 @@ "node": ">=6" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -102,14 +238,32 @@ "dev": true }, "node_modules/@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "optional": true + }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -122,6 +276,24 @@ "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, + "node_modules/@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/verror": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", + "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==", + "dev": true, + "optional": true + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -132,9 +304,9 @@ } }, "node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -147,11 +319,23 @@ "dev": true }, "node_modules/7zip-bin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", - "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "dev": true }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -209,57 +393,59 @@ } }, "node_modules/app-builder-bin": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.6.tgz", - "integrity": "sha512-gY9ABoV5jh67IrPEwF81R8l9LwE3RqHUyU3rIKitwqMpKhplN5OZC6WEHOXO3XhwiLCIlr9LLI6OPhr3bmtQIg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", "dev": true }, "node_modules/app-builder-lib": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.5.1.tgz", - "integrity": "sha512-VtB/PD8actR1317D/0uGzuJIYbpw4pRrfMB6IyTLwGynUd3ihqiCFjejVWHjCwopgCct2kE0MvLwo8P49xHIeQ==", + "version": "23.0.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.0.3.tgz", + "integrity": "sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w==", "dev": true, "dependencies": { "@develar/schema-utils": "~2.6.5", - "7zip-bin": "~5.0.3", + "@electron/universal": "1.2.0", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.5.1", - "builder-util-runtime": "8.7.0", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", "chromium-pickle-js": "^0.2.0", - "debug": "^4.1.1", - "ejs": "^3.0.2", - "electron-publish": "22.5.1", - "fs-extra": "^9.0.0", - "hosted-git-info": "^3.0.4", - "is-ci": "^2.0.0", - "isbinaryfile": "^4.0.5", - "js-yaml": "^3.13.1", - "lazy-val": "^1.0.4", + "debug": "^4.3.2", + "ejs": "^3.1.6", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.0.2", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "hosted-git-info": "^4.0.2", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.8", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", "minimatch": "^3.0.4", - "normalize-package-data": "^2.5.0", - "read-config-file": "6.0.0", + "read-config-file": "6.2.0", "sanitize-filename": "^1.6.3", - "semver": "^7.1.3", - "temp-file": "^3.3.7" + "semver": "^7.3.5", + "temp-file": "^3.4.0" }, "engines": { - "node": ">=8.12.0" + "node": ">=14.0.0" } }, "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/app-builder-lib/node_modules/jsonfile": { @@ -299,19 +485,41 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/asar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz", + "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + }, + "optionalDependencies": { + "@types/glob": "^7.1.1" } }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } }, "node_modules/astral-regex": { "version": "2.0.0", @@ -321,6 +529,12 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, "node_modules/async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", @@ -330,6 +544,12 @@ "node": ">=0.12.0" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -345,6 +565,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -368,34 +608,37 @@ "optional": true }, "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "dependencies": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { @@ -408,6 +651,47 @@ "concat-map": "0.0.1" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -417,6 +701,21 @@ "node": "*" } }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -424,53 +723,55 @@ "dev": true }, "node_modules/builder-util": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.5.1.tgz", - "integrity": "sha512-CelDTP3+fvDfZfbwy3PXif7mudPaWankJ8vrRg/NtCGvL+hXnwycnJZr46d5EQL7AgQcpJ27o9LTdfu61cxTFw==", + "version": "23.0.2", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.0.2.tgz", + "integrity": "sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg==", "dev": true, "dependencies": { - "@types/debug": "^4.1.5", - "@types/fs-extra": "^8.1.0", - "7zip-bin": "~5.0.3", - "app-builder-bin": "3.5.6", + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "8.7.0", - "chalk": "^3.0.0", - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "js-yaml": "^3.13.1", - "source-map-support": "^0.5.16", + "builder-util-runtime": "9.0.0", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", "stat-mode": "^1.0.0", - "temp-file": "^3.3.7" + "temp-file": "^3.4.0" } }, "node_modules/builder-util-runtime": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.0.tgz", - "integrity": "sha512-G1AqqVM2vYTrSFR982c1NNzwXKrGLQjVjaZaWQdn4O6Z3YKjdMDofw88aD9jpyK9ZXkrCxR0tI3Qe9wNbyTlXg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz", + "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==", "dev": true, "dependencies": { - "debug": "^4.1.1", + "debug": "^4.3.2", "sax": "^1.2.4" }, "engines": { - "node": ">=8.2.0" + "node": ">=12.0.0" } }, "node_modules/builder-util/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/builder-util/node_modules/jsonfile": { @@ -537,25 +838,31 @@ } }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chromium-pickle-js": { @@ -565,9 +872,9 @@ "dev": true }, "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "node_modules/cli-boxes": { @@ -633,6 +940,45 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -682,18 +1028,6 @@ "node": ">=8" } }, - "node_modules/configstore/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/copyfiles": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", @@ -719,6 +1053,30 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -745,15 +1103,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -794,6 +1143,15 @@ "node": ">= 0.4" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -801,33 +1159,74 @@ "dev": true, "optional": true }, - "node_modules/dmg-builder": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.5.1.tgz", - "integrity": "sha512-AwIiyGwgqhA8Ty/YnEU20aSzfrWZns6suOBTqddD+rLDI4jEASKGQadfvcXRSWgaK/VQW0GrhheXrhJpzZzt3g==", + "node_modules/dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", "dev": true, "dependencies": { - "app-builder-lib": "22.5.1", - "builder-util": "22.5.1", - "fs-extra": "^9.0.0", - "iconv-lite": "^0.5.1", - "js-yaml": "^3.13.1", - "sanitize-filename": "^1.6.3" + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "bin": { + "dircompare": "src/cli/dircompare.js" + } + }, + "node_modules/dir-compare/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "23.0.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.0.3.tgz", + "integrity": "sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA==", + "dev": true, + "dependencies": { + "app-builder-lib": "23.0.3", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.9" } }, "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/dmg-builder/node_modules/jsonfile": { @@ -851,6 +1250,33 @@ "node": ">= 10.0.0" } }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "deprecated": "Disk image license agreements are deprecated by Apple and will probably be removed in a future macOS release. Discussion at: https://github.com/argv-minus-one/dmg-license/issues/11", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -864,9 +1290,9 @@ } }, "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", "dev": true, "engines": { "node": ">=10" @@ -885,11 +1311,16 @@ "dev": true }, "node_modules/ejs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.0.2.tgz", - "integrity": "sha512-IncmUpn1yN84hy2shb0POJ80FWrfGNY0cxO9f4v+/sG7qcBvAtVWUA1IdzY/8EYUmOVhoKJVdJjNd3AZcnxOjA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", "dev": true, - "hasInstallScript": true, + "dependencies": { + "jake": "^10.6.1" + }, + "bin": { + "ejs": "bin/cli.js" + }, "engines": { "node": ">=0.10.0" } @@ -913,58 +1344,44 @@ } }, "node_modules/electron-builder": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.5.1.tgz", - "integrity": "sha512-7gnHN8Ml5zecDerN8/ljAwUKtE+hhGLuT/X2/zO0FJM2q2hlLx/6ZgzESFILKqnPQFEBRxQ8SL1OxjdIY0HIrw==", + "version": "23.0.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.0.3.tgz", + "integrity": "sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ==", "dev": true, "dependencies": { - "@types/yargs": "^15.0.4", - "app-builder-lib": "22.5.1", - "bluebird-lst": "^1.0.9", - "builder-util": "22.5.1", - "builder-util-runtime": "8.7.0", - "chalk": "^3.0.0", - "dmg-builder": "22.5.1", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "lazy-val": "^1.0.4", - "read-config-file": "6.0.0", - "sanitize-filename": "^1.6.3", - "update-notifier": "^4.1.0", - "yargs": "^15.3.1" + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.0.3", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", + "chalk": "^4.1.1", + "dmg-builder": "23.0.3", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "update-notifier": "^5.1.0", + "yargs": "^17.0.1" }, "bin": { - "electron-builder": "out/cli/cli.js", - "install-app-deps": "out/cli/install-app-deps.js" + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" }, "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/electron-builder/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "node": ">=14.0.0" } }, "node_modules/electron-builder/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/electron-builder/node_modules/jsonfile": { @@ -988,59 +1405,31 @@ "node": ">= 10.0.0" } }, - "node_modules/electron-builder/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-builder/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, "node_modules/electron-builder/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "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" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/electron-builder/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, "engines": { - "node": ">=6" + "node": ">=12" } }, "node_modules/electron-context-menu": { @@ -1077,35 +1466,81 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-publish": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.5.1.tgz", - "integrity": "sha512-g5bwLAHZT6A++yU1+Et+fncnFAdXXgkRao9rzTFAvhQ0QJBsmLiyOd0Ta2RI/EQcVoy6jyHtxFs7CWIXE5aZOA==", + "node_modules/electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", "dev": true, "dependencies": { - "@types/fs-extra": "^8.1.0", - "bluebird-lst": "^1.0.9", - "builder-util": "22.5.1", - "builder-util-runtime": "8.7.0", - "chalk": "^3.0.0", - "fs-extra": "^9.0.0", - "lazy-val": "^1.0.4", - "mime": "^2.4.4" + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/electron-osx-sign/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" + } + }, + "node_modules/electron-osx-sign/node_modules/isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "dependencies": { + "buffer-alloc": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/electron-osx-sign/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/electron-publish": { + "version": "23.0.2", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.0.2.tgz", + "integrity": "sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" } }, "node_modules/electron-publish/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/electron-publish/node_modules/jsonfile": { @@ -1205,19 +1640,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -1283,6 +1705,16 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1304,17 +1736,27 @@ "pend": "~1.2.0" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "minimatch": "^3.0.4" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, "node_modules/fs-extra": { @@ -1337,12 +1779,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1419,25 +1855,28 @@ } }, "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "dependencies": { - "ini": "1.3.7" + "ini": "2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/global-dirs/node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/global-tunnel-ng": { "version": "2.7.1", @@ -1499,17 +1938,11 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true }, "node_modules/has-flag": { "version": "4.0.0", @@ -1530,9 +1963,9 @@ } }, "node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -1547,6 +1980,33 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/husky": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", @@ -1562,18 +2022,56 @@ "url": "https://github.com/sponsors/typicode" } }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, "node_modules/iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -1615,29 +2113,17 @@ "dev": true }, "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "dependencies": { - "ci-info": "^2.0.0" + "ci-info": "^3.2.0" }, "bin": { "is-ci": "bin.js" } }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -1647,28 +2133,31 @@ } }, "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-obj": { @@ -1727,14 +2216,37 @@ "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/jake": { + "version": "10.8.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", + "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "async": "0.9.x", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -1807,24 +2319,11 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "optional": true + "dev": true }, "node_modules/lowercase-keys": { "version": "1.0.1", @@ -1895,6 +2394,18 @@ "node": ">= 0.6" } }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -1948,6 +2459,13 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, "node_modules/noms": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", @@ -1982,33 +2500,6 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", @@ -2060,42 +2551,6 @@ "node": ">=6" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -2128,11 +2583,14 @@ "node": ">=0.10.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/pend": { "version": "1.2.0", @@ -2150,6 +2608,28 @@ "node": ">=4" } }, + "node_modules/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", + "dev": true, + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -2242,19 +2722,19 @@ } }, "node_modules/read-config-file": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", - "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", "dev": true, "dependencies": { - "dotenv": "^8.2.0", + "dotenv": "^9.0.2", "dotenv-expand": "^5.1.0", - "js-yaml": "^3.13.1", - "json5": "^2.1.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", "lazy-val": "^1.0.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/readable-stream": { @@ -2305,29 +2785,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -2337,6 +2794,21 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -2426,11 +2898,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/set-blocking": { + "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/signal-exit": { "version": "3.0.7", @@ -2451,6 +2938,17 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -2492,38 +2990,6 @@ "source-map": "^0.6.0" } }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -2606,18 +3072,6 @@ "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -2663,18 +3117,6 @@ "node": ">= 10.0.0" } }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -2685,6 +3127,27 @@ "xtend": "~4.0.1" } }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -2797,32 +3260,66 @@ } }, "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "dependencies": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, + "node_modules/update-notifier/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/update-notifier/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2861,21 +3358,42 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, + "optional": true, "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/widest-line": { "version": "3.1.0", @@ -2912,6 +3430,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", @@ -2941,6 +3471,16 @@ "node": ">=8" } }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -3031,6 +3571,102 @@ "sumchecker": "^3.0.1" } }, + "@electron/universal": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.0.tgz", + "integrity": "sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q==", + "dev": true, + "requires": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -3046,6 +3682,12 @@ "defer-to-connect": "^1.0.1" } }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -3062,14 +3704,32 @@ "dev": true }, "@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, "requires": { "@types/node": "*" } }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "optional": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "optional": true + }, "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -3082,6 +3742,24 @@ "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, + "@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "@types/verror": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", + "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==", + "dev": true, + "optional": true + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -3092,9 +3770,9 @@ } }, "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -3107,11 +3785,20 @@ "dev": true }, "7zip-bin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", - "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3154,48 +3841,50 @@ } }, "app-builder-bin": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.6.tgz", - "integrity": "sha512-gY9ABoV5jh67IrPEwF81R8l9LwE3RqHUyU3rIKitwqMpKhplN5OZC6WEHOXO3XhwiLCIlr9LLI6OPhr3bmtQIg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", "dev": true }, "app-builder-lib": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.5.1.tgz", - "integrity": "sha512-VtB/PD8actR1317D/0uGzuJIYbpw4pRrfMB6IyTLwGynUd3ihqiCFjejVWHjCwopgCct2kE0MvLwo8P49xHIeQ==", + "version": "23.0.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.0.3.tgz", + "integrity": "sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w==", "dev": true, "requires": { "@develar/schema-utils": "~2.6.5", - "7zip-bin": "~5.0.3", + "@electron/universal": "1.2.0", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.5.1", - "builder-util-runtime": "8.7.0", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", "chromium-pickle-js": "^0.2.0", - "debug": "^4.1.1", - "ejs": "^3.0.2", - "electron-publish": "22.5.1", - "fs-extra": "^9.0.0", - "hosted-git-info": "^3.0.4", - "is-ci": "^2.0.0", - "isbinaryfile": "^4.0.5", - "js-yaml": "^3.13.1", - "lazy-val": "^1.0.4", + "debug": "^4.3.2", + "ejs": "^3.1.6", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.0.2", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "hosted-git-info": "^4.0.2", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.8", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", "minimatch": "^3.0.4", - "normalize-package-data": "^2.5.0", - "read-config-file": "6.0.0", + "read-config-file": "6.2.0", "sanitize-filename": "^1.6.3", - "semver": "^7.1.3", - "temp-file": "^3.3.7" + "semver": "^7.3.5", + "temp-file": "^3.4.0" }, "dependencies": { "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -3229,33 +3918,54 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "asar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz", + "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } + "@types/glob": "^7.1.1", + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" } }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, "async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3268,6 +3978,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -3291,25 +4007,25 @@ "optional": true }, "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "requires": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } @@ -3324,12 +4040,51 @@ "concat-map": "0.0.1" } }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "optional": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3337,34 +4092,36 @@ "dev": true }, "builder-util": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.5.1.tgz", - "integrity": "sha512-CelDTP3+fvDfZfbwy3PXif7mudPaWankJ8vrRg/NtCGvL+hXnwycnJZr46d5EQL7AgQcpJ27o9LTdfu61cxTFw==", + "version": "23.0.2", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.0.2.tgz", + "integrity": "sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg==", "dev": true, "requires": { - "@types/debug": "^4.1.5", - "@types/fs-extra": "^8.1.0", - "7zip-bin": "~5.0.3", - "app-builder-bin": "3.5.6", + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "8.7.0", - "chalk": "^3.0.0", - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "js-yaml": "^3.13.1", - "source-map-support": "^0.5.16", + "builder-util-runtime": "9.0.0", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", "stat-mode": "^1.0.0", - "temp-file": "^3.3.7" + "temp-file": "^3.4.0" }, "dependencies": { "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -3389,12 +4146,12 @@ } }, "builder-util-runtime": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.0.tgz", - "integrity": "sha512-G1AqqVM2vYTrSFR982c1NNzwXKrGLQjVjaZaWQdn4O6Z3YKjdMDofw88aD9jpyK9ZXkrCxR0tI3Qe9wNbyTlXg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz", + "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==", "dev": true, "requires": { - "debug": "^4.1.1", + "debug": "^4.3.2", "sax": "^1.2.4" } }, @@ -3431,15 +4188,15 @@ } }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -3453,9 +4210,9 @@ "dev": true }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "cli-boxes": { @@ -3506,6 +4263,33 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3547,20 +4331,6 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } } }, "copyfiles": { @@ -3584,6 +4354,27 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -3599,12 +4390,6 @@ "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -3636,6 +4421,12 @@ "object-keys": "^1.0.12" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -3643,27 +4434,59 @@ "dev": true, "optional": true }, - "dmg-builder": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.5.1.tgz", - "integrity": "sha512-AwIiyGwgqhA8Ty/YnEU20aSzfrWZns6suOBTqddD+rLDI4jEASKGQadfvcXRSWgaK/VQW0GrhheXrhJpzZzt3g==", + "dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", "dev": true, "requires": { - "app-builder-lib": "22.5.1", - "builder-util": "22.5.1", - "fs-extra": "^9.0.0", - "iconv-lite": "^0.5.1", - "js-yaml": "^3.13.1", - "sanitize-filename": "^1.6.3" + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "dmg-builder": { + "version": "23.0.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.0.3.tgz", + "integrity": "sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA==", + "dev": true, + "requires": { + "app-builder-lib": "23.0.3", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", + "dmg-license": "^1.0.9", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" }, "dependencies": { "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -3687,6 +4510,23 @@ } } }, + "dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "requires": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + } + }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -3697,9 +4537,9 @@ } }, "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", "dev": true }, "dotenv-expand": { @@ -3715,10 +4555,13 @@ "dev": true }, "ejs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.0.2.tgz", - "integrity": "sha512-IncmUpn1yN84hy2shb0POJ80FWrfGNY0cxO9f4v+/sG7qcBvAtVWUA1IdzY/8EYUmOVhoKJVdJjNd3AZcnxOjA==", - "dev": true + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "dev": true, + "requires": { + "jake": "^10.6.1" + } }, "electron": { "version": "18.0.4", @@ -3740,45 +4583,31 @@ } }, "electron-builder": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.5.1.tgz", - "integrity": "sha512-7gnHN8Ml5zecDerN8/ljAwUKtE+hhGLuT/X2/zO0FJM2q2hlLx/6ZgzESFILKqnPQFEBRxQ8SL1OxjdIY0HIrw==", + "version": "23.0.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.0.3.tgz", + "integrity": "sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ==", "dev": true, "requires": { - "@types/yargs": "^15.0.4", - "app-builder-lib": "22.5.1", - "bluebird-lst": "^1.0.9", - "builder-util": "22.5.1", - "builder-util-runtime": "8.7.0", - "chalk": "^3.0.0", - "dmg-builder": "22.5.1", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "lazy-val": "^1.0.4", - "read-config-file": "6.0.0", - "sanitize-filename": "^1.6.3", - "update-notifier": "^4.1.0", - "yargs": "^15.3.1" + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.0.3", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", + "chalk": "^4.1.1", + "dmg-builder": "23.0.3", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "update-notifier": "^5.1.0", + "yargs": "^17.0.1" }, "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -3800,51 +4629,26 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "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" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true } } }, @@ -3873,29 +4677,67 @@ "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==" }, - "electron-publish": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.5.1.tgz", - "integrity": "sha512-g5bwLAHZT6A++yU1+Et+fncnFAdXXgkRao9rzTFAvhQ0QJBsmLiyOd0Ta2RI/EQcVoy6jyHtxFs7CWIXE5aZOA==", + "electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", "dev": true, "requires": { - "@types/fs-extra": "^8.1.0", - "bluebird-lst": "^1.0.9", - "builder-util": "22.5.1", - "builder-util-runtime": "8.7.0", - "chalk": "^3.0.0", - "fs-extra": "^9.0.0", - "lazy-val": "^1.0.4", - "mime": "^2.4.4" + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "dependencies": { + "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" + } + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "electron-publish": { + "version": "23.0.2", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.0.2.tgz", + "integrity": "sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg==", + "dev": true, + "requires": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.0.2", + "builder-util-runtime": "9.0.0", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" }, "dependencies": { "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -3971,12 +4813,6 @@ "dev": true, "optional": true }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -4032,6 +4868,13 @@ } } }, + "extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "optional": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4053,14 +4896,24 @@ "pend": "~1.2.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "minimatch": "^3.0.4" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } }, "fs-extra": { @@ -4080,12 +4933,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -4143,18 +4990,18 @@ } }, "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "requires": { - "ini": "1.3.7" + "ini": "2.0.0" }, "dependencies": { "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true } } @@ -4207,14 +5054,11 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -4229,9 +5073,9 @@ "dev": true }, "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -4243,21 +5087,60 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "husky": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true }, + "iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "requires": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + } + }, "iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "optional": true + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -4293,21 +5176,12 @@ "dev": true }, "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" + "ci-info": "^3.2.0" } }, "is-fullwidth-code-point": { @@ -4316,19 +5190,19 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true }, "is-obj": { @@ -4372,14 +5246,31 @@ "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jake": { + "version": "10.8.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", + "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "async": "0.9.x", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" } }, "json-buffer": { @@ -4440,21 +5331,11 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "optional": true + "dev": true }, "lowercase-keys": { "version": "1.0.1", @@ -4501,6 +5382,15 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -4539,6 +5429,13 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, "noms": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", @@ -4575,32 +5472,6 @@ } } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", @@ -4640,30 +5511,6 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -4687,10 +5534,10 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "pend": { @@ -4706,6 +5553,24 @@ "dev": true, "optional": true }, + "plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", + "dev": true, + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "dependencies": { + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + } + } + }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -4774,15 +5639,15 @@ } }, "read-config-file": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", - "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", "dev": true, "requires": { - "dotenv": "^8.2.0", + "dotenv": "^9.0.2", "dotenv-expand": "^5.1.0", - "js-yaml": "^3.13.1", - "json5": "^2.1.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", "lazy-val": "^1.0.4" } }, @@ -4825,23 +5690,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -4851,6 +5699,15 @@ "lowercase-keys": "^1.0.0" } }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -4925,10 +5782,19 @@ "type-fest": "^0.13.1" } }, - "set-blocking": { + "shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "signal-exit": { @@ -4947,6 +5813,13 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "optional": true + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -4979,38 +5852,6 @@ "source-map": "^0.6.0" } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -5075,12 +5916,6 @@ "has-flag": "^4.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, "temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -5120,12 +5955,6 @@ } } }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -5136,6 +5965,24 @@ "xtend": "~4.0.1" } }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "requires": { + "tmp": "^0.2.0" + } + }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -5217,24 +6064,51 @@ } }, "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", + "boxen": "^5.0.0", + "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^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" + } + } } }, "uri-js": { @@ -5272,21 +6146,35 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, + "optional": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + } } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } }, "widest-line": { "version": "3.1.0", @@ -5314,6 +6202,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", @@ -5326,6 +6226,13 @@ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "optional": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 4d66138..f3f91ce 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.0.4", - "electron-builder": "^22.5.1", + "electron-builder": "^23.0.3", "husky": "^7.0.4", "prettier": "^2.5.1", "typescript": "^4.5.4" From 07d5cd15d09365eb2cbc30ff0a89d00217a085d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Apr 2022 22:39:01 +0200 Subject: [PATCH 12/50] Bump @types/node from 17.0.24 to 17.0.25 (#96) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 17.0.24 to 17.0.25. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9967c5..315b12a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@types/electron-json-storage": "^4.5.0", - "@types/node": "^17.0.24", + "@types/node": "^17.0.25", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.0.4", @@ -271,9 +271,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz", + "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==", "dev": true }, "node_modules/@types/plist": { @@ -3737,9 +3737,9 @@ "dev": true }, "@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz", + "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==", "dev": true }, "@types/plist": { diff --git a/package.json b/package.json index f3f91ce..c4a15b9 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "homepage": "https://github.com/armcord/armcord#readme", "devDependencies": { "@types/electron-json-storage": "^4.5.0", - "@types/node": "^17.0.24", + "@types/node": "^17.0.25", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.0.4", From 095a060be5f6da1025cbc85e52440390b512021e Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Tue, 19 Apr 2022 22:39:44 +0200 Subject: [PATCH 13/50] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc310fb..29f378e 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Install it via an AUR helper tool like `yay`. -We are using official web app and adding some magic powder to make it all work! ## 3. Can I use this on other architectures or operating systems? - -Yes! ArmCord should work normally under Windows, ~~Mac OS~~ (Mac OS is broken see [#48](https://github.com/ArmCord/ArmCord/issues/48)) and Linux as long as it has NodeJS, npm and Electron support. + -Yes! ArmCord should work normally under Windows, Mac OS and Linux as long as it has NodeJS, npm and Electron support. # Credits [ArmCord UI Elements and few features](https://github.com/kckarnige) From 03082d3d7fd9a02a5c6f65265110a752abcf2248 Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 16:52:37 +0200 Subject: [PATCH 14/50] Arm64 build + delete latest prerelease --- .github/workflows/dev.yml | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 4b9502f..174dcff 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -23,13 +23,18 @@ jobs: run: npm install -g electron-builder - name: Build - run: npm run build && electron-builder --linux zip + run: npm run build && electron-builder --linux zip && electron-builder --arm64 --linux zip - name: Upload artifact uses: actions/upload-artifact@v2 with: name: ArmCordLinux.zip path: dist/ArmCord-3.1.0.zip + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ArmCordLinuxArm64.zip + path: dist/ArmCord-3.1.0-arm64.zip build-mac: runs-on: macos-latest @@ -108,6 +113,11 @@ jobs: with: name: ArmCordLinux.zip path: linux + + - uses: actions/download-artifact@v2 + with: + name: ArmCordLinuxArm64.zip + path: linux - run: | ls ls windows @@ -118,18 +128,25 @@ jobs: shell: bash run: | echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - + - uses: dev-drprasad/delete-tag-and-release@v0.2.0 + with: + delete_release: true + tag_name: devbuild + repo: ArmCord/ArmCord + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create the release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: ${{ steps.vars.outputs.sha_short }} + tag_name: devbuild name: Dev Build ${{ steps.vars.outputs.sha_short }} draft: false prerelease: true body_path: .github/release.md files: | linux/ArmCord-3.1.0.zip + linux/ArmCord-3.1.0-arm64.zip macos/ArmCord-3.1.0-mac.zip - windows/ArmCord-3.1.0-win.zip \ No newline at end of file + windows/ArmCord-3.1.0-win.zip From 009f6ba19abbf290cb4331edcaa04fca709238c5 Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 16:53:50 +0200 Subject: [PATCH 15/50] Fix github token not loading --- .github/workflows/dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 174dcff..58e5294 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -133,8 +133,8 @@ jobs: delete_release: true tag_name: devbuild repo: ArmCord/ArmCord - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create the release uses: softprops/action-gh-release@v1 env: From aac52167f1441d9d4e74d03958b0ce1280bc0ed5 Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 17:15:51 +0200 Subject: [PATCH 16/50] Add dev build notice --- .github/release.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/release.md b/.github/release.md index 639ec3e..693ce20 100644 --- a/.github/release.md +++ b/.github/release.md @@ -1,2 +1,3 @@ -# Thanks for checking out ArmCord dev build! -Make sure to join our [Discord server](https://discord.gg/uaW5vMY3V6) to share opinions, or to chat with ArmCord developers! \ No newline at end of file +# Thanks for checking out ArmCord dev builds! +These builds are unstable and not ready for full release. They contain new experimental features and changes. We provide no official support for them. +Make sure to join our [Discord server](https://discord.gg/uaW5vMY3V6) to share opinions, or to chat with ArmCord developers! From 61104a166e1e525eae5b9836a6f60ce43d1963aa Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 17:32:54 +0200 Subject: [PATCH 17/50] Make dev workflow only trigger on dev branch --- .github/workflows/dev.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 58e5294..509146f 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -1,5 +1,8 @@ name: Dev build -on: [push] +on: + push: + branches: + - dev env: FORCE_COLOR: true From 97e8fb5e699a48697ad529c7c243c63c0e65f529 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 20:30:52 +0200 Subject: [PATCH 18/50] Fix setup not working, css additions --- src/content/css/discord.css | 3 +++ src/utils.ts | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/content/css/discord.css b/src/content/css/discord.css index 1b49a8b..70e11a0 100644 --- a/src/content/css/discord.css +++ b/src/content/css/discord.css @@ -10,3 +10,6 @@ .notice-2HEN-u { display: none; } +.sidebar-1tnWFu { + border-top-left-radius: 8px !important; +} diff --git a/src/utils.ts b/src/utils.ts index 6b12f38..163f830 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -83,7 +83,7 @@ export async function getConfig(object: string) { const settingsFile = storagePath + "settings.json"; let rawdata = fs.readFileSync(settingsFile, "utf-8"); let returndata = JSON.parse(rawdata); - console.log(returndata[object]); + console.log(object + ": " + returndata[object]); return returndata[object]; } catch (e) { console.log("Config probably doesn't exist yet. Returning setup value."); @@ -124,7 +124,12 @@ export async function checkIfConfigExists() { const userDataPath = app.getPath("userData"); const storagePath = path.join(userDataPath, "/storage/"); const settingsFile = storagePath + "settings.json"; + if (!fs.existsSync(settingsFile)) { + if (!fs.existsSync(storagePath)) { + fs.mkdirSync(storagePath); + console.log("Created missing storage folder"); + } console.log("First run of the ArmCord. Starting setup."); setup(); contentPath = path.join(__dirname, "/content/setup.html"); From 4b4e72ccf42f8ab26e211b19c1397648719afbdf Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 20:43:38 +0200 Subject: [PATCH 19/50] Readme fixes and weblate mention --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 29f378e..dcaaa55 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ # How to run/install it? ### Recommended: - Check releases tab for precompiled packages for Linux, Windows and ~~Mac OS~~ (Mac OS is broken see [#48](https://github.com/ArmCord/ArmCord/issues/48)). Alternatively use our Sourceforge mirror. + Check releases tab for precompiled packages for Linux, Windows and Mac OS. Alternatively use our Sourceforge mirror. Download ArmCord ### AUR Package Armcord is also available on the Arch User Repository (AUR) [here](https://aur.archlinux.org/packages/armcord-bin/). @@ -51,14 +51,15 @@ Install it via an AUR helper tool like `yay`. # FAQ ## 1. Will I get banned from using it? - -You are breaking Discord ToS if you decided to use client mods. But no one ever got banned from using ArmCord or any of the client mods included. If you wish to remove mods, check our documentation. + - You are breaking Discord ToS if you decided to use client mods. But no one ever got banned from using ArmCord or any of the client mods included. If you wish to remove mods, check our documentation. ## 2. How does this work? - -We are using official web app and adding some magic powder to make it all work! + - We are using official web app and adding some magic powder to make it all work! ## 3. Can I use this on other architectures or operating systems? - -Yes! ArmCord should work normally under Windows, Mac OS and Linux as long as it has NodeJS, npm and Electron support. - + - Yes! ArmCord should work normally under Windows, Mac OS and Linux as long as it has NodeJS, npm and Electron support. +## 4. Where can I translate this? + - Translations are done using our [Weblate page](https://hosted.weblate.org/projects/armcord/armcord/). They're pushed to this [repo](https://github.com/ArmCord/i18n). # Credits [ArmCord UI Elements and few features](https://github.com/kckarnige) [Cumcord](https://github.com/Cumcord/Cumcord) From c5368da0cabf400a2f536ae5817462d4f4c6b93e Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 21:05:03 +0200 Subject: [PATCH 20/50] Add no client mods option to settings --- src/settings/settings.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings/settings.html b/src/settings/settings.html index b74d94f..ec5149e 100644 --- a/src/settings/settings.html +++ b/src/settings/settings.html @@ -48,6 +48,7 @@ +

Client mod:

From 495a813af164ac44eb4707cb39b58a1bd0c62b03 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 20 Apr 2022 21:50:23 +0200 Subject: [PATCH 21/50] Add experimental Discord AC theme --- src/main.ts | 3 ++ src/tray.ts | 90 +++++++++++++++++++++++++++++++++-------------------- 2 files changed, 59 insertions(+), 34 deletions(-) diff --git a/src/main.ts b/src/main.ts index 6da73c1..bf042f9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -23,6 +23,9 @@ app.whenReady().then(async () => { case "native": createNativeWindow(); break; + case "discord": + createNativeWindow(); + break; case "glasstron": dialog.showErrorBox( "Glasstron is unsupported.", diff --git a/src/tray.ts b/src/tray.ts index 876755b..e1eedd6 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -1,38 +1,60 @@ -import {app, Menu, Tray} from "electron"; -import {mainWindow} from "./window"; +import { app, Menu, Tray } from "electron"; +import { mainWindow } from "./window"; +import { getConfig } from "./utils"; import * as path from "path"; -import {createSettingsWindow} from "./settings/main"; -let tray = null; -app.whenReady().then(() => { - tray = new Tray(path.join(__dirname, "../", "/assets/ac_plug.png")); - const contextMenu = Menu.buildFromTemplate([ - { - label: "Open ArmCord", - click: function () { - mainWindow.show(); +import { createSettingsWindow } from "./settings/main"; +let tray: any = null; +app.whenReady().then(async () => { + if (await getConfig("windowStyle") == "discord") { + tray = new Tray(path.join(__dirname, "../", "/assets/ac_plug.png")); + const contextMenu = Menu.buildFromTemplate([ + { + label: "Open ArmCord", + click: function () { + mainWindow.show(); + } + }, + { + label: "Quit ArmCord", + click: function () { + app.quit(); + } } - }, - { - label: "Open Settings", - click: function () { - createSettingsWindow(); - } - }, - { - label: "Support Discord Server", - click: function () { - mainWindow.show(); - mainWindow.loadURL("https://discord.gg/TnhxcqynZ2"); - } - }, - { - label: "Quit ArmCord", - click: function () { - app.quit(); - } - } - ]); + ]); - tray.setToolTip("ArmCord " + app.getVersion()); - tray.setContextMenu(contextMenu); + tray.setToolTip("Discord"); + tray.setContextMenu(contextMenu); + } else { + tray = new Tray(path.join(__dirname, "../", "/assets/ac_plug.png")); + const contextMenu = Menu.buildFromTemplate([ + { + label: "Open ArmCord", + click: function () { + mainWindow.show(); + } + }, + { + label: "Open Settings", + click: function () { + createSettingsWindow(); + } + }, + { + label: "Support Discord Server", + click: function () { + mainWindow.show(); + mainWindow.loadURL("https://discord.gg/TnhxcqynZ2"); + } + }, + { + label: "Quit ArmCord", + click: function () { + app.quit(); + } + } + ]); + + tray.setToolTip("ArmCord " + app.getVersion()); + tray.setContextMenu(contextMenu); + } }); From 1666b8a098caadf1429cd43b4152012417e70f1b Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Thu, 21 Apr 2022 15:23:06 +0200 Subject: [PATCH 22/50] Fix corrupted settings checker --- src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils.ts b/src/utils.ts index 163f830..cf2e4f6 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -21,7 +21,7 @@ export async function sleep(ms: number) { } export async function checkIfConfigIsBroken() { - if ((await getConfig("0")) == "d") { + if (await getConfig("0") == "d") { console.log("Detected a corrupted config"); setup(); dialog.showErrorBox( From 41933e3c4fc611b41178bdf214d85b34e8ce75ca Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Thu, 21 Apr 2022 18:20:58 +0200 Subject: [PATCH 23/50] Update assets and add new ones --- assets/ac_icon.png | Bin 0 -> 41110 bytes assets/ac_icon_transparent.png | Bin 83375 -> 46630 bytes assets/ac_plug.ico | Bin 109693 -> 0 bytes assets/ac_plug.png | Bin 38890 -> 18411 bytes assets/ac_white_plug.png | Bin 0 -> 10552 bytes assets/dsc-tray.png | Bin 0 -> 3863 bytes src/tray.ts | 2 +- src/window.ts | 1 + 8 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 assets/ac_icon.png delete mode 100644 assets/ac_plug.ico create mode 100644 assets/ac_white_plug.png create mode 100644 assets/dsc-tray.png diff --git a/assets/ac_icon.png b/assets/ac_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..324fdce3ec5f54858a8bddf01ead2686aa411124 GIT binary patch literal 41110 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

um)B7C1CLk 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 literal 0 HcmV?d00001 diff --git a/assets/ac_icon_transparent.png b/assets/ac_icon_transparent.png index bb87d3bafe44c8dcba387113f79018fd2415b88f..0fde29f3ab045ab47f8f0e508b62396a3dd551f4 100644 GIT binary patch literal 46630 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�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

D(Dzt5KW4bf$Na8{%23BD@l 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ℑ!wp6hoknS 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 diff --git a/assets/ac_white_plug.png b/assets/ac_white_plug.png new file mode 100644 index 0000000000000000000000000000000000000000..fd67fb18b41e05fea28044dd126931738d8de232 GIT binary patch literal 10552 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 { if (await getConfig("windowStyle") == "discord") { - tray = new Tray(path.join(__dirname, "../", "/assets/ac_plug.png")); + tray = new Tray(path.join(__dirname, "../", "/assets/dsc-tray.png")); const contextMenu = Menu.buildFromTemplate([ { label: "Open ArmCord", diff --git a/src/window.ts b/src/window.ts index c5e4b9c..8aba1b9 100644 --- a/src/window.ts +++ b/src/window.ts @@ -8,6 +8,7 @@ import {checkIfConfigIsBroken, firstRun, getConfig, contentPath} from "./utils"; import {registerIpc} from "./ipc"; import startServer from "./socket" import contextMenu from "electron-context-menu"; +export var icon: string; export let mainWindow: BrowserWindow; export let inviteWindow: BrowserWindow; let guestWindows: BrowserWindow[] = []; From 3e8526f0f763b6bd76217cfade65251ad51228ac Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 22 Apr 2022 20:30:09 +0200 Subject: [PATCH 24/50] Add wayland specific patches --- src/main.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main.ts b/src/main.ts index bf042f9..ee90124 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,6 +12,13 @@ export var settings: any; export var customTitlebar: boolean; export var tabs: boolean; +if (process.platform == "linux") { + if (process.env.$XDG_SESSION_TYPE == "wayland") { + console.log("Wayland specific patches applied.") + app.commandLine.appendSwitch("enable-features=UseOzonePlatform"); + app.commandLine.appendSwitch("ozone-platform=wayland"); + } +} checkIfConfigExists(); app.whenReady().then(async () => { From 4c8cd2bf57845d8502773f917d61f77aedf57f35 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 22 Apr 2022 20:39:00 +0200 Subject: [PATCH 25/50] Make window decorations work on Gnome Wayland --- src/main.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index ee90124..38dfa46 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,8 +15,12 @@ export var tabs: boolean; if (process.platform == "linux") { if (process.env.$XDG_SESSION_TYPE == "wayland") { console.log("Wayland specific patches applied.") - app.commandLine.appendSwitch("enable-features=UseOzonePlatform"); app.commandLine.appendSwitch("ozone-platform=wayland"); + if (process.env.$XDG_CURRENT_DESKTOP == "GNOME") { + app.commandLine.appendSwitch("enable-features=UseOzonePlatform,WaylandWindowDecorations"); + } else { + app.commandLine.appendSwitch("enable-features=UseOzonePlatform"); + } } } checkIfConfigExists(); From 6876cc0ec1eb861acd404db08e0a77557efb0ca1 Mon Sep 17 00:00:00 2001 From: Alyxia Sother Date: Fri, 22 Apr 2022 20:24:56 +0200 Subject: [PATCH 26/50] Replace the version number for dev builds --- .github/workflows/dev.yml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 509146f..9dffc80 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -25,6 +25,11 @@ jobs: - name: Install Electron-Builder run: npm install -g electron-builder + - name: Replace the version number + run: cat src/utils.ts | sed -e 's/[[:digit:]]\.[[:digit:]]\.[[:digit:]]/DEV/g' | tee src/utils.ts > /dev/null + + - run: cat src/utils.ts + - name: Build run: npm run build && electron-builder --linux zip && electron-builder --arm64 --linux zip @@ -56,6 +61,11 @@ jobs: - name: Install Electron-Builder run: npm install -g electron-builder + - name: Replace the version number + run: cat src/utils.ts | sed -e 's/[[:digit:]]\.[[:digit:]]\.[[:digit:]]/DEV/g' | tee src/utils.ts > /dev/null + + - run: cat src/utils.ts + - name: Build run: npm run build && electron-builder --macos zip env: @@ -84,6 +94,9 @@ jobs: - name: Install Electron-Builder run: npm install -g electron-builder + - name: Replace the version number + run: (Get-Content src/utils.ts) -replace "\d\.\d\.\d", "DEV" | Out-File src/utils.ts + - name: Build run: npm run build && electron-builder --windows zip @@ -121,23 +134,20 @@ jobs: with: name: ArmCordLinuxArm64.zip path: linux - - run: | - ls - ls windows - ls macos - ls linux + - name: Get some values needed for the release id: vars shell: bash run: | echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + - uses: dev-drprasad/delete-tag-and-release@v0.2.0 with: delete_release: true tag_name: devbuild - repo: ArmCord/ArmCord env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Create the release uses: softprops/action-gh-release@v1 env: From 73347d557e8de390cf10ee3389bffa3cd4438c3d Mon Sep 17 00:00:00 2001 From: Alyxia Sother Date: Fri, 22 Apr 2022 22:09:35 +0200 Subject: [PATCH 27/50] Skip updater if running development version --- .github/workflows/dev.yml | 4 ---- src/content/splash.html | 33 +++++++++++++++++++-------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 9dffc80..3172783 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -28,8 +28,6 @@ jobs: - name: Replace the version number run: cat src/utils.ts | sed -e 's/[[:digit:]]\.[[:digit:]]\.[[:digit:]]/DEV/g' | tee src/utils.ts > /dev/null - - run: cat src/utils.ts - - name: Build run: npm run build && electron-builder --linux zip && electron-builder --arm64 --linux zip @@ -64,8 +62,6 @@ jobs: - name: Replace the version number run: cat src/utils.ts | sed -e 's/[[:digit:]]\.[[:digit:]]\.[[:digit:]]/DEV/g' | tee src/utils.ts > /dev/null - - run: cat src/utils.ts - - name: Build run: npm run build && electron-builder --macos zip env: diff --git a/src/content/splash.html b/src/content/splash.html index 118d8d9..83cd134 100644 --- a/src/content/splash.html +++ b/src/content/splash.html @@ -22,20 +22,25 @@ text.innerHTML = "You appear to be offline. Please connect to the internet and try again."; } else { text.innerHTML = "Starting ArmCord..."; - fetch("https://armcord.xyz/latest.json") - .then((response) => response.json()) - .then((data) => { - if (data.version !== window.armcord.version) { - var elem = document.createElement("img"); - elem.classList.add("logo"); - elem.src = "https://armcord.smartfridge.space/update.webp"; - document.body.prepend(elem); - document.getElementById("splashscreen-armcord").remove(); - text.innerHTML = "A new version of ArmCord is available. Please update to the latest version."; - } else { - console.log("ArmCord is up to date."); - } - }); + if (window.armcord.version === "DEV") { + console.log("Running a development build of ArmCord. Skipping updater."); + } else { + fetch("https://armcord.xyz/latest.json") + .then((response) => response.json()) + .then((data) => { + if (data.version !== window.armcord.version) { + var elem = document.createElement("img"); + elem.classList.add("logo"); + elem.src = "https://armcord.smartfridge.space/update.webp"; + document.body.prepend(elem); + document.getElementById("splashscreen-armcord").remove(); + text.innerHTML = + "A new version of ArmCord is available. Please update to the latest version."; + } else { + console.log("ArmCord is up to date."); + } + }); + } setTimeout(() => { window.armcordinternal.splashEnd(); switch (window.armcord.channel) { From 46ddad404431521e752df56514255a97da973928 Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 22 Apr 2022 22:26:57 +0200 Subject: [PATCH 28/50] Delete codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 71 --------------------------- 1 file changed, 71 deletions(-) delete mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index dd9a1d5..0000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,71 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ main ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ main ] - schedule: - - cron: '23 16 * * 4' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'javascript' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] - # Learn more: - # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 From eca41529d4adc6a23c565846b5390f42959f6285 Mon Sep 17 00:00:00 2001 From: Alyxia Sother Date: Sun, 24 Apr 2022 14:49:16 +0200 Subject: [PATCH 29/50] Re-do the setup page (#98) --- .prettierignore | 1 + src/content/css/fonts/whitney_400.woff | Bin 0 -> 77784 bytes src/content/css/setup.css | 207 ++++++++++++++-------- src/content/setup.html | 232 +++++++++++++------------ src/window.ts | 4 +- 5 files changed, 258 insertions(+), 186 deletions(-) create mode 100644 src/content/css/fonts/whitney_400.woff diff --git a/.prettierignore b/.prettierignore index bac5ad4..49688bd 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,7 @@ # Some prettier-specific files so it doesn't die. **/*.png **/*.ico +**/*.woff LICENSE .gitignore diff --git a/src/content/css/fonts/whitney_400.woff b/src/content/css/fonts/whitney_400.woff new file mode 100644 index 0000000000000000000000000000000000000000..2b3308154b56e5e8b22e7a5ab4ab2b72610693c4 GIT binary patch literal 77784 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 p { + color: white; + font-weight: bold; + margin: 1rem; +} +/* }}} */ + +/* Logo {{{ */ +#logo { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} +#logo p:first-child { + color: #7289da; + margin: 0; + font-weight: normal; + font-family: Helvetica, sans-serif; + font-size: 32px; +} +#logo p:last-child { + color: white; + margin: 0; + font-weight: normal; + font-family: Discordinated; + font-size: 32px; +} +/* }}} */ + +/* Buttons {{{ */ +#buttons { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + gap: 1rem; + + user-select: all !important; + + margin-top: 10px; + margin-bottom: 10px; +} +button { + background: var(--brand-experiment); + color: var(--header-primary); + + border: none; + border-radius: 4px; + + padding: 8px 20px; +} button:hover { - background-color: #687dc6; - border-style: none; - outline: none; + filter: brightness(85%); cursor: pointer; } +/* }}} */ + +/* Dropdowns {{{ */ select { -webkit-appearance: button; -moz-appearance: button; @@ -106,6 +163,4 @@ select { text-overflow: ellipsis; white-space: nowrap; } -.center { - text-align: center; -} +/* }}} */ diff --git a/src/content/setup.html b/src/content/setup.html index 22f3f98..8e0a208 100644 --- a/src/content/setup.html +++ b/src/content/setup.html @@ -1,134 +1,150 @@ - - + + ArmCord Setup -

+ diff --git a/src/window.ts b/src/window.ts index 8aba1b9..4e97d54 100644 --- a/src/window.ts +++ b/src/window.ts @@ -68,8 +68,8 @@ async function doAfterDefiningTheWindow() { } export function createCustomWindow() { mainWindow = new BrowserWindow({ - width: 300, - height: 350, + width: 390, + height: 470, title: "ArmCord", darkTheme: true, icon: path.join(__dirname, "/assets/icon_transparent.png"), From abd2d9d9205cc0129cb6c3bfbb205dee4d977b7e Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Sun, 24 Apr 2022 16:02:09 +0200 Subject: [PATCH 30/50] Add English translation --- assets/lang/en_US.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 assets/lang/en_US.json diff --git a/assets/lang/en_US.json b/assets/lang/en_US.json new file mode 100644 index 0000000..03e21bc --- /dev/null +++ b/assets/lang/en_US.json @@ -0,0 +1,28 @@ +{ + "loading_screen_start": "Starting ArmCord…", + "loading_screen_offline": "You appear to be offline. Please connect to the Internet and try again.", + "loading_screen_update": "A new version of ArmCord is available. Please update to the latest version.", + "setup_question1": "Select what kind of setup you want to perform:", + "setup_question1_answer1": "Express setup", + "setup_question1_answer2": "Full setup", + "setup_offline": "You appear to be offline. Please connect to the Internet and restart the ArmCord setup.", + "setup_question2": "Choose your Discord channel/instance:", + "setup_question3": "Should ArmCord handle client mods installation?", + "yes": "Yes", + "no": "No", + "next": "Next", + "setup_question4": "Select a client mod you want to install:", + "setup_question4_clientmodnotice": "Why not all of them? Having many client mods at the same time can cause issues. If you really want to do it though, check our documentation.", + "settings-theme": "ArmCord Theme:", + "settings-theme-glasstron": "Glasstron (experimental)", + "settings-theme-tabs": "Tabs (experimental)", + "settings-theme-default": "Default", + "settings-theme-native": "Native", + "settings-tray": "Minimize to tray", + "settings-patches": "Automatic Patches", + "settings-channel": "Discord channel:", + "settings-invitewebsocket": "discord.gg support", + "settings-mod": "Client mod:", + "settings-save": "Save settings", + "settings-updater": "Check for updates" +} From 28994989ab1063e5ffa97dce1e955458e7309b1b Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Sun, 24 Apr 2022 16:06:00 +0200 Subject: [PATCH 31/50] Move all of the translations to this repo --- assets/lang/fr-FR.json | 28 ++++++++++++++++++++++++++++ assets/lang/it-IT.json | 28 ++++++++++++++++++++++++++++ assets/lang/nb-NO.json | 28 ++++++++++++++++++++++++++++ assets/lang/nl-NL.json | 28 ++++++++++++++++++++++++++++ assets/lang/pl-PL.json | 28 ++++++++++++++++++++++++++++ 5 files changed, 140 insertions(+) create mode 100644 assets/lang/fr-FR.json create mode 100644 assets/lang/it-IT.json create mode 100644 assets/lang/nb-NO.json create mode 100644 assets/lang/nl-NL.json create mode 100644 assets/lang/pl-PL.json diff --git a/assets/lang/fr-FR.json b/assets/lang/fr-FR.json new file mode 100644 index 0000000..28dbdbd --- /dev/null +++ b/assets/lang/fr-FR.json @@ -0,0 +1,28 @@ +{ + "loading_screen_start": "Démarrage d'ArmCord…", + "loading_screen_update": "Une nouvelle version de ArmCord est disponible. Veuillez mettre à jour la dernière version.", + "setup_question1": "Sélectionnez le type de configuration que vous souhaitez effectuer :", + "setup_question1_answer1": "Configuration express", + "setup_question1_answer2": "Configuration complète", + "setup_question2": "Choisissez votre canal/instance Discord :", + "setup_question3": "ArmCord doit-il s'occuper de l'installation des mods clients ?", + "yes": "Oui", + "no": "Non", + "next": "Suivant", + "setup_question4": "Sélectionnez le mod client que vous souhaitez installer :", + "setup_question4_clientmodnotice": "Pourquoi pas tous ? Le fait d'avoir plusieurs mods clients en même temps peut causer des problèmes. Si vous voulez vraiment le faire, consultez notre documentation.", + "loading_screen_offline": "Vous semblez être hors ligne. Veuillez vous connecter à internet et réessayer.", + "setup_offline": "Vous semblez être hors ligne. Veuillez vous connecter à internet et redémarrer ArmCord Setup.", + "settings-tray": "Minimize to tray", + "settings-channel": "Discord channel:", + "settings-mod": "Client mod:", + "settings-save": "Save settings", + "settings-updater": "Check for updates", + "settings-theme": "ArmCord Theme:", + "settings-theme-tabs": "Tabs (experimental)", + "settings-theme-default": "Default", + "settings-theme-glasstron": "Glasstron (experimental)", + "settings-theme-native": "Native", + "settings-patches": "Automatic Patches", + "settings-invitewebsocket": "discord.gg support" +} diff --git a/assets/lang/it-IT.json b/assets/lang/it-IT.json new file mode 100644 index 0000000..144d221 --- /dev/null +++ b/assets/lang/it-IT.json @@ -0,0 +1,28 @@ +{ + "loading_screen_update": "Una nuova versione di ArmCord è disponibile. Per favore aggiorna all'ultima versione.", + "setup_question1_answer1": "Configurazione veloce", + "loading_screen_start": "Avviando Armcord…", + "loading_screen_offline": "Sembri essere offline. Per favore connettiti all'Internet e riprova.", + "setup_question1": "Seleziona quale tipo di setup vuoi eseguire:", + "setup_question2": "Seleziona il tuo canale/istanza di Discord:", + "setup_question3": "ArmCord dovrebbe gestire l'installazione di client mod?", + "yes": "Sì", + "no": "No", + "next": "Avanti", + "setup_question4": "Seleziona una client mod che vuoi installare:", + "setup_question1_answer2": "Configurazione completa", + "setup_offline": "Sembri essere offline. Per favore connettiti all'Internet e riavvia la configurazione di ArmCord.", + "setup_question4_clientmodnotice": "Perché non tutti? Avere molte client mod allo stesso tempo puo causare problemi. Se davvero vuoi farlo, vedi la nostra documentazione.", + "settings-tray": "Riduci ad icona", + "settings-channel": "Canale Discord:", + "settings-save": "Salva impostazioni", + "settings-updater": "Controlla gli aggiornamenti", + "settings-mod": "Client mod:", + "settings-theme": "ArmCord Theme:", + "settings-theme-glasstron": "Glasstron (experimental)", + "settings-theme-tabs": "Tabs (experimental)", + "settings-theme-default": "Default", + "settings-theme-native": "Native", + "settings-patches": "Automatic Patches", + "settings-invitewebsocket": "discord.gg support" +} diff --git a/assets/lang/nb-NO.json b/assets/lang/nb-NO.json new file mode 100644 index 0000000..41670f2 --- /dev/null +++ b/assets/lang/nb-NO.json @@ -0,0 +1,28 @@ +{ + "loading_screen_start": "Starter ArmCord …", + "loading_screen_offline": "Koble til Internett og prøv igjen.", + "loading_screen_update": "En ny versjon av ArmCord er tilgjengelig. Oppgrader til siste versjon.", + "setup_question1": "Velg hvilket oppsett du ønsker å utføre:", + "setup_question1_answer2": "Fullt oppsett", + "setup_question2": "Velg din Discor-kanal/instans:", + "yes": "Ja", + "no": "Nei", + "setup_question1_answer1": "Hurtigoppsett", + "setup_question3": "Skal ArmCord håndtere installasjon av klient-modifikasjoner?", + "setup_offline": "Koble til Internett og start ArmCord-oppsett på ny.", + "next": "Neste", + "setup_question4": "Velg en klient-modifikasjon du ønsker å installere:", + "setup_question4_clientmodnotice": "Hvorfor ikke alle? Å ha mange klient-modifikasjoner samtidig kan forårsake problemer. Hvis du vil gjøre det likevel bør du lese dokumentasjonen vår.", + "settings-tray": "Minimize to tray", + "settings-channel": "Discord channel:", + "settings-mod": "Client mod:", + "settings-save": "Save settings", + "settings-updater": "Check for updates", + "settings-theme": "ArmCord Theme:", + "settings-theme-glasstron": "Glasstron (experimental)", + "settings-theme-tabs": "Tabs (experimental)", + "settings-theme-default": "Default", + "settings-theme-native": "Native", + "settings-patches": "Automatic Patches", + "settings-invitewebsocket": "discord.gg support" +} diff --git a/assets/lang/nl-NL.json b/assets/lang/nl-NL.json new file mode 100644 index 0000000..485d28f --- /dev/null +++ b/assets/lang/nl-NL.json @@ -0,0 +1,28 @@ +{ + "setup_question1": "Selecteer wat voor soort setup je wilt starten:", + "setup_question1_answer1": "Express setup", + "setup_question1_answer2": "Volledige setup", + "setup_question3": "Moet ArmCord client mods installeren?", + "yes": "Ja", + "no": "Nee", + "setup_offline": "Het lijkt erop alsof je offline bent. Verbind met het Internet en herstart ArmCord setup.", + "loading_screen_start": "ArmCord starten…", + "next": "Volgende", + "setup_question4": "Selecteer een client mod om te installeren:", + "setup_question4_clientmodnotice": "Waarom niet allemaal? Meerdere client mods installeren kan problemen veroorzaken. Als je dit echt wilt doen, kan je de documentatie bekijken.", + "loading_screen_offline": "Het lijkt erop alsof je offline bent. Verbind met het Internet en probeer opnieuw.", + "loading_screen_update": "Een nieuwe versie van ArmCord is beschikbaar. Update alstublieft naar de nieuwste versie.", + "setup_question2": "Kies je Discord kanaal/instantie:", + "settings-tray": "Minimaliseer naar pictogram in het systeemvak", + "settings-channel": "Discord kanaal:", + "settings-mod": "Client mod:", + "settings-save": "Instellingen opslaan", + "settings-updater": "Check voor updates", + "settings-patches": "Automatische Patches", + "settings-theme": "ArmCord Thema:", + "settings-theme-glasstron": "Glasstron (experimenteel)", + "settings-theme-tabs": "Tabs (experimenteel)", + "settings-theme-default": "Standaard", + "settings-theme-native": "Native", + "settings-invitewebsocket": "discord.gg support" +} diff --git a/assets/lang/pl-PL.json b/assets/lang/pl-PL.json new file mode 100644 index 0000000..979e56b --- /dev/null +++ b/assets/lang/pl-PL.json @@ -0,0 +1,28 @@ +{ + "loading_screen_update": "Nowa wersja ArmCord jest dostępna. Proszę zaktualizować aplikację do najnowszej wersji.", + "setup_question1_answer2": "Pełna konfiguracja", + "setup_question2": "Wybierz swój kanał/odmianę Discorda:", + "setup_question3": "Czy ArmCord powinienem zajmować sie instalacją modyfikacji klienta?", + "yes": "Tak", + "no": "Nie", + "next": "Dalej", + "setup_question4": "Wybierz modyfikację klienta którą chcesz zainstalować:", + "setup_question4_clientmodnotice": "Dlaczego nie wszystkie na raz? Posiadanie wielu modyfikacji może spowodować wiele błędów. Jeśli jednak nalegasz możesz sprawdzić naszą dokumentację.", + "loading_screen_start": "Ładowanie ArmCord…", + "loading_screen_offline": "Wydaje nam się, że nie jesteś połączony z Internetem. Połącz się z internetem i spróbuj ponownie.", + "setup_question1_answer1": "Ekspresowa konfiguracja", + "setup_question1": "Wybierz w jaki sposób chcesz skonfigurować ArmCord:", + "setup_offline": "Wydaje nam się że nie jesteś połączony z internetem. Połącz się z internetem i uruchom ponownie konfiguracje ArmCord .", + "settings-channel": "Kanał Discorda:", + "settings-updater": "Sprawdź aktualizacje", + "settings-tray": "Zminimalizuj do zasobnika zadań", + "settings-save": "Zapisz ustawienia", + "settings-mod": "Modyfikacja klienta:", + "settings-theme": "Motyw ArmCord:", + "settings-theme-glasstron": "Glasstron (eksperymentalne)", + "settings-theme-tabs": "Karty (eksperymentalne)", + "settings-theme-default": "Domyślny", + "settings-theme-native": "Natywny", + "settings-patches": "Automatyczne łatki", + "settings-invitewebsocket": "Wsparcie linków discord.gg" +} From 0df10b79ee78843be4d746427810aac2604bd732 Mon Sep 17 00:00:00 2001 From: Alyxia Sother Date: Mon, 25 Apr 2022 18:43:28 +0200 Subject: [PATCH 32/50] Upgrade Electron to 18.1.0 (#100) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 315b12a..9f774d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@types/node": "^17.0.25", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", - "electron": "^18.0.4", + "electron": "^18.1.0", "electron-builder": "^23.0.3", "husky": "^7.0.4", "prettier": "^2.5.1", @@ -1326,9 +1326,9 @@ } }, "node_modules/electron": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-18.0.4.tgz", - "integrity": "sha512-xfsozNpFr3WzeM1EFlw2qqiqXbCrgQNBJJMlcC4/DUYVpkF8364SZenX7FFFA42NmwXiOEahkvvho/u7UrAcGg==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-18.1.0.tgz", + "integrity": "sha512-P55wdHNTRMo7a/agC84ZEZDYEK/pTBcQdlp8lFbHcx3mO4Kr+Im/J5p2uQgiuXtown31HqNh2paL3V0p+E6rpQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -4564,9 +4564,9 @@ } }, "electron": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-18.0.4.tgz", - "integrity": "sha512-xfsozNpFr3WzeM1EFlw2qqiqXbCrgQNBJJMlcC4/DUYVpkF8364SZenX7FFFA42NmwXiOEahkvvho/u7UrAcGg==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-18.1.0.tgz", + "integrity": "sha512-P55wdHNTRMo7a/agC84ZEZDYEK/pTBcQdlp8lFbHcx3mO4Kr+Im/J5p2uQgiuXtown31HqNh2paL3V0p+E6rpQ==", "dev": true, "requires": { "@electron/get": "^1.13.0", diff --git a/package.json b/package.json index c4a15b9..8b9ff95 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/node": "^17.0.25", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", - "electron": "^18.0.4", + "electron": "^18.1.0", "electron-builder": "^23.0.3", "husky": "^7.0.4", "prettier": "^2.5.1", From 94183d8feebba109dce00b70f7abd80c3a740e9a Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 13 May 2022 15:17:29 +0200 Subject: [PATCH 33/50] Add Jetbrains logo into readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index dcaaa55..451040c 100644 --- a/README.md +++ b/README.md @@ -68,3 +68,6 @@ Install it via an AUR helper tool like `yay`. [electron-discord-webapp](https://github.com/SpacingBat3/electron-discord-webapp) [custom-electron-titlebar (css only)](https://github.com/AlexTorresSk/custom-electron-titlebar) [electron-builder](https://electron.build) +# Sponsors + [![JetBrains supports ArmCord with free licenses to their software to core developers](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://jb.gg/OpenSourceSupport) + From e3a7d9797f39ee6f7f1e6fd34dac39f8d0855fc5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 21:22:44 +0200 Subject: [PATCH 34/50] Bump typescript from 4.6.3 to 4.6.4 (#104) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.6.3 to 4.6.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.6.3...v4.6.4) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f774d3..75c95e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "electron-builder": "^23.0.3", "husky": "^7.0.4", "prettier": "^2.5.1", - "typescript": "^4.5.4" + "typescript": "^4.6.4" } }, "node_modules/@develar/schema-utils": { @@ -3205,9 +3205,9 @@ } }, "node_modules/typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6028,9 +6028,9 @@ } }, "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, "unique-string": { diff --git a/package.json b/package.json index 8b9ff95..d56a297 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "electron-builder": "^23.0.3", "husky": "^7.0.4", "prettier": "^2.5.1", - "typescript": "^4.5.4" + "typescript": "^4.6.4" }, "dependencies": { "electron-context-menu": "^3.1.2", From 466597727e48d17c11cd7b0cd1d61a6411b21fdf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 21:23:04 +0200 Subject: [PATCH 35/50] Bump @types/node from 17.0.25 to 17.0.33 (#111) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 17.0.25 to 17.0.33. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75c95e8..b6eef41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@types/electron-json-storage": "^4.5.0", - "@types/node": "^17.0.25", + "@types/node": "^17.0.33", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.1.0", @@ -271,9 +271,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz", - "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", + "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==", "dev": true }, "node_modules/@types/plist": { @@ -3737,9 +3737,9 @@ "dev": true }, "@types/node": { - "version": "17.0.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz", - "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", + "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==", "dev": true }, "@types/plist": { diff --git a/package.json b/package.json index d56a297..ed2e3e8 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "homepage": "https://github.com/armcord/armcord#readme", "devDependencies": { "@types/electron-json-storage": "^4.5.0", - "@types/node": "^17.0.25", + "@types/node": "^17.0.33", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", "electron": "^18.1.0", From b86cb5546dc5014201718b1fc9f73efbc5651ef1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 21:23:11 +0200 Subject: [PATCH 36/50] Bump husky from 7.0.4 to 8.0.1 (#108) Bumps [husky](https://github.com/typicode/husky) from 7.0.4 to 8.0.1. - [Release notes](https://github.com/typicode/husky/releases) - [Commits](https://github.com/typicode/husky/compare/v7.0.4...v8.0.1) --- updated-dependencies: - dependency-name: husky dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6eef41..797e74b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "copyfiles": "^2.4.1", "electron": "^18.1.0", "electron-builder": "^23.0.3", - "husky": "^7.0.4", + "husky": "^8.0.1", "prettier": "^2.5.1", "typescript": "^4.6.4" } @@ -2008,15 +2008,15 @@ } }, "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", "dev": true, "bin": { "husky": "lib/bin.js" }, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/typicode" @@ -5109,9 +5109,9 @@ } }, "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", "dev": true }, "iconv-corefoundation": { diff --git a/package.json b/package.json index ed2e3e8..2b7b9c3 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "copyfiles": "^2.4.1", "electron": "^18.1.0", "electron-builder": "^23.0.3", - "husky": "^7.0.4", + "husky": "^8.0.1", "prettier": "^2.5.1", "typescript": "^4.6.4" }, From 9a24d44bfa85a1e3f430244e9241be3ed651fddc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 21:23:18 +0200 Subject: [PATCH 37/50] Bump ws from 8.5.0 to 8.6.0 (#106) Bumps [ws](https://github.com/websockets/ws) from 8.5.0 to 8.6.0. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.5.0...8.6.0) --- updated-dependencies: - dependency-name: ws dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 797e74b..3e43286 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "dependencies": { "electron-context-menu": "^3.1.2", "v8-compile-cache": "^2.3.0", - "ws": "^8.5.0" + "ws": "^8.6.0" }, "devDependencies": { "@types/electron-json-storage": "^4.5.0", @@ -3443,9 +3443,9 @@ } }, "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "engines": { "node": ">=10.0.0" }, @@ -6215,9 +6215,9 @@ } }, "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "requires": {} }, "xdg-basedir": { diff --git a/package.json b/package.json index 2b7b9c3..575f414 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "electron-context-menu": "^3.1.2", "v8-compile-cache": "^2.3.0", - "ws": "^8.5.0" + "ws": "^8.6.0" }, "build": { "appId": "com.smartfridge.armcord", From dfcdd14fb2d7ebc34bada358453f056063a974c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 21:24:07 +0200 Subject: [PATCH 38/50] Bump ejs from 3.1.6 to 3.1.8 (#113) Bumps [ejs](https://github.com/mde/ejs) from 3.1.6 to 3.1.8. - [Release notes](https://github.com/mde/ejs/releases) - [Changelog](https://github.com/mde/ejs/blob/main/CHANGELOG.md) - [Commits](https://github.com/mde/ejs/compare/v3.1.6...v3.1.8) --- updated-dependencies: - dependency-name: ejs dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 101 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e43286..8ab9ba3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -530,9 +530,9 @@ } }, "node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", "dev": true }, "node_modules/async-exit-hook": { @@ -1311,12 +1311,12 @@ "dev": true }, "node_modules/ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, "dependencies": { - "jake": "^10.6.1" + "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" @@ -1737,12 +1737,33 @@ } }, "node_modules/filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/form-data": { @@ -2223,12 +2244,12 @@ "dev": true }, "node_modules/jake": { - "version": "10.8.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", - "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, "dependencies": { - "async": "0.9.x", + "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" @@ -3949,9 +3970,9 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", "dev": true }, "async-exit-hook": { @@ -4555,12 +4576,12 @@ "dev": true }, "ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, "requires": { - "jake": "^10.6.1" + "jake": "^10.8.5" } }, "electron": { @@ -4897,12 +4918,32 @@ } }, "filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "form-data": { @@ -5253,12 +5294,12 @@ "dev": true }, "jake": { - "version": "10.8.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.4.tgz", - "integrity": "sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA==", + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, "requires": { - "async": "0.9.x", + "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" From 0eeb1b385546e0c8e98ab44a22e6db843a20bb79 Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 13 May 2022 21:27:09 +0200 Subject: [PATCH 39/50] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 575f414..d4a3042 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "electron-builder": "^23.0.3", "husky": "^8.0.1", "prettier": "^2.5.1", - "typescript": "^4.6.4" + "typescript": "^4.6.3" }, "dependencies": { "electron-context-menu": "^3.1.2", From aac1df6ca95b55e3f4cf0e95232f338dc6af8a54 Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 13 May 2022 21:32:54 +0200 Subject: [PATCH 40/50] Update Electron to 18.2.3 Fixes #112 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d4a3042..aa39d53 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/node": "^17.0.33", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", - "electron": "^18.1.0", + "electron": "^18.2.3, "electron-builder": "^23.0.3", "husky": "^8.0.1", "prettier": "^2.5.1", From d1d7c5834c2e2a673044c00fe6feff59e189a2a5 Mon Sep 17 00:00:00 2001 From: smartfridge <37928912+smartfrigde@users.noreply.github.com> Date: Fri, 13 May 2022 21:34:22 +0200 Subject: [PATCH 41/50] Fix broken json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aa39d53..22f82eb 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/node": "^17.0.33", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", - "electron": "^18.2.3, + "electron": "^18.2.3", "electron-builder": "^23.0.3", "husky": "^8.0.1", "prettier": "^2.5.1", From 1222a37a449d363d0c0b69992809a52f4c3be3b5 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Sat, 14 May 2022 19:55:06 +0200 Subject: [PATCH 42/50] Fix image pasting --- package-lock.json | 103 +++++++++++++++++++++++++++++++++++++++------- package.json | 3 +- src/tray.ts | 9 ++++ src/window.ts | 6 ++- 4 files changed, 104 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ab9ba3..b077abd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "hasInstallScript": true, "license": "OSL-3.0", "dependencies": { - "electron-context-menu": "^3.1.2", + "electron-context-menu": "https://github.com/ArmCord/electron-context-menu.git", + "electron-editor-context-menu": "^1.1.1", "v8-compile-cache": "^2.3.0", "ws": "^8.6.0" }, @@ -19,11 +20,11 @@ "@types/node": "^17.0.33", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", - "electron": "^18.1.0", + "electron": "^18.2.3", "electron-builder": "^23.0.3", "husky": "^8.0.1", "prettier": "^2.5.1", - "typescript": "^4.6.4" + "typescript": "^4.6.3" } }, "node_modules/@develar/schema-utils": { @@ -1326,9 +1327,9 @@ } }, "node_modules/electron": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-18.1.0.tgz", - "integrity": "sha512-P55wdHNTRMo7a/agC84ZEZDYEK/pTBcQdlp8lFbHcx3mO4Kr+Im/J5p2uQgiuXtown31HqNh2paL3V0p+E6rpQ==", + "version": "18.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-18.2.3.tgz", + "integrity": "sha512-DJWX03hCRKTscsfXxmW4gmgFuseop+g+m4ml7NfOMfankD8uYyr2Xyi3Ui02inL9qZOlbLMeLVCu6jKCKs8p/w==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -1434,8 +1435,8 @@ }, "node_modules/electron-context-menu": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.1.2.tgz", - "integrity": "sha512-nNzu4w14n7mOR+4cLjRC9cEFqGUsAY76seOm0sw3f4OxEfX/d75m7HYekyp5b+0m7Ixy2KN/Mrljw1zLmpyV2w==", + "resolved": "git+ssh://git@github.com/ArmCord/electron-context-menu.git#1ec9d1e69c41f44530e2637fbe5f7d99f78b1eeb", + "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "electron-dl": "^3.2.1", @@ -1458,6 +1459,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/electron-editor-context-menu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/electron-editor-context-menu/-/electron-editor-context-menu-1.1.1.tgz", + "integrity": "sha1-3DAJjg37N/YmKOQzAxJMfzN5Vy0=", + "dependencies": { + "lodash.clonedeep": "^4.3.0", + "lodash.defaults": "^4.0.1", + "lodash.isarray": "^4.0.0", + "lodash.isempty": "^4.1.2", + "lodash.isfunction": "^3.0.8" + } + }, "node_modules/electron-is-dev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", @@ -2346,6 +2359,32 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.isarray": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-4.0.0.tgz", + "integrity": "sha1-KspJayjEym1yZxUxNZDALm6jRAM=", + "deprecated": "This package is deprecated. Use Array.isArray." + }, + "node_modules/lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -4585,9 +4624,9 @@ } }, "electron": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-18.1.0.tgz", - "integrity": "sha512-P55wdHNTRMo7a/agC84ZEZDYEK/pTBcQdlp8lFbHcx3mO4Kr+Im/J5p2uQgiuXtown31HqNh2paL3V0p+E6rpQ==", + "version": "18.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-18.2.3.tgz", + "integrity": "sha512-DJWX03hCRKTscsfXxmW4gmgFuseop+g+m4ml7NfOMfankD8uYyr2Xyi3Ui02inL9qZOlbLMeLVCu6jKCKs8p/w==", "dev": true, "requires": { "@electron/get": "^1.13.0", @@ -4674,9 +4713,8 @@ } }, "electron-context-menu": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.1.2.tgz", - "integrity": "sha512-nNzu4w14n7mOR+4cLjRC9cEFqGUsAY76seOm0sw3f4OxEfX/d75m7HYekyp5b+0m7Ixy2KN/Mrljw1zLmpyV2w==", + "version": "git+ssh://git@github.com/ArmCord/electron-context-menu.git#1ec9d1e69c41f44530e2637fbe5f7d99f78b1eeb", + "from": "electron-context-menu@https://github.com/ArmCord/electron-context-menu.git", "requires": { "cli-truncate": "^2.1.0", "electron-dl": "^3.2.1", @@ -4693,6 +4731,18 @@ "unused-filename": "^2.1.0" } }, + "electron-editor-context-menu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/electron-editor-context-menu/-/electron-editor-context-menu-1.1.1.tgz", + "integrity": "sha1-3DAJjg37N/YmKOQzAxJMfzN5Vy0=", + "requires": { + "lodash.clonedeep": "^4.3.0", + "lodash.defaults": "^4.0.1", + "lodash.isarray": "^4.0.0", + "lodash.isempty": "^4.1.2", + "lodash.isfunction": "^3.0.8" + } + }, "electron-is-dev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", @@ -5378,6 +5428,31 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.isarray": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-4.0.0.tgz", + "integrity": "sha1-KspJayjEym1yZxUxNZDALm6jRAM=" + }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", diff --git a/package.json b/package.json index 22f82eb..a69f63c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "typescript": "^4.6.3" }, "dependencies": { - "electron-context-menu": "^3.1.2", + "electron-context-menu": "https://github.com/ArmCord/electron-context-menu.git", + "electron-editor-context-menu": "^1.1.1", "v8-compile-cache": "^2.3.0", "ws": "^8.6.0" }, diff --git a/src/tray.ts b/src/tray.ts index 9506b4f..e4395ca 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -27,6 +27,12 @@ app.whenReady().then(async () => { } else { tray = new Tray(path.join(__dirname, "../", "/assets/ac_plug.png")); const contextMenu = Menu.buildFromTemplate([ + { + label: "ArmCord", + }, + { + type: "separator" + }, { label: "Open ArmCord", click: function () { @@ -46,6 +52,9 @@ app.whenReady().then(async () => { mainWindow.loadURL("https://discord.gg/TnhxcqynZ2"); } }, + { + type: "separator" + }, { label: "Quit ArmCord", click: function () { diff --git a/src/window.ts b/src/window.ts index 4e97d54..ff6fb2a 100644 --- a/src/window.ts +++ b/src/window.ts @@ -2,16 +2,18 @@ // I had to add most of the window creation code here to split both into seperete functions // WHY? Because I can't use the same code for both due to annoying bug with value `frame` not responding to variables // I'm sorry for this mess but I'm not sure how to fix it. -import {BrowserWindow, shell, app, ipcMain, dialog} from "electron"; +import {BrowserWindow, shell, app, ipcMain, dialog, clipboard} from "electron"; import path from "path"; import {checkIfConfigIsBroken, firstRun, getConfig, contentPath} from "./utils"; import {registerIpc} from "./ipc"; import startServer from "./socket" import contextMenu from "electron-context-menu"; +import os from "os"; export var icon: string; export let mainWindow: BrowserWindow; export let inviteWindow: BrowserWindow; let guestWindows: BrowserWindow[] = []; + contextMenu({ showSaveImageAs: true, showCopyImageAddress: true, @@ -22,7 +24,7 @@ async function doAfterDefiningTheWindow() { checkIfConfigIsBroken(); registerIpc(); mainWindow.webContents.userAgent = - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"; //fake useragent for screenshare to work + `Mozilla/5.0 (X11; ${os.type()} ${os.arch()}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36`; //fake useragent for screenshare to work mainWindow.webContents.setWindowOpenHandler(({url}) => { shell.openExternal(url); return {action: "deny"}; From 6663b6de5fc0d5263fa558840505e3993e6c201c Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Sat, 14 May 2022 20:00:33 +0200 Subject: [PATCH 43/50] Add missing setting to setup and settings menu --- package.json | 2 -- src/content/setup.html | 3 +++ src/settings/settings.html | 9 ++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index a69f63c..48bde48 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,6 @@ }, "homepage": "https://github.com/armcord/armcord#readme", "devDependencies": { - "@types/electron-json-storage": "^4.5.0", "@types/node": "^17.0.33", "@types/ws": "^8.5.3", "copyfiles": "^2.4.1", @@ -35,7 +34,6 @@ }, "dependencies": { "electron-context-menu": "https://github.com/ArmCord/electron-context-menu.git", - "electron-editor-context-menu": "^1.1.1", "v8-compile-cache": "^2.3.0", "ws": "^8.6.0" }, diff --git a/src/content/setup.html b/src/content/setup.html index 8e0a208..5e45b06 100644 --- a/src/content/setup.html +++ b/src/content/setup.html @@ -99,6 +99,7 @@ minimizeToTray: true, automaticPatches: false, mods: "cumcord", + inviteWebsocket: true, blurType: "acrylic" }); setTimeout(() => window.armcordinternal.restart(), 5000); @@ -128,6 +129,7 @@ minimizeToTray: true, automaticPatches: false, mods: options.mod, + inviteWebsocket: true, blurType: "acrylic" }); setTimeout(() => window.armcordinternal.restart(), 500); @@ -140,6 +142,7 @@ minimizeToTray: true, automaticPatches: false, mods: "none", + inviteWebsocket: true, blurType: "acrylic" }); setTimeout(() => window.armcordinternal.restart(), 500); diff --git a/src/settings/settings.html b/src/settings/settings.html index ec5149e..7d723c5 100644 --- a/src/settings/settings.html +++ b/src/settings/settings.html @@ -34,6 +34,12 @@ +
+
+ + + +
+
+
+ + + +
-
-
- - - -