mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Extension store base class + rename main/renderer-extensions -> extensions (#1107)
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
parent
8f8dd9eb45
commit
91bef77997
@ -1,4 +1,4 @@
|
|||||||
import { LensMainExtension } from "@k8slens/main-extensions";
|
import { LensMainExtension } from "@k8slens/extensions";
|
||||||
|
|
||||||
export default class ExampleExtensionMain extends LensMainExtension {
|
export default class ExampleExtensionMain extends LensMainExtension {
|
||||||
onActivate() {
|
onActivate() {
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import { Component, LensRendererExtension } from "@k8slens/renderer-extensions";
|
import { LensRendererExtension, Component } from "@k8slens/extensions";
|
||||||
import { CoffeeDoodle } from "react-open-doodles";
|
import { CoffeeDoodle } from "react-open-doodles";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import React from "react"
|
import React from "react"
|
||||||
|
|
||||||
export function ExtensionIcon(props: Component.IconProps) {
|
export function ExampleIcon(props: Component.IconProps) {
|
||||||
return <Component.Icon {...props} material="pages" tooltip={path.basename(__filename)}/>
|
return <Component.Icon {...props} material="pages" tooltip={path.basename(__filename)}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ExtensionPage extends React.Component<{ extension: LensRendererExtension }> {
|
export class ExamplePage extends React.Component<{ extension: LensRendererExtension }> {
|
||||||
deactivate = () => {
|
deactivate = () => {
|
||||||
const { extension } = this.props;
|
const { extension } = this.props;
|
||||||
extension.disable();
|
extension.disable();
|
||||||
@ -27,7 +27,3 @@ export class ExtensionPage extends React.Component<{ extension: LensRendererExte
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function examplePage(ext: LensRendererExtension) {
|
|
||||||
return () => <ExtensionPage extension={ext} />
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { Registry, LensRendererExtension } from "@k8slens/renderer-extensions";
|
import { LensRendererExtension, Registry } from "@k8slens/extensions";
|
||||||
import { examplePage, ExtensionIcon } from "./page"
|
import { ExamplePage, ExampleIcon } from "./page"
|
||||||
|
import React from "react"
|
||||||
|
|
||||||
export default class ExampleExtension extends LensRendererExtension {
|
export default class ExampleExtension extends LensRendererExtension {
|
||||||
onActivate() {
|
onActivate() {
|
||||||
@ -13,8 +14,8 @@ export default class ExampleExtension extends LensRendererExtension {
|
|||||||
path: "/extension-example",
|
path: "/extension-example",
|
||||||
title: "Example Extension",
|
title: "Example Extension",
|
||||||
components: {
|
components: {
|
||||||
Page: examplePage(this),
|
Page: () => <ExamplePage extension={this} />,
|
||||||
MenuIcon: ExtensionIcon,
|
MenuIcon: ExampleIcon,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
@ -17,8 +17,9 @@ module.exports = [
|
|||||||
},
|
},
|
||||||
externals: [
|
externals: [
|
||||||
{
|
{
|
||||||
"@k8slens/main-extensions": "var global.LensMainExtensions",
|
"@k8slens/extensions": "var global.LensExtensions",
|
||||||
"mobx": "var global.Mobx",
|
"mobx": "var global.Mobx",
|
||||||
|
"react": "var global.React"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
resolve: {
|
resolve: {
|
||||||
@ -31,7 +32,7 @@ module.exports = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
entry: './renderer.ts',
|
entry: './renderer.tsx',
|
||||||
context: __dirname,
|
context: __dirname,
|
||||||
target: "electron-renderer",
|
target: "electron-renderer",
|
||||||
mode: "production",
|
mode: "production",
|
||||||
@ -46,7 +47,7 @@ module.exports = [
|
|||||||
},
|
},
|
||||||
externals: [
|
externals: [
|
||||||
{
|
{
|
||||||
"@k8slens/renderer-extensions": "var global.LensRendererExtensions",
|
"@k8slens/extensions": "var global.LensExtensions",
|
||||||
"react": "var global.React",
|
"react": "var global.React",
|
||||||
"mobx": "var global.Mobx"
|
"mobx": "var global.Mobx"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { LensMainExtension } from "@k8slens/main-extensions";
|
import { LensMainExtension } from "@k8slens/extensions";
|
||||||
import { telemetryPreferencesStore } from "./src/telemetry-preferences-store"
|
import { telemetryPreferencesStore } from "./src/telemetry-preferences-store"
|
||||||
import { tracker } from "./src/tracker";
|
import { tracker } from "./src/tracker";
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ export default class TelemetryMainExtension extends LensMainExtension {
|
|||||||
async onActivate() {
|
async onActivate() {
|
||||||
console.log("telemetry main extension activated")
|
console.log("telemetry main extension activated")
|
||||||
tracker.start()
|
tracker.start()
|
||||||
await telemetryPreferencesStore.load()
|
await telemetryPreferencesStore.loadExtension(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
onDeactivate() {
|
onDeactivate() {
|
||||||
|
|||||||
@ -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 { telemetryPreferencesStore } from "./src/telemetry-preferences-store"
|
||||||
import { TelemetryPreferenceHint, TelemetryPreferenceInput } from "./src/telemetry-preference"
|
import { TelemetryPreferenceHint, TelemetryPreferenceInput } from "./src/telemetry-preference"
|
||||||
import { tracker } from "./src/tracker"
|
import { tracker } from "./src/tracker"
|
||||||
@ -8,7 +8,7 @@ export default class TelemetryRendererExtension extends LensRendererExtension {
|
|||||||
async onActivate() {
|
async onActivate() {
|
||||||
console.log("telemetry extension activated")
|
console.log("telemetry extension activated")
|
||||||
tracker.start()
|
tracker.start()
|
||||||
await telemetryPreferencesStore.load()
|
await telemetryPreferencesStore.loadExtension(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
registerAppPreferences(registry: Registry.AppPreferenceRegistry) {
|
registerAppPreferences(registry: Registry.AppPreferenceRegistry) {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { Component } from "@k8slens/renderer-extensions"
|
import { Component } from "@k8slens/extensions"
|
||||||
import React from "react"
|
import React from "react"
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { TelemetryPreferencesStore } from "./telemetry-preferences-store"
|
import { TelemetryPreferencesStore } from "./telemetry-preferences-store"
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
import { Store } from "@k8slens/main-extensions";
|
import { Store } from "@k8slens/extensions";
|
||||||
import { toJS } from "mobx"
|
import { toJS } from "mobx"
|
||||||
|
|
||||||
export type TelemetryPreferencesModel = {
|
export type TelemetryPreferencesModel = {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TelemetryPreferencesStore extends Store.BaseStore<TelemetryPreferencesModel> {
|
export class TelemetryPreferencesStore extends Store.ExtensionStore<TelemetryPreferencesModel> {
|
||||||
private constructor() {
|
private constructor() {
|
||||||
super({
|
super({
|
||||||
configName: "telemetry-preferences-store",
|
configName: "preferences-store",
|
||||||
defaults: {
|
defaults: {
|
||||||
enabled: true
|
enabled: true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { EventBus, Util } from "@k8slens/main-extensions"
|
import { EventBus, Util } from "@k8slens/extensions"
|
||||||
import ua from "universal-analytics"
|
import ua from "universal-analytics"
|
||||||
import { machineIdSync } from "node-machine-id"
|
import { machineIdSync } from "node-machine-id"
|
||||||
import { telemetryPreferencesStore } from "./telemetry-preferences-store"
|
import { telemetryPreferencesStore } from "./telemetry-preferences-store"
|
||||||
|
|||||||
@ -17,7 +17,7 @@ module.exports = [
|
|||||||
},
|
},
|
||||||
externals: [
|
externals: [
|
||||||
{
|
{
|
||||||
"@k8slens/main-extensions": "var global.LensMainExtensions",
|
"@k8slens/extensions": "var global.LensExtensions",
|
||||||
"react": "var global.React",
|
"react": "var global.React",
|
||||||
"mobx": "var global.Mobx"
|
"mobx": "var global.Mobx"
|
||||||
}
|
}
|
||||||
@ -48,10 +48,10 @@ module.exports = [
|
|||||||
},
|
},
|
||||||
externals: [
|
externals: [
|
||||||
{
|
{
|
||||||
"@k8slens/renderer-extensions": "var global.LensRendererExtensions",
|
"@k8slens/extensions": "var global.LensExtensions",
|
||||||
"@k8slens/main-extensions": "var global.LensMainExtensions",
|
|
||||||
"react": "var global.React",
|
"react": "var global.React",
|
||||||
"mobx": "var global.Mobx"
|
"mobx": "var global.Mobx",
|
||||||
|
"mobx-react": "var global.MobxReact"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
resolve: {
|
resolve: {
|
||||||
|
|||||||
@ -56,13 +56,17 @@ export class BaseStore<T = any> extends Singleton {
|
|||||||
...confOptions,
|
...confOptions,
|
||||||
projectName: "lens",
|
projectName: "lens",
|
||||||
projectVersion: getAppVersion(),
|
projectVersion: getAppVersion(),
|
||||||
cwd: (app || remote.app).getPath("userData"),
|
cwd: this.storePath(),
|
||||||
});
|
});
|
||||||
logger.info(`[STORE]: LOADED from ${this.storeConfig.path}`);
|
logger.info(`[STORE]: LOADED from ${this.storeConfig.path}`);
|
||||||
this.fromStore(this.storeConfig.store);
|
this.fromStore(this.storeConfig.store);
|
||||||
this.isLoaded = true;
|
this.isLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected storePath() {
|
||||||
|
return (app || remote.app).getPath("userData")
|
||||||
|
}
|
||||||
|
|
||||||
protected async saveToFile(model: T) {
|
protected async saveToFile(model: T) {
|
||||||
logger.info(`[STORE]: SAVING ${this.name}`);
|
logger.info(`[STORE]: SAVING ${this.name}`);
|
||||||
// todo: update when fixed https://github.com/sindresorhus/conf/issues/114
|
// todo: update when fixed https://github.com/sindresorhus/conf/issues/114
|
||||||
|
|||||||
2
src/extensions/core-api/registries.ts
Normal file
2
src/extensions/core-api/registries.ts
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export type { DynamicPageType, PageRegistry } from "../page-registry"
|
||||||
|
export type { AppPreferenceRegistry } from "../app-preference-registry"
|
||||||
1
src/extensions/core-api/stores.ts
Normal file
1
src/extensions/core-api/stores.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { ExtensionStore } from "../extension-store"
|
||||||
17
src/extensions/core-extension-api.ts
Normal file
17
src/extensions/core-extension-api.ts
Normal file
@ -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
|
||||||
|
}
|
||||||
@ -1,14 +1,2 @@
|
|||||||
// Lens-extensions api developer's kit
|
export * from "./core-extension-api"
|
||||||
export type { LensExtensionRuntimeEnv } from "./lens-runtime";
|
export * from "./renderer-extension-api"
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|||||||
@ -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
|
|
||||||
}
|
|
||||||
21
src/extensions/extension-store.ts
Normal file
21
src/extensions/extension-store.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { BaseStore } from "../common/base-store"
|
||||||
|
import * as path from "path"
|
||||||
|
import { LensExtension } from "./lens-extension"
|
||||||
|
|
||||||
|
export class ExtensionStore<T = any> extends BaseStore<T> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
export { BaseStore } from "../../common/base-store"
|
|
||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@k8slens/main-extensions",
|
"name": "@k8slens/extensions",
|
||||||
"productName": "Lens extensions",
|
"productName": "Lens extensions",
|
||||||
"description": "Lens - The Kubernetes IDE: extensions",
|
"description": "Lens - The Kubernetes IDE: extensions",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
@ -1 +0,0 @@
|
|||||||
api.d.ts
|
|
||||||
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
src/extensions/renderer-api/navigation.ts
Normal file
1
src/extensions/renderer-api/navigation.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { navigate } from "../../renderer/navigation"
|
||||||
@ -1,2 +0,0 @@
|
|||||||
export { DynamicPageType, PageRegistry } from "../page-registry"
|
|
||||||
export { AppPreferenceRegistry } from "../app-preference-registry"
|
|
||||||
10
src/extensions/renderer-extension-api.ts
Normal file
10
src/extensions/renderer-extension-api.ts
Normal file
@ -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,
|
||||||
|
}
|
||||||
@ -10,24 +10,11 @@ import ignoreImport from 'rollup-plugin-ignore-import'
|
|||||||
const config: RollupOptions = {
|
const config: RollupOptions = {
|
||||||
input: "src/extensions/extension-api.ts",
|
input: "src/extensions/extension-api.ts",
|
||||||
output: [
|
output: [
|
||||||
{ file: "src/extensions/npm/main-extensions/api.d.ts", format: "es", }
|
{ file: "src/extensions/npm/extensions/api.d.ts", format: "es", }
|
||||||
],
|
],
|
||||||
plugins: [
|
plugins: [
|
||||||
dts(),
|
dts(),
|
||||||
dtsModuleWrap({ name: "@k8slens/main-extensions" }),
|
dtsModuleWrap({ name: "@k8slens/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" }),
|
|
||||||
ignoreImport({ extensions: ['.scss'] }),
|
ignoreImport({ extensions: ['.scss'] }),
|
||||||
json(),
|
json(),
|
||||||
],
|
],
|
||||||
@ -67,4 +54,4 @@ function dtsModuleWrap({ name }: { name: string }): Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default [config, rendererConfig];
|
export default [config];
|
||||||
|
|||||||
@ -17,7 +17,7 @@ import { clusterStore } from "../common/cluster-store"
|
|||||||
import { userStore } from "../common/user-store";
|
import { userStore } from "../common/user-store";
|
||||||
import { workspaceStore } from "../common/workspace-store";
|
import { workspaceStore } from "../common/workspace-store";
|
||||||
import { appEventBus } from "../common/event-bus"
|
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 { extensionManager } from "../extensions/extension-manager";
|
||||||
import { extensionLoader } from "../extensions/extension-loader";
|
import { extensionLoader } from "../extensions/extension-loader";
|
||||||
import { getLensRuntime } from "../extensions/lens-runtime";
|
import { getLensRuntime } from "../extensions/lens-runtime";
|
||||||
@ -25,7 +25,7 @@ import logger from "./logger"
|
|||||||
import * as Mobx from "mobx"
|
import * as Mobx from "mobx"
|
||||||
|
|
||||||
export {
|
export {
|
||||||
LensMainExtensions,
|
LensExtensions,
|
||||||
Mobx
|
Mobx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import "./components/app.scss"
|
import "./components/app.scss"
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import * as Mobx from "mobx"
|
import * as Mobx from "mobx"
|
||||||
import * as LensMainExtensions from "../extensions/extension-api"
|
import * as MobxReact from "mobx-react"
|
||||||
import * as LensRendererExtensions from "../extensions/extension-renderer-api"
|
import * as LensExtensions from "../extensions/extension-api"
|
||||||
import { render, unmountComponentAtNode } from "react-dom";
|
import { render, unmountComponentAtNode } from "react-dom";
|
||||||
import { isMac } from "../common/vars";
|
import { isMac } from "../common/vars";
|
||||||
import { userStore } from "../common/user-store";
|
import { userStore } from "../common/user-store";
|
||||||
@ -20,8 +20,8 @@ type AppComponent = React.ComponentType & {
|
|||||||
export {
|
export {
|
||||||
React,
|
React,
|
||||||
Mobx,
|
Mobx,
|
||||||
LensRendererExtensions,
|
MobxReact,
|
||||||
LensMainExtensions
|
LensExtensions
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function bootstrap(App: AppComponent) {
|
export async function bootstrap(App: AppComponent) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user