diff --git a/src/extensions/extension-discovery.ts b/src/extensions/extension-discovery.ts index f079af1531..f26e2c94e6 100644 --- a/src/extensions/extension-discovery.ts +++ b/src/extensions/extension-discovery.ts @@ -311,10 +311,7 @@ export class ExtensionDiscovery { */ protected async getByManifest(manifestPath: string, { isBundled = false } = {}): Promise { try { - console.log(manifestPath); const manifest = await fse.readJson(manifestPath); - - console.log(manifest); const installedManifestPath = this.getInstalledManifestPath(manifest.name); const isEnabled = isBundled || extensionsStore.isEnabled(installedManifestPath); diff --git a/src/renderer/components/+extensions/extensions.tsx b/src/renderer/components/+extensions/extensions.tsx index abd99a76c5..93e847f6ca 100644 --- a/src/renderer/components/+extensions/extensions.tsx +++ b/src/renderer/components/+extensions/extensions.tsx @@ -24,6 +24,28 @@ import { Spinner } from "../spinner/spinner"; import { TooltipPosition } from "../tooltip"; import { ExtensionInstallationState, ExtensionInstallationStateStore } from "./extension-install.store"; +function getMessageFromError(error: any): string { + if (!error || typeof error !== "object") { + return "an error has occured"; + } + + if (error.message) { + return String(error.message); + } + + if (error.err) { + return String(error.err); + } + + const rawMessage = String(error); + + if (rawMessage === String({})) { + return "an error has occured"; + } + + return rawMessage; +} + interface InstallRequest { fileName: string; filePath?: string; @@ -58,9 +80,10 @@ async function uninstallExtension(extensionId: LensExtensionId, manifest: LensEx return true; } catch (error) { - Notifications.error( -

Uninstalling extension {displayName} has failed: {error?.message ?? error?.toString() ?? ""}

- ); + const message = getMessageFromError(error); + + logger.info(`[EXTENSION-UNINSTALL]: uninstalling ${displayName} has failed: ${error}`, { error }); + Notifications.error(

Uninstalling extension {displayName} has failed: {message}

); return false; } finally { @@ -102,7 +125,10 @@ async function preloadExtension({ fileName, data, filePath }: InstallRequest, { return { filePath, data, fileName }; } catch(error) { if (showError) { - Notifications.error(`Error while reading "${filePath}": ${String(error)}`); + const message = getMessageFromError(error); + + logger.info(`[EXTENSION-INSTALL]: preloading ${filePath} has failed: ${message}`, { error }); + Notifications.error(`Error while reading "${filePath}": ${message}`); } } @@ -162,10 +188,13 @@ async function createTempFilesAndValidate(request: InstallRequestPreloaded, { sh fse.unlink(tempFile).catch(noop); // remove invalid temp package if (showErrors) { + const message = getMessageFromError(error); + + logger.info(`[EXTENSION-INSTALLATION]: installing ${request.fileName} has failed: ${message}`, { error }); Notifications.error(

Installing {request.fileName} has failed, skipping.

-

Reason: {String(error)}

+

Reason: {message}

); } @@ -215,9 +244,10 @@ async function unpackExtension(request: InstallRequestValidated, disposeDownload

Extension {displayName} successfully installed!

); } catch (error) { - Notifications.error( -

Installing extension {displayName} has failed: {error}

- ); + const message = getMessageFromError(error); + + logger.info(`[EXTENSION-INSTALLATION]: installing ${request.fileName} has failed: ${message}`, { error }); + Notifications.error(

Installing extension {displayName} has failed: {message}

); } finally { // Remove install state once finished ExtensionInstallationStateStore.clearInstalling(id); @@ -267,7 +297,7 @@ async function requestInstall(request: InstallRequest, d?: Disposer): Promise , { onClose() { - disposer(); + dispose(); } } ); @@ -318,12 +348,13 @@ async function installOnDrop(files: File[]) { async function installFromUrlOrPath(installPath: string) { const fileName = path.basename(installPath); + let disposer: Disposer; try { // install via url // fixme: improve error messages for non-tar-file URLs if (InputValidators.isUrl.validate(installPath)) { - const disposer = ExtensionInstallationStateStore.startPreInstall(); + disposer = ExtensionInstallationStateStore.startPreInstall(); const { promise: filePromise } = downloadFile({ url: installPath, timeout: 60000 /*1m*/ }); const data = await filePromise; @@ -334,9 +365,12 @@ async function installFromUrlOrPath(installPath: string) { await requestInstall({ fileName, filePath: installPath }); } } catch (error) { - Notifications.error( -

Installation has failed: {String(error)}

- ); + const message = getMessageFromError(error); + + logger.info(`[EXTENSION-INSTALL]: installation has failed: ${message}`, { error, installPath }); + Notifications.error(

Installation has failed: {message}

); + } finally { + disposer?.(); } }