import { homedir } from "node:os"; import { join } from "node:path"; const CONFIG_PATH = process.env["GMAPS_CONFIG"] ?? join(homedir(), ".gmaps.json"); interface Config { lists: Record; } export async function loadConfig(): Promise { try { const file = Bun.file(CONFIG_PATH); const text = await file.text(); const data: unknown = JSON.parse(text); if ( data !== null && typeof data === "object" && "lists" in data && data.lists !== null && typeof data.lists === "object" ) { return data as Config; } } catch { // File doesn't exist or is invalid } return { lists: {} }; } async function saveConfig(config: Config): Promise { await Bun.write(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n"); } export async function addList(alias: string, url: string): Promise { const config = await loadConfig(); config.lists[alias] = url; await saveConfig(config); } export async function removeList(alias: string): Promise { const config = await loadConfig(); if (!(alias in config.lists)) { return false; } delete config.lists[alias]; await saveConfig(config); return true; } export async function getLists(): Promise> { const config = await loadConfig(); return config.lists; } export async function resolveAlias(urlOrAlias: string): Promise { if (urlOrAlias.startsWith("http") || urlOrAlias.includes("goo.gl")) { return urlOrAlias; } const config = await loadConfig(); const url = config.lists[urlOrAlias]; if (!url) { throw new Error( `Unknown alias "${urlOrAlias}". Run "gmaps lists ls" to see saved lists.`, ); } return url; }