Something went wrong. Try again.
fork of prime agent with changes i want but are not upstreamable probqbly (and some fixes)
Something went wrong. Try again.
2.8 kB · 101 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "fs";import { tmpdir } from "os";import { join } from "path";import { afterEach, beforeEach, describe, expect, it } from "vitest";import { ENV_AGENT_DIR } from "../src/config.js";import { getThemeExportColors } from "../src/modes/interactive/theme/theme.js";
type ThemeFile = { name: string; vars?: Record<string, string | number>; colors: Record<string, string | number>; export?: { pageBg?: string | number; cardBg?: string | number; infoBg?: string | number; };};
describe("getThemeExportColors", () => { let tempRoot: string; let agentDir: string; let previousAgentDir: string | undefined;
beforeEach(() => { tempRoot = mkdtempSync(join(tmpdir(), "pi-theme-export-")); agentDir = join(tempRoot, "agent"); previousAgentDir = process.env[ENV_AGENT_DIR]; process.env[ENV_AGENT_DIR] = agentDir; mkdirSync(join(agentDir, "themes"), { recursive: true }); });
afterEach(() => { rmSync(tempRoot, { recursive: true, force: true }); if (previousAgentDir === undefined) { delete process.env[ENV_AGENT_DIR]; } else { process.env[ENV_AGENT_DIR] = previousAgentDir; } });
it("resolves export variable references using the same syntax as colors", () => { const darkTheme = JSON.parse( readFileSync(new URL("../src/modes/interactive/theme/dark.json", import.meta.url), "utf-8"), ) as ThemeFile;
const customTheme: ThemeFile = { ...darkTheme, name: "custom-export-vars", vars: { ...(darkTheme.vars ?? {}), pageBgVar: "#112233", pageBgAlias: "pageBgVar", infoBgVar: "#445566", cardBgVar: "#223344", }, export: { pageBg: "pageBgAlias", cardBg: "cardBgVar", infoBg: "infoBgVar", }, };
writeFileSync(join(agentDir, "themes", "custom-export-vars.json"), JSON.stringify(customTheme, null, 2));
expect(getThemeExportColors("custom-export-vars")).toEqual({ pageBg: "#112233", cardBg: "#223344", infoBg: "#445566", }); });
it("resolves recursive vars and converts 256-color export values to hex", () => { const darkTheme = JSON.parse( readFileSync(new URL("../src/modes/interactive/theme/dark.json", import.meta.url), "utf-8"), ) as ThemeFile;
const customTheme: ThemeFile = { ...darkTheme, name: "custom-export-recursive", vars: { ...(darkTheme.vars ?? {}), deepPageBg: "#abcdef", pageBgAlias: "deepPageBg", cardBgAnsi: 24, }, export: { pageBg: "pageBgAlias", cardBg: "cardBgAnsi", infoBg: "", }, };
writeFileSync(join(agentDir, "themes", "custom-export-recursive.json"), JSON.stringify(customTheme, null, 2));
expect(getThemeExportColors("custom-export-recursive")).toEqual({ pageBg: "#abcdef", cardBg: "#005f87", infoBg: undefined, }); });});