From bf3b738a9f465b0a08cb8bcd2bebfe7e5a2d1d8c Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Tue, 17 Feb 2026 10:01:30 -0800 Subject: [PATCH] Try to align `scanBuiltinExtensions` with new esbuild changes --- build/lib/extensions.ts | 12 ++++++------ build/next/index.ts | 43 ++++++++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index fac7946fc98..6c1e65b0f57 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -441,7 +441,7 @@ interface IExtensionManifest { /** * Loosely based on `getExtensionKind` from `src/vs/workbench/services/extensions/common/extensionManifestPropertiesService.ts` */ -function isWebExtension(manifest: IExtensionManifest): boolean { +export function isWebExtension(manifest: IExtensionManifest): boolean { if (Boolean(manifest.browser)) { return true; } @@ -578,11 +578,11 @@ export function packageMarketplaceExtensionsStream(forWeb: boolean): Stream { } export interface IScannedBuiltinExtension { - extensionPath: string; - packageJSON: any; - packageNLS?: any; - readmePath?: string; - changelogPath?: string; + readonly extensionPath: string; + readonly packageJSON: unknown; + readonly packageNLS: unknown | undefined; + readonly readmePath: string | undefined; + readonly changelogPath: string | undefined; } export function scanBuiltinExtensions(extensionsRoot: string, exclude: string[] = []): IScannedBuiltinExtension[] { diff --git a/build/next/index.ts b/build/next/index.ts index f1c0784ef28..e8f5b1f72d1 100644 --- a/build/next/index.ts +++ b/build/next/index.ts @@ -15,6 +15,7 @@ import { getVersion } from '../lib/getVersion.ts'; import product from '../../product.json' with { type: 'json' }; import packageJson from '../../package.json' with { type: 'json' }; import { useEsbuildTranspile } from '../buildConfig.ts'; +import { isWebExtension, type IScannedBuiltinExtension } from '../lib/extensions.ts'; const globAsync = promisify(glob); @@ -378,33 +379,43 @@ async function cleanDir(dir: string): Promise { * Scan for built-in extensions in the given directory. * Returns an array of extension entries for the builtinExtensionsScannerService. */ -function scanBuiltinExtensions(extensionsRoot: string): Array<{ extensionPath: string; packageJSON: unknown }> { - const result: Array<{ extensionPath: string; packageJSON: unknown }> = []; +function scanBuiltinExtensions(extensionsRoot: string): Array { + const scannedExtensions: Array = []; const extensionsPath = path.join(REPO_ROOT, extensionsRoot); if (!fs.existsSync(extensionsPath)) { - return result; + return scannedExtensions; } - for (const entry of fs.readdirSync(extensionsPath, { withFileTypes: true })) { - if (!entry.isDirectory()) { + for (const extensionFolder of fs.readdirSync(extensionsPath)) { + const packageJSONPath = path.join(extensionsPath, extensionFolder, 'package.json'); + if (!fs.existsSync(packageJSONPath)) { continue; } - const packageJsonPath = path.join(extensionsPath, entry.name, 'package.json'); - if (fs.existsSync(packageJsonPath)) { - try { - const packageJSON = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); - result.push({ - extensionPath: entry.name, - packageJSON - }); - } catch (e) { - // Skip invalid extensions + try { + const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, 'utf8')); + if (!isWebExtension(packageJSON)) { + continue; } + const children = fs.readdirSync(path.join(extensionsPath, extensionFolder)); + const packageNLSPath = children.filter(child => child === 'package.nls.json')[0]; + const packageNLS = packageNLSPath ? JSON.parse(fs.readFileSync(path.join(extensionsPath, extensionFolder, packageNLSPath), 'utf8')) : undefined; + const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0]; + const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0]; + + scannedExtensions.push({ + extensionPath: extensionFolder, + packageJSON, + packageNLS, + readmePath: readme ? path.join(extensionFolder, readme) : undefined, + changelogPath: changelog ? path.join(extensionFolder, changelog) : undefined, + }); + } catch (e) { + // Skip invalid extensions } } - return result; + return scannedExtensions; } /**