mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Load extensions also from local folder
Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
This commit is contained in:
parent
48d8d985ae
commit
540f0b0d84
@ -1,5 +1,6 @@
|
|||||||
import type { ExtensionManifest } from "./lens-extension"
|
import type { ExtensionManifest } from "./lens-extension"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
|
import os from "os"
|
||||||
import fs from "fs-extra"
|
import fs from "fs-extra"
|
||||||
import logger from "../main/logger"
|
import logger from "../main/logger"
|
||||||
import { extensionPackagesRoot, InstalledExtension } from "./extension-loader"
|
import { extensionPackagesRoot, InstalledExtension } from "./extension-loader"
|
||||||
@ -24,10 +25,14 @@ export class ExtensionManager {
|
|||||||
return extensionPackagesRoot()
|
return extensionPackagesRoot()
|
||||||
}
|
}
|
||||||
|
|
||||||
get folderPath(): string {
|
get inTreeFolderPath(): string {
|
||||||
return path.resolve(__static, "../extensions");
|
return path.resolve(__static, "../extensions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get localFolderPath(): string {
|
||||||
|
return path.join(os.homedir(), ".k8slens", "extensions");
|
||||||
|
}
|
||||||
|
|
||||||
get npmPath() {
|
get npmPath() {
|
||||||
return __non_webpack_require__.resolve('npm/bin/npm-cli')
|
return __non_webpack_require__.resolve('npm/bin/npm-cli')
|
||||||
}
|
}
|
||||||
@ -35,7 +40,7 @@ export class ExtensionManager {
|
|||||||
async load() {
|
async load() {
|
||||||
logger.info("[EXTENSION-MANAGER] loading extensions from " + this.extensionPackagesRoot)
|
logger.info("[EXTENSION-MANAGER] loading extensions from " + this.extensionPackagesRoot)
|
||||||
await fs.ensureDir(path.join(this.extensionPackagesRoot, "node_modules"))
|
await fs.ensureDir(path.join(this.extensionPackagesRoot, "node_modules"))
|
||||||
|
await fs.ensureDir(this.localFolderPath)
|
||||||
return await this.loadExtensions();
|
return await this.loadExtensions();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,30 +79,32 @@ export class ExtensionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async loadExtensions() {
|
async loadExtensions() {
|
||||||
const extensions = await this.loadFromFolder(this.folderPath);
|
const extensions = await this.loadFromFolder([this.inTreeFolderPath, this.localFolderPath])
|
||||||
return new Map(extensions.map(ext => [ext.id, ext]));
|
return new Map(extensions.map(ext => [ext.id, ext]));
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadFromFolder(folderPath: string): Promise<InstalledExtension[]> {
|
async loadFromFolder(folderPaths: string[]): Promise<InstalledExtension[]> {
|
||||||
const paths = await fs.readdir(folderPath);
|
|
||||||
const extensions: InstalledExtension[] = []
|
const extensions: InstalledExtension[] = []
|
||||||
const bundledExtensions = getBundledExtensions()
|
const bundledExtensions = getBundledExtensions()
|
||||||
for (const fileName of paths) {
|
folderPaths.forEach(async folderPath => {
|
||||||
if (!bundledExtensions.includes(fileName)) {
|
const paths = await fs.readdir(folderPath);
|
||||||
continue
|
for (const fileName of paths) {
|
||||||
|
if (!bundledExtensions.includes(fileName)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
const absPath = path.resolve(folderPath, fileName);
|
||||||
|
const manifestPath = path.resolve(absPath, "package.json");
|
||||||
|
await fs.access(manifestPath, fs.constants.F_OK)
|
||||||
|
const ext = await this.getExtensionByManifest(manifestPath).catch(() => null)
|
||||||
|
if (ext) {
|
||||||
|
extensions.push(ext)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const absPath = path.resolve(folderPath, fileName);
|
await fs.writeFile(path.join(this.extensionPackagesRoot, "package.json"), JSON.stringify(this.packagesJson), {mode: 0o600})
|
||||||
const manifestPath = path.resolve(absPath, "package.json");
|
await this.installPackages()
|
||||||
await fs.access(manifestPath, fs.constants.F_OK)
|
|
||||||
const ext = await this.getExtensionByManifest(manifestPath).catch(() => null)
|
|
||||||
if (ext) {
|
|
||||||
extensions.push(ext)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await fs.writeFile(path.join(this.extensionPackagesRoot, "package.json"), JSON.stringify(this.packagesJson), {mode: 0o600})
|
|
||||||
await this.installPackages()
|
|
||||||
|
|
||||||
logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions });
|
logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions });
|
||||||
|
})
|
||||||
return extensions;
|
return extensions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user