import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { describe, expect, it } from "@suaveplan/testing/runner"; const pkg = JSON.parse( readFileSync(resolve(import.meta.dirname, "../package.json"), "utf-8") ) as Record; describe("dep-graph", () => { it("has sideEffects: false", { timeout: 5000 }, () => { expect(pkg["sideEffects"]).toBe(false); }); it("has no disallowed @suaveplan/* runtime deps (only error, types, events, diff)", { timeout: 5000, }, () => { const deps = Object.keys( (pkg["dependencies"] as Record) ?? {} ); const suaveDeps = deps.filter((d) => d.startsWith("@suaveplan/")); const allowed = new Set([ "@suaveplan/error", "@suaveplan/types", "@suaveplan/events", "@suaveplan/diff", ]); for (const dep of suaveDeps) { expect(allowed.has(dep), `unexpected dep: ${dep}`).toBe(true); } }); it("workspace deps use workspace:^ range", { timeout: 5000 }, () => { const deps = (pkg["dependencies"] as Record) ?? {}; for (const [name, version] of Object.entries(deps)) { if (name.startsWith("@suaveplan/")) { expect(version, `${name} should use workspace:^`).toBe( "workspace:^" ); } } }); });