From 45510084cdba5c0baa9685700b8d1e5c4d95570a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 17 Mar 2026 05:45:54 +0000 Subject: [PATCH] refactor(plugins): share bundle path list helpers --- src/plugins/bundle-manifest.ts | 4 ++-- src/plugins/bundle-mcp.ts | 34 +++++----------------------------- 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/src/plugins/bundle-manifest.ts b/src/plugins/bundle-manifest.ts index 981eb9fd3a6..b5645035f5d 100644 --- a/src/plugins/bundle-manifest.ts +++ b/src/plugins/bundle-manifest.ts @@ -46,11 +46,11 @@ function normalizePathList(value: unknown): string[] { return value.map((entry) => (typeof entry === "string" ? entry.trim() : "")).filter(Boolean); } -function normalizeBundlePathList(value: unknown): string[] { +export function normalizeBundlePathList(value: unknown): string[] { return Array.from(new Set(normalizePathList(value))); } -function mergeBundlePathLists(...groups: string[][]): string[] { +export function mergeBundlePathLists(...groups: string[][]): string[] { const merged: string[] = []; const seen = new Set(); for (const group of groups) { diff --git a/src/plugins/bundle-mcp.ts b/src/plugins/bundle-mcp.ts index 29bd2b3a6c9..fbd733d9695 100644 --- a/src/plugins/bundle-mcp.ts +++ b/src/plugins/bundle-mcp.ts @@ -8,6 +8,8 @@ import { CLAUDE_BUNDLE_MANIFEST_RELATIVE_PATH, CODEX_BUNDLE_MANIFEST_RELATIVE_PATH, CURSOR_BUNDLE_MANIFEST_RELATIVE_PATH, + mergeBundlePathLists, + normalizeBundlePathList, } from "./bundle-manifest.js"; import { normalizePluginsConfig, resolveEffectiveEnableState } from "./config-state.js"; import { loadPluginManifestRegistry } from "./manifest-registry.js"; @@ -41,32 +43,6 @@ const MANIFEST_PATH_BY_FORMAT: Record = { }; const CLAUDE_PLUGIN_ROOT_PLACEHOLDER = "${CLAUDE_PLUGIN_ROOT}"; -function normalizePathList(value: unknown): string[] { - if (typeof value === "string") { - const trimmed = value.trim(); - return trimmed ? [trimmed] : []; - } - if (!Array.isArray(value)) { - return []; - } - return value.map((entry) => (typeof entry === "string" ? entry.trim() : "")).filter(Boolean); -} - -function mergeUniquePathLists(...groups: string[][]): string[] { - const merged: string[] = []; - const seen = new Set(); - for (const group of groups) { - for (const entry of group) { - if (seen.has(entry)) { - continue; - } - seen.add(entry); - merged.push(entry); - } - } - return merged; -} - function readPluginJsonObject(params: { rootDir: string; relativePath: string; @@ -103,12 +79,12 @@ function resolveBundleMcpConfigPaths(params: { rootDir: string; bundleFormat: PluginBundleFormat; }): string[] { - const declared = normalizePathList(params.raw.mcpServers); + const declared = normalizeBundlePathList(params.raw.mcpServers); const defaults = fs.existsSync(path.join(params.rootDir, ".mcp.json")) ? [".mcp.json"] : []; if (params.bundleFormat === "claude") { - return mergeUniquePathLists(defaults, declared); + return mergeBundlePathLists(defaults, declared); } - return mergeUniquePathLists(defaults, declared); + return mergeBundlePathLists(defaults, declared); } export function extractMcpServerMap(raw: unknown): Record {