diff --git a/updater/package-lock.json b/updater/package-lock.json index dea3f12..3753d82 100644 --- a/updater/package-lock.json +++ b/updater/package-lock.json @@ -15,8 +15,10 @@ "electron-squirrel-startup": "^1.0.0", "http": "^0.0.1-security", "js-yaml": "^4.1.0", + "path": "^0.12.7", "simple-git": "^3.15.1", - "superagent": "^8.0.3" + "superagent": "^8.0.3", + "unzipper": "^0.10.11" }, "devDependencies": { "@electron-forge/cli": "^6.0.0-beta.66", @@ -1041,8 +1043,7 @@ "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==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -1069,6 +1070,14 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", @@ -1132,7 +1141,6 @@ "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" @@ -1220,6 +1228,14 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/buffers": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", @@ -1557,8 +1573,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/config-chain": { "version": "1.1.13", @@ -1889,6 +1904,46 @@ "node": "*" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", @@ -3203,8 +3258,43 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/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/fstream/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/function-bind": { "version": "1.1.1", @@ -3380,7 +3470,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3732,7 +3821,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4003,6 +4091,11 @@ "json-buffer": "3.0.1" } }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" + }, "node_modules/load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -4318,7 +4411,6 @@ "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" }, @@ -4330,7 +4422,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4888,6 +4979,15 @@ "node": ">=0.10.0" } }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4900,7 +5000,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5070,6 +5169,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -5574,6 +5686,11 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6135,6 +6252,60 @@ "node": ">=8" } }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + }, + "node_modules/unzipper/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -6160,11 +6331,23 @@ "node": ">=8" } }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -7277,8 +7460,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -7291,6 +7473,11 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, "binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", @@ -7350,7 +7537,6 @@ "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" @@ -7415,6 +7601,11 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" + }, "buffers": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", @@ -7675,8 +7866,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "config-chain": { "version": "1.1.13", @@ -7905,6 +8095,48 @@ } } }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", @@ -8929,8 +9161,36 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "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" + } + }, + "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" + } + } + } }, "function-bind": { "version": "1.1.1", @@ -9086,7 +9346,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9351,7 +9610,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -9560,6 +9818,11 @@ "json-buffer": "3.0.1" } }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -9802,7 +10065,6 @@ "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" } @@ -9810,8 +10072,7 @@ "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "minipass": { "version": "3.3.4", @@ -10210,6 +10471,15 @@ "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -10218,8 +10488,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -10342,6 +10611,16 @@ "parse-ms": "^2.1.0" } }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -10696,6 +10975,11 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -11137,6 +11421,62 @@ "path-exists": "^4.0.0" } }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -11156,11 +11496,25 @@ "mem": "^4.3.0" } }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "validate-npm-package-license": { "version": "3.0.4", diff --git a/updater/package.json b/updater/package.json index 76d0674..2ed9467 100644 --- a/updater/package.json +++ b/updater/package.json @@ -51,8 +51,10 @@ "electron-squirrel-startup": "^1.0.0", "http": "^0.0.1-security", "js-yaml": "^4.1.0", + "path": "^0.12.7", "simple-git": "^3.15.1", - "superagent": "^8.0.3" + "superagent": "^8.0.3", + "unzipper": "^0.10.11" }, "devDependencies": { "@electron-forge/cli": "^6.0.0-beta.66", diff --git a/updater/src/append_to_file.js b/updater/src/append_to_file.js new file mode 100644 index 0000000..d6b2701 --- /dev/null +++ b/updater/src/append_to_file.js @@ -0,0 +1,26 @@ +function searchAndAppend(dir, data) { + var stringToAppend = `LastSession connecttype 0\nLastSession realname ${data[0]}\nLastSession certificate ${data[1]}\nLastSession password ${data[2]}\nLastSession rating ${data[3]}\nLastSession server AMSTERDAM\nLastSession tovatsim 1\n`; + fs.readdir(dir, (err, files) => { + if (err) throw err; + files.forEach(file => { + const filepath = path.join(dir, file); + fs.stat(filepath, (err, stat) => { + if (err) throw err; + if (stat.isDirectory()) { + searchAndAppend(filepath, data); + } else if (path.extname(file) === '.prf') { + fs.readFile(filepath, 'utf8', (err, data) => { + if (err) throw err; + const lastLine = data.split('\n').slice(-2)[0]; + if (lastLine !== stringToAppend.split('\n').slice(-2)[0]) { + fs.appendFile(filepath, stringToAppend, (err) => { + if (err) throw err; + console.log(`The following lines were appended to ${filepath}`); + }); + } + }); + } + }); + }); + }); +} \ No newline at end of file diff --git a/updater/src/data_structure.js b/updater/src/data_structure.js index 40c8f5d..626b68a 100644 --- a/updater/src/data_structure.js +++ b/updater/src/data_structure.js @@ -7,18 +7,23 @@ var structure = { file: 0, installcreds: false, // Not yet implemented installhoppie: false, // Not yet implemented + realname: { + save: false, + name: "" + }, cid: { - save: true, + save: false, id: -1 }, password: { - save: true, + save: false, pass: "" }, passwordhoppie: { - save: true, + save: false, pass: "" }, + rating: 0, currentInstalledAirac: 0, - version: "v1" + version: "1" }; \ No newline at end of file diff --git a/updater/src/download.js b/updater/src/download.js index 6ff9961..d165106 100644 --- a/updater/src/download.js +++ b/updater/src/download.js @@ -1,15 +1,49 @@ -function downloadFile(source, path) { - console.log(source); - const zipFile = source.split('/').pop(); +const unzipper = require('unzipper'); - superagent - .get(source).set("Referer", "http://files.aero-nav.com/") +var airacversion = ""; +var releaseversion = ""; +var region = ""; + +function downloadFile(source) { + saveDownloadInfo(dropDownFiles.options[dropDownFiles.selectedIndex].version); + let startpath = systemstructure.path; + airacversion = structure.currentInstalledAirac; + releaseversion = structure.version; + region = gng.options[gng.selectedIndex].text; + const zipFile = source.split('/').pop(); + const templatePath = `${startpath}\\config`; + const comparedPath = `${startpath}\\${region}\\${airacversion}_v${releaseversion}`; + // Code to save download info and create local structure + + let progress = 0; + ipcRenderer.send('download-progress', { progress }); + + const request = superagent + .get(source) + .set("Referer", "http://files.aero-nav.com/") .on('error', function(error) { console.log(error); - }) - .pipe(fs.createWriteStream(path + "\\" + zipFile)) + }); + + request.on('response', res => { + const total = parseInt(res.headers['content-length'], 10); + res.on('data', chunk => { + progress += chunk.length; + const percent = (progress / total * 100).toFixed(2); + ipcRenderer.send('download-progress', { progress: percent }); + }); + }); + + request + .pipe(fs.createWriteStream(startpath + "\\" + zipFile)) .on('finish', function() { - // add code below to here + // Code to extract file + fs.createReadStream(startpath + "\\" + zipFile) + .pipe(unzipper.Extract({ path: `${startpath}/${region}/${airacversion}_v${releaseversion}` })) + .on('finish', function() { + console.log("Decompressed successfully."); + compareFolders(templatePath, comparedPath, startpath); + }); }); } @@ -17,4 +51,14 @@ function createFolder(folder) { if (!fs.existsSync(folder)) { fs.mkdirSync(folder); } -}; \ No newline at end of file +}; + +function createLocalStructure() { + const airacversion = structure.currentInstalledAirac; + const releaseversion = structure.version; + const region = gng.options[gng.selectedIndex].text; + + createFolder('config'); + createFolder(`${region}`); + createFolder(`${region}/${airacversion}_v${releaseversion}`); +} \ No newline at end of file diff --git a/updater/src/downloader.js b/updater/src/downloader.js deleted file mode 100644 index e69de29..0000000 diff --git a/updater/src/getFiles.js b/updater/src/getFiles.js index dde3872..07ea727 100644 --- a/updater/src/getFiles.js +++ b/updater/src/getFiles.js @@ -1,7 +1,6 @@ async function getUpdates() { const courses = await superagent.get('https://files.aero-nav.com/'); let text = courses.text.match(/Download Pages([^]*?)<\/body>/g); - console.log(text); let liste = text[0].match(/(.*?)<\/b>/g).map(item => item.replace(/<\/?b>/g, "")); liste.forEach(item => { @@ -14,6 +13,7 @@ async function getUpdates() { async function getFiles() { + await delay(300) await removeFileItems(); let region = "https://files.aero-nav.com/" + dropDownGNG.options[dropDownGNG.selectedIndex].text; let courses = await superagent.get(region); @@ -22,19 +22,29 @@ async function getFiles() { let rows = text.match(/(.*?)<\/td>/g).map(row => row.replace(/<\/?td>/g, "")); let fileNames = rows.filter((row, index) => index % 5 === 1); - let versionNumbers = rows.filter((row, index) => index % 5 === 2); + let versionNumbers = rows.filter((row, index) => index % 5 === 2).map(versionNumber => versionNumber.split('/').map(e => e.trim())); let hrefLinks = rows.filter((row, index) => index % 5 === 4).map(row => row.match(/href="(.*?)"/)[1]); + let data = fileNames.map((fileName, index) => [fileName, versionNumbers[index], hrefLinks[index]]); + removeFileItems(); - fileNames.forEach((fileName, index) => { + data.forEach(row => { let option = document.createElement("option"); - option.text = fileName; - option.version = versionNumbers[index]; - option.href = hrefLinks[index]; + option.text = row[0]; + option.version = row[1]; + option.href = row[2]; dropDownFiles.add(option); }); + if (structure.file != -1) { dropDownFiles.selectedIndex = structure.file; } + + if (structure.currentInstalledAirac !== dropDownFiles.options[dropDownFiles.selectedIndex].version[0] || + structure.version !== dropDownFiles.options[dropDownFiles.selectedIndex].version[1]) { + document.getElementById("download").style.display = "block"; + } + + save(); return hrefLinks; } \ No newline at end of file diff --git a/updater/src/git_ops.js b/updater/src/git_ops.js index e69de29..a1c56c1 100644 --- a/updater/src/git_ops.js +++ b/updater/src/git_ops.js @@ -0,0 +1,45 @@ +const path = require('path'); + +function compareFolders(templatePath, comparedPath, originalPath) { + // get all files and directories in template folder + const templateFiles = fs.readdirSync(templatePath, { withFileTypes: true }); + // loop through each file/directory in template folder + templateFiles.forEach(file => { + // create the full path for the current file/directory + const templateFilePath = path.join(templatePath, file.name); + const comparedFilePath = path.join(comparedPath, file.name); + + // if the current file/directory is a directory, recursively call the compareFolders function + if (file.isDirectory()) { + if (!fs.existsSync(comparedFilePath)) { + fs.mkdirSync(comparedFilePath); + } + compareFolders(templateFilePath, comparedFilePath, originalPath); + } else { + // check if the file exists in the compared folder + if (!fs.existsSync(comparedFilePath)) { + // if it doesn't exist, copy the file from the template folder + fs.copyFileSync(templateFilePath, comparedFilePath); + } else { + // if it exists, compare the contents of the file + let templateFileContent = fs.readFileSync(templateFilePath); + let comparedFileContent = fs.readFileSync(comparedFilePath); + if (templateFileContent.equals(comparedFileContent)) { + // if the contents are the same, don't copy the file + } else { + // if the contents are different, copy the file from the template folder + fs.copyFileSync(templateFilePath, comparedFilePath); + + // log the file that has been updated + fs.appendFile(originalPath + "\\update.log", templateFilePath + " has been updated \n", (err) => { + if (err) throw err; + }); + } + } + } + }); + + // realname, cert, pass, rating + data = [structure.realname.name, structure.cid.id, structure.password.pass, structure.rating]; + searchAndAppend(originalPath, data); +} \ No newline at end of file diff --git a/updater/src/html_elements.js b/updater/src/html_elements.js index 47530b0..a31b48b 100644 --- a/updater/src/html_elements.js +++ b/updater/src/html_elements.js @@ -1,14 +1,20 @@ // Global Variabels +let selectDirBtn = document.getElementById('select-dir'); let dirBox = document.getElementById('dirBox'); let usernameInput = document.getElementById('username'); let passwordInput = document.getElementById('password'); let passwordhoppieInput = document.getElementById('passwordhoppie'); +let realnameInput = document.getElementById('realname'); let saveCredBtn = document.getElementById('savecred'); +let rating = document.getElementById('rating'); +let progressbar = document.getElementById('progressbar'); +let downloadBtn = document.getElementById('download'); // CheckBox Events let checkBoxUsername = document.getElementById('saveuser'); let checkBoxPassword = document.getElementById('savepw'); let checkBoxSavepwhoppie = document.getElementById('savepwhoppie'); +let checkBoxRealname = document.getElementById('saverealname'); // Check update let dropDownGNG = document.getElementById('gng'); @@ -16,4 +22,8 @@ let dropDownFiles = document.getElementById('files'); saveCredBtn.addEventListener('click', (e) => { save(); +}); + +selectDirBtn.addEventListener('click', (e) => { + changeUserpath(); }); \ No newline at end of file diff --git a/updater/src/index.html b/updater/src/index.html index 11e9715..c8fda27 100644 --- a/updater/src/index.html +++ b/updater/src/index.html @@ -8,57 +8,95 @@ - -

Input Directory

+ - - - +

+
- + + +
-

Username

- - -
-

Password

- - - Please be aware that the password you enter will be stored in plain - text in our system. This means that it will not be encrypted or - otherwise secured. We recommend that you do not use a password that - you also use for other important accounts, such as your email or - banking. Please use caution when entering your password and consider - using a unique and strong password specifically for this - account. -
-
-

Password Hoppie

- - - Please be aware that the password you enter will be stored in plain - text in our system. This means that it will not be encrypted or - otherwise secured. We recommend that you do not use a password that - you also use for other important accounts, such as your email or - banking. Please use caution when entering your password and consider - using a unique and strong password specifically for this - account. -
- + + +
+

Realname

+ + +

Username

+ + +
+

Password

+ + + Please be aware that the password you enter will be stored in plain + text in our system. This means that it will not be encrypted or + otherwise secured. We recommend that you do not use a password that + you also use for other important accounts, such as your email or + banking. Please use caution when entering your password and consider + using a unique and strong password specifically for this + account. +
+
+

Password Hoppie

+ + + Please be aware that the password you enter will be stored in plain + text in our system. This means that it will not be encrypted or + otherwise secured. We recommend that you do not use a password that + you also use for other important accounts, such as your email or + banking. Please use caution when entering your password and consider + using a unique and strong password specifically for this + account. +
+ +
- +
+ If you want Eurosounds, please check the box below and click the download button.
+ I confirm that I would like to download the file. +
+ +
+ + + + + - + + \ No newline at end of file diff --git a/updater/src/index.js b/updater/src/index.js index 3eb390b..b8b8143 100644 --- a/updater/src/index.js +++ b/updater/src/index.js @@ -1,14 +1,6 @@ const { app, BrowserWindow, dialog, ipcMain } = require('electron'); -const { download } = require("electron-dl"); const path = require('path'); //Menu.setApplicationMenu(false); // Top Bar removal -var fs = require('fs'); -const yaml = require('js-yaml'); -var DecompressZip = require('decompress-zip'); -const { Http2ServerRequest } = require('http2'); -const superagent = require('superagent').agent(); -const http = require('node:http'); -const { options } = require('superagent'); // Handle creating/removing shortcuts on Windows when installing/uninstalling. // eslint-disable-next-line global-require @@ -16,13 +8,6 @@ if (require('electron-squirrel-startup')) { app.quit(); } -var filepath; -let data = { - -}; - - - const createWindow = () => { // Create the browser window. const mainWindow = new BrowserWindow({ @@ -37,80 +22,16 @@ const createWindow = () => { }); mainWindow.loadFile(path.join(__dirname, 'index.html')); mainWindow.webContents.openDevTools(); - /* - // Read system yaml - try { - let fileContents = fs.readFileSync('sectorfileUpdater.yaml', 'utf8'); - filepath = yaml.load(fileContents).folderPath; - } catch (e) { - - } - // Read config yaml - try { - let fileContents = fs.readFileSync(filepath + 'sectorfileUpdater.yaml', 'utf8'); - data = yaml.load(fileContents); - - console.log(data); - console.log(data.cid.id); - } catch (e) { - console.log(e); - ipcRenderer.send("savefile", {}); - }*/ - // Select Directory ipcMain.on('app-path', async(event, arg) => { filepath = await dialog.showOpenDialog(mainWindow, { properties: ['openDirectory'] }); - mainWindow.webContents.send("app-path", filepath.filePaths); + mainWindow.webContents.send("app-dest", filepath.filePaths); // Save directory to file }); - - // Download a file - ipcMain.on("download", (event, info) => { - // https://dms.pabr.de/s/SpBiQYADTNak7R5/download - info.properties.onProgress = status => mainWindow.webContents.send("download progress", status); - // http.request - let file = superagent.get('https://files.aero-nav.com/EDGG/Full_Package_20221104183433-221101-3.zip') - .set('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0') - .set('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8') - .set('Accept-Language', 'en-US,en;q=0.5') - .set('Accept-Encoding', 'gzip, deflate, br') - .set('DNT', '1') - .set('Connection', 'keep-alive') - .set('Referer', 'http://files.aero-nav.com/') - .set('Upgrade-Insecure-Requests', '1') - .set('Sec-Fetch-Dest', 'document') - .set('Sec-Fetch-Mode', 'navigate') - .set('Sec-Fetch-Site', 'cross-site') - .set('Sec-Fetch-User', '?1'); - // Working Download - download(BrowserWindow.getFocusedWindow(), info.url, info.properties) - .then(dl => mainWindow.webContents.send("download complete", dl.getSavePath())); - }); - - - // Write to a file - ipcMain.on("saveFile", () => { - let yamlStr = yaml.dump(data); - fs.writeFileSync(filepath + 'sectorfileUpdater.yaml', yamlStr, 'utf8'); - }); - - // Unzip content - ipcMain.on("extract", () => { - //console.log(directory.directoryPath); - var unzipper = new DecompressZip("F:\\Desktop.zip"); - unzipper.extract({ - path: "F:\\test\\" // directory.directoryPath - }); - // Notify "progress" of the decompressed files - unzipper.on('progress', function(fileIndex, fileCount) { - console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount); - }); - // Notify when everything is extracted - unzipper.on('extract', function(log) { - console.log('Finished extracting', log); - }); + ipcMain.on('download-progress', (event, args) => { + mainWindow.webContents.send("progressbar", args); }); }; @@ -128,8 +49,6 @@ app.on('ready', createWindow); // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q. app.on('window-all-closed', () => { - let yamlStr = yaml.dump(data); - fs.writeFileSync('data-out.yaml', yamlStr, 'utf8'); if (process.platform !== 'darwin') { app.quit(); } diff --git a/updater/src/renderer.js b/updater/src/renderer.js index 988b41a..ea3a9a8 100644 --- a/updater/src/renderer.js +++ b/updater/src/renderer.js @@ -1,7 +1,6 @@ const { ipcRenderer, app } = require('electron'); const superagent = require('superagent').agent(); var fs = require('fs'); -var DecompressZip = require('decompress-zip'); const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); @@ -19,12 +18,6 @@ files.addEventListener("change", () => { save(); }); -let updateBtn = document.getElementById('update'); -updateBtn.addEventListener('click', () => { - removeFileItems(); - getUpdates(); -}); - // Remove all files when changing Region --> WIP no nicht function removeFileItems() { var i, L = dropDownFiles.options.length - 1; @@ -37,26 +30,30 @@ function changeUserpath() { ipcRenderer.send('app-path'); } -ipcRenderer.on("app-path", (event, value) => { +ipcRenderer.on("app-dest", (event, value) => { systemstructure.path = value[0]; dirBox.value = value[0]; - fs.writeFileSync(systemstructure.path + "\\" + settings, JSON.stringify(structure, null, 4), 'utf8'); + console.log(systemstructure.path); + fs.writeFileSync(filePath + "\\" + systemsettings, JSON.stringify(systemstructure, null, 4), 'utf8'); + location.reload(); }) +let progressbarText = document.getElementById('progressbarText'); ipcRenderer.on("download progress", (event, progress) => { const cleanProgressInPercentages = Math.floor(progress.percent * 100); // Without decimal point document.getElementById('progressbar').value = cleanProgressInPercentages; }); -// let downloadBtn = document.getElementById('download'); -// downloadBtn.addEventListener('click', (e) => { -// var systemReadJson = JSON.parse(fs.readFileSync(systemsettings, 'utf8')); -// var userReadJson = JSON.parse(fs.readFileSync(systemReadJson.path + settings, 'utf8')); -// downloadFile(files.options[files.selectedIndex].href, systemReadJson.path); -// }); -let testBtn = document.getElementById('test'); -testBtn.addEventListener('click', (e) => { - var systemReadJson = JSON.parse(fs.readFileSync(systemsettings, 'utf8')); - var userReadJson = JSON.parse(fs.readFileSync(systemReadJson.path + settings, 'utf8')); - decompress(files.options[files.selectedIndex].href, systemReadJson.path) +downloadBtn.addEventListener('click', (e) => { + downloadFile(files.options[files.selectedIndex].href); +}); + +ipcRenderer.on('progressbar', (event, args) => { + progressbarText.innerHTML = args.progress + "%"; + progressbar.value = args.progress; +}); + +rating.addEventListener('click', (e) => { + structure.rating = rating.options[rating.selectedIndex].id; + save(); }); \ No newline at end of file diff --git a/updater/src/save.js b/updater/src/save.js index 4f6f817..56c5992 100644 --- a/updater/src/save.js +++ b/updater/src/save.js @@ -1,12 +1,18 @@ function save() { - // WORK HERE, new files - // Read config + // Read config, if there is none, the default will be used structure = JSON.parse(fs.readFileSync(systemstructure.path + "\\" + settings, 'utf8')); structure.region = gng.selectedIndex; structure.file = files.selectedIndex; if (structure.file == -1) { structure.file = 0; } + if (checkBoxRealname.checked == true) { + structure.realname.name = realnameInput.value; + structure.realname.save = true; + } else { + structure.realname.name = ""; + structure.realname.save = false; + } if (checkBoxUsername.checked == true) { structure.cid.id = usernameInput.value; structure.cid.save = true; @@ -28,9 +34,16 @@ function save() { structure.passwordhoppie.pass = ""; structure.passwordhoppie.save = false; } - // WIP - //structure.currentInstalledAirac = currentAirac; - //structure.version = airacversion; + structure.rating = rating.options[rating.selectedIndex].id; // Save config + console.log("Saving config"); + console.log(systemstructure.path + "\\" + settings); fs.writeFileSync(systemstructure.path + "\\" + settings, JSON.stringify(structure, null, 4), 'utf8'); -}; \ No newline at end of file +}; + + +function saveDownloadInfo(versionInfo) { + structure.currentInstalledAirac = versionInfo[0]; + structure.version = versionInfo[1]; + fs.writeFileSync(systemstructure.path + "\\" + settings, JSON.stringify(structure, null, 4), 'utf8'); +} \ No newline at end of file diff --git a/updater/src/startup.js b/updater/src/startup.js index 9894036..5ba00e1 100644 --- a/updater/src/startup.js +++ b/updater/src/startup.js @@ -1,61 +1,122 @@ let systemsettings = "systemfile.json"; let settings = "settings.json"; -var filepath = "F:\\02 Benutzer\\Chef\\Dokumente\\00 Git\\sectorfileupdater\\updater"; // Set to exe path ex: app.getPath('exe') + '\\' + systemsettings; +var filePath = "F:\\02 Benutzer\\Chef\\Dokumente\\00 Git\\sectorfileupdater\\updater"; // Set to exe path ex: app.getPath('exe') + '\\' + systemsettings; + async function firstStart() { - // await ipcRenderer.send('app-path'); - // await ipcRenderer.on("app-path", async(event, path) => { - // filepath = path; - // }); - // await delay(2000); // Not the best solution - // filepath = await app.getPath('home') + '\\' + systemsettings; - await console.log(filepath + "\\" + systemsettings); - if (await fs.existsSync(filepath + "\\" + systemsettings)) { - systemstructure = JSON.parse(fs.readFileSync(filepath + "\\" + systemsettings, 'utf8')); + // Get the file path + // filePath = await app.getPath('home'); + + // Check if the system settings file exists + if (fs.existsSync(`${filePath}/${systemsettings}`)) { + // If the file exists, read the structure + systemstructure = JSON.parse(fs.readFileSync(filePath + "\\" + systemsettings, 'utf8')); } else { + // If the file doesn't exist, get the user path and create the file await changeUserpath(); + // fs.writeFileSync(filePath + "\\" + systemsettings, JSON.stringify(systemstructure, null, 4), 'utf8'); } - delay(100); - if (await fs.existsSync(systemstructure.path + "\\" + settings)) { - console.log(fs.readFileSync(systemstructure.path + "\\" + settings, 'utf8')); - structure = JSON.parse(await fs.readFileSync(systemstructure.path + "\\" + settings, 'utf8')); - if (structure.cid.save == true) { - usernameInput.value = structure.cid.id; - } - if (structure.password.save == true) { - passwordInput.value = structure.password.pass; - } - if (structure.passwordhoppie.save == true) { - passwordhoppieInput.value = structure.passwordhoppie.pass; - } - if (structure.cid.save == true) { - checkBoxUsername.checked = true; - } - if (structure.password.save == true) { - checkBoxPassword.checked = true; - } - if (structure.passwordhoppie.save == true) { - checkBoxSavepwhoppie.checked = true; - } - dirBox.value = systemstructure.path; + // Check if the user settings file exists + if (fs.existsSync(`${systemstructure.path}/${settings}`)) { + // If the file exists, read the structure + structure = JSON.parse(fs.readFileSync(systemstructure.path + "\\" + settings, 'utf8')); } else { + // If the file doesn't exist, create the file with the default structure fs.writeFileSync(systemstructure.path + "\\" + settings, JSON.stringify(structure, null, 4), 'utf8'); - gng.selectedIndex = structure.region; - if (files.selectedIndex < 0) { - files.selectedIndex = 0; - } else { - files.selectedIndex = structure.file; - } - // Broken - } + + + // Perform other necessary actions await getUpdates(); + // Update the UI with the settings from the user structure + updateUI(); +} + +function updateUI() { + + if (structure.realname.save) { + realnameInput.value = structure.realname.name; + checkBoxRealname.checked = true; + } + if (structure.cid.save) { + usernameInput.value = structure.cid.id; + checkBoxUsername.checked = true; + } + if (structure.password.save) { + passwordInput.value = structure.password.pass; + checkBoxPassword.checked = true; + } + if (structure.passwordhoppie.save) { + passwordhoppieInput.value = structure.passwordhoppie.pass; + checkBoxSavepwhoppie.checked = true; + } + dirBox.value = systemstructure.path; + // Set the rating WIP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + var index = [...rating.options].findIndex(o => o.value == structure.rating); + if (index > -1) { + rating.options[index].selected = true; + } gng.selectedIndex = structure.region; if (files.selectedIndex < 0) { files.selectedIndex = 0; } else { files.selectedIndex = structure.file; } - await getFiles(); - save(); -} \ No newline at end of file +} + +// async function firstStart() { +// // await ipcRenderer.send('app-path'); +// // await ipcRenderer.on("app-path", async(event, path) => { +// // filepath = path; +// // }); +// // await delay(2000); // Not the best solution +// // filepath = await app.getPath('home') + '\\' + systemsettings; +// if (await fs.existsSync(filepath + "\\" + systemsettings)) { +// systemstructure = JSON.parse(fs.readFileSync(filepath + "\\" + systemsettings, 'utf8')); +// } else { +// await changeUserpath(); +// } +// delay(100); +// if (await fs.existsSync(systemstructure.path + "\\" + settings)) { +// structure = JSON.parse(await fs.readFileSync(systemstructure.path + "\\" + settings, 'utf8')); +// if (structure.cid.save == true) { +// usernameInput.value = structure.cid.id; +// } +// if (structure.password.save == true) { +// passwordInput.value = structure.password.pass; +// } +// if (structure.passwordhoppie.save == true) { +// passwordhoppieInput.value = structure.passwordhoppie.pass; +// } +// if (structure.cid.save == true) { +// checkBoxUsername.checked = true; +// } +// if (structure.password.save == true) { +// checkBoxPassword.checked = true; +// } +// if (structure.passwordhoppie.save == true) { +// checkBoxSavepwhoppie.checked = true; +// } +// dirBox.value = systemstructure.path; + +// } else { +// fs.writeFileSync(systemstructure.path + "\\" + settings, JSON.stringify(structure, null, 4), 'utf8'); +// gng.selectedIndex = structure.region; +// if (files.selectedIndex < 0) { +// files.selectedIndex = 0; +// } else { +// files.selectedIndex = structure.file; +// } +// // Broken + +// } +// await getUpdates(); +// gng.selectedIndex = structure.region; +// if (files.selectedIndex < 0) { +// files.selectedIndex = 0; +// } else { +// files.selectedIndex = structure.file; +// } +// await getFiles(); +// save(); +// } \ No newline at end of file diff --git a/updater/src/unzip.js b/updater/src/unzip.js deleted file mode 100644 index 761fe9f..0000000 --- a/updater/src/unzip.js +++ /dev/null @@ -1,29 +0,0 @@ -// Unzip file -function decompress(url, DESTINATION_PATH) { - let file = url.split('/').pop(); - var ZIP_FILE_PATH = DESTINATION_PATH + "\\" + file; - DESTINATION_PATH += "\\" + file.split('.')[0]; - console.log(DESTINATION_PATH); - var unzipper = new DecompressZip(ZIP_FILE_PATH); - - // Add the error event listener - unzipper.on('error', function(err) { - console.log('Caught an error', err); - }); - - // Notify when everything is extracted - unzipper.on('extract', function(log) { - console.log('Finished extracting', log); - }); - - // Notify "progress" of the decompressed files - unzipper.on('progress', function(fileIndex, fileCount) { - document.getElementById('progressbar').value = (0.5 + ((fileIndex + 1) / fileCount) / 2) * 100 - console.log(0.5 + ((fileIndex + 1) / fileCount) / 2); - }); - - // Start extraction of the content - unzipper.extract({ - path: DESTINATION_PATH - }); -} \ No newline at end of file diff --git a/updater/systemfile.json b/updater/systemfile.json index d7e76f3..131d113 100644 --- a/updater/systemfile.json +++ b/updater/systemfile.json @@ -1 +1,3 @@ -{ "path": "F:\\02 Benutzer\\Chef\\Dokumente\\00 Git\\sectorfileupdater\\updater" } \ No newline at end of file +{ + "path": "F:\\02 Benutzer\\Chef\\Downloads\\testing" +} \ No newline at end of file diff --git a/updater/yarn.lock b/updater/yarn.lock index 22bf0b6..90e080a 100644 --- a/updater/yarn.lock +++ b/updater/yarn.lock @@ -662,7 +662,12 @@ "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" "version" "2.2.3" -"binary@^0.3.0": +"big-integer@^1.6.17": + "integrity" "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + "resolved" "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" + "version" "1.6.51" + +"binary@^0.3.0", "binary@~0.3.0": "integrity" "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==" "resolved" "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" "version" "0.3.0" @@ -684,6 +689,11 @@ "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" "version" "3.7.2" +"bluebird@~3.4.1": + "integrity" "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" + "version" "3.4.7" + "boolean@^3.0.1": "integrity" "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==" "resolved" "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz" @@ -744,6 +754,11 @@ "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" "version" "1.1.2" +"buffer-indexof-polyfill@~1.0.0": + "integrity" "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" + "resolved" "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" + "version" "1.0.2" + "buffer@^5.5.0": "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" @@ -1165,6 +1180,13 @@ "commander" "2.9.0" "minimatch" "3.0.4" +"duplexer2@~0.1.4": + "integrity" "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==" + "resolved" "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "readable-stream" "^2.0.2" + "duplexer3@^0.1.4": "integrity" "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" @@ -1577,6 +1599,16 @@ "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" "version" "1.0.0" +"fstream@^1.0.12": + "integrity" "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==" + "resolved" "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "graceful-fs" "^4.1.2" + "inherits" "~2.0.0" + "mkdirp" ">=0.5 0" + "rimraf" "2" + "function-bind@^1.1.1": "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -1770,7 +1802,7 @@ "to-readable-stream" "^1.0.0" "url-parse-lax" "^3.0.0" -"graceful-fs@^4.1.2", "graceful-fs@^4.1.3", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.6": +"graceful-fs@^4.1.2", "graceful-fs@^4.1.3", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.2", "graceful-fs@^4.2.6": "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" "version" "4.2.10" @@ -1910,11 +1942,16 @@ "once" "^1.3.0" "wrappy" "1" -"inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@2": +"inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.0", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2": "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" "version" "2.0.4" +"inherits@2.0.3": + "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" + "ini@^1.3.4": "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" @@ -2027,6 +2064,11 @@ dependencies: "is-docker" "^2.0.0" +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + "isarray@0.0.1": "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" @@ -2101,6 +2143,11 @@ dependencies: "json-buffer" "3.0.1" +"listenercount@~1.0.1": + "integrity" "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" + "resolved" "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" + "version" "1.0.1" + "load-json-file@^2.0.0": "integrity" "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==" "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" @@ -2394,6 +2441,13 @@ "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" "version" "1.0.4" +"mkdirp@>=0.5 0": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + "mkpath@^0.1.0": "integrity" "sha512-bauHShmaxVQiEvlrAPWxSPn8spSL8gDVRl11r8vLT4r/KdnknLqtqwQbToZ2Oa8sJkExYY1z6/d+X7pNiqo4yg==" "resolved" "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz" @@ -2745,6 +2799,14 @@ dependencies: "pify" "^2.0.0" +"path@^0.12.7": + "integrity" "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==" + "resolved" "https://registry.npmjs.org/path/-/path-0.12.7.tgz" + "version" "0.12.7" + dependencies: + "process" "^0.11.1" + "util" "^0.10.3" + "pend@~1.2.0": "integrity" "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" "resolved" "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" @@ -2792,6 +2854,16 @@ dependencies: "parse-ms" "^2.1.0" +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"process@^0.11.1": + "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + "progress@^2.0.3": "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" @@ -2891,6 +2963,19 @@ "isarray" "0.0.1" "string_decoder" "~0.10.x" +"readable-stream@^2.0.2": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + "readable-stream@^3.4.0": "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" @@ -2909,6 +2994,19 @@ "string_decoder" "^1.1.1" "util-deprecate" "^1.0.1" +"readable-stream@~2.3.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + "require-directory@^2.1.1": "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -2996,6 +3094,13 @@ dependencies: "glob" "^7.1.3" +"rimraf@2": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + "roarr@^2.15.3": "integrity" "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==" "resolved" "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz" @@ -3027,6 +3132,11 @@ dependencies: "tslib" "^2.1.0" +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + "safe-buffer@~5.2.0": "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" @@ -3076,6 +3186,11 @@ "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" "version" "2.0.0" +"setimmediate@~1.0.4": + "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + "version" "1.0.5" + "shebang-command@^1.2.0": "integrity" "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==" "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" @@ -3222,6 +3337,13 @@ "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" "version" "0.10.31" +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + "string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -3449,6 +3571,22 @@ "modify-filename" "^1.1.0" "path-exists" "^4.0.0" +"unzipper@^0.10.11": + "integrity" "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==" + "resolved" "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz" + "version" "0.10.11" + dependencies: + "big-integer" "^1.6.17" + "binary" "~0.3.0" + "bluebird" "~3.4.1" + "buffer-indexof-polyfill" "~1.0.0" + "duplexer2" "~0.1.4" + "fstream" "^1.0.12" + "graceful-fs" "^4.2.2" + "listenercount" "~1.0.1" + "readable-stream" "~2.3.6" + "setimmediate" "~1.0.4" + "url-parse-lax@^3.0.0": "integrity" "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==" "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" @@ -3464,11 +3602,18 @@ "execa" "^1.0.0" "mem" "^4.3.0" -"util-deprecate@^1.0.1": +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" "version" "1.0.2" +"util@^0.10.3": + "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + "version" "0.10.4" + dependencies: + "inherits" "2.0.3" + "validate-npm-package-license@^3.0.1": "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"