mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Resolve extension enabled status when loading it (#1485)
* Resolve extension enabled status when loading it Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * Check if extension is enabled in store unless it is bundled Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * Return false by default for isEnabled Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * Refactor isEnabled assignment Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
This commit is contained in:
parent
ca49fb98d9
commit
29ea0c8404
@ -6,6 +6,7 @@ import path from "path";
|
|||||||
import { getBundledExtensions } from "../common/utils/app-version";
|
import { getBundledExtensions } from "../common/utils/app-version";
|
||||||
import logger from "../main/logger";
|
import logger from "../main/logger";
|
||||||
import { extensionInstaller, PackageJson } from "./extension-installer";
|
import { extensionInstaller, PackageJson } from "./extension-installer";
|
||||||
|
import { extensionsStore } from "./extensions-store";
|
||||||
import type { LensExtensionId, LensExtensionManifest } from "./lens-extension";
|
import type { LensExtensionId, LensExtensionManifest } from "./lens-extension";
|
||||||
|
|
||||||
export interface InstalledExtension {
|
export interface InstalledExtension {
|
||||||
@ -91,7 +92,7 @@ export class ExtensionDiscovery {
|
|||||||
init() {
|
init() {
|
||||||
this.watchExtensions();
|
this.watchExtensions();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Watches for added/removed local extensions.
|
* Watches for added/removed local extensions.
|
||||||
* Dependencies are installed automatically after an extension folder is copied.
|
* Dependencies are installed automatically after an extension folder is copied.
|
||||||
@ -213,24 +214,26 @@ export class ExtensionDiscovery {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async getByManifest(manifestPath: string, { isBundled = false, isEnabled = isBundled }: {
|
protected async getByManifest(manifestPath: string, { isBundled = false }: {
|
||||||
isBundled?: boolean;
|
isBundled?: boolean;
|
||||||
isEnabled?: boolean;
|
|
||||||
} = {}): Promise<InstalledExtension | null> {
|
} = {}): Promise<InstalledExtension | null> {
|
||||||
let manifestJson: LensExtensionManifest;
|
let manifestJson: LensExtensionManifest;
|
||||||
|
let isEnabled: boolean;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// check manifest file for existence
|
// check manifest file for existence
|
||||||
fs.accessSync(manifestPath, fs.constants.F_OK);
|
fs.accessSync(manifestPath, fs.constants.F_OK);
|
||||||
|
|
||||||
manifestJson = __non_webpack_require__(manifestPath);
|
manifestJson = __non_webpack_require__(manifestPath);
|
||||||
|
const installedManifestPath = path.join(this.nodeModulesPath, manifestJson.name, "package.json");
|
||||||
this.packagesJson.dependencies[manifestJson.name] = path.dirname(manifestPath);
|
this.packagesJson.dependencies[manifestJson.name] = path.dirname(manifestPath);
|
||||||
|
const isEnabled = isBundled || extensionsStore.isEnabled(installedManifestPath);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
manifestPath: path.join(this.nodeModulesPath, manifestJson.name, "package.json"),
|
manifestPath: installedManifestPath,
|
||||||
manifest: manifestJson,
|
manifest: manifestJson,
|
||||||
isBundled,
|
isBundled,
|
||||||
isEnabled,
|
isEnabled
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`${logModule}: can't install extension at ${manifestPath}: ${error}`, { manifestJson });
|
logger.error(`${logModule}: can't install extension at ${manifestPath}: ${error}`, { manifestJson });
|
||||||
@ -316,13 +319,12 @@ export class ExtensionDiscovery {
|
|||||||
/**
|
/**
|
||||||
* Loads extension from absolute path, updates this.packagesJson to include it and returns the extension.
|
* Loads extension from absolute path, updates this.packagesJson to include it and returns the extension.
|
||||||
*/
|
*/
|
||||||
async loadExtensionFromPath(absPath: string, { isBundled = false, isEnabled = isBundled }: {
|
async loadExtensionFromPath(absPath: string, { isBundled = false }: {
|
||||||
isBundled?: boolean;
|
isBundled?: boolean;
|
||||||
isEnabled?: boolean;
|
|
||||||
} = {}): Promise<InstalledExtension | null> {
|
} = {}): Promise<InstalledExtension | null> {
|
||||||
const manifestPath = path.resolve(absPath, manifestFilename);
|
const manifestPath = path.resolve(absPath, manifestFilename);
|
||||||
|
|
||||||
return this.getByManifest(manifestPath, { isBundled, isEnabled });
|
return this.getByManifest(manifestPath, { isBundled });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,11 +47,6 @@ export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
|||||||
await extensionLoader.whenLoaded;
|
await extensionLoader.whenLoaded;
|
||||||
await this.whenLoaded;
|
await this.whenLoaded;
|
||||||
|
|
||||||
// activate user-extensions when state is ready
|
|
||||||
extensionLoader.userExtensions.forEach((ext, extId) => {
|
|
||||||
ext.isEnabled = this.isEnabled(extId);
|
|
||||||
});
|
|
||||||
|
|
||||||
// apply state on changes from store
|
// apply state on changes from store
|
||||||
reaction(() => this.state.toJS(), extensionsState => {
|
reaction(() => this.state.toJS(), extensionsState => {
|
||||||
extensionsState.forEach((state, extId) => {
|
extensionsState.forEach((state, extId) => {
|
||||||
@ -70,7 +65,7 @@ export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
|||||||
|
|
||||||
isEnabled(extId: LensExtensionId) {
|
isEnabled(extId: LensExtensionId) {
|
||||||
const state = this.state.get(extId);
|
const state = this.state.get(extId);
|
||||||
return !state /* enabled by default */ || state.enabled;
|
return state && state.enabled; // by default false
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user