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 { action, observable, toJS } from "mobx";
|
||||||
import { BaseStore } from "../common/base-store";
|
import { BaseStore } from "../common/base-store";
|
||||||
import { LensExtension } from "./extension";
|
import { LensExtension } from "./extension";
|
||||||
|
import { isDevelopment } from "../common/vars";
|
||||||
|
|
||||||
export type ExtensionId = string;
|
export type ExtensionId = string;
|
||||||
export type ExtensionVersion = string | number;
|
export type ExtensionVersion = string | number;
|
||||||
@ -16,6 +18,7 @@ export interface ExtensionModel {
|
|||||||
name: string;
|
name: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
enabled?: boolean;
|
enabled?: boolean;
|
||||||
|
updateUrl?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
||||||
@ -29,6 +32,13 @@ export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
|||||||
@observable extensions = observable.map<ExtensionId, LensExtension>();
|
@observable extensions = observable.map<ExtensionId, LensExtension>();
|
||||||
@observable removed = 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 {
|
getById(id: ExtensionId): LensExtension {
|
||||||
return this.extensions.get(id);
|
return this.extensions.get(id);
|
||||||
}
|
}
|
||||||
@ -36,8 +46,9 @@ export class ExtensionStore extends BaseStore<ExtensionStoreModel> {
|
|||||||
async removeById(id: ExtensionId) {
|
async removeById(id: ExtensionId) {
|
||||||
const extension = this.getById(id);
|
const extension = this.getById(id);
|
||||||
if (extension) {
|
if (extension) {
|
||||||
|
const unInstallStatus = await extension.uninstall()
|
||||||
this.extensions.delete(id);
|
this.extensions.delete(id);
|
||||||
return extension.uninstall();
|
return unInstallStatus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,23 +1,32 @@
|
|||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { ExtensionModel } from "./extension-store";
|
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 ExtensionId = string;
|
||||||
export type ExtensionVersion = string | number;
|
export type ExtensionVersion = string | number;
|
||||||
|
|
||||||
export class LensExtension implements ExtensionModel {
|
export class LensExtension implements ExtensionModel {
|
||||||
public id: ExtensionId;
|
public id: ExtensionId;
|
||||||
public version: string | number;
|
public version: string | number;
|
||||||
|
public updateUrl: string;
|
||||||
|
|
||||||
@observable name = "";
|
@observable name = "";
|
||||||
@observable description = "";
|
@observable description = "";
|
||||||
@observable isEnabled = false;
|
@observable isEnabled = false;
|
||||||
|
@observable isInstalled = false;
|
||||||
|
|
||||||
constructor(model: ExtensionModel) {
|
constructor(model: ExtensionModel) {
|
||||||
this.importModel(model);
|
this.importModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
importModel(model: ExtensionModel) {
|
importModel({ enabled, ...model }: ExtensionModel) {
|
||||||
Object.assign(this, model);
|
Object.assign(this, model);
|
||||||
|
this.isEnabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
async install() {
|
async install() {
|
||||||
@ -28,6 +37,10 @@ export class LensExtension implements ExtensionModel {
|
|||||||
// todo
|
// todo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async checkNewVersion() {
|
||||||
|
// todo
|
||||||
|
}
|
||||||
|
|
||||||
async enable() {
|
async enable() {
|
||||||
// todo
|
// todo
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user