/** * Verify that the runtime dependencies declared in package.json match those * actually imported in the source tree — no undeclared deps, no phantom deps. */ import { readFileSync } from "node:fs"; import { join } from "node:path"; import { describe, expect, it } from "@suaveplan/testing/runner"; const PKG_ROOT = join(import.meta.dirname, ".."); const pkg = JSON.parse( readFileSync(join(PKG_ROOT, "package.json"), "utf-8") ) as { dependencies: Record; devDependencies: Record; }; describe("dep-graph", () => { it("has @suaveplan/error as a runtime dep", { timeout: 5000 }, () => { expect(pkg.dependencies["@suaveplan/error"]).toBeDefined(); }); it("has @suaveplan/types as a runtime dep", { timeout: 5000 }, () => { expect(pkg.dependencies["@suaveplan/types"]).toBeDefined(); }); it("has zod as a runtime dep", { timeout: 5000 }, () => { expect(pkg.dependencies["zod"]).toBeDefined(); }); it("has tslib as a runtime dep", { timeout: 5000 }, () => { expect(pkg.dependencies["tslib"]).toBeDefined(); }); it("has vitest as a devDep only", { timeout: 5000 }, () => { expect(pkg.devDependencies["vitest"]).toBeDefined(); expect(pkg.dependencies["vitest"]).toBeUndefined(); }); it("has fast-check as a devDep only", { timeout: 5000 }, () => { expect(pkg.devDependencies["fast-check"]).toBeDefined(); expect(pkg.dependencies["fast-check"]).toBeUndefined(); }); it("has mitata as a devDep only", { timeout: 5000 }, () => { expect(pkg.devDependencies["mitata"]).toBeDefined(); expect(pkg.dependencies["mitata"]).toBeUndefined(); }); });