diff --git a/package.json b/package.json index c206996bbc..34df5c68e5 100644 --- a/package.json +++ b/package.json @@ -429,7 +429,7 @@ "typed-emitter": "^1.4.0", "typedoc": "0.23.14", "typedoc-plugin-markdown": "^3.13.1", - "typescript": "^4.8.2", + "typescript": "^4.8.3", "typescript-plugin-css-modules": "^3.4.0", "webpack": "^5.74.0", "webpack-cli": "^4.9.2", diff --git a/src/extensions/extension-discovery/extension-discovery.ts b/src/extensions/extension-discovery/extension-discovery.ts index 40df43ebdf..e6f500805a 100644 --- a/src/extensions/extension-discovery/extension-discovery.ts +++ b/src/extensions/extension-discovery/extension-discovery.ts @@ -363,7 +363,8 @@ export class ExtensionDiscovery { const id = this.getInstalledManifestPath(manifest.name); const isEnabled = this.dependencies.extensionsStore.isEnabled({ id, isBundled }); const extensionDir = path.dirname(manifestPath); - const npmPackage = path.join(extensionDir, `${manifest.name}-${manifest.version}.tgz`); + const packedName = manifest.name.replaceAll("@", "").replaceAll("/", "-"); + const npmPackage = path.join(extensionDir, `${packedName}-${manifest.version}.tgz`); const absolutePath = (isProduction && await this.dependencies.pathExists(npmPackage)) ? npmPackage : extensionDir; const isCompatible = isBundled || this.dependencies.isCompatibleExtension(manifest); @@ -390,28 +391,11 @@ export class ExtensionDiscovery { async ensureExtensions(): Promise> { const bundledExtensions = await this.loadBundledExtensions(); - - await this.installBundledPackages(this.packageJsonPath, bundledExtensions); - const userExtensions = await this.loadFromFolder(this.localFolderPath, bundledExtensions.map((extension) => extension.manifest.name)); - - for (const extension of userExtensions) { - if (!(await this.dependencies.pathExists(extension.manifestPath))) { - try { - await this.dependencies.installExtension(extension.absolutePath); - } catch (error) { - const message = error instanceof Error - ? error.message - : String(error || "unknown error"); - const { name, version } = extension.manifest; - - this.dependencies.logger.error(`${logModule}: failed to install user extension ${name}@${version}: ${message}`); - } - } - } - const extensions = bundledExtensions.concat(userExtensions); + await this.installBundledPackages(this.packageJsonPath, extensions); + return this.extensions = new Map(extensions.map(extension => [extension.id, extension])); } @@ -420,10 +404,13 @@ export class ExtensionDiscovery { */ installBundledPackages(packageJsonPath: string, extensions: InstalledExtension[]): Promise { const dependencies = Object.fromEntries( - extensions.map(extension => [extension.manifest.name, extension.absolutePath]), + extensions.filter(extension => extension.isBundled).map(extension => [extension.manifest.name, extension.absolutePath]), + ); + const optionalDependencies = Object.fromEntries( + extensions.filter(extension => !extension.isBundled).map(extension => [extension.manifest.name, extension.absolutePath]), ); - return this.dependencies.installExtensions(packageJsonPath, { dependencies }); + return this.dependencies.installExtensions(packageJsonPath, { dependencies, optionalDependencies }); } async loadBundledExtensions(): Promise { diff --git a/src/extensions/extension-installer/extension-installer.ts b/src/extensions/extension-installer/extension-installer.ts index a2781f15bc..1764435a54 100644 --- a/src/extensions/extension-installer/extension-installer.ts +++ b/src/extensions/extension-installer/extension-installer.ts @@ -42,7 +42,7 @@ export class ExtensionInstaller { }); logger.info(`${logModule} installing dependencies at ${this.dependencies.extensionPackageRootDirectory}`); - await this.npm(["install", "--no-audit", "--only=prod", "--prefer-offline", "--no-package-lock"]); + await this.npm(["install", "--audit=false", "--fund=false", "--only=prod", "--prefer-offline"]); logger.info(`${logModule} dependencies installed at ${this.dependencies.extensionPackageRootDirectory}`); } finally { this.installLock.release(); @@ -58,7 +58,7 @@ export class ExtensionInstaller { try { logger.info(`${logModule} installing package from ${name} to ${this.dependencies.extensionPackageRootDirectory}`); - await this.npm(["install", "--no-audit", "--only=prod", "--package-lock=false", "--prefer-offline", "--no-package-lock", name]); + await this.npm(["install", "--audit=false", "--fund=false", "--only=prod", "--prefer-offline", name]); logger.info(`${logModule} package ${name} installed to ${this.dependencies.extensionPackageRootDirectory}`); } finally { this.installLock.release(); diff --git a/yarn.lock b/yarn.lock index d753fda2fb..2fcacf8460 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12639,10 +12639,10 @@ typescript-plugin-css-modules@^3.4.0: stylus "^0.54.8" tsconfig-paths "^3.9.0" -typescript@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== +typescript@^4.8.3: + version "4.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.3.tgz#d59344522c4bc464a65a730ac695007fdb66dd88" + integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig== typical@^4.0.0: version "4.0.0"