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

make LensExtension abstract as an affordence to extension devs

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2020-11-18 10:00:55 -05:00
parent 43976f5bd9
commit f2db53d544
3 changed files with 14 additions and 12 deletions

View File

@ -3,7 +3,7 @@ import { action, observable, reaction } from "mobx";
import logger from "../main/logger"; import logger from "../main/logger";
export type LensExtensionId = string; // path to manifest (package.json) export type LensExtensionId = string; // path to manifest (package.json)
export type LensExtensionConstructor = new (...args: ConstructorParameters<typeof LensExtension>) => LensExtension; export type LensExtensionConstructor = new (ext: InstalledExtension) => LensExtension;
export interface LensExtensionManifest { export interface LensExtensionManifest {
name: string; name: string;
@ -13,7 +13,13 @@ export interface LensExtensionManifest {
renderer?: string; // path to %ext/dist/renderer.js renderer?: string; // path to %ext/dist/renderer.js
} }
export class LensExtension { /**
* LensExtension is an abstract class representing a loaded extensions.
*
* To make an extension, a new class that extends this class must be made and
* must not have a different constructor type.
*/
export abstract class LensExtension {
readonly manifest: LensExtensionManifest; readonly manifest: LensExtensionManifest;
readonly manifestPath: string; readonly manifestPath: string;
readonly isBundled: boolean; readonly isBundled: boolean;
@ -46,7 +52,7 @@ export class LensExtension {
async enable() { async enable() {
if (this.isEnabled) return; if (this.isEnabled) return;
this.isEnabled = true; this.isEnabled = true;
this.onActivate(); await this.onActivate();
logger.info(`[EXTENSION]: enabled ${this.name}@${this.version}`); logger.info(`[EXTENSION]: enabled ${this.name}@${this.version}`);
} }
@ -54,7 +60,7 @@ export class LensExtension {
async disable() { async disable() {
if (!this.isEnabled) return; if (!this.isEnabled) return;
this.isEnabled = false; this.isEnabled = false;
this.onDeactivate(); await this.onDeactivate();
logger.info(`[EXTENSION]: disabled ${this.name}@${this.version}`); logger.info(`[EXTENSION]: disabled ${this.name}@${this.version}`);
} }
@ -87,11 +93,7 @@ export class LensExtension {
}; };
} }
protected onActivate() { protected abstract onActivate(): void | Promise<void>;
// mock
}
protected onDeactivate() { protected abstract onDeactivate(): void | Promise<void>;
// mock
}
} }

View File

@ -4,7 +4,7 @@ import { LensExtension } from "./lens-extension";
import { WindowManager } from "../main/window-manager"; import { WindowManager } from "../main/window-manager";
import { getExtensionPageUrl } from "./registries/page-registry"; import { getExtensionPageUrl } from "./registries/page-registry";
export class LensMainExtension extends LensExtension { export abstract class LensMainExtension extends LensExtension {
@observable.shallow appMenus: MenuRegistration[] = []; @observable.shallow appMenus: MenuRegistration[] = [];
async navigate<P extends object>(pageId?: string, params?: P, frameId?: number) { async navigate<P extends object>(pageId?: string, params?: P, frameId?: number) {

View File

@ -3,7 +3,7 @@ import { observable } from "mobx";
import { LensExtension } from "./lens-extension"; import { LensExtension } from "./lens-extension";
import { getExtensionPageUrl } from "./registries/page-registry"; import { getExtensionPageUrl } from "./registries/page-registry";
export class LensRendererExtension extends LensExtension { export abstract class LensRendererExtension extends LensExtension {
@observable.shallow globalPages: PageRegistration[] = []; @observable.shallow globalPages: PageRegistration[] = [];
@observable.shallow clusterPages: PageRegistration[] = []; @observable.shallow clusterPages: PageRegistration[] = [];
@observable.shallow globalPageMenus: PageMenuRegistration[] = []; @observable.shallow globalPageMenus: PageMenuRegistration[] = [];