diff --git a/src/extensions/extension-compatibility.ts b/src/extensions/extension-compatibility.ts index 9ca48a3f2d..adc5f054e3 100644 --- a/src/extensions/extension-compatibility.ts +++ b/src/extensions/extension-compatibility.ts @@ -23,8 +23,12 @@ import semver from "semver"; import { appSemVer } from "../common/vars"; import type { LensExtensionManifest } from "./lens-extension"; -export function isCompatibleExtension(manifest: LensExtensionManifest): boolean { +export function isCompatibleExtension(manifest: LensExtensionManifest, isBundled: boolean): boolean { if (manifest.engines?.lens) { + if (isBundled) { + return true; + } + /* include Lens's prerelease tag in the matching so the extension's compatibility is not limited by it */ return semver.satisfies(appSemVer, manifest.engines.lens, { includePrerelease: true }); } diff --git a/src/extensions/extension-discovery.ts b/src/extensions/extension-discovery.ts index 70f32de110..606b427070 100644 --- a/src/extensions/extension-discovery.ts +++ b/src/extensions/extension-discovery.ts @@ -361,7 +361,7 @@ export class ExtensionDiscovery extends Singleton { const extensionDir = path.dirname(manifestPath); const npmPackage = path.join(extensionDir, `${manifest.name}-${manifest.version}.tgz`); const absolutePath = (isProduction && await fse.pathExists(npmPackage)) ? npmPackage : extensionDir; - const isCompatible = isBundled || isCompatibleExtension(manifest); + const isCompatible = isCompatibleExtension(manifest, isBundled); return { id, diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index f06ae7f5ab..1c529772e5 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -372,8 +372,14 @@ export class ExtensionLoader extends Singleton { } catch (error) { const safeName = inspect(extension.manifest.name, false, null, false); - if (error instanceof TypeError && error.message.match(/^Class extends value .* is not a constructor or null$/) !== null) { - console.warn(`${logModule}: ${entryPointName} for ${safeName} does not support ${packageJson.version}`); + if (isExtensionIncompatibleError(error)) { + const message = `${logModule}: ${entryPointName} for ${safeName} does not support ${packageJson.version}`; + + if (ipcRenderer) { + console.warn(message, extension); + } else { + logger.warn(message, { extension }); + } } else { const message = `${logModule}: can't load ${entryPointName} for ${safeName}`; @@ -400,3 +406,14 @@ export class ExtensionLoader extends Singleton { return toJS(this.extensions); } } + +const classExtendsError = /^Class extends value .* is not a constructor or null$/; +const retrieveError = /^Cannot read property .* of undefined$/; + +function isExtensionIncompatibleError(error: any): boolean { + if (!(error instanceof TypeError)) { + return false; + } + + return Boolean(error.message.match(classExtendsError) || error.message.match(retrieveError)); +}