import { readFile } from "node:fs/promises"; import path from "node:path"; import { describe, expect, it } from "@suaveplan/testing/runner"; const PKG_ROOT = path.resolve(import.meta.dirname, ".."); describe("api-audit-file — dependency graph and exports map", () => { it("exports map advertises every feature subpath", { timeout: 5000, }, async () => { const raw = await readFile(path.join(PKG_ROOT, "package.json"), "utf8"); const pkg = JSON.parse(raw) as { exports: Record; }; const subpaths = Object.keys(pkg.exports) .filter( (k) => (k === "." || k.startsWith("./")) && k !== "./package.json" ) .sort(); expect(subpaths).toEqual( [ ".", "./sink", "./rotation", "./retention", "./schema", "./hmac", "./error-codes", "./instruments", "./fs-helpers", ].sort() ); }); it("runtime deps use only workspace and catalog refs", { timeout: 5000, }, async () => { const raw = await readFile(path.join(PKG_ROOT, "package.json"), "utf8"); const pkg = JSON.parse(raw) as { dependencies?: Record; devDependencies?: Record; }; const all = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}), }; for (const [name, version] of Object.entries(all)) { if (name === "@opentelemetry/sdk-metrics") continue; if ( !version.startsWith("workspace:") && !version.startsWith("catalog:") ) { throw new Error( `Dependency ${name} uses bare version '${version}' — must be workspace:/catalog:` ); } } expect(true).toBe(true); }); it("runtime deps include the expected packages", { timeout: 5000, }, async () => { const raw = await readFile(path.join(PKG_ROOT, "package.json"), "utf8"); const pkg = JSON.parse(raw) as { dependencies?: Record; }; const deps = Object.keys(pkg.dependencies ?? {}).sort(); expect(deps).toContain("@suaveplan/crypto-hash"); expect(deps).toContain("@suaveplan/error"); expect(deps).toContain("@suaveplan/types"); expect(deps).toContain("zod"); }); });