diff --git a/src/extensions/__tests__/lens-extension.test.ts b/src/extensions/__tests__/lens-extension.test.ts index fe46d32afc..052a3202df 100644 --- a/src/extensions/__tests__/lens-extension.test.ts +++ b/src/extensions/__tests__/lens-extension.test.ts @@ -17,6 +17,7 @@ describe("lens extension", () => { manifest: { name: "foo-bar", version: "0.1.1", + engines: { lens: "^5.5.0" }, }, id: "/this/is/fake/package.json", absolutePath: "/absolute/fake/", diff --git a/src/extensions/extension-discovery/is-compatible-extension/is-compatible-extension.ts b/src/extensions/extension-discovery/is-compatible-extension/is-compatible-extension.ts index d9bdb89adb..57d0ccf571 100644 --- a/src/extensions/extension-discovery/is-compatible-extension/is-compatible-extension.ts +++ b/src/extensions/extension-discovery/is-compatible-extension/is-compatible-extension.ts @@ -10,17 +10,13 @@ interface Dependencies { } export const isCompatibleExtension = (deps: Dependencies): ((manifest: LensExtensionManifest) => boolean) => { - const { major: appVersion } = deps.appSemVer; + const { major: appMajor, minor: appMinor } = deps.appSemVer; return (manifest: LensExtensionManifest): boolean => { - if (manifest?.engines.lens) { - const { major: extMajor, minor: extMinor } = new SemVer(manifest.engines.lens, { - loose: true, - }); + const { major: extMajor, minor: extMinor } = new SemVer(manifest.engines.lens, { + loose: true, + }); - return semver.gte(`${extMajor}.${extMinor}`, `${appVersion}.0`); - } - - return false; // not compatible by default + return semver.intersects(`>=${appMajor}.${appMinor}`, `<${extMajor}.${extMinor + 1}`); }; }; diff --git a/src/extensions/lens-extension.ts b/src/extensions/lens-extension.ts index 7b11d20d61..d763aa5535 100644 --- a/src/extensions/lens-extension.ts +++ b/src/extensions/lens-extension.ts @@ -25,8 +25,8 @@ export interface LensExtensionManifest extends PackageJson { * Supported Lens version engine by extension could be defined in `manifest.engines.lens` * Only MAJOR.MINOR version is taken in consideration. */ - engines?: { - lens?: string; // "semver"-package format + engines: { + lens: string; // "semver"-package format npm?: string; node?: string; }; diff --git a/src/main/menu/electron-menu-items.test.ts b/src/main/menu/electron-menu-items.test.ts index b1b2dd61b1..7ad7dcb8e8 100644 --- a/src/main/menu/electron-menu-items.test.ts +++ b/src/main/menu/electron-menu-items.test.ts @@ -109,7 +109,7 @@ class SomeTestExtension extends LensMainExtension { isBundled: false, isCompatible: false, isEnabled: false, - manifest: { name: id, version: "some-version" }, + manifest: { name: id, version: "some-version", engines: { lens: "^5.5.0" }}, manifestPath: "irrelevant", }); diff --git a/src/main/protocol-handler/__test__/router.test.ts b/src/main/protocol-handler/__test__/router.test.ts index d8c88f7f22..d3d03dbf99 100644 --- a/src/main/protocol-handler/__test__/router.test.ts +++ b/src/main/protocol-handler/__test__/router.test.ts @@ -87,6 +87,7 @@ describe("protocol router tests", () => { manifest: { name: "@mirantis/minikube", version: "0.1.1", + engines: { lens: "^5.5.0" }, }, isBundled: false, isEnabled: true, @@ -162,6 +163,7 @@ describe("protocol router tests", () => { manifest: { name: "@foobar/icecream", version: "0.1.1", + engines: { lens: "^5.5.0" }, }, isBundled: false, isEnabled: true, @@ -203,6 +205,7 @@ describe("protocol router tests", () => { manifest: { name: "@foobar/icecream", version: "0.1.1", + engines: { lens: "^5.5.0" }, }, isBundled: false, isEnabled: true, @@ -228,6 +231,7 @@ describe("protocol router tests", () => { manifest: { name: "icecream", version: "0.1.1", + engines: { lens: "^5.5.0" }, }, isBundled: false, isEnabled: true, diff --git a/src/main/tray/tray-menu-items.test.ts b/src/main/tray/tray-menu-items.test.ts index da9f2f2745..c25010967d 100644 --- a/src/main/tray/tray-menu-items.test.ts +++ b/src/main/tray/tray-menu-items.test.ts @@ -113,7 +113,7 @@ class SomeTestExtension extends LensMainExtension { isBundled: false, isCompatible: false, isEnabled: false, - manifest: { name: id, version: "some-version" }, + manifest: { name: id, version: "some-version", engines: { lens: "^5.5.0" }}, manifestPath: "irrelevant", }); diff --git a/src/renderer/components/+extensions/__tests__/extensions.test.tsx b/src/renderer/components/+extensions/__tests__/extensions.test.tsx index a29e9bb004..ddb98540a1 100644 --- a/src/renderer/components/+extensions/__tests__/extensions.test.tsx +++ b/src/renderer/components/+extensions/__tests__/extensions.test.tsx @@ -77,6 +77,7 @@ describe("Extensions", () => { manifest: { name: "test", version: "1.2.3", + engines: { lens: "^5.5.0" }, }, absolutePath: "/absolute/path", manifestPath: "/symlinked/path/package.json", diff --git a/src/renderer/components/+welcome/__test__/welcome.test.tsx b/src/renderer/components/+welcome/__test__/welcome.test.tsx index ed41dcdd31..55be6f1fd9 100644 --- a/src/renderer/components/+welcome/__test__/welcome.test.tsx +++ b/src/renderer/components/+welcome/__test__/welcome.test.tsx @@ -102,7 +102,7 @@ class TestExtension extends LensRendererExtension { isBundled: false, isCompatible: false, isEnabled: false, - manifest: { name: id, version: "some-version" }, + manifest: { name: id, version: "some-version", engines: { lens: "^5.5.0" }}, manifestPath: "irrelevant", }); diff --git a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx index 540c8295ce..247d63d8f7 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx @@ -40,7 +40,7 @@ class SomeTestExtension extends LensRendererExtension { isBundled: false, isCompatible: false, isEnabled: false, - manifest: { name: "some-id", version: "some-version" }, + manifest: { name: "some-id", version: "some-version", engines: { lens: "^5.5.0" }}, manifestPath: "irrelevant", }); diff --git a/src/renderer/components/kube-object-status-icon/kube-object-status-icon.test.tsx b/src/renderer/components/kube-object-status-icon/kube-object-status-icon.test.tsx index c2338f634c..c4354db3b3 100644 --- a/src/renderer/components/kube-object-status-icon/kube-object-status-icon.test.tsx +++ b/src/renderer/components/kube-object-status-icon/kube-object-status-icon.test.tsx @@ -255,7 +255,7 @@ class SomeTestExtension extends LensRendererExtension { isBundled: false, isCompatible: false, isEnabled: false, - manifest: { name: "some-id", version: "some-version" }, + manifest: { name: "some-id", version: "some-version", engines: { lens: "^5.5.0" }}, manifestPath: "irrelevant", }); diff --git a/src/renderer/components/status-bar/status-bar.test.tsx b/src/renderer/components/status-bar/status-bar.test.tsx index 0dbccb7644..dbcfa59adf 100644 --- a/src/renderer/components/status-bar/status-bar.test.tsx +++ b/src/renderer/components/status-bar/status-bar.test.tsx @@ -26,7 +26,7 @@ class SomeTestExtension extends LensRendererExtension { isBundled: false, isCompatible: false, isEnabled: false, - manifest: { name: "some-id", version: "some-version" }, + manifest: { name: "some-id", version: "some-version", engines: { lens: "^5.5.0" }}, manifestPath: "irrelevant", }); diff --git a/src/renderer/components/test-utils/get-renderer-extension-fake.ts b/src/renderer/components/test-utils/get-renderer-extension-fake.ts index 7f007b3bc3..015eb8c68f 100644 --- a/src/renderer/components/test-utils/get-renderer-extension-fake.ts +++ b/src/renderer/components/test-utils/get-renderer-extension-fake.ts @@ -13,7 +13,7 @@ export const getRendererExtensionFake = ({ id, ...rest }: Partial