From 1f7574148d9f22eefd94b6f332f310ff57524140 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 2 May 2026 17:32:53 +0100 Subject: [PATCH] test: align contract inventory with package excludes --- .../contracts/registry.contract.test.ts | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/plugins/contracts/registry.contract.test.ts b/src/plugins/contracts/registry.contract.test.ts index 2e7cc0b92ac..0ec3f47113e 100644 --- a/src/plugins/contracts/registry.contract.test.ts +++ b/src/plugins/contracts/registry.contract.test.ts @@ -1,3 +1,5 @@ +import fs from "node:fs"; +import path from "node:path"; import { describe, expect, it } from "vitest"; import { uniqueSortedStrings } from "../../plugin-sdk/test-helpers/string-utils.js"; import { loadPluginManifestRegistry, type PluginManifestRecord } from "../manifest-registry.js"; @@ -9,6 +11,34 @@ import { } from "./registry.js"; describe("plugin contract registry", () => { + function collectExcludedPackagedExtensionDirs(): ReadonlySet { + const packageJson = JSON.parse( + fs.readFileSync(path.join(process.cwd(), "package.json"), "utf-8"), + ) as { + files?: unknown; + }; + if (!Array.isArray(packageJson.files)) { + return new Set(); + } + const excluded = new Set(); + for (const entry of packageJson.files) { + if (typeof entry !== "string") { + continue; + } + const match = /^!dist\/extensions\/([^/]+)\/\*\*$/u.exec(entry); + if (match?.[1]) { + excluded.add(match[1]); + } + } + return excluded; + } + + const excludedPackagedExtensionDirs = collectExcludedPackagedExtensionDirs(); + + function isPackagedCorePluginId(pluginId: string): boolean { + return !excludedPackagedExtensionDirs.has(pluginId); + } + function expectUniqueIds(ids: readonly string[]) { expect(ids).toEqual([...new Set(ids)]); } @@ -24,7 +54,7 @@ describe("plugin contract registry", () => { function resolveBundledManifestPluginIds(predicate: (plugin: PluginManifestRecord) => boolean) { return loadPluginManifestRegistry({}) - .plugins.filter((plugin) => predicate(plugin)) + .plugins.filter((plugin) => isPackagedCorePluginId(plugin.id) && predicate(plugin)) .map((plugin) => plugin.id) .toSorted((left, right) => left.localeCompare(right)); } @@ -176,7 +206,7 @@ describe("plugin contract registry", () => { const bundledWebSearchPluginIds = resolveManifestContractPluginIds({ contract: "webSearchProviders", origin: "bundled", - }); + }).filter(isPackagedCorePluginId); expect( uniqueSortedStrings(