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,36 +79,57 @@ 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 extensions: InstalledExtension[] = []
const folderPath = this.inTreeFolderPath
const bundledExtensions = getBundledExtensions() const bundledExtensions = getBundledExtensions()
for (const folderPath of folderPaths) { const paths = await fs.readdir(folderPath);
const extensions: InstalledExtension[] = [] for (const fileName of paths) {
const paths = await fs.readdir(folderPath); if (!bundledExtensions.includes(fileName)) {
for (const fileName of paths) { continue
if (!bundledExtensions.includes(fileName)) { }
continue const absPath = path.resolve(folderPath, fileName);
} const manifestPath = path.resolve(absPath, "package.json");
const absPath = path.resolve(folderPath, fileName); await fs.access(manifestPath, fs.constants.F_OK)
const manifestPath = path.resolve(absPath, "package.json"); const ext = await this.getExtensionByManifest(manifestPath).catch(() => null)
await fs.access(manifestPath, fs.constants.F_OK) if (ext) {
const ext = await this.getExtensionByManifest(manifestPath).catch(() => null) extensions.push(ext)
if (ext) {
extensions.push(ext)
}
} }
logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions });
allExtensions = allExtensions.concat(extensions)
} }
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 });
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;
} }
} }