mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Complete a majority of the rest of DI
- All KubeApi and KubeObjectStore's - All of Catalog - ApiManager - KubeObjectDetailRegistry - All BaseStore's and their migrations - LensProxy and Router - WindowManager - App Menu - Tray Icon - ThemeStore Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
1 parent
6cba82c491
commit
1747cbf6c8
1345 files changed
+34694
-27702
No files matched your search
@@ -23,7 +23,7 @@ jest.mock(
|
||||
"electron",
|
||||
() => ({
|
||||
ipcRenderer: {
|
||||
invoke: jest.fn(async (channel: string) => {
|
||||
invoke: jest.fn((channel: string) => {
|
||||
if (channel === "extensions:main") {
|
||||
return [
|
||||
[
|
||||
|
||||
@@ -12,7 +12,7 @@ console = new Console(stdout, stderr);
|
||||
let ext: LensExtension = null;
|
||||
|
||||
describe("lens extension", () => {
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
ext = new LensExtension({
|
||||
manifest: {
|
||||
name: "foo-bar",
|
||||
|
||||
@@ -3,12 +3,7 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
export {
|
||||
KubernetesCluster,
|
||||
kubernetesClusterCategory,
|
||||
GeneralEntity,
|
||||
WebLink,
|
||||
} from "../../common/catalog-entities";
|
||||
export { KubernetesCluster, GeneralEntity, WebLink } from "../../common/catalog-entities";
|
||||
|
||||
export type {
|
||||
KubernetesClusterPrometheusMetrics,
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
*/
|
||||
|
||||
export type { AppPreferenceRegistration, AppPreferenceComponents } from "../../renderer/components/+preferences/app-preferences/app-preference-registration";
|
||||
export type { KubeObjectDetailRegistration, KubeObjectDetailComponents } from "../registries/kube-object-detail-registry";
|
||||
export type { KubeObjectMenuRegistration, KubeObjectMenuComponents } from "../registries/kube-object-menu-registry";
|
||||
export type { KubeObjectStatusRegistration } from "../registries/kube-object-status-registry";
|
||||
export type { PageRegistration, RegisteredPage, PageParams, PageComponentProps, PageComponents, PageTarget } from "../registries/page-registry";
|
||||
export type { ClusterPageMenuRegistration, ClusterPageMenuComponents } from "../registries/page-menu-registry";
|
||||
export type { StatusBarRegistration } from "../registries/status-bar-registry";
|
||||
export type { ProtocolHandlerRegistration, RouteParams as ProtocolRouteParams, RouteHandler as ProtocolRouteHandler } from "../registries/protocol-handler";
|
||||
export type { KubeObjectStatusRegistration } from "../../renderer/components/kube-object-status-icon/kube-object-status";
|
||||
export type { KubeObjectDetailRegistration, KubeObjectDetailComponents } from "../../renderer/components/kube-object-details/kube-details-items/kube-detail-items";
|
||||
@@ -3,11 +3,14 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import { UserStore } from "../../common/user-store";
|
||||
import userPreferencesStoreInjectable from "../../common/user-preferences/store.injectable";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
|
||||
const userStore = asLegacyGlobalObjectForExtensionApi(userPreferencesStoreInjectable);
|
||||
|
||||
/**
|
||||
* Get the configured kubectl binaries path.
|
||||
*/
|
||||
export function getKubectlPath(): string | undefined {
|
||||
return UserStore.getInstance().kubectlBinariesPath;
|
||||
return userStore.kubectlBinariesPath;
|
||||
}
|
||||
@@ -14,7 +14,7 @@ import type { ExtensionDiscovery } from "../extension-discovery/extension-discov
|
||||
import installExtensionInjectable
|
||||
from "../extension-installer/install-extension/install-extension.injectable";
|
||||
import directoryForUserDataInjectable
|
||||
from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||
from "../../common/app-paths/directory-for-user-data.injectable";
|
||||
import mockFs from "mock-fs";
|
||||
|
||||
jest.setTimeout(60_000);
|
||||
|
||||
@@ -128,15 +128,15 @@ export class ExtensionDiscovery {
|
||||
/**
|
||||
* Initializes the class and setups the file watcher for added/removed local extensions.
|
||||
*/
|
||||
async init(): Promise<void> {
|
||||
init() {
|
||||
if (ipcRenderer) {
|
||||
await this.initRenderer();
|
||||
this.initRenderer();
|
||||
} else {
|
||||
await this.initMain();
|
||||
this.initMain();
|
||||
}
|
||||
}
|
||||
|
||||
async initRenderer(): Promise<void> {
|
||||
initRenderer() {
|
||||
const onMessage = ({ isLoaded }: ExtensionDiscoveryChannelMessage) => {
|
||||
this.isLoaded = isLoaded;
|
||||
};
|
||||
@@ -147,7 +147,7 @@ export class ExtensionDiscovery {
|
||||
});
|
||||
}
|
||||
|
||||
async initMain(): Promise<void> {
|
||||
initMain() {
|
||||
ipcMainHandle(ExtensionDiscovery.extensionDiscoveryChannel, () => this.toJSON());
|
||||
|
||||
reaction(() => this.toJSON(), () => {
|
||||
@@ -479,10 +479,8 @@ export class ExtensionDiscovery {
|
||||
* Loads extension from absolute path, updates this.packagesJson to include it and returns the extension.
|
||||
* @param folderPath Folder path to extension
|
||||
*/
|
||||
async loadExtensionFromFolder(folderPath: string, { isBundled = false }: LoadFromFolderOptions = {}): Promise<InstalledExtension | null> {
|
||||
const manifestPath = path.resolve(folderPath, manifestFilename);
|
||||
|
||||
return this.getByManifest(manifestPath, { isBundled });
|
||||
loadExtensionFromFolder(folderPath: string, { isBundled = false }: LoadFromFolderOptions = {}): Promise<InstalledExtension | null> {
|
||||
return this.getByManifest(path.resolve(folderPath, manifestFilename), { isBundled });
|
||||
}
|
||||
|
||||
toJSON(): ExtensionDiscoveryChannelMessage {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
|
||||
import directoryForUserDataInjectable
|
||||
from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||
from "../../../common/app-paths/directory-for-user-data.injectable";
|
||||
|
||||
const extensionPackageRootDirectoryInjectable = getInjectable({
|
||||
instantiate: (di) => di.inject(directoryForUserDataInjectable),
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
|
||||
import path from "path";
|
||||
import directoryForUserDataInjectable from "../../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||
import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data.injectable";
|
||||
|
||||
const directoryForExtensionDataInjectable = getInjectable({
|
||||
instantiate: (di) =>
|
||||
+4
-7
@@ -4,15 +4,12 @@
|
||||
*/
|
||||
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
|
||||
import { FileSystemProvisionerStore } from "./file-system-provisioner-store";
|
||||
import directoryForExtensionDataInjectable from "./directory-for-extension-data/directory-for-extension-data.injectable";
|
||||
import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable";
|
||||
|
||||
const fileSystemProvisionerStoreInjectable = getInjectable({
|
||||
instantiate: (di) =>
|
||||
FileSystemProvisionerStore.createInstance({
|
||||
directoryForExtensionData: di.inject(
|
||||
directoryForExtensionDataInjectable,
|
||||
),
|
||||
}),
|
||||
instantiate: (di) => new FileSystemProvisionerStore({
|
||||
directoryForExtensionData: di.inject(directoryForExtensionDataInjectable),
|
||||
}),
|
||||
|
||||
lifecycle: lifecycleEnum.singleton,
|
||||
});
|
||||
|
||||
@@ -132,9 +132,9 @@ export class ExtensionLoader {
|
||||
@action
|
||||
async init() {
|
||||
if (ipcRenderer) {
|
||||
await this.initRenderer();
|
||||
this.initRenderer();
|
||||
} else {
|
||||
await this.initMain();
|
||||
this.initMain();
|
||||
}
|
||||
|
||||
await Promise.all([this.whenLoaded]);
|
||||
@@ -192,7 +192,7 @@ export class ExtensionLoader {
|
||||
this.extensions.get(lensExtensionId).isEnabled = isEnabled;
|
||||
}
|
||||
|
||||
protected async initMain() {
|
||||
protected initMain() {
|
||||
this.isLoaded = true;
|
||||
this.loadOnMain();
|
||||
|
||||
@@ -205,7 +205,7 @@ export class ExtensionLoader {
|
||||
});
|
||||
}
|
||||
|
||||
protected async initRenderer() {
|
||||
protected initRenderer() {
|
||||
const extensionListHandler = (extensions: [LensExtensionId, InstalledExtension][]) => {
|
||||
this.isLoaded = true;
|
||||
this.syncExtensions(extensions);
|
||||
@@ -249,12 +249,11 @@ export class ExtensionLoader {
|
||||
loadOnClusterManagerRenderer = () => {
|
||||
logger.debug(`${logModule}: load on main renderer (cluster manager)`);
|
||||
|
||||
return this.autoInitExtensions(async (extension: LensRendererExtension) => {
|
||||
return this.autoInitExtensions((extension: LensRendererExtension) => {
|
||||
const removeItems = [
|
||||
registries.GlobalPageRegistry.getInstance().add(extension.globalPages, extension),
|
||||
registries.EntitySettingRegistry.getInstance().add(extension.entitySettings),
|
||||
registries.StatusBarRegistry.getInstance().add(extension.statusBarItems),
|
||||
registries.CatalogEntityDetailRegistry.getInstance().add(extension.catalogEntityDetailItems),
|
||||
];
|
||||
|
||||
this.events.on("remove", (removedExtension: LensRendererExtension) => {
|
||||
@@ -265,7 +264,7 @@ export class ExtensionLoader {
|
||||
}
|
||||
});
|
||||
|
||||
return removeItems;
|
||||
return Promise.resolve(removeItems);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -282,8 +281,6 @@ export class ExtensionLoader {
|
||||
registries.ClusterPageRegistry.getInstance().add(extension.clusterPages, extension),
|
||||
registries.ClusterPageMenuRegistry.getInstance().add(extension.clusterPageMenus, extension),
|
||||
registries.KubeObjectMenuRegistry.getInstance().add(extension.kubeObjectMenuItems),
|
||||
registries.KubeObjectDetailRegistry.getInstance().add(extension.kubeObjectDetailItems),
|
||||
registries.KubeObjectStatusRegistry.getInstance().add(extension.kubeObjectStatusTexts),
|
||||
registries.WorkloadsOverviewDetailRegistry.getInstance().add(extension.kubeWorkloadsOverviewItems),
|
||||
];
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
|
||||
import directoryForUserDataInjectable
|
||||
from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||
from "../../common/app-paths/directory-for-user-data.injectable";
|
||||
|
||||
const extensionPackagesRootInjectable = getInjectable({
|
||||
instantiate: (di) => di.inject(directoryForUserDataInjectable),
|
||||
|
||||
@@ -7,7 +7,70 @@ import { BaseStore } from "../common/base-store";
|
||||
import * as path from "path";
|
||||
import type { LensExtension } from "./lens-extension";
|
||||
|
||||
type StaticThis<T, R extends any[]> = { new(...args: R): T };
|
||||
|
||||
export abstract class ExtensionStore<T> extends BaseStore<T> {
|
||||
private static instances = new WeakMap<object, ExtensionStore<any>>();
|
||||
private static creating = "";
|
||||
|
||||
/**
|
||||
* @deprecated You can and should just create the instance of the store yourself
|
||||
* Creates the single instance of the child class if one was not already created.
|
||||
*
|
||||
* Multiple calls will return the same instance.
|
||||
* Essentially throwing away the arguments to the subsequent calls.
|
||||
*
|
||||
* Note: this is a racy function, if two (or more) calls are racing to call this function
|
||||
* only the first's arguments will be used.
|
||||
* @param this Implicit argument that is the child class type
|
||||
* @param args The constructor arguments for the child class
|
||||
* @returns An instance of the child class
|
||||
*/
|
||||
static createInstance<T, R extends any[]>(this: StaticThis<T, R>, ...args: R): T {
|
||||
if (!ExtensionStore.instances.has(this)) {
|
||||
if (ExtensionStore.creating.length > 0) {
|
||||
throw new TypeError(`Cannot create a second ExtensionStore (${this.name}) while creating a first (${ExtensionStore.creating})`);
|
||||
}
|
||||
|
||||
try {
|
||||
ExtensionStore.creating = this.name;
|
||||
ExtensionStore.instances.set(this, new this(...args) as any);
|
||||
} finally {
|
||||
ExtensionStore.creating = "";
|
||||
}
|
||||
}
|
||||
|
||||
return ExtensionStore.instances.get(this) as any;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated You can and should just get the instance of the store yourself
|
||||
* Get the instance of the child class that was previously created.
|
||||
* @param this Implicit argument that is the child class type
|
||||
* @param strict If false will return `undefined` instead of throwing when an instance doesn't exist.
|
||||
* Default: `true`
|
||||
* @returns An instance of the child class
|
||||
*/
|
||||
static getInstance<T, R extends any[]>(this: StaticThis<T, R>, strict = true): T | undefined {
|
||||
if (!ExtensionStore.instances.has(this) && strict) {
|
||||
throw new TypeError(`instance of ${this.name} is not created`);
|
||||
}
|
||||
|
||||
return ExtensionStore.instances.get(this) as any;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated This function shouldn't really be used
|
||||
* Delete the instance of the child class.
|
||||
*
|
||||
* Note: this doesn't prevent callers of `getInstance` from storing the result in a global.
|
||||
*
|
||||
* There is *no* way in JS or TS to prevent globals like that.
|
||||
*/
|
||||
static resetInstance() {
|
||||
ExtensionStore.instances.delete(this);
|
||||
}
|
||||
|
||||
readonly displayName = "ExtensionStore<T>";
|
||||
protected extension: LensExtension;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
|
||||
import { ExtensionsStore } from "./extensions-store";
|
||||
|
||||
const extensionsStoreInjectable = getInjectable({
|
||||
instantiate: () => ExtensionsStore.createInstance(),
|
||||
instantiate: () => new ExtensionsStore(),
|
||||
lifecycle: lifecycleEnum.singleton,
|
||||
});
|
||||
|
||||
|
||||
@@ -75,12 +75,12 @@ export class LensExtension {
|
||||
* Note: there is no security done on this folder, only obfuscation of the
|
||||
* folder name.
|
||||
*/
|
||||
async getExtensionFileFolder(): Promise<string> {
|
||||
getExtensionFileFolder(): Promise<string> {
|
||||
return this.dependencies.fileSystemProvisionerStore.requestDirectory(this.id);
|
||||
}
|
||||
|
||||
@action
|
||||
async enable(register: (ext: LensExtension) => Promise<Disposer[]>) {
|
||||
async enable(register: (ext: LensExtension) => Disposer[] | Promise<Disposer[]>) {
|
||||
if (this._isEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4,25 +4,35 @@
|
||||
*/
|
||||
|
||||
import { LensExtension } from "./lens-extension";
|
||||
import { WindowManager } from "../main/window-manager";
|
||||
import { catalogEntityRegistry } from "../main/catalog";
|
||||
import type { CatalogEntity } from "../common/catalog";
|
||||
import type { IObservableArray } from "mobx";
|
||||
import { computed, IComputedValue, IObservableArray, observable } from "mobx";
|
||||
import type { MenuRegistration } from "../main/menu/menu-registration";
|
||||
import type { TrayMenuRegistration } from "../main/tray/tray-menu-registration";
|
||||
import windowManagerInjectable from "../main/windows/manager.injectable";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "./as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
|
||||
const windowManager = asLegacyGlobalObjectForExtensionApi(windowManagerInjectable);
|
||||
|
||||
export class LensMainExtension extends LensExtension {
|
||||
appMenus: MenuRegistration[] = [];
|
||||
trayMenus: TrayMenuRegistration[] = [];
|
||||
sources = observable.map<string, IComputedValue<CatalogEntity[]>>();
|
||||
|
||||
async navigate(pageId?: string, params?: Record<string, any>, frameId?: number) {
|
||||
return WindowManager.getInstance().navigateExtension(this.id, pageId, params, frameId);
|
||||
navigate(pageId?: string, params?: Record<string, any>, frameId?: number) {
|
||||
return windowManager.navigateExtension(this.id, pageId, params, frameId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Just call `set()` on `.sources` directly
|
||||
*/
|
||||
addCatalogSource(id: string, source: IObservableArray<CatalogEntity>) {
|
||||
catalogEntityRegistry.addObservableSource(`${this.name}:${id}`, source);
|
||||
this.sources.set(id, computed(() => [...source]));
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Just call `delete()` on `.sources` directly
|
||||
*/
|
||||
removeCatalogSource(id: string) {
|
||||
catalogEntityRegistry.removeSource(`${this.name}:${id}`);
|
||||
this.sources.delete(id);
|
||||
}
|
||||
}
|
||||
@@ -6,10 +6,9 @@
|
||||
import type * as registries from "./registries";
|
||||
import { Disposers, LensExtension } from "./lens-extension";
|
||||
import { getExtensionPageUrl } from "./registries/page-registry";
|
||||
import type { CatalogEntity } from "../common/catalog";
|
||||
import type { CatalogEntity, CategoryFilter } from "../common/catalog";
|
||||
import type { Disposer } from "../common/utils";
|
||||
import { catalogEntityRegistry, EntityFilter } from "../renderer/api/catalog-entity-registry";
|
||||
import { catalogCategoryRegistry, CategoryFilter } from "../renderer/api/catalog-category-registry";
|
||||
import type { EntityFilter } from "../renderer/catalog/entity-registry";
|
||||
import type { TopBarRegistration } from "../renderer/components/layout/top-bar/top-bar-registration";
|
||||
import type { KubernetesCluster } from "../common/catalog-entities";
|
||||
import type { WelcomeMenuRegistration } from "../renderer/components/+welcome/welcome-menu-items/welcome-menu-registration";
|
||||
@@ -17,25 +16,33 @@ import type { WelcomeBannerRegistration } from "../renderer/components/+welcome/
|
||||
import type { CommandRegistration } from "../renderer/components/command-palette/registered-commands/commands";
|
||||
import type { AppPreferenceRegistration } from "../renderer/components/+preferences/app-preferences/app-preference-registration";
|
||||
import type { AdditionalCategoryColumnRegistration } from "../renderer/components/+catalog/custom-category-columns";
|
||||
import type { KubeObjectDetailRegistration } from "../renderer/components/kube-object-details/kube-details-items/kube-detail-items";
|
||||
import type { KubeObjectStatusRegistration } from "../renderer/components/kube-object-status-icon/kube-object-status";
|
||||
import type { CatalogEntityDetailRegistration } from "../renderer/catalog/catalog-entity-details";
|
||||
import { observable } from "mobx";
|
||||
import { once } from "lodash";
|
||||
|
||||
export class LensRendererExtension extends LensExtension {
|
||||
globalPages: registries.PageRegistration[] = [];
|
||||
clusterPages: registries.PageRegistration[] = [];
|
||||
clusterPageMenus: registries.ClusterPageMenuRegistration[] = [];
|
||||
kubeObjectStatusTexts: registries.KubeObjectStatusRegistration[] = [];
|
||||
appPreferences: AppPreferenceRegistration[] = [];
|
||||
kubeObjectStatusTexts: KubeObjectStatusRegistration[] = [];
|
||||
entitySettings: registries.EntitySettingRegistration[] = [];
|
||||
statusBarItems: registries.StatusBarRegistration[] = [];
|
||||
kubeObjectDetailItems: registries.KubeObjectDetailRegistration[] = [];
|
||||
kubeObjectDetailItems: KubeObjectDetailRegistration[] = [];
|
||||
kubeObjectMenuItems: registries.KubeObjectMenuRegistration[] = [];
|
||||
kubeWorkloadsOverviewItems: registries.WorkloadsOverviewDetailRegistration[] = [];
|
||||
commands: CommandRegistration[] = [];
|
||||
welcomeMenus: WelcomeMenuRegistration[] = [];
|
||||
welcomeBanners: WelcomeBannerRegistration[] = [];
|
||||
catalogEntityDetailItems: registries.CatalogEntityDetailRegistration<CatalogEntity>[] = [];
|
||||
catalogEntityDetailItems: CatalogEntityDetailRegistration<CatalogEntity>[] = [];
|
||||
topBarItems: TopBarRegistration[] = [];
|
||||
additionalCategoryColumns: AdditionalCategoryColumnRegistration[] = [];
|
||||
|
||||
@observable catalogFilters = observable.array<EntityFilter>();
|
||||
@observable catalogCategoryFilters = observable.array<CategoryFilter>();
|
||||
|
||||
async navigate<P extends object>(pageId?: string, params?: P) {
|
||||
const { navigate } = await import("../renderer/navigation");
|
||||
const pageUrl = getExtensionPageUrl({
|
||||
@@ -53,31 +60,35 @@ export class LensRendererExtension extends LensExtension {
|
||||
*
|
||||
* The default implementation is to return `true`
|
||||
*/
|
||||
async isEnabledForCluster(cluster: KubernetesCluster): Promise<Boolean> {
|
||||
return (void cluster) || true;
|
||||
isEnabledForCluster(cluster: KubernetesCluster): Promise<Boolean> {
|
||||
return Promise.resolve((void cluster) || true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Just push to `.catalogFilters` instead
|
||||
* Add a filtering function for the catalog entities. This will be removed if the extension is disabled.
|
||||
* @param fn The function which should return a truthy value for those entities which should be kept.
|
||||
* @returns A function to clean up the filter
|
||||
*/
|
||||
addCatalogFilter(fn: EntityFilter): Disposer {
|
||||
const dispose = catalogEntityRegistry.addCatalogFilter(fn);
|
||||
const dispose = once(() => this.catalogFilters.remove(fn));
|
||||
|
||||
this.catalogFilters.push(fn);
|
||||
this[Disposers].push(dispose);
|
||||
|
||||
return dispose;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Just push to `.catalogCategoryFilters` instead
|
||||
* Add a filtering function for the catalog categories. This will be removed if the extension is disabled.
|
||||
* @param fn The function which should return a truthy value for those categories which should be kept.
|
||||
* @returns A function to clean up the filter
|
||||
*/
|
||||
addCatalogCategoryFilter(fn: CategoryFilter): Disposer {
|
||||
const dispose = catalogCategoryRegistry.addCatalogCategoryFilter(fn);
|
||||
const dispose = once(() => this.catalogCategoryFilters.remove(fn));
|
||||
|
||||
this.catalogCategoryFilters.push(fn);
|
||||
this[Disposers].push(dispose);
|
||||
|
||||
return dispose;
|
||||
|
||||
@@ -3,15 +3,99 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import type { CatalogEntity } from "../../common/catalog";
|
||||
import { catalogEntityRegistry as registry } from "../../main/catalog";
|
||||
import type { CatalogCategory, CatalogEntity, CatalogEntityData, CatalogEntityKindData, CategoryFilter, CatalogCategoryRegistry as InternalCatalogCategoryRegistry } from "../../common/catalog";
|
||||
import type { CatalogEntityRegistry as InternalCatalogEntityRegistry } from "../../main/catalog";
|
||||
import catalogCategoryRegistryInjectable from "../../main/catalog/category-registry.injectable";
|
||||
import catalogEntityRegistryInjectable from "../../main/catalog/entity-registry.injectable";
|
||||
import type { Disposer } from "../../renderer/utils";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
|
||||
export { catalogCategoryRegistry as catalogCategories } from "../../common/catalog/catalog-category-registry";
|
||||
|
||||
export class CatalogEntityRegistry {
|
||||
getItemsForApiKind<T extends CatalogEntity>(apiVersion: string, kind: string): T[] {
|
||||
return registry.getItemsForApiKind<T>(apiVersion, kind);
|
||||
interface CatalogEntityRegistryDependencies {
|
||||
readonly internalRegistry: InternalCatalogEntityRegistry;
|
||||
}
|
||||
|
||||
export type { CatalogEntityRegistry };
|
||||
|
||||
class CatalogEntityRegistry {
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
constructor(protected readonly dependencies: CatalogEntityRegistryDependencies) {}
|
||||
|
||||
/**
|
||||
* @deprecated use cast instead of unused generic type argument
|
||||
*/
|
||||
getItemsForApiKind<T extends CatalogEntity>(apiVersion: string, kind: string): T[];
|
||||
getItemsForApiKind(apiVersion: string, kind: string): CatalogEntity[] {
|
||||
return this.dependencies.internalRegistry.getItemsForApiKind(apiVersion, kind);
|
||||
}
|
||||
}
|
||||
|
||||
export const catalogEntities = new CatalogEntityRegistry();
|
||||
interface CatalogCategoryRegistryDependencies {
|
||||
readonly internalRegistry: InternalCatalogCategoryRegistry;
|
||||
}
|
||||
|
||||
export type { CatalogCategoryRegistry };
|
||||
|
||||
|
||||
class CatalogCategoryRegistry {
|
||||
constructor(protected readonly dependencies: CatalogCategoryRegistryDependencies) {}
|
||||
|
||||
add(category: CatalogCategory): Disposer {
|
||||
return this.dependencies.internalRegistry.add(category);
|
||||
}
|
||||
|
||||
get items() {
|
||||
return this.dependencies.internalRegistry.items;
|
||||
}
|
||||
|
||||
get filteredItems() {
|
||||
return this.dependencies.internalRegistry.filteredItems.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use cast instead of unused generic type argument
|
||||
*/
|
||||
getForGroupKind<T extends CatalogCategory>(group: string, kind: string): T | undefined;
|
||||
getForGroupKind(group: string, kind: string): CatalogCategory | undefined {
|
||||
return this.dependencies.internalRegistry.getForGroupKind(group, kind);
|
||||
}
|
||||
|
||||
getEntityForData(data: CatalogEntityData & CatalogEntityKindData): CatalogEntity | null {
|
||||
return this.dependencies.internalRegistry.getEntityForData(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use cast instead of unused generic type argument
|
||||
*/
|
||||
getCategoryForEntity<T extends CatalogCategory>({ kind, apiVersion }: CatalogEntityData & CatalogEntityKindData): T;
|
||||
/**
|
||||
* @throws if category is not found
|
||||
*/
|
||||
getCategoryForEntity(entity: CatalogEntityData & CatalogEntityKindData): CatalogCategory {
|
||||
return this.dependencies.internalRegistry.getCategoryForEntity(entity);
|
||||
}
|
||||
|
||||
getByName(name: string): CatalogCategory | undefined {
|
||||
return this.dependencies.internalRegistry.getByName(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new filter to the set of category filters
|
||||
* @param fn The function that should return a truthy value if that category should be displayed
|
||||
* @returns A function to remove that filter
|
||||
*/
|
||||
addCatalogCategoryFilter(fn: CategoryFilter): Disposer {
|
||||
return this.dependencies.internalRegistry.addCatalogCategoryFilter(fn);
|
||||
}
|
||||
}
|
||||
|
||||
export const catalogEntities = new CatalogEntityRegistry({
|
||||
internalRegistry: asLegacyGlobalObjectForExtensionApi(catalogEntityRegistryInjectable),
|
||||
});
|
||||
|
||||
export const catalogCategories = new CatalogCategoryRegistry({
|
||||
internalRegistry: asLegacyGlobalObjectForExtensionApi(catalogCategoryRegistryInjectable),
|
||||
});
|
||||
|
||||
@@ -3,43 +3,43 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
export { isAllowedResource } from "../../common/utils/allowed-resource";
|
||||
export { ResourceStack } from "../../common/k8s/resource-stack";
|
||||
export { apiManager } from "../../common/k8s-api/api-manager";
|
||||
export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube-api";
|
||||
export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object";
|
||||
export { KubeObjectStore } from "../../common/k8s-api/kube-object.store";
|
||||
export { Pod, podsApi, PodsApi } from "../../common/k8s-api/endpoints/pods.api";
|
||||
export { Node, nodesApi, NodesApi } from "../../common/k8s-api/endpoints/nodes.api";
|
||||
export { Deployment, deploymentApi, DeploymentApi } from "../../common/k8s-api/endpoints/deployment.api";
|
||||
export { DaemonSet, daemonSetApi } from "../../common/k8s-api/endpoints/daemon-set.api";
|
||||
export { StatefulSet, statefulSetApi } from "../../common/k8s-api/endpoints/stateful-set.api";
|
||||
export { Job, jobApi } from "../../common/k8s-api/endpoints/job.api";
|
||||
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints/cron-job.api";
|
||||
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api";
|
||||
export { Secret, secretsApi } from "../../common/k8s-api/endpoints/secret.api";
|
||||
export { ReplicaSet, replicaSetApi } from "../../common/k8s-api/endpoints/replica-set.api";
|
||||
export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints/resource-quota.api";
|
||||
export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints/limit-range.api";
|
||||
export { HorizontalPodAutoscaler, hpaApi } from "../../common/k8s-api/endpoints/hpa.api";
|
||||
export { PodDisruptionBudget, pdbApi } from "../../common/k8s-api/endpoints/poddisruptionbudget.api";
|
||||
export { Service, serviceApi } from "../../common/k8s-api/endpoints/service.api";
|
||||
export { Endpoint, endpointApi } from "../../common/k8s-api/endpoints/endpoint.api";
|
||||
export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints/ingress.api";
|
||||
export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints/network-policy.api";
|
||||
export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints/persistent-volume.api";
|
||||
export { PersistentVolumeClaim, pvcApi, PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claims.api";
|
||||
export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints/storage-class.api";
|
||||
export { Namespace, namespacesApi } from "../../common/k8s-api/endpoints/namespaces.api";
|
||||
export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints/events.api";
|
||||
export { ServiceAccount, serviceAccountsApi } from "../../common/k8s-api/endpoints/service-accounts.api";
|
||||
export { Role, roleApi } from "../../common/k8s-api/endpoints/role.api";
|
||||
export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints/role-binding.api";
|
||||
export { ClusterRole, clusterRoleApi } from "../../common/k8s-api/endpoints/cluster-role.api";
|
||||
export { ClusterRoleBinding, clusterRoleBindingApi } from "../../common/k8s-api/endpoints/cluster-role-binding.api";
|
||||
export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints/crd.api";
|
||||
export {
|
||||
Pod, PodApi as PodsApi,
|
||||
Node, NodeApi as NodesApi,
|
||||
Deployment, DeploymentApi,
|
||||
DaemonSet, DaemonSetApi,
|
||||
StatefulSet, StatefulSetApi,
|
||||
Job, JobApi,
|
||||
CronJob, CronJobApi,
|
||||
ConfigMap, ConfigMapApi,
|
||||
Secret, SecretApi,
|
||||
ReplicaSet, ReplicaSetApi,
|
||||
ResourceQuota, ResourceQuotaApi,
|
||||
LimitRange, LimitRangeApi,
|
||||
HorizontalPodAutoscaler, HorizontalPodAutoscalerApi,
|
||||
PodDisruptionBudget, PodDisruptionBudgetApi,
|
||||
Service, ServiceApi,
|
||||
Endpoint, EndpointApi,
|
||||
Ingress, IngressApi,
|
||||
NetworkPolicy, NetworkPolicyApi,
|
||||
PersistentVolume, PersistentVolumeApi,
|
||||
PersistentVolumeClaim, PersistentVolumeClaimApi as PersistentVolumeClaimsApi,
|
||||
StorageClass, StorageClassApi,
|
||||
Namespace, NamespaceApi,
|
||||
Event as KubeEvent, EventApi,
|
||||
ServiceAccount, ServiceAccountApi,
|
||||
Role, RoleApi,
|
||||
RoleBinding, RoleBindingApi,
|
||||
ClusterRole, ClusterRoleApi,
|
||||
ClusterRoleBinding, ClusterRoleBindingApi,
|
||||
CustomResourceDefinition, CustomResourceDefinitionApi,
|
||||
} from "../../common/k8s-api/endpoints";
|
||||
|
||||
// types
|
||||
export type { ILocalKubeApiConfig, IRemoteKubeApiConfig, IKubeApiCluster } from "../../common/k8s-api/kube-api";
|
||||
export type { IPodContainer, IPodContainerStatus } from "../../common/k8s-api/endpoints/pods.api";
|
||||
export type { IPodContainer, IPodContainerStatus } from "../../common/k8s-api/endpoints/pod.api";
|
||||
export type { ISecretRef } from "../../common/k8s-api/endpoints/secret.api";
|
||||
@@ -3,8 +3,9 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import { WindowManager } from "../../main/window-manager";
|
||||
import windowManagerInjectable from "../../main/windows/manager.injectable";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
|
||||
export function navigate(url: string) {
|
||||
return WindowManager.getInstance().navigate(url);
|
||||
asLegacyGlobalObjectForExtensionApi(windowManagerInjectable).navigate(url);
|
||||
}
|
||||
@@ -10,8 +10,6 @@ import React from "react";
|
||||
import fse from "fs-extra";
|
||||
import { Console } from "console";
|
||||
import { stderr, stdout } from "process";
|
||||
import { ThemeStore } from "../../../renderer/theme.store";
|
||||
import { UserStore } from "../../../common/user-store";
|
||||
import { getDisForUnitTesting } from "../../../test-utils/get-dis-for-unit-testing";
|
||||
import mockFs from "mock-fs";
|
||||
|
||||
@@ -55,8 +53,6 @@ describe("page registry tests", () => {
|
||||
isEnabled: true,
|
||||
isCompatible: true,
|
||||
});
|
||||
UserStore.createInstance();
|
||||
ThemeStore.createInstance();
|
||||
ClusterPageRegistry.createInstance();
|
||||
GlobalPageRegistry.createInstance().add({
|
||||
id: "page-with-params",
|
||||
@@ -92,8 +88,6 @@ describe("page registry tests", () => {
|
||||
afterEach(() => {
|
||||
GlobalPageRegistry.resetInstance();
|
||||
ClusterPageRegistry.resetInstance();
|
||||
ThemeStore.resetInstance();
|
||||
UserStore.resetInstance();
|
||||
fse.remove("tmp");
|
||||
mockFs.restore();
|
||||
});
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import type React from "react";
|
||||
import type { CatalogEntity } from "../common-api/catalog";
|
||||
import { BaseRegistry } from "./base-registry";
|
||||
|
||||
export interface CatalogEntityDetailsProps<T extends CatalogEntity> {
|
||||
entity: T;
|
||||
}
|
||||
|
||||
export interface CatalogEntityDetailComponents<T extends CatalogEntity> {
|
||||
Details: React.ComponentType<CatalogEntityDetailsProps<T>>;
|
||||
}
|
||||
|
||||
export interface CatalogEntityDetailRegistration<T extends CatalogEntity> {
|
||||
kind: string;
|
||||
apiVersions: string[];
|
||||
components: CatalogEntityDetailComponents<T>;
|
||||
priority?: number;
|
||||
}
|
||||
|
||||
export class CatalogEntityDetailRegistry extends BaseRegistry<CatalogEntityDetailRegistration<CatalogEntity>> {
|
||||
getItemsForKind(kind: string, apiVersion: string) {
|
||||
const items = this.getItems().filter((item) => {
|
||||
return item.kind === kind && item.apiVersions.includes(apiVersion);
|
||||
});
|
||||
|
||||
return items.sort((a, b) => (b.priority ?? 50) - (a.priority ?? 50));
|
||||
}
|
||||
}
|
||||
@@ -8,10 +8,7 @@
|
||||
export * from "./page-registry";
|
||||
export * from "./page-menu-registry";
|
||||
export * from "./status-bar-registry";
|
||||
export * from "./kube-object-detail-registry";
|
||||
export * from "./kube-object-menu-registry";
|
||||
export * from "./kube-object-status-registry";
|
||||
export * from "./entity-setting-registry";
|
||||
export * from "./catalog-entity-detail-registry";
|
||||
export * from "./workloads-overview-detail-registry";
|
||||
export * from "./protocol-handler";
|
||||
@@ -1,30 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import type React from "react";
|
||||
import type { KubeObjectDetailsProps } from "../renderer-api/components";
|
||||
import type { KubeObject } from "../renderer-api/k8s-api";
|
||||
import { BaseRegistry } from "./base-registry";
|
||||
|
||||
export interface KubeObjectDetailComponents<T extends KubeObject = KubeObject> {
|
||||
Details: React.ComponentType<KubeObjectDetailsProps<T>>;
|
||||
}
|
||||
|
||||
export interface KubeObjectDetailRegistration {
|
||||
kind: string;
|
||||
apiVersions: string[];
|
||||
components: KubeObjectDetailComponents<KubeObject>;
|
||||
priority?: number;
|
||||
}
|
||||
|
||||
export class KubeObjectDetailRegistry extends BaseRegistry<KubeObjectDetailRegistration> {
|
||||
getItemsForKind(kind: string, apiVersion: string) {
|
||||
const items = this.getItems().filter((item) => {
|
||||
return item.kind === kind && item.apiVersions.includes(apiVersion);
|
||||
});
|
||||
|
||||
return items.sort((a, b) => (b.priority ?? 50) - (a.priority ?? 50));
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import type { KubeObject, KubeObjectStatus } from "../renderer-api/k8s-api";
|
||||
import { BaseRegistry } from "./base-registry";
|
||||
|
||||
export interface KubeObjectStatusRegistration {
|
||||
kind: string;
|
||||
apiVersions: string[];
|
||||
resolve: (object: KubeObject) => KubeObjectStatus;
|
||||
}
|
||||
|
||||
export class KubeObjectStatusRegistry extends BaseRegistry<KubeObjectStatusRegistration> {
|
||||
getItemsForKind(kind: string, apiVersion: string) {
|
||||
return this.getItems()
|
||||
.filter((item) => (
|
||||
item.kind === kind
|
||||
&& item.apiVersions.includes(apiVersion)
|
||||
));
|
||||
}
|
||||
|
||||
getItemsForObject(src: KubeObject) {
|
||||
return this.getItemsForKind(src.kind, src.apiVersion)
|
||||
.map(item => item.resolve(src))
|
||||
.filter(Boolean);
|
||||
}
|
||||
}
|
||||
@@ -3,35 +3,54 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
|
||||
import type { CatalogCategory, CatalogEntity } from "../../common/catalog";
|
||||
import { catalogEntityRegistry as registry } from "../../renderer/api/catalog-entity-registry";
|
||||
import type { CatalogEntityOnBeforeRun } from "../../renderer/api/catalog-entity-registry";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
import type { CatalogCategory, CatalogEntity, CatalogCategoryRegistry as InternalCatalogCategoryRegistry, CatalogEntityData, CatalogEntityKindData, CategoryFilter } from "../../common/catalog";
|
||||
import type { CatalogEntityRegistry as InternalCatalogEntityRegistry, CatalogEntityOnBeforeRun } from "../../renderer/catalog/entity-registry";
|
||||
import type { Disposer } from "../../common/utils";
|
||||
export { catalogCategoryRegistry as catalogCategories } from "../../common/catalog/catalog-category-registry";
|
||||
import catalogEntityRegistryInjectable from "../../renderer/catalog/entity-registry.injectable";
|
||||
import catalogCategoryRegistryInjectable from "../../renderer/catalog/category-registry.injectable";
|
||||
|
||||
interface CatalogEntityRegistryDependencies {
|
||||
readonly internalRegistry: InternalCatalogEntityRegistry;
|
||||
}
|
||||
|
||||
export type { CatalogEntityRegistry };
|
||||
|
||||
class CatalogEntityRegistry {
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
constructor(protected readonly dependencies: CatalogEntityRegistryDependencies) {}
|
||||
|
||||
export class CatalogEntityRegistry {
|
||||
/**
|
||||
* Currently active/visible entity
|
||||
*/
|
||||
get activeEntity() {
|
||||
return registry.activeEntity;
|
||||
return this.dependencies.internalRegistry.activeEntity;
|
||||
}
|
||||
|
||||
get entities(): Map<string, CatalogEntity> {
|
||||
return registry.entities;
|
||||
return this.dependencies.internalRegistry.entities;
|
||||
}
|
||||
|
||||
getById(id: string) {
|
||||
return this.entities.get(id);
|
||||
}
|
||||
|
||||
getItemsForApiKind<T extends CatalogEntity>(apiVersion: string, kind: string): T[] {
|
||||
return registry.getItemsForApiKind<T>(apiVersion, kind);
|
||||
/**
|
||||
* @deprecated use cast and not the unused generic type param
|
||||
*/
|
||||
getItemsForApiKind<T extends CatalogEntity>(apiVersion: string, kind: string): T[];
|
||||
getItemsForApiKind(apiVersion: string, kind: string): CatalogEntity[] {
|
||||
return this.dependencies.internalRegistry.getItemsForApiKind(apiVersion, kind);
|
||||
}
|
||||
|
||||
getItemsForCategory<T extends CatalogEntity>(category: CatalogCategory): T[] {
|
||||
return registry.getItemsForCategory(category);
|
||||
/**
|
||||
* @deprecated use cast and not the unused generic type param
|
||||
*/
|
||||
getItemsForCategory<T extends CatalogEntity>(category: CatalogCategory): T[];
|
||||
getItemsForCategory(category: CatalogCategory): CatalogEntity[] {
|
||||
return this.dependencies.internalRegistry.getItemsForCategory(category);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -43,8 +62,72 @@ export class CatalogEntityRegistry {
|
||||
* @returns A function to remove that hook
|
||||
*/
|
||||
addOnBeforeRun(onBeforeRun: CatalogEntityOnBeforeRun): Disposer {
|
||||
return registry.addOnBeforeRun(onBeforeRun);
|
||||
return this.dependencies.internalRegistry.addOnBeforeRun(onBeforeRun);
|
||||
}
|
||||
}
|
||||
|
||||
export const catalogEntities = new CatalogEntityRegistry();
|
||||
interface CatalogCategoryRegistryDependencies {
|
||||
readonly internalRegistry: InternalCatalogCategoryRegistry;
|
||||
}
|
||||
|
||||
export type { CatalogCategoryRegistry };
|
||||
|
||||
class CatalogCategoryRegistry {
|
||||
constructor(protected readonly dependencies: CatalogCategoryRegistryDependencies) {}
|
||||
|
||||
add(category: CatalogCategory): Disposer {
|
||||
return this.dependencies.internalRegistry.add(category);
|
||||
}
|
||||
|
||||
get items() {
|
||||
return this.dependencies.internalRegistry.items;
|
||||
}
|
||||
|
||||
get filteredItems() {
|
||||
return this.dependencies.internalRegistry.filteredItems.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use cast instead of unused generic type argument
|
||||
*/
|
||||
getForGroupKind<T extends CatalogCategory>(group: string, kind: string): T | undefined;
|
||||
getForGroupKind(group: string, kind: string): CatalogCategory | undefined {
|
||||
return this.dependencies.internalRegistry.getForGroupKind(group, kind);
|
||||
}
|
||||
|
||||
getEntityForData(data: CatalogEntityData & CatalogEntityKindData): CatalogEntity | null {
|
||||
return this.dependencies.internalRegistry.getEntityForData(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use cast instead of unused generic type argument
|
||||
*/
|
||||
getCategoryForEntity<T extends CatalogCategory>({ kind, apiVersion }: CatalogEntityData & CatalogEntityKindData): T;
|
||||
/**
|
||||
* @throws if category is not found
|
||||
*/
|
||||
getCategoryForEntity(entity: CatalogEntityData & CatalogEntityKindData): CatalogCategory {
|
||||
return this.dependencies.internalRegistry.getCategoryForEntity(entity);
|
||||
}
|
||||
|
||||
getByName(name: string): CatalogCategory | undefined {
|
||||
return this.dependencies.internalRegistry.getByName(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new filter to the set of category filters
|
||||
* @param fn The function that should return a truthy value if that category should be displayed
|
||||
* @returns A function to remove that filter
|
||||
*/
|
||||
addCatalogCategoryFilter(fn: CategoryFilter): Disposer {
|
||||
return this.dependencies.internalRegistry.addCatalogCategoryFilter(fn);
|
||||
}
|
||||
}
|
||||
|
||||
export const catalogEntities = new CatalogEntityRegistry({
|
||||
internalRegistry: asLegacyGlobalObjectForExtensionApi(catalogEntityRegistryInjectable),
|
||||
});
|
||||
|
||||
export const catalogCategories = new CatalogCategoryRegistry({
|
||||
internalRegistry: asLegacyGlobalObjectForExtensionApi(catalogCategoryRegistryInjectable),
|
||||
});
|
||||
@@ -2,15 +2,18 @@
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
|
||||
import createTerminalTabInjectable from "../../renderer/components/dock/create-terminal-tab/create-terminal-tab.injectable";
|
||||
import terminalStoreInjectable from "../../renderer/components/dock/terminal-store/terminal-store.injectable";
|
||||
import terminalStoreInjectable from "../../renderer/components/dock/terminal/store.injectable";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
import logTabStoreInjectable from "../../renderer/components/dock/log-tab-store/log-tab-store.injectable";
|
||||
import { asLegacyGlobalSingletonForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-singleton-for-extension-api";
|
||||
import { TerminalStore as TerminalStoreClass } from "../../renderer/components/dock/terminal-store/terminal.store";
|
||||
|
||||
import { TerminalStore as TerminalStoreClass } from "../../renderer/components/dock/terminal/store";
|
||||
import commandOverlayInjectable from "../../renderer/components/command-palette/command-overlay.injectable";
|
||||
import newTerminalTabInjectable from "../../renderer/components/dock/terminal/create-tab.injectable";
|
||||
import { ConfirmDialog as _ConfirmDialog } from "../../renderer/components/confirm-dialog";
|
||||
import openConfirmDialogInjectable from "../../renderer/components/confirm-dialog/dialog-open.injectable";
|
||||
import confirmWithDialogInjectable from "../../renderer/components/confirm-dialog/dialog-confirm.injectable";
|
||||
import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
|
||||
import logTabStoreInjectable from "../../renderer/components/dock/logs/tab-store.injectable";
|
||||
|
||||
|
||||
// layouts
|
||||
export * from "../../renderer/components/layout/main-layout";
|
||||
@@ -36,6 +39,12 @@ export type {
|
||||
AdditionalCategoryColumnRegistration,
|
||||
} from "../../renderer/components/+catalog/custom-category-columns";
|
||||
|
||||
export type { ConfirmDialogBooleanParams, ConfirmDialogParams, ConfirmDialogProps } from "../../renderer/components/confirm-dialog";
|
||||
export const ConfirmDialog = Object.assign(_ConfirmDialog, {
|
||||
open: asLegacyGlobalFunctionForExtensionApi(openConfirmDialogInjectable),
|
||||
confirm: asLegacyGlobalFunctionForExtensionApi(confirmWithDialogInjectable),
|
||||
});
|
||||
|
||||
// other components
|
||||
export * from "../../renderer/components/icon";
|
||||
export * from "../../renderer/components/tooltip";
|
||||
@@ -44,14 +53,13 @@ export * from "../../renderer/components/table";
|
||||
export * from "../../renderer/components/badge";
|
||||
export * from "../../renderer/components/drawer";
|
||||
export * from "../../renderer/components/dialog";
|
||||
export * from "../../renderer/components/confirm-dialog";
|
||||
export * from "../../renderer/components/line-progress";
|
||||
export * from "../../renderer/components/menu";
|
||||
export * from "../../renderer/components/notifications";
|
||||
export * from "../../renderer/components/spinner";
|
||||
export * from "../../renderer/components/stepper";
|
||||
export * from "../../renderer/components/wizard";
|
||||
export * from "../../renderer/components/+workloads-pods/pod-details-list";
|
||||
export * from "../../renderer/components/+pods/details-list";
|
||||
export * from "../../renderer/components/+namespaces/namespace-select";
|
||||
export * from "../../renderer/components/+namespaces/namespace-select-filter";
|
||||
export * from "../../renderer/components/layout/sub-title";
|
||||
@@ -70,7 +78,7 @@ export * from "../../renderer/components/+events/kube-event-details";
|
||||
// specific exports
|
||||
export * from "../../renderer/components/status-brick";
|
||||
|
||||
export const createTerminalTab = asLegacyGlobalFunctionForExtensionApi(createTerminalTabInjectable);
|
||||
export const createTerminalTab = asLegacyGlobalFunctionForExtensionApi(newTerminalTabInjectable);
|
||||
export const TerminalStore = asLegacyGlobalSingletonForExtensionApi(TerminalStoreClass, terminalStoreInjectable);
|
||||
export const terminalStore = asLegacyGlobalObjectForExtensionApi(terminalStoreInjectable);
|
||||
export const logTabStore = asLegacyGlobalObjectForExtensionApi(logTabStoreInjectable);
|
||||
|
||||
@@ -3,43 +3,108 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
export { isAllowedResource } from "../../common/utils/allowed-resource";
|
||||
import apiManagerInjectable from "../../common/k8s-api/api-manager.injectable";
|
||||
import configMapApiInjectable from "../../common/k8s-api/endpoints/configmap.api.injectable";
|
||||
import cronJobApiInjectable from "../../common/k8s-api/endpoints/cron-job.api.injectable";
|
||||
import daemonSetApiInjectable from "../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||
import deploymentApiInjectable from "../../common/k8s-api/endpoints/deployment.api.injectable";
|
||||
import horizontalPodAutoscalerApiInjectable from "../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable";
|
||||
import jobApiInjectable from "../../common/k8s-api/endpoints/job.api.injectable";
|
||||
import limitRangeApiInjectable from "../../common/k8s-api/endpoints/limit-range.api.injectable";
|
||||
import nodeApiInjectable from "../../common/k8s-api/endpoints/node.api.injectable";
|
||||
import persistentVolumeClaimApiInjectable from "../../common/k8s-api/endpoints/persistent-volume-claim.api.injectable";
|
||||
import persistentVolumeApiInjectable from "../../common/k8s-api/endpoints/persistent-volume.api.injectable";
|
||||
import podApiInjectable from "../../common/k8s-api/endpoints/pod.api.injectable";
|
||||
import replicaSetApiInjectable from "../../common/k8s-api/endpoints/replica-set.api.injectable";
|
||||
import resourceQuotaApiInjectable from "../../common/k8s-api/endpoints/resource-quota.api.injectable";
|
||||
import secretApiInjectable from "../../common/k8s-api/endpoints/secret.api.injectable";
|
||||
import serviceApiInjectable from "../../common/k8s-api/endpoints/service.api.injectable";
|
||||
import statefulSetApiInjectable from "../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
||||
import horizontalPodAutoscalerStoreInjectable from "../../renderer/components/+autoscalers/store.injectable";
|
||||
import limitRangeStoreInjectable from "../../renderer/components/+limit-ranges/store.injectable";
|
||||
import resourceQuotaStoreInjectable from "../../renderer/components/+resource-quotas/store.injectable";
|
||||
import secretStoreInjectable from "../../renderer/components/+secrets/store.injectable";
|
||||
import eventStoreInjectable from "../../renderer/components/+events/store.injectable";
|
||||
import namespaceStoreInjectable from "../../renderer/components/+namespaces/store.injectable";
|
||||
import serviceAccountStoreInjectable from "../../renderer/components/+service-accounts/store.injectable";
|
||||
import cronJobStoreInjectable from "../../renderer/components/+cronjobs/store.injectable";
|
||||
import jobStoreInjectable from "../../renderer/components/+jobs/store.injectable";
|
||||
import replicaSetStoreInjectable from "../../renderer/components/+replica-sets/store.injectable";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
import nodeStoreInjectable from "../../renderer/components/+nodes/store.injectable";
|
||||
import podStoreInjectable from "../../renderer/components/+pods/store.injectable";
|
||||
import deploymentStoreInjectable from "../../renderer/components/+deployments/store.injectable";
|
||||
import daemonSetStoreInjectable from "../../renderer/components/+daemonsets/store.injectable";
|
||||
import statefulSetStoreInjectable from "../../renderer/components/+stateful-sets/store.injectable";
|
||||
import configMapStoreInjectable from "../../renderer/components/+config-maps/store.injectable";
|
||||
import persistentVolumeClaimStoreInjectable from "../../renderer/components/+persistent-volume-claims/store.injectable";
|
||||
import persistentVolumeStoreInjectable from "../../renderer/components/+persistent-volumes/store.injectable";
|
||||
import podDisruptionBudgetApiInjectable from "../../common/k8s-api/endpoints/pod-disruption-budget.api.injectable";
|
||||
import podDisruptionBudgetStoreInjectable from "../../renderer/components/+pod-disruption-budgets/store.injectable";
|
||||
import endpointApiInjectable from "../../common/k8s-api/endpoints/endpoint.api.injectable";
|
||||
import ingressApiInjectable from "../../common/k8s-api/endpoints/ingress.api.injectable";
|
||||
import networkPolicyApiInjectable from "../../common/k8s-api/endpoints/network-policy.api.injectable";
|
||||
import storageClassApiInjectable from "../../common/k8s-api/endpoints/storage-class.api.injectable";
|
||||
import namespaceApiInjectable from "../../common/k8s-api/endpoints/namespace.api.injectable";
|
||||
import eventApiInjectable from "../../common/k8s-api/endpoints/event.api.injectable";
|
||||
import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable";
|
||||
import endpointStoreInjectable from "../../renderer/components/+endpoints/store.injectable";
|
||||
import ingressStoreInjectable from "../../renderer/components/+ingresses/store.injectables";
|
||||
import networkPolicyStoreInjectable from "../../renderer/components/+network-policies/store.injectable";
|
||||
import storageClassStoreInjectable from "../../renderer/components/+storage-classes/store.injectable";
|
||||
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
|
||||
import roleStoreInjectable from "../../renderer/components/+roles/store.injectable";
|
||||
import roleBindingApiInjectable from "../../common/k8s-api/endpoints/role-binding.api.injectable";
|
||||
import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-role.api.injectable";
|
||||
import clusterRoleBindingApiInjectable from "../../common/k8s-api/endpoints/cluster-role-binding.api.injectable";
|
||||
import customResourceDefinitionApiInjectable from "../../common/k8s-api/endpoints/custom-resource-definition.api.injectable";
|
||||
import roleBindingStoreInjectable from "../../renderer/components/+role-bindings/store.injectable";
|
||||
import clusterRoleStoreInjectable from "../../renderer/components/+cluster-roles/store.injectable";
|
||||
import clusterRoleBindingStoreInjectable from "../../renderer/components/+cluster-role-bindings/store.injectable";
|
||||
import customResourceDefinitionStoreInjectable from "../../renderer/components/+custom-resource/store.injectable";
|
||||
import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
|
||||
import isAllowedResourceInjectable from "../../renderer/utils/allowed-resource.injectable";
|
||||
|
||||
export const isAllowedResource = asLegacyGlobalFunctionForExtensionApi(isAllowedResourceInjectable);
|
||||
|
||||
export { ResourceStack } from "../../common/k8s/resource-stack";
|
||||
export { apiManager } from "../../common/k8s-api/api-manager";
|
||||
export { KubeObjectStore } from "../../common/k8s-api/kube-object.store";
|
||||
export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube-api";
|
||||
export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object";
|
||||
export { Pod, podsApi, PodsApi } from "../../common/k8s-api/endpoints";
|
||||
export { Node, nodesApi, NodesApi } from "../../common/k8s-api/endpoints";
|
||||
export { Deployment, deploymentApi, DeploymentApi } from "../../common/k8s-api/endpoints";
|
||||
export { DaemonSet, daemonSetApi } from "../../common/k8s-api/endpoints";
|
||||
export { StatefulSet, statefulSetApi } from "../../common/k8s-api/endpoints";
|
||||
export { Job, jobApi } from "../../common/k8s-api/endpoints";
|
||||
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints";
|
||||
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints";
|
||||
export { Secret, secretsApi } from "../../common/k8s-api/endpoints";
|
||||
export { ReplicaSet, replicaSetApi } from "../../common/k8s-api/endpoints";
|
||||
export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints";
|
||||
export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints";
|
||||
export { HorizontalPodAutoscaler, hpaApi } from "../../common/k8s-api/endpoints";
|
||||
export { PodDisruptionBudget, pdbApi } from "../../common/k8s-api/endpoints";
|
||||
export { Service, serviceApi } from "../../common/k8s-api/endpoints";
|
||||
export { Endpoint, endpointApi } from "../../common/k8s-api/endpoints";
|
||||
export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints";
|
||||
export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints";
|
||||
export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints";
|
||||
export { PersistentVolumeClaim, pvcApi, PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints";
|
||||
export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints";
|
||||
export { Namespace, namespacesApi } from "../../common/k8s-api/endpoints";
|
||||
export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints";
|
||||
export { ServiceAccount, serviceAccountsApi } from "../../common/k8s-api/endpoints";
|
||||
export { Role, roleApi } from "../../common/k8s-api/endpoints";
|
||||
export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints";
|
||||
export { ClusterRole, clusterRoleApi } from "../../common/k8s-api/endpoints";
|
||||
export { ClusterRoleBinding, clusterRoleBindingApi } from "../../common/k8s-api/endpoints";
|
||||
export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints";
|
||||
export { KubeObjectStatusLevel } from "./kube-object-status";
|
||||
export { KubeJsonApi } from "../../common/k8s-api/kube-json-api";
|
||||
export {
|
||||
Pod, PodApi as PodsApi,
|
||||
Node, NodeApi as NodesApi,
|
||||
Deployment, DeploymentApi,
|
||||
DaemonSet, DaemonSetApi,
|
||||
StatefulSet, StatefulSetApi,
|
||||
Job, JobApi,
|
||||
CronJob, CronJobApi,
|
||||
ConfigMap, ConfigMapApi,
|
||||
Secret, SecretApi,
|
||||
ReplicaSet, ReplicaSetApi,
|
||||
ResourceQuota, ResourceQuotaApi,
|
||||
LimitRange, LimitRangeApi,
|
||||
HorizontalPodAutoscaler, HorizontalPodAutoscalerApi,
|
||||
PodDisruptionBudget, PodDisruptionBudgetApi,
|
||||
Service, ServiceApi,
|
||||
Endpoint, EndpointApi,
|
||||
Ingress, IngressApi,
|
||||
NetworkPolicy, NetworkPolicyApi,
|
||||
PersistentVolume, PersistentVolumeApi,
|
||||
PersistentVolumeClaim, PersistentVolumeClaimApi as PersistentVolumeClaimsApi,
|
||||
StorageClass, StorageClassApi,
|
||||
Namespace, NamespaceApi,
|
||||
Event as KubeEvent, EventApi,
|
||||
ServiceAccount, ServiceAccountApi,
|
||||
Role, RoleApi,
|
||||
RoleBinding, RoleBindingApi,
|
||||
ClusterRole, ClusterRoleApi,
|
||||
ClusterRoleBinding, ClusterRoleBindingApi,
|
||||
CustomResourceDefinition, CustomResourceDefinitionApi,
|
||||
} from "../../common/k8s-api/endpoints";
|
||||
export type { ApiManager } from "../../common/k8s-api/api-manager";
|
||||
|
||||
// types
|
||||
export type { ILocalKubeApiConfig, IRemoteKubeApiConfig, IKubeApiCluster } from "../../common/k8s-api/kube-api";
|
||||
@@ -48,31 +113,119 @@ export type { ISecretRef } from "../../common/k8s-api/endpoints";
|
||||
export type { KubeObjectStatus } from "./kube-object-status";
|
||||
|
||||
// stores
|
||||
export type { EventStore } from "../../renderer/components/+events/event.store";
|
||||
export type { PodsStore } from "../../renderer/components/+workloads-pods/pods.store";
|
||||
export type { NodesStore } from "../../renderer/components/+nodes/nodes.store";
|
||||
export type { DeploymentStore } from "../../renderer/components/+workloads-deployments/deployments.store";
|
||||
export type { DaemonSetStore } from "../../renderer/components/+workloads-daemonsets/daemonsets.store";
|
||||
export type { StatefulSetStore } from "../../renderer/components/+workloads-statefulsets/statefulset.store";
|
||||
export type { JobStore } from "../../renderer/components/+workloads-jobs/job.store";
|
||||
export type { CronJobStore } from "../../renderer/components/+workloads-cronjobs/cronjob.store";
|
||||
export type { ConfigMapsStore } from "../../renderer/components/+config-maps/config-maps.store";
|
||||
export type { SecretsStore } from "../../renderer/components/+config-secrets/secrets.store";
|
||||
export type { ReplicaSetStore } from "../../renderer/components/+workloads-replicasets/replicasets.store";
|
||||
export type { ResourceQuotasStore } from "../../renderer/components/+config-resource-quotas/resource-quotas.store";
|
||||
export type { LimitRangesStore } from "../../renderer/components/+config-limit-ranges/limit-ranges.store";
|
||||
export type { HPAStore } from "../../renderer/components/+config-autoscalers/hpa.store";
|
||||
export type { PodDisruptionBudgetsStore } from "../../renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.store";
|
||||
export type { ServiceStore } from "../../renderer/components/+network-services/services.store";
|
||||
export type { EndpointStore } from "../../renderer/components/+network-endpoints/endpoints.store";
|
||||
export type { IngressStore } from "../../renderer/components/+network-ingresses/ingress.store";
|
||||
export type { NetworkPolicyStore } from "../../renderer/components/+network-policies/network-policy.store";
|
||||
export type { PersistentVolumesStore } from "../../renderer/components/+storage-volumes/volumes.store";
|
||||
export type { VolumeClaimStore } from "../../renderer/components/+storage-volume-claims/volume-claim.store";
|
||||
export type { StorageClassStore } from "../../renderer/components/+storage-classes/storage-class.store";
|
||||
export type { NamespaceStore } from "../../renderer/components/+namespaces/namespace-store/namespace.store";
|
||||
export type { ServiceAccountsStore } from "../../renderer/components/+user-management/+service-accounts/store";
|
||||
export type { RolesStore } from "../../renderer/components/+user-management/+roles/store";
|
||||
export type { RoleBindingsStore } from "../../renderer/components/+user-management/+role-bindings/store";
|
||||
export type { CRDStore } from "../../renderer/components/+custom-resources/crd.store";
|
||||
export type { CRDResourceStore } from "../../renderer/components/+custom-resources/crd-resource.store";
|
||||
export type { EventStore } from "../../renderer/components/+events/store";
|
||||
export type { PodStore as PodsStore } from "../../renderer/components/+pods/store";
|
||||
export type { NodeStore as NodesStore } from "../../renderer/components/+nodes/store";
|
||||
export type { DeploymentStore } from "../../renderer/components/+deployments/store";
|
||||
export type { DaemonSetStore } from "../../renderer/components/+daemonsets/store";
|
||||
export type { StatefulSetStore } from "../../renderer/components/+stateful-sets/store";
|
||||
export type { JobStore } from "../../renderer/components/+jobs/store";
|
||||
export type { CronJobStore } from "../../renderer/components/+cronjobs/store";
|
||||
export type { ConfigMapStore as ConfigMapsStore } from "../../renderer/components/+config-maps/store";
|
||||
export type { SecretStore as SecretsStore } from "../../renderer/components/+secrets/store";
|
||||
export type { ReplicaSetStore } from "../../renderer/components/+replica-sets/store";
|
||||
export type { ResourceQuotaStore as ResourceQuotasStore } from "../../renderer/components/+resource-quotas/store";
|
||||
export type { LimitRangeStore as LimitRangesStore } from "../../renderer/components/+limit-ranges/store";
|
||||
export type { HorizontalPodAutoscalerStore as HPAStore } from "../../renderer/components/+autoscalers/store";
|
||||
export type { PodDisruptionBudgetStore as PodDisruptionBudgetsStore } from "../../renderer/components/+pod-disruption-budgets/store";
|
||||
export type { ServiceStore } from "../../renderer/components/+services/store";
|
||||
export type { EndpointStore } from "../../renderer/components/+endpoints/store";
|
||||
export type { IngressStore } from "../../renderer/components/+ingresses/store";
|
||||
export type { NetworkPolicyStore } from "../../renderer/components/+network-policies/store";
|
||||
export type { PersistentVolumeStore as PersistentVolumesStore } from "../../renderer/components/+persistent-volumes/store";
|
||||
export type { PersistentVolumeClaimStore as VolumeClaimStore } from "../../renderer/components/+persistent-volume-claims/store";
|
||||
export type { StorageClassStore } from "../../renderer/components/+storage-classes/store";
|
||||
export type { NamespaceStore } from "../../renderer/components/+namespaces/store";
|
||||
export type { ServiceAccountStore as ServiceAccountsStore } from "../../renderer/components/+service-accounts/store";
|
||||
export type { RoleStore as RolesStore } from "../../renderer/components/+roles/store";
|
||||
export type { RoleBindingStore as RoleBindingsStore } from "../../renderer/components/+role-bindings/store";
|
||||
export type { CustomResourceDefinitionStore as CRDStore } from "../../renderer/components/+custom-resource/store";
|
||||
export type { CRDResourceStore } from "../../renderer/components/+custom-resource/resource.store";
|
||||
|
||||
export const apiManager = asLegacyGlobalObjectForExtensionApi(apiManagerInjectable);
|
||||
|
||||
export const nodesApi = asLegacyGlobalObjectForExtensionApi(nodeApiInjectable);
|
||||
export const nodeStore = asLegacyGlobalObjectForExtensionApi(nodeStoreInjectable);
|
||||
|
||||
export const podsApi = asLegacyGlobalObjectForExtensionApi(podApiInjectable);
|
||||
export const podStore = asLegacyGlobalObjectForExtensionApi(podStoreInjectable);
|
||||
|
||||
export const serviceApi = asLegacyGlobalObjectForExtensionApi(serviceApiInjectable);
|
||||
|
||||
export const deploymentApi = asLegacyGlobalObjectForExtensionApi(deploymentApiInjectable);
|
||||
export const deploymentStore = asLegacyGlobalObjectForExtensionApi(deploymentStoreInjectable);
|
||||
|
||||
export const daemonSetApi = asLegacyGlobalObjectForExtensionApi(daemonSetApiInjectable);
|
||||
export const daemonSetStore = asLegacyGlobalObjectForExtensionApi(daemonSetStoreInjectable);
|
||||
|
||||
export const statefulSetApi = asLegacyGlobalObjectForExtensionApi(statefulSetApiInjectable);
|
||||
export const statefulSetStore = asLegacyGlobalObjectForExtensionApi(statefulSetStoreInjectable);
|
||||
|
||||
export const jobApi = asLegacyGlobalObjectForExtensionApi(jobApiInjectable);
|
||||
export const jobStore = asLegacyGlobalObjectForExtensionApi(jobStoreInjectable);
|
||||
|
||||
export const cronJobApi = asLegacyGlobalObjectForExtensionApi(cronJobApiInjectable);
|
||||
export const cronJobStore = asLegacyGlobalObjectForExtensionApi(cronJobStoreInjectable);
|
||||
|
||||
export const configMapApi = asLegacyGlobalObjectForExtensionApi(configMapApiInjectable);
|
||||
export const configMapStore = asLegacyGlobalObjectForExtensionApi(configMapStoreInjectable);
|
||||
|
||||
export const pvcApi = asLegacyGlobalObjectForExtensionApi(persistentVolumeClaimApiInjectable);
|
||||
export const persistentVolumeClaimStore = asLegacyGlobalObjectForExtensionApi(persistentVolumeClaimStoreInjectable);
|
||||
|
||||
export const persistentVolumeApi = asLegacyGlobalObjectForExtensionApi(persistentVolumeApiInjectable);
|
||||
export const persistentVolumeStore = asLegacyGlobalObjectForExtensionApi(persistentVolumeStoreInjectable);
|
||||
|
||||
export const secretApi = asLegacyGlobalObjectForExtensionApi(secretApiInjectable);
|
||||
export const secretStore = asLegacyGlobalObjectForExtensionApi(secretStoreInjectable);
|
||||
|
||||
export const replicaSetApi = asLegacyGlobalObjectForExtensionApi(replicaSetApiInjectable);
|
||||
export const replicaSetStore = asLegacyGlobalObjectForExtensionApi(replicaSetStoreInjectable);
|
||||
|
||||
export const resourceQuotaApi = asLegacyGlobalObjectForExtensionApi(resourceQuotaApiInjectable);
|
||||
export const resourceQuotaStore = asLegacyGlobalObjectForExtensionApi(resourceQuotaStoreInjectable);
|
||||
|
||||
export const limitRangeApi = asLegacyGlobalObjectForExtensionApi(limitRangeApiInjectable);
|
||||
export const limitRangeStore = asLegacyGlobalObjectForExtensionApi(limitRangeStoreInjectable);
|
||||
|
||||
export const hpaApi = asLegacyGlobalObjectForExtensionApi(horizontalPodAutoscalerApiInjectable);
|
||||
export const horizontalPodAutoscalerStore = asLegacyGlobalObjectForExtensionApi(horizontalPodAutoscalerStoreInjectable);
|
||||
|
||||
export const pdbApi = asLegacyGlobalObjectForExtensionApi(podDisruptionBudgetApiInjectable);
|
||||
export const podDisruptionBudgetStore = asLegacyGlobalObjectForExtensionApi(podDisruptionBudgetStoreInjectable);
|
||||
|
||||
export const endpointApi = asLegacyGlobalObjectForExtensionApi(endpointApiInjectable);
|
||||
export const endpointStore = asLegacyGlobalObjectForExtensionApi(endpointStoreInjectable);
|
||||
|
||||
export const ingressApi = asLegacyGlobalObjectForExtensionApi(ingressApiInjectable);
|
||||
export const ingressStore = asLegacyGlobalObjectForExtensionApi(ingressStoreInjectable);
|
||||
|
||||
export const networkPolicyApi = asLegacyGlobalObjectForExtensionApi(networkPolicyApiInjectable);
|
||||
export const networkPolicyStore = asLegacyGlobalObjectForExtensionApi(networkPolicyStoreInjectable);
|
||||
|
||||
export const storageClassApi = asLegacyGlobalObjectForExtensionApi(storageClassApiInjectable);
|
||||
export const storageClassStore = asLegacyGlobalObjectForExtensionApi(storageClassStoreInjectable);
|
||||
|
||||
export const namespacesApi = asLegacyGlobalObjectForExtensionApi(namespaceApiInjectable);
|
||||
export const namespaceStore = asLegacyGlobalObjectForExtensionApi(namespaceStoreInjectable);
|
||||
|
||||
export const eventApi = asLegacyGlobalObjectForExtensionApi(eventApiInjectable);
|
||||
export const eventStore = asLegacyGlobalObjectForExtensionApi(eventStoreInjectable);
|
||||
|
||||
export const serviceAccountsApi = asLegacyGlobalObjectForExtensionApi(serviceAccountApiInjectable);
|
||||
export const serviceAccountStore = asLegacyGlobalObjectForExtensionApi(serviceAccountStoreInjectable);
|
||||
|
||||
export const roleApi = asLegacyGlobalObjectForExtensionApi(roleApiInjectable);
|
||||
export const roleStore = asLegacyGlobalObjectForExtensionApi(roleStoreInjectable);
|
||||
|
||||
export const roleBindingApi = asLegacyGlobalObjectForExtensionApi(roleBindingApiInjectable);
|
||||
export const roleBindingStore = asLegacyGlobalObjectForExtensionApi(roleBindingStoreInjectable);
|
||||
|
||||
export const clusterRoleApi = asLegacyGlobalObjectForExtensionApi(clusterRoleApiInjectable);
|
||||
export const clusterRoleStore = asLegacyGlobalObjectForExtensionApi(clusterRoleStoreInjectable);
|
||||
|
||||
export const clusterRoleBindingApi = asLegacyGlobalObjectForExtensionApi(clusterRoleBindingApiInjectable);
|
||||
export const clusterRoleBindingStore = asLegacyGlobalObjectForExtensionApi(clusterRoleBindingStoreInjectable);
|
||||
|
||||
export const crdApi = asLegacyGlobalObjectForExtensionApi(customResourceDefinitionApiInjectable);
|
||||
export const customResourceDefinitionStore = asLegacyGlobalObjectForExtensionApi(customResourceDefinitionStoreInjectable);
|
||||
@@ -3,8 +3,11 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import { ThemeStore } from "../../renderer/theme.store";
|
||||
import activeThemeInjectable from "../../renderer/themes/active-theme.injectable";
|
||||
import { asLegacyGlobalObjectForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
|
||||
const activeTheme = asLegacyGlobalObjectForExtensionApi(activeThemeInjectable);
|
||||
|
||||
export function getActiveTheme() {
|
||||
return ThemeStore.getInstance().activeTheme;
|
||||
return activeTheme.get();
|
||||
}
|
||||
Reference in new issue
Block a user