/** * 路径管理器 — 不可变的 PathEntry[] 操作 */ import type { PathEntry } from './path-entry'; export interface PathValidation { isValid: boolean; isDuplicate: boolean; isEnvVar: boolean; } export function analyzePaths( paths: readonly PathEntry[], validateFn: (path: string) => boolean, ): PathValidation[] { const result: PathValidation[] = []; const seen = new Set(); for (const entry of paths) { const lower = entry.path.toLowerCase(); const isDuplicate = seen.has(lower); seen.add(lower); result.push({ isValid: validateFn(entry.path), isDuplicate, isEnvVar: entry.path.includes('%'), }); } return result; } /** 从数组中移除无效和重复路径,返回 [新数组, 被移除的路径] */ export function pathClean( paths: readonly PathEntry[], validateFn: (path: string) => boolean, ): [PathEntry[], PathEntry[]] { const analysis = analyzePaths(paths, validateFn); const kept: PathEntry[] = []; const removed: PathEntry[] = []; for (let i = 0; i < paths.length; i++) { const a = analysis[i]; if (!a.isValid || a.isDuplicate) { removed.push(paths[i]); } else { kept.push(paths[i]); } } return [kept, removed]; }