From 5ff438ba425bf1c435be24dab978fa260db26757 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 25 May 2021 15:28:24 -0400 Subject: [PATCH] moves around extension API Signed-off-by: Sebastian Malton --- .../{core-api => common-api}/app.ts | 0 .../{core-api => common-api}/event-bus.ts | 0 .../{core-api => common-api}/index.ts | 12 +-- .../registrations.ts | 0 .../{core-api => common-api}/stores.ts | 0 .../{core-api => common-api}/types.ts | 0 .../{core-api => common-api}/utils.ts | 0 src/extensions/core-api/renderer/catalog.ts | 71 ------------------ src/extensions/extension-api.ts | 5 +- .../{core-api/main => main-api}/catalog.ts | 27 +++---- .../{interfaces => main-api}/index.ts | 9 ++- src/extensions/renderer-api/catalog.ts | 74 +++++++++++++++++++ src/extensions/renderer-api/index.ts | 3 + .../main => main/catalog-entities}/index.ts | 8 +- .../catalog-entities/kubernetes-cluster.ts} | 13 +++- .../catalog-entities/web-link.ts} | 13 +++- src/main/cluster-manager.ts | 13 ++-- src/main/index.ts | 2 +- .../protocol-handler/__test__/router.test.ts | 2 +- src/renderer/bootstrap.tsx | 7 +- .../catalog-entities/kubernetes-cluster.ts | 4 +- src/renderer/catalog-entities/web-link.ts | 4 +- src/renderer/catalog/catalog-entity.ts | 4 +- 23 files changed, 150 insertions(+), 121 deletions(-) rename src/extensions/{core-api => common-api}/app.ts (100%) rename src/extensions/{core-api => common-api}/event-bus.ts (100%) rename src/extensions/{core-api => common-api}/index.ts (81%) rename src/extensions/{interfaces => common-api}/registrations.ts (100%) rename src/extensions/{core-api => common-api}/stores.ts (100%) rename src/extensions/{core-api => common-api}/types.ts (100%) rename src/extensions/{core-api => common-api}/utils.ts (100%) delete mode 100644 src/extensions/core-api/renderer/catalog.ts rename src/extensions/{core-api/main => main-api}/catalog.ts (61%) rename src/extensions/{interfaces => main-api}/index.ts (90%) create mode 100644 src/extensions/renderer-api/catalog.ts rename src/{extensions/core-api/main => main/catalog-entities}/index.ts (88%) rename src/{extensions/core-api/renderer/index.ts => main/catalog-entities/kubernetes-cluster.ts} (70%) rename src/{extensions/interfaces/catalog.ts => main/catalog-entities/web-link.ts} (72%) diff --git a/src/extensions/core-api/app.ts b/src/extensions/common-api/app.ts similarity index 100% rename from src/extensions/core-api/app.ts rename to src/extensions/common-api/app.ts diff --git a/src/extensions/core-api/event-bus.ts b/src/extensions/common-api/event-bus.ts similarity index 100% rename from src/extensions/core-api/event-bus.ts rename to src/extensions/common-api/event-bus.ts diff --git a/src/extensions/core-api/index.ts b/src/extensions/common-api/index.ts similarity index 81% rename from src/extensions/core-api/index.ts rename to src/extensions/common-api/index.ts index 2db413ffb3..2130b77f6a 100644 --- a/src/extensions/core-api/index.ts +++ b/src/extensions/common-api/index.ts @@ -19,29 +19,21 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -// Lens-extensions api developer's kit -export { LensMainExtension } from "../lens-main-extension"; -export { LensRendererExtension } from "../lens-renderer-extension"; - // APIs import * as App from "./app"; import * as EventBus from "./event-bus"; import * as Store from "./stores"; import * as Util from "./utils"; -import * as Interface from "../interfaces"; -import * as Main from "./main"; -import * as Renderer from "./renderer"; import * as Catalog from "../../common/catalog"; import * as Types from "./types"; +import * as Registrations from "./registrations"; export { App, EventBus, - Main, - Renderer, Catalog, - Interface, Store, Types, + Registrations, Util, }; diff --git a/src/extensions/interfaces/registrations.ts b/src/extensions/common-api/registrations.ts similarity index 100% rename from src/extensions/interfaces/registrations.ts rename to src/extensions/common-api/registrations.ts diff --git a/src/extensions/core-api/stores.ts b/src/extensions/common-api/stores.ts similarity index 100% rename from src/extensions/core-api/stores.ts rename to src/extensions/common-api/stores.ts diff --git a/src/extensions/core-api/types.ts b/src/extensions/common-api/types.ts similarity index 100% rename from src/extensions/core-api/types.ts rename to src/extensions/common-api/types.ts diff --git a/src/extensions/core-api/utils.ts b/src/extensions/common-api/utils.ts similarity index 100% rename from src/extensions/core-api/utils.ts rename to src/extensions/common-api/utils.ts diff --git a/src/extensions/core-api/renderer/catalog.ts b/src/extensions/core-api/renderer/catalog.ts deleted file mode 100644 index 5ab2b503f0..0000000000 --- a/src/extensions/core-api/renderer/catalog.ts +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright (c) 2021 OpenLens Authors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - -import { CatalogEntityRegistry as InternalCatalogEntityRegistry, CatalogCategoryRegistry as InternalCatalogCategoryRegistry, CatalogEntity, CategoryHandlerNames, CatalogHandler, EntityContextHandlers, CategoryHandlers, GlobalContextHandlers } from "../../../renderer/catalog"; -import type { CatalogCategoryRegistration } from "../../../renderer/catalog"; - -export type { - CatalogEntity, -} from "../../../renderer/catalog"; - -export class CatalogEntityRegistry { - static getItemsForApiKind(apiVersion: string, kind: string): T[] { - return InternalCatalogEntityRegistry.getInstance().getItemsForApiKind(apiVersion, kind); - } -} - -export class CatalogCategoryRegistry { - static add(category: CatalogCategoryRegistration) { - return InternalCatalogCategoryRegistry.getInstance().add(category); - } - - static get items() { - return InternalCatalogCategoryRegistry.getInstance().items; - } - - static getForGroupKind(group: string, version: string, kind: string) { - return InternalCatalogCategoryRegistry.getInstance().getForGroupKind(group, version, kind); - } - - static hasForGroupKind(group: string, version: string, kind: string) { - return InternalCatalogCategoryRegistry.getInstance().hasForGroupKind(group, version, kind); - } - - static getCategoryForEntity(data: CatalogEntity) { - return InternalCatalogCategoryRegistry.getInstance().getCategoryForEntity(data); - } - - static registerHandler(apiVersion: string, kind: string, handlerName: CategoryHandlerNames, handler: CatalogHandler) { - return InternalCatalogCategoryRegistry.getInstance().registerHandler(apiVersion, kind, handlerName, handler); - } - - static runEntityHandlersFor(entity: CatalogEntity, handlerName: "onContextMenuOpen"): ReturnType; - static runEntityHandlersFor(entity: CatalogEntity, handlerName: "onSettingsOpen"): ReturnType; - static runEntityHandlersFor(entity: CatalogEntity, handlerName: EntityContextHandlers): ReturnType { - return InternalCatalogCategoryRegistry.getInstance().runEntityHandlersFor(entity, handlerName as any); - } - - static runGlobalHandlersFor(reg: CatalogCategoryRegistration, handlerName: "onCatalogAddMenu"): ReturnType; - static runGlobalHandlersFor(reg: CatalogCategoryRegistration, handlerName: GlobalContextHandlers): ReturnType { - return InternalCatalogCategoryRegistry.getInstance().runGlobalHandlersFor(reg, handlerName as any); - } -} diff --git a/src/extensions/extension-api.ts b/src/extensions/extension-api.ts index 4e584419e1..426accf377 100644 --- a/src/extensions/extension-api.ts +++ b/src/extensions/extension-api.ts @@ -22,5 +22,6 @@ // Extensions-api types bundle (main + renderer) // Available for lens-extensions via NPM-package "@k8slens/extensions" -export * from "./core-api"; -export * from "./renderer-api"; +export * as Common from "./common-api"; +export * as Renderer from "./renderer-api"; +export * as Main from "./main-api"; diff --git a/src/extensions/core-api/main/catalog.ts b/src/extensions/main-api/catalog.ts similarity index 61% rename from src/extensions/core-api/main/catalog.ts rename to src/extensions/main-api/catalog.ts index 9b2e609a2b..53ae5da133 100644 --- a/src/extensions/core-api/main/catalog.ts +++ b/src/extensions/main-api/catalog.ts @@ -19,41 +19,42 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -import { CatalogEntityRegistry as InternalCatalogEntityRegistry, CatalogCategoryRegistry as InternalCatalogCategoryRegistry, CatalogEntity, CatalogCategoryRegistration, SpecEnhancer } from "../../../main/catalog"; +import * as internal from "../../main/catalog"; export type { CatalogEntity, -} from "../../../main/catalog"; +} from "../../main/catalog"; + +export * from "../../main/catalog-entities"; export class CatalogEntityRegistry { static get items() { - return InternalCatalogEntityRegistry.getInstance().items; + return internal.CatalogEntityRegistry.getInstance().items; } } export class CatalogCategoryRegistry { - static add(category: CatalogCategoryRegistration) { - return InternalCatalogCategoryRegistry.getInstance().add(category); + static add(category: internal.CatalogCategoryRegistration) { + return internal.CatalogCategoryRegistry.getInstance().add(category); } static get items() { - return InternalCatalogCategoryRegistry.getInstance().items; + return internal.CatalogCategoryRegistry.getInstance().items; } static getForGroupKind(group: string, version: string, kind: string) { - return InternalCatalogCategoryRegistry.getInstance().getForGroupKind(group, version, kind); + return internal.CatalogCategoryRegistry.getInstance().getForGroupKind(group, version, kind); } static hasForGroupKind(group: string, version: string, kind: string) { - return InternalCatalogCategoryRegistry.getInstance().hasForGroupKind(group, version, kind); + return internal.CatalogCategoryRegistry.getInstance().hasForGroupKind(group, version, kind); } - static getCategoryForEntity(data: CatalogEntity) { - return InternalCatalogCategoryRegistry.getInstance().getCategoryForEntity(data); + static getCategoryForEntity(data: internal.CatalogEntity) { + return internal.CatalogCategoryRegistry.getInstance().getCategoryForEntity(data); } - static registerSpecEnhancer(apiVersion: string, kind: string, handler: SpecEnhancer) { - return InternalCatalogCategoryRegistry.getInstance().registerSpecEnhancer(apiVersion, kind, handler); + static registerSpecEnhancer(apiVersion: string, kind: string, handler: internal.SpecEnhancer) { + return internal.CatalogCategoryRegistry.getInstance().registerSpecEnhancer(apiVersion, kind, handler); } } diff --git a/src/extensions/interfaces/index.ts b/src/extensions/main-api/index.ts similarity index 90% rename from src/extensions/interfaces/index.ts rename to src/extensions/main-api/index.ts index 876e37069e..d04cac6bb2 100644 --- a/src/extensions/interfaces/index.ts +++ b/src/extensions/main-api/index.ts @@ -19,5 +19,10 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -export * from "./registrations"; -export * from "./catalog"; +import * as Catalog from "./catalog"; + +export { LensMainExtension } from "../lens-main-extension"; + +export { + Catalog, +}; diff --git a/src/extensions/renderer-api/catalog.ts b/src/extensions/renderer-api/catalog.ts new file mode 100644 index 0000000000..80cd94260f --- /dev/null +++ b/src/extensions/renderer-api/catalog.ts @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import * as internal from "../../renderer/catalog"; + +export type { + CatalogEntity, + CatalogCategoryRegistration, +} from "../../renderer/catalog"; + +export type { + KubernetesCluster, +} from "../../renderer/catalog-entities"; + +export class CatalogEntityRegistry { + static getItemsForApiKind(apiVersion: string, kind: string): T[] { + return internal.CatalogEntityRegistry.getInstance().getItemsForApiKind(apiVersion, kind); + } +} + +export class CatalogCategoryRegistry { + static add(category: internal.CatalogCategoryRegistration) { + return internal.CatalogCategoryRegistry.getInstance().add(category); + } + + static get items() { + return internal.CatalogCategoryRegistry.getInstance().items; + } + + static getForGroupKind(group: string, version: string, kind: string) { + return internal.CatalogCategoryRegistry.getInstance().getForGroupKind(group, version, kind); + } + + static hasForGroupKind(group: string, version: string, kind: string) { + return internal.CatalogCategoryRegistry.getInstance().hasForGroupKind(group, version, kind); + } + + static getCategoryForEntity(data: internal.CatalogEntity) { + return internal.CatalogCategoryRegistry.getInstance().getCategoryForEntity(data); + } + + static registerHandler(apiVersion: string, kind: string, handlerName: internal.CategoryHandlerNames, handler: internal.CatalogHandler) { + return internal.CatalogCategoryRegistry.getInstance().registerHandler(apiVersion, kind, handlerName, handler); + } + + static runEntityHandlersFor(entity: internal.CatalogEntity, handlerName: "onContextMenuOpen"): ReturnType; + static runEntityHandlersFor(entity: internal.CatalogEntity, handlerName: "onSettingsOpen"): ReturnType; + static runEntityHandlersFor(entity: internal.CatalogEntity, handlerName: internal.EntityContextHandlers): ReturnType { + return internal.CatalogCategoryRegistry.getInstance().runEntityHandlersFor(entity, handlerName as any); + } + + static runGlobalHandlersFor(reg: internal.CatalogCategoryRegistration, handlerName: "onCatalogAddMenu"): ReturnType; + static runGlobalHandlersFor(reg: internal.CatalogCategoryRegistration, handlerName: internal.GlobalContextHandlers): ReturnType { + return internal.CatalogCategoryRegistry.getInstance().runGlobalHandlersFor(reg, handlerName as any); + } +} diff --git a/src/extensions/renderer-api/index.ts b/src/extensions/renderer-api/index.ts index 3c53d31415..f2b4d449db 100644 --- a/src/extensions/renderer-api/index.ts +++ b/src/extensions/renderer-api/index.ts @@ -20,16 +20,19 @@ */ // Lens-extensions apis, required in renderer process runtime +export { LensRendererExtension } from "../lens-renderer-extension"; // APIs import * as Component from "./components"; import * as K8sApi from "./k8s-api"; import * as Navigation from "./navigation"; import * as Theme from "./theming"; +import * as Catalog from "./catalog"; export { Component, K8sApi, Navigation, Theme, + Catalog, }; diff --git a/src/extensions/core-api/main/index.ts b/src/main/catalog-entities/index.ts similarity index 88% rename from src/extensions/core-api/main/index.ts rename to src/main/catalog-entities/index.ts index bfd02582d6..d089b01cd3 100644 --- a/src/extensions/core-api/main/index.ts +++ b/src/main/catalog-entities/index.ts @@ -19,4 +19,10 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -export * as Catalog from "./catalog"; +import * as KubernetesCluster from "./kubernetes-cluster"; +import * as WebLink from "./web-link"; + +export { + KubernetesCluster, + WebLink, +}; diff --git a/src/extensions/core-api/renderer/index.ts b/src/main/catalog-entities/kubernetes-cluster.ts similarity index 70% rename from src/extensions/core-api/renderer/index.ts rename to src/main/catalog-entities/kubernetes-cluster.ts index bfd02582d6..7933a02912 100644 --- a/src/extensions/core-api/renderer/index.ts +++ b/src/main/catalog-entities/kubernetes-cluster.ts @@ -19,4 +19,15 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -export * as Catalog from "./catalog"; +import type { CatalogEntityMetadata } from "../../common/catalog"; +import type { KubernetesClusterSpec } from "../../common/catalog-entities"; +import type { CatalogEntity } from "../catalog/catalog-entity"; + +export function v1alpha1(metadata: CatalogEntityMetadata, spec: KubernetesClusterSpec): CatalogEntity { + return { + apiVersion: "entity.k8slens.dev/v1alpha1", + kind: "KubernetesCluster", + metadata, + spec, + }; +} diff --git a/src/extensions/interfaces/catalog.ts b/src/main/catalog-entities/web-link.ts similarity index 72% rename from src/extensions/interfaces/catalog.ts rename to src/main/catalog-entities/web-link.ts index d1a54a89d3..378c49f630 100644 --- a/src/extensions/interfaces/catalog.ts +++ b/src/main/catalog-entities/web-link.ts @@ -19,4 +19,15 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -export * from "../../common/catalog/catalog-entity"; +import type { CatalogEntityMetadata } from "../../common/catalog"; +import type { WebLinkSpec } from "../../common/catalog-entities"; +import type { CatalogEntity } from "../catalog"; + +export function v1alpha1(metadata: CatalogEntityMetadata, spec: WebLinkSpec): CatalogEntity { + return { + apiVersion: "entity.k8slens.dev/v1alpha1", + kind: "WebLink", + metadata, + spec, + }; +} diff --git a/src/main/cluster-manager.ts b/src/main/cluster-manager.ts index 41f0f405ed..765d3ee1c8 100644 --- a/src/main/cluster-manager.ts +++ b/src/main/cluster-manager.ts @@ -31,6 +31,7 @@ import { noop, Singleton } from "../common/utils"; import { CatalogCategoryRegistry, CatalogEntity } from "./catalog"; import type { KubernetesClusterSpec } from "../common/catalog-entities/kubernetes-cluster"; import type { CatalogEntityMetadata } from "../common/catalog"; +import { KubernetesCluster } from "./catalog-entities"; export class ClusterManager extends Singleton { protected clusters = observable.map(); @@ -155,10 +156,8 @@ export class ClusterManager extends Singleton { } export function catalogEntityFromCluster(cluster: ClusterModel): CatalogEntity { - return { - apiVersion: "entity.k8slens.dev/v1alpha1", - kind: "KubernetesCluster", - metadata: { + return KubernetesCluster.v1alpha1( + { uid: cluster.id, name: cluster.contextName, source: "local", @@ -166,9 +165,9 @@ export function catalogEntityFromCluster(cluster: ClusterModel): CatalogEntity { + onRun(context: CatalogEntityActionContext) { context.navigate(`/cluster/${this.metadata.uid}`); - }; + } } diff --git a/src/renderer/catalog-entities/web-link.ts b/src/renderer/catalog-entities/web-link.ts index 0cb7d86275..2f7f09041e 100644 --- a/src/renderer/catalog-entities/web-link.ts +++ b/src/renderer/catalog-entities/web-link.ts @@ -27,7 +27,7 @@ export class WebLink extends CatalogEntity { + onRun() { window.open(this.spec.url, "_blank"); - }; + } } diff --git a/src/renderer/catalog/catalog-entity.ts b/src/renderer/catalog/catalog-entity.ts index 5443b80ca1..fd7591a794 100644 --- a/src/renderer/catalog/catalog-entity.ts +++ b/src/renderer/catalog/catalog-entity.ts @@ -118,5 +118,7 @@ export class CatalogEntity< this.name = this.metadata.name; } - onRun?(context: CatalogEntityActionContext): void; + onRun(context: CatalogEntityActionContext): void { + void context; + } }