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

Switch bundled extension declarations to injection token

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-12-19 09:03:41 -05:00
parent 8db81a4731
commit 89c8bb54d3
4 changed files with 17 additions and 11 deletions

View File

@ -58,8 +58,7 @@
"bundledHelmVersion": "3.7.2", "bundledHelmVersion": "3.7.2",
"sentryDsn": "", "sentryDsn": "",
"contentSecurityPolicy": "script-src 'unsafe-eval' 'self'; frame-src http://*.localhost:*/; img-src * data:", "contentSecurityPolicy": "script-src 'unsafe-eval' 'self'; frame-src http://*.localhost:*/; img-src * data:",
"welcomeRoute": "/welcome", "welcomeRoute": "/welcome"
"extensions": []
}, },
"engines": { "engines": {
"node": ">=16 <17" "node": ">=16 <17"

View File

@ -0,0 +1,10 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken } from "@ogre-tools/injectable";
export const bundledExtensionPathInjectionToken = getInjectionToken<string>({
id: "bundled-extension-path",
});

View File

@ -27,8 +27,8 @@ import getRelativePathInjectable from "../../common/path/get-relative-path.injec
import joinPathsInjectable from "../../common/path/join-paths.injectable"; import joinPathsInjectable from "../../common/path/join-paths.injectable";
import removePathInjectable from "../../common/fs/remove.injectable"; import removePathInjectable from "../../common/fs/remove.injectable";
import homeDirectoryPathInjectable from "../../common/os/home-directory-path.injectable"; import homeDirectoryPathInjectable from "../../common/os/home-directory-path.injectable";
import applicationInformationInjectable from "../../common/vars/application-information.injectable";
import lensResourcesDirInjectable from "../../common/vars/lens-resources-dir.injectable"; import lensResourcesDirInjectable from "../../common/vars/lens-resources-dir.injectable";
import { bundledExtensionPathInjectionToken } from "./bundled-extension-path";
const extensionDiscoveryInjectable = getInjectable({ const extensionDiscoveryInjectable = getInjectable({
id: "extension-discovery", id: "extension-discovery",
@ -58,7 +58,7 @@ const extensionDiscoveryInjectable = getInjectable({
getRelativePath: di.inject(getRelativePathInjectable), getRelativePath: di.inject(getRelativePathInjectable),
joinPaths: di.inject(joinPathsInjectable), joinPaths: di.inject(joinPathsInjectable),
homeDirectoryPath: di.inject(homeDirectoryPathInjectable), homeDirectoryPath: di.inject(homeDirectoryPathInjectable),
applicationInformation: di.inject(applicationInformationInjectable), bundledExtensionPaths: di.injectMany(bundledExtensionPathInjectionToken),
}), }),
}); });

View File

@ -30,7 +30,6 @@ import type { GetDirnameOfPath } from "../../common/path/get-dirname.injectable"
import type { GetRelativePath } from "../../common/path/get-relative-path.injectable"; import type { GetRelativePath } from "../../common/path/get-relative-path.injectable";
import type { RemovePath } from "../../common/fs/remove.injectable"; import type { RemovePath } from "../../common/fs/remove.injectable";
import type TypedEventEmitter from "typed-emitter"; import type TypedEventEmitter from "typed-emitter";
import type { ApplicationInformation } from "../../common/vars/application-information.injectable";
interface Dependencies { interface Dependencies {
readonly extensionLoader: ExtensionLoader; readonly extensionLoader: ExtensionLoader;
@ -42,7 +41,7 @@ interface Dependencies {
readonly isProduction: boolean; readonly isProduction: boolean;
readonly fileSystemSeparator: string; readonly fileSystemSeparator: string;
readonly homeDirectoryPath: string; readonly homeDirectoryPath: string;
readonly applicationInformation: ApplicationInformation; readonly bundledExtensionPaths: string[];
isCompatibleExtension: (manifest: LensExtensionManifest) => boolean; isCompatibleExtension: (manifest: LensExtensionManifest) => boolean;
installExtension: (name: string) => Promise<void>; installExtension: (name: string) => Promise<void>;
readJsonFile: ReadJson; readJsonFile: ReadJson;
@ -393,14 +392,12 @@ export class ExtensionDiscovery {
async loadBundledExtensions(): Promise<InstalledExtension[]> { async loadBundledExtensions(): Promise<InstalledExtension[]> {
const extensions: InstalledExtension[] = []; const extensions: InstalledExtension[] = [];
const extensionNames = this.dependencies.applicationInformation.config.extensions || [];
for (const dirName of extensionNames) { for (const bundledExtensionPath of this.dependencies.bundledExtensionPaths) {
const absPath = this.dependencies.joinPaths(__dirname, "..", "..", "node_modules", dirName); const extension = await this.loadExtensionFromFolder(bundledExtensionPath, { isBundled: true });
const extension = await this.loadExtensionFromFolder(absPath, { isBundled: true });
if (!extension) { if (!extension) {
throw new Error(`Couldn't load bundled extension: ${dirName}`); throw new Error(`Couldn't load bundled extension: ${bundledExtensionPath}`);
} }
extensions.push(extension); extensions.push(extension);