import { promises as fs } from "fs"; import path from "path"; import _locreq from "locreq"; const locreq = _locreq(import.meta.dirname); let all_icon_names: Promise | null = null; const cache = {} as Record | undefined>; export const svg_icon_path = "src/icons"; async function getIconUncached(icon_name: string): Promise { return fs.readFile( locreq.resolve(path.resolve(svg_icon_path, icon_name + ".svg")), "utf-8" ); } export async function icon(icon_name: string) { if (!cache[icon_name]) { cache[icon_name] = getIconUncached(icon_name); } try { return cache[icon_name]; } catch (e) { console.error(e); return ""; } } export async function getAllIconNames() { if (!all_icon_names) { all_icon_names = fs .readdir(locreq.resolve(svg_icon_path)) .then((files) => files.map((file) => path.parse(file).name)); } return all_icon_names; }