46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
|
|
describe("dep-graph", () => {
|
|
it("runtime deps are locked to the approved set", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const pkg = JSON.parse(
|
|
readFileSync(join(__dirname, "..", "package.json"), "utf8")
|
|
) as { dependencies?: Record<string, string> };
|
|
const runtime = Object.keys(pkg.dependencies ?? {}).sort();
|
|
expect(runtime).toEqual([
|
|
"@suaveplan/crypto-cipher",
|
|
"@suaveplan/crypto-curve",
|
|
"@suaveplan/crypto-hash",
|
|
"@suaveplan/crypto-utils",
|
|
"@suaveplan/error",
|
|
"@suaveplan/types",
|
|
"tslib",
|
|
"zod",
|
|
]);
|
|
});
|
|
|
|
it("no peerDependencies", { timeout: 5000 }, () => {
|
|
const pkg = JSON.parse(
|
|
readFileSync(join(__dirname, "..", "package.json"), "utf8")
|
|
) as { peerDependencies?: Record<string, string> };
|
|
expect(pkg.peerDependencies).toBeUndefined();
|
|
});
|
|
|
|
it("does not depend on any @noble/* package directly", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
// Every @noble/* import must go through one of the @suaveplan/crypto-*
|
|
// selector packages. check-crypto-selects enforces the impl routing.
|
|
const pkg = JSON.parse(
|
|
readFileSync(join(__dirname, "..", "package.json"), "utf8")
|
|
) as { dependencies?: Record<string, string> };
|
|
const nobleDeps = Object.keys(pkg.dependencies ?? {}).filter((d) =>
|
|
d.startsWith("@noble/")
|
|
);
|
|
expect(nobleDeps).toEqual([]);
|
|
});
|
|
});
|