diff --git a/extensions/example-extension/main.ts b/extensions/example-extension/main.ts index bcfa52325c..2f0a926769 100644 --- a/extensions/example-extension/main.ts +++ b/extensions/example-extension/main.ts @@ -1,4 +1,4 @@ -import { LensMainExtension } from "@k8slens/main-extensions"; +import { LensMainExtension } from "@k8slens/extensions"; export default class ExampleExtensionMain extends LensMainExtension { onActivate() { diff --git a/extensions/example-extension/page.tsx b/extensions/example-extension/page.tsx index ed05b7500d..fbb91848a9 100644 --- a/extensions/example-extension/page.tsx +++ b/extensions/example-extension/page.tsx @@ -1,13 +1,13 @@ -import { Component, LensRendererExtension } from "@k8slens/renderer-extensions"; +import { LensRendererExtension, Component } from "@k8slens/extensions"; import { CoffeeDoodle } from "react-open-doodles"; import path from "path"; import React from "react" -export function ExtensionIcon(props: Component.IconProps) { +export function ExampleIcon(props: Component.IconProps) { return } -export class ExtensionPage extends React.Component<{ extension: LensRendererExtension }> { +export class ExamplePage extends React.Component<{ extension: LensRendererExtension }> { deactivate = () => { const { extension } = this.props; extension.disable(); @@ -27,7 +27,3 @@ export class ExtensionPage extends React.Component<{ extension: LensRendererExte ) } } - -export function examplePage(ext: LensRendererExtension) { - return () => -} diff --git a/extensions/example-extension/renderer.ts b/extensions/example-extension/renderer.tsx similarity index 69% rename from extensions/example-extension/renderer.ts rename to extensions/example-extension/renderer.tsx index dbac7056cc..4ad620c209 100644 --- a/extensions/example-extension/renderer.ts +++ b/extensions/example-extension/renderer.tsx @@ -1,5 +1,6 @@ -import { Registry, LensRendererExtension } from "@k8slens/renderer-extensions"; -import { examplePage, ExtensionIcon } from "./page" +import { LensRendererExtension, Registry } from "@k8slens/extensions"; +import { ExamplePage, ExampleIcon } from "./page" +import React from "react" export default class ExampleExtension extends LensRendererExtension { onActivate() { @@ -13,8 +14,8 @@ export default class ExampleExtension extends LensRendererExtension { path: "/extension-example", title: "Example Extension", components: { - Page: examplePage(this), - MenuIcon: ExtensionIcon, + Page: () => , + MenuIcon: ExampleIcon, } }) ) diff --git a/extensions/example-extension/webpack.config.js b/extensions/example-extension/webpack.config.js index f6130b2d1f..89e84e3125 100644 --- a/extensions/example-extension/webpack.config.js +++ b/extensions/example-extension/webpack.config.js @@ -17,8 +17,9 @@ module.exports = [ }, externals: [ { - "@k8slens/main-extensions": "var global.LensMainExtensions", + "@k8slens/extensions": "var global.LensExtensions", "mobx": "var global.Mobx", + "react": "var global.React" } ], resolve: { @@ -31,7 +32,7 @@ module.exports = [ }, }, { - entry: './renderer.ts', + entry: './renderer.tsx', context: __dirname, target: "electron-renderer", mode: "production", @@ -46,7 +47,7 @@ module.exports = [ }, externals: [ { - "@k8slens/renderer-extensions": "var global.LensRendererExtensions", + "@k8slens/extensions": "var global.LensExtensions", "react": "var global.React", "mobx": "var global.Mobx" } diff --git a/extensions/telemetry/main.ts b/extensions/telemetry/main.ts index de33a76e5c..f0d231316d 100644 --- a/extensions/telemetry/main.ts +++ b/extensions/telemetry/main.ts @@ -1,4 +1,4 @@ -import { LensMainExtension } from "@k8slens/main-extensions"; +import { LensMainExtension } from "@k8slens/extensions"; import { telemetryPreferencesStore } from "./src/telemetry-preferences-store" import { tracker } from "./src/tracker"; @@ -7,7 +7,7 @@ export default class TelemetryMainExtension extends LensMainExtension { async onActivate() { console.log("telemetry main extension activated") tracker.start() - await telemetryPreferencesStore.load() + await telemetryPreferencesStore.loadExtension(this) } onDeactivate() { diff --git a/extensions/telemetry/renderer.tsx b/extensions/telemetry/renderer.tsx index e380c80cca..3988e97097 100644 --- a/extensions/telemetry/renderer.tsx +++ b/extensions/telemetry/renderer.tsx @@ -1,4 +1,4 @@ -import { Registry, LensRendererExtension } from "@k8slens/renderer-extensions"; +import { LensRendererExtension, Registry } from "@k8slens/extensions"; import { telemetryPreferencesStore } from "./src/telemetry-preferences-store" import { TelemetryPreferenceHint, TelemetryPreferenceInput } from "./src/telemetry-preference" import { tracker } from "./src/tracker" @@ -8,7 +8,7 @@ export default class TelemetryRendererExtension extends LensRendererExtension { async onActivate() { console.log("telemetry extension activated") tracker.start() - await telemetryPreferencesStore.load() + await telemetryPreferencesStore.loadExtension(this) } registerAppPreferences(registry: Registry.AppPreferenceRegistry) { diff --git a/extensions/telemetry/src/telemetry-preference.tsx b/extensions/telemetry/src/telemetry-preference.tsx index 5cc0c73218..122d722a81 100644 --- a/extensions/telemetry/src/telemetry-preference.tsx +++ b/extensions/telemetry/src/telemetry-preference.tsx @@ -1,4 +1,4 @@ -import { Component } from "@k8slens/renderer-extensions" +import { Component } from "@k8slens/extensions" import React from "react" import { observer } from "mobx-react"; import { TelemetryPreferencesStore } from "./telemetry-preferences-store" diff --git a/extensions/telemetry/src/telemetry-preferences-store.ts b/extensions/telemetry/src/telemetry-preferences-store.ts index ba64f2c704..732ad91524 100644 --- a/extensions/telemetry/src/telemetry-preferences-store.ts +++ b/extensions/telemetry/src/telemetry-preferences-store.ts @@ -1,14 +1,14 @@ -import { Store } from "@k8slens/main-extensions"; +import { Store } from "@k8slens/extensions"; import { toJS } from "mobx" export type TelemetryPreferencesModel = { enabled: boolean; } -export class TelemetryPreferencesStore extends Store.BaseStore { +export class TelemetryPreferencesStore extends Store.ExtensionStore { private constructor() { super({ - configName: "telemetry-preferences-store", + configName: "preferences-store", defaults: { enabled: true } diff --git a/extensions/telemetry/src/tracker.ts b/extensions/telemetry/src/tracker.ts index 35d93fec35..ed23253bd6 100644 --- a/extensions/telemetry/src/tracker.ts +++ b/extensions/telemetry/src/tracker.ts @@ -1,4 +1,4 @@ -import { EventBus, Util } from "@k8slens/main-extensions" +import { EventBus, Util } from "@k8slens/extensions" import ua from "universal-analytics" import { machineIdSync } from "node-machine-id" import { telemetryPreferencesStore } from "./telemetry-preferences-store" diff --git a/extensions/telemetry/webpack.config.js b/extensions/telemetry/webpack.config.js index 1e45676da9..f13f54f9fd 100644 --- a/extensions/telemetry/webpack.config.js +++ b/extensions/telemetry/webpack.config.js @@ -17,7 +17,7 @@ module.exports = [ }, externals: [ { - "@k8slens/main-extensions": "var global.LensMainExtensions", + "@k8slens/extensions": "var global.LensExtensions", "react": "var global.React", "mobx": "var global.Mobx" } @@ -48,10 +48,10 @@ module.exports = [ }, externals: [ { - "@k8slens/renderer-extensions": "var global.LensRendererExtensions", - "@k8slens/main-extensions": "var global.LensMainExtensions", + "@k8slens/extensions": "var global.LensExtensions", "react": "var global.React", - "mobx": "var global.Mobx" + "mobx": "var global.Mobx", + "mobx-react": "var global.MobxReact" } ], resolve: { diff --git a/src/common/base-store.ts b/src/common/base-store.ts index f476965736..f29d35d877 100644 --- a/src/common/base-store.ts +++ b/src/common/base-store.ts @@ -56,13 +56,17 @@ export class BaseStore extends Singleton { ...confOptions, projectName: "lens", projectVersion: getAppVersion(), - cwd: (app || remote.app).getPath("userData"), + cwd: this.storePath(), }); logger.info(`[STORE]: LOADED from ${this.storeConfig.path}`); this.fromStore(this.storeConfig.store); this.isLoaded = true; } + protected storePath() { + return (app || remote.app).getPath("userData") + } + protected async saveToFile(model: T) { logger.info(`[STORE]: SAVING ${this.name}`); // todo: update when fixed https://github.com/sindresorhus/conf/issues/114 diff --git a/src/extensions/main-api/event-bus.ts b/src/extensions/core-api/event-bus.ts similarity index 100% rename from src/extensions/main-api/event-bus.ts rename to src/extensions/core-api/event-bus.ts diff --git a/src/extensions/core-api/registries.ts b/src/extensions/core-api/registries.ts new file mode 100644 index 0000000000..fa270e53d6 --- /dev/null +++ b/src/extensions/core-api/registries.ts @@ -0,0 +1,2 @@ +export type { DynamicPageType, PageRegistry } from "../page-registry" +export type { AppPreferenceRegistry } from "../app-preference-registry" diff --git a/src/extensions/core-api/stores.ts b/src/extensions/core-api/stores.ts new file mode 100644 index 0000000000..c8405bd67f --- /dev/null +++ b/src/extensions/core-api/stores.ts @@ -0,0 +1 @@ +export { ExtensionStore } from "../extension-store" diff --git a/src/extensions/main-api/utils.ts b/src/extensions/core-api/utils.ts similarity index 100% rename from src/extensions/main-api/utils.ts rename to src/extensions/core-api/utils.ts diff --git a/src/extensions/core-extension-api.ts b/src/extensions/core-extension-api.ts new file mode 100644 index 0000000000..2dcce47178 --- /dev/null +++ b/src/extensions/core-extension-api.ts @@ -0,0 +1,17 @@ +// Lens-extensions api developer's kit +export type { LensExtensionRuntimeEnv } from "./lens-runtime"; +export * from "./lens-main-extension" +export * from "./lens-renderer-extension" + +// APIs +import * as EventBus from "./core-api/event-bus" +import * as Store from "./core-api/stores" +import * as Util from "./core-api/utils" +import * as Registry from "./core-api/registries" + +export { + EventBus, + Registry, + Store, + Util +} diff --git a/src/extensions/extension-api.ts b/src/extensions/extension-api.ts index a93bb13602..17bb510ea3 100644 --- a/src/extensions/extension-api.ts +++ b/src/extensions/extension-api.ts @@ -1,14 +1,2 @@ -// Lens-extensions api developer's kit -export type { LensExtensionRuntimeEnv } from "./lens-runtime"; -export * from "./lens-main-extension" - -// APIs -import * as EventBus from "./main-api/event-bus" -import * as Store from "./main-api/stores" -import * as Util from "./main-api/utils" - -export { - EventBus, - Store, - Util -} +export * from "./core-extension-api" +export * from "./renderer-extension-api" diff --git a/src/extensions/extension-renderer-api.ts b/src/extensions/extension-renderer-api.ts deleted file mode 100644 index 362a8aa2f4..0000000000 --- a/src/extensions/extension-renderer-api.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Lens-extensions api developer's kit -export type { LensExtensionRuntimeEnv } from "./lens-renderer-runtime" - -// APIs -export * from "./lens-extension" -export * from "./lens-renderer-extension" - -import * as Component from "./renderer-api/components" -import * as EventBus from "./main-api/event-bus" -import * as K8sApi from "./renderer-api/k8s-api" -import * as Registry from "./renderer-api/registries" -import * as Util from "./main-api/utils" - -export { - Component, - EventBus, - K8sApi, - Registry, - Util -} diff --git a/src/extensions/extension-store.ts b/src/extensions/extension-store.ts new file mode 100644 index 0000000000..5331420cd6 --- /dev/null +++ b/src/extensions/extension-store.ts @@ -0,0 +1,21 @@ +import { BaseStore } from "../common/base-store" +import * as path from "path" +import { LensExtension } from "./lens-extension" + +export class ExtensionStore extends BaseStore { + protected extension: LensExtension + + async loadExtension(extension: LensExtension) { + this.extension = extension + await super.load() + } + + async load() { + if (!this.extension) { return } + await super.load() + } + + protected storePath() { + return path.join(super.storePath(), "extension-store", this.extension.name) + } +} diff --git a/src/extensions/lens-renderer-runtime.ts b/src/extensions/lens-renderer-runtime.ts deleted file mode 100644 index 9849a46f4f..0000000000 --- a/src/extensions/lens-renderer-runtime.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Lens extension runtime params available to renderer extensions after activation - -import logger from "../main/logger"; -import { navigate } from "../renderer/navigation"; - -export interface LensExtensionRuntimeEnv { - logger: typeof logger; - navigate: typeof navigate; -} - -export function getLensRuntime(): LensExtensionRuntimeEnv { - return { - logger, - navigate - } -} diff --git a/src/extensions/main-api/stores.ts b/src/extensions/main-api/stores.ts deleted file mode 100644 index f7e4fca311..0000000000 --- a/src/extensions/main-api/stores.ts +++ /dev/null @@ -1 +0,0 @@ -export { BaseStore } from "../../common/base-store" diff --git a/src/extensions/npm/main-extensions/.gitignore b/src/extensions/npm/extensions/.gitignore similarity index 100% rename from src/extensions/npm/main-extensions/.gitignore rename to src/extensions/npm/extensions/.gitignore diff --git a/src/extensions/npm/main-extensions/package.json b/src/extensions/npm/extensions/package.json similarity index 88% rename from src/extensions/npm/main-extensions/package.json rename to src/extensions/npm/extensions/package.json index cee7281140..7097629539 100644 --- a/src/extensions/npm/main-extensions/package.json +++ b/src/extensions/npm/extensions/package.json @@ -1,5 +1,5 @@ { - "name": "@k8slens/main-extensions", + "name": "@k8slens/extensions", "productName": "Lens extensions", "description": "Lens - The Kubernetes IDE: extensions", "version": "0.0.0", diff --git a/src/extensions/npm/renderer-extensions/.gitignore b/src/extensions/npm/renderer-extensions/.gitignore deleted file mode 100644 index 2b33ba5bed..0000000000 --- a/src/extensions/npm/renderer-extensions/.gitignore +++ /dev/null @@ -1 +0,0 @@ -api.d.ts diff --git a/src/extensions/npm/renderer-extensions/package.json b/src/extensions/npm/renderer-extensions/package.json deleted file mode 100644 index 2c9b8d5efa..0000000000 --- a/src/extensions/npm/renderer-extensions/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@k8slens/renderer-extensions", - "productName": "Lens extensions", - "description": "Lens - The Kubernetes IDE: extensions", - "version": "0.0.0", - "copyright": "© 2020, Mirantis, Inc.", - "license": "MIT", - "files": [ - "api.d.ts" - ], - "author": { - "name": "Mirantis, Inc.", - "email": "info@k8slens.dev" - } -} diff --git a/src/extensions/renderer-api/navigation.ts b/src/extensions/renderer-api/navigation.ts new file mode 100644 index 0000000000..a29df152ee --- /dev/null +++ b/src/extensions/renderer-api/navigation.ts @@ -0,0 +1 @@ +export { navigate } from "../../renderer/navigation" diff --git a/src/extensions/renderer-api/registries.ts b/src/extensions/renderer-api/registries.ts deleted file mode 100644 index 02fc1ce66d..0000000000 --- a/src/extensions/renderer-api/registries.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { DynamicPageType, PageRegistry } from "../page-registry" -export { AppPreferenceRegistry } from "../app-preference-registry" diff --git a/src/extensions/renderer-extension-api.ts b/src/extensions/renderer-extension-api.ts new file mode 100644 index 0000000000..d96c45b845 --- /dev/null +++ b/src/extensions/renderer-extension-api.ts @@ -0,0 +1,10 @@ +// APIs +import * as Component from "./renderer-api/components" +import * as K8sApi from "./renderer-api/k8s-api" +import * as Navigation from "./renderer-api/navigation" + +export { + Component, + K8sApi, + Navigation, +} diff --git a/src/extensions/rollup.config.ts b/src/extensions/rollup.config.ts index 02ebd9fd6e..a076fa43ce 100644 --- a/src/extensions/rollup.config.ts +++ b/src/extensions/rollup.config.ts @@ -10,24 +10,11 @@ import ignoreImport from 'rollup-plugin-ignore-import' const config: RollupOptions = { input: "src/extensions/extension-api.ts", output: [ - { file: "src/extensions/npm/main-extensions/api.d.ts", format: "es", } + { file: "src/extensions/npm/extensions/api.d.ts", format: "es", } ], plugins: [ dts(), - dtsModuleWrap({ name: "@k8slens/main-extensions" }), - ignoreImport({ extensions: ['.scss'] }), - json(), - ], -}; - -const rendererConfig: RollupOptions = { - input: "src/extensions/extension-renderer-api.ts", - output: [ - { file: "src/extensions/npm/renderer-extensions/api.d.ts", format: "es", } - ], - plugins: [ - dts(), - dtsModuleWrap({ name: "@k8slens/renderer-extensions" }), + dtsModuleWrap({ name: "@k8slens/extensions" }), ignoreImport({ extensions: ['.scss'] }), json(), ], @@ -67,4 +54,4 @@ function dtsModuleWrap({ name }: { name: string }): Plugin { } } -export default [config, rendererConfig]; +export default [config]; diff --git a/src/main/index.ts b/src/main/index.ts index 64aa2fd676..adc5cc229e 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -17,7 +17,7 @@ import { clusterStore } from "../common/cluster-store" import { userStore } from "../common/user-store"; import { workspaceStore } from "../common/workspace-store"; import { appEventBus } from "../common/event-bus" -import * as LensMainExtensions from "../extensions/extension-api"; +import * as LensExtensions from "../extensions/core-extension-api"; import { extensionManager } from "../extensions/extension-manager"; import { extensionLoader } from "../extensions/extension-loader"; import { getLensRuntime } from "../extensions/lens-runtime"; @@ -25,7 +25,7 @@ import logger from "./logger" import * as Mobx from "mobx" export { - LensMainExtensions, + LensExtensions, Mobx } diff --git a/src/renderer/bootstrap.tsx b/src/renderer/bootstrap.tsx index ee158da69d..bcbc9fb5a1 100644 --- a/src/renderer/bootstrap.tsx +++ b/src/renderer/bootstrap.tsx @@ -1,8 +1,8 @@ import "./components/app.scss" import React from "react"; import * as Mobx from "mobx" -import * as LensMainExtensions from "../extensions/extension-api" -import * as LensRendererExtensions from "../extensions/extension-renderer-api" +import * as MobxReact from "mobx-react" +import * as LensExtensions from "../extensions/extension-api" import { render, unmountComponentAtNode } from "react-dom"; import { isMac } from "../common/vars"; import { userStore } from "../common/user-store"; @@ -20,8 +20,8 @@ type AppComponent = React.ComponentType & { export { React, Mobx, - LensRendererExtensions, - LensMainExtensions + MobxReact, + LensExtensions } export async function bootstrap(App: AppComponent) {