diff --git a/package-lock.json b/package-lock.json index bdf15aa..dab8299 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,9 @@ "highlight.js": "^11.11.1", "load-json-file": "^7.0.1", "make-dir": "^5.1.0", + "markdown-it": "^14.1.1", "pinia": "^3.0.4", + "simple-git": "^3.33.0", "vue-router": "^4.6.4", "write-json-file": "^7.0.0" }, @@ -1763,6 +1765,21 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT" + }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -6834,6 +6851,15 @@ "immediate": "~3.0.5" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/load-json-file": { "version": "7.0.1", "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-7.0.1.tgz", @@ -6994,6 +7020,35 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/matcher/-/matcher-3.0.0.tgz", @@ -7024,6 +7079,12 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", @@ -8071,6 +8132,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/quansync": { "version": "0.2.11", "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.11.tgz", @@ -8826,6 +8896,21 @@ "dev": true, "license": "ISC" }, + "node_modules/simple-git": { + "version": "3.33.0", + "resolved": "https://registry.npmmirror.com/simple-git/-/simple-git-3.33.0.tgz", + "integrity": "sha512-D4V/tGC2sjsoNhoMybKyGoE+v8A60hRawKQ1iFRA1zwuDgGZCBJ4ByOzZ5J8joBbi4Oam0qiPH+GhzmSBwbJng==", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -9453,6 +9538,12 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, "node_modules/ufo": { "version": "1.6.3", "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.3.tgz", diff --git a/package.json b/package.json index 30a9ac9..177e56b 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,9 @@ "highlight.js": "^11.11.1", "load-json-file": "^7.0.1", "make-dir": "^5.1.0", + "markdown-it": "^14.1.1", "pinia": "^3.0.4", + "simple-git": "^3.33.0", "vue-router": "^4.6.4", "write-json-file": "^7.0.0" }, diff --git a/src/main/index.ts b/src/main/index.ts index f8bf026..2b57c4c 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -148,6 +148,10 @@ app.whenReady().then(async () => { ipcMain.handle('window:closeWindow', () => { mainWindow?.hide() }) + ipcMain.handle('window:exit', () => { + global.isQuiting = true + app.quit() + }) ipcMain.handle('codeLaunchpad:getIDEs', getIDEs) ipcMain.handle('codeLaunchpad:checkIDEs', checkIDEs) ipcMain.handle('codeLaunchpad:getIDEsVersion', getIDEsVersion) diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index bdd528f..1664dab 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -16,6 +16,7 @@ declare global { _minimize: () => Promise _maximize: () => Promise _closeWindow: () => Promise + _exit: () => Promise } codeLaunchpad: { _getIDEs: () => Promise diff --git a/src/preload/index.ts b/src/preload/index.ts index a491497..5d2895b 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -13,7 +13,8 @@ const api = { _closeCodeLaunchpad: () => ipcRenderer.invoke('tools:closeCodeLaunchpad'), _minimize: () => ipcRenderer.invoke('window:minimize'), _maximize: () => ipcRenderer.invoke('window:maximize'), - _closeWindow: () => ipcRenderer.invoke('window:closeWindow') + _closeWindow: () => ipcRenderer.invoke('window:closeWindow'), + _exit: () => ipcRenderer.invoke('window:exit') } const codeLaunchpadApi = { diff --git a/src/renderer/src/components/SidebarRouter.vue b/src/renderer/src/components/SidebarRouter.vue index e586614..8201539 100644 --- a/src/renderer/src/components/SidebarRouter.vue +++ b/src/renderer/src/components/SidebarRouter.vue @@ -27,8 +27,33 @@ const menuOptions: MenuOption[] = [ function handleUpdateValue(key: string): void { router.push(key) } + +function exit(): void { + window.api._exit() +} + +