diff --git a/src/common/utils/index.ts b/src/common/utils/index.ts index e43863284d..6b2a8ff0a9 100644 --- a/src/common/utils/index.ts +++ b/src/common/utils/index.ts @@ -1,5 +1,7 @@ // Common utils (main OR renderer) +export const noop: any = () => { /* */ }; + export * from "./app-version"; export * from "./autobind"; export * from "./base64"; diff --git a/src/extensions/registries/base-registry.ts b/src/extensions/registries/base-registry.ts index 73dbd373f0..bb0ce0a902 100644 --- a/src/extensions/registries/base-registry.ts +++ b/src/extensions/registries/base-registry.ts @@ -2,19 +2,18 @@ import { action, observable } from "mobx"; import { LensExtension } from "../lens-extension"; -export class BaseRegistry { +export class BaseRegistry { private items = observable([], { deep: false }); - getItems(): I[] { - return this.items.toJS() as I[]; + getItems(): T[] { + return this.items.toJS(); } - add(items: T | T[], ext?: LensExtension): () => void; // allow method overloading with required "ext" + add(items: T[], ext?: LensExtension): () => void; // allow method overloading with required "ext" @action - add(items: T | T[]) { - const normalizedItems = (Array.isArray(items) ? items : [items]); - this.items.push(...normalizedItems); - return () => this.remove(...normalizedItems); + add(items: T[]) { + this.items.push(...items); + return () => this.remove(...items); } @action diff --git a/src/extensions/registries/kube-object-detail-registry.ts b/src/extensions/registries/kube-object-detail-registry.ts index 2638e82ade..def2486d15 100644 --- a/src/extensions/registries/kube-object-detail-registry.ts +++ b/src/extensions/registries/kube-object-detail-registry.ts @@ -14,15 +14,10 @@ export interface KubeObjectDetailRegistration { export class KubeObjectDetailRegistry extends BaseRegistry { getItemsForKind(kind: string, apiVersion: string) { - const items = this.getItems().filter((item) => { - return item.kind === kind && item.apiVersions.includes(apiVersion); - }).map((item) => { - if (item.priority === null) { - item.priority = 50; - } - return item; - }); - return items.sort((a, b) => b.priority - a.priority); + return this.getItems() + .filter(item => item.kind === kind && item.apiVersions.includes(apiVersion)) + .map(item => (item.priority ??= 50, item)) + .sort((a, b) => b.priority - a.priority); } } diff --git a/src/extensions/registries/kube-object-menu-registry.ts b/src/extensions/registries/kube-object-menu-registry.ts index 25901f66ad..cfcca2757e 100644 --- a/src/extensions/registries/kube-object-menu-registry.ts +++ b/src/extensions/registries/kube-object-menu-registry.ts @@ -13,9 +13,8 @@ export interface KubeObjectMenuRegistration { export class KubeObjectMenuRegistry extends BaseRegistry { getItemsForKind(kind: string, apiVersion: string) { - return this.getItems().filter((item) => { - return item.kind === kind && item.apiVersions.includes(apiVersion); - }); + return this.getItems() + .filter(item => item.kind === kind && item.apiVersions.includes(apiVersion)); } } diff --git a/src/extensions/registries/kube-object-status-registry.ts b/src/extensions/registries/kube-object-status-registry.ts index 5f7aab8d5d..d310e43c00 100644 --- a/src/extensions/registries/kube-object-status-registry.ts +++ b/src/extensions/registries/kube-object-status-registry.ts @@ -9,9 +9,8 @@ export interface KubeObjectStatusRegistration { export class KubeObjectStatusRegistry extends BaseRegistry { getItemsForKind(kind: string, apiVersion: string) { - return this.getItems().filter((item) => { - return item.kind === kind && item.apiVersions.includes(apiVersion); - }); + return this.getItems() + .filter(item => item.kind === kind && item.apiVersions.includes(apiVersion)); } } diff --git a/src/extensions/registries/page-menu-registry.ts b/src/extensions/registries/page-menu-registry.ts index 53131f507b..cf64214763 100644 --- a/src/extensions/registries/page-menu-registry.ts +++ b/src/extensions/registries/page-menu-registry.ts @@ -30,28 +30,16 @@ export interface PageMenuComponents { export class GlobalPageMenuRegistry extends BaseRegistry { @action add(items: PageMenuRegistration[], ext: LensExtension) { - const normalizedItems = items.map(menuItem => { - menuItem.target = { - extensionId: ext.name, - ...(menuItem.target || {}), - }; - return menuItem; - }); - return super.add(normalizedItems); + const norm = items.map(item => ((item.target ??= {}).extensionId = ext.name, item)); + return super.add(norm); } } export class ClusterPageMenuRegistry extends BaseRegistry { @action add(items: PageMenuRegistration[], ext: LensExtension) { - const normalizedItems = items.map(menuItem => { - menuItem.target = { - extensionId: ext.name, - ...(menuItem.target || {}), - }; - return menuItem; - }); - return super.add(normalizedItems); + const norm = items.map(item => ((item.target ??= {}).extensionId = ext.name, item)); + return super.add(norm); } getRootItems() { diff --git a/src/extensions/registries/page-registry.ts b/src/extensions/registries/page-registry.ts index 4b9c872715..05906bb4fb 100644 --- a/src/extensions/registries/page-registry.ts +++ b/src/extensions/registries/page-registry.ts @@ -7,6 +7,7 @@ import { compile } from "path-to-regexp"; import { BaseRegistry } from "./base-registry"; import { LensExtension } from "../lens-extension"; import logger from "../../main/logger"; +import { noop } from "../../common/utils"; export interface PageRegistration { /** @@ -59,24 +60,26 @@ export function getExtensionPageUrl

({ extensionId, pageId = "" return extPageRoutePath; } -export class PageRegistry extends BaseRegistry { +export class PageRegistry extends BaseRegistry { @action add(items: PageRegistration[], ext: LensExtension) { - let registeredPages: RegisteredPage[] = []; try { - registeredPages = items.map(page => ({ + const pages = items.map(page => ({ ...page, extensionId: ext.name, routePath: getExtensionPageUrl({ extensionId: ext.name, pageId: page.id ?? page.routePath }), })); + + return super.add(pages); } catch (err) { logger.error(`[EXTENSION]: page-registration failed`, { items, extension: ext, error: String(err), }); + + return noop; } - return super.add(registeredPages); } getUrl

({ extensionId, id: pageId }: RegisteredPage, params?: P) { diff --git a/src/renderer/utils/index.ts b/src/renderer/utils/index.ts index 149d9aa1e8..f76547371d 100755 --- a/src/renderer/utils/index.ts +++ b/src/renderer/utils/index.ts @@ -1,6 +1,5 @@ // Common usage utils & helpers -export const noop: any = Function(); export const isElectron = !!navigator.userAgent.match(/Electron/); export * from "../../common/utils";