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
0ff9c655d1
commit
a8ce263dc9
8
src/extensions/extension-example/package.json
Normal file
8
src/extensions/extension-example/package.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "extension-example",
|
||||
"version": "1.0.0",
|
||||
"description": "Example extension",
|
||||
"main": "extension-example.ts",
|
||||
"dependencies": {
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
import path from "path";
|
||||
import { action, observable, toJS } from "mobx";
|
||||
import { BaseStore } from "../common/base-store";
|
||||
import { LensExtension } from "./extension";
|
||||
import { isDevelopment } from "../common/vars";
|
||||
|
||||
export type ExtensionId = string;
|
||||
export type ExtensionVersion = string | number;
|
||||
@ -16,6 +18,7 @@ export interface ExtensionModel {
|
||||
name: string;
|
||||
description?: string;
|
||||
enabled?: boolean;
|
||||
updateUrl?: string;
|
||||
}
|
||||
|
||||
export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
||||
@ -29,6 +32,13 @@ export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
||||
@observable extensions = observable.map<ExtensionId, LensExtension>();
|
||||
@observable removed = observable.map<ExtensionId, LensExtension>();
|
||||
|
||||
get builtInExtensionsPath(): string {
|
||||
if (isDevelopment) {
|
||||
return path.resolve(__static, "../src/extensions");
|
||||
}
|
||||
return "" // todo: figure out prod-path
|
||||
}
|
||||
|
||||
getById(id: ExtensionId): LensExtension {
|
||||
return this.extensions.get(id);
|
||||
}
|
||||
@ -36,8 +46,9 @@ export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
||||
async removeById(id: ExtensionId) {
|
||||
const extension = this.getById(id);
|
||||
if (extension) {
|
||||
const unInstallStatus = await extension.uninstall()
|
||||
this.extensions.delete(id);
|
||||
return extension.uninstall();
|
||||
return unInstallStatus;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,23 +1,32 @@
|
||||
import { observable } from "mobx";
|
||||
import { ExtensionModel } from "./extension-store";
|
||||
|
||||
// TODO: extensions api
|
||||
// * Lazy load/unload extension (js/ts?) (from sources: local folder, npm_modules/@lens/some_plugin, etc.)
|
||||
// * figure out how to expose lens external apis to extension:
|
||||
// - opt1: import {someApi} from "@lens" => replaced to import from "$PATH/build/Lens.js" on the fly ?
|
||||
// - opt2: eval with injected exposed apis / contents.executeJavaScript / script[src] / etc. ?
|
||||
|
||||
export type ExtensionId = string;
|
||||
export type ExtensionVersion = string | number;
|
||||
|
||||
export class LensExtension implements ExtensionModel {
|
||||
public id: ExtensionId;
|
||||
public version: string | number;
|
||||
public updateUrl: string;
|
||||
|
||||
@observable name = "";
|
||||
@observable description = "";
|
||||
@observable isEnabled = false;
|
||||
@observable isInstalled = false;
|
||||
|
||||
constructor(model: ExtensionModel) {
|
||||
this.importModel(model);
|
||||
}
|
||||
|
||||
importModel(model: ExtensionModel) {
|
||||
importModel({ enabled, ...model }: ExtensionModel) {
|
||||
Object.assign(this, model);
|
||||
this.isEnabled = enabled;
|
||||
}
|
||||
|
||||
async install() {
|
||||
@ -28,6 +37,10 @@ export class LensExtension implements ExtensionModel {
|
||||
// todo
|
||||
}
|
||||
|
||||
async checkNewVersion() {
|
||||
// todo
|
||||
}
|
||||
|
||||
async enable() {
|
||||
// todo
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user