import { existsSync, readFileSync } from "node:fs"; import type { PackageEntry, ResourceScope } from "../types.ts"; function loadJson(path: string): Record { if (!existsSync(path)) return {}; try { return JSON.parse(readFileSync(path, "utf-8")) as Record; } catch { return {}; } } export function readPackagesFromSettings(path: string, scope: ResourceScope): PackageEntry[] { const settings = loadJson(path); const raw = Array.isArray(settings.packages) ? settings.packages : []; const values: PackageEntry[] = []; for (const entry of raw) { if (typeof entry === "string") { values.push({ name: entry, scope }); continue; } if (!entry || typeof entry !== "object") continue; const obj = entry as Record; if (typeof obj.source === "string") { values.push({ name: obj.source, scope }); continue; } if (typeof obj.package === "string") values.push({ name: obj.package, scope }); } return values; } export function mergePackageEntries(entries: PackageEntry[]): PackageEntry[] { const byName = new Map(); for (const entry of entries) { const existing = byName.get(entry.name); if (!existing || existing.scope !== "project") byName.set(entry.name, entry); } return [...byName.values()]; }