mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
extensions-api -- in-progress
Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
parent
5001663e7a
commit
76f8263baf
@ -1,8 +1,17 @@
|
|||||||
import { LensExtension } from "@lens/extensions";
|
import { LensExtension, LensRendererRuntimeEnv } from "@lens/extensions";
|
||||||
|
|
||||||
export default class ExampleExtension extends LensExtension {
|
export default class ExampleExtension extends LensExtension {
|
||||||
async init(): Promise<any> {
|
todo(){
|
||||||
console.log('Example extension: init')
|
console.log(this.runtime.apiManager); // fixme: incorrect types import, "runtime" doesn't exists
|
||||||
return super.init();
|
}
|
||||||
|
|
||||||
|
async activate(runtime: LensRendererRuntimeEnv): Promise<any> {
|
||||||
|
await super.activate(runtime);
|
||||||
|
console.log('Example extension: activate');
|
||||||
|
}
|
||||||
|
|
||||||
|
async deactivate(): Promise<any> {
|
||||||
|
console.log('Example extension: deactivate')
|
||||||
|
await super.deactivate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,8 +12,7 @@
|
|||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true
|
||||||
"declaration": true
|
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"../extension-api.mock.d.ts",
|
"../extension-api.mock.d.ts",
|
||||||
|
|||||||
3
src/extensions/extension-api.mock.d.ts
vendored
3
src/extensions/extension-api.mock.d.ts
vendored
@ -1,10 +1,9 @@
|
|||||||
|
|
||||||
declare module "@lens/extensions" {
|
declare module "@lens/extensions" {
|
||||||
export = LensExtensions
|
export = LensExtensions
|
||||||
}
|
}
|
||||||
|
|
||||||
declare namespace LensExtensions {
|
declare namespace LensExtensions {
|
||||||
export {
|
export {
|
||||||
LensExtension, ExtensionManifest, ExtensionVersion, ExtensionId,
|
LensExtension, ExtensionManifest, ExtensionVersion, ExtensionId, LensRendererRuntimeEnv
|
||||||
} from "./extension-api"
|
} from "./extension-api"
|
||||||
}
|
}
|
||||||
|
|||||||
13
src/extensions/extension-api.runtime.ts
Normal file
13
src/extensions/extension-api.runtime.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Lens runtime params provider to hook up into extensions
|
||||||
|
import { apiManager, ApiManager } from "../renderer/api/api-manager";
|
||||||
|
|
||||||
|
export interface LensRendererRuntimeEnv {
|
||||||
|
apiManager: ApiManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo: expose more renderer runtime variables, stores, etc.
|
||||||
|
export function getExtensionRuntime(): LensRendererRuntimeEnv {
|
||||||
|
return {
|
||||||
|
apiManager,
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
// Lens-extensions.api.js developer kit
|
// Lens-extensions.api.js developer kit
|
||||||
// todo: generate types instead of extension-api.mock.d.ts
|
// todo: generate types instead of extension-api.mock.d.ts
|
||||||
|
|
||||||
|
export { LensRendererRuntimeEnv } from "./extension-api.runtime";
|
||||||
export * from "./extension"
|
export * from "./extension"
|
||||||
|
|||||||
@ -57,10 +57,10 @@ export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
|||||||
let manifestJson: ExtensionManifest;
|
let manifestJson: ExtensionManifest;
|
||||||
let mainJs: string;
|
let mainJs: string;
|
||||||
try {
|
try {
|
||||||
manifestJson = __non_webpack_require__(manifestPath); // eslint-disable-line
|
manifestJson = __non_webpack_require__(manifestPath); // "__non_webpack_require__" converts to native node's require()-call
|
||||||
mainJs = path.resolve(path.dirname(manifestPath), manifestJson.main);
|
mainJs = path.resolve(path.dirname(manifestPath), manifestJson.main);
|
||||||
mainJs = mainJs.replace(/\.ts$/i, ".js"); // todo: compile *.ts on the fly?
|
mainJs = mainJs.replace(/\.ts$/i, ".js"); // todo: compile *.ts on the fly?
|
||||||
const extensionModule = __non_webpack_require__(mainJs); // eslint-disable-line
|
const extensionModule = __non_webpack_require__(mainJs);
|
||||||
return {
|
return {
|
||||||
manifestPath: manifestPath,
|
manifestPath: manifestPath,
|
||||||
manifest: manifestJson,
|
manifest: manifestJson,
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import type { ExtensionModel } from "./extension-store";
|
import type { ExtensionModel } from "./extension-store";
|
||||||
import { readJsonSync } from "fs-extra";
|
import { readJsonSync } from "fs-extra";
|
||||||
import { action, observable, when } from "mobx";
|
import { action, observable } from "mobx";
|
||||||
|
import { LensRendererRuntimeEnv } from "./extension-api.runtime";
|
||||||
import extensionManifest from "./example-extension/package.json"
|
import extensionManifest from "./example-extension/package.json"
|
||||||
import logger from "../main/logger";
|
import logger from "../main/logger";
|
||||||
|
|
||||||
@ -17,12 +18,10 @@ export class LensExtension implements ExtensionModel {
|
|||||||
@observable version: ExtensionVersion = "0.0.0";
|
@observable version: ExtensionVersion = "0.0.0";
|
||||||
@observable manifest: ExtensionManifest;
|
@observable manifest: ExtensionManifest;
|
||||||
@observable manifestPath: string;
|
@observable manifestPath: string;
|
||||||
@observable isReady = false;
|
|
||||||
@observable isEnabled = false;
|
@observable isEnabled = false;
|
||||||
|
@observable.ref runtime: LensRendererRuntimeEnv;
|
||||||
|
|
||||||
whenReady = when(() => this.isReady);
|
constructor(model: ExtensionModel, manifest: ExtensionManifest) {
|
||||||
|
|
||||||
constructor(model: ExtensionModel, manifest?: ExtensionManifest) {
|
|
||||||
this.importModel(model, manifest);
|
this.importModel(model, manifest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,16 +32,30 @@ export class LensExtension implements ExtensionModel {
|
|||||||
this.manifestPath = manifestPath;
|
this.manifestPath = manifestPath;
|
||||||
this.isEnabled = enabled;
|
this.isEnabled = enabled;
|
||||||
Object.assign(this, model);
|
Object.assign(this, model);
|
||||||
this.isReady = true;
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error(`[EXTENSION]: cannot read manifest at ${manifestPath}`, { ...model, err: String(err) })
|
logger.error(`[EXTENSION]: cannot read manifest at ${manifestPath}`, { ...model, err: String(err) })
|
||||||
this.disable();
|
this.disable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async activate(params: LensRendererRuntimeEnv) {
|
||||||
// todo: add more app/extension lifecycle hooks? e.g. onAppExit(), etc.
|
logger.info(`[EXTENSION]: activate ${this.name}@${this.version}`, this.getMeta());
|
||||||
// todo: provide runtime dependencies
|
this.runtime = params;
|
||||||
|
}
|
||||||
|
|
||||||
|
async deactivate() {
|
||||||
|
logger.info(`[EXTENSION]: deactivate ${this.name}@${this.version}`, this.getMeta());
|
||||||
|
this.runtime = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async enable() {
|
||||||
|
logger.info(`[EXTENSION]: enable ${this.name}@${this.version}`, this.getMeta());
|
||||||
|
this.isEnabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
async disable() {
|
||||||
|
logger.info(`[EXTENSION]: disable ${this.name}@${this.version}`, this.getMeta());
|
||||||
|
this.isEnabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async install() {
|
async install() {
|
||||||
@ -53,18 +66,21 @@ export class LensExtension implements ExtensionModel {
|
|||||||
// todo
|
// todo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async upgrade() {
|
||||||
|
// todo
|
||||||
|
}
|
||||||
|
|
||||||
async checkNewVersion() {
|
async checkNewVersion() {
|
||||||
// todo
|
// todo
|
||||||
}
|
}
|
||||||
|
|
||||||
async enable() {
|
getMeta() {
|
||||||
this.isEnabled = true;
|
return {
|
||||||
// todo
|
id: this.id,
|
||||||
}
|
manifest: this.manifest,
|
||||||
|
manifestPath: this.manifestPath,
|
||||||
async disable() {
|
enabled: this.isEnabled,
|
||||||
this.isEnabled = false;
|
}
|
||||||
// todo
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toJSON(): ExtensionModel {
|
toJSON(): ExtensionModel {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user