allow only a single instance, fix updating #2
| @@ -245,6 +245,11 @@ function downloadUpdateFiles(osuPath, updateFiles) { | ||||
|   }; | ||||
| } | ||||
|  | ||||
| function runOsuUpdater(osuPath, onExit) { | ||||
|   const osuExecuteable = path.join(osuPath, "osu!.exe"); | ||||
|   runFile(osuPath, osuExecuteable, ["-repair"], onExit); | ||||
| } | ||||
|  | ||||
| function runOsuWithDevServer(osuPath, serverDomain, onExit) { | ||||
|   const osuExecuteable = path.join(osuPath, "osu!.exe"); | ||||
|   runFile(osuPath, osuExecuteable, ["-devserver", serverDomain], onExit); | ||||
| @@ -475,4 +480,5 @@ module.exports = { | ||||
|   replaceUIFile, | ||||
|   findOsuInstallation, | ||||
|   updateOsuConfigHashes, | ||||
|   runOsuUpdater, | ||||
| }; | ||||
|   | ||||
							
								
								
									
										60
									
								
								main.js
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								main.js
									
									
									
									
									
								
							| @@ -24,16 +24,18 @@ const { | ||||
|   replaceUIFile, | ||||
|   findOsuInstallation, | ||||
|   updateOsuConfigHashes, | ||||
|   runOsuUpdater, | ||||
| } = require("./electron/osuUtil"); | ||||
| const { formatBytes } = require("./electron/formattingUtil"); | ||||
| const windowName = require("get-window-by-name"); | ||||
| const { existsSync } = require("fs"); | ||||
| const fs = require("fs"); | ||||
| const { runFileDetached } = require("./electron/executeUtil"); | ||||
| const richPresence = require("./electron/richPresence"); | ||||
| const cryptUtil = require("./electron/cryptoUtil"); | ||||
| const { getHwId } = require("./electron/hwidUtil"); | ||||
| const { appName, appVersion } = require("./electron/appInfo"); | ||||
| const { updateAvailable, releasesUrl } = require("./electron/updateCheck"); | ||||
| const fkill = require("fkill"); | ||||
|  | ||||
| // Keep a global reference of the window object, if you don't, the window will | ||||
| // be closed automatically when the JavaScript object is garbage collected. | ||||
| @@ -42,8 +44,6 @@ let osuCheckInterval; | ||||
| let userOsuPath; | ||||
| let osuLoaded = false; | ||||
| let patch = false; | ||||
| let lastOsuStatus = ""; | ||||
| let lastStatusUpdate; | ||||
|  | ||||
| let currentUser = undefined; | ||||
|  | ||||
| @@ -58,6 +58,7 @@ function startOsuStatus() { | ||||
|       return; | ||||
|     } | ||||
|     const firstInstance = osuWindowTitle[0]; | ||||
|  | ||||
|     if (firstInstance) { | ||||
|       if (!osuLoaded) { | ||||
|         osuLoaded = true; | ||||
| @@ -68,7 +69,7 @@ function startOsuStatus() { | ||||
|               "EZPPLauncher", | ||||
|               "patcher.exe", | ||||
|             ); | ||||
|             if (existsSync(patcherExecuteable)) { | ||||
|             if (fs.existsSync(patcherExecuteable)) { | ||||
|               runFileDetached(userOsuPath, patcherExecuteable); | ||||
|             } | ||||
|           } | ||||
| @@ -477,12 +478,57 @@ function registerIPCPipes() { | ||||
|       await new Promise((res) => setTimeout(res, 1000)); | ||||
|     } | ||||
|  | ||||
|     mainWindow.webContents.send("ezpplauncher:launchstatus", { | ||||
|       status: "Launching osu! updater to verify...", | ||||
|     }); | ||||
|     await new Promise((res) => setTimeout(res, 1000)); | ||||
|  | ||||
|     await new Promise((res) => { | ||||
|       runOsuUpdater(osuPath, async () => { | ||||
|         await new Promise((res) => setTimeout(res, 500)); | ||||
|         const terminationThread = setInterval(async () => { | ||||
|           const osuWindowTitle = windowName.getWindowText("osu!.exe"); | ||||
|           if (osuWindowTitle.length < 0) { | ||||
|             return; | ||||
|           } | ||||
|           const firstInstance = osuWindowTitle[0]; | ||||
|           if (firstInstance) { | ||||
|             const processId = firstInstance.processId; | ||||
|             await fkill(processId, { force: true, silent: true }); | ||||
|             clearInterval(terminationThread); | ||||
|             res(); | ||||
|           } | ||||
|         }, 500); | ||||
|       }); | ||||
|     }); | ||||
|  | ||||
|     await new Promise((res) => setTimeout(res, 1000)); | ||||
|  | ||||
|     mainWindow.webContents.send("ezpplauncher:launchstatus", { | ||||
|       status: "Preparing launch...", | ||||
|     }); | ||||
|  | ||||
|     await updateOsuConfigHashes(osuPath); | ||||
|     await replaceUIFile(osuPath, false); | ||||
|  | ||||
|     const forceUpdateFiles = [ | ||||
|       ".require_update", | ||||
|       "help.txt", | ||||
|       "_pending", | ||||
|     ]; | ||||
|     //TODO: needs testing | ||||
|     try { | ||||
|       for (const updateFileName of forceUpdateFiles) { | ||||
|         const updateFile = path.join(osuPath, updateFileName); | ||||
|         if (fs.existsSync(updateFile)) { | ||||
|           await fs.promises.rm(updateFile, { | ||||
|             force: true, | ||||
|             recursive: (await fs.promises.lstat(updateFile)).isDirectory, | ||||
|           }); | ||||
|         } | ||||
|       } | ||||
|     } catch {} | ||||
|  | ||||
|     const userConfig = getUserConfig(osuPath); | ||||
|     richPresence.updateVersion(await userConfig.get("LastVersion")); | ||||
|     richPresence.update(); | ||||
| @@ -537,6 +583,12 @@ function registerIPCPipes() { | ||||
| } | ||||
|  | ||||
| function createWindow() { | ||||
|   const gotTheLock = app.requestSingleInstanceLock(); | ||||
|   if (!gotTheLock) { | ||||
|     app.quit(); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   setupTitlebar(); | ||||
|  | ||||
|   // Create the browser window. | ||||
|   | ||||
							
								
								
									
										220
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										220
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -18,6 +18,7 @@ | ||||
|         "custom-electron-titlebar": "^4.2.7", | ||||
|         "discord-auto-rpc": "^1.0.17", | ||||
|         "electron-serve": "^1.1.0", | ||||
|         "fkill": "^7.2.1", | ||||
|         "get-window-by-name": "^2.0.0", | ||||
|         "regedit-rs": "^1.0.2", | ||||
|         "semver": "^7.5.4", | ||||
| @@ -1840,7 +1841,6 @@ | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", | ||||
|       "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "clean-stack": "^2.0.0", | ||||
|         "indent-string": "^4.0.0" | ||||
| @@ -2081,6 +2081,14 @@ | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/arrify": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", | ||||
|       "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/assert-plus": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", | ||||
| @@ -2722,7 +2730,6 @@ | ||||
|       "version": "2.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", | ||||
|       "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
| @@ -3024,7 +3031,6 @@ | ||||
|       "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", | ||||
| @@ -3919,6 +3925,44 @@ | ||||
|       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/execa": { | ||||
|       "version": "5.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", | ||||
|       "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", | ||||
|       "dependencies": { | ||||
|         "cross-spawn": "^7.0.3", | ||||
|         "get-stream": "^6.0.0", | ||||
|         "human-signals": "^2.1.0", | ||||
|         "is-stream": "^2.0.0", | ||||
|         "merge-stream": "^2.0.0", | ||||
|         "npm-run-path": "^4.0.1", | ||||
|         "onetime": "^5.1.2", | ||||
|         "signal-exit": "^3.0.3", | ||||
|         "strip-final-newline": "^2.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sindresorhus/execa?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/execa/node_modules/get-stream": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", | ||||
|       "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/execa/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==" | ||||
|     }, | ||||
|     "node_modules/expand-template": { | ||||
|       "version": "2.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", | ||||
| @@ -4054,6 +4098,26 @@ | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fkill": { | ||||
|       "version": "7.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/fkill/-/fkill-7.2.1.tgz", | ||||
|       "integrity": "sha512-eN9cmsIlRdq06wu3m01OOEgQf5Xh/M7REm0jfZ4eL3V3XisjXzfRq3iyqtKS+FhO6wB36FvWRiRGdeSx5KpLAQ==", | ||||
|       "dependencies": { | ||||
|         "aggregate-error": "^3.1.0", | ||||
|         "arrify": "^2.0.1", | ||||
|         "execa": "^5.0.0", | ||||
|         "pid-port": "^0.1.0", | ||||
|         "process-exists": "^4.0.0", | ||||
|         "ps-list": "^7.2.0", | ||||
|         "taskkill": "^3.1.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/flowbite": { | ||||
|       "version": "2.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.2.1.tgz", | ||||
| @@ -4648,6 +4712,14 @@ | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/human-signals": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", | ||||
|       "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", | ||||
|       "engines": { | ||||
|         "node": ">=10.17.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/humanize-ms": { | ||||
|       "version": "1.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", | ||||
| @@ -4794,7 +4866,6 @@ | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", | ||||
|       "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
| @@ -4951,6 +5022,17 @@ | ||||
|         "@types/estree": "*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-stream": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", | ||||
|       "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-unicode-supported": { | ||||
|       "version": "0.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", | ||||
| @@ -5307,6 +5389,11 @@ | ||||
|       "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", | ||||
|       "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" | ||||
|     }, | ||||
|     "node_modules/merge-stream": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", | ||||
|       "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" | ||||
|     }, | ||||
|     "node_modules/merge2": { | ||||
|       "version": "1.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", | ||||
| @@ -5364,7 +5451,6 @@ | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", | ||||
|       "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
| @@ -5821,6 +5907,17 @@ | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/npm-run-path": { | ||||
|       "version": "4.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", | ||||
|       "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", | ||||
|       "dependencies": { | ||||
|         "path-key": "^3.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/npmlog": { | ||||
|       "version": "6.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", | ||||
| @@ -5887,7 +5984,6 @@ | ||||
|       "version": "5.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", | ||||
|       "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "mimic-fn": "^2.1.0" | ||||
|       }, | ||||
| @@ -6012,7 +6108,6 @@ | ||||
|       "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" | ||||
|       } | ||||
| @@ -6106,6 +6201,20 @@ | ||||
|         "url": "https://github.com/sponsors/jonschlinkert" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/pid-port": { | ||||
|       "version": "0.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/pid-port/-/pid-port-0.1.1.tgz", | ||||
|       "integrity": "sha512-boqPJtSgZC6KOgXKNPC+/XR3xwVtpOtaLa7JLcdf8jfVe0ZM2TwllBXxxLUO8GQbOLJ4/hEtf2+L1QCKbaoHUg==", | ||||
|       "dependencies": { | ||||
|         "execa": "^5.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/pirates": { | ||||
|       "version": "4.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", | ||||
| @@ -6774,6 +6883,28 @@ | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/process-exists": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/process-exists/-/process-exists-4.1.0.tgz", | ||||
|       "integrity": "sha512-BBJoiorUKoP2AuM5q/yKwIfT1YWRHsaxjW+Ayu9erLhqKOfnXzzVVML0XTYoQZuI1YvcWKmc1dh06DEy4+KzfA==", | ||||
|       "dependencies": { | ||||
|         "ps-list": "^6.3.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/process-exists/node_modules/ps-list": { | ||||
|       "version": "6.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz", | ||||
|       "integrity": "sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/progress": { | ||||
|       "version": "2.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", | ||||
| @@ -6815,6 +6946,17 @@ | ||||
|       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", | ||||
|       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" | ||||
|     }, | ||||
|     "node_modules/ps-list": { | ||||
|       "version": "7.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz", | ||||
|       "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==", | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/pump": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", | ||||
| @@ -7671,7 +7813,6 @@ | ||||
|       "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" | ||||
|       }, | ||||
| @@ -7683,7 +7824,6 @@ | ||||
|       "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" | ||||
|       } | ||||
| @@ -8030,6 +8170,14 @@ | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/strip-final-newline": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", | ||||
|       "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/strip-indent": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", | ||||
| @@ -8694,6 +8842,59 @@ | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/taskkill": { | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/taskkill/-/taskkill-3.1.0.tgz", | ||||
|       "integrity": "sha512-5KcOFzPvd1nGFVrmB7H4+QAWVjYOf//+QTbOj0GpXbqtqbKGWVczG+rq6VhXAtdtlKLTs16NAmHRyF5vbggQ2w==", | ||||
|       "dependencies": { | ||||
|         "arrify": "^2.0.1", | ||||
|         "execa": "^3.3.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/taskkill/node_modules/execa": { | ||||
|       "version": "3.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", | ||||
|       "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", | ||||
|       "dependencies": { | ||||
|         "cross-spawn": "^7.0.0", | ||||
|         "get-stream": "^5.0.0", | ||||
|         "human-signals": "^1.1.1", | ||||
|         "is-stream": "^2.0.0", | ||||
|         "merge-stream": "^2.0.0", | ||||
|         "npm-run-path": "^4.0.0", | ||||
|         "onetime": "^5.1.0", | ||||
|         "p-finally": "^2.0.0", | ||||
|         "signal-exit": "^3.0.2", | ||||
|         "strip-final-newline": "^2.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": "^8.12.0 || >=9.7.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/taskkill/node_modules/human-signals": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", | ||||
|       "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", | ||||
|       "engines": { | ||||
|         "node": ">=8.12.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/taskkill/node_modules/p-finally": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", | ||||
|       "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/taskkill/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==" | ||||
|     }, | ||||
|     "node_modules/temp-file": { | ||||
|       "version": "3.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", | ||||
| @@ -9159,7 +9360,6 @@ | ||||
|       "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" | ||||
|       }, | ||||
|   | ||||
| @@ -45,6 +45,7 @@ | ||||
|     "custom-electron-titlebar": "^4.2.7", | ||||
|     "discord-auto-rpc": "^1.0.17", | ||||
|     "electron-serve": "^1.1.0", | ||||
|     "fkill": "^7.2.1", | ||||
|     "get-window-by-name": "^2.0.0", | ||||
|     "regedit-rs": "^1.0.2", | ||||
|     "semver": "^7.5.4", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user