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

Separate bundled extension loading from loading extensions from local folder

Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
This commit is contained in:
Lauri Nevala 2020-10-27 14:23:20 +02:00
parent 46c3738213
commit 9e75745525

View File

@ -79,15 +79,16 @@ export class ExtensionManager {
} }
async loadExtensions() { async loadExtensions() {
const extensions = await this.loadFromFolder([this.inTreeFolderPath, this.localFolderPath]) const bundledExtensions = await this.loadBundledExtensions()
const localExtendions = await this.loadFromFolder(this.localFolderPath)
const extensions = bundledExtensions.concat(localExtendions)
return new Map(extensions.map(ext => [ext.id, ext])); return new Map(extensions.map(ext => [ext.id, ext]));
} }
async loadFromFolder(folderPaths: string[]): Promise<InstalledExtension[]> { async loadBundledExtensions() {
let allExtensions: InstalledExtension[] = []
const bundledExtensions = getBundledExtensions()
for (const folderPath of folderPaths) {
const extensions: InstalledExtension[] = [] const extensions: InstalledExtension[] = []
const folderPath = this.inTreeFolderPath
const bundledExtensions = getBundledExtensions()
const paths = await fs.readdir(folderPath); const paths = await fs.readdir(folderPath);
for (const fileName of paths) { for (const fileName of paths) {
if (!bundledExtensions.includes(fileName)) { if (!bundledExtensions.includes(fileName)) {
@ -101,14 +102,34 @@ export class ExtensionManager {
extensions.push(ext) extensions.push(ext)
} }
} }
logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions });
await fs.writeFile(path.join(this.extensionPackagesRoot, "package.json"), JSON.stringify(this.packagesJson), {mode: 0o600})
await this.installPackages()
return extensions
}
async loadFromFolder(folderPath: string): Promise<InstalledExtension[]> {
const bundledExtensions = getBundledExtensions()
const extensions: InstalledExtension[] = []
const paths = await fs.readdir(folderPath);
for (const fileName of paths) {
if (bundledExtensions.includes(fileName)) { // do no allow to override bundled extensions
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)
}
}
logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions }); logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions });
allExtensions = allExtensions.concat(extensions)
}
await fs.writeFile(path.join(this.extensionPackagesRoot, "package.json"), JSON.stringify(this.packagesJson), {mode: 0o600}) await fs.writeFile(path.join(this.extensionPackagesRoot, "package.json"), JSON.stringify(this.packagesJson), {mode: 0o600})
await this.installPackages() await this.installPackages()
return allExtensions; return extensions;
} }
} }