Introduce clearer boundry between extensions (#7164)

- Bundled extensions are always enabled, and are always compatible
- Have bundled extensions be loaded asyncronously to support
  typescript dynamic import (which is typed) as opposed to require

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton authored and GitHub committed 2023-04-05 10:21:38 -04:00
1 parent 351f9d492f
commit 058494bc73
29 files changed
+440 -550

No files matched your search

@@ -376,7 +376,7 @@ exports[`extensions - navigation using application menu when navigating to exten
<p>
Add new features via Lens Extensions. Check out the
<a
href="https://docs.k8slens.dev/extensions/"
href="https://docs.k8slens.dev/extensions/lens-extensions"
rel="noreferrer"
target="_blank"
>
@@ -5,19 +5,14 @@
import { getInjectable } from "@ogre-tools/injectable";
import enabledExtensionsStateInjectable from "./state.injectable";
export interface IsEnabledExtensionDescriptor {
readonly id: string;
readonly isBundled: boolean;
}
export type IsExtensionEnabled = (desc: IsEnabledExtensionDescriptor) => boolean;
export type IsExtensionEnabled = (id: string) => boolean;
const isExtensionEnabledInjectable = getInjectable({
id: "is-extension-enabled",
instantiate: (di): IsExtensionEnabled => {
const state = di.inject(enabledExtensionsStateInjectable);
return ({ id, isBundled }) => isBundled || (state.get(id)?.enabled ?? false);
return (id) => (state.get(id)?.enabled ?? false);
},
});