import { readFileSync } from "node:fs"; import { join } from "node:path"; import { describe, expect, it } from "@suaveplan/testing/runner"; const pkgPath = join(__dirname, "..", "package.json"); const pkg = JSON.parse(readFileSync(pkgPath, "utf8")) as { name: string; version: string; sideEffects: boolean; dependencies: Record; devDependencies: Record; exports: Record; files: string[]; }; describe("@suaveplan/emailer package.json", () => { it("starts at 0.1.0", { timeout: 5000 }, () => { expect(pkg.version).toBe("0.1.0"); }); it("is tree-shake friendly", { timeout: 5000 }, () => { expect(pkg.sideEffects).toBe(false); }); it("depends on declared workspace siblings only", { timeout: 5000 }, () => { for (const dep of [ "@suaveplan/error", "@suaveplan/events", "@suaveplan/logger", "@suaveplan/queue", "@suaveplan/timing", "@suaveplan/types", ]) { expect(pkg.dependencies[dep]).toBe("workspace:^"); } // No nodemailer / googleapis hard deps. expect(pkg.dependencies["nodemailer"]).toBeUndefined(); expect(pkg.dependencies["googleapis"]).toBeUndefined(); }); it("declares subpath exports", { timeout: 5000 }, () => { for (const subpath of [ ".", "./error-codes", "./schemas/schemas", "./types/emailer", "./core/email-service", "./core/retry", "./core/validate", "./transports/dummy", "./transports/smtp", "./transports/gmail-rest", "./fakes/fake-smtp-client", "./otel/metrics", ]) { expect(pkg.exports[subpath]).toBeDefined(); } }); it("publishes dist, src, README.md", { timeout: 5000 }, () => { expect(pkg.files).toEqual(["dist", "src", "README.md"]); }); });