From bb0c04e350890fe80ca9a63c5be9d06064e31041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E5=A3=B0?= Date: Thu, 29 Aug 2024 14:03:07 +0800 Subject: [PATCH] fix: make installExtensions public --- src/index.ts | 63 ++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/src/index.ts b/src/index.ts index 4a2bd4a..5c5bcf7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -132,7 +132,7 @@ export interface Extension { */ version?: string; /** - * 目标下载地址 + * 下载地址 */ dist?: string; } @@ -140,7 +140,7 @@ export interface Extension { export interface ExtensionRelease { releaseId: string; /** - * 目标下载地址 + * 下载地址 */ dist?: string; } @@ -281,36 +281,13 @@ export class ExtensionInstaller implements IExtensionInstaller { return retry(() => createZipFile(zipFilePath), { retries: this.options.retry || 0, delay: 100 }); } - private async installExtensionsInPackFromPkg(pkgStr: string, dist: string): Promise { - const pkg = JSON.parse(pkgStr); - const extensionPack = pkg.extensionPack; - return extensionPack - ? await this.installExtensions( - extensionPack?.map((id: string) => { - const [publisher, name] = id.split("."); - return { - publisher, - name, - dist, - }; - }), - ) - : []; - } - - private async installExtensions(exts: Extension[], maxParallel?: number): Promise { - let result: string[][] = []; - if (maxParallel) { - result = await parallelRunPromise( - exts.map((e: Extension) => { - return () => this.install(e); - }), - maxParallel, - ); - } else { - result = await Promise.all(exts.map((e: Extension) => this.install(e))); - } - + public async installExtensions(exts: Extension[], maxParallel = 10): Promise { + const result = await parallelRunPromise( + exts.map((e: Extension) => { + return () => this.install(e); + }), + maxParallel, + ); return result.flat(Infinity) as string[]; } @@ -373,10 +350,28 @@ export class ExtensionInstaller implements IExtensionInstaller { ): Promise { // 解压插件 const targetPath = await this.unzipFile(dist, targetDirName, tmpZipFile); - const pkg = await fsp.readFile(path.resolve(targetPath, "package.json"), "utf-8"); if (this.options.installExtensionPack) { - const childPaths = await this.installExtensionsInPackFromPkg(pkg, dist); + const pkgStr = await fsp.readFile(path.resolve(targetPath, "package.json"), "utf-8"); + const pkg = JSON.parse(pkgStr) as { + extensionPack: string[]; + }; + const extensionPack = pkg.extensionPack; + let childPaths = [] as string[]; + if (extensionPack) { + childPaths = await this.installExtensions( + extensionPack?.map((id: string) => { + const [publisher, name] = id.split("."); + return { + publisher, + name, + dist, + }; + }), + 3, + ); + } + return [targetPath, ...childPaths]; }