diff --git a/package-lock.json b/package-lock.json index 4c4cae8..a14f0c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "roamjs-components", - "version": "0.88.4", + "version": "0.89.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "roamjs-components", - "version": "0.88.4", + "version": "0.89.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index a7644c0..f4507d6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "roamjs-components", "description": "Expansive toolset, utilities, & components for developing RoamJS extensions.", - "version": "0.88.4", + "version": "0.89.0", "main": "index.js", "types": "index.d.ts", "scripts": { diff --git a/src/util/runExtension.ts b/src/util/runExtension.ts index 3d0be97..bb2592c 100644 --- a/src/util/runExtension.ts +++ b/src/util/runExtension.ts @@ -19,6 +19,20 @@ type RunReturn = type RunExtension = (args: OnloadArgs) => Promise; +const renderLoadFailure = ({ + id, + content, +}: { + id: string; + content: string; +}) => { + try { + renderToast({ id, content, intent: "danger" }); + } catch (toastError) { + console.error("Failed to display the extension load error.", toastError); + } +}; + const runExtension = ( run: RunExtension ): { onload: (args: OnloadArgs) => void; onunload: () => void } => { @@ -128,14 +142,23 @@ const runExtension = ( }) .catch((e) => { const error = e as Error; + console.error(`Failed to load ${extensionId} extension.`, error); if (getNodeEnv() === "development") { - renderToast({ + renderLoadFailure({ id: "roamjs-extension-error", content: `Failed to load ${extensionId} extension.`, - intent: "danger", }); return; } + let settings: Record = {}; + try { + settings = args.extensionAPI?.settings?.getAll?.() || {}; + } catch (settingsError) { + console.error( + "Failed to read extension settings for the error report.", + settingsError + ); + } apiPost({ domain: "https://api.samepage.network", path: "errors", @@ -144,8 +167,8 @@ const runExtension = ( type: "RoamJS Extension Failed to Load", data: { extensionId, - settings: args.extensionAPI.settings.getAll(), - roamDepotVersion: args.extension.version, + settings, + roamDepotVersion: args.extension?.version || "unknown", }, message: error.message, stack: error.stack, @@ -158,17 +181,19 @@ const runExtension = ( }, }) .then(() => - renderToast({ + renderLoadFailure({ id: "roamjs-extension-error", content: `Failed to load ${extensionId} extension. An Error Report has been sent to the SamePage team.`, - intent: "danger", }) ) - .catch(() => { - renderToast({ + .catch((reportError) => { + console.error( + "Failed to send the extension load error report.", + reportError + ); + renderLoadFailure({ id: "roamjs-email-error", content: `Failed to load ${extensionId} extension. The Error Report also failed to send to the SamePage team, please reach out to them directly at support@samepage.network.`, - intent: "danger", }); }); });