import path from "node:path"; export function normalizePathPrepend(entries?: string[]) { if (!Array.isArray(entries)) { return []; } const seen = new Set(); const normalized: string[] = []; for (const entry of entries) { if (typeof entry !== "string") { continue; } const trimmed = entry.trim(); if (!trimmed || seen.has(trimmed)) { continue; } seen.add(trimmed); normalized.push(trimmed); } return normalized; } export function mergePathPrepend(existing: string | undefined, prepend: string[]) { if (prepend.length === 0) { return existing; } const partsExisting = (existing ?? "") .split(path.delimiter) .map((part) => part.trim()) .filter(Boolean); const merged: string[] = []; const seen = new Set(); for (const part of [...prepend, ...partsExisting]) { if (seen.has(part)) { continue; } seen.add(part); merged.push(part); } return merged.join(path.delimiter); } export function applyPathPrepend( env: Record, prepend: string[] | undefined, options?: { requireExisting?: boolean }, ) { if (!Array.isArray(prepend) || prepend.length === 0) { return; } if (options?.requireExisting && !env.PATH) { return; } const merged = mergePathPrepend(env.PATH, prepend); if (merged) { env.PATH = merged; } }