/** * Verify that the runtime dependencies declared in package.json match those * actually required by 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 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 @opentelemetry/api as a runtime dep", { timeout: 5000 }, () => { expect(pkg.dependencies["@opentelemetry/api"]).toBeDefined(); }); it("does NOT have @suaveplan/error as a runtime dep (leaf package)", { timeout: 5000, }, () => { expect(pkg.dependencies["@suaveplan/error"]).toBeUndefined(); }); it("does NOT have @suaveplan/types as a runtime dep (leaf package)", { timeout: 5000, }, () => { expect(pkg.dependencies["@suaveplan/types"]).toBeUndefined(); }); it("has vitest as a devDep only", { timeout: 5000 }, () => { expect(pkg.devDependencies["vitest"]).toBeDefined(); expect(pkg.dependencies["vitest"]).toBeUndefined(); }); it("has @vitest/coverage-istanbul as a devDep only", { timeout: 5000, }, () => { expect(pkg.devDependencies["@vitest/coverage-istanbul"]).toBeDefined(); expect(pkg.dependencies["@vitest/coverage-istanbul"]).toBeUndefined(); }); });