From f0e7fd7c38a5f73bbb047fb43b39f5f43a756d64 Mon Sep 17 00:00:00 2001 From: an-lee Date: Wed, 27 Nov 2024 09:53:38 +0800 Subject: [PATCH] handle unhandle exception/rejection in process level (#1210) --- enjoy/package.json | 2 ++ enjoy/src/main.ts | 41 ++++++++++++++++++++++++- yarn.lock | 75 +++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 110 insertions(+), 8 deletions(-) diff --git a/enjoy/package.json b/enjoy/package.json index db441e13f..c4fba63c2 100644 --- a/enjoy/package.json +++ b/enjoy/package.json @@ -146,6 +146,7 @@ "electron-log": "^5.2.3", "electron-settings": "^4.0.4", "electron-squirrel-startup": "^1.0.1", + "electron-unhandled": "^5.0.0", "ffmpeg-static": "^5.2.0", "file-type": "^19.6.0", "fluent-ffmpeg": "^2.1.3", @@ -166,6 +167,7 @@ "microsoft-cognitiveservices-speech-sdk": "^1.41.0", "mime-types": "^2.1.35", "mustache": "^4.2.0", + "new-github-issue-url": "^1.0.0", "next-themes": "^0.4.3", "openai": "^4.73.1", "pitchfinder": "^2.3.2", diff --git a/enjoy/src/main.ts b/enjoy/src/main.ts index 19aa372e0..2a5f249c0 100644 --- a/enjoy/src/main.ts +++ b/enjoy/src/main.ts @@ -1,4 +1,4 @@ -import { app, BrowserWindow, protocol, net } from "electron"; +import { app, BrowserWindow, protocol, net, shell } from "electron"; import path from "path"; import fs from "fs-extra"; import settings from "@main/settings"; @@ -8,6 +8,8 @@ import ElectronSquirrelStartup from "electron-squirrel-startup"; import contextMenu from "electron-context-menu"; import { t } from "i18next"; import { updateElectronApp, UpdateSourceType } from "update-electron-app"; +import unhandled from "electron-unhandled"; +import newGithubIssueUrl from "new-github-issue-url"; const logger = log.scope("main"); @@ -133,6 +135,43 @@ app.on("ready", async () => { }); mainWindow.init(); + + unhandled({ + showDialog: true, + logger: logger.error, + reportButton: (error) => { + const url = newGithubIssueUrl({ + user: "ZuodaoTech", + repo: "everyone-can-use-english", + title: "Unhandled Error", + body: ` +## Node.js error stack + +**Message:** + +\`\`\` +${error.message} +\`\`\` + +**Stack:** + +\`\`\` +${error.stack} +\`\`\` + +**Environment:** + +\`\`\` +${app.name} ${app.getVersion()} +Electron ${process.versions.electron} +${process.platform} ${process.arch} +Locale: ${app.getLocale()} +\`\`\``, + }); + + shell.openExternal(url); + }, + }); }); // Quit when all windows are closed, except on macOS. There, it's common diff --git a/yarn.lock b/yarn.lock index a8d02f132..e90800ca7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9858,6 +9858,15 @@ __metadata: languageName: node linkType: hard +"clean-stack@npm:^5.2.0": + version: 5.2.0 + resolution: "clean-stack@npm:5.2.0" + dependencies: + escape-string-regexp: "npm:5.0.0" + checksum: 10c0/0de47a4152e49dcdeede5f47d7bb9a39a3ea748acb1cd2f0160dbee972d920be81390cb4c5566e6b795791b9efb12359e89fdd7c2e63b36025d59529558570f1 + languageName: node + linkType: hard + "clear@npm:^0.1.0": version: 0.1.0 resolution: "clear@npm:0.1.0" @@ -11828,6 +11837,19 @@ __metadata: languageName: node linkType: hard +"electron-unhandled@npm:^5.0.0": + version: 5.0.0 + resolution: "electron-unhandled@npm:5.0.0" + dependencies: + clean-stack: "npm:^5.2.0" + electron-is-dev: "npm:^3.0.1" + ensure-error: "npm:^4.0.0" + lodash.debounce: "npm:^4.0.8" + serialize-error: "npm:^11.0.3" + checksum: 10c0/5d2d6698417103c7e684f73777d96f020f6d041912ee263162e94bdc13aac24b9881ec279f8c09c1b40489703d986f2700947f82fea26d87a16fae28ed9bce34 + languageName: node + linkType: hard + "electron-winstaller@npm:^5.3.0": version: 5.4.0 resolution: "electron-winstaller@npm:5.4.0" @@ -12079,6 +12101,7 @@ __metadata: electron-playwright-helpers: "npm:^1.7.1" electron-settings: "npm:^4.0.4" electron-squirrel-startup: "npm:^1.0.1" + electron-unhandled: "npm:^5.0.0" eslint: "npm:^9.15.0" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -12103,6 +12126,7 @@ __metadata: microsoft-cognitiveservices-speech-sdk: "npm:^1.41.0" mime-types: "npm:^2.1.35" mustache: "npm:^4.2.0" + new-github-issue-url: "npm:^1.0.0" next-themes: "npm:^0.4.3" octokit: "npm:^4.0.2" openai: "npm:^4.73.1" @@ -12154,6 +12178,13 @@ __metadata: languageName: unknown linkType: soft +"ensure-error@npm:^4.0.0": + version: 4.0.0 + resolution: "ensure-error@npm:4.0.0" + checksum: 10c0/79a986b54574c221923fafb00e25f86963a73195d5dd0d67d0c9ca9ab35a7cbc10b634e6954d1912206b9e18eabbc4ebd18af9200e521b2a603c3d388b98fa08 + languageName: node + linkType: hard + "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -12520,6 +12551,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:5.0.0, escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.2": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -12534,13 +12572,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^5.0.0": - version: 5.0.0 - resolution: "escape-string-regexp@npm:5.0.0" - checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 - languageName: node - linkType: hard - "escodegen@npm:^2.1.0": version: 2.1.0 resolution: "escodegen@npm:2.1.0" @@ -16135,6 +16166,13 @@ __metadata: languageName: node linkType: hard +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + "lodash.defaults@npm:^4.2.0": version: 4.2.0 resolution: "lodash.defaults@npm:4.2.0" @@ -17765,6 +17803,13 @@ __metadata: languageName: node linkType: hard +"new-github-issue-url@npm:^1.0.0": + version: 1.0.0 + resolution: "new-github-issue-url@npm:1.0.0" + checksum: 10c0/6e255d55d62b1e772ee94a0aad7713d61f8cb35d20f3fc5cd5c3e7b62db57e6bb426ed922c8014a83e437a6e07756f721a5b3b9c355ae8b97e24ad302c52f248 + languageName: node + linkType: hard + "next-themes@npm:^0.4.3": version: 0.4.3 resolution: "next-themes@npm:0.4.3" @@ -21298,6 +21343,15 @@ __metadata: languageName: node linkType: hard +"serialize-error@npm:^11.0.3": + version: 11.0.3 + resolution: "serialize-error@npm:11.0.3" + dependencies: + type-fest: "npm:^2.12.2" + checksum: 10c0/7263603883b8936650819f0fd5150d41427b317432678b21722c54b85367ae15b8552865eb7f3f39ba71a32a003730a2e2e971e6909431eb54db70a3ef8eca17 + languageName: node + linkType: hard + "serialize-error@npm:^7.0.1": version: 7.0.1 resolution: "serialize-error@npm:7.0.1" @@ -22758,6 +22812,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^2.12.2": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: 10c0/a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + "type-fest@npm:^3.1.0": version: 3.13.1 resolution: "type-fest@npm:3.13.1"