Files
2026-03-27 10:51:14 +08:00

54 lines
2.0 KiB
TypeScript

import { expect, test } from "bun:test";
import { existsSync, readFileSync } from "node:fs";
import { resolve } from "node:path";
const repoRoot = resolve(import.meta.dir, "..");
function normalizeBinTarget(target: string | undefined) {
return target?.replace(/^[.][/\\]/, "");
}
test("uses package scripts that point at the skvlt cli entrypoint", () => {
const packageJson = JSON.parse(
readFileSync(resolve(repoRoot, "package.json"), "utf8"),
) as {
bin?: Record<string, string>;
engines?: Record<string, string>;
name?: string;
publishConfig?: Record<string, string>;
scripts?: Record<string, string>;
};
expect(packageJson.name).toBe("skvlt");
expect(normalizeBinTarget(packageJson.bin?.skvlt)).toBe("src/cli.ts");
expect(packageJson.engines?.bun).toBe(">=1.3.11");
expect(packageJson.publishConfig?.access).toBe("public");
expect(packageJson.scripts?.backup).toBe("bun run ./src/cli.ts backup");
expect(packageJson.scripts?.restore).toBe("bun run ./src/cli.ts restore");
expect(packageJson.scripts?.test).toBe("bun test");
expect(packageJson.scripts?.check).toBe(
"bun run format:check && bun test && npm pack --dry-run --json",
);
expect(packageJson.scripts?.["publish:check"]).toBe("bun run check");
expect(packageJson.scripts?.prepublishOnly).toBe("bun run publish:check");
expect(packageJson.scripts?.format).toContain("prettier --write");
expect(Object.values(packageJson.scripts ?? {})).not.toContain(
expect.stringContaining("scripts/"),
);
});
test("does not keep a legacy scripts directory in the package layout", () => {
expect(existsSync(resolve(repoRoot, "scripts"))).toBe(false);
});
test("includes a publishable readme that documents the Bun runtime", () => {
const readmePath = resolve(repoRoot, "README.md");
expect(existsSync(readmePath)).toBe(true);
const readme = readFileSync(readmePath, "utf8");
expect(readme).toContain("Skills Vault");
expect(readme).toContain("Bun-only runtime");
expect(readme).toContain("npm publish --access public");
});