52 lines
2.1 KiB
TypeScript
52 lines
2.1 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
import { resolve } from "node:path";
|
|
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
import * as pkg from "./index.js";
|
|
|
|
describe("public package surface", () => {
|
|
it("every documented subpath export resolves", {
|
|
timeout: 5000,
|
|
}, async () => {
|
|
await import("./range/range.js");
|
|
await import("./range/range-mode.js");
|
|
await import("./breach/breach-client.js");
|
|
await import("./cache/cache.js");
|
|
await import("./cache/lru.js");
|
|
await import("./cache/null.js");
|
|
await import("./client/client.js");
|
|
await import("./client/options.schema.js");
|
|
await import("./errors/codes.js");
|
|
await import("./errors/hibp-error.js");
|
|
await import("./schemas/breach.schema.js");
|
|
await import("./schemas/paste.schema.js");
|
|
await import("./schemas/pwned-result.schema.js");
|
|
await import("./observability/metrics.js");
|
|
expect(true).toBe(true);
|
|
});
|
|
|
|
it("root barrel uses explicit named re-exports", { timeout: 5000 }, () => {
|
|
const indexPath = resolve(import.meta.dirname, "index.ts");
|
|
const content = readFileSync(indexPath, "utf8");
|
|
const exportStar = content
|
|
.split("\n")
|
|
.filter((l) => /^\s*export\s+\*\s+from\b/.test(l));
|
|
// Allow namespace re-exports (`export * as ns from ...`) but not
|
|
// bare `export * from ...`.
|
|
expect(exportStar).toEqual([]);
|
|
});
|
|
|
|
it("named exports include the documented surface", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
expect(typeof pkg.HibpClient).toBe("function");
|
|
expect(typeof pkg.RangeClient).toBe("function");
|
|
expect(typeof pkg.BreachClient).toBe("function");
|
|
expect(typeof pkg.LruHibpCache).toBe("function");
|
|
expect(typeof pkg.NullHibpCache).toBe("function");
|
|
expect(typeof pkg.RateLimitGate).toBe("function");
|
|
expect(typeof pkg.HibpError).toBe("function");
|
|
expect(typeof pkg.HIBP_CODES).toBe("object");
|
|
expect(typeof pkg.BreachSchema.parse).toBe("function");
|
|
});
|
|
});
|