import { mkdtempSync, realpathSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { $ } from "bun"; import { createStudioStore, type Identity } from "../src/server/store"; export const ada: Identity & { id: string } = { id: "u-ada", name: "Ada Lovelace", email: "ada@example.org" }; export const bob: Identity & { id: string } = { id: "u-bob", name: "Bob Ext", email: "bob@example.org" }; export function tempDir(prefix = "stc-studio-"): string { return realpathSync(mkdtempSync(join(tmpdir(), prefix))); } export async function newStore(opts: { allowLocalRemotes?: boolean } = {}) { const dataDir = tempDir(); const store = createStudioStore({ dataDir, ...opts }); return { dataDir, store }; } /** Runs git as an outside tool (VS Code, a terminal) would: plain identity, in the given dir. */ export async function extGit(cwd: string, ...args: string[]): Promise { const r = await $`git -c user.name=${bob.name} -c user.email=${bob.email} -c commit.gpgsign=false -c core.hooksPath=/dev/null ${args}`.cwd(cwd).quiet().nothrow(); if (r.exitCode !== 0) throw new Error(`git ${args.join(" ")} failed: ${r.stderr.toString()}`); return r.stdout.toString().trim(); }