1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Merge remote-tracking branch 'origin/extensions-api' into extension_support_page

# Conflicts:
#	extensions/telemetry/package.json
#	extensions/telemetry/renderer.tsx
#	extensions/telemetry/src/tracker.ts
#	src/extensions/core-api/registries.ts
#	src/extensions/extension-api.ts
#	src/extensions/extension-renderer-api.ts
#	src/extensions/lens-renderer-runtime.ts
#	src/extensions/renderer-api/registries.ts
This commit is contained in:
Roman 2020-10-22 11:37:07 +03:00
commit 8e2740b2ed
32 changed files with 111 additions and 115 deletions

View File

@ -1,4 +1,4 @@
import { LensMainExtension } from "@lens/extensions";
import { LensMainExtension } from "@k8slens/extensions";
export default class ExampleExtensionMain extends LensMainExtension {
onActivate() {

View File

@ -1,13 +1,13 @@
import { Component, LensRendererExtension } from "@lens/ui-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 <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 = () => {
const { extension } = this.props;
extension.disable();
@ -27,7 +27,3 @@ export class ExtensionPage extends React.Component<{ extension: LensRendererExte
)
}
}
export function examplePage(ext: LensRendererExtension) {
return () => <ExtensionPage extension={ext} />
}

View File

@ -1,5 +1,6 @@
import { Registry, LensRendererExtension } from "@lens/ui-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: () => <ExamplePage extension={this} />,
MenuIcon: ExampleIcon,
}
})
)

View File

@ -16,7 +16,7 @@
"jsx": "react"
},
"include": [
"../../types",
"../../src/extensions/npm/**/*.d.ts",
"./*.ts",
"./*.tsx"
],

View File

@ -17,8 +17,9 @@ module.exports = [
},
externals: [
{
"@lens/extensions": "var global.LensExtensions",
"@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: [
{
"@lens/ui-extensions": "var global.LensExtensions",
"@k8slens/extensions": "var global.LensExtensions",
"react": "var global.React",
"mobx": "var global.Mobx"
}

View File

@ -1,4 +1,4 @@
import { LensMainExtension } from "@lens/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() {

View File

@ -9,8 +9,8 @@
"styles": []
},
"scripts": {
"build": "webpack -p",
"dev": "webpack --watch"
"build": "webpack --config webpack.config.js",
"dev": "npm run build --watch"
},
"dependencies": {},
"devDependencies": {

View File

@ -1,4 +1,4 @@
import { Registry, LensRendererExtension } from "@lens/ui-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) {

View File

@ -1,4 +1,4 @@
import { Component } from "@lens/ui-extensions"
import { Component } from "@k8slens/extensions"
import React from "react"
import { observer } from "mobx-react";
import { TelemetryPreferencesStore } from "./telemetry-preferences-store"

View File

@ -1,14 +1,14 @@
import { Store } from "@lens/extensions";
import { Store } from "@k8slens/extensions";
import { toJS } from "mobx"
export type TelemetryPreferencesModel = {
enabled: boolean;
}
export class TelemetryPreferencesStore extends Store.BaseStore<TelemetryPreferencesModel> {
export class TelemetryPreferencesStore extends Store.ExtensionStore<TelemetryPreferencesModel> {
private constructor() {
super({
configName: "telemetry-preferences-store",
configName: "preferences-store",
defaults: {
enabled: true
}

View File

@ -1,4 +1,4 @@
import { EventBus, Util } from "@lens/extensions"
import { EventBus, Util } from "@k8slens/extensions"
import ua from "universal-analytics"
import { machineIdSync } from "node-machine-id"
import { telemetryPreferencesStore } from "./telemetry-preferences-store"

View File

@ -24,7 +24,7 @@
},
"include": [
"renderer.ts",
"../../types/",
"../../src/extensions/npm/**/*.d.ts",
"src/**/*"
],
}

View File

@ -17,7 +17,7 @@ module.exports = [
},
externals: [
{
"@lens/extensions": "var global.LensExtensions",
"@k8slens/extensions": "var global.LensExtensions",
"react": "var global.React",
"mobx": "var global.Mobx"
}
@ -48,10 +48,10 @@ module.exports = [
},
externals: [
{
"@lens/ui-extensions": "var global.LensExtensions",
"@lens/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: {

View File

@ -56,13 +56,17 @@ export class BaseStore<T = any> 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

View File

@ -0,0 +1 @@
export { ExtensionStore } from "../extension-store"

View 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
}

View File

@ -1,17 +1,2 @@
// Lens-extensions api developer's kit
export type { LensExtensionMainRuntimeEnv } 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"
import * as Registry from "./main-api/registries"
export {
EventBus,
Store,
Util,
Registry,
}
export * from "./core-extension-api"
export * from "./renderer-extension-api"

View File

@ -1,22 +0,0 @@
// Lens-extensions api developer's kit
export type { LensExtensionRendererRuntimeEnv } 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"
import * as CommonVars from "../common/vars";
export {
Component,
EventBus,
K8sApi,
Registry,
Util,
CommonVars,
}

View 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)
}
}

View File

@ -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 LensExtensionRendererRuntimeEnv {
logger: typeof logger;
navigate: typeof navigate;
}
export function getLensRuntimeRenderer(): LensExtensionRendererRuntimeEnv {
return {
logger,
navigate
}
}

View File

@ -1 +0,0 @@
export { MenuRegistry, MenuRegistration } from "../menu-registry";

View File

@ -1 +0,0 @@
export { BaseStore } from "../../common/base-store"

View File

@ -0,0 +1 @@
api.d.ts

View File

@ -0,0 +1,15 @@
{
"name": "@k8slens/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"
}
}

View File

@ -0,0 +1 @@
export { navigate } from "../../renderer/navigation"

View File

@ -1,2 +0,0 @@
export { PageRegistryType, PageRegistry, PageRegistration, PageComponents } from "../page-registry"
export { AppPreferenceRegistry, AppPreferenceComponents, AppPreferenceRegistration } from "../app-preference-registry"

View 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,
}

View File

@ -7,29 +7,14 @@ import json from '@rollup/plugin-json';
import dts from "rollup-plugin-dts";
import ignoreImport from 'rollup-plugin-ignore-import'
// todo: generate extension-api.js bundle also with Rollup (?)
const config: RollupOptions = {
input: "src/extensions/extension-api.ts",
output: [
{ file: "types/extension-api.d.ts", format: "es", }
{ file: "src/extensions/npm/extensions/api.d.ts", format: "es", }
],
plugins: [
dts(),
dtsModuleWrap({ name: "@lens/extensions" }),
ignoreImport({ extensions: ['.scss'] }),
json(),
],
};
const rendererConfig: RollupOptions = {
input: "src/extensions/extension-renderer-api.ts",
output: [
{ file: "types/extension-renderer-api.d.ts", format: "es", }
],
plugins: [
dts(),
dtsModuleWrap({ name: "@lens/ui-extensions" }),
dtsModuleWrap({ name: "@k8slens/extensions" }),
ignoreImport({ extensions: ['.scss'] }),
json(),
],
@ -69,4 +54,4 @@ function dtsModuleWrap({ name }: { name: string }): Plugin {
}
}
export default [config, rendererConfig];
export default [config];

View File

@ -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 LensExtensions 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";

View File

@ -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 LensExtensions 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,
LensExtensions,
LensMainExtensions
MobxReact,
LensExtensions
}
export async function bootstrap(App: AppComponent) {